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