mv machine dependend from sys_process.c
[unix-history] / usr / src / games / battlestar / com3.c
CommitLineData
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 8static char sccsid[] = "@(#)com3.c 1.2 %G%";
75f401f6
EW
9#endif
10
11#include "externs.h"
12
13dig()
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
37jump()
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
76bury()
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
139drink()
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
159shoot()
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}