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