|
|
1.1 root 1: /*
2: * Copyright (c) 1983 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that: (1) source distributions retain this entire copyright
7: * notice and comment, and (2) distributions including binaries display
8: * the following acknowledgement: ``This product includes software
9: * developed by the University of California, Berkeley and its contributors''
10: * in the documentation or other materials provided with the distribution
11: * and in all advertising materials mentioning features or use of this
12: * software. Neither the name of the University nor the names of its
13: * contributors may be used to endorse or promote products derived
14: * from this software without specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: */
19:
20: #ifndef lint
21: static char sccsid[] = "@(#)com3.c 5.3 (Berkeley) 6/1/90";
22: #endif /* not lint */
23:
24: #include "externs.h"
25:
26: dig()
27: {
28: if (testbit(inven,SHOVEL)){
29: puts("OK");
30: time++;
31: switch(position){
32: case 144: /* copse near beach */
33: if (!notes[DUG]){
34: setbit(location[position].objects,DEADWOOD);
35: setbit(location[position].objects,COMPASS);
36: setbit(location[position].objects,KNIFE);
37: setbit(location[position].objects,MACE);
38: notes[DUG] = 1;
39: }
40: break;
41:
42: default:
43: puts("Nothing happens.");
44: }
45: }
46: else
47: puts("You don't have a shovel.");
48: }
49:
50: jump()
51: {
52: register int n;
53:
54: switch(position){
55: default:
56: puts("Nothing happens.");
57: return(-1);
58:
59: case 242:
60: position = 133;
61: break;
62: case 214:
63: case 215:
64: case 162:
65: case 159:
66: position = 145;
67: break;
68: case 232:
69: position = 275;
70: break;
71: case 3:
72: position = 1;
73: break;
74: case 172:
75: position = 201;
76: }
77: puts("Ahhhhhhh...");
78: injuries[12] = injuries[8] = injuries[7] = injuries[6] = 1;
79: for (n=0; n < NUMOFOBJECTS; n++)
80: if (testbit(inven,n)){
81: clearbit(inven,n);
82: setbit(location[position].objects,n);
83: }
84: carrying = 0;
85: encumber = 0;
86: return(0);
87: }
88:
89: bury()
90: {
91: int value;
92:
93: if (testbit(inven,SHOVEL)){
94: while(wordtype[++wordnumber] != OBJECT && wordtype[wordnumber] != NOUNS && wordnumber < wordcount);
95: value = wordvalue[wordnumber];
96: if (wordtype[wordnumber] == NOUNS && (testbit(location[position].objects,value) || value == BODY))
97: switch(value){
98: case BODY:
99: wordtype[wordnumber] = OBJECT;
100: if (testbit(inven,MAID) || testbit(location[position].objects,MAID))
101: value = MAID;
102: if (testbit(inven,DEADWOOD) || testbit(location[position].objects,DEADWOOD))
103: value = DEADWOOD;
104: if (testbit(inven,DEADGOD) || testbit(location[position].objects,DEADGOD))
105: value = DEADGOD;
106: if (testbit(inven,DEADTIME) || testbit(location[position].objects,DEADTIME))
107: value = DEADTIME;
108: if (testbit(inven,DEADNATIVE) || testbit(location[position].objects,DEADNATIVE))
109: value = DEADNATIVE;
110: break;
111:
112: case NATIVE:
113: case NORMGOD:
114: puts("She screams as you wrestle her into the hole.");
115: case TIMER:
116: power += 7;
117: ego -= 10;
118: case AMULET:
119: case MEDALION:
120: case TALISMAN:
121: wordtype[wordnumber] = OBJECT;
122: break;
123:
124: default:
125: puts("Wha..?");
126: }
127: if (wordtype[wordnumber] == OBJECT && position > 88 && (testbit(inven,value) || testbit(location[position].objects,value))){
128: puts("Buried.");
129: if (testbit(inven,value)){
130: clearbit(inven,value);
131: carrying -= objwt[value];
132: encumber -= objcumber[value];
133: }
134: clearbit(location[position].objects,value);
135: switch(value){
136: case MAID:
137: case DEADWOOD:
138: case DEADNATIVE:
139: case DEADTIME:
140: case DEADGOD:
141: ego += 2;
142: printf("The %s should rest easier now.\n",objsht[value]);
143: }
144: }
145: else
146: puts("It doesn't seem to work.");
147: }
148: else
149: puts("You aren't holding a shovel.");
150: }
151:
152: drink()
153: {
154: register int n;
155:
156: if (testbit(inven,POTION)){
157: puts("The cool liquid runs down your throat but turns to fire and you choke.");
158: puts("The heat reaches your limbs and tingles your spirit. You feel like falling");
159: puts("asleep.");
160: clearbit(inven, POTION);
161: WEIGHT = MAXWEIGHT;
162: CUMBER = MAXCUMBER;
163: for (n=0; n < NUMOFINJURIES; n++)
164: injuries[n] = 0;
165: time++;
166: zzz();
167: }
168: else
169: puts("I'm not thirsty.");
170: }
171:
172: shoot()
173: {
174: int firstnumber, value;
175: register int n;
176:
177: if (!testbit(inven,LASER))
178: puts("You aren't holding a blaster.");
179: else {
180: firstnumber = wordnumber;
181: while(wordtype[++wordnumber] == ADJS);
182: while(wordnumber<=wordcount && wordtype[wordnumber] == OBJECT){
183: value = wordvalue[wordnumber];
184: printf("%s:\n", objsht[value]);
185: for (n=0; objsht[value][n]; n++);
186: if (testbit(location[position].objects,value)){
187: clearbit(location[position].objects,value);
188: time++;
189: printf("The %s explode%s\n",objsht[value],(objsht[value][n-1]=='s' ? (objsht[value][n-2]=='s' ? "s." : ".") : "s."));
190: if (value == BOMB)
191: die();
192: }
193: else
194: printf("I dont see any %s around here.\n", objsht[value]);
195: if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
196: wordnumber++;
197: else
198: return(firstnumber);
199: }
200: /* special cases with their own return()'s */
201:
202: if (wordnumber <= wordcount && wordtype[wordnumber] == NOUNS){
203: time++;
204: switch(wordvalue[wordnumber]){
205:
206: case DOOR:
207: switch(position){
208: case 189:
209: case 231:
210: puts("The door is unhinged.");
211: location[189].north = 231;
212: location[231].south = 189;
213: whichway(location[position]);
214: break;
215: case 30:
216: puts("The wooden door splinters.");
217: location[30].west = 25;
218: whichway(location[position]);
219: break;
220: case 31:
221: puts("The laser blast has no effect on the door.");
222: break;
223: case 20:
224: puts("The blast hits the door and it explodes into flame. The magnesium burns");
225: puts("so rapidly that we have no chance to escape.");
226: die();
227: default:
228: puts("Nothing happens.");
229: }
230: break;
231:
232: case NORMGOD:
233: if (testbit(location[position].objects,BATHGOD)){
234: puts("The goddess is hit in the chest and splashes back against the rocks.");
235: puts("Dark blood oozes from the charred blast hole. Her naked body floats in the");
236: puts("pools and then off downstream.");
237: clearbit(location[position].objects,BATHGOD);
238: setbit(location[180].objects,DEADGOD);
239: power += 5;
240: ego -= 10;
241: notes[JINXED]++;
242: } else if (testbit(location[position].objects,NORMGOD)){
243: puts("The blast catches the goddess in the stomach, knocking her to the ground.");
244: puts("She writhes in the dirt as the agony of death taunts her.");
245: puts("She has stopped moving.");
246: clearbit(location[position].objects,NORMGOD);
247: setbit(location[position].objects,DEADGOD);
248: power += 5;
249: ego -= 10;
250: notes[JINXED]++;
251: if (wintime)
252: live();
253: break;
254: } else
255: puts("I don't see any goddess around here.");
256: break;
257:
258: case TIMER:
259: if (testbit(location[position].objects,TIMER)){
260: puts("The old man slumps over the bar.");
261: power++;
262: ego -= 2;
263: notes[JINXED]++;
264: clearbit(location[position].objects,TIMER);
265: setbit(location[position].objects,DEADTIME);
266: }
267: else puts("What old timer?");
268: break;
269: case MAN:
270: if (testbit(location[position].objects,MAN)){
271: puts("The man falls to the ground with blood pouring all over his white suit.");
272: puts("Your fantasy is over.");
273: die();
274: }
275: else puts("What man?");
276: break;
277: case NATIVE:
278: if (testbit(location[position].objects,NATIVE)){
279: puts("The girl is blown backwards several feet and lies in a pool of blood.");
280: clearbit(location[position].objects,NATIVE);
281: setbit(location[position].objects,DEADNATIVE);
282: power += 5;
283: ego -= 2;
284: notes[JINXED]++;
285: } else puts("There is no girl here.");
286: break;
287: case -1:
288: puts("Shoot what?");
289: break;
290:
291: default:
292: printf("You can't shoot the %s.\n",objsht[wordvalue[wordnumber]]);
293: }
294: }
295: else puts("You must be a looney.");
296: }
297: return(firstnumber);
298: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.