]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - battlestar/cypher.c
Put prototypes in alphabetical order.
[bsdgames-darwin.git] / battlestar / cypher.c
index d3d85904e216dbb38e913a5c774a849e72ea6f07..f2dfc1e8d25b664fcd05fb6b89b4c22116853407 100644 (file)
@@ -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: