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