]> granicus.if.org Git - nethack/commitdiff
Make WALLIFIED_MAZE into a level flag.
authorSean Hunt <scshunt@csclub.uwaterloo.ca>
Thu, 9 Apr 2015 17:26:43 +0000 (13:26 -0400)
committerSean Hunt <scshunt@csclub.uwaterloo.ca>
Thu, 9 Apr 2015 17:27:44 +0000 (13:27 -0400)
It should now be randomly disabled for a 3rd of Gehennom, to make things
a tad more interesting there. It's also disabled in Baalzebub's lair,
to make things a little more interesting.

Still don't know why the beetle is disappearing.

dat/gehennom.des
include/config.h
include/rm.h
include/sp_lev.h
src/files.c
src/mklev.c
src/mkmaze.c
src/sp_lev.c
util/lev_comp.l
util/makedefs.c

index 7ae2a9df46f1fc386da2049a7e294436aa865dd7..d6fefbe55378607b111b938e3d47ba951ca50646 100644 (file)
@@ -502,8 +502,8 @@ TRAP:"magic", random
 #
 # The Baalzebub level
 #
-MAZE:"baalz",random
-FLAGS: noteleport
+MAZE:"baalz",' '
+FLAGS: noteleport,corrmaze
 GEOMETRY:right,center
 MAP
 -------------------------------------------------
index c5e53abf6c3a275e4b359cbba778834f463c37c0..fbe4704aef8974d266ea5765d01f51174a9d6a5a 100644 (file)
@@ -416,7 +416,6 @@ typedef unsigned char       uchar;
 /* display features */
 /* dungeon features */
 /* dungeon levels */
-#define WALLIFIED_MAZE /* Fancy mazes - Jean-Christophe Collet */
 /* monsters & objects */
 /* I/O */
 #if !defined(MAC)
index 86474c9cac42d827026c9954bbf87b7093f32584..760eeeb8190ad2fcf5061907d86141b1e48b1488 100644 (file)
@@ -554,6 +554,8 @@ struct levelflags {
        Bitfield(wizard_bones,1);       /* set if level came from a bones file
                                           which was created in wizard mode (or
                                           normal mode descendant of such) */
+        Bitfield(corrmaze, 1);          /* Whether corridors are used for the maze
+                                           rather than ROOM */
 };
 
 typedef struct
index 3d4d961c65a16fc8564888ea17908e8f68250f9f..05c7ea6c6eb0a6d53c1ffe421e4f4082444cd28e 100644 (file)
@@ -30,6 +30,7 @@
 #define GRAVEYARD       0x00000100L
 #define ICEDPOOLS       0x00000200L  /* for ice locations: ICED_POOL vs ICED_MOAT */
 #define SOLIDIFY       0x00000400L  /* outer areas are nondiggable & nonpasswall */
+#define CORRMAZE        0x00000800L  /* for maze levels only */
 
 /* different level layout initializers */
 #define LVLINIT_NONE           0
index b3820e36186254c75a497939d9e6efea713b4d32..9b9d0946327b52a4754d36ab22383fcf2b3e6530 100644 (file)
@@ -1420,7 +1420,7 @@ docompress_file(filename, uncomp)
 const char *filename;
 boolean uncomp;
 {
-       gzFile *compressedfile;
+       gzFile compressedfile;
        FILE *uncompressedfile;
        char cfn[256];
        char buf[1024];
index 5210d912b219d0ef20616ee3a6c2dd8e712c5f10..744eb31f2007861e6ef49d0a4c80bb9c9c007858 100644 (file)
@@ -582,6 +582,7 @@ clear_level_structures()
        level.flags.is_cavernous_lev = 0;
        level.flags.arboreal = 0;
        level.flags.wizard_bones = 0;
+        level.flags.corrmaze = 0;
 
        nroom = 0;
        rooms[0].hx = -1;
index d9515de2df5dcbbdfd73e7703fd1296d5705967d..3d2cc99333200780ecd2f6d26ee6c1187fe29d4e 100644 (file)
@@ -541,25 +541,25 @@ register const char *s;
        }
 
        level.flags.is_maze_lev = TRUE;
+        level.flags.corrmaze = !rn2(3);
 
-#ifndef WALLIFIED_MAZE
-       for(x = 2; x < x_maze_max; x++)
-               for(y = 2; y < y_maze_max; y++)
-                       levl[x][y].typ = STONE;
-#else
-       for(x = 2; x <= x_maze_max; x++)
-               for(y = 2; y <= y_maze_max; y++)
-                       levl[x][y].typ = ((x % 2) && (y % 2)) ? STONE : HWALL;
-#endif
+        if (level.flags.corrmaze)
+            for(x = 2; x < x_maze_max; x++)
+                for(y = 2; y < y_maze_max; y++)
+                    levl[x][y].typ = STONE;
+        else
+            for(x = 2; x <= x_maze_max; x++)
+                for(y = 2; y <= y_maze_max; y++)
+                    levl[x][y].typ = ((x % 2) && (y % 2)) ? STONE : HWALL;
 
        maze0xy(&mm);
        walkfrom((int) mm.x, (int) mm.y, 0);
        /* put a boulder at the maze center */
        (void) mksobj_at(BOULDER, (int) mm.x, (int) mm.y, TRUE, FALSE);
 
-#ifdef WALLIFIED_MAZE
-       wallification(2, 2, x_maze_max, y_maze_max);
-#endif
+        if (!level.flags.corrmaze)
+            wallification(2, 2, x_maze_max, y_maze_max);
+
        mazexy(&mm);
        mkstairs(mm.x, mm.y, 1, (struct mkroom *)0);            /* up */
        if (!Invocation_lev(&u.uz)) {
@@ -650,11 +650,12 @@ schar typ;
        int q, a, dir, pos;
        int dirs[4];
 
-#ifndef WALLIFIED_MAZE
-       if (!typ) typ = CORR;
-#else
-       if (!typ) typ = ROOM;
-#endif
+        if (!typ) {
+            if (level.flags.corrmaze)
+                typ = CORR;
+            else
+                typ = ROOM;
+        }
 
        pos = 1;
        mazex[pos] = (char) x;
@@ -695,11 +696,12 @@ schar typ;
        register int q,a,dir;
        int dirs[4];
 
-#ifndef WALLIFIED_MAZE
-       if (!typ) typ = CORR;
-#else
-       if (!typ) typ = ROOM;
-#endif
+        if (!typ) {
+            if (level.flags.corrmaze)
+                typ = CORR;
+            else
+                typ = ROOM;
+        }
 
        if(!IS_DOOR(levl[x][y].typ)) {
            /* might still be on edge of MAP, so don't overwrite */
@@ -737,7 +739,7 @@ register int dir;
 
 void
 mazexy(cc)     /* find random point in generated corridors,
-                  so we don't create items in moats, bunkers, or walls */
+                  so we don't create items in moats, bunkers, or walls */
        coord   *cc;
 {
        int cpt=0;
@@ -746,13 +748,8 @@ mazexy(cc) /* find random point in generated corridors,
            cc->x = 3 + 2*rn2((x_maze_max>>1) - 1);
            cc->y = 3 + 2*rn2((y_maze_max>>1) - 1);
            cpt++;
-       } while (cpt < 100 && levl[cc->x][cc->y].typ !=
-#ifdef WALLIFIED_MAZE
-                ROOM
-#else
-                CORR
-#endif
-               );
+       } while (cpt < 100 &&
+                 levl[cc->x][cc->y].typ != (level.flags.corrmaze ? CORR : ROOM));
        if (cpt >= 100) {
                register int x, y;
                /* last try */
@@ -760,13 +757,8 @@ mazexy(cc) /* find random point in generated corridors,
                    for (y = 0; y < (y_maze_max>>1) - 1; y++) {
                        cc->x = 3 + 2 * x;
                        cc->y = 3 + 2 * y;
-                       if (levl[cc->x][cc->y].typ ==
-#ifdef WALLIFIED_MAZE
-                           ROOM
-#else
-                           CORR
-#endif
-                          ) return;
+                       if (levl[cc->x][cc->y].typ == (level.flags.corrmaze ? CORR : ROOM))
+                          return;
                    }
                panic("mazexy: can't find a place!");
        }
@@ -783,7 +775,7 @@ bound_digging()
  * so the boundary would be breached
  *
  * we can't bound unconditionally on one beyond the last line, because
- * that provides a window of abuse for WALLIFIED_MAZE special levels
+ * that provides a window of abuse for wallified special levels
  */
 {
        register int x,y;
index 5efdb6e16364037c3e28f70d5bd4947182d5242c..9eef34a0f181ff4df6646470c8afd85dbd2edcf0 100644 (file)
@@ -520,12 +520,11 @@ schar filling;
 
        for (x = x1; x <= x2; x++)
                for (y = y1; y <= y2; y++) {
-#ifndef WALLIFIED_MAZE
-                       levl[x][y].typ = STONE;
-#else
-                       levl[x][y].typ =
-                               (y < 2 || ((x % 2) && (y % 2))) ? STONE : filling;
-#endif
+            if (level.flags.corrmaze)
+                           levl[x][y].typ = STONE;
+            else
+                levl[x][y].typ =
+                    (y < 2 || ((x % 2) && (y % 2))) ? STONE : filling;
                }
 }
 
@@ -2948,6 +2947,7 @@ spo_level_flags(coder)
     if (lflags & GRAVEYARD)    level.flags.graveyard = 1;
     if (lflags & ICEDPOOLS)    icedpools = TRUE;
     if (lflags & SOLIDIFY)     coder->solidify = TRUE;
+    if (lflags & CORRMAZE)     level.flags.corrmaze = TRUE;
 
     opvar_free(flagdata);
 }
@@ -4114,11 +4114,7 @@ spo_mazewalk(coder)
     if (!isok(x,y)) return;
 
     if (OV_i(ftyp) < 1) {
-#ifndef WALLIFIED_MAZE
-       OV_i(ftyp) = CORR;
-#else
-       OV_i(ftyp) = ROOM;
-#endif
+      OV_i(ftyp) = level.flags.corrmaze ? CORR : ROOM;
     }
 
     /* don't use move() - it doesn't use W_NORTH, etc. */
index 202f3a7a8911ddfb482d48b7a7f236292bb4e06e..8192621cb2f8d76d18d58970627881c3a2d07bb4 100644 (file)
@@ -296,6 +296,7 @@ shroud              { savetoken(yytext); yylval.i=SHROUD; return FLAG_TYPE; }
 graveyard      { savetoken(yytext); yylval.i=GRAVEYARD; return FLAG_TYPE; }
 icedpools      { savetoken(yytext); yylval.i=ICEDPOOLS; return FLAG_TYPE; }
 solidify       { savetoken(yytext); yylval.i=SOLIDIFY; return FLAG_TYPE; }
+corrmaze        { savetoken(yytext); yylval.i=CORRMAZE; return FLAG_TYPE; }
 [0-9]+d[0-9]+  { char *p = strchr(yytext, 'd');
                  savetoken(yytext);
                  if (p) {
index 7bb689bef8232e006f8e8a1e9b1c30886b19bf67..e4c6902eaaf9c69a970c8404ed158ed3c47b4056 100644 (file)
@@ -1367,9 +1367,6 @@ static const char *build_opts[] = {
 #ifdef VISION_TABLES
                "vision tables",
 #endif
-#ifdef WALLIFIED_MAZE
-               "walled mazes",
-#endif
 #ifdef ZEROCOMP
                "zero-compressed save files",
 #endif