date and time created 87/02/15 22:32:26 by lepreau
[unix-history] / usr / src / games / battlestar / com2.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
354f3094 7#ifndef lint
fdc7d56f 8static char sccsid[] = "@(#)com2.c 1.3 %G%";
354f3094
EW
9#endif
10
11#include "externs.h"
12
13wearit() /* synonyms = {sheathe, sheath} */
14{
15 register int n;
16 int firstnumber, value;
17
18 firstnumber = wordnumber;
19 while(wordtype[++wordnumber] == ADJS);
20 while(wordnumber <= wordcount){
21 value = wordvalue[wordnumber];
22 for (n=0; objsht[value][n]; n++);
23 switch(value){
24
25 case -1:
26 puts("Wear what?");
27 return(firstnumber);
28
29 default:
30 printf("You can't wear%s%s!\n",(objsht[value][n-1] == 's' ? " " : " a "),objsht[value]);
31 return(firstnumber);
32
33 case KNIFE:
34 /* case SHIRT: */
35 case ROBE:
36 case LEVIS: /* wearable things */
37 case SWORD:
38 case MAIL:
39 case HELM:
40 case SHOES:
41 case PAJAMAS:
42 case COMPASS:
43 case LASER:
44 case AMULET:
45 case TALISMAN:
46 case MEDALION:
47 case ROPE:
48 case RING:
49 case BRACELET:
50 case GRENADE:
51
52 if (testbit(inven,value)){
53 clearbit(inven,value);
54 setbit(wear,value);
55 carrying -= objwt[value];
56 encumber -= objcumber[value];
57 time++;
58 printf("You are now wearing %s %s.\n",(objsht[value][n-1] == 's' ? "the" : "a"), objsht[value]);
59 }
60 else if (testbit(wear,value))
61 printf("You are already wearing the %s.\n", objsht[value]);
62 else
63 printf("You aren't holding the %s.\n", objsht[value]);
64 if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
65 wordnumber++;
66 else
67 return(firstnumber);
68 } /* end switch */
69 } /* end while */
70 puts("Don't be ridiculous.");
71 return(firstnumber);
72}
73
74put() /* synonyms = {buckle, strap, tie} */
75{
76 if (wordvalue[wordnumber + 1] == ON){
77 wordvalue[++wordnumber] = PUTON;
78 return(cypher());
79 }
80 if (wordvalue[wordnumber + 1] == DOWN){
81 wordvalue[++wordnumber] = DROP;
82 return(cypher());
83 }
84 puts("I don't understand what you want to put.");
85 return(-1);
86
87}
88
89draw() /* synonyms = {pull, carry} */
90{
91 return(take(wear));
92}
93
94use()
95{
96 while (wordtype[++wordnumber] == ADJS && wordnumber < wordcount);
97 if (wordvalue[wordnumber] == AMULET && testbit(inven,AMULET) && position != FINAL){
98 puts("The amulet begins to glow.");
99 if (testbit(inven,MEDALION)){
100 puts("The medallion comes to life too.");
101 if (position == 114){
102 location[position].down = 160;
103 whichway(location[position]);
104 puts("The waves subside and it is possible to descend to the sea cave now.");
105 time++;
106 return(-1);
107 }
108 }
109 puts("A light mist falls over your eyes and the sound of purling water trickles in");
110 puts("your ears. When the mist lifts you are standing beside a cool stream.");
111 if (position == 229)
112 position = 224;
113 else
114 position = 229;
115 time++;
116 return(0);
117 }
118 else if (position == FINAL)
119 puts("The amulet won't work in here.");
120 else if (wordvalue[wordnumber] == COMPASS && testbit(inven,COMPASS))
121 printf("Your compass points %s.\n",truedirec(NORTH,'-'));
122 else if (wordvalue[wordnumber] == COMPASS)
123 puts("You aren't holding the compass.");
124 else if (wordvalue[wordnumber] == AMULET)
125 puts("You aren't holding the amulet.");
126 else
127 puts("There is no apparent use.");
128 return(-1);
129}
130
131murder()
132{
133 register int n;
134
135 for (n=0; !((n == SWORD || n == KNIFE || n == TWO_HANDED || n == MACE || n == CLEAVER || n == BROAD || n == CHAIN || n == SHOVEL || n == HALBERD) && testbit(inven,n)) && n < NUMOFOBJECTS; n++);
136 if (n == NUMOFOBJECTS)
137 puts("You don't have suitable weapons to kill.");
138 else {
139 printf("Your %s should do the trick.\n",objsht[n]);
140 while (wordtype[++wordnumber] == ADJS);
141 switch(wordvalue[wordnumber]){
142
143 case NORMGOD:
144 if (testbit(location[position].objects,BATHGOD)){
145 puts("The goddess's head slices off. Her corpse floats in the water.");
146 clearbit(location[position].objects,BATHGOD);
147 setbit(location[position].objects,DEADGOD);
148 power += 5;
149 notes[JINXED]++;
150 } else if (testbit(location[position].objects,NORMGOD)){
151 puts("The goddess pleads but you strike her mercilessly. Her broken body lies in a\npool of blood.");
152 clearbit(location[position].objects,NORMGOD);
153 setbit(location[position].objects,DEADGOD);
154 power += 5;
155 notes[JINXED]++;
156 if (wintime)
157 live();
158 } else puts("I dont see her anywhere.");
159 break;
160 case TIMER:
161 if (testbit(location[position].objects,TIMER)){
162 puts("The old man offers no resistance.");
163 clearbit(location[position].objects,TIMER);
164 setbit(location[position].objects,DEADTIME);
165 power++;
166 notes[JINXED]++;
167 } else puts("Who?");
168 break;
169 case NATIVE:
170 if (testbit(location[position].objects,NATIVE)){
171 puts("The girl screams as you cut her body to shreds. She is dead.");
172 clearbit(location[position].objects,NATIVE);
173 setbit(location[position].objects,DEADNATIVE);
174 power += 5;
175 notes[JINXED]++;
176 } else puts("What girl?");
177 break;
178 case MAN:
179 if (testbit(location[position].objects,MAN)){
a7c71d1e 180 puts("You strike him to the ground, and he coughs up blood.");
354f3094
EW
181 puts("Your fantasy is over.");
182 die();
183 }
184 case -1:
185 puts("Kill what?");
186 break;
187
188 default:
189 if (wordtype[wordnumber] != NOUNS)
190 puts("Kill what?");
191 else
192 printf("You can't kill the %s!\n",objsht[wordvalue[wordnumber]]);
193 }
194 }
195}
196
197ravage()
198{
199 while (wordtype[++wordnumber] != NOUNS && wordnumber <= wordcount);
200 if (wordtype[wordnumber] == NOUNS && testbit(location[position].objects,wordvalue[wordnumber])){
201 time++;
202 switch(wordvalue[wordnumber]){
203 case NORMGOD:
a7c71d1e 204 puts("You attack the goddess, and she screams as you beat her. She falls down");
354f3094
EW
205 puts("crying and tries to hold her torn and bloodied dress around her.");
206 power += 5;
207 pleasure += 8;
208 ego -= 10;
209 wordnumber--;
210 godready = -30000;
211 murder();
212 win = -30000;
213 break;
214 case NATIVE:
a7c71d1e
EW
215 puts("The girl tries to run, but you catch her and throw her down. Her face is");
216 puts("bleeding, and she screams as you tear off her clothes.");
354f3094
EW
217 power += 3;
218 pleasure += 5;
219 ego -= 10;
220 wordnumber--;
221 murder();
a7c71d1e 222 if (rnd(100) < 50){
354f3094
EW
223 puts("Her screams have attracted attention. I think we are surrounded.");
224 setbit(location[ahead].objects,WOODSMAN);
225 setbit(location[ahead].objects,DEADWOOD);
226 setbit(location[ahead].objects,MALLET);
227 setbit(location[back].objects,WOODSMAN);
228 setbit(location[back].objects,DEADWOOD);
229 setbit(location[back].objects,MALLET);
230 setbit(location[left].objects,WOODSMAN);
231 setbit(location[left].objects,DEADWOOD);
232 setbit(location[left].objects,MALLET);
233 setbit(location[right].objects,WOODSMAN);
234 setbit(location[right].objects,DEADWOOD);
235 setbit(location[right].objects,MALLET);
236 }
237 break;
238 default:
239 puts("You are perverted.");
240 }
241 }
242 else
243 puts("Who?");
244}
245
246follow()
247{
248 if (followfight == time){
a7c71d1e
EW
249 puts("The Dark Lord leaps away and runs down secret tunnels and corridoors.");
250 puts("You chase him through the darkness and splash in pools of water.");
251 puts("You have cornered him. His laser sword extends as he steps forward.");
354f3094
EW
252 position = FINAL;
253 fight(DARK,75);
254 setbit(location[position].objects,TALISMAN);
255 setbit(location[position].objects,AMULET);
256 return(0);
257 }
258 else if (followgod == time){
259 puts("The goddess leads you down a steamy tunnel and into a high, wide chamber.");
260 puts("She sits down on a throne.");
261 position = 268;
262 setbit(location[position].objects,NORMGOD);
263 notes[CANTSEE] = 1;
264 return(0);
265 }
266 else
267 puts("There is no one to follow.");
268 return(-1);
269}