]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - games/battlestar/cypher.c
This commit was generated by cvs2svn to compensate for changes in r62914,
[FreeBSD/FreeBSD.git] / games / battlestar / cypher.c
1 /*
2  * Copyright (c) 1983, 1993
3  *      The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *      This product includes software developed by the University of
16  *      California, Berkeley and its contributors.
17  * 4. Neither the name of the University nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  */
33
34 #ifndef lint
35 #if 0
36 static char sccsid[] = "@(#)cypher.c    8.1 (Berkeley) 5/31/93";
37 #endif
38 static const char rcsid[] =
39  "$FreeBSD$";
40 #endif /* not lint */
41
42 #include "externs.h"
43
44 cypher()
45 {
46         int n;
47         int junk;
48         int lflag = -1;
49         char buffer[10];
50
51         while (wordtype[wordnumber] == ADJS)
52                 wordnumber++;
53         while (wordnumber <= wordcount) {
54                 switch(wordvalue[wordnumber]) {
55
56                         case UP:
57                                 if (location[position].access || wiz || tempwiz) {
58                                         if (!location[position].access)
59                                                 puts("Zap!  A gust of wind lifts you up.");
60                                         if (!move(location[position].up, AHEAD))
61                                                 return(-1);
62                                 } else {
63                                         puts("There is no way up");
64                                         return(-1);
65                                 }
66                                 lflag = 0;
67                                 break;
68
69                          case DOWN:
70                                 if (!move(location[position].down, AHEAD))
71                                         return(-1);
72                                 lflag = 0;
73                                 break;
74
75                          case LEFT:
76                                 if (!move(left, LEFT))
77                                         return(-1);
78                                 lflag = 0;
79                                 break;
80
81                          case RIGHT:
82                                 if (!move(right, RIGHT))
83                                         return(-1);
84                                 lflag = 0;
85                                 break;
86
87                          case AHEAD:
88                                 if (!move(ahead, AHEAD))
89                                         return(-1);
90                                 lflag = 0;
91                                 break;
92
93                          case BACK:
94                                 if (!move(back, BACK))
95                                         return(-1);
96                                 lflag = 0;
97                                 break;
98
99                          case SHOOT:
100                                 if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
101                                         for (n=0; n < NUMOFOBJECTS; n++)
102                                                 if (testbit(location[position].objects,n) && objsht[n]){
103                                                         wordvalue[wordnumber+1] = n;
104                                                         wordnumber = shoot();
105                                                 }
106                                 wordnumber++;
107                                 wordnumber++;
108                                 }
109                                 else
110                                         shoot();
111                                 break;
112
113                          case TAKE:
114                                 if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
115                                         for (n=0; n < NUMOFOBJECTS; n++)
116                                                 if (testbit(location[position].objects,n) && objsht[n]){
117                                                         wordvalue[wordnumber+1] = n;
118                                                         wordnumber = take(location[position].objects);
119                                                 }
120                                 wordnumber++;
121                                 wordnumber++;
122                                 }
123                                 else
124                                         take(location[position].objects);
125                                 break;
126
127                          case DROP:
128
129                                 if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
130                                         for (n=0; n < NUMOFOBJECTS; n++)
131                                                 if (testbit(inven,n)){
132                                                         wordvalue[wordnumber+1] = n;
133                                                         wordnumber = drop("Dropped");
134                                                 }
135                                 wordnumber++;
136                                 wordnumber++;
137                                 }
138                                 else
139                                         drop("Dropped");
140                                 break;
141
142
143                          case KICK:
144                          case THROW:
145                                 if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
146                                         for (n=0; n < NUMOFOBJECTS; n++)
147                                                 if (testbit(inven,n) ||
148                                                   testbit(location[position].objects, n) && objsht[n]){
149                                                         wordvalue[wordnumber+1] = n;
150                                                         wordnumber = throw(wordvalue[wordnumber] == KICK ? "Kicked" : "Thrown");
151                                                 }
152                                         wordnumber += 2;
153                                 } else
154                                         throw(wordvalue[wordnumber] == KICK ? "Kicked" : "Thrown");
155                                 break;
156
157                          case TAKEOFF:
158                                 if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
159                                         for (n=0; n < NUMOFOBJECTS; n++)
160                                                 if (testbit(wear,n)){
161                                                         wordvalue[wordnumber+1] = n;
162                                                         wordnumber = takeoff();
163                                                 }
164                                         wordnumber += 2;
165                                 }
166                                 else
167                                         takeoff();
168                                 break;
169
170
171                          case DRAW:
172
173                                 if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
174                                         for (n=0; n < NUMOFOBJECTS; n++)
175                                                 if (testbit(wear,n)){
176                                                         wordvalue[wordnumber+1] = n;
177                                                         wordnumber = draw();
178                                                 }
179                                         wordnumber += 2;
180                                 }
181                                 else
182                                         draw();
183                                 break;
184
185
186                          case PUTON:
187
188                                 if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
189                                         for (n=0; n < NUMOFOBJECTS; n++)
190                                                 if (testbit(location[position].objects,n) && objsht[n]){
191                                                         wordvalue[wordnumber+1] = n;
192                                                         wordnumber = puton();
193                                                 }
194                                         wordnumber += 2;
195                                 }
196                                 else
197                                         puton();
198                                 break;
199
200                          case WEARIT:
201
202                                 if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
203                                         for (n=0; n < NUMOFOBJECTS; n++)
204                                                 if (testbit(inven,n)){
205                                                         wordvalue[wordnumber+1] = n;
206                                                         wordnumber = wearit();
207                                                 }
208                                         wordnumber += 2;
209                                 }
210                                 else
211                                         wearit();
212                                 break;
213
214
215                          case EAT:
216
217                                 if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
218                                         for (n=0; n < NUMOFOBJECTS; n++)
219                                                 if (testbit(inven,n)){
220                                                         wordvalue[wordnumber+1] = n;
221                                                         wordnumber = eat();
222                                                 }
223                                         wordnumber += 2;
224                                 }
225                                 else
226                                         eat();
227                                 break;
228
229
230                         case PUT:
231                                 put();
232                                 break;
233
234
235                         case INVEN:
236                                 if (ucard(inven)){
237                                         puts("You are holding:\n");
238                                         for (n=0; n < NUMOFOBJECTS; n++)
239                                                 if (testbit(inven,n))
240                                                         printf("\t%s\n", objsht[n]);
241                                         printf("\n= %d kilogram%s (%d%%)\n", carrying, (carrying == 1 ? "." : "s."),(WEIGHT ? carrying*100/WEIGHT : -1));
242                                         printf("Your arms are %d%% full.\n",encumber*100/CUMBER);
243                                 }
244                                 else
245                                         puts("You aren't carrying anything.");
246
247                                 if (ucard(wear)){
248                                         puts("\nYou are wearing:\n");
249                                         for (n=0; n < NUMOFOBJECTS; n++)
250                                                 if (testbit(wear,n))
251                                                         printf("\t%s\n", objsht[n]);
252                                 }
253                                 else
254                                         puts("\nYou are stark naked.");
255                                 if (card(injuries,NUMOFINJURIES)){
256                                         puts("\nYou have suffered:\n");
257                                         for (n=0; n < NUMOFINJURIES; n++)
258                                                 if (injuries[n])
259                                                         printf("\t%s\n",ouch[n]);
260                                         printf("\nYou can still carry up to %d kilogram%s\n",WEIGHT,(WEIGHT == 1 ? "." : "s."));
261                                 }
262                                 else
263                                         puts("\nYou are in perfect health.");
264                                 break;
265
266                         case USE:
267                                 lflag = use();
268                                 break;
269
270                         case LOOK:
271                                 if (!notes[CANTSEE] || testbit(inven,LAMPON) || testbit(location[position].objects,LAMPON) || matchlight){
272                                         beenthere[position] = 2;
273                                         writedes();
274                                         printobjs();
275                                         if (matchlight){
276                                                 puts("\nYour match splutters out.");
277                                                 matchlight = 0;
278                                         }
279                                 } else
280                                         puts("I can't see anything.");
281                                 return(-1);
282                                 break;
283
284                          case SU:
285                          if (wiz || tempwiz){
286                                 printf("\nRoom (was %d) = ", position);
287                                 fgets(buffer,10,stdin);
288                                 if (*buffer != '\n')
289                                         sscanf(buffer,"%d", &position);
290                                 printf("Time (was %d) = ",gtime);
291                                 fgets(buffer,10,stdin);
292                                 if (*buffer != '\n')
293                                         sscanf(buffer,"%d", &gtime);
294                                 printf("Fuel (was %d) = ",fuel);
295                                 fgets(buffer,10,stdin);
296                                 if (*buffer != '\n')
297                                         sscanf(buffer,"%d", &fuel);
298                                 printf("Torps (was %d) = ",torps);
299                                 fgets(buffer,10,stdin);
300                                 if (*buffer != '\n')
301                                         sscanf(buffer,"%d", &torps);
302                                 printf("CUMBER (was %d) = ",CUMBER);
303                                 fgets(buffer,10,stdin);
304                                 if (*buffer != '\n')
305                                         sscanf(buffer,"%d", &CUMBER);
306                                 printf("WEIGHT (was %d) = ",WEIGHT);
307                                 fgets(buffer,10,stdin);
308                                 if (*buffer != '\n')
309                                         sscanf(buffer,"%d",&WEIGHT);
310                                 printf("Clock (was %d) = ",gclock);
311                                 fgets(buffer,10,stdin);
312                                 if (*buffer != '\n')
313                                         sscanf(buffer,"%d",&gclock);
314                                 printf("Wizard (was %d, %d) = ",wiz, tempwiz);
315                                 fgets(buffer,10,stdin);
316                                 if (*buffer != '\n'){
317                                         sscanf(buffer,"%d",&junk);
318                                         if (!junk)
319                                                 tempwiz = wiz = 0;
320                                 }
321                                 printf("\nDONE.\n");
322                                 return(0);
323                          }
324                          else
325                                  puts("You aren't a wizard.");
326                          break;
327
328                          case SCORE:
329                                 printf("\tPLEASURE\tPOWER\t\tEGO\n");
330                                 printf("\t%3d\t\t%3d\t\t%3d\n\n",pleasure,power,ego);
331                                 printf("This gives you the rating of %s in %d turns.\n",rate(),gtime);
332                                 printf("You have visited %d out of %d rooms this run (%d%%).\n",card(beenthere,NUMOFROOMS),NUMOFROOMS,card(beenthere,NUMOFROOMS)*100/NUMOFROOMS);
333                                 break;
334
335                          case KNIFE:
336                          case KILL:
337                                 murder();
338                                 break;
339
340                          case UNDRESS:
341                          case RAVAGE:
342                                 ravage();
343                                 break;
344
345                          case SAVE:
346                                 save();
347                                 break;
348
349                          case FOLLOW:
350                                 lflag = follow();
351                                 break;
352
353                          case GIVE:
354                                 give();
355                                 break;
356
357                          case KISS:
358                                 kiss();
359                                 break;
360
361                          case LOVE:
362                                  love();
363                                  break;
364
365                          case RIDE:
366                                 lflag = ride();
367                                 break;
368
369                          case DRIVE:
370                                 lflag = drive();
371                                 break;
372
373                          case LIGHT:
374                                  light();
375                                  break;
376
377                          case LAUNCH:
378                                 if (!launch())
379                                         return(-1);
380                                 else
381                                         lflag = 0;
382                                 break;
383
384                         case LANDIT:
385                                 if (!land())
386                                         return(-1);
387                                 else
388                                         lflag = 0;
389                                 break;
390
391                         case TIME:
392                                 chime();
393                                 break;
394
395                          case SLEEP:
396                                 zzz();
397                                 break;
398
399                          case DIG:
400                                 dig();
401                                 break;
402
403                          case JUMP:
404                                 lflag = jump();
405                                 break;
406
407                          case BURY:
408                                 bury();
409                                 break;
410
411                          case SWIM:
412                                 puts("Surf's up!");
413                                 break;
414
415                          case DRINK:
416                                 drink();
417                                 break;
418
419                          case QUIT:
420                                 die();
421
422                          default:
423                                 puts("How's that?");
424                                 return(-1);
425                                 break;
426
427
428                 }
429                 if (wordnumber < wordcount && *words[wordnumber++] == ',')
430                         continue;
431                 else return(lflag);
432        }
433        return(lflag);
434 }