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