-/* $NetBSD: cypher.c,v 1.10 1999/09/18 16:41:38 jsm Exp $ */
+/* $NetBSD: cypher.c,v 1.17 2000/09/22 08:19:57 jsm Exp $ */
/*
* Copyright (c) 1983, 1993
#if 0
static char sccsid[] = "@(#)cypher.c 8.2 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: cypher.c,v 1.10 1999/09/18 16:41:38 jsm Exp $");
+__RCSID("$NetBSD: cypher.c,v 1.17 2000/09/22 08:19:57 jsm Exp $");
#endif
#endif /* not lint */
char *filename, *rfilename;
size_t filename_len;
- while (wordtype[wordnumber] == ADJS)
- wordnumber++;
while (wordnumber <= wordcount) {
switch (wordvalue[wordnumber]) {
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))
+ if (!moveplayer(location[position].up, AHEAD))
return (-1);
} else {
- puts("There is no way up");
+ puts("There is no way up.");
return (-1);
}
lflag = 0;
break;
case DOWN:
- if (!move(location[position].down, AHEAD))
+ if (!moveplayer(location[position].down, AHEAD))
return (-1);
lflag = 0;
break;
case LEFT:
- if (!move(left, LEFT))
+ if (!moveplayer(left, LEFT))
return (-1);
lflag = 0;
break;
case RIGHT:
- if (!move(right, RIGHT))
+ if (!moveplayer(right, RIGHT))
return (-1);
lflag = 0;
break;
case AHEAD:
- if (!move(ahead, AHEAD))
+ if (!moveplayer(ahead, AHEAD))
return (-1);
lflag = 0;
break;
case BACK:
- if (!move(back, BACK))
+ if (!moveplayer(back, BACK))
return (-1);
lflag = 0;
break;
case SHOOT:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
+ int things;
+ things = 0;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(location[position].objects, n) && objsht[n]) {
+ things++;
wordvalue[wordnumber + 1] = n;
wordnumber = shoot();
}
+ if (!things)
+ puts("Nothing to shoot at!");
wordnumber++;
wordnumber++;
} else
case TAKE:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
+ int things;
+ things = 0;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(location[position].objects, n) && objsht[n]) {
+ things++;
wordvalue[wordnumber + 1] = n;
/* Some objects (type NOUNS)
* have special treatment in
}
wordnumber++;
wordnumber++;
+ if (!things)
+ puts("Nothing to take!");
} else
take(location[position].objects);
break;
case DROP:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
+ int things;
+ things = 0;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n)) {
+ things++;
wordvalue[wordnumber + 1] = n;
wordnumber = drop("Dropped");
}
wordnumber++;
wordnumber++;
+ if (!things)
+ puts("Nothing to drop!");
} else
drop("Dropped");
break;
case KICK:
case THROW:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
+ int things, wv;
+ things = 0;
+ wv = wordvalue[wordnumber];
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n) ||
(testbit(location[position].objects, n) && objsht[n])) {
+ things++;
wordvalue[wordnumber + 1] = n;
wordnumber = throw(wordvalue[wordnumber] == KICK ? "Kicked" : "Thrown");
}
wordnumber += 2;
+ if (!things)
+ printf("Nothing to %s!\n", wv == KICK ? "kick" : "throw");
} else
throw(wordvalue[wordnumber] == KICK ? "Kicked" : "Thrown");
break;
case TAKEOFF:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
+ int things;
+ things = 0;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(wear, n)) {
+ things++;
wordvalue[wordnumber + 1] = n;
wordnumber = takeoff();
}
wordnumber += 2;
+ if (!things)
+ puts("Nothing to take off!");
} else
takeoff();
break;
case DRAW:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
+ int things;
+ things = 0;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(wear, n)) {
+ things++;
wordvalue[wordnumber + 1] = n;
wordnumber = draw();
}
wordnumber += 2;
+ if (!things)
+ puts("Nothing to draw!");
} else
draw();
break;
case PUTON:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
+ int things;
+ things = 0;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(location[position].objects, n) && objsht[n]) {
+ things++;
wordvalue[wordnumber + 1] = n;
wordnumber = puton();
}
wordnumber += 2;
+ if (!things)
+ puts("Nothing to put on!");
} else
puton();
break;
case WEARIT:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
+ int things;
+ things = 0;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n)) {
+ things++;
wordvalue[wordnumber + 1] = n;
wordnumber = wearit();
}
wordnumber += 2;
+ if (!things)
+ puts("Nothing to wear!");
} else
wearit();
break;
case EAT:
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
+ int things;
+ things = 0;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n)) {
+ things++;
wordvalue[wordnumber + 1] = n;
wordnumber = eat();
}
wordnumber += 2;
+ if (!things)
+ puts("Nothing to eat!");
} else
eat();
break;
printf("\nYou can still carry up to %d kilogram%s\n", WEIGHT, (WEIGHT == 1 ? "." : "s."));
} else
puts("\nYou are in perfect health.");
+ wordnumber++;
break;
case USE:
lflag = use();
break;
+ case OPEN:
+ if (wordnumber < wordcount && wordvalue[wordnumber + 1] == EVERYTHING) {
+ int things;
+ things = 0;
+ for (n = 0; n < NUMOFOBJECTS; n++)
+ if (testbit(inven, n)) {
+ things++;
+ wordvalue[wordnumber + 1] = n;
+ dooropen();
+ }
+ wordnumber += 2;
+ if (!things)
+ puts("Nothing to open!");
+ } else
+ dooropen();
+ break;
+
case LOOK:
if (!notes[CANTSEE] || testbit(inven, LAMPON) ||
testbit(location[position].objects, LAMPON)
break;
case SAVE:
- printf("\nSave file name (default %s) ",
+ printf("\nSave file name (default %s): ",
DEFAULT_SAVE_FILE);
filename = fgetln(stdin, &filename_len);
if (filename_len == 0
free(rfilename);
break;
+ case VERBOSE:
+ verbose = 1;
+ printf("[Maximum verbosity]\n");
+ break;
+
+ case BRIEF:
+ verbose = 0;
+ printf("[Standard verbosity]\n");
+ break;
+
case FOLLOW:
lflag = follow();
break;