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.
This commit is contained in:
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
|
||||
68
src/mkmaze.c
68
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;
|
||||
|
||||
18
src/sp_lev.c
18
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. */
|
||||
|
||||
Reference in New Issue
Block a user