X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/2e97bed1073ca965f36938e2ceb5fb26da06e3b1..964291ab94b8c99e06c7eb639459f9a62dabeb7c:/battlestar/cypher.c diff --git a/battlestar/cypher.c b/battlestar/cypher.c index d3d85904..f2dfc1e8 100644 --- a/battlestar/cypher.c +++ b/battlestar/cypher.c @@ -1,4 +1,4 @@ -/* $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 @@ -38,7 +38,7 @@ #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 */ @@ -51,6 +51,8 @@ cypher() int junk; int lflag = -1; char buffer[10]; + char *filename, *rfilename; + size_t filename_len; while (wordtype[wordnumber] == ADJS) wordnumber++; @@ -61,41 +63,41 @@ cypher() 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; @@ -118,6 +120,37 @@ cypher() 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++; @@ -337,7 +370,21 @@ cypher() 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: