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