Commit | Line | Data |
---|---|---|
fdc7d56f EW |
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 | ||
75f401f6 | 7 | #ifndef lint |
fdc7d56f | 8 | static char sccsid[] = "@(#)com3.c 1.2 %G%"; |
75f401f6 EW |
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 | } |