KNFify (with indent)

This commit is contained in:
lukem 1997-10-11 02:06:55 +00:00
parent 36b47bd3b7
commit 31c7a7bec5
23 changed files with 3780 additions and 3781 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: battlestar.c,v 1.5 1997/10/10 11:39:12 lukem Exp $ */
/* $NetBSD: battlestar.c,v 1.6 1997/10/11 02:06:55 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -37,15 +37,15 @@
#ifndef lint
__COPYRIGHT("@(#) Copyright (c) 1983, 1993\n\
The Regents of the University of California. All rights reserved.\n");
#endif /* not lint */
#endif /* not lint */
#ifndef lint
#if 0
static char sccsid[] = "@(#)battlestar.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: battlestar.c,v 1.5 1997/10/10 11:39:12 lukem Exp $");
__RCSID("$NetBSD: battlestar.c,v 1.6 1997/10/11 02:06:55 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
/*
* Battlestar - a stellar-tropical adventure game
@ -56,27 +56,27 @@ __RCSID("$NetBSD: battlestar.c,v 1.5 1997/10/10 11:39:12 lukem Exp $");
#include "extern.h"
int main __P((int, char *[]));
int main __P((int, char *[]));
int
main(argc,argv)
int argc;
char **argv;
main(argc, argv)
int argc;
char **argv;
{
char mainbuf[LINELENGTH];
char *next;
char mainbuf[LINELENGTH];
char *next;
initialize(argc < 2 || strcmp(argv[1], "-r"));
start:
news();
beenthere[position]++;
if (notes[LAUNCHED])
crash(); /* decrements fuel & crash */
crash(); /* decrements fuel & crash */
if (matchlight) {
puts("Your match splutters out.");
matchlight = 0;
}
if (!notes[CANTSEE] || testbit(inven,LAMPON) ||
if (!notes[CANTSEE] || testbit(inven, LAMPON) ||
testbit(location[position].objects, LAMPON)) {
writedes();
printobjs();
@ -85,16 +85,16 @@ start:
whichway(location[position]);
run:
next = getcom(mainbuf, sizeof mainbuf, ">-: ",
"Please type in something.");
"Please type in something.");
for (wordcount = 0; next && wordcount < 20; wordcount++)
next = getword(next, words[wordcount], -1);
parse();
switch (cypher()) {
case -1:
goto run;
case 0:
goto start;
default:
exit(0);
case -1:
goto run;
case 0:
goto start;
default:
exit(0);
}
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: com1.c,v 1.5 1997/10/10 11:39:16 lukem Exp $ */
/* $NetBSD: com1.c,v 1.6 1997/10/11 02:06:58 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,15 +38,15 @@
#if 0
static char sccsid[] = "@(#)com1.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com1.c,v 1.5 1997/10/10 11:39:16 lukem Exp $");
__RCSID("$NetBSD: com1.c,v 1.6 1997/10/11 02:06:58 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
int
move(thataway, token)
int thataway, token;
int thataway, token;
{
wordnumber++;
if ((!notes[CANTMOVE] && !notes[LAUNCHED]) ||
@ -56,26 +56,27 @@ move(thataway, token)
position = thataway;
newway(token);
ourtime++;
}
else {
} else {
puts("You can't go this way.");
newway(token);
whichway(location[position]);
return(0);
return (0);
}
else if (notes[CANTMOVE] && !notes[LAUNCHED])
puts("You aren't able to move; you better drop something.");
else
puts("You are out of fuel; now you will rot in space forever!");
return(1);
if (notes[CANTMOVE] && !notes[LAUNCHED])
puts("You aren't able to move; you better drop something.");
else
puts("You are out of fuel; now you will rot in space forever!");
return (1);
}
void
convert(tothis) /* Converts day to night and vice versa. */
int tothis; /* Day objects are permanent. Night objects are added*/
{ /* at dusk, and subtracted at dawn. */
convert(tothis) /* Converts day to night and vice versa. */
int tothis; /* Day objects are permanent. Night objects
* are added */
{ /* at dusk, and subtracted at dawn. */
struct objs *p;
int i, j;
int i, j;
if (tothis == TONIGHT) {
for (i = 1; i <= NUMOFROOMS; i++)
@ -97,10 +98,10 @@ convert(tothis) /* Converts day to night and vice versa. */
void
news()
{
int n;
int hurt;
int n;
int hurt;
if (ourtime > 30 && position < 32){
if (ourtime > 30 && position < 32) {
puts("An explosion of shuddering magnitude splinters bulkheads and");
puts("ruptures the battlestar's hull. You are sucked out into the");
puts("frozen void of space and killed.");
@ -108,7 +109,7 @@ news()
}
if (ourtime > 20 && position < 32)
puts("Explosions rock the battlestar.");
if (ourtime > snooze){
if (ourtime > snooze) {
puts("You drop from exhaustion...");
zzz();
}
@ -135,92 +136,91 @@ news()
rythmn = ourtime - ourtime % CYCLE;
}
if (!wiz && !tempwiz)
if ((testbit(inven,TALISMAN) || testbit(wear,TALISMAN)) && (testbit(inven,MEDALION) || testbit(wear,MEDALION)) && (testbit(inven,AMULET) || testbit(wear,AMULET))){
if ((testbit(inven, TALISMAN) || testbit(wear, TALISMAN)) && (testbit(inven, MEDALION) || testbit(wear, MEDALION)) && (testbit(inven, AMULET) || testbit(wear, AMULET))) {
tempwiz = 1;
puts("The three amulets glow and reenforce each other in power.\nYou are now a wizard.");
}
if (testbit(location[position].objects, ELF)) {
printf("%s\n", objdes[ELF]);
fight(ELF, rnd(30));
}
if (testbit(location[position].objects,ELF)){
printf("%s\n",objdes[ELF]);
fight(ELF,rnd(30));
if (testbit(location[position].objects, DARK)) {
printf("%s\n", objdes[DARK]);
fight(DARK, 100);
}
if (testbit(location[position].objects,DARK)){
printf("%s\n",objdes[DARK]);
fight(DARK,100);
if (testbit(location[position].objects, WOODSMAN)) {
printf("%s\n", objdes[WOODSMAN]);
fight(WOODSMAN, 50);
}
if (testbit(location[position].objects,WOODSMAN)){
printf("%s\n",objdes[WOODSMAN]);
fight(WOODSMAN,50);
}
switch(position){
case 267:
case 257: /* entering a cave */
case 274:
case 246:
notes[CANTSEE] = 1;
break;
case 160:
case 216: /* leaving a cave */
case 230:
case 231:
case 232:
notes[CANTSEE] = 0;
break;
switch (position) {
case 267:
case 257: /* entering a cave */
case 274:
case 246:
notes[CANTSEE] = 1;
break;
case 160:
case 216: /* leaving a cave */
case 230:
case 231:
case 232:
notes[CANTSEE] = 0;
break;
}
if (testbit(location[position].objects, GIRL))
meetgirl = 1;
if (meetgirl && CYCLE * 1.5 - ourtime < 10){
setbit(location[GARDEN].objects,GIRLTALK);
setbit(location[GARDEN].objects,LAMPON);
setbit(location[GARDEN].objects,ROPE);
if (meetgirl && CYCLE * 1.5 - ourtime < 10) {
setbit(location[GARDEN].objects, GIRLTALK);
setbit(location[GARDEN].objects, LAMPON);
setbit(location[GARDEN].objects, ROPE);
}
if (position == DOCK && (beenthere[position] || ourtime > CYCLE)){
if (position == DOCK && (beenthere[position] || ourtime > CYCLE)) {
clearbit(location[DOCK].objects, GIRL);
clearbit(location[DOCK].objects,MAN);
clearbit(location[DOCK].objects, MAN);
}
if (meetgirl && ourtime - CYCLE * 1.5 > 10){
clearbit(location[GARDEN].objects,GIRLTALK);
clearbit(location[GARDEN].objects,LAMPON);
clearbit(location[GARDEN].objects,ROPE);
if (meetgirl && ourtime - CYCLE * 1.5 > 10) {
clearbit(location[GARDEN].objects, GIRLTALK);
clearbit(location[GARDEN].objects, LAMPON);
clearbit(location[GARDEN].objects, ROPE);
meetgirl = 0;
}
if (testbit(location[position].objects,CYLON)){
if (testbit(location[position].objects, CYLON)) {
puts("Oh my God, you're being shot at by an alien spacecraft!");
printf("The targeting computer says we have %d seconds to attack!\n",
ourclock);
fflush(stdout);
sleep(1);
if (!visual()){
if (!visual()) {
hurt = rnd(NUMOFINJURIES);
injuries[hurt] = 1;
puts("Laser blasts sear the cockpit, and the alien veers off in a victory roll.");
puts("The viper shudders under a terrible explosion.");
printf("I'm afraid you have suffered %s.\n", ouch[hurt]);
}
else
clearbit(location[position].objects,CYLON);
} else
clearbit(location[position].objects, CYLON);
}
if (injuries[SKULL] && injuries[INCISE] && injuries[NECK]){
if (injuries[SKULL] && injuries[INCISE] && injuries[NECK]) {
puts("I'm afraid you have suffered fatal injuries.");
die();
}
for (n=0; n < NUMOFINJURIES; n++)
if (injuries[n] == 1){
for (n = 0; n < NUMOFINJURIES; n++)
if (injuries[n] == 1) {
injuries[n] = 2;
if (WEIGHT > 5)
WEIGHT -= 5;
else
WEIGHT = 0;
}
if (injuries[ARM] == 2){
if (injuries[ARM] == 2) {
CUMBER -= 5;
injuries[ARM]++;
}
if (injuries[RIBS] == 2){
if (injuries[RIBS] == 2) {
CUMBER -= 2;
injuries[RIBS]++;
}
if (injuries[SPINE] == 2){
if (injuries[SPINE] == 2) {
WEIGHT = 0;
injuries[SPINE]++;
}
@ -233,16 +233,16 @@ news()
void
crash()
{
int hurt1,hurt2;
int hurt1, hurt2;
fuel--;
if (!location[position].flyhere ||
(testbit(location[position].objects,LAND) && fuel <= 0)){
(testbit(location[position].objects, LAND) && fuel <= 0)) {
if (!location[position].flyhere)
puts("You're flying too low. We're going to crash!");
else{
else {
puts("You're out of fuel. We'll have to crash land!");
if (!location[position].down){
if (!location[position].down) {
puts("Your viper strikes the ground and explodes into firey fragments.");
puts("Thick black smoke billows up from the wreckage.");
die();
@ -250,16 +250,16 @@ crash()
position = location[position].down;
}
notes[LAUNCHED] = 0;
setbit(location[position].objects,CRASH);
ourtime += rnd(CYCLE/4);
setbit(location[position].objects, CRASH);
ourtime += rnd(CYCLE / 4);
puts("The viper explodes into the ground and you lose consciousness...");
zzz();
hurt1 = rnd(NUMOFINJURIES - 2) + 2;
hurt2 = rnd(NUMOFINJURIES - 2) + 2;
injuries[hurt1] = 1;
injuries[hurt2] = 1;
injuries[0] = 1; /* abrasions */
injuries[1] = 1; /* lacerations */
injuries[0] = 1;/* abrasions */
injuries[1] = 1;/* lacerations */
printf("I'm afraid you have suffered %s and %s.\n",
ouch[hurt1], ouch[hurt2]);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: com2.c,v 1.5 1997/10/10 11:39:19 lukem Exp $ */
/* $NetBSD: com2.c,v 1.6 1997/10/11 02:07:00 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,116 +38,116 @@
#if 0
static char sccsid[] = "@(#)com2.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com2.c,v 1.5 1997/10/10 11:39:19 lukem Exp $");
__RCSID("$NetBSD: com2.c,v 1.6 1997/10/11 02:07:00 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
int
wearit() /* synonyms = {sheathe, sheath} */
{
int n;
int firstnumber, value;
wearit()
{ /* synonyms = {sheathe, sheath} */
int n;
int firstnumber, value;
firstnumber = wordnumber;
while(wordtype[++wordnumber] == ADJS);
while(wordnumber <= wordcount){
while (wordtype[++wordnumber] == ADJS);
while (wordnumber <= wordcount) {
value = wordvalue[wordnumber];
for (n=0; objsht[value][n]; n++);
switch(value){
case -1:
puts("Wear what?");
return(firstnumber);
for (n = 0; objsht[value][n]; n++);
switch (value) {
default:
printf("You can't wear%s%s!\n",(objsht[value][n-1] == 's' ? " " : " a "),objsht[value]);
return(firstnumber);
case -1:
puts("Wear what?");
return (firstnumber);
case KNIFE:
/* case SHIRT: */
case ROBE:
case LEVIS: /* wearable things */
case SWORD:
case MAIL:
case HELM:
case SHOES:
case PAJAMAS:
case COMPASS:
case LASER:
case AMULET:
case TALISMAN:
case MEDALION:
case ROPE:
case RING:
case BRACELET:
case GRENADE:
default:
printf("You can't wear%s%s!\n", (objsht[value][n - 1] == 's' ? " " : " a "), objsht[value]);
return (firstnumber);
if (testbit(inven,value)){
clearbit(inven,value);
setbit(wear,value);
carrying -= objwt[value];
encumber -= objcumber[value];
ourtime++;
printf("You are now wearing %s %s.\n",
(objsht[value][n-1] == 's' ? "the"
: "a"), objsht[value]);
}
else if (testbit(wear,value))
case KNIFE:
/* case SHIRT: */
case ROBE:
case LEVIS: /* wearable things */
case SWORD:
case MAIL:
case HELM:
case SHOES:
case PAJAMAS:
case COMPASS:
case LASER:
case AMULET:
case TALISMAN:
case MEDALION:
case ROPE:
case RING:
case BRACELET:
case GRENADE:
if (testbit(inven, value)) {
clearbit(inven, value);
setbit(wear, value);
carrying -= objwt[value];
encumber -= objcumber[value];
ourtime++;
printf("You are now wearing %s %s.\n",
(objsht[value][n - 1] == 's' ? "the"
: "a"), objsht[value]);
} else
if (testbit(wear, value))
printf("You are already wearing the %s.\n",
objsht[value]);
else
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 */
if (wordnumber < wordcount - 1 &&
wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (firstnumber);
} /* end switch */
} /* end while */
puts("Don't be ridiculous.");
return(firstnumber);
return (firstnumber);
}
int
put() /* synonyms = {buckle, strap, tie} */
{
if (wordvalue[wordnumber + 1] == ON){
put()
{ /* synonyms = {buckle, strap, tie} */
if (wordvalue[wordnumber + 1] == ON) {
wordvalue[++wordnumber] = PUTON;
return(cypher());
return (cypher());
}
if (wordvalue[wordnumber + 1] == DOWN){
if (wordvalue[wordnumber + 1] == DOWN) {
wordvalue[++wordnumber] = DROP;
return(cypher());
return (cypher());
}
puts("I don't understand what you want to put.");
return(-1);
return (-1);
}
int
draw() /* synonyms = {pull, carry} */
{
return(take(wear));
draw()
{ /* synonyms = {pull, carry} */
return (take(wear));
}
int
use()
{
while (wordtype[++wordnumber] == ADJS && wordnumber < wordcount);
if (wordvalue[wordnumber] == AMULET && testbit(inven,AMULET) &&
position != FINAL){
if (wordvalue[wordnumber] == AMULET && testbit(inven, AMULET) &&
position != FINAL) {
puts("The amulet begins to glow.");
if (testbit(inven,MEDALION)){
if (testbit(inven, MEDALION)) {
puts("The medallion comes to life too.");
if (position == 114){
if (position == 114) {
location[position].down = 160;
whichway(location[position]);
puts("The waves subside and it is possible to descend to the sea cave now.");
ourtime++;
return(-1);
return (-1);
}
}
puts("A light mist falls over your eyes and the sound of purling water trickles in");
@ -157,85 +157,92 @@ use()
else
position = 229;
ourtime++;
return(0);
}
else if (position == FINAL)
puts("The amulet won't work in here.");
else if (wordvalue[wordnumber] == COMPASS && testbit(inven,COMPASS))
printf("Your compass points %s.\n",truedirec(NORTH,'-'));
else if (wordvalue[wordnumber] == COMPASS)
puts("You aren't holding the compass.");
else if (wordvalue[wordnumber] == AMULET)
puts("You aren't holding the amulet.");
else
puts("There is no apparent use.");
return(-1);
return (0);
} else
if (position == FINAL)
puts("The amulet won't work in here.");
else
if (wordvalue[wordnumber] == COMPASS && testbit(inven, COMPASS))
printf("Your compass points %s.\n", truedirec(NORTH, '-'));
else
if (wordvalue[wordnumber] == COMPASS)
puts("You aren't holding the compass.");
else
if (wordvalue[wordnumber] == AMULET)
puts("You aren't holding the amulet.");
else
puts("There is no apparent use.");
return (-1);
}
void
murder()
{
int n;
int n;
for (n=0; !((n == SWORD || n == KNIFE || n == TWO_HANDED || n == MACE || n == CLEAVER || n == BROAD || n == CHAIN || n == SHOVEL || n == HALBERD) && testbit(inven,n)) && n < NUMOFOBJECTS; n++);
for (n = 0; !((n == SWORD || n == KNIFE || n == TWO_HANDED || n == MACE || n == CLEAVER || n == BROAD || n == CHAIN || n == SHOVEL || n == HALBERD) && testbit(inven, n)) && n < NUMOFOBJECTS; n++);
if (n == NUMOFOBJECTS)
puts("You don't have suitable weapons to kill.");
else {
printf("Your %s should do the trick.\n",objsht[n]);
printf("Your %s should do the trick.\n", objsht[n]);
while (wordtype[++wordnumber] == ADJS);
switch(wordvalue[wordnumber]){
case NORMGOD:
if (testbit(location[position].objects,BATHGOD)){
puts("The goddess's head slices off. Her corpse floats in the water.");
clearbit(location[position].objects,BATHGOD);
setbit(location[position].objects,DEADGOD);
power += 5;
notes[JINXED]++;
} else if (testbit(location[position].objects,NORMGOD)){
switch (wordvalue[wordnumber]) {
case NORMGOD:
if (testbit(location[position].objects, BATHGOD)) {
puts("The goddess's head slices off. Her corpse floats in the water.");
clearbit(location[position].objects, BATHGOD);
setbit(location[position].objects, DEADGOD);
power += 5;
notes[JINXED]++;
} else
if (testbit(location[position].objects, NORMGOD)) {
puts("The goddess pleads but you strike her mercilessly. Her broken body lies in a\npool of blood.");
clearbit(location[position].objects,NORMGOD);
setbit(location[position].objects,DEADGOD);
clearbit(location[position].objects, NORMGOD);
setbit(location[position].objects, DEADGOD);
power += 5;
notes[JINXED]++;
if (wintime)
live();
} else puts("I dont see her anywhere.");
break;
case TIMER:
if (testbit(location[position].objects,TIMER)){
puts("The old man offers no resistance.");
clearbit(location[position].objects,TIMER);
setbit(location[position].objects,DEADTIME);
power++;
notes[JINXED]++;
} else puts("Who?");
break;
case NATIVE:
if (testbit(location[position].objects,NATIVE)){
puts("The girl screams as you cut her body to shreds. She is dead.");
clearbit(location[position].objects,NATIVE);
setbit(location[position].objects,DEADNATIVE);
power += 5;
notes[JINXED]++;
} else puts("What girl?");
break;
case MAN:
if (testbit(location[position].objects,MAN)){
puts("You strike him to the ground, and he coughs up blood.");
puts("Your fantasy is over.");
die();
}
case -1:
puts("Kill what?");
break;
} else
puts("I dont see her anywhere.");
break;
case TIMER:
if (testbit(location[position].objects, TIMER)) {
puts("The old man offers no resistance.");
clearbit(location[position].objects, TIMER);
setbit(location[position].objects, DEADTIME);
power++;
notes[JINXED]++;
} else
puts("Who?");
break;
case NATIVE:
if (testbit(location[position].objects, NATIVE)) {
puts("The girl screams as you cut her body to shreds. She is dead.");
clearbit(location[position].objects, NATIVE);
setbit(location[position].objects, DEADNATIVE);
power += 5;
notes[JINXED]++;
} else
puts("What girl?");
break;
case MAN:
if (testbit(location[position].objects, MAN)) {
puts("You strike him to the ground, and he coughs up blood.");
puts("Your fantasy is over.");
die();
}
case -1:
puts("Kill what?");
break;
default:
if (wordtype[wordnumber] != NOUNS)
puts("Kill what?");
else
printf("You can't kill the %s!\n",
objsht[wordvalue[wordnumber]]);
default:
if (wordtype[wordnumber] != NOUNS)
puts("Kill what?");
else
printf("You can't kill the %s!\n",
objsht[wordvalue[wordnumber]]);
}
}
}
@ -244,74 +251,72 @@ void
ravage()
{
while (wordtype[++wordnumber] != NOUNS && wordnumber <= wordcount);
if (wordtype[wordnumber] == NOUNS && testbit(location[position].objects,wordvalue[wordnumber])){
if (wordtype[wordnumber] == NOUNS && testbit(location[position].objects, wordvalue[wordnumber])) {
ourtime++;
switch(wordvalue[wordnumber]){
case NORMGOD:
puts("You attack the goddess, and she screams as you beat her. She falls down");
puts("crying and tries to hold her torn and bloodied dress around her.");
power += 5;
pleasure += 8;
ego -= 10;
wordnumber--;
godready = -30000;
murder();
win = -30000;
break;
case NATIVE:
puts("The girl tries to run, but you catch her and throw her down. Her face is");
puts("bleeding, and she screams as you tear off her clothes.");
power += 3;
pleasure += 5;
ego -= 10;
wordnumber--;
murder();
if (rnd(100) < 50){
puts("Her screams have attracted attention. I think we are surrounded.");
setbit(location[ahead].objects,WOODSMAN);
setbit(location[ahead].objects,DEADWOOD);
setbit(location[ahead].objects,MALLET);
setbit(location[back].objects,WOODSMAN);
setbit(location[back].objects,DEADWOOD);
setbit(location[back].objects,MALLET);
setbit(location[left].objects,WOODSMAN);
setbit(location[left].objects,DEADWOOD);
setbit(location[left].objects,MALLET);
setbit(location[right].objects,WOODSMAN);
setbit(location[right].objects,DEADWOOD);
setbit(location[right].objects,MALLET);
}
break;
default:
puts("You are perverted.");
switch (wordvalue[wordnumber]) {
case NORMGOD:
puts("You attack the goddess, and she screams as you beat her. She falls down");
puts("crying and tries to hold her torn and bloodied dress around her.");
power += 5;
pleasure += 8;
ego -= 10;
wordnumber--;
godready = -30000;
murder();
win = -30000;
break;
case NATIVE:
puts("The girl tries to run, but you catch her and throw her down. Her face is");
puts("bleeding, and she screams as you tear off her clothes.");
power += 3;
pleasure += 5;
ego -= 10;
wordnumber--;
murder();
if (rnd(100) < 50) {
puts("Her screams have attracted attention. I think we are surrounded.");
setbit(location[ahead].objects, WOODSMAN);
setbit(location[ahead].objects, DEADWOOD);
setbit(location[ahead].objects, MALLET);
setbit(location[back].objects, WOODSMAN);
setbit(location[back].objects, DEADWOOD);
setbit(location[back].objects, MALLET);
setbit(location[left].objects, WOODSMAN);
setbit(location[left].objects, DEADWOOD);
setbit(location[left].objects, MALLET);
setbit(location[right].objects, WOODSMAN);
setbit(location[right].objects, DEADWOOD);
setbit(location[right].objects, MALLET);
}
break;
default:
puts("You are perverted.");
}
}
else
} else
puts("Who?");
}
int
follow()
{
if (followfight == ourtime){
if (followfight == ourtime) {
puts("The Dark Lord leaps away and runs down secret tunnels and corridoors.");
puts("You chase him through the darkness and splash in pools of water.");
puts("You have cornered him. His laser sword extends as he steps forward.");
position = FINAL;
fight(DARK,75);
setbit(location[position].objects,TALISMAN);
setbit(location[position].objects,AMULET);
return(0);
}
else if (followgod == ourtime){
puts("The goddess leads you down a steamy tunnel and into a high, wide chamber.");
puts("She sits down on a throne.");
position = 268;
setbit(location[position].objects,NORMGOD);
notes[CANTSEE] = 1;
return(0);
}
else
puts("There is no one to follow.");
return(-1);
fight(DARK, 75);
setbit(location[position].objects, TALISMAN);
setbit(location[position].objects, AMULET);
return (0);
} else
if (followgod == ourtime) {
puts("The goddess leads you down a steamy tunnel and into a high, wide chamber.");
puts("She sits down on a throne.");
position = 268;
setbit(location[position].objects, NORMGOD);
notes[CANTSEE] = 1;
return (0);
} else
puts("There is no one to follow.");
return (-1);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: com3.c,v 1.5 1997/10/10 11:39:22 lukem Exp $ */
/* $NetBSD: com3.c,v 1.6 1997/10/11 02:07:02 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,240 +38,236 @@
#if 0
static char sccsid[] = "@(#)com3.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com3.c,v 1.5 1997/10/10 11:39:22 lukem Exp $");
__RCSID("$NetBSD: com3.c,v 1.6 1997/10/11 02:07:02 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
void
dig()
{
if (testbit(inven,SHOVEL)){
if (testbit(inven, SHOVEL)) {
puts("OK");
ourtime++;
switch(position){
case 144: /* copse near beach */
if (!notes[DUG]){
setbit(location[position].objects,DEADWOOD);
setbit(location[position].objects,COMPASS);
setbit(location[position].objects,KNIFE);
setbit(location[position].objects,MACE);
notes[DUG] = 1;
}
break;
switch (position) {
case 144: /* copse near beach */
if (!notes[DUG]) {
setbit(location[position].objects, DEADWOOD);
setbit(location[position].objects, COMPASS);
setbit(location[position].objects, KNIFE);
setbit(location[position].objects, MACE);
notes[DUG] = 1;
}
break;
default:
puts("Nothing happens.");
default:
puts("Nothing happens.");
}
}
else
} else
puts("You don't have a shovel.");
}
int
jump()
{
int n;
int n;
switch(position){
default:
puts("Nothing happens.");
return(-1);
switch (position) {
default:
puts("Nothing happens.");
return (-1);
case 242:
position = 133;
break;
case 214:
case 215:
case 162:
case 159:
position = 145;
break;
case 232:
position = 275;
break;
case 3:
position = 1;
break;
case 172:
position = 201;
case 242:
position = 133;
break;
case 214:
case 215:
case 162:
case 159:
position = 145;
break;
case 232:
position = 275;
break;
case 3:
position = 1;
break;
case 172:
position = 201;
}
puts("Ahhhhhhh...");
injuries[12] = injuries[8] = injuries[7] = injuries[6] = 1;
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(inven,n)){
clearbit(inven,n);
setbit(location[position].objects,n);
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n)) {
clearbit(inven, n);
setbit(location[position].objects, n);
}
carrying = 0;
encumber = 0;
return(0);
return (0);
}
void
bury()
{
int value;
int value;
if (testbit(inven,SHOVEL)){
while(wordtype[++wordnumber] != OBJECT && wordtype[wordnumber] != NOUNS && wordnumber < wordcount);
if (testbit(inven, SHOVEL)) {
while (wordtype[++wordnumber] != OBJECT && wordtype[wordnumber] != NOUNS && wordnumber < wordcount);
value = wordvalue[wordnumber];
if (wordtype[wordnumber] == NOUNS && (testbit(location[position].objects,value) || value == BODY))
switch(value){
case BODY:
wordtype[wordnumber] = OBJECT;
if (testbit(inven,MAID) || testbit(location[position].objects,MAID))
value = MAID;
if (testbit(inven,DEADWOOD) || testbit(location[position].objects,DEADWOOD))
value = DEADWOOD;
if (testbit(inven,DEADGOD) || testbit(location[position].objects,DEADGOD))
value = DEADGOD;
if (testbit(inven,DEADTIME) || testbit(location[position].objects,DEADTIME))
value = DEADTIME;
if (testbit(inven,DEADNATIVE) || testbit(location[position].objects,DEADNATIVE))
value = DEADNATIVE;
break;
if (wordtype[wordnumber] == NOUNS && (testbit(location[position].objects, value) || value == BODY))
switch (value) {
case BODY:
wordtype[wordnumber] = OBJECT;
if (testbit(inven, MAID) || testbit(location[position].objects, MAID))
value = MAID;
if (testbit(inven, DEADWOOD) || testbit(location[position].objects, DEADWOOD))
value = DEADWOOD;
if (testbit(inven, DEADGOD) || testbit(location[position].objects, DEADGOD))
value = DEADGOD;
if (testbit(inven, DEADTIME) || testbit(location[position].objects, DEADTIME))
value = DEADTIME;
if (testbit(inven, DEADNATIVE) || testbit(location[position].objects, DEADNATIVE))
value = DEADNATIVE;
break;
case NATIVE:
case NORMGOD:
puts("She screams as you wrestle her into the hole.");
case TIMER:
power += 7;
ego -= 10;
case AMULET:
case MEDALION:
case TALISMAN:
wordtype[wordnumber] = OBJECT;
break;
case NATIVE:
case NORMGOD:
puts("She screams as you wrestle her into the hole.");
case TIMER:
power += 7;
ego -= 10;
case AMULET:
case MEDALION:
case TALISMAN:
wordtype[wordnumber] = OBJECT;
break;
default:
puts("Wha..?");
default:
puts("Wha..?");
}
if (wordtype[wordnumber] == OBJECT && position > 88 && (testbit(inven,value) || testbit(location[position].objects,value))){
if (wordtype[wordnumber] == OBJECT && position > 88 && (testbit(inven, value) || testbit(location[position].objects, value))) {
puts("Buried.");
if (testbit(inven,value)){
clearbit(inven,value);
if (testbit(inven, value)) {
clearbit(inven, value);
carrying -= objwt[value];
encumber -= objcumber[value];
}
clearbit(location[position].objects,value);
switch(value){
case MAID:
case DEADWOOD:
case DEADNATIVE:
case DEADTIME:
case DEADGOD:
ego += 2;
printf("The %s should rest easier now.\n",objsht[value]);
clearbit(location[position].objects, value);
switch (value) {
case MAID:
case DEADWOOD:
case DEADNATIVE:
case DEADTIME:
case DEADGOD:
ego += 2;
printf("The %s should rest easier now.\n", objsht[value]);
}
}
else
} else
puts("It doesn't seem to work.");
}
else
} else
puts("You aren't holding a shovel.");
}
void
drink()
{
int n;
int n;
if (testbit(inven,POTION)){
if (testbit(inven, POTION)) {
puts("The cool liquid runs down your throat but turns to fire and you choke.");
puts("The heat reaches your limbs and tingles your spirit. You feel like falling");
puts("asleep.");
clearbit(inven, POTION);
WEIGHT = MAXWEIGHT;
CUMBER = MAXCUMBER;
for (n=0; n < NUMOFINJURIES; n++)
for (n = 0; n < NUMOFINJURIES; n++)
injuries[n] = 0;
ourtime++;
zzz();
}
else
} else
puts("I'm not thirsty.");
}
int
shoot()
{
int firstnumber, value;
int n;
int firstnumber, value;
int n;
firstnumber = 0;
if (!testbit(inven,LASER))
if (!testbit(inven, LASER))
puts("You aren't holding a blaster.");
else {
firstnumber = wordnumber;
while(wordtype[++wordnumber] == ADJS);
while(wordnumber<=wordcount && wordtype[wordnumber] == OBJECT){
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++);
if (testbit(location[position].objects,value)){
clearbit(location[position].objects,value);
for (n = 0; objsht[value][n]; n++);
if (testbit(location[position].objects, value)) {
clearbit(location[position].objects, value);
ourtime++;
printf("The %s explode%s\n",objsht[value],(objsht[value][n-1]=='s' ? (objsht[value][n-2]=='s' ? "s." : ".") : "s."));
printf("The %s explode%s\n", objsht[value], (objsht[value][n - 1] == 's' ? (objsht[value][n - 2] == 's' ? "s." : ".") : "s."));
if (value == BOMB)
die();
}
else
} 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){
if (wordnumber <= wordcount && wordtype[wordnumber] == NOUNS) {
ourtime++;
switch(wordvalue[wordnumber]){
case DOOR:
switch(position){
case 189:
case 231:
puts("The door is unhinged.");
location[189].north = 231;
location[231].south = 189;
whichway(location[position]);
break;
case 30:
puts("The wooden door splinters.");
location[30].west = 25;
whichway(location[position]);
break;
case 31:
puts("The laser blast has no effect on the door.");
break;
case 20:
puts("The blast hits the door and it explodes into flame. The magnesium burns");
puts("so rapidly that we have no chance to escape.");
die();
default:
puts("Nothing happens.");
}
break;
switch (wordvalue[wordnumber]) {
case NORMGOD:
if (testbit(location[position].objects,BATHGOD)){
puts("The goddess is hit in the chest and splashes back against the rocks.");
puts("Dark blood oozes from the charred blast hole. Her naked body floats in the");
puts("pools and then off downstream.");
clearbit(location[position].objects,BATHGOD);
setbit(location[180].objects,DEADGOD);
power += 5;
ego -= 10;
notes[JINXED]++;
} else if (testbit(location[position].objects,NORMGOD)){
case DOOR:
switch (position) {
case 189:
case 231:
puts("The door is unhinged.");
location[189].north = 231;
location[231].south = 189;
whichway(location[position]);
break;
case 30:
puts("The wooden door splinters.");
location[30].west = 25;
whichway(location[position]);
break;
case 31:
puts("The laser blast has no effect on the door.");
break;
case 20:
puts("The blast hits the door and it explodes into flame. The magnesium burns");
puts("so rapidly that we have no chance to escape.");
die();
default:
puts("Nothing happens.");
}
break;
case NORMGOD:
if (testbit(location[position].objects, BATHGOD)) {
puts("The goddess is hit in the chest and splashes back against the rocks.");
puts("Dark blood oozes from the charred blast hole. Her naked body floats in the");
puts("pools and then off downstream.");
clearbit(location[position].objects, BATHGOD);
setbit(location[180].objects, DEADGOD);
power += 5;
ego -= 10;
notes[JINXED]++;
} else
if (testbit(location[position].objects, NORMGOD)) {
puts("The blast catches the goddess in the stomach, knocking her to the ground.");
puts("She writhes in the dirt as the agony of death taunts her.");
puts("She has stopped moving.");
clearbit(location[position].objects,NORMGOD);
setbit(location[position].objects,DEADGOD);
clearbit(location[position].objects, NORMGOD);
setbit(location[position].objects, DEADGOD);
power += 5;
ego -= 10;
notes[JINXED]++;
@ -280,46 +276,47 @@ shoot()
break;
} else
puts("I don't see any goddess around here.");
break;
break;
case TIMER:
if (testbit(location[position].objects,TIMER)){
puts("The old man slumps over the bar.");
power++;
ego -= 2;
notes[JINXED]++;
clearbit(location[position].objects,TIMER);
setbit(location[position].objects,DEADTIME);
}
else puts("What old timer?");
break;
case MAN:
if (testbit(location[position].objects,MAN)){
puts("The man falls to the ground with blood pouring all over his white suit.");
puts("Your fantasy is over.");
die();
}
else puts("What man?");
break;
case NATIVE:
if (testbit(location[position].objects,NATIVE)){
puts("The girl is blown backwards several feet and lies in a pool of blood.");
clearbit(location[position].objects,NATIVE);
setbit(location[position].objects,DEADNATIVE);
power += 5;
ego -= 2;
notes[JINXED]++;
} else puts("There is no girl here.");
break;
case -1:
puts("Shoot what?");
break;
case TIMER:
if (testbit(location[position].objects, TIMER)) {
puts("The old man slumps over the bar.");
power++;
ego -= 2;
notes[JINXED]++;
clearbit(location[position].objects, TIMER);
setbit(location[position].objects, DEADTIME);
} else
puts("What old timer?");
break;
case MAN:
if (testbit(location[position].objects, MAN)) {
puts("The man falls to the ground with blood pouring all over his white suit.");
puts("Your fantasy is over.");
die();
} else
puts("What man?");
break;
case NATIVE:
if (testbit(location[position].objects, NATIVE)) {
puts("The girl is blown backwards several feet and lies in a pool of blood.");
clearbit(location[position].objects, NATIVE);
setbit(location[position].objects, DEADNATIVE);
power += 5;
ego -= 2;
notes[JINXED]++;
} else
puts("There is no girl here.");
break;
case -1:
puts("Shoot what?");
break;
default:
printf("You can't shoot the %s.\n",objsht[wordvalue[wordnumber]]);
default:
printf("You can't shoot the %s.\n", objsht[wordvalue[wordnumber]]);
}
}
else puts("You must be a looney.");
} else
puts("You must be a looney.");
}
return(firstnumber);
return (firstnumber);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: com4.c,v 1.5 1997/10/10 11:39:25 lukem Exp $ */
/* $NetBSD: com4.c,v 1.6 1997/10/11 02:07:04 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,9 +38,9 @@
#if 0
static char sccsid[] = "@(#)com4.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com4.c,v 1.5 1997/10/10 11:39:25 lukem Exp $");
__RCSID("$NetBSD: com4.c,v 1.6 1997/10/11 02:07:04 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
@ -48,251 +48,251 @@ int
take(from)
unsigned int from[];
{
int firstnumber, heavy, bulky, value;
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];
ourtime++;
if (testbit(from,value))
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)){
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));
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;
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.");
}
wordtype[wordnumber--] = OBJECT;
return(take(from));
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 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 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))
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
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;
{
int n;
int deposit = 0;
int first, value;
int n;
int deposit = 0;
int first, value;
first = wordnumber;
if (drop(name) != -1){
switch(wordvalue[wordnumber]){
case AHEAD:
deposit = ahead;
break;
if (drop(name) != -1) {
switch (wordvalue[wordnumber]) {
case BACK:
deposit = back;
break;
case AHEAD:
deposit = ahead;
break;
case LEFT:
deposit = left;
break;
case BACK:
deposit = back;
break;
case RIGHT:
deposit = right;
break;
case LEFT:
deposit = left;
break;
case UP:
deposit = location[position].up * (location[position].access || position == FINAL);
break;
case RIGHT:
deposit = right;
break;
case DOWN:
deposit = location[position].down;
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();
}
}
else if (value == GRENADE && testbit(location[position].objects,value)){
puts("You are blown into shreds when your grenade explodes.");
die();
}
if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
wordnumber++;
else
return(first);
else
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();
}
if (value != AMULET && value != MEDALION && value != TALISMAN)
setbit(location[position].objects,value);
setbit(location[position].objects, value);
else
tempwiz = 0;
ourtime++;
@ -300,15 +300,15 @@ drop(name)
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')
puts("Given anyway.");
else
if (*name == 'G')
puts("Given anyway.");
}
} else
puts("Kicked.");
@ -316,79 +316,80 @@ drop(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);
switch (value) {
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 -1:
puts("Eat what?");
return (firstnumber);
case PAPAYAS:
case PINEAPPLE:
case KIWI:
case COCONUTS: /* eatable things */
case MANGO:
default:
printf("You can't eat%s%s!\n",
wordtype[wordnumber] == OBJECT &&
objsht[value]
[strlen(objsht[value]) - 1] == 's' ?
" " : " a ",
words[wordnumber]);
return (firstnumber);
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)
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);
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);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: com5.c,v 1.5 1997/10/10 11:39:30 lukem Exp $ */
/* $NetBSD: com5.c,v 1.6 1997/10/11 02:07:06 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,9 +38,9 @@
#if 0
static char sccsid[] = "@(#)com5.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com5.c,v 1.5 1997/10/10 11:39:30 lukem Exp $");
__RCSID("$NetBSD: com5.c,v 1.6 1997/10/11 02:07:06 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
@ -49,75 +49,74 @@ kiss()
{
while (wordtype[++wordnumber] != NOUNS && wordnumber <= wordcount);
if (wordtype[wordnumber] == NOUNS &&
testbit(location[position].objects,wordvalue[wordnumber])){
testbit(location[position].objects, wordvalue[wordnumber])) {
pleasure++;
printf("Kissed.\n");
switch (wordvalue[wordnumber]){
case NORMGOD:
switch(godready++){
case 0:
puts("She squirms and avoids your advances.");
break;
case 1:
puts("She is coming around; she didn't fight it as much.");
break;
case 2:
puts("She's begining to like it.");
break;
default:
puts("She's gone limp.");
}
break;
case NATIVE:
puts("The lips are warm and her body robust. She pulls you down to the ground.");
switch (wordvalue[wordnumber]) {
case NORMGOD:
switch (godready++) {
case 0:
puts("She squirms and avoids your advances.");
break;
case TIMER:
puts("The old man blushes.");
case 1:
puts("She is coming around; she didn't fight it as much.");
break;
case MAN:
puts("The dwarf punches you in the kneecap.");
case 2:
puts("She's begining to like it.");
break;
default:
pleasure--;
puts("She's gone limp.");
}
break;
case NATIVE:
puts("The lips are warm and her body robust. She pulls you down to the ground.");
break;
case TIMER:
puts("The old man blushes.");
break;
case MAN:
puts("The dwarf punches you in the kneecap.");
break;
default:
pleasure--;
}
}
else puts("I'd prefer not to.");
} else
puts("I'd prefer not to.");
}
void
love()
{
int n;
int n;
while (wordtype[++wordnumber] != NOUNS && wordnumber <= wordcount);
if (wordtype[wordnumber] == NOUNS && testbit(location[position].objects,wordvalue[wordnumber])){
if (wordtype[wordnumber] == NOUNS && testbit(location[position].objects, wordvalue[wordnumber])) {
if (wordvalue[wordnumber] == NORMGOD && !loved)
if (godready >= 2){
if (godready >= 2) {
puts("She cuddles up to you, and her mouth starts to work:\n'That was my sister's amulet. The lovely goddess, Purl, was she. The Empire\ncaptured her just after the Darkness came. My other sister, Vert, was killed\nby the Dark Lord himself. He took her amulet and warped its power.\nYour quest was foretold by my father before he died, but to get the Dark Lord's\namulet you must use cunning and skill. I will leave you my amulet.");
puts("which you may use as you wish. As for me, I am the last goddess of the\nwaters. My father was the Island King, and the rule is rightfully mine.'\n\nShe pulls the throne out into a large bed.");
power++;
pleasure += 15;
ego++;
if (card(injuries, NUMOFINJURIES)){
if (card(injuries, NUMOFINJURIES)) {
puts("Her kisses revive you; your wounds are healed.\n");
for (n=0; n < NUMOFINJURIES; n++)
for (n = 0; n < NUMOFINJURIES; n++)
injuries[n] = 0;
WEIGHT = MAXWEIGHT;
CUMBER = MAXCUMBER;
}
printf("Goddess:\n");
if (!loved)
setbit(location[position].objects,MEDALION);
setbit(location[position].objects, MEDALION);
loved = 1;
ourtime += 10;
zzz();
}
else {
} else {
puts("You wish!");
return;
}
if (wordvalue[wordnumber] == NATIVE){
if (wordvalue[wordnumber] == NATIVE) {
puts("The girl is easy prey. She peals off her sarong and indulges you.");
power++;
pleasure += 5;
@ -126,95 +125,94 @@ love()
zzz();
}
printf("Loved.\n");
}
else puts("It doesn't seem to work.");
} else
puts("It doesn't seem to work.");
}
int
zzz()
{
int oldtime;
int n;
int oldtime;
int n;
oldtime = ourtime;
if ((snooze - ourtime) < (0.75 * CYCLE)){
if ((snooze - ourtime) < (0.75 * CYCLE)) {
ourtime += 0.75 * CYCLE - (snooze - ourtime);
printf("<zzz>");
for (n = 0; n < ourtime - oldtime; n++)
printf(".");
printf("\n");
snooze += 3 * (ourtime - oldtime);
if (notes[LAUNCHED]){
if (notes[LAUNCHED]) {
fuel -= (ourtime - oldtime);
if (location[position].down){
if (location[position].down) {
position = location[position].down;
crash();
}
else
} else
notes[LAUNCHED] = 0;
}
if (OUTSIDE && rnd(100) < 50){
if (OUTSIDE && rnd(100) < 50) {
puts("You are awakened abruptly by the sound of someone nearby.");
switch(rnd(4)){
case 0:
if (ucard(inven)){
switch (rnd(4)) {
case 0:
if (ucard(inven)) {
n = rnd(NUMOFOBJECTS);
while (!testbit(inven, n))
n = rnd(NUMOFOBJECTS);
while(!testbit(inven,n))
n = rnd(NUMOFOBJECTS);
clearbit(inven,n);
if (n != AMULET && n != MEDALION && n != TALISMAN)
setbit(location[position].objects,n);
carrying -= objwt[n];
encumber -= objcumber[n];
}
puts("A fiendish little Elf is stealing your treasures!");
fight(ELF,10);
break;
case 1:
setbit(location[position].objects,DEADWOOD);
break;
case 2:
setbit(location[position].objects,HALBERD);
break;
default:
break;
clearbit(inven, n);
if (n != AMULET && n != MEDALION && n != TALISMAN)
setbit(location[position].objects, n);
carrying -= objwt[n];
encumber -= objcumber[n];
}
puts("A fiendish little Elf is stealing your treasures!");
fight(ELF, 10);
break;
case 1:
setbit(location[position].objects, DEADWOOD);
break;
case 2:
setbit(location[position].objects, HALBERD);
break;
default:
break;
}
}
}
else
return(0);
return(1);
} else
return (0);
return (1);
}
void
chime()
{
if ((ourtime / CYCLE + 1) % 2 && OUTSIDE)
switch((ourtime % CYCLE)/(CYCLE / 7)){
switch ((ourtime % CYCLE) / (CYCLE / 7)) {
case 0:
puts("It is just after sunrise.");
break;
case 1:
puts("It is early morning.");
break;
case 2:
puts("It is late morning.");
break;
case 3:
puts("It is near noon.");
break;
case 4:
puts("It is early afternoon.");
break;
case 5:
puts("It is late afternoon.");
break;
case 6:
puts("It is near sunset.");
break;
puts("It is just after sunrise.");
break;
case 1:
puts("It is early morning.");
break;
case 2:
puts("It is late morning.");
break;
case 3:
puts("It is near noon.");
break;
case 4:
puts("It is early afternoon.");
break;
case 5:
puts("It is late afternoon.");
break;
case 6:
puts("It is near sunset.");
break;
}
else if (OUTSIDE)
switch((ourtime % CYCLE)/(CYCLE / 7)){
else
if (OUTSIDE)
switch ((ourtime % CYCLE) / (CYCLE / 7)) {
case 0:
puts("It is just after sunset.");
break;
@ -236,20 +234,20 @@ chime()
case 6:
puts("It is almost morning.");
break;
}
else
puts("I can't tell the time in here.");
}
else
puts("I can't tell the time in here.");
}
int
give()
{
int obj = -1, result = -1, person = 0, firstnumber, last1, last2;
int obj = -1, result = -1, person = 0, firstnumber, last1, last2;
last1 = last2 = 0;
firstnumber = wordnumber;
while (wordtype[++wordnumber] != OBJECT && wordvalue[wordnumber] != AMULET && wordvalue[wordnumber] != MEDALION && wordvalue[wordnumber] != TALISMAN && wordnumber <= wordcount);
if (wordnumber <= wordcount){
while (wordtype[++wordnumber] != OBJECT && wordvalue[wordnumber] != AMULET && wordvalue[wordnumber] != MEDALION && wordvalue[wordnumber] != TALISMAN && wordnumber <= wordcount);
if (wordnumber <= wordcount) {
obj = wordvalue[wordnumber];
if (obj == EVERYTHING)
wordtype[wordnumber] = -1;
@ -257,82 +255,82 @@ give()
}
wordnumber = firstnumber;
while ((wordtype[++wordnumber] != NOUNS || wordvalue[wordnumber] == obj) && wordnumber <= wordcount);
if (wordtype[wordnumber] == NOUNS){
if (wordtype[wordnumber] == NOUNS) {
person = wordvalue[wordnumber];
last2 = wordnumber;
}
wordnumber = last1 - 1;
if (person && testbit(location[position].objects,person))
if (person && testbit(location[position].objects, person))
if (person == NORMGOD && godready < 2 && !(obj == RING || obj == BRACELET))
puts("The goddess won't look at you.");
else
result = drop("Given");
else {
puts("I don't think that is possible.");
return(0);
return (0);
}
if (result != -1 && (testbit(location[position].objects,obj) || obj == AMULET || obj == MEDALION || obj == TALISMAN)){
clearbit(location[position].objects,obj);
if (result != -1 && (testbit(location[position].objects, obj) || obj == AMULET || obj == MEDALION || obj == TALISMAN)) {
clearbit(location[position].objects, obj);
ourtime++;
ego++;
switch(person){
case NATIVE:
puts("She accepts it shyly.");
ego += 2;
break;
case NORMGOD:
if (obj == RING || obj == BRACELET){
puts("She takes the charm and puts it on. A little kiss on the cheek is");
puts("your reward.");
ego += 5;
godready += 3;
switch (person) {
case NATIVE:
puts("She accepts it shyly.");
ego += 2;
break;
case NORMGOD:
if (obj == RING || obj == BRACELET) {
puts("She takes the charm and puts it on. A little kiss on the cheek is");
puts("your reward.");
ego += 5;
godready += 3;
}
if (obj == AMULET || obj == MEDALION || obj == TALISMAN) {
win++;
ego += 5;
power -= 5;
if (win >= 3) {
puts("The powers of the earth are now legitimate. You have destroyed the Darkness");
puts("and restored the goddess to her thrown. The entire island celebrates with");
puts("dancing and spring feasts. As a measure of her gratitude, the goddess weds you");
puts("in the late summer and crowns you Prince Liverwort, Lord of Fungus.");
puts("\nBut, as the year wears on and autumn comes along, you become restless and");
puts("yearn for adventure. The goddess, too, realizes that the marriage can't last.");
puts("She becomes bored and takes several more natives as husbands. One evening,");
puts("after having been out drinking with the girls, she kicks the throne particulary");
puts("hard and wakes you up. (If you want to win this game, you're going to have to\nshoot her!)");
clearbit(location[position].objects, MEDALION);
wintime = ourtime;
}
if (obj == AMULET || obj == MEDALION || obj == TALISMAN){
win++;
ego += 5;
power -= 5;
if (win >= 3){
puts("The powers of the earth are now legitimate. You have destroyed the Darkness");
puts("and restored the goddess to her thrown. The entire island celebrates with");
puts("dancing and spring feasts. As a measure of her gratitude, the goddess weds you");
puts("in the late summer and crowns you Prince Liverwort, Lord of Fungus.");
puts("\nBut, as the year wears on and autumn comes along, you become restless and");
puts("yearn for adventure. The goddess, too, realizes that the marriage can't last.");
puts("She becomes bored and takes several more natives as husbands. One evening,");
puts("after having been out drinking with the girls, she kicks the throne particulary");
puts("hard and wakes you up. (If you want to win this game, you're going to have to\nshoot her!)");
clearbit(location[position].objects,MEDALION);
wintime = ourtime;
}
}
break;
case TIMER:
if (obj == COINS){
puts("He fingers the coins for a moment and then looks up agape. `Kind you are and");
puts("I mean to repay you as best I can.' Grabbing a pencil and cocktail napkin...\n");
printf( "+-----------------------------------------------------------------------------+\n");
printf( "| xxxxxxxx\\ |\n");
printf( "| xxxxx\\ CLIFFS |\n");
printf( "| FOREST xxx\\ |\n");
printf( "| \\\\ x\\ OCEAN |\n");
printf( "| || x\\ |\n");
printf( "| || ROAD x\\ |\n");
printf( "| || x\\ |\n");
printf( "| SECRET || ......... |\n");
printf( "| - + - || ........ |\n");
printf( "| ENTRANCE || ... BEACH |\n");
printf( "| || ... E |\n");
printf( "| || ... | |\n");
printf( "| // ... N <-- + --- S |\n");
printf( "| PALM GROVE // ... | |\n");
printf( "| // ... W |\n");
printf( "+-----------------------------------------------------------------------------+\n");
puts("\n`This map shows a secret entrance to the catacombs.");
puts("You will know when you arrive because I left an old pair of shoes there.'");
}
break;
}
break;
case TIMER:
if (obj == COINS) {
puts("He fingers the coins for a moment and then looks up agape. `Kind you are and");
puts("I mean to repay you as best I can.' Grabbing a pencil and cocktail napkin...\n");
printf("+-----------------------------------------------------------------------------+\n");
printf("| xxxxxxxx\\ |\n");
printf("| xxxxx\\ CLIFFS |\n");
printf("| FOREST xxx\\ |\n");
printf("| \\\\ x\\ OCEAN |\n");
printf("| || x\\ |\n");
printf("| || ROAD x\\ |\n");
printf("| || x\\ |\n");
printf("| SECRET || ......... |\n");
printf("| - + - || ........ |\n");
printf("| ENTRANCE || ... BEACH |\n");
printf("| || ... E |\n");
printf("| || ... | |\n");
printf("| // ... N <-- + --- S |\n");
printf("| PALM GROVE // ... | |\n");
printf("| // ... W |\n");
printf("+-----------------------------------------------------------------------------+\n");
puts("\n`This map shows a secret entrance to the catacombs.");
puts("You will know when you arrive because I left an old pair of shoes there.'");
}
break;
}
}
wordnumber = max(last1,last2);
return(firstnumber);
wordnumber = max(last1, last2);
return (firstnumber);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: com6.c,v 1.7 1997/10/10 11:39:32 lukem Exp $ */
/* $NetBSD: com6.c,v 1.8 1997/10/11 02:07:08 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,9 +38,9 @@
#if 0
static char sccsid[] = "@(#)com6.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com6.c,v 1.7 1997/10/10 11:39:32 lukem Exp $");
__RCSID("$NetBSD: com6.c,v 1.8 1997/10/11 02:07:08 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
#include "pathnames.h"
@ -48,46 +48,43 @@ __RCSID("$NetBSD: com6.c,v 1.7 1997/10/10 11:39:32 lukem Exp $");
int
launch()
{
if (testbit(location[position].objects,VIPER) && !notes[CANTLAUNCH]){
if (fuel > 4){
clearbit(location[position].objects,VIPER);
if (testbit(location[position].objects, VIPER) && !notes[CANTLAUNCH]) {
if (fuel > 4) {
clearbit(location[position].objects, VIPER);
position = location[position].up;
notes[LAUNCHED] = 1;
ourtime++;
fuel -= 4;
puts("You climb into the viper and prepare for launch.");
puts("With a touch of your thumb the turbo engines ignite, thrusting you back into\nyour seat.");
return(1);
}
else
return (1);
} else
puts("Not enough fuel to launch.");
}
else
} else
puts("Can't launch.");
return(0);
return (0);
}
int
land()
{
if (notes[LAUNCHED] && testbit(location[position].objects,LAND) &&
location[position].down){
if (notes[LAUNCHED] && testbit(location[position].objects, LAND) &&
location[position].down) {
notes[LAUNCHED] = 0;
position = location[position].down;
setbit(location[position].objects,VIPER);
setbit(location[position].objects, VIPER);
fuel -= 2;
ourtime++;
puts("You are down.");
return(1);
}
else
return (1);
} else
puts("You can't land here.");
return(0);
return (0);
}
void
die() /* endgame */
{
die()
{ /* endgame */
printf("bye.\nYour rating was %s.\n", rate());
post(' ');
exit(0);
@ -95,7 +92,7 @@ die() /* endgame */
void
diesig(dummy)
int dummy;
int dummy;
{
die();
}
@ -110,122 +107,134 @@ live()
void
post(ch)
char ch;
char ch;
{
FILE *fp;
FILE *fp;
struct timeval tv;
char *date;
char *date;
sigset_t sigset, osigset;
sigemptyset(&sigset);
sigaddset(&sigset, SIGINT);
sigprocmask(SIG_BLOCK, &sigset, &osigset);
gettimeofday(&tv, (struct timezone *)0); /* can't call time */
gettimeofday(&tv, (struct timezone *) 0); /* can't call time */
date = ctime(&tv.tv_sec);
date[24] = '\0';
if ((fp = fopen(_PATH_SCORE,"a")) != NULL) {
if ((fp = fopen(_PATH_SCORE, "a")) != NULL) {
fprintf(fp, "%s %8s %c%20s", date, uname, ch, rate());
if (wiz)
fprintf(fp, " wizard\n");
else if (tempwiz)
fprintf(fp, " WIZARD!\n");
else
fprintf(fp, "\n");
if (tempwiz)
fprintf(fp, " WIZARD!\n");
else
fprintf(fp, "\n");
} else
perror(_PATH_SCORE);
sigprocmask(SIG_SETMASK, &osigset, (sigset_t *)0);
warn("fopen %s", _PATH_SCORE);
sigprocmask(SIG_SETMASK, &osigset, (sigset_t *) 0);
}
char *
char *
rate()
{
int score;
int score;
score = max(max(pleasure,power),ego);
if (score == pleasure){
score = max(max(pleasure, power), ego);
if (score == pleasure) {
if (score < 5)
return("novice");
else if (score < 20)
return("junior voyeur");
else if (score < 35)
return("Don Juan");
else return("Marquis De Sade");
}
else if (score == power){
if (score < 5)
return("serf");
else if (score < 8)
return("Samurai");
else if (score < 13)
return("Klingon");
else if (score < 22)
return("Darth Vader");
else return("Sauron the Great");
}
else{
if (score < 5)
return("Polyanna");
else if (score < 10)
return("philanthropist");
else if (score < 20)
return("Tattoo");
else return("Mr. Roarke");
}
return ("novice");
else
if (score < 20)
return ("junior voyeur");
else
if (score < 35)
return ("Don Juan");
else
return ("Marquis De Sade");
} else
if (score == power) {
if (score < 5)
return ("serf");
else
if (score < 8)
return ("Samurai");
else
if (score < 13)
return ("Klingon");
else
if (score < 22)
return ("Darth Vader");
else
return ("Sauron the Great");
} else {
if (score < 5)
return ("Polyanna");
else
if (score < 10)
return ("philanthropist");
else
if (score < 20)
return ("Tattoo");
else
return ("Mr. Roarke");
}
}
int
drive()
{
if (testbit(location[position].objects,CAR)){
if (testbit(location[position].objects, CAR)) {
puts("You hop in the car and turn the key. There is a perceptible grating noise,");
puts("and an explosion knocks you unconscious...");
clearbit(location[position].objects,CAR);
setbit(location[position].objects,CRASH);
clearbit(location[position].objects, CAR);
setbit(location[position].objects, CRASH);
injuries[5] = injuries[6] = injuries[7] = injuries[8] = 1;
ourtime += 15;
zzz();
return(0);
}
else
return (0);
} else
puts("There is nothing to drive here.");
return(-1);
return (-1);
}
int
ride()
{
if (testbit(location[position].objects,HORSE)){
if (testbit(location[position].objects, HORSE)) {
puts("You climb onto the stallion and kick it in the guts. The stupid steed launches");
puts("forward through bush and fern. You are thrown and the horse gallups off.");
clearbit(location[position].objects,HORSE);
while (!(position = rnd(NUMOFROOMS+1)) || !OUTSIDE || !beenthere[position] || location[position].flyhere);
setbit(location[position].objects,HORSE);
clearbit(location[position].objects, HORSE);
while (!(position = rnd(NUMOFROOMS + 1)) || !OUTSIDE || !beenthere[position] || location[position].flyhere);
setbit(location[position].objects, HORSE);
if (location[position].north)
position = location[position].north;
else if (location[position].south)
position = location[position].south;
else if (location[position].east)
position = location[position].east;
else
position = location[position].west;
return(0);
}
else puts("There is no horse here.");
return(-1);
if (location[position].south)
position = location[position].south;
else
if (location[position].east)
position = location[position].east;
else
position = location[position].west;
return (0);
} else
puts("There is no horse here.");
return (-1);
}
void
light() /* synonyms = {strike, smoke} */
{ /* for matches, cigars */
if (testbit(inven,MATCHES) && matchcount){
light()
{ /* synonyms = {strike, smoke} *//* for
* matches, cigars */
if (testbit(inven, MATCHES) && matchcount) {
puts("Your match splutters to life.");
ourtime++;
matchlight = 1;
matchcount--;
if (position == 217){
if (position == 217) {
puts("The whole bungalow explodes with an intense blast.");
die();
}
}
else puts("You're out of matches.");
} else
puts("You're out of matches.");
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: com7.c,v 1.5 1997/10/10 11:39:35 lukem Exp $ */
/* $NetBSD: com7.c,v 1.6 1997/10/11 02:07:10 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,29 +38,29 @@
#if 0
static char sccsid[] = "@(#)com7.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com7.c,v 1.5 1997/10/10 11:39:35 lukem Exp $");
__RCSID("$NetBSD: com7.c,v 1.6 1997/10/11 02:07:10 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
int
fight(enemy, strength)
int enemy,strength;
int enemy, strength;
{
int lifeline = 0;
int hurt;
char auxbuf[LINELENGTH];
char *next;
int i;
int exhaustion;
int lifeline = 0;
int hurt;
char auxbuf[LINELENGTH];
char *next;
int i;
int exhaustion;
exhaustion = 0;
fighton:
ourtime++;
snooze -= 5;
if (snooze > ourtime)
exhaustion = CYCLE/(snooze - ourtime);
exhaustion = CYCLE / (snooze - ourtime);
else {
puts("You collapse exhausted, and he pulverizes your skull.");
die();
@ -68,50 +68,53 @@ fighton:
if (snooze - ourtime < 20)
puts("You look tired! I hope you're able to fight.");
next = getcom(auxbuf, LINELENGTH, "<fight!>-: ", 0);
for (i=0; next && i < 10; i++)
for (i = 0; next && i < 10; i++)
next = getword(next, words[i], -1);
parse();
switch(wordvalue[wordnumber]){
switch (wordvalue[wordnumber]) {
case KILL:
case SMITE:
if (testbit(inven,TWO_HANDED))
hurt = rnd(70) - 2 * card(injuries,NUMOFINJURIES) - ucard(wear) - exhaustion;
else if (testbit(inven,SWORD) || testbit(inven, BROAD))
hurt = rnd(50)%(WEIGHT-carrying)-card(injuries,NUMOFINJURIES)-encumber - exhaustion;
else if (testbit(inven,KNIFE) || testbit(inven,MALLET) || testbit(inven,CHAIN) || testbit(inven,MACE) || testbit(inven,HALBERD))
hurt = rnd(15) - card(injuries,NUMOFINJURIES) - exhaustion;
else
hurt = rnd(7) - encumber;
if (hurt < 5)
switch(rnd(3)){
case KILL:
case SMITE:
if (testbit(inven, TWO_HANDED))
hurt = rnd(70) - 2 * card(injuries, NUMOFINJURIES) - ucard(wear) - exhaustion;
else
if (testbit(inven, SWORD) || testbit(inven, BROAD))
hurt = rnd(50) % (WEIGHT - carrying) - card(injuries, NUMOFINJURIES) - encumber - exhaustion;
else
if (testbit(inven, KNIFE) || testbit(inven, MALLET) || testbit(inven, CHAIN) || testbit(inven, MACE) || testbit(inven, HALBERD))
hurt = rnd(15) - card(injuries, NUMOFINJURIES) - exhaustion;
else
hurt = rnd(7) - encumber;
if (hurt < 5)
switch (rnd(3)) {
case 0:
puts("You swung wide and missed.");
break;
case 1:
puts("He checked your blow. CLASH! CLANG!");
break;
case 2:
puts("His filthy tunic hangs by one less thread.");
break;
}
else if (hurt < 10){
switch(rnd(3)){
case 0:
puts("He's bleeding.");
break;
case 1:
puts("A trickle of blood runs down his face.");
break;
case 2:
puts("A huge purple bruise is forming on the side of his face.");
break;
case 0:
puts("You swung wide and missed.");
break;
case 1:
puts("He checked your blow. CLASH! CLANG!");
break;
case 2:
puts("His filthy tunic hangs by one less thread.");
break;
}
else
if (hurt < 10) {
switch (rnd(3)) {
case 0:
puts("He's bleeding.");
break;
case 1:
puts("A trickle of blood runs down his face.");
break;
case 2:
puts("A huge purple bruise is forming on the side of his face.");
break;
}
lifeline++;
}
else if (hurt < 20){
switch(rnd(3)){
} else
if (hurt < 20) {
switch (rnd(3)) {
case 0:
puts("He staggers back quavering.");
break;
@ -121,155 +124,151 @@ fighton:
case 2:
puts("His shirt falls open with a swath across the chest.");
break;
}
lifeline += 5;
}
else if (hurt < 30){
switch(rnd(3)){
case 0:
printf("A bloody gash opens up on his %s side.\n",(rnd(2) ? "left" : "right"));
break;
case 1:
puts("The steel bites home and scrapes along his ribs.");
break;
case 2:
puts("You pierce him, and his breath hisses through clenched teeth.");
break;
}
lifeline += 10;
}
else if (hurt < 40){
switch(rnd(3)){
case 0:
puts("You smite him to the ground.");
if (strength - lifeline > 20)
puts("But in a flurry of steel he regains his feet!");
break;
case 1:
puts("The force of your blow sends him to his knees.");
puts("His arm swings lifeless at his side.");
break;
case 2:
puts("Clutching his blood drenched shirt, he collapses stunned.");
break;
}
lifeline += 20;
}
else {
switch(rnd(3)){
case 0:
puts("His ribs crack under your powerful swing, flooding his lungs with blood.");
break;
case 1:
puts("You shatter his upheld arm in a spray of blood. The blade continues deep");
puts("into his back, severing the spinal cord.");
lifeline += 25;
break;
case 2:
puts("With a mighty lunge the steel slides in, and gasping, he falls to the ground.");
lifeline += 25;
break;
}
lifeline += 30;
}
break;
}
lifeline += 5;
} else
if (hurt < 30) {
switch (rnd(3)) {
case 0:
printf("A bloody gash opens up on his %s side.\n", (rnd(2) ? "left" : "right"));
break;
case 1:
puts("The steel bites home and scrapes along his ribs.");
break;
case 2:
puts("You pierce him, and his breath hisses through clenched teeth.");
break;
}
lifeline += 10;
} else
if (hurt < 40) {
switch (rnd(3)) {
case 0:
puts("You smite him to the ground.");
if (strength - lifeline > 20)
puts("But in a flurry of steel he regains his feet!");
break;
case 1:
puts("The force of your blow sends him to his knees.");
puts("His arm swings lifeless at his side.");
break;
case 2:
puts("Clutching his blood drenched shirt, he collapses stunned.");
break;
}
lifeline += 20;
} else {
switch (rnd(3)) {
case 0:
puts("His ribs crack under your powerful swing, flooding his lungs with blood.");
break;
case 1:
puts("You shatter his upheld arm in a spray of blood. The blade continues deep");
puts("into his back, severing the spinal cord.");
lifeline += 25;
break;
case 2:
puts("With a mighty lunge the steel slides in, and gasping, he falls to the ground.");
lifeline += 25;
break;
}
lifeline += 30;
}
break;
case BACK:
if (enemy == DARK && lifeline > strength * 0.33){
puts("He throws you back against the rock and pummels your face.");
if (testbit(inven,AMULET) || testbit(wear,AMULET)){
printf("Lifting the amulet from you, ");
if (testbit(inven,MEDALION) || testbit(wear,MEDALION)){
puts("his power grows and the walls of\nthe earth tremble.");
puts("When he touches the medallion, your chest explodes and the foundations of the\nearth collapse.");
puts("The planet is consumed by darkness.");
die();
}
if (testbit(inven,AMULET)){
clearbit(inven,AMULET);
carrying -= objwt[AMULET];
encumber -= objcumber[AMULET];
}
else
clearbit(wear,AMULET);
puts("he flees down the dark caverns.");
clearbit(location[position].objects,DARK);
injuries[SKULL] = 1;
followfight = ourtime;
return (0);
}
else{
puts("I'm afraid you have been killed.");
case BACK:
if (enemy == DARK && lifeline > strength * 0.33) {
puts("He throws you back against the rock and pummels your face.");
if (testbit(inven, AMULET) || testbit(wear, AMULET)) {
printf("Lifting the amulet from you, ");
if (testbit(inven, MEDALION) || testbit(wear, MEDALION)) {
puts("his power grows and the walls of\nthe earth tremble.");
puts("When he touches the medallion, your chest explodes and the foundations of the\nearth collapse.");
puts("The planet is consumed by darkness.");
die();
}
if (testbit(inven, AMULET)) {
clearbit(inven, AMULET);
carrying -= objwt[AMULET];
encumber -= objcumber[AMULET];
} else
clearbit(wear, AMULET);
puts("he flees down the dark caverns.");
clearbit(location[position].objects, DARK);
injuries[SKULL] = 1;
followfight = ourtime;
return (0);
} else {
puts("I'm afraid you have been killed.");
die();
}
else{
puts("You escape stunned and disoriented from the fight.");
puts("A victorious bellow echoes from the battlescene.");
if (back && position != back)
move(back,BACK);
else if (ahead &&position != ahead)
move(ahead,AHEAD);
else if (left && position != left)
move(left,LEFT);
else if (right && position != right)
move(right,RIGHT);
else
move(location[position].down,AHEAD);
return(0);
}
case SHOOT:
if (testbit(inven,LASER)){
if (strength - lifeline <= 50){
printf("The %s took a direct hit!\n",objsht[enemy]);
lifeline += 50;
}
else {
puts("With his bare hand he deflects the laser blast and whips the pistol from you!");
clearbit(inven,LASER);
setbit(location[position].objects,LASER);
carrying -= objwt[LASER];
encumber -= objcumber[LASER];
}
}
} else {
puts("You escape stunned and disoriented from the fight.");
puts("A victorious bellow echoes from the battlescene.");
if (back && position != back)
move(back, BACK);
else
puts("Unfortunately, you don't have a blaster handy.");
break;
if (ahead && position != ahead)
move(ahead, AHEAD);
else
if (left && position != left)
move(left, LEFT);
else
if (right && position != right)
move(right, RIGHT);
else
move(location[position].down, AHEAD);
return (0);
}
case DROP:
case DRAW:
cypher();
ourtime--;
break;
default:
puts("You don't have a chance, he is too quick.");
break;
case SHOOT:
if (testbit(inven, LASER)) {
if (strength - lifeline <= 50) {
printf("The %s took a direct hit!\n", objsht[enemy]);
lifeline += 50;
} else {
puts("With his bare hand he deflects the laser blast and whips the pistol from you!");
clearbit(inven, LASER);
setbit(location[position].objects, LASER);
carrying -= objwt[LASER];
encumber -= objcumber[LASER];
}
} else
puts("Unfortunately, you don't have a blaster handy.");
break;
case DROP:
case DRAW:
cypher();
ourtime--;
break;
default:
puts("You don't have a chance, he is too quick.");
break;
}
if (lifeline >= strength){
if (lifeline >= strength) {
printf("You have killed the %s.\n", objsht[enemy]);
if (enemy == ELF || enemy == DARK)
puts("A watery black smoke consumes his body and then vanishes with a peal of thunder!");
clearbit(location[position].objects,enemy);
clearbit(location[position].objects, enemy);
power += 2;
notes[JINXED]++;
return(0);
return (0);
}
puts("He attacks...");
/* some embellisments */
hurt = rnd(NUMOFINJURIES) - (testbit(inven,SHIELD) != 0) - (testbit(wear,MAIL) != 0) - (testbit(wear,HELM) != 0);
hurt += (testbit(wear,AMULET) != 0) + (testbit(wear,MEDALION) != 0) + (testbit(wear,TALISMAN) != 0);
hurt = rnd(NUMOFINJURIES) - (testbit(inven, SHIELD) != 0) - (testbit(wear, MAIL) != 0) - (testbit(wear, HELM) != 0);
hurt += (testbit(wear, AMULET) != 0) + (testbit(wear, MEDALION) != 0) + (testbit(wear, TALISMAN) != 0);
hurt = hurt < 0 ? 0 : hurt;
hurt = hurt >= NUMOFINJURIES ? NUMOFINJURIES -1 : hurt;
if (!injuries[hurt]){
hurt = hurt >= NUMOFINJURIES ? NUMOFINJURIES - 1 : hurt;
if (!injuries[hurt]) {
injuries[hurt] = 1;
printf("I'm afraid you have suffered %s.\n", ouch[hurt]);
}
else
} else
puts("You emerge unscathed.");
if (injuries[SKULL] && injuries[INCISE] && injuries[NECK]){
if (injuries[SKULL] && injuries[INCISE] && injuries[NECK]) {
puts("I'm afraid you have suffered fatal injuries.");
die();
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: cypher.c,v 1.5 1997/10/10 11:39:38 lukem Exp $ */
/* $NetBSD: cypher.c,v 1.6 1997/10/11 02:07:11 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,403 +38,392 @@
#if 0
static char sccsid[] = "@(#)cypher.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: cypher.c,v 1.5 1997/10/10 11:39:38 lukem Exp $");
__RCSID("$NetBSD: cypher.c,v 1.6 1997/10/11 02:07:11 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
int
cypher()
{
int n;
int junk;
int lflag = -1;
char buffer[10];
int n;
int junk;
int lflag = -1;
char buffer[10];
while (wordtype[wordnumber] == ADJS)
wordnumber++;
while (wordnumber <= wordcount) {
switch(wordvalue[wordnumber]) {
switch (wordvalue[wordnumber]) {
case UP:
if (location[position].access || wiz || tempwiz) {
if (!location[position].access)
puts("Zap! A gust of wind lifts you up.");
if (!move(location[position].up, AHEAD))
return(-1);
} else {
puts("There is no way up");
return(-1);
}
lflag = 0;
break;
case UP:
if (location[position].access || wiz || tempwiz) {
if (!location[position].access)
puts("Zap! A gust of wind lifts you up.");
if (!move(location[position].up, AHEAD))
return (-1);
} else {
puts("There is no way up");
return (-1);
}
lflag = 0;
break;
case DOWN:
if (!move(location[position].down, AHEAD))
return(-1);
lflag = 0;
break;
case DOWN:
if (!move(location[position].down, AHEAD))
return (-1);
lflag = 0;
break;
case LEFT:
if (!move(left, LEFT))
return(-1);
lflag = 0;
break;
case LEFT:
if (!move(left, LEFT))
return (-1);
lflag = 0;
break;
case RIGHT:
if (!move(right, RIGHT))
return(-1);
lflag = 0;
break;
case AHEAD:
if (!move(ahead, AHEAD))
return(-1);
lflag = 0;
break;
case BACK:
if (!move(back, BACK))
return(-1);
lflag = 0;
break;
case SHOOT:
if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(location[position].objects,n) && *objsht[n]){
wordvalue[wordnumber+1] = n;
wordnumber = shoot();
}
wordnumber++;
wordnumber++;
}
else
shoot();
break;
case RIGHT:
if (!move(right, RIGHT))
return (-1);
lflag = 0;
break;
case TAKE:
if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(location[position].objects,n) && *objsht[n]){
wordvalue[wordnumber+1] = n;
wordnumber = take(location[position].objects);
}
wordnumber++;
wordnumber++;
}
else
take(location[position].objects);
break;
case AHEAD:
if (!move(ahead, AHEAD))
return (-1);
lflag = 0;
break;
case DROP:
case BACK:
if (!move(back, BACK))
return (-1);
lflag = 0;
break;
if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(inven,n)){
wordvalue[wordnumber+1] = n;
wordnumber = drop("Dropped");
}
wordnumber++;
wordnumber++;
}
else
drop("Dropped");
break;
case KICK:
case THROW:
if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(inven,n) ||
(testbit(location[position].objects, n) && *objsht[n])){
wordvalue[wordnumber+1] = n;
wordnumber = throw(wordvalue[wordnumber] == KICK ? "Kicked" : "Thrown");
}
wordnumber += 2;
} else
throw(wordvalue[wordnumber] == KICK ? "Kicked" : "Thrown");
break;
case TAKEOFF:
if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(wear,n)){
wordvalue[wordnumber+1] = n;
wordnumber = takeoff();
}
wordnumber += 2;
}
else
takeoff();
break;
case DRAW:
if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(wear,n)){
wordvalue[wordnumber+1] = n;
wordnumber = draw();
}
wordnumber += 2;
}
else
draw();
break;
case PUTON:
if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(location[position].objects,n) && *objsht[n]){
wordvalue[wordnumber+1] = n;
wordnumber = puton();
}
wordnumber += 2;
}
else
puton();
break;
case WEARIT:
if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(inven,n)){
wordvalue[wordnumber+1] = n;
wordnumber = wearit();
}
wordnumber += 2;
}
else
wearit();
break;
case EAT:
if (wordnumber < wordcount && wordvalue[wordnumber+1] == EVERYTHING){
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(inven,n)){
wordvalue[wordnumber+1] = n;
wordnumber = eat();
}
wordnumber += 2;
}
else
eat();
break;
case PUT:
put();
break;
case INVEN:
if (ucard(inven)){
puts("You are holding:\n");
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(inven,n))
printf("\t%s\n", objsht[n]);
printf("\n= %d kilogram%s (%d%%)\n", carrying, (carrying == 1 ? "." : "s."),(WEIGHT ? carrying*100/WEIGHT : -1));
printf("Your arms are %d%% full.\n",encumber*100/CUMBER);
}
else
puts("You aren't carrying anything.");
if (ucard(wear)){
puts("\nYou are wearing:\n");
for (n=0; n < NUMOFOBJECTS; n++)
if (testbit(wear,n))
printf("\t%s\n", objsht[n]);
}
else
puts("\nYou are stark naked.");
if (card(injuries,NUMOFINJURIES)){
puts("\nYou have suffered:\n");
for (n=0; n < NUMOFINJURIES; n++)
if (injuries[n])
printf("\t%s\n",ouch[n]);
printf("\nYou can still carry up to %d kilogram%s\n",WEIGHT,(WEIGHT == 1 ? "." : "s."));
}
else
puts("\nYou are in perfect health.");
break;
case USE:
lflag = use();
break;
case LOOK:
if (!notes[CANTSEE] || testbit(inven,LAMPON) ||
testbit(location[position].objects,LAMPON)
|| matchlight) {
beenthere[position] = 2;
writedes();
printobjs();
if (matchlight){
puts("\nYour match splutters out.");
matchlight = 0;
case SHOOT:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(location[position].objects, n) && *objsht[n]) {
wordvalue[wordnumber + 1] = n;
wordnumber = shoot();
}
} else
puts("I can't see anything.");
return(-1);
break;
wordnumber++;
wordnumber++;
} else
shoot();
break;
case SU:
if (wiz || tempwiz){
case TAKE:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(location[position].objects, n) && *objsht[n]) {
wordvalue[wordnumber + 1] = n;
wordnumber = take(location[position].objects);
}
wordnumber++;
wordnumber++;
} else
take(location[position].objects);
break;
case DROP:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n)) {
wordvalue[wordnumber + 1] = n;
wordnumber = drop("Dropped");
}
wordnumber++;
wordnumber++;
} else
drop("Dropped");
break;
case KICK:
case THROW:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n) ||
(testbit(location[position].objects, n) && *objsht[n])) {
wordvalue[wordnumber + 1] = n;
wordnumber = throw(wordvalue[wordnumber] == KICK ? "Kicked" : "Thrown");
}
wordnumber += 2;
} else
throw(wordvalue[wordnumber] == KICK ? "Kicked" : "Thrown");
break;
case TAKEOFF:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(wear, n)) {
wordvalue[wordnumber + 1] = n;
wordnumber = takeoff();
}
wordnumber += 2;
} else
takeoff();
break;
case DRAW:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(wear, n)) {
wordvalue[wordnumber + 1] = n;
wordnumber = draw();
}
wordnumber += 2;
} else
draw();
break;
case PUTON:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(location[position].objects, n) && *objsht[n]) {
wordvalue[wordnumber + 1] = n;
wordnumber = puton();
}
wordnumber += 2;
} else
puton();
break;
case WEARIT:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n)) {
wordvalue[wordnumber + 1] = n;
wordnumber = wearit();
}
wordnumber += 2;
} else
wearit();
break;
case EAT:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n)) {
wordvalue[wordnumber + 1] = n;
wordnumber = eat();
}
wordnumber += 2;
} else
eat();
break;
case PUT:
put();
break;
case INVEN:
if (ucard(inven)) {
puts("You are holding:\n");
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n))
printf("\t%s\n", objsht[n]);
printf("\n= %d kilogram%s (%d%%)\n", carrying, (carrying == 1 ? "." : "s."), (WEIGHT ? carrying * 100 / WEIGHT : -1));
printf("Your arms are %d%% full.\n", encumber * 100 / CUMBER);
} else
puts("You aren't carrying anything.");
if (ucard(wear)) {
puts("\nYou are wearing:\n");
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(wear, n))
printf("\t%s\n", objsht[n]);
} else
puts("\nYou are stark naked.");
if (card(injuries, NUMOFINJURIES)) {
puts("\nYou have suffered:\n");
for (n = 0; n < NUMOFINJURIES; n++)
if (injuries[n])
printf("\t%s\n", ouch[n]);
printf("\nYou can still carry up to %d kilogram%s\n", WEIGHT, (WEIGHT == 1 ? "." : "s."));
} else
puts("\nYou are in perfect health.");
break;
case USE:
lflag = use();
break;
case LOOK:
if (!notes[CANTSEE] || testbit(inven, LAMPON) ||
testbit(location[position].objects, LAMPON)
|| matchlight) {
beenthere[position] = 2;
writedes();
printobjs();
if (matchlight) {
puts("\nYour match splutters out.");
matchlight = 0;
}
} else
puts("I can't see anything.");
return (-1);
break;
case SU:
if (wiz || tempwiz) {
printf("\nRoom (was %d) = ", position);
fgets(buffer,10,stdin);
fgets(buffer, 10, stdin);
if (*buffer != '\n')
sscanf(buffer,"%d", &position);
sscanf(buffer, "%d", &position);
printf("Time (was %d) = ", ourtime);
fgets(buffer,10,stdin);
fgets(buffer, 10, stdin);
if (*buffer != '\n')
sscanf(buffer,"%d", &ourtime);
printf("Fuel (was %d) = ",fuel);
fgets(buffer,10,stdin);
sscanf(buffer, "%d", &ourtime);
printf("Fuel (was %d) = ", fuel);
fgets(buffer, 10, stdin);
if (*buffer != '\n')
sscanf(buffer,"%d", &fuel);
printf("Torps (was %d) = ",torps);
fgets(buffer,10,stdin);
sscanf(buffer, "%d", &fuel);
printf("Torps (was %d) = ", torps);
fgets(buffer, 10, stdin);
if (*buffer != '\n')
sscanf(buffer,"%d", &torps);
printf("CUMBER (was %d) = ",CUMBER);
fgets(buffer,10,stdin);
sscanf(buffer, "%d", &torps);
printf("CUMBER (was %d) = ", CUMBER);
fgets(buffer, 10, stdin);
if (*buffer != '\n')
sscanf(buffer,"%d", &CUMBER);
printf("WEIGHT (was %d) = ",WEIGHT);
fgets(buffer,10,stdin);
sscanf(buffer, "%d", &CUMBER);
printf("WEIGHT (was %d) = ", WEIGHT);
fgets(buffer, 10, stdin);
if (*buffer != '\n')
sscanf(buffer,"%d",&WEIGHT);
sscanf(buffer, "%d", &WEIGHT);
printf("Clock (was %d) = ", ourclock);
fgets(buffer,10,stdin);
fgets(buffer, 10, stdin);
if (*buffer != '\n')
sscanf(buffer,"%d", &ourclock);
printf("Wizard (was %d, %d) = ",wiz, tempwiz);
fgets(buffer,10,stdin);
if (*buffer != '\n'){
sscanf(buffer,"%d",&junk);
sscanf(buffer, "%d", &ourclock);
printf("Wizard (was %d, %d) = ", wiz, tempwiz);
fgets(buffer, 10, stdin);
if (*buffer != '\n') {
sscanf(buffer, "%d", &junk);
if (!junk)
tempwiz = wiz = 0;
}
printf("\nDONE.\n");
return(0);
}
else
puts("You aren't a wizard.");
break;
case SCORE:
printf("\tPLEASURE\tPOWER\t\tEGO\n");
printf("\t%3d\t\t%3d\t\t%3d\n\n",pleasure,power,ego);
printf("This gives you the rating of %s in %d turns.\n",rate(),ourtime);
printf("You have visited %d out of %d rooms this run (%d%%).\n",card(beenthere,NUMOFROOMS),NUMOFROOMS,card(beenthere,NUMOFROOMS)*100/NUMOFROOMS);
break;
return (0);
} else
puts("You aren't a wizard.");
break;
case KNIFE:
case KILL:
murder();
break;
case SCORE:
printf("\tPLEASURE\tPOWER\t\tEGO\n");
printf("\t%3d\t\t%3d\t\t%3d\n\n", pleasure, power, ego);
printf("This gives you the rating of %s in %d turns.\n", rate(), ourtime);
printf("You have visited %d out of %d rooms this run (%d%%).\n", card(beenthere, NUMOFROOMS), NUMOFROOMS, card(beenthere, NUMOFROOMS) * 100 / NUMOFROOMS);
break;
case UNDRESS:
case RAVAGE:
ravage();
break;
case KNIFE:
case KILL:
murder();
break;
case SAVE:
save();
break;
case UNDRESS:
case RAVAGE:
ravage();
break;
case FOLLOW:
lflag = follow();
break;
case SAVE:
save();
break;
case GIVE:
give();
break;
case FOLLOW:
lflag = follow();
break;
case KISS:
kiss();
break;
case GIVE:
give();
break;
case LOVE:
love();
break;
case KISS:
kiss();
break;
case RIDE:
lflag = ride();
break;
case LOVE:
love();
break;
case DRIVE:
lflag = drive();
break;
case RIDE:
lflag = ride();
break;
case LIGHT:
light();
break;
case DRIVE:
lflag = drive();
break;
case LAUNCH:
if (!launch())
return(-1);
else
lflag = 0;
break;
case LIGHT:
light();
break;
case LANDIT:
if (!land())
return(-1);
else
lflag = 0;
break;
case LAUNCH:
if (!launch())
return (-1);
else
lflag = 0;
break;
case TIME:
chime();
break;
case LANDIT:
if (!land())
return (-1);
else
lflag = 0;
break;
case SLEEP:
zzz();
break;
case TIME:
chime();
break;
case DIG:
dig();
break;
case SLEEP:
zzz();
break;
case JUMP:
lflag = jump();
break;
case DIG:
dig();
break;
case BURY:
bury();
break;
case JUMP:
lflag = jump();
break;
case SWIM:
puts("Surf's up!");
break;
case BURY:
bury();
break;
case DRINK:
drink();
break;
case SWIM:
puts("Surf's up!");
break;
case QUIT:
die();
case DRINK:
drink();
break;
case QUIT:
die();
default:
puts("How's that?");
return (-1);
break;
default:
puts("How's that?");
return(-1);
break;
}
if (wordnumber < wordcount && *words[wordnumber++] == ',')
continue;
else return(lflag);
}
return(lflag);
else
return (lflag);
}
return (lflag);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
/* $NetBSD: dayobjs.c,v 1.5 1997/10/10 11:39:45 lukem Exp $ */
/* $NetBSD: dayobjs.c,v 1.6 1997/10/11 02:07:16 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,108 +38,108 @@
#if 0
static char sccsid[] = "@(#)dayobjs.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: dayobjs.c,v 1.5 1997/10/10 11:39:45 lukem Exp $");
__RCSID("$NetBSD: dayobjs.c,v 1.6 1997/10/11 02:07:16 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
struct objs dayobjs[] = {
{ 236, HORSE },
{ 237, CAR },
{ 275, POT },
{ 275, BAR },
{ 275, BLOCK },
{ 260, COINS },
{ 266, DARK },
{ 235, TIMER },
{ 51, 51 },
{ 59, 51 },
{ 48, 51 },
{ 66, 52 },
{ 65, 52 },
{ 19, BOMB },
{ 167, NATIVE },
{ 21, KNIFE },
{ 30, KNIFE },
{ 30, CLEAVER },
{ 260, SWORD },
{ 70, LAND },
{ 71, LAND },
{ 72, LAND },
{ 73, LAND },
{ 74, LAND },
{ 75, LAND },
{ 76, LAND },
{ 77, LAND },
{ 78, LAND },
{ 79, LAND },
{ 81, LAND },
{ 82, LAND },
{ 83, LAND },
{ 84, LAND },
{ 85, LAND },
{ 86, LAND },
{ 87, LAND },
{ 88, LAND },
{ 90, LAND },
{ 95, LAND },
{ 96, LAND },
{ 97, LAND },
{ 99, LAND },
{ 100, LAND },
{ 104, LAND },
{ 172, WOODSMAN },
{ 172, DEADWOOD },
{ 172, MALLET },
{ 146, ELF },
{ 146, HALBERD },
{ 146, SHIELD },
{ 190, TWO_HANDED },
{ 190, POTION },
{ 142, BROAD },
{ 258, MAIL },
{ 258, HELM },
{ 21, MAID },
{ 7, VIPER },
{ 216, SHOES },
{ 64, CYLON },
{ 36, CYLON },
{ 49, CYLON },
{ 8, ROBE },
{ 13, AMULET },
{ 20, LASER },
{ 126, BATHGOD },
{ 26, GRENADE },
{ 256, GRENADE },
{ 237, CHAIN },
{ 237, COMPASS },
{ 218, LEVIS },
{ 164, MACE },
{ 137, SHOVEL },
{ 11, COINS },
{ 24, MATCHES },
{ 235, MATCHES },
{ 93, MAN },
{ 109, PAPAYAS },
{ 110, PINEAPPLE },
{ 152, PINEAPPLE },
{ 154, PINEAPPLE },
{ 111, KIWI },
{ 149, MANGO },
{ 112, COCONUTS },
{ 150, COCONUTS },
{ 151, COCONUTS },
{ 153, COCONUTS },
{ 192, COCONUTS },
{ 204, COCONUTS },
{ 207, COCONUTS },
{ 209, COCONUTS },
{ 213, COCONUTS },
{ 240, COCONUTS },
{ 218, RING },
{ 130, BRACELET },
{ 93, GIRL },
{ 268, LAMPON },
{ 0 }
{236, HORSE},
{237, CAR},
{275, POT},
{275, BAR},
{275, BLOCK},
{260, COINS},
{266, DARK},
{235, TIMER},
{51, 51},
{59, 51},
{48, 51},
{66, 52},
{65, 52},
{19, BOMB},
{167, NATIVE},
{21, KNIFE},
{30, KNIFE},
{30, CLEAVER},
{260, SWORD},
{70, LAND},
{71, LAND},
{72, LAND},
{73, LAND},
{74, LAND},
{75, LAND},
{76, LAND},
{77, LAND},
{78, LAND},
{79, LAND},
{81, LAND},
{82, LAND},
{83, LAND},
{84, LAND},
{85, LAND},
{86, LAND},
{87, LAND},
{88, LAND},
{90, LAND},
{95, LAND},
{96, LAND},
{97, LAND},
{99, LAND},
{100, LAND},
{104, LAND},
{172, WOODSMAN},
{172, DEADWOOD},
{172, MALLET},
{146, ELF},
{146, HALBERD},
{146, SHIELD},
{190, TWO_HANDED},
{190, POTION},
{142, BROAD},
{258, MAIL},
{258, HELM},
{21, MAID},
{7, VIPER},
{216, SHOES},
{64, CYLON},
{36, CYLON},
{49, CYLON},
{8, ROBE},
{13, AMULET},
{20, LASER},
{126, BATHGOD},
{26, GRENADE},
{256, GRENADE},
{237, CHAIN},
{237, COMPASS},
{218, LEVIS},
{164, MACE},
{137, SHOVEL},
{11, COINS},
{24, MATCHES},
{235, MATCHES},
{93, MAN},
{109, PAPAYAS},
{110, PINEAPPLE},
{152, PINEAPPLE},
{154, PINEAPPLE},
{111, KIWI},
{149, MANGO},
{112, COCONUTS},
{150, COCONUTS},
{151, COCONUTS},
{153, COCONUTS},
{192, COCONUTS},
{204, COCONUTS},
{207, COCONUTS},
{209, COCONUTS},
{213, COCONUTS},
{240, COCONUTS},
{218, RING},
{130, BRACELET},
{93, GIRL},
{268, LAMPON},
{0}
};

View File

@ -1,4 +1,4 @@
/* $NetBSD: extern.h,v 1.5 1997/10/10 11:39:47 lukem Exp $ */
/* $NetBSD: extern.h,v 1.6 1997/10/11 02:07:18 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -36,6 +36,7 @@
*/
#include <ctype.h>
#include <err.h>
#include <pwd.h>
#include <signal.h>
#include <stdio.h>
@ -52,13 +53,13 @@
#define setbit(array, index) (array[index/BITS] |= (1 << (index % BITS)))
#define clearbit(array, index) (array[index/BITS] &= ~(1 << (index % BITS)))
/* well known rooms */
/* well known rooms */
#define FINAL 275
#define GARDEN 197
#define POOLS 126
#define DOCK 93
/* word types */
/* word types */
#define VERB 0
#define OBJECT 1
#define NOUNS 2
@ -66,8 +67,8 @@
#define ADJS 4
#define CONJ 5
/* words numbers */
#define KNIFE 0
/* words numbers */
#define KNIFE 0
#define SWORD 1
#define LAND 2
#define WOODSMAN 3
@ -131,7 +132,7 @@
#define BAR 62
#define BLOCK 63
#define NUMOFOBJECTS 64
/* non-objects below */
/* non-objects below */
#define UP 1000
#define DOWN 1001
#define AHEAD 1002
@ -182,11 +183,11 @@
#define RIDE 1047
#define DRIVE 1048
#define SCORE 1049
#define BURY 1050
#define BURY 1050
#define JUMP 1051
#define KICK 1052
/* injuries */
/* injuries */
#define ARM 6 /* broken arm */
#define RIBS 7 /* broken ribs */
#define SPINE 9 /* broken back */
@ -195,16 +196,16 @@
#define NECK 12 /* broken NECK */
#define NUMOFINJURIES 13
/* notes */
/* notes */
#define CANTLAUNCH 0
#define LAUNCHED 1
#define CANTSEE 2
#define CANTMOVE 3
#define CANTMOVE 3
#define JINXED 4
#define DUG 5
#define NUMOFNOTES 6
/* fundamental constants */
/* fundamental constants */
#define NUMOFROOMS 275
#define NUMOFWORDS ((NUMOFOBJECTS + BITS - 1) / BITS)
#define LINELENGTH 81
@ -213,15 +214,15 @@
#define TONIGHT 1
#define CYCLE 100
/* initial variable values */
/* initial variable values */
#define TANKFULL 250
#define TORPEDOES 10
#define MAXWEIGHT 60
#define MAXCUMBER 10
struct room {
char *name;
int link[8];
char *name;
int link[8];
#define north link[0]
#define south link[1]
#define east link[2]
@ -230,61 +231,61 @@ struct room {
#define access link[5]
#define down link[6]
#define flyhere link[7]
char *desc;
char *desc;
unsigned int objects[NUMOFWORDS];
};
struct room dayfile[];
struct room nightfile[];
struct room *location;
/* object characteristics */
char *objdes[NUMOFOBJECTS];
char *objsht[NUMOFOBJECTS];
char *ouch[NUMOFINJURIES];
int objwt[NUMOFOBJECTS];
int objcumber[NUMOFOBJECTS];
/* object characteristics */
char *objdes[NUMOFOBJECTS];
char *objsht[NUMOFOBJECTS];
char *ouch[NUMOFINJURIES];
int objwt[NUMOFOBJECTS];
int objcumber[NUMOFOBJECTS];
/* current input line */
#define NWORD 20 /* words per line */
char words[NWORD][15];
int wordvalue[NWORD];
int wordtype[NWORD];
int wordcount, wordnumber;
/* current input line */
#define NWORD 20 /* words per line */
char words[NWORD][15];
int wordvalue[NWORD];
int wordtype[NWORD];
int wordcount, wordnumber;
/* state of the game */
int ourtime;
int position;
int direction;
int left, right, ahead, back;
int ourclock, fuel, torps;
int carrying, encumber;
int rythmn;
int followfight;
int ate;
int snooze;
int meetgirl;
int followgod;
int godready;
int win;
int wintime;
int wiz;
int tempwiz;
int matchlight, matchcount;
int loved;
int pleasure, power, ego;
int WEIGHT;
int CUMBER;
int notes[NUMOFNOTES];
/* state of the game */
int ourtime;
int position;
int direction;
int left, right, ahead, back;
int ourclock, fuel, torps;
int carrying, encumber;
int rythmn;
int followfight;
int ate;
int snooze;
int meetgirl;
int followgod;
int godready;
int win;
int wintime;
int wiz;
int tempwiz;
int matchlight, matchcount;
int loved;
int pleasure, power, ego;
int WEIGHT;
int CUMBER;
int notes[NUMOFNOTES];
unsigned int inven[NUMOFWORDS];
unsigned int wear[NUMOFWORDS];
char beenthere[NUMOFROOMS+1];
char injuries[NUMOFINJURIES];
char beenthere[NUMOFROOMS + 1];
char injuries[NUMOFINJURIES];
char uname[9];
char uname[9];
struct wlist {
char *string;
int value, article;
char *string;
int value, article;
struct wlist *next;
};
#define HASHSIZE 256
@ -294,74 +295,74 @@ struct wlist *hashtab[HASHSIZE];
struct wlist wlist[];
struct objs {
short room;
short obj;
short room;
short obj;
};
struct objs dayobjs[];
struct objs nightobjs[];
void blast __P((void));
void bury __P((void));
int card __P((char *, int));
int checkout __P((char *));
void chime __P((void));
void convert __P((int));
void crash __P((void));
int cypher __P((void));
void die __P((void));
void diesig __P((int));
void dig __P((void));
int draw __P((void));
void drink __P((void));
int drive __P((void));
int drop __P((char *));
int eat __P((void));
void endfly __P((void));
int fight __P((int, int));
int follow __P((void));
void getutmp __P((char *));
int give __P((void));
int hash __P((char *));
void initialize __P((char));
void install __P((struct wlist *));
int jump __P((void));
void kiss __P((void));
int land __P((void));
int launch __P((void));
void light __P((void));
void live __P((void));
void love __P((void));
int move __P((int, int));
void moveenemy __P((int));
void murder __P((void));
void news __P((void));
void newway __P((int));
void notarget __P((void));
void parse __P((void));
void post __P((char));
void printobjs __P((void));
int put __P((void));
int puton __P((void));
void ravage __P((void));
void restore __P((void));
int ride __P((void));
void save __P((void));
void screen __P((void));
int shoot __P((void));
void succumb __P((int));
int take __P((unsigned int []));
int takeoff __P((void));
void target __P((void));
int throw __P((char *));
int ucard __P((unsigned int *));
int use __P((void));
int visual __P((void));
int wearit __P((void));
void whichway __P((struct room));
int wizard __P((char *));
void wordinit __P((void));
void writedes __P((void));
int zzz __P((void));
void blast __P((void));
void bury __P((void));
int card __P((char *, int));
int checkout __P((char *));
void chime __P((void));
void convert __P((int));
void crash __P((void));
int cypher __P((void));
void die __P((void));
void diesig __P((int));
void dig __P((void));
int draw __P((void));
void drink __P((void));
int drive __P((void));
int drop __P((char *));
int eat __P((void));
void endfly __P((void));
int fight __P((int, int));
int follow __P((void));
void getutmp __P((char *));
int give __P((void));
int hash __P((char *));
void initialize __P((char));
void install __P((struct wlist *));
int jump __P((void));
void kiss __P((void));
int land __P((void));
int launch __P((void));
void light __P((void));
void live __P((void));
void love __P((void));
int move __P((int, int));
void moveenemy __P((int));
void murder __P((void));
void news __P((void));
void newway __P((int));
void notarget __P((void));
void parse __P((void));
void post __P((char));
void printobjs __P((void));
int put __P((void));
int puton __P((void));
void ravage __P((void));
void restore __P((void));
int ride __P((void));
void save __P((void));
void screen __P((void));
int shoot __P((void));
void succumb __P((int));
int take __P((unsigned int[]));
int takeoff __P((void));
void target __P((void));
int throw __P((char *));
int ucard __P((unsigned int *));
int use __P((void));
int visual __P((void));
int wearit __P((void));
void whichway __P((struct room));
int wizard __P((char *));
void wordinit __P((void));
void writedes __P((void));
int zzz __P((void));
char *getcom __P((char *, int, char *, char *));
char *getword __P((char *, char *, int));
char *rate __P((void));

View File

@ -1,4 +1,4 @@
/* $NetBSD: fly.c,v 1.5 1997/10/10 11:39:50 lukem Exp $ */
/* $NetBSD: fly.c,v 1.6 1997/10/11 02:07:20 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,9 +38,9 @@
#if 0
static char sccsid[] = "@(#)fly.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: fly.c,v 1.5 1997/10/10 11:39:50 lukem Exp $");
__RCSID("$NetBSD: fly.c,v 1.6 1997/10/11 02:07:20 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
#undef UP
@ -50,16 +50,16 @@ __RCSID("$NetBSD: fly.c,v 1.5 1997/10/10 11:39:50 lukem Exp $");
#define MIDR (LINES/2 - 1)
#define MIDC (COLS/2 - 1)
int row, column;
int dr = 0, dc = 0;
char destroyed;
int ourclock = 120; /* time for all the flights in the game */
char cross = 0;
sig_t oldsig;
int row, column;
int dr = 0, dc = 0;
char destroyed;
int ourclock = 120; /* time for all the flights in the game */
char cross = 0;
sig_t oldsig;
void
succumb(dummy)
int dummy;
int dummy;
{
if (oldsig == SIG_DFL) {
endfly();
@ -67,7 +67,7 @@ succumb(dummy)
}
if (oldsig != SIG_IGN) {
endfly();
(*oldsig)(SIGINT);
(*oldsig) (SIGINT);
}
}
@ -75,105 +75,103 @@ int
visual()
{
destroyed = 0;
if(initscr() == ERR){
if (initscr() == ERR) {
puts("Whoops! No more memory...");
return(0);
return (0);
}
oldsig = signal(SIGINT, succumb);
crmode();
noecho();
screen();
row = rnd(LINES-3) + 1;
column = rnd(COLS-2) + 1;
row = rnd(LINES - 3) + 1;
column = rnd(COLS - 2) + 1;
moveenemy(0);
for (;;) {
switch(getchar()){
switch (getchar()) {
case 'h':
case 'r':
dc = -1;
fuel--;
break;
case 'h':
case 'r':
dc = -1;
fuel--;
break;
case 'H':
case 'R':
dc = -5;
fuel -= 10;
break;
case 'H':
case 'R':
dc = -5;
fuel -= 10;
break;
case 'l':
dc = 1;
fuel--;
break;
case 'l':
dc = 1;
fuel--;
break;
case 'L':
dc = 5;
fuel -= 10;
break;
case 'L':
dc = 5;
fuel -= 10;
break;
case 'j':
case 'u':
dr = 1;
fuel--;
break;
case 'j':
case 'u':
dr = 1;
fuel--;
break;
case 'J':
case 'U':
dr = 5;
fuel -= 10;
break;
case 'J':
case 'U':
dr = 5;
fuel -= 10;
break;
case 'k':
case 'd':
dr = -1;
fuel--;
break;
case 'k':
case 'd':
dr = -1;
fuel--;
break;
case 'K':
case 'D':
dr = -5;
fuel -= 10;
break;
case 'K':
case 'D':
dr = -5;
fuel -= 10;
break;
case '+':
if (cross){
cross = 0;
notarget();
case '+':
if (cross) {
cross = 0;
notarget();
} else
cross = 1;
break;
case ' ':
case 'f':
if (torps) {
torps -= 2;
blast();
if (row == MIDR && column - MIDC < 2 && MIDC - column < 2) {
destroyed = 1;
alarm(0);
}
else
cross = 1;
break;
} else
mvaddstr(0, 0, "*** Out of torpedoes. ***");
break;
case ' ':
case 'f':
if (torps){
torps -= 2;
blast();
if (row == MIDR && column - MIDC < 2 && MIDC - column < 2){
destroyed = 1;
alarm(0);
}
}
else
mvaddstr(0,0,"*** Out of torpedoes. ***");
break;
case 'q':
endfly();
return(0);
default:
mvaddstr(0,26,"Commands = r,R,l,L,u,U,d,D,f,+,q");
continue;
case EOF:
break;
}
if (destroyed){
case 'q':
endfly();
return(1);
return (0);
default:
mvaddstr(0, 26, "Commands = r,R,l,L,u,U,d,D,f,+,q");
continue;
case EOF:
break;
}
if (ourclock <= 0){
if (destroyed) {
endfly();
return (1);
}
if (ourclock <= 0) {
endfly();
die();
}
@ -183,63 +181,63 @@ visual()
void
screen()
{
int r,c,n;
int i;
int r, c, n;
int i;
clear();
i = rnd(100);
for (n=0; n < i; n++){
r = rnd(LINES-3) + 1;
for (n = 0; n < i; n++) {
r = rnd(LINES - 3) + 1;
c = rnd(COLS);
mvaddch(r, c, '.');
}
mvaddstr(LINES-1-1,21,"TORPEDOES FUEL TIME");
mvaddstr(LINES - 1 - 1, 21, "TORPEDOES FUEL TIME");
refresh();
}
void
target()
{
int n;
int n;
move(MIDR,MIDC-10);
move(MIDR, MIDC - 10);
addstr("------- + -------");
for (n = MIDR-4; n < MIDR-1; n++){
mvaddch(n,MIDC,'|');
mvaddch(n+6,MIDC,'|');
for (n = MIDR - 4; n < MIDR - 1; n++) {
mvaddch(n, MIDC, '|');
mvaddch(n + 6, MIDC, '|');
}
}
void
notarget()
{
int n;
int n;
move(MIDR,MIDC-10);
move(MIDR, MIDC - 10);
addstr(" ");
for (n = MIDR-4; n < MIDR-1; n++){
mvaddch(n,MIDC,' ');
mvaddch(n+6,MIDC,' ');
for (n = MIDR - 4; n < MIDR - 1; n++) {
mvaddch(n, MIDC, ' ');
mvaddch(n + 6, MIDC, ' ');
}
}
void
blast()
{
int n;
int n;
alarm(0);
move(LINES-1, 24);
move(LINES - 1, 24);
printw("%3d", torps);
for(n = LINES-1-2; n >= MIDR + 1; n--){
mvaddch(n, MIDC+MIDR-n, '/');
mvaddch(n, MIDC-MIDR+n, '\\');
for (n = LINES - 1 - 2; n >= MIDR + 1; n--) {
mvaddch(n, MIDC + MIDR - n, '/');
mvaddch(n, MIDC - MIDR + n, '\\');
refresh();
}
mvaddch(MIDR,MIDC,'*');
for(n = LINES-1-2; n >= MIDR + 1; n--){
mvaddch(n, MIDC+MIDR-n, ' ');
mvaddch(n, MIDC-MIDR+n, ' ');
mvaddch(MIDR, MIDC, '*');
for (n = LINES - 1 - 2; n >= MIDR + 1; n--) {
mvaddch(n, MIDC + MIDR - n, ' ');
mvaddch(n, MIDC - MIDR + n, ' ');
refresh();
}
alarm(1);
@ -247,24 +245,25 @@ blast()
void
moveenemy(dummy)
int dummy;
int dummy;
{
double d;
int oldr, oldc;
double d;
int oldr, oldc;
oldr = row;
oldc = column;
if (fuel > 0){
if (row + dr <= LINES-3 && row + dr > 0)
if (fuel > 0) {
if (row + dr <= LINES - 3 && row + dr > 0)
row += dr;
if (column + dc < COLS-1 && column + dc > 0)
if (column + dc < COLS - 1 && column + dc > 0)
column += dc;
} else if (fuel < 0){
fuel = 0;
mvaddstr(0,60,"*** Out of fuel ***");
}
d = (double) ((row - MIDR)*(row - MIDR) + (column - MIDC)*(column - MIDC));
if (d < 16){
} else
if (fuel < 0) {
fuel = 0;
mvaddstr(0, 60, "*** Out of fuel ***");
}
d = (double) ((row - MIDR) * (row - MIDR) + (column - MIDC) * (column - MIDC));
if (d < 16) {
row += (rnd(9) - 4) % (4 - abs(row - MIDR));
column += (rnd(9) - 4) % (4 - abs(column - MIDC));
}
@ -273,11 +272,11 @@ moveenemy(dummy)
if (cross)
target();
mvaddstr(row, column - 1, "/-\\");
move(LINES-1, 24);
move(LINES - 1, 24);
printw("%3d", torps);
move(LINES-1, 42);
move(LINES - 1, 42);
printw("%3d", fuel);
move(LINES-1, 57);
move(LINES - 1, 57);
printw("%3d", ourclock);
refresh();
signal(SIGALRM, moveenemy);
@ -289,7 +288,7 @@ endfly()
{
alarm(0);
signal(SIGALRM, SIG_DFL);
mvcur(0,COLS-1,LINES-1,0);
mvcur(0, COLS - 1, LINES - 1, 0);
endwin();
signal(SIGTSTP, SIG_DFL);
signal(SIGINT, oldsig);

View File

@ -1,4 +1,4 @@
/* $NetBSD: getcom.c,v 1.4 1997/10/10 11:39:53 lukem Exp $ */
/* $NetBSD: getcom.c,v 1.5 1997/10/11 02:07:21 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,20 +38,20 @@
#if 0
static char sccsid[] = "@(#)getcom.c 8.1 (Berkeley) 5/31/93";
#else
__RCSID("$NetBSD: getcom.c,v 1.4 1997/10/10 11:39:53 lukem Exp $");
__RCSID("$NetBSD: getcom.c,v 1.5 1997/10/11 02:07:21 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
char *
char *
getcom(buf, size, prompt, error)
char *buf;
int size;
char *prompt, *error;
char *buf;
int size;
char *prompt, *error;
{
for (;;) {
fputs(prompt, stdout);
fputs(prompt, stdout);
if (fgets(buf, size, stdin) == 0) {
clearerr(stdin);
continue;
@ -71,10 +71,10 @@ getcom(buf, size, prompt, error)
* shifts to UPPERCASE if flag > 0, lowercase if flag < 0,
* and leaves it unchanged if flag = 0
*/
char *
char *
getword(buf1, buf2, flag)
char *buf1, *buf2;
int flag;
char *buf1, *buf2;
int flag;
{
while (isspace(*buf1))
buf1++;
@ -89,13 +89,14 @@ getword(buf1, buf2, flag)
*buf2++ = tolower(*buf1++);
else
*buf2++ = *buf1++;
else if (flag > 0)
if (islower(*buf1))
*buf2++ = toupper(*buf1++);
else
if (flag > 0)
if (islower(*buf1))
*buf2++ = toupper(*buf1++);
else
*buf2++ = *buf1++;
else
*buf2++ = *buf1++;
else
*buf2++ = *buf1++;
} else
*buf2++ = *buf1++;
*buf2 = 0;

View File

@ -1,4 +1,4 @@
/* $NetBSD: globals.c,v 1.5 1997/10/10 11:39:56 lukem Exp $ */
/* $NetBSD: globals.c,v 1.6 1997/10/11 02:07:23 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,19 +38,19 @@
#if 0
static char sccsid[] = "@(#)globals.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: globals.c,v 1.5 1997/10/10 11:39:56 lukem Exp $");
__RCSID("$NetBSD: globals.c,v 1.6 1997/10/11 02:07:23 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
int WEIGHT = MAXWEIGHT;
int CUMBER = MAXCUMBER;
int WEIGHT = MAXWEIGHT;
int CUMBER = MAXCUMBER;
char *objdes[NUMOFOBJECTS] = {
char *objdes[NUMOFOBJECTS] = {
"There is a knife here",
"There is an exquisitely crafted sword and scabbard here.",
0, /* can land from here */
0, /* can land from here */
"There is a fierce woodsman here brandishing a heavy mallet.",
"There is an unweildly two-handed sword here.",
"There is a bloody meat cleaver here.",
@ -62,7 +62,7 @@ char *objdes[NUMOFOBJECTS] = {
"There is a Viper ready for launch here.",
"A kerosene lantern is burning luridly here.",
"An old pair of shoes has been discarded here.",
0, /* cylon */
0, /* cylon */
"There is a pair of pajamas here.",
"A kingly robe of royal purple and spun gold is draped here.",
"There is a strange golden amulet on the floor here.",
@ -71,7 +71,7 @@ char *objdes[NUMOFOBJECTS] = {
"A dead woodsman has fallen here. He was savagely murdered.",
"A heavy wooden mallet lies nearby.",
"There is a laser pistol here.",
"A flower-like young goddess is bathing in the hot mineral pools. She is \nwatching you, but continues to steep and sing softly.",
"A flower-like young goddess is bathing in the hot mineral pools. She is \nwatching you, but continues to steep and sing softly.",
"The goddess is reclining on a bed of ferns and studying you intently.",
"There is a grenade here",
"There is a length of heavy chain here.",
@ -86,36 +86,36 @@ char *objdes[NUMOFOBJECTS] = {
"I think I hear footsteps behind us.",
"There are a few coins here.",
"There are some matches here.",
"An unctuous man in a white suit and a dwarf are standing here.",
"There are some ripe papayas here.",
"There is a ripe pineapple here.",
"There are some kiwi fruit here.",
"There are some coconuts here.",
"There is a ripe mango here.",
"There is a sparkling diamond ring here.",
"There is a colorful pink potion in a small crystal vial here.",
"A gold bracelet is on the ground here.",
"A swarthy woman with stern features pulls you aside from the crowd,\n'I must talk to you -- but not here. Meet me at midnight in the gardens.'",
"The swarthy woman has been awaiting you anxiousy. 'I must warn you that the\nIsland has anticipated your Quest. You will not be welcomed. The Darkness is\nstrong where you must search. Seek not the shadows save only at night, for\nthen are they the weakest. In the mountains far from here a canyon winds\nwith ferns and streams and forgotten vines. There you must go. Take this\nrope.'",
"Out from the shadows a figure leaps! His black cape swirls around, and he\nholds a laser sword at your chest. 'So, you have come to fulfill the Quest.\nHa! Your weapons are no match for me!'",
"An old timer with one eye missing and no money for a drink sits at the bar.",
"You are flying through an asteroid field!",
"A planet is nearby.",
"The ground is charred here.",
"There is a thermonuclear warhead here.",
"The fragile, beautiful young goddess lies here. You murdered her horribly.",
"The old timer is lying here. He is dead.",
"The native girl's body is lying here.",
"A native girl is sitting here.",
"A gorgeous white stallion is standing here.",
"The keys are in the ignition.",
"A pot of pearls and jewels is sitting here.",
"A bar of solid gold is here.",
"There is a 10 kilogram diamond block here."
"An unctuous man in a white suit and a dwarf are standing here.",
"There are some ripe papayas here.",
"There is a ripe pineapple here.",
"There are some kiwi fruit here.",
"There are some coconuts here.",
"There is a ripe mango here.",
"There is a sparkling diamond ring here.",
"There is a colorful pink potion in a small crystal vial here.",
"A gold bracelet is on the ground here.",
"A swarthy woman with stern features pulls you aside from the crowd,\n'I must talk to you -- but not here. Meet me at midnight in the gardens.'",
"The swarthy woman has been awaiting you anxiousy. 'I must warn you that the\nIsland has anticipated your Quest. You will not be welcomed. The Darkness is\nstrong where you must search. Seek not the shadows save only at night, for\nthen are they the weakest. In the mountains far from here a canyon winds\nwith ferns and streams and forgotten vines. There you must go. Take this\nrope.'",
"Out from the shadows a figure leaps! His black cape swirls around, and he\nholds a laser sword at your chest. 'So, you have come to fulfill the Quest.\nHa! Your weapons are no match for me!'",
"An old timer with one eye missing and no money for a drink sits at the bar.",
"You are flying through an asteroid field!",
"A planet is nearby.",
"The ground is charred here.",
"There is a thermonuclear warhead here.",
"The fragile, beautiful young goddess lies here. You murdered her horribly.",
"The old timer is lying here. He is dead.",
"The native girl's body is lying here.",
"A native girl is sitting here.",
"A gorgeous white stallion is standing here.",
"The keys are in the ignition.",
"A pot of pearls and jewels is sitting here.",
"A bar of solid gold is here.",
"There is a 10 kilogram diamond block here."
};
char *objsht[NUMOFOBJECTS] = {
char *objsht[NUMOFOBJECTS] = {
"knife",
"fine sword",
0,
@ -182,7 +182,7 @@ char *objsht[NUMOFOBJECTS] = {
"diamond block"
};
char *ouch[NUMOFINJURIES] = {
char *ouch[NUMOFINJURIES] = {
"some minor abrasions",
"some minor lacerations",
"a minor puncture wound",
@ -193,34 +193,34 @@ char *ouch[NUMOFINJURIES] = {
"a few broken ribs",
"a broken leg and torn ligaments",
"a broken back and ruptured spleen",
"some deep incisions and a loss of blood",
"some deep incisions and a loss of blood",
"a fractured skull and mashed face",
"a broken neck"
};
int objwt[NUMOFOBJECTS] = {
1, 5, 0, 10, 15, 2, 10, 10,
3, 5, 50, 2500, 2, 1, 100, 1,
2, 1, 1, 1, 60, 10, 5, 0,
50, 5, 15, 5, 1, 20, 10, 10,
0, 0, 0, 0, 1, 0, 0, 1,
1, 1, 2, 1, 0, 0, 0, 0,
0, 0, 100, 0, 0, 0, 55, 47,
50, 45, 45, 100, 2000, 30, 20, 10
int objwt[NUMOFOBJECTS] = {
1, 5, 0, 10, 15, 2, 10, 10,
3, 5, 50, 2500, 2, 1, 100, 1,
2, 1, 1, 1, 60, 10, 5, 0,
50, 5, 15, 5, 1, 20, 10, 10,
0, 0, 0, 0, 1, 0, 0, 1,
1, 1, 2, 1, 0, 0, 0, 0,
0, 0, 100, 0, 0, 0, 55, 47,
50, 45, 45, 100, 2000, 30, 20, 10
};
int objcumber[NUMOFOBJECTS] = {
1, 5, 0, 150, 10, 1, 5, 2,
2, 1, 5, 10, 1, 1, 10, 1,
1, 1, 1, 1, 7, 5, 4, 0,
0, 1, 1, 1, 1, 5, 4, 4,
1, 0, 0, 0, 1, 0, 0, 1,
1, 1, 3, 1, 0, 0, 1, 0,
0, 0, 10, 0, 0, 0, 7, 8,
10, 8, 8, 10, 10, 3, 1, 2
int objcumber[NUMOFOBJECTS] = {
1, 5, 0, 150, 10, 1, 5, 2,
2, 1, 5, 10, 1, 1, 10, 1,
1, 1, 1, 1, 7, 5, 4, 0,
0, 1, 1, 1, 1, 5, 4, 4,
1, 0, 0, 0, 1, 0, 0, 1,
1, 1, 3, 1, 0, 0, 1, 0,
0, 0, 10, 0, 0, 0, 7, 8,
10, 8, 8, 10, 10, 3, 1, 2
};
int win = 1;
int matchcount = 20;
int followgod = -1;
int followfight = -1;
int win = 1;
int matchcount = 20;
int followgod = -1;
int followfight = -1;

View File

@ -1,4 +1,4 @@
/* $NetBSD: init.c,v 1.6 1997/10/10 11:40:01 lukem Exp $ */
/* $NetBSD: init.c,v 1.7 1997/10/11 02:07:25 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,15 +38,15 @@
#if 0
static char sccsid[] = "@(#)init.c 8.4 (Berkeley) 4/30/95";
#else
__RCSID("$NetBSD: init.c,v 1.6 1997/10/10 11:40:01 lukem Exp $");
__RCSID("$NetBSD: init.c,v 1.7 1997/10/11 02:07:25 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
void
initialize(startup)
char startup;
char startup;
{
struct objs *p;
@ -75,7 +75,7 @@ initialize(startup)
void
getutmp(uname)
char *uname;
char *uname;
{
struct passwd *ptr;
@ -83,7 +83,7 @@ getutmp(uname)
strcpy(uname, ptr ? ptr->pw_name : "");
}
char *list[] = { /* hereditary wizards */
char *list[] = { /* hereditary wizards */
"riggle",
"chris",
"edward",
@ -94,7 +94,7 @@ char *list[] = { /* hereditary wizards */
0
};
char *badguys[] = {
char *badguys[] = {
"wnj",
"root",
"ted",
@ -103,9 +103,9 @@ char *badguys[] = {
int
wizard(uname)
char *uname;
char *uname;
{
int flag;
int flag;
if ((flag = checkout(uname)) != 0)
printf("You are the Great wizard %s.\n", uname);
@ -114,9 +114,9 @@ wizard(uname)
int
checkout(uname)
char *uname;
char *uname;
{
char **ptr;
char **ptr;
for (ptr = list; *ptr; ptr++)
if (strcmp(*ptr, uname) == 0)
@ -124,7 +124,7 @@ checkout(uname)
for (ptr = badguys; *ptr; ptr++)
if (strcmp(*ptr, uname) == 0) {
printf("You are the Poor anti-wizard %s. Good Luck!\n",
uname);
uname);
CUMBER = 3;
WEIGHT = 9; /* that'll get him! */
ourclock = 10;

View File

@ -1,4 +1,4 @@
/* $NetBSD: misc.c,v 1.5 1997/10/10 11:40:04 lukem Exp $ */
/* $NetBSD: misc.c,v 1.6 1997/10/11 02:07:27 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,19 +38,19 @@
#if 0
static char sccsid[] = "@(#)misc.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: misc.c,v 1.5 1997/10/10 11:40:04 lukem Exp $");
__RCSID("$NetBSD: misc.c,v 1.6 1997/10/11 02:07:27 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
int
card(array, size) /* for beenthere, injuries */
char *array;
int size;
char *array;
int size;
{
char *end = array + size;
int i = 0;
char *end = array + size;
int i = 0;
while (array < end)
if (*array++)
@ -62,10 +62,10 @@ int
ucard(array)
unsigned int *array;
{
int j = 0, n;
int j = 0, n;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(array, n))
j++;
j++;
return (j);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
/* $NetBSD: nightobjs.c,v 1.5 1997/10/10 11:40:11 lukem Exp $ */
/* $NetBSD: nightobjs.c,v 1.6 1997/10/11 02:07:31 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,70 +38,70 @@
#if 0
static char sccsid[] = "@(#)nightobjs.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: nightobjs.c,v 1.5 1997/10/10 11:40:11 lukem Exp $");
__RCSID("$NetBSD: nightobjs.c,v 1.6 1997/10/11 02:07:31 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
struct objs nightobjs[] = {
{ 218, PAJAMAS },
{ 235, NATIVE },
{ 92, PAPAYAS },
{ 92, PINEAPPLE },
{ 92, KIWI },
{ 92, MANGO },
{ 92, NATIVE },
{ 92, MAN },
{ 181, LAMPON },
{ 236, LAMPON },
{ 92, LAMPON },
{ 216, WOODSMAN },
{ 216, DEADWOOD },
{ 216, MALLET },
{ 168, WOODSMAN },
{ 168, DEADWOOD },
{ 168, MALLET },
{ 170, WOODSMAN },
{ 170, DEADWOOD },
{ 170, MALLET },
{ 124, SHIELD },
{ 124, HALBERD },
{ 124, ELF },
{ 144, SHIELD },
{ 144, HALBERD },
{ 144, ELF },
{ 113, SHIELD },
{ 113, HALBERD },
{ 113, ELF },
{ 161, SHIELD },
{ 161, HALBERD },
{ 161, ELF },
{ 169, SHIELD },
{ 169, HALBERD },
{ 169, ELF },
{ 182, SHIELD },
{ 182, HALBERD },
{ 182, ELF },
{ 198, SHIELD },
{ 198, HALBERD },
{ 198, ELF },
{ 212, SHIELD },
{ 212, HALBERD },
{ 212, ELF },
{ 216, SHIELD },
{ 216, HALBERD },
{ 216, ELF },
{ 226, SHIELD },
{ 226, HALBERD },
{ 226, ELF },
{ 228, SHIELD },
{ 228, HALBERD },
{ 228, ELF },
{ 68, CYLON },
{ 144, SHOVEL },
{ 249, FOOT },
{ 250, FOOT },
{ 93, PAPAYAS },
{ 0 }
{218, PAJAMAS},
{235, NATIVE},
{92, PAPAYAS},
{92, PINEAPPLE},
{92, KIWI},
{92, MANGO},
{92, NATIVE},
{92, MAN},
{181, LAMPON},
{236, LAMPON},
{92, LAMPON},
{216, WOODSMAN},
{216, DEADWOOD},
{216, MALLET},
{168, WOODSMAN},
{168, DEADWOOD},
{168, MALLET},
{170, WOODSMAN},
{170, DEADWOOD},
{170, MALLET},
{124, SHIELD},
{124, HALBERD},
{124, ELF},
{144, SHIELD},
{144, HALBERD},
{144, ELF},
{113, SHIELD},
{113, HALBERD},
{113, ELF},
{161, SHIELD},
{161, HALBERD},
{161, ELF},
{169, SHIELD},
{169, HALBERD},
{169, ELF},
{182, SHIELD},
{182, HALBERD},
{182, ELF},
{198, SHIELD},
{198, HALBERD},
{198, ELF},
{212, SHIELD},
{212, HALBERD},
{212, ELF},
{216, SHIELD},
{216, HALBERD},
{216, ELF},
{226, SHIELD},
{226, HALBERD},
{226, ELF},
{228, SHIELD},
{228, HALBERD},
{228, ELF},
{68, CYLON},
{144, SHOVEL},
{249, FOOT},
{250, FOOT},
{93, PAPAYAS},
{0}
};

View File

@ -1,4 +1,4 @@
/* $NetBSD: parse.c,v 1.5 1997/10/10 11:40:13 lukem Exp $ */
/* $NetBSD: parse.c,v 1.6 1997/10/11 02:07:33 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,9 +38,9 @@
#if 0
static char sccsid[] = "@(#)parse.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: parse.c,v 1.5 1997/10/10 11:40:13 lukem Exp $");
__RCSID("$NetBSD: parse.c,v 1.6 1997/10/11 02:07:33 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
@ -55,9 +55,9 @@ wordinit()
int
hash(s)
char *s;
char *s;
{
int hashval = 0;
int hashval = 0;
while (*s) {
hashval += *s++;
@ -69,7 +69,7 @@ hash(s)
struct wlist *
lookup(s)
char *s;
char *s;
{
struct wlist *wp;
@ -83,7 +83,7 @@ void
install(wp)
struct wlist *wp;
{
int hashval;
int hashval;
if (lookup(wp->string) == NULL) {
hashval = hash(wp->string);
@ -97,16 +97,16 @@ void
parse()
{
struct wlist *wp;
int n;
int n;
wordnumber = 0; /* for cypher */
wordnumber = 0; /* for cypher */
for (n = 0; n <= wordcount; n++) {
if ((wp = lookup(words[n])) == NULL) {
wordvalue[n] = -1;
wordtype[n] = -1;
} else {
wordvalue[n] = wp -> value;
wordtype[n] = wp -> article;
wordvalue[n] = wp->value;
wordtype[n] = wp->article;
}
}
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: room.c,v 1.5 1997/10/10 11:40:16 lukem Exp $ */
/* $NetBSD: room.c,v 1.6 1997/10/11 02:07:35 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,18 +38,18 @@
#if 0
static char sccsid[] = "@(#)room.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: room.c,v 1.5 1997/10/10 11:40:16 lukem Exp $");
__RCSID("$NetBSD: room.c,v 1.6 1997/10/11 02:07:35 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
void
writedes()
{
int compass;
char *p;
int c;
int compass;
char *p;
int c;
printf("\n\t%s\n", location[position].name);
if (beenthere[position] < 3) {
@ -69,7 +69,7 @@ void
printobjs()
{
unsigned int *p = location[position].objects;
int n;
int n;
printf("\n");
for (n = 0; n < NUMOFOBJECTS; n++)
@ -81,161 +81,161 @@ void
whichway(here)
struct room here;
{
switch(direction) {
switch (direction) {
case NORTH:
left = here.west;
right = here.east;
ahead = here.north;
back = here.south;
break;
case SOUTH:
left = here.east;
right = here.west;
ahead = here.south;
back = here.north;
break;
case NORTH:
left = here.west;
right = here.east;
ahead = here.north;
back = here.south;
break;
case EAST:
left = here.north;
right = here.south;
ahead = here.east;
back = here.west;
break;
case SOUTH:
left = here.east;
right = here.west;
ahead = here.south;
back = here.north;
break;
case WEST:
left = here.south;
right = here.north;
ahead = here.west;
back = here.east;
break;
case EAST:
left = here.north;
right = here.south;
ahead = here.east;
back = here.west;
break;
case WEST:
left = here.south;
right = here.north;
ahead = here.west;
back = here.east;
break;
}
}
char *
char *
truedirec(way, option)
int way;
char option;
int way;
char option;
{
switch(way) {
switch (way) {
case NORTH:
switch (direction) {
case NORTH:
switch(direction) {
case NORTH:
return("ahead");
case SOUTH:
return(option == '+' ? "behind you" :
"back");
case EAST:
return("left");
case WEST:
return("right");
}
return ("ahead");
case SOUTH:
switch(direction) {
case NORTH:
return(option == '+' ? "behind you" :
"back");
case SOUTH:
return("ahead");
case EAST:
return("right");
case WEST:
return("left");
}
return (option == '+' ? "behind you" :
"back");
case EAST:
switch(direction) {
case NORTH:
return("right");
case SOUTH:
return("left");
case EAST:
return("ahead");
case WEST:
return(option == '+' ? "behind you" :
"back");
}
return ("left");
case WEST:
switch(direction) {
case NORTH:
return("left");
case SOUTH:
return("right");
case EAST:
return(option == '+' ? "behind you" :
"back");
case WEST:
return("ahead");
}
return ("right");
}
default:
printf("Error: room %d. More than four directions wanted.", position);
return("!!");
}
case SOUTH:
switch (direction) {
case NORTH:
return (option == '+' ? "behind you" :
"back");
case SOUTH:
return ("ahead");
case EAST:
return ("right");
case WEST:
return ("left");
}
case EAST:
switch (direction) {
case NORTH:
return ("right");
case SOUTH:
return ("left");
case EAST:
return ("ahead");
case WEST:
return (option == '+' ? "behind you" :
"back");
}
case WEST:
switch (direction) {
case NORTH:
return ("left");
case SOUTH:
return ("right");
case EAST:
return (option == '+' ? "behind you" :
"back");
case WEST:
return ("ahead");
}
default:
printf("Error: room %d. More than four directions wanted.", position);
return ("!!");
}
}
void
newway(thisway)
int thisway;
int thisway;
{
switch(direction){
switch (direction) {
case NORTH:
switch(thisway){
case LEFT:
direction = WEST;
break;
case RIGHT:
direction = EAST;
break;
case BACK:
direction = SOUTH;
break;
}
case NORTH:
switch (thisway) {
case LEFT:
direction = WEST;
break;
case SOUTH:
switch(thisway){
case LEFT:
direction = EAST;
break;
case RIGHT:
direction = WEST;
break;
case BACK:
direction = NORTH;
break;
}
case RIGHT:
direction = EAST;
break;
case EAST:
switch(thisway){
case LEFT:
direction = NORTH;
break;
case RIGHT:
direction = SOUTH;
break;
case BACK:
direction = WEST;
break;
}
case BACK:
direction = SOUTH;
break;
case WEST:
switch(thisway){
case LEFT:
direction = SOUTH;
break;
case RIGHT:
direction = NORTH;
break;
case BACK:
direction = EAST;
break;
}
}
break;
case SOUTH:
switch (thisway) {
case LEFT:
direction = EAST;
break;
}
case RIGHT:
direction = WEST;
break;
case BACK:
direction = NORTH;
break;
}
break;
case EAST:
switch (thisway) {
case LEFT:
direction = NORTH;
break;
case RIGHT:
direction = SOUTH;
break;
case BACK:
direction = WEST;
break;
}
break;
case WEST:
switch (thisway) {
case LEFT:
direction = SOUTH;
break;
case RIGHT:
direction = NORTH;
break;
case BACK:
direction = EAST;
break;
}
break;
}
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: save.c,v 1.5 1997/10/10 11:40:19 lukem Exp $ */
/* $NetBSD: save.c,v 1.6 1997/10/11 02:07:37 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,26 +38,26 @@
#if 0
static char sccsid[] = "@(#)save.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: save.c,v 1.5 1997/10/10 11:40:19 lukem Exp $");
__RCSID("$NetBSD: save.c,v 1.6 1997/10/11 02:07:37 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
void
restore()
{
char *home;
char home1[100];
int n;
int tmp;
FILE *fp;
char *home;
char home1[100];
int n;
int tmp;
FILE *fp;
home = getenv("HOME");
strcpy(home1, home);
strcat(home1, "/Bstar");
if ((fp = fopen(home1, "r")) == 0) {
perror(home1);
warn("fopen %s", home1);
return;
}
fread(&WEIGHT, sizeof WEIGHT, 1, fp);
@ -100,17 +100,17 @@ restore()
void
save()
{
char *home;
char home1[100];
int n;
int tmp;
FILE *fp;
char *home;
char home1[100];
int n;
int tmp;
FILE *fp;
home = getenv("HOME");
strcpy(home1, home);
strcat(home1, "/Bstar");
if ((fp = fopen(home1, "w")) == 0) {
perror(home1);
warn("fopen %s", home1);
return;
}
printf("Saved in %s.\n", home1);

View File

@ -1,4 +1,4 @@
/* $NetBSD: words.c,v 1.5 1997/10/10 11:40:22 lukem Exp $ */
/* $NetBSD: words.c,v 1.6 1997/10/11 02:07:39 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
@ -38,176 +38,176 @@
#if 0
static char sccsid[] = "@(#)words.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: words.c,v 1.5 1997/10/10 11:40:22 lukem Exp $");
__RCSID("$NetBSD: words.c,v 1.6 1997/10/11 02:07:39 lukem Exp $");
#endif
#endif /* not lint */
#endif /* not lint */
#include "extern.h"
struct wlist wlist[] = {
{ "knife", KNIFE, OBJECT },
{ "sword", SWORD, NOUNS },
{ "scabbard", SWORD, OBJECT },
{ "fine", SWORD, OBJECT },
{ "two-handed", TWO_HANDED, OBJECT },
{ "cleaver", CLEAVER, OBJECT },
{ "broadsword", BROAD, OBJECT },
{ "mail", MAIL, OBJECT },
{ "coat", MAIL, OBJECT },
{ "helmet", HELM, OBJECT },
{ "shield", SHIELD, OBJECT },
{ "maid", MAID, OBJECT },
{ "maid's", MAID, OBJECT },
{ "body", BODY, NOUNS },
{ "viper", VIPER, OBJECT },
{ "lamp", LAMPON, OBJECT },
{ "lantern", LAMPON, OBJECT },
{ "shoes", SHOES, OBJECT },
{ "pajamas", PAJAMAS, OBJECT },
{ "robe", ROBE, OBJECT },
{ "amulet", AMULET, NOUNS },
{ "medallion", MEDALION, NOUNS },
{ "talisman", TALISMAN, NOUNS },
{ "woodsman", DEADWOOD, OBJECT },
{ "woodsman's", DEADWOOD, OBJECT },
{ "mallet", MALLET, OBJECT },
{ "laser", LASER, OBJECT },
{ "pistol", LASER, OBJECT },
{ "blaster", LASER, OBJECT },
{ "gun", LASER, OBJECT },
{ "goddess", NORMGOD, NOUNS },
{ "grenade", GRENADE, OBJECT },
{ "chain", CHAIN, OBJECT },
{ "rope", ROPE, OBJECT },
{ "levis", LEVIS, OBJECT },
{ "pants", LEVIS, OBJECT },
{ "mace", MACE, OBJECT },
{ "shovel", SHOVEL, OBJECT },
{ "halberd", HALBERD, OBJECT },
{ "compass", COMPASS, OBJECT },
{ "elf", ELF, OBJECT },
{ "coins", COINS, OBJECT },
{ "matches", MATCHES, OBJECT },
{ "match", MATCHES, OBJECT },
{ "book", MATCHES, OBJECT },
{ "man", MAN, NOUNS },
{ "papayas", PAPAYAS, OBJECT },
{ "pineapple", PINEAPPLE, OBJECT },
{ "kiwi", KIWI, OBJECT },
{ "coconuts", COCONUTS, OBJECT },
{ "mango", MANGO, OBJECT },
{ "ring", RING, OBJECT },
{ "potion", POTION, OBJECT },
{ "bracelet", BRACELET, OBJECT },
{ "timer", TIMER, NOUNS },
{ "bomb", BOMB, OBJECT },
{ "warhead", BOMB, OBJECT },
{ "girl", NATIVE, NOUNS },
{ "native", NATIVE, NOUNS },
{ "horse", HORSE, OBJECT },
{ "stallion", HORSE, OBJECT },
{ "car", CAR, OBJECT },
{ "volare", CAR, OBJECT },
{ "pot", POT, OBJECT },
{ "jewels", POT, OBJECT },
{ "bar", BAR, OBJECT },
{ "diamond", BLOCK, OBJECT },
{ "block", BLOCK, OBJECT },
{ "up", UP, VERB },
{ "u", UP, VERB },
{ "down", DOWN, VERB },
{ "d", DOWN, VERB },
{ "ahead", AHEAD, VERB },
{ "a", AHEAD, VERB },
{ "back", BACK, VERB },
{ "b", BACK, VERB },
{ "right", RIGHT, VERB },
{ "r", RIGHT, VERB },
{ "left", LEFT, VERB },
{ "l", LEFT, VERB },
{ "take", TAKE, VERB },
{ "get", TAKE, VERB },
{ "use", USE, VERB },
{ "look", LOOK, VERB },
{ "lo", LOOK, VERB },
{ "quit", QUIT, VERB },
{ "q", QUIT, VERB },
{ "su", SU, VERB },
{ "drop", DROP, VERB },
{ "draw", DRAW, VERB },
{ "pull", DRAW, VERB },
{ "carry", DRAW, VERB },
{ "wear", WEARIT, VERB },
{ "sheathe", WEARIT, VERB },
{ "put", PUT, VERB },
{ "buckle", PUT, VERB },
{ "strap", PUT, VERB },
{ "tie", PUT, VERB },
{ "inven", INVEN, VERB },
{ "i", INVEN, VERB },
{ "everything", EVERYTHING, OBJECT },
{ "all", EVERYTHING, OBJECT },
{ "and", AND, CONJ },
{ "kill", KILL, VERB },
{ "fight", KILL, VERB },
{ "ravage", RAVAGE, VERB },
{ "rape", RAVAGE, VERB },
{ "undress", UNDRESS, VERB },
{ "throw", THROW, VERB },
{ "launch", LAUNCH, VERB },
{ "land", LANDIT, VERB },
{ "light", LIGHT, VERB },
{ "strike", LIGHT, VERB },
{ "follow", FOLLOW, VERB },
{ "chase", FOLLOW, VERB },
{ "kiss", KISS, VERB },
{ "love", LOVE, VERB },
{ "fuck", LOVE, VERB },
{ "give", GIVE, VERB },
{ "smite", SMITE, VERB },
{ "attack", SMITE, VERB },
{ "swing", SMITE, VERB },
{ "stab", SMITE, VERB },
{ "slice", SMITE, VERB },
{ "cut", SMITE, VERB },
{ "hack", SMITE, VERB },
{ "shoot", SHOOT, VERB },
{ "blast", SHOOT, VERB },
{ "on", ON, PREPS },
{ "off", OFF, PREPS },
{ "time", TIME, VERB },
{ "sleep", SLEEP, VERB },
{ "dig", DIG, VERB },
{ "eat", EAT, VERB },
{ "swim", SWIM, VERB },
{ "drink", DRINK, VERB },
{ "door", DOOR, NOUNS },
{ "save", SAVE, VERB },
{ "ride", RIDE, VERB },
{ "mount", RIDE, VERB },
{ "drive", DRIVE, VERB },
{ "start", DRIVE, VERB },
{ "score", SCORE, VERB },
{ "points", SCORE, VERB },
{ "bury", BURY, VERB },
{ "jump", JUMP, VERB },
{ "kick", KICK, VERB },
{ "kerosene", 0, ADJS },
{ "plumed", 0, ADJS },
{ "ancient", 0, ADJS },
{ "golden", 0, ADJS },
{ "gold", 0, ADJS },
{ "ostrich", 0, ADJS },
{ "rusty", 0, ADJS },
{ "old", 0, ADJS },
{ "dented", 0, ADJS },
{ "blue", 0, ADJS },
{ "purple", 0, ADJS },
{ "kingly", 0, ADJS },
{ "the", 0, ADJS },
{ "climb", 0, ADJS },
{ "move", 0, ADJS },
{ "make", 0, ADJS },
{ "to", 0, ADJS },
{ 0 }
{"knife", KNIFE, OBJECT},
{"sword", SWORD, NOUNS},
{"scabbard", SWORD, OBJECT},
{"fine", SWORD, OBJECT},
{"two-handed", TWO_HANDED, OBJECT},
{"cleaver", CLEAVER, OBJECT},
{"broadsword", BROAD, OBJECT},
{"mail", MAIL, OBJECT},
{"coat", MAIL, OBJECT},
{"helmet", HELM, OBJECT},
{"shield", SHIELD, OBJECT},
{"maid", MAID, OBJECT},
{"maid's", MAID, OBJECT},
{"body", BODY, NOUNS},
{"viper", VIPER, OBJECT},
{"lamp", LAMPON, OBJECT},
{"lantern", LAMPON, OBJECT},
{"shoes", SHOES, OBJECT},
{"pajamas", PAJAMAS, OBJECT},
{"robe", ROBE, OBJECT},
{"amulet", AMULET, NOUNS},
{"medallion", MEDALION, NOUNS},
{"talisman", TALISMAN, NOUNS},
{"woodsman", DEADWOOD, OBJECT},
{"woodsman's", DEADWOOD, OBJECT},
{"mallet", MALLET, OBJECT},
{"laser", LASER, OBJECT},
{"pistol", LASER, OBJECT},
{"blaster", LASER, OBJECT},
{"gun", LASER, OBJECT},
{"goddess", NORMGOD, NOUNS},
{"grenade", GRENADE, OBJECT},
{"chain", CHAIN, OBJECT},
{"rope", ROPE, OBJECT},
{"levis", LEVIS, OBJECT},
{"pants", LEVIS, OBJECT},
{"mace", MACE, OBJECT},
{"shovel", SHOVEL, OBJECT},
{"halberd", HALBERD, OBJECT},
{"compass", COMPASS, OBJECT},
{"elf", ELF, OBJECT},
{"coins", COINS, OBJECT},
{"matches", MATCHES, OBJECT},
{"match", MATCHES, OBJECT},
{"book", MATCHES, OBJECT},
{"man", MAN, NOUNS},
{"papayas", PAPAYAS, OBJECT},
{"pineapple", PINEAPPLE, OBJECT},
{"kiwi", KIWI, OBJECT},
{"coconuts", COCONUTS, OBJECT},
{"mango", MANGO, OBJECT},
{"ring", RING, OBJECT},
{"potion", POTION, OBJECT},
{"bracelet", BRACELET, OBJECT},
{"timer", TIMER, NOUNS},
{"bomb", BOMB, OBJECT},
{"warhead", BOMB, OBJECT},
{"girl", NATIVE, NOUNS},
{"native", NATIVE, NOUNS},
{"horse", HORSE, OBJECT},
{"stallion", HORSE, OBJECT},
{"car", CAR, OBJECT},
{"volare", CAR, OBJECT},
{"pot", POT, OBJECT},
{"jewels", POT, OBJECT},
{"bar", BAR, OBJECT},
{"diamond", BLOCK, OBJECT},
{"block", BLOCK, OBJECT},
{"up", UP, VERB},
{"u", UP, VERB},
{"down", DOWN, VERB},
{"d", DOWN, VERB},
{"ahead", AHEAD, VERB},
{"a", AHEAD, VERB},
{"back", BACK, VERB},
{"b", BACK, VERB},
{"right", RIGHT, VERB},
{"r", RIGHT, VERB},
{"left", LEFT, VERB},
{"l", LEFT, VERB},
{"take", TAKE, VERB},
{"get", TAKE, VERB},
{"use", USE, VERB},
{"look", LOOK, VERB},
{"lo", LOOK, VERB},
{"quit", QUIT, VERB},
{"q", QUIT, VERB},
{"su", SU, VERB},
{"drop", DROP, VERB},
{"draw", DRAW, VERB},
{"pull", DRAW, VERB},
{"carry", DRAW, VERB},
{"wear", WEARIT, VERB},
{"sheathe", WEARIT, VERB},
{"put", PUT, VERB},
{"buckle", PUT, VERB},
{"strap", PUT, VERB},
{"tie", PUT, VERB},
{"inven", INVEN, VERB},
{"i", INVEN, VERB},
{"everything", EVERYTHING, OBJECT},
{"all", EVERYTHING, OBJECT},
{"and", AND, CONJ},
{"kill", KILL, VERB},
{"fight", KILL, VERB},
{"ravage", RAVAGE, VERB},
{"rape", RAVAGE, VERB},
{"undress", UNDRESS, VERB},
{"throw", THROW, VERB},
{"launch", LAUNCH, VERB},
{"land", LANDIT, VERB},
{"light", LIGHT, VERB},
{"strike", LIGHT, VERB},
{"follow", FOLLOW, VERB},
{"chase", FOLLOW, VERB},
{"kiss", KISS, VERB},
{"love", LOVE, VERB},
{"fuck", LOVE, VERB},
{"give", GIVE, VERB},
{"smite", SMITE, VERB},
{"attack", SMITE, VERB},
{"swing", SMITE, VERB},
{"stab", SMITE, VERB},
{"slice", SMITE, VERB},
{"cut", SMITE, VERB},
{"hack", SMITE, VERB},
{"shoot", SHOOT, VERB},
{"blast", SHOOT, VERB},
{"on", ON, PREPS},
{"off", OFF, PREPS},
{"time", TIME, VERB},
{"sleep", SLEEP, VERB},
{"dig", DIG, VERB},
{"eat", EAT, VERB},
{"swim", SWIM, VERB},
{"drink", DRINK, VERB},
{"door", DOOR, NOUNS},
{"save", SAVE, VERB},
{"ride", RIDE, VERB},
{"mount", RIDE, VERB},
{"drive", DRIVE, VERB},
{"start", DRIVE, VERB},
{"score", SCORE, VERB},
{"points", SCORE, VERB},
{"bury", BURY, VERB},
{"jump", JUMP, VERB},
{"kick", KICK, VERB},
{"kerosene", 0, ADJS},
{"plumed", 0, ADJS},
{"ancient", 0, ADJS},
{"golden", 0, ADJS},
{"gold", 0, ADJS},
{"ostrich", 0, ADJS},
{"rusty", 0, ADJS},
{"old", 0, ADJS},
{"dented", 0, ADJS},
{"blue", 0, ADJS},
{"purple", 0, ADJS},
{"kingly", 0, ADJS},
{"the", 0, ADJS},
{"climb", 0, ADJS},
{"move", 0, ADJS},
{"make", 0, ADJS},
{"to", 0, ADJS},
{0}
};