-/* $NetBSD: cypher.c,v 1.7 1998/08/24 00:25:32 hubertf Exp $ */
+/* $NetBSD: cypher.c,v 1.12 2000/09/08 17:25:32 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.7 1998/08/24 00:25:32 hubertf Exp $");
+__RCSID("$NetBSD: cypher.c,v 1.12 2000/09/08 17:25:32 jsm Exp $");
#endif
#endif /* not lint */
int junk;
int lflag = -1;
char buffer[10];
+ char *filename, *rfilename;
+ size_t filename_len;
while (wordtype[wordnumber] == ADJS)
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;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(location[position].objects, n) && objsht[n]) {
wordvalue[wordnumber + 1] = n;
+ /* Some objects (type NOUNS)
+ * have special treatment in
+ * take(). For these we
+ * must set the type to NOUNS.
+ * However for SWORD and BODY
+ * all it does is find which
+ * of many objects is meant,
+ * so we need do nothing here.
+ * BATHGOD must become
+ * NORMGOD as well. NOUNS
+ * with no special case
+ * must be included here to
+ * get the right error. DOOR
+ * cannot occur as an object
+ * so need not be included. */
+ switch(n) {
+ case BATHGOD:
+ wordvalue[wordnumber + 1] = NORMGOD;
+ /* FALLTHROUGH */
+ case NORMGOD:
+ case AMULET:
+ case MEDALION:
+ case TALISMAN:
+ case MAN:
+ case TIMER:
+ case NATIVE:
+ wordtype[wordnumber + 1] = NOUNS;
+ break;
+ default:
+ wordtype[wordnumber + 1] = OBJECT;
+ }
wordnumber = take(location[position].objects);
}
wordnumber++;
break;
case SAVE:
- save();
+ printf("\nSave file name (default %s) ",
+ DEFAULT_SAVE_FILE);
+ filename = fgetln(stdin, &filename_len);
+ if (filename_len == 0
+ || (filename_len == 1 && filename[0] == '\n'))
+ rfilename = save_file_name(DEFAULT_SAVE_FILE,
+ strlen(DEFAULT_SAVE_FILE));
+ else {
+ if (filename[filename_len - 1] == '\n')
+ filename_len--;
+ rfilename = save_file_name(filename,
+ filename_len);
+ }
+ save(rfilename);
+ free(rfilename);
break;
case FOLLOW: