From: Sean Hunt Date: Thu, 9 Apr 2015 17:26:43 +0000 (-0400) Subject: Make WALLIFIED_MAZE into a level flag. X-Git-Tag: NetHack-3.6.0_RC01~483 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f5230557460dda49e5b3300525562b65715cf2f8;p=nethack Make WALLIFIED_MAZE into a level flag. 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. --- diff --git a/dat/gehennom.des b/dat/gehennom.des index 7ae2a9df4..d6fefbe55 100644 --- a/dat/gehennom.des +++ b/dat/gehennom.des @@ -502,8 +502,8 @@ TRAP:"magic", random # # The Baalzebub level # -MAZE:"baalz",random -FLAGS: noteleport +MAZE:"baalz",' ' +FLAGS: noteleport,corrmaze GEOMETRY:right,center MAP ------------------------------------------------- diff --git a/include/config.h b/include/config.h index c5e53abf6..fbe4704ae 100644 --- a/include/config.h +++ b/include/config.h @@ -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) diff --git a/include/rm.h b/include/rm.h index 86474c9ca..760eeeb81 100644 --- a/include/rm.h +++ b/include/rm.h @@ -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 diff --git a/include/sp_lev.h b/include/sp_lev.h index 3d4d961c6..05c7ea6c6 100644 --- a/include/sp_lev.h +++ b/include/sp_lev.h @@ -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 diff --git a/src/files.c b/src/files.c index b3820e361..9b9d09463 100644 --- a/src/files.c +++ b/src/files.c @@ -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]; diff --git a/src/mklev.c b/src/mklev.c index 5210d912b..744eb31f2 100644 --- a/src/mklev.c +++ b/src/mklev.c @@ -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; diff --git a/src/mkmaze.c b/src/mkmaze.c index d9515de2d..3d2cc9933 100644 --- a/src/mkmaze.c +++ b/src/mkmaze.c @@ -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; diff --git a/src/sp_lev.c b/src/sp_lev.c index 5efdb6e16..9eef34a0f 100644 --- a/src/sp_lev.c +++ b/src/sp_lev.c @@ -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. */ diff --git a/util/lev_comp.l b/util/lev_comp.l index 202f3a7a8..8192621cb 100644 --- a/util/lev_comp.l +++ b/util/lev_comp.l @@ -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) { diff --git a/util/makedefs.c b/util/makedefs.c index 7bb689bef..e4c6902ea 100644 --- a/util/makedefs.c +++ b/util/makedefs.c @@ -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