|
|
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[] = "@(#)com6.c 5.5 (Berkeley) 6/1/90"; ! 22: #endif /* not lint */ ! 23: ! 24: #include "externs.h" ! 25: #include "pathnames.h" ! 26: ! 27: launch() ! 28: { ! 29: if (testbit(location[position].objects,VIPER) && !notes[CANTLAUNCH]){ ! 30: if (fuel > 4){ ! 31: clearbit(location[position].objects,VIPER); ! 32: position = location[position].up; ! 33: notes[LAUNCHED] = 1; ! 34: time++; ! 35: fuel -= 4; ! 36: puts("You climb into the viper and prepare for launch."); ! 37: puts("With a touch of your thumb the turbo engines ignite, thrusting you back into\nyour seat."); ! 38: return(1); ! 39: } ! 40: else ! 41: puts("Not enough fuel to launch."); ! 42: } ! 43: else ! 44: puts("Can't launch."); ! 45: return(0); ! 46: } ! 47: ! 48: land() ! 49: { ! 50: if (notes[LAUNCHED] && testbit(location[position].objects,LAND) && location[position].down){ ! 51: notes[LAUNCHED] = 0; ! 52: position = location[position].down; ! 53: setbit(location[position].objects,VIPER); ! 54: fuel -= 2; ! 55: time++; ! 56: puts("You are down."); ! 57: return(1); ! 58: } ! 59: else ! 60: puts("You can't land here."); ! 61: return(0); ! 62: } ! 63: ! 64: die() /* endgame */ ! 65: { ! 66: printf("bye.\nYour rating was %s.\n", rate()); ! 67: post(' '); ! 68: exit(0); ! 69: } ! 70: ! 71: live() ! 72: { ! 73: puts("\nYou win!"); ! 74: post('!'); ! 75: exit(0); ! 76: } ! 77: ! 78: /* ! 79: * sigh -- this program thinks "time" is an int. It's easier to not load ! 80: * <time.h> than try and fix it. ! 81: */ ! 82: #define KERNEL ! 83: #include <sys/time.h> ! 84: #undef KERNEL ! 85: ! 86: post(ch) ! 87: char ch; ! 88: { ! 89: FILE *fp; ! 90: struct timeval tv; ! 91: char *date, *ctime(); ! 92: int s = sigblock(sigmask(SIGINT)); ! 93: ! 94: gettimeofday(&tv, (struct timezone *)0); /* can't call time */ ! 95: date = ctime(&tv.tv_sec); ! 96: date[24] = '\0'; ! 97: if (fp = fopen(_PATH_SCORE,"a")) { ! 98: fprintf(fp, "%s %8s %c%20s", date, uname, ch, rate()); ! 99: if (wiz) ! 100: fprintf(fp, " wizard\n"); ! 101: else if (tempwiz) ! 102: fprintf(fp, " WIZARD!\n"); ! 103: else ! 104: fprintf(fp, "\n"); ! 105: } else ! 106: perror(_PATH_SCORE); ! 107: sigsetmask(s); ! 108: } ! 109: ! 110: char * ! 111: rate() ! 112: { ! 113: int score; ! 114: ! 115: score = max(max(pleasure,power),ego); ! 116: if (score == pleasure){ ! 117: if (score < 5) ! 118: return("novice"); ! 119: else if (score < 20) ! 120: return("junior voyeur"); ! 121: else if (score < 35) ! 122: return("Don Juan"); ! 123: else return("Marquis De Sade"); ! 124: } ! 125: else if (score == power){ ! 126: if (score < 5) ! 127: return("serf"); ! 128: else if (score < 8) ! 129: return("Samurai"); ! 130: else if (score < 13) ! 131: return("Klingon"); ! 132: else if (score < 22) ! 133: return("Darth Vader"); ! 134: else return("Sauron the Great"); ! 135: } ! 136: else{ ! 137: if (score < 5) ! 138: return("Polyanna"); ! 139: else if (score < 10) ! 140: return("philanthropist"); ! 141: else if (score < 20) ! 142: return("Tattoo"); ! 143: else return("Mr. Roarke"); ! 144: } ! 145: } ! 146: ! 147: drive() ! 148: { ! 149: if (testbit(location[position].objects,CAR)){ ! 150: puts("You hop in the car and turn the key. There is a perceptible grating noise,"); ! 151: puts("and an explosion knocks you unconscious..."); ! 152: clearbit(location[position].objects,CAR); ! 153: setbit(location[position].objects,CRASH); ! 154: injuries[5] = injuries[6] = injuries[7] = injuries[8] = 1; ! 155: time += 15; ! 156: zzz(); ! 157: return(0); ! 158: } ! 159: else ! 160: puts("There is nothing to drive here."); ! 161: return(-1); ! 162: } ! 163: ! 164: ride() ! 165: { ! 166: if (testbit(location[position].objects,HORSE)){ ! 167: puts("You climb onto the stallion and kick it in the guts. The stupid steed launches"); ! 168: puts("forward through bush and fern. You are thrown and the horse gallups off."); ! 169: clearbit(location[position].objects,HORSE); ! 170: while (!(position = rnd(NUMOFROOMS+1)) || !OUTSIDE || !beenthere[position] || location[position].flyhere); ! 171: setbit(location[position].objects,HORSE); ! 172: if (location[position].north) ! 173: position = location[position].north; ! 174: else if (location[position].south) ! 175: position = location[position].south; ! 176: else if (location[position].east) ! 177: position = location[position].east; ! 178: else ! 179: position = location[position].west; ! 180: return(0); ! 181: } ! 182: else puts("There is no horse here."); ! 183: return(-1); ! 184: } ! 185: ! 186: light() /* synonyms = {strike, smoke} */ ! 187: { /* for matches, cigars */ ! 188: if (testbit(inven,MATCHES) && matchcount){ ! 189: puts("Your match splutters to life."); ! 190: time++; ! 191: matchlight = 1; ! 192: matchcount--; ! 193: if (position == 217){ ! 194: puts("The whole bungalow explodes with an intense blast."); ! 195: die(); ! 196: } ! 197: } ! 198: else puts("You're out of matches."); ! 199: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.