|
|
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.