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