diff options
Diffstat (limited to 'games/battlestar/com4.c')
-rw-r--r-- | games/battlestar/com4.c | 458 |
1 files changed, 227 insertions, 231 deletions
diff --git a/games/battlestar/com4.c b/games/battlestar/com4.c index 5d5750d3da1..b923590395f 100644 --- a/games/battlestar/com4.c +++ b/games/battlestar/com4.c @@ -1,4 +1,4 @@ -/* $OpenBSD: com4.c,v 1.5 1997/12/16 07:54:23 angelos Exp $ */ +/* $OpenBSD: com4.c,v 1.6 1998/09/13 01:30:30 pjanzen Exp $ */ /* $NetBSD: com4.c,v 1.3 1995/03/21 15:07:04 cgd Exp $ */ /* @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)com4.c 8.1 (Berkeley) 5/31/93"; #else -static char rcsid[] = "$NetBSD: com4.c,v 1.3 1995/03/21 15:07:04 cgd Exp $"; +static char rcsid[] = "$OpenBSD: com4.c,v 1.6 1998/09/13 01:30:30 pjanzen Exp $"; #endif #endif /* not lint */ @@ -46,265 +46,262 @@ static char rcsid[] = "$NetBSD: com4.c,v 1.3 1995/03/21 15:07:04 cgd Exp $"; int take(from) -unsigned int from[]; + unsigned int from[]; { - int firstnumber, heavy, bulky, value; - register int n; + int firstnumber, heavy, bulky, value; + int n; firstnumber = wordnumber; - if (wordnumber < wordcount && wordvalue[wordnumber+1] == OFF){ + if (wordnumber < wordcount && wordvalue[wordnumber + 1] == OFF) { wordnumber++; wordvalue[wordnumber] = TAKEOFF; - return(cypher()); - } - else { - while(wordtype[++wordnumber] == ADJS); - while(wordnumber<=wordcount && wordtype[wordnumber] == OBJECT){ + return (cypher()); + } else { + while (wordtype[++wordnumber] == ADJS); + while (wordnumber <= wordcount && wordtype[wordnumber] == OBJECT) { value = wordvalue[wordnumber]; printf("%s:\n", objsht[value]); - for (n=0; objsht[value][n]; n++); + for (n = 0; objsht[value][n]; n++); heavy = (carrying + objwt[value]) <= WEIGHT; bulky = (encumber + objcumber[value]) <= CUMBER; - if ((testbit(from,value) || wiz || tempwiz) && heavy && bulky && !testbit(inven,value)){ - setbit(inven,value); + if ((testbit(from, value) || wiz || tempwiz) && heavy && bulky && !testbit(inven, value)) { + setbit(inven, value); carrying += objwt[value]; encumber += objcumber[value]; - btime++; - if (testbit(from,value)) + ourtime++; + if (testbit(from, value)) printf("Taken.\n"); else printf("Zap! Taken from thin air.\n"); - clearbit(from,value); + clearbit(from, value); if (value == MEDALION) win--; - } - else if (testbit(inven,value)) - printf("You're already holding%s%s.\n", (objsht[value][n-1] == 's' ? " " : " a "),objsht[value]); - else if (!heavy) - printf("The %s %s too heavy.\n", objsht[value],(objsht[value][n-1] == 's' ? "are" : "is")); - else if (!bulky) - printf("The %s %s too cumbersome to hold.\n", objsht[value],(objsht[value][n-1] == 's' ? "are" : "is")); - else - printf("I dont see any %s around here.\n", objsht[value]); - if (wordnumber < wordcount -1 && wordvalue[++wordnumber] == AND) + } else + if (testbit(inven, value)) + printf("You're already holding%s%s.\n", (objsht[value][n-1] == 's' ? " " : " a "), objsht[value]); + else if (!heavy) + printf("The %s %s too heavy.\n", objsht[value],(objsht[value][n-1] == 's' ? "are" : "is")); + else if (!bulky) + printf("The %s %s too cumbersome to hold.\n", objsht[value],(objsht[value][n-1] == 's' ? "are" : "is")); + else + printf("I dont see any %s around here.\n", objsht[value]); + if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND) wordnumber++; else - return(firstnumber); + return (firstnumber); } } - /* special cases with their own return()'s */ + /* special cases with their own return()'s */ if (wordnumber <= wordcount && wordtype[wordnumber] == NOUNS) - switch(wordvalue[wordnumber]){ - - case SWORD: - if (testbit(from, SWORD)){ - wordtype[wordnumber--] = OBJECT; - return(take(from)); - } - if (testbit(from, TWO_HANDED)){ - wordvalue[wordnumber] = TWO_HANDED; - wordtype[wordnumber--] = OBJECT; - return(take(from)); - } - wordvalue[wordnumber] = BROAD; - wordtype[wordnumber--] = OBJECT; - return(take(from)); + switch (wordvalue[wordnumber]) { - case BODY: - if (testbit(from,MAID)){ - wordvalue[wordnumber] = MAID; - wordtype[wordnumber--] = OBJECT; - return(take(from)); - } - else if (testbit(from,DEADWOOD)){ - wordvalue[wordnumber] = DEADWOOD; - wordtype[wordnumber--] = OBJECT; - return(take(from)); - } - else if (testbit(from,DEADNATIVE)){ - wordvalue[wordnumber] = DEADNATIVE; - wordtype[wordnumber--] = OBJECT; - return(take(from)); - } - else if (testbit(from,DEADGOD)){ - wordvalue[wordnumber] = DEADGOD; - wordtype[wordnumber--] = OBJECT; - return(take(from)); - } - else { - wordvalue[wordnumber] = DEADTIME; - wordtype[wordnumber--] = OBJECT; - return(take(from)); - } - break; - - case AMULET: - if (testbit(location[position].objects,AMULET)){ - puts("The amulet is warm to the touch, and its beauty catches your breath."); - puts("A mist falls over your eyes, but then it is gone. Sounds seem clearer"); - puts("and sharper but far away as if in a dream. The sound of purling water reaches"); - puts("you from afar. The mist falls again, and your heart leaps in horror. The gold"); - puts("freezes your hands and fathomless darkness engulfs your soul."); - } + case SWORD: + if (testbit(from, SWORD)) { wordtype[wordnumber--] = OBJECT; - return(take(from)); - - case MEDALION: - if (testbit(location[position].objects, MEDALION)){ - puts("The medallion is warm, and it rekindles your spirit with the warmth of life."); - puts("Your amulet begins to glow as the medallion is brought near to it, and together\nthey radiate."); - } + return (take(from)); + } + if (testbit(from, TWO_HANDED)) { + wordvalue[wordnumber] = TWO_HANDED; wordtype[wordnumber--] = OBJECT; - return(take(from)); + return (take(from)); + } + wordvalue[wordnumber] = BROAD; + wordtype[wordnumber--] = OBJECT; + return (take(from)); - case TALISMAN: - if (testbit(location[position].objects,TALISMAN)){ - puts("The talisman is cold to the touch, and it sends a chill down your spine."); - } + case BODY: + if (testbit(from, MAID)) { + wordvalue[wordnumber] = MAID; + wordtype[wordnumber--] = OBJECT; + return (take(from)); + } + else if (testbit(from, DEADWOOD)) { + wordvalue[wordnumber] = DEADWOOD; + wordtype[wordnumber--] = OBJECT; + return (take(from)); + } + else if (testbit(from, DEADNATIVE)) { + wordvalue[wordnumber] = DEADNATIVE; + wordtype[wordnumber--] = OBJECT; + return (take(from)); + } + else if (testbit(from, DEADGOD)) { + wordvalue[wordnumber] = DEADGOD; + wordtype[wordnumber--] = OBJECT; + return (take(from)); + } else { + wordvalue[wordnumber] = DEADTIME; wordtype[wordnumber--] = OBJECT; - return(take(from)); - - case NORMGOD: - if (testbit(location[position].objects,BATHGOD) && (testbit(wear,AMULET) || testbit(inven,AMULET))){ - puts("She offers a delicate hand, and you help her out of the sparkling springs."); - puts("Water droplets like liquid silver bedew her golden skin, but when they part"); - puts("from her, they fall as teardrops. She wraps a single cloth around her and"); - puts("ties it at the waist. Around her neck hangs a golden amulet."); - puts("She bids you to follow her."); - pleasure++; - followgod = btime; - clearbit(location[position].objects,BATHGOD); - } else if (!testbit(location[position].objects,BATHGOD)) + return (take(from)); + } + break; + + case AMULET: + if (testbit(location[position].objects, AMULET)) { + puts("The amulet is warm to the touch, and its beauty catches your breath."); + puts("A mist falls over your eyes, but then it is gone. Sounds seem clearer"); + puts("and sharper but far away as if in a dream. The sound of purling water reaches"); + puts("you from afar. The mist falls again, and your heart leaps in horror. The gold"); + puts("freezes your hands and fathomless darkness engulfs your soul."); + } + wordtype[wordnumber--] = OBJECT; + return (take(from)); + + case MEDALION: + if (testbit(location[position].objects, MEDALION)) { + puts("The medallion is warm, and it rekindles your spirit with the warmth of life."); + puts("Your amulet begins to glow as the medallion is brought near to it, and together\nthey radiate."); + } + wordtype[wordnumber--] = OBJECT; + return (take(from)); + + case TALISMAN: + if (testbit(location[position].objects, TALISMAN)) { + puts("The talisman is cold to the touch, and it sends a chill down your spine."); + } + wordtype[wordnumber--] = OBJECT; + return (take(from)); + + case NORMGOD: + if (testbit(location[position].objects, BATHGOD) && (testbit(wear, AMULET) || testbit(inven, AMULET))) { + puts("She offers a delicate hand, and you help her out of the sparkling springs."); + puts("Water droplets like liquid silver bedew her golden skin, but when they part"); + puts("from her, they fall as teardrops. She wraps a single cloth around her and"); + puts("ties it at the waist. Around her neck hangs a golden amulet."); + puts("She bids you to follow her."); + pleasure++; + followgod = ourtime; + clearbit(location[position].objects, BATHGOD); + } else + if (!testbit(location[position].objects, BATHGOD)) puts("You're in no position to take her."); else puts("She moves away from you."); - break; + break; - default: - puts("It doesn't seem to work."); + default: + puts("It doesn't seem to work."); } else puts("You've got to be kidding."); - return(firstnumber); + return (firstnumber); } int throw(name) - char *name; + char *name; { unsigned int n; - int deposit = 0; - int first, value; + int deposit = 0; + int first, value; first = wordnumber; - if (drop(name) != -1){ - switch(wordvalue[wordnumber]){ - - case AHEAD: - deposit = ahead; - break; - - case BACK: - deposit = back; - break; - - case LEFT: - deposit = left; - break; - - case RIGHT: - deposit = right; - break; - - case UP: - deposit = location[position].up * (location[position].access || position == FINAL); - break; - - case DOWN: - deposit = location[position].down; - break; + if (drop(name) != -1) { + switch (wordvalue[wordnumber]) { + + case AHEAD: + deposit = ahead; + break; + + case BACK: + deposit = back; + break; + + case LEFT: + deposit = left; + break; + + case RIGHT: + deposit = right; + break; + + case UP: + deposit = location[position].up * (location[position].access || position == FINAL); + break; + + case DOWN: + deposit = location[position].down; + break; } wordnumber = first; while (wordtype[++wordnumber] == ADJS); - while (wordnumber <= wordcount){ + while (wordnumber <= wordcount) { value = wordvalue[wordnumber]; - if (deposit && testbit(location[position].objects,value)){ - clearbit(location[position].objects,value); + if (deposit && testbit(location[position].objects, value)) { + clearbit(location[position].objects, value); if (value != GRENADE) - setbit(location[deposit].objects,value); - else{ + setbit(location[deposit].objects, value); + else { puts("A thundering explosion nearby sends up a cloud of smoke and shrapnel."); - for (n = 0; n < NUMOFWORDS; n ++) + for (n = 0; n < NUMOFWORDS; n++) location[deposit].objects[n] = 0; - setbit(location[deposit].objects,CHAR); + setbit(location[deposit].objects, CHAR); } if (value == ROPE && position == FINAL) location[position].access = 1; - switch(deposit){ - case 189: - case 231: - puts("The stone door is unhinged."); - location[189].north = 231; - location[231].south = 189; - break; - case 30: - puts("The wooden door is blown open."); - location[30].west = 25; - break; - case 31: - puts("The door is not damaged."); + switch (deposit) { + case 189: + case 231: + puts("The stone door is unhinged."); + location[189].north = 231; + location[231].south = 189; + break; + case 30: + puts("The wooden door is blown open."); + location[30].west = 25; + break; + case 31: + puts("The door is not damaged."); + } + } else + if (value == GRENADE && testbit(location[position].objects, value)) { + puts("You are blown into shreds when your grenade explodes."); + die(0); } - } - else if (value == GRENADE && testbit(location[position].objects,value)){ - puts("You are blown into shreds when your grenade explodes."); - die(0); - } if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND) wordnumber++; else - return(first); + return (first); } - return(first); + return (first); } - return(first); + return (first); } int drop(name) -char *name; + char *name; { - - int firstnumber, value; + + int firstnumber, value; firstnumber = wordnumber; - while (wordtype[++wordnumber] == ADJS) - ; - while (wordnumber<=wordcount && (wordtype[wordnumber] == OBJECT || wordtype[wordnumber] == NOUNS)) { + while (wordtype[++wordnumber] == ADJS); + while (wordnumber <= wordcount && (wordtype[wordnumber] == OBJECT || wordtype[wordnumber] == NOUNS)) { value = wordvalue[wordnumber]; printf("%s:\n", objsht[value]); - if (testbit(inven,value)){ - clearbit(inven,value); + if (testbit(inven, value)) { + clearbit(inven, value); carrying -= objwt[value]; encumber -= objcumber[value]; - if (value == BOMB){ + if (value == BOMB) { puts("The bomb explodes. A blinding white light and immense concussion obliterate us."); die(0); } if (value != AMULET && value != MEDALION && value != TALISMAN) - setbit(location[position].objects,value); + setbit(location[position].objects, value); else tempwiz = 0; - btime++; + ourtime++; if (*name == 'K') puts("Drop kicked."); else printf("%s.\n", name); - } - else { + } else { if (*name != 'K') { printf("You aren't holding the %s.\n", objsht[value]); - if (testbit(location[position].objects,value)) { + if (testbit(location[position].objects, value)) { if (*name == 'T') puts("Kicked instead."); else if (*name == 'G') @@ -316,77 +313,76 @@ char *name; if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND) wordnumber++; else - return(firstnumber); + return (firstnumber); } puts("Do what?"); - return(-1); + return (-1); } int takeoff() { wordnumber = take(wear); - return(drop("Dropped")); + return (drop("Dropped")); } int puton() { wordnumber = take(location[position].objects); - return(wearit()); + return (wearit()); } int eat() { - int firstnumber, value; + int firstnumber, value; firstnumber = wordnumber; - while(wordtype[++wordnumber] == ADJS); - while(wordnumber <= wordcount){ + while (wordtype[++wordnumber] == ADJS); + while (wordnumber <= wordcount) { value = wordvalue[wordnumber]; - switch(value){ - - case -1: - puts("Eat what?"); - return(firstnumber); - - default: - printf("You can't eat%s%s!\n", - wordtype[wordnumber] == OBJECT && - objsht[value] - [strlen(objsht[value]) - 1] == 's' ? - " " : " a ", - words[wordnumber]); - return(firstnumber); - - case PAPAYAS: - case PINEAPPLE: - case KIWI: - case COCONUTS: /* eatable things */ - case MANGO: - - printf("%s:\n",objsht[value]); - if (testbit(inven,value) && btime > ate - CYCLE && testbit(inven,KNIFE)){ - clearbit(inven,value); - carrying -= objwt[value]; - encumber -= objcumber[value]; - ate = max(btime,ate) + CYCLE/3; - snooze += CYCLE/10; - btime++; - puts("Eaten. You can explore a little longer now."); - } - else if (btime < ate - CYCLE) - puts("You're stuffed."); - else if (!testbit(inven,KNIFE)) - puts("You need a knife."); - else - printf("You aren't holding the %s.\n", objsht[value]); - if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND) - wordnumber++; - else - return(firstnumber); - } /* end switch */ - } /* end while */ - return(firstnumber); + switch (value) { + + case -1: + puts("Eat what?"); + return (firstnumber); + + default: + printf("You can't eat%s%s!\n", + wordtype[wordnumber] == OBJECT && + objsht[value][strlen(objsht[value]) - 1] == 's' ? " " : " a ", + words[wordnumber]); + return (firstnumber); + + case PAPAYAS: + case PINEAPPLE: + case KIWI: + case COCONUTS: /* eatable things */ + case MANGO: + + printf("%s:\n", objsht[value]); + if (testbit(inven, value) && ourtime > ate - CYCLE && + testbit(inven, KNIFE)) { + clearbit(inven, value); + carrying -= objwt[value]; + encumber -= objcumber[value]; + ate = max(ourtime, ate) + CYCLE / 3; + snooze += CYCLE / 10; + ourtime++; + puts("Eaten. You can explore a little longer now."); + } + else if (ourtime < ate - CYCLE) + puts("You're stuffed."); + else if (!testbit(inven, KNIFE)) + puts("You need a knife."); + else + printf("You aren't holding the %s.\n", objsht[value]); + if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND) + wordnumber++; + else + return (firstnumber); + } /* end switch */ + } /* end while */ + return (firstnumber); } |