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