make a distinction between rock and unexplored area

This adds a pair of new glyphs: GLYPH_UNEXPLORED and GLYPH_NOTHING

GLYPH_UNEXPLORED is meant to be the glyph for areas of the map that
haven't been explored yet.

GLYPH_NOTHING is a glyph that represents that which cannot be seen,
for instance the dark part of a room when the dark_room option is
not set.  Since the symbol for stone can now be overridden to
a players choice, it no longer made sense using S_stone for the
dark areas of the room with dark_room off. This allows the same
intended result even if S_stone symbol is mapped to something visible.

GLYPH_UNEXPLORED is what areas of the map get initialized to now
instead of STONE.

This adds a pair of new symbols: S_unexplored and S_nothing.

S_nothing is meant to be left as an unseen character (space) in
order to achieve the intended effect on the display.

S_unexplored is the symbol that is mapped to GLYPH_UNEXPLORED, and
is a distinct symbol from S_stone, even if they are set to the same
character. They don't have to be set to the same character.

Hopefully there are minimal bugs, but it is a deviation from a
fairly long-standing approach so there could be some unintended
glitches that will need repair.
This commit is contained in:
nhmall
2020-02-08 00:48:03 -05:00
parent 84daf75981
commit d37fa196b2
19 changed files with 248 additions and 126 deletions

View File

@@ -4797,8 +4797,7 @@ s S_spider (arachnid or centipede)
@ S_ss3 (magic shield 3 of 4)
* S_ss4 (magic shield 4 of 4)
\(ha S_statue_trap (statue trap)
\ S_stone (solid rock or unexplored terrain
\ \ \ or dark part of a room)
\ S_stone (solid rock)
] S_strange_obj (strange object)
\- S_sw_bc (swallow bottom center)
\\ S_sw_bl (swallow bottom left)
@@ -4822,6 +4821,7 @@ T S_troll (troll)
| S_trwall (wall)
\- S_tuwall (wall)
U S_umber (umber hulk)
\ S_unexplored (unexplored terrain)
u S_unicorn (unicorn or horse)
< S_upladder (ladder up)
< S_upstair (staircase up)

View File

@@ -5222,8 +5222,7 @@ Default & Symbol Name & Description\\
\verb+@+ & S\verb+_+ss3 & (magic shield 3 of 4)\\
\verb@*@ & S\verb+_+ss4 & (magic shield 4 of 4)\\
\verb@^@ & S\verb+_+statue\verb+_+trap & (statue trap)\\
\verb@ @ & S\verb+_+stone & (solid rock or unexplored terrain\\
& & \,or dark part of a room)\\
\verb@ @ & S\verb+_+stone & (solid rock)\\
\verb@]@ & S\verb+_+strange\verb+_+obj & (strange object)\\
\verb@-@ & S\verb+_+sw\verb+_+bc & (swallow bottom center)\\
\verb@\@ & S\verb+_+sw\verb+_+bl & (swallow bottom left)\\
@@ -5247,6 +5246,7 @@ Default & Symbol Name & Description\\
\verb@|@ & S\verb+_+trwall & (wall)\\
\verb@-@ & S\verb+_+tuwall & (wall)\\
\verb@U@ & S\verb+_+umber & (umber hulk)\\
\verb@ @ & S\verb+_+unexplored & (unexplored terrain)\\
\verb@u@ & S\verb+_+unicorn & (unicorn or horse)\\
\verb@<@ & S\verb+_+upladder & (ladder up)\\
\verb@<@ & S\verb+_+upstair & (staircase up)\\

View File

@@ -1199,6 +1199,7 @@ struct const_globals {
const struct obj zeroobj; /* used to zero out a struct obj */
const struct monst zeromonst; /* used to zero out a struct monst */
const anything zeroany; /* used to zero out union any */
const struct rm zerorm; /* used to zero out struct rm */
};
E const struct const_globals cg;

View File

@@ -275,6 +275,9 @@
*
* statue One for each monster. Count: NUMMONS
*
* unexplored One for unexplored areas of the map
* nothing Nothing but background
*
* The following are offsets used to convert to and from a glyph.
*/
#define NUM_ZAP 8 /* number of zap beam types */
@@ -292,10 +295,14 @@
#define GLYPH_SWALLOW_OFF ((NUM_ZAP << 2) + GLYPH_ZAP_OFF)
#define GLYPH_WARNING_OFF ((NUMMONS << 3) + GLYPH_SWALLOW_OFF)
#define GLYPH_STATUE_OFF (WARNCOUNT + GLYPH_WARNING_OFF)
#define MAX_GLYPH (NUMMONS + GLYPH_STATUE_OFF)
#define GLYPH_UNEXPLORED_OFF (NUMMONS + GLYPH_STATUE_OFF)
#define GLYPH_NOTHING_OFF (GLYPH_UNEXPLORED_OFF + 1)
#define MAX_GLYPH (GLYPH_NOTHING_OFF + 1)
#define NO_GLYPH MAX_GLYPH
#define GLYPH_INVISIBLE GLYPH_INVIS_OFF
#define GLYPH_UNEXPLORED GLYPH_UNEXPLORED_OFF
#define GLYPH_NOTHING GLYPH_NOTHING_OFF
#define warning_to_glyph(mwarnlev) ((mwarnlev) + GLYPH_WARNING_OFF)
#define mon_to_glyph(mon, rng) \
@@ -434,5 +441,7 @@
#define glyph_is_warning(glyph) \
((glyph) >= GLYPH_WARNING_OFF \
&& (glyph) < (GLYPH_WARNING_OFF + WARNCOUNT))
#define glyph_is_unexplored(glyph) ((glyph) == GLYPH_UNEXPLORED)
#define glyph_is_nothing(glyph) ((glyph) == GLYPH_NOTHING)
#endif /* DISPLAY_H */

View File

@@ -18,6 +18,7 @@
#define BOLT_LIM 8 /* from this distance ranged attacks will be made */
#define MAX_CARR_CAP 1000 /* so that boulders can be heavier */
#define DUMMY { 0 } /* array initializer, letting [1..N-1] default */
#define DEF_NOTHING ' ' /* default symbol for NOTHING and UNEXPLORED */
/* The UNDEFINED macros are used to initialize variables whose
initialized value is not relied upon.
@@ -93,6 +94,8 @@ enum dismount_types {
#define MG_BW_LAVA 0x0080 /* 'black & white lava': highlight lava if it
can't be distringuished from water by color */
#define MG_BW_ICE 0x0100 /* similar for ice vs floor */
#define MG_NOTHING 0x0200 /* char represents GLYPH_NOTHING */
#define MG_UNEXPL 0x0400 /* char represents GLYPH_UNEXPLORED */
/* sellobj_state() states */
#define SELL_NORMAL (0)

View File

@@ -264,11 +264,13 @@ struct symparse {
};
/* misc symbol definitions */
#define SYM_BOULDER 0
#define SYM_INVISIBLE 1
#define SYM_PET_OVERRIDE 2
#define SYM_HERO_OVERRIDE 3
#define MAXOTHER 4
#define SYM_NOTHING 0
#define SYM_UNEXPLORED 1
#define SYM_BOULDER 2
#define SYM_INVISIBLE 3
#define SYM_PET_OVERRIDE 4
#define SYM_HERO_OVERRIDE 5
#define MAXOTHER 6
/* linked list of symsets and their characteristics */
struct symsetentry {

View File

@@ -482,9 +482,7 @@ struct obj *corpse;
/* Clear all memory from the level. */
for (x = 1; x < COLNO; x++)
for (y = 0; y < ROWNO; y++) {
levl[x][y].seenv = 0;
levl[x][y].waslit = 0;
levl[x][y].glyph = cmap_to_glyph(S_stone);
levl[x][y] = cg.zerorm;
g.lastseentyp[x][y] = 0;
}

View File

@@ -699,6 +699,7 @@ const struct const_globals cg = {
DUMMY, /* zeroobj */
DUMMY, /* zeromonst */
DUMMY, /* zeroany */
{ GLYPH_UNEXPLORED, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
#define ZERO(x) memset(&x, 0, sizeof(x))

View File

@@ -169,9 +169,9 @@ int show;
if (!cansee(x, y) && !lev->waslit) {
/* Floor spaces are dark if unlit. Corridors are dark if unlit. */
if (lev->typ == ROOM && glyph == cmap_to_glyph(S_room))
glyph = cmap_to_glyph((flags.dark_room && iflags.use_color)
? (DARKROOMSYM)
: S_stone);
glyph = (flags.dark_room && iflags.use_color)
? cmap_to_glyph(DARKROOMSYM)
: GLYPH_NOTHING;
else if (lev->typ == CORR && glyph == cmap_to_glyph(S_litcorr))
glyph = cmap_to_glyph(S_corr);
}
@@ -1137,7 +1137,7 @@ int first;
for (y = lasty - 1; y <= lasty + 1; y++)
for (x = lastx - 1; x <= lastx + 1; x++)
if (isok(x, y))
show_glyph(x, y, cmap_to_glyph(S_stone));
show_glyph(x, y, GLYPH_UNEXPLORED);
}
swallower = monsndx(u.ustuck->data);
@@ -1211,7 +1211,7 @@ int mode;
for (y = lasty - 1; y <= lasty + 1; y++)
for (x = lastx - 1; x <= lastx + 1; x++)
if (isok(x, y))
show_glyph(x, y, cmap_to_glyph(S_stone));
show_glyph(x, y, GLYPH_UNEXPLORED);
}
/*
@@ -1222,7 +1222,7 @@ int mode;
for (y = u.uy - 1; y <= u.uy + 1; y++)
if (isok(x, y) && (is_pool_or_lava(x, y) || is_ice(x, y))) {
if (Blind && !(x == u.ux && y == u.uy))
show_glyph(x, y, cmap_to_glyph(S_stone));
show_glyph(x, y, GLYPH_UNEXPLORED);
else
newsym(x, y);
}
@@ -1411,8 +1411,7 @@ docrt()
for (x = 1; x < COLNO; x++) {
lev = &levl[x][0];
for (y = 0; y < ROWNO; y++, lev++)
if (lev->glyph != cmap_to_glyph(S_stone))
show_glyph(x, y, lev->glyph);
show_glyph(x, y, lev->glyph);
}
/* see what is to be seen */
@@ -1565,19 +1564,19 @@ int x, y, glyph;
* Reset the changed glyph borders so that none of the 3rd screen has
* changed.
*/
#define reset_glyph_bbox() \
{ \
int i; \
\
for (i = 0; i < ROWNO; i++) { \
#define reset_glyph_bbox() \
{ \
int i; \
\
for (i = 0; i < ROWNO; i++) { \
g.gbuf_start[i] = COLNO - 1; \
g.gbuf_stop[i] = 0; \
} \
} \
}
static const gbuf_entry nul_gbuf = { 0, cmap_to_glyph(S_stone) };
static const gbuf_entry nul_gbuf = { 0, GLYPH_UNEXPLORED };
/*
* Turn the 3rd screen into stone.
* Turn the 3rd screen into UNEXPLORED.
*/
void
clear_glyph_buffer()
@@ -1595,7 +1594,7 @@ clear_glyph_buffer()
}
/*
* Assumes that the indicated positions are filled with S_stone glyphs.
* Assumes that the indicated positions are filled with GLYPH_UNEXPLORED glyphs.
*/
void
row_refresh(start, stop, y)
@@ -1604,13 +1603,14 @@ int start, stop, y;
register int x;
for (x = start; x <= stop; x++)
if (g.gbuf[y][x].glyph != cmap_to_glyph(S_stone))
if (g.gbuf[y][x].glyph != GLYPH_UNEXPLORED)
print_glyph(WIN_MAP, x, y, g.gbuf[y][x].glyph, get_bk_glyph(x, y));
}
void
cls()
{
int y;
static boolean in_cls = 0;
if (in_cls)
@@ -1621,6 +1621,10 @@ cls()
clear_nhwindow(WIN_MAP); /* clear physical screen */
clear_glyph_buffer(); /* this is sort of an extra effort, but OK */
for (y = 0; y < ROWNO; y++) {
g.gbuf_start[y] = 0;
g.gbuf_stop[y] = COLNO - 1;
}
in_cls = FALSE;
}
@@ -1890,11 +1894,11 @@ static int
get_bk_glyph(x, y)
xchar x, y;
{
int idx, bkglyph = NO_GLYPH;
int idx, bkglyph = GLYPH_UNEXPLORED;
struct rm *lev = &levl[x][y];
if (iflags.use_background_glyph && lev->seenv != 0
&& g.gbuf[y][x].glyph != cmap_to_glyph(S_stone)) {
&& (g.gbuf[y][x].glyph != GLYPH_UNEXPLORED)) {
switch (lev->typ) {
case SCORR:
case STONE:

View File

@@ -241,7 +241,7 @@ const void *b;
#define IS_UNEXPLORED_LOC(x,y) \
(isok((x), (y)) \
&& glyph_is_cmap(levl[(x)][(y)].glyph) \
&& glyph_to_cmap(levl[(x)][(y)].glyph) == S_stone \
&& levl[(x)][(y)].glyph == GLYPH_UNEXPLORED \
&& !levl[(x)][(y)].seenv)
#define GLOC_SAME_AREA(x,y) \

View File

@@ -130,7 +130,7 @@ const struct symdef def_warnsyms[WARNCOUNT] = {
* Default screen symbols with explanations and colors.
*/
const struct symdef defsyms[MAXPCHARS] = {
/* 0*/ { ' ', "dark part of a room", C(NO_COLOR) }, /* stone */
/* 0*/ { ' ', "stone", C(NO_COLOR) }, /* stone */
{ '|', "wall", C(CLR_GRAY) }, /* vwall */
{ '-', "wall", C(CLR_GRAY) }, /* hwall */
{ '-', "wall", C(CLR_GRAY) }, /* tlcorn */
@@ -405,12 +405,22 @@ int idx, which_set;
: g.primary_syms[oidx];
if (!sym) {
switch(idx) {
case SYM_NOTHING:
case SYM_UNEXPLORED:
sym = DEF_NOTHING;
break;
case SYM_BOULDER:
sym = def_oc_syms[ROCK_CLASS].sym;
break;
case SYM_INVISIBLE:
sym = DEF_INVISIBLE;
break;
#if 0
/* these intentionally have no defaults */
case SYM_PET_OVERRIDE:
case SYM_HERO_OVERRIDE:
break;
#endif
}
}
return sym;
@@ -805,6 +815,8 @@ const struct symparse loadsyms[] = {
{ SYM_MON, S_LIZARD + SYM_OFF_M, "S_lizard" },
{ SYM_MON, S_WORM_TAIL + SYM_OFF_M, "S_worm_tail" },
{ SYM_MON, S_MIMIC_DEF + SYM_OFF_M, "S_mimic_def" },
{ SYM_OTH, SYM_NOTHING + SYM_OFF_X, "S_nothing" },
{ SYM_OTH, SYM_UNEXPLORED + SYM_OFF_X, "S_unexplored" },
{ SYM_OTH, SYM_BOULDER + SYM_OFF_X, "S_boulder" },
{ SYM_OTH, SYM_INVISIBLE + SYM_OFF_X, "S_invisible" },
{ SYM_OTH, SYM_PET_OVERRIDE + SYM_OFF_X, "S_pet_override" },

View File

@@ -102,7 +102,15 @@ unsigned mgflags;
* Warning: For speed, this makes an assumption on the order of
* offsets. The order is set in display.h.
*/
if ((offset = (glyph - GLYPH_STATUE_OFF)) >= 0) { /* a statue */
if ((offset = (glyph - GLYPH_NOTHING_OFF)) >= 0) {
idx = SYM_NOTHING + SYM_OFF_X;
color = NO_COLOR;
special |= MG_NOTHING;
} else if ((offset = (glyph - GLYPH_UNEXPLORED_OFF)) >= 0) {
idx = SYM_UNEXPLORED + SYM_OFF_X;
color = NO_COLOR;
special |= MG_UNEXPL;
} else if ((offset = (glyph - GLYPH_STATUE_OFF)) >= 0) { /* a statue */
idx = mons[offset].mlet + SYM_OFF_M;
if (has_rogue_color)
color = CLR_RED;

View File

@@ -584,8 +584,6 @@ makevtele()
void
clear_level_structures()
{
static struct rm zerorm = { cmap_to_glyph(S_stone),
0, 0, 0, 0, 0, 0, 0, 0, 0 };
register int x, y;
register struct rm *lev;
@@ -596,7 +594,7 @@ clear_level_structures()
for (x = 0; x < COLNO; x++) {
lev = &levl[x][0];
for (y = 0; y < ROWNO; y++) {
*lev++ = zerorm;
*lev++ = cg.zerorm;
/*
* These used to be '#if MICROPORT_BUG',
* with use of memset(0) for '#if !MICROPORT_BUG' below,

View File

@@ -587,12 +587,12 @@ reglyph_darkroom()
|| Is_rogue_level(&u.uz)) {
if (lev->glyph == cmap_to_glyph(S_darkroom))
lev->glyph = lev->waslit ? cmap_to_glyph(S_room)
: cmap_to_glyph(S_stone);
: GLYPH_NOTHING;
} else {
if (lev->glyph == cmap_to_glyph(S_room) && lev->seenv
&& lev->waslit && !cansee(x, y))
lev->glyph = cmap_to_glyph(S_darkroom);
else if (lev->glyph == cmap_to_glyph(S_stone)
else if (lev->glyph == GLYPH_NOTHING
&& lev->typ == ROOM && lev->seenv && !cansee(x, y))
lev->glyph = cmap_to_glyph(S_darkroom);
}
@@ -600,7 +600,7 @@ reglyph_darkroom()
if (flags.dark_room && iflags.use_color)
g.showsyms[S_darkroom] = g.showsyms[S_room];
else
g.showsyms[S_darkroom] = g.showsyms[S_stone];
g.showsyms[S_darkroom] = g.showsyms[SYM_NOTHING + SYM_OFF_X];
}
/* check whether a user-supplied option string is a proper leading

View File

@@ -478,6 +478,16 @@ char *buf, *monbuf;
int warnindx = glyph_to_warning(glyph);
Strcpy(buf, def_warnsyms[warnindx].explanation);
} else if (glyph_is_nothing(glyph)) {
Strcpy(buf, "dark part of a room");
} else if (glyph_is_unexplored(glyph)) {
if (Underwater && !Is_waterlevel(&u.uz)) {
/* "unknown" == previously mapped but not visible when
submerged; better terminology appreciated... */
Strcpy(buf, (distu(x, y) <= 2) ? "land" : "unknown");
} else {
Strcpy(buf, "unexplored area");
}
} else if (!glyph_is_cmap(glyph)) {
Strcpy(buf, "unexplored area");
} else {
@@ -843,7 +853,7 @@ struct permonst **for_supplement;
unreconnoitered[] = "unreconnoitered";
static char look_buf[BUFSZ];
char prefix[BUFSZ], gobbledygook[33];
int i, alt_i, j, glyph = NO_GLYPH,
int i, j, glyph = NO_GLYPH,
skipped_venom = 0, found = 0; /* count of matching syms found */
boolean hit_trap, need_to_look = FALSE,
submerged = (Underwater && !Is_waterlevel(&u.uz)),
@@ -979,24 +989,33 @@ struct permonst **for_supplement;
found += append_str(out_str, an(unseen_explain));
}
}
/* Now check for graphics symbols */
alt_i = (sym == (looked ? g.showsyms[0] : defsyms[0].sym)) ? 0 : (2 + 1);
for (hit_trap = FALSE, i = 0; i < MAXPCHARS; i++) {
/* when sym is the default background character, we process
i == 0 three times: unexplored, stone, dark part of a room */
if (alt_i < 2) {
x_str = !alt_i++ ? "unexplored" : submerged ? "unknown" : "stone";
i = 0; /* for second iteration, undo loop increment */
/* alt_i is now 1 or 2 */
if ((glyph && glyph_is_nothing(glyph))
|| (looked && sym == g.showsyms[SYM_NOTHING + SYM_OFF_X])) {
x_str = "the dark part of a room";
if (!found) {
Sprintf(out_str, "%s%s", prefix, x_str);
*firstmatch = x_str;
found++;
} else {
if (alt_i++ == 2)
i = 0; /* undo loop increment */
x_str = defsyms[i].explanation;
if (submerged && !strcmp(x_str, defsyms[0].explanation))
x_str = "land"; /* replace "dark part of a room" */
/* alt_i is now 3 or more and no longer of interest */
found += append_str(out_str, x_str);
}
}
if ((glyph && glyph_is_unexplored(glyph))
|| (looked && sym == g.showsyms[SYM_UNEXPLORED + SYM_OFF_X])) {
x_str = "unexplored";
if (submerged)
x_str = "land"; /* replace "unexplored" */
if (!found) {
Sprintf(out_str, "%s%s", prefix, x_str);
*firstmatch = x_str;
found++;
} else {
found += append_str(out_str, x_str);
}
}
/* Now check for graphics symbols */
for (hit_trap = FALSE, i = 0; i < MAXPCHARS; i++) {
x_str = defsyms[i].explanation;
if (sym == (looked ? g.showsyms[i] : defsyms[i].sym) && *x_str) {
/* POOL, MOAT, and WATER are "water", LAVAPOOL is "molten lava" */
boolean water_or_lava = (!strcmp(x_str, "water")
@@ -1005,11 +1024,15 @@ struct permonst **for_supplement;
"a molten lava", "a floor of a room", "a dark part of a room";
article==2 => "the", 1 => "an", 0 => (none) */
int article = strstri(x_str, " of a room") ? 2
: !(alt_i <= 2
: !(i == S_stone
|| strcmp(x_str, "air") == 0
|| strcmp(x_str, "land") == 0
|| water_or_lava);
/* check if dark part of a room was already included above */
if (i == S_darkroom && glyph && glyph_is_nothing(glyph))
continue;
/* substitute for "water" and "molten lava" when hallucinating */
if (water_or_lava && hallucinate) {
if (*gobbledygook)

View File

@@ -804,9 +804,7 @@ int howmuch;
for (zy = 0; zy < ROWNO; zy++)
if (howmuch & ALL_MAP || rn2(7)) {
/* Zonk all memory of this location. */
levl[zx][zy].seenv = 0;
levl[zx][zy].waslit = 0;
levl[zx][zy].glyph = cmap_to_glyph(S_stone);
levl[zx][zy] = cg.zerorm;
g.lastseentyp[zx][zy] = STONE;
}
/* forget overview data for this level */

View File

@@ -579,8 +579,7 @@ xchar lev;
for (x = 0; x < COLNO; x++) {
g.level.monsters[x][y] = 0;
g.level.objects[x][y] = 0;
levl[x][y].seenv = 0;
levl[x][y].glyph = cmap_to_glyph(S_stone);
levl[x][y] = cg.zerorm;
}
fmon = 0;
g.ftrap = 0;

View File

@@ -27,24 +27,24 @@ Y = (149, 149, 149)
Z = (195, 195, 195)
0 = (100, 100, 100)
1 = (72, 108, 108)
# tile 0 (dark part of a room)
# tile 0 (stone)
{
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
PPPPPPPPPPPPPPPP
PAPPPPPPPPPPPPPP
PPAAPPPPPPPPPPPA
PPPPPPPPPPPPPPAP
PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
}
# tile 1 (vertical wall)
{
@@ -3599,7 +3599,45 @@ Z = (195, 195, 195)
.......AA.......
................
}
# tile 188 (sub mine walls 0)
# tile 191 (unexplored)
{
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
}
# tile 192 (nothing)
{
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
}
# tile 189 (sub mine walls 0)
{
AJJKKKACJAAJJJAA
AJKKKACLJJAJJJJA
@@ -3618,7 +3656,7 @@ Z = (195, 195, 195)
AAJACKCKKJJJAJAA
AAJCKKJAAAJJJJJA
}
# tile 189 (sub mine walls 1)
# tile 190 (sub mine walls 1)
{
AJAAAAAAJJAAAJAA
JJJAAAJJJJJAAAAJ
@@ -3637,7 +3675,7 @@ Z = (195, 195, 195)
JJJJJJJJJJJJJJJJ
AAAAAAAAAAAAAAAA
}
# tile 190 (sub mine walls 2)
# tile 191 (sub mine walls 2)
{
AAAAAAKCCKKJAAAA
AAAAKKCLCJKJJAAA
@@ -3656,7 +3694,7 @@ Z = (195, 195, 195)
AAJACKCKKJJJAJAA
AAJCKKJAAAJJJJJA
}
# tile 191 (sub mine walls 3)
# tile 192 (sub mine walls 3)
{
AAAAAAKCCKKJAAAA
AAAAKKCLCJKJJAAA
@@ -3675,7 +3713,7 @@ Z = (195, 195, 195)
AAJACKCKKJJJAJAA
AAJCKKJAAAJJJJJA
}
# tile 192 (sub mine walls 4)
# tile 193 (sub mine walls 4)
{
AKKKAAKKKKAAJJJA
AKKAAKCCCJJJAAJA
@@ -3694,7 +3732,7 @@ Z = (195, 195, 195)
AJJJJJJJJJJJJJJJ
AAAAAAAAAAAAAAAA
}
# tile 193 (sub mine walls 5)
# tile 194 (sub mine walls 5)
{
AKKAAAKKAAAAJJJA
AKAAKKLCKAAAAAJA
@@ -3713,7 +3751,7 @@ Z = (195, 195, 195)
JJJJJJJJJJJJJJJA
AAAAAAAAAAAAAAAA
}
# tile 194 (sub mine walls 6)
# tile 195 (sub mine walls 6)
{
AAAAAAKCCKKJAAAA
AAAAKCCLCJKJJAAA
@@ -3732,7 +3770,7 @@ Z = (195, 195, 195)
AAJACKCKKJJJAJAA
AAJCKKJAAAJJJJJA
}
# tile 195 (sub mine walls 7)
# tile 196 (sub mine walls 7)
{
AKKAAAKKKKAAJJJA
AKAAKKLCCJJJAAJA
@@ -3751,7 +3789,7 @@ Z = (195, 195, 195)
JJJJJJJJJJJJJJJJ
AAAAAAAAAAAAAAAA
}
# tile 196 (sub mine walls 8)
# tile 197 (sub mine walls 8)
{
AAAAAAKCCKKJAAAA
AAAAKCCLCJKJJAAA
@@ -3770,7 +3808,7 @@ Z = (195, 195, 195)
AAJACKCKKJJJAJAA
AAJCKKJAAAJJJJJA
}
# tile 197 (sub mine walls 9)
# tile 198 (sub mine walls 9)
{
AKKAACKCCKKJAJJA
AKACKKKLLJKJJAJA
@@ -3789,7 +3827,7 @@ Z = (195, 195, 195)
AAJACKCKKJJJAJAA
AAJCKKJAAAJJJJJA
}
# tile 198 (sub mine walls 10)
# tile 199 (sub mine walls 10)
{
AKKAACKCCKKJAJJA
AKACKKCLCJKJJAJA
@@ -3808,7 +3846,7 @@ Z = (195, 195, 195)
AAJACKCKKJJJAJAA
AAJCKKJAAAJJJJJA
}
# tile 199 (sub gehennom walls 0)
# tile 200 (sub gehennom walls 0)
{
ALLDAJ11111JLLDA
ADDDAJ1J11JJDDDA
@@ -3827,7 +3865,7 @@ Z = (195, 195, 195)
AJJJAJJ1111JJJJA
AD11AJJ1111JD1JA
}
# tile 200 (sub gehennom walls 1)
# tile 201 (sub gehennom walls 1)
{
AAALDDAAAAALDDAA
DDDLDDAJDDDLDDAJ
@@ -3846,7 +3884,7 @@ Z = (195, 195, 195)
JJJJJJJJJJJJJJJJ
AAAAAAAAAAAAAAAA
}
# tile 201 (sub gehennom walls 2)
# tile 202 (sub gehennom walls 2)
{
AAALLLLDDDDDDAAA
LLLLAAJJ1111DJJJ
@@ -3865,7 +3903,7 @@ Z = (195, 195, 195)
AJJJAJJ1111JJJJA
AD11AJJ1111JD1JA
}
# tile 202 (sub gehennom walls 3)
# tile 203 (sub gehennom walls 3)
{
AAALLLLDDDDDDAAA
LLLLAAJJ1111DJJJ
@@ -3884,7 +3922,7 @@ Z = (195, 195, 195)
AJJJAJJ1111JJJJA
AD11AJJ1111JD1JA
}
# tile 203 (sub gehennom walls 4)
# tile 204 (sub gehennom walls 4)
{
AAALLLLDDDDDDAAA
LLLLAAJJ1111DJJJ
@@ -3903,7 +3941,7 @@ Z = (195, 195, 195)
JJJJJJJJJJJJJJJJ
AAAAAAAAAAAAAAAA
}
# tile 204 (sub gehennom walls 5)
# tile 205 (sub gehennom walls 5)
{
AAALLLLDDDDDDAAA
LLLLAAJJ1111DJJJ
@@ -3922,7 +3960,7 @@ Z = (195, 195, 195)
JJJJJJJJJJJJJJJJ
AAAAAAAAAAAAAAAA
}
# tile 205 (sub gehennom walls 6)
# tile 206 (sub gehennom walls 6)
{
AAALLLLDDDDDDAAA
LLLLAAJJ1111DJJJ
@@ -3941,7 +3979,7 @@ Z = (195, 195, 195)
AJJJAJJ1111JJJJA
AD11AJJ1111JD1JA
}
# tile 206 (sub gehennom walls 7)
# tile 207 (sub gehennom walls 7)
{
AAALLLLDDDDDDAAA
LLLLAAJJ1111DJJJ
@@ -3960,7 +3998,7 @@ Z = (195, 195, 195)
JJJJJJJJJJJJJJJJ
AAAAAAAAAAAAAAAA
}
# tile 207 (sub gehennom walls 8)
# tile 208 (sub gehennom walls 8)
{
AAALLLLDDDDDDAAA
LLLLAAJJ1111DJJJ
@@ -3979,7 +4017,7 @@ Z = (195, 195, 195)
AJJJAJJ1111JJJJA
AD11AJJ1111JD1JA
}
# tile 208 (sub gehennom walls 9)
# tile 209 (sub gehennom walls 9)
{
AAALLLLDDDDDDAAA
LLLLAAJJ1111DJJJ
@@ -3998,7 +4036,7 @@ Z = (195, 195, 195)
AJJJAJJ1111JJJJA
AD11AJJ1111JD1JA
}
# tile 209 (sub gehennom walls 10)
# tile 210 (sub gehennom walls 10)
{
AAALLLLDDDDDDAAA
LLLLAAJJ1111DJJJ
@@ -4017,7 +4055,7 @@ Z = (195, 195, 195)
AJJJAJJ1111JJJJA
AD11AJJ1111JD1JA
}
# tile 210 (sub knox walls 0)
# tile 211 (sub knox walls 0)
{
AJJJAAACJAAAJJJA
AJJJAACLJJAAJJJA
@@ -4036,7 +4074,7 @@ Z = (195, 195, 195)
AAJAAACKKJAAAJAA
ACJJAAAAAAAACJJA
}
# tile 211 (sub knox walls 1)
# tile 212 (sub knox walls 1)
{
AJAAAJAAAJAAAJAA
JJJAAAJAJJJAAAJA
@@ -4055,7 +4093,7 @@ Z = (195, 195, 195)
KJJACJJAKJJACJJA
AAAAAAAAAAAAAAAA
}
# tile 212 (sub knox walls 2)
# tile 213 (sub knox walls 2)
{
AAAAAAKCJKAAAAAA
AAAAKKCLKJKKAAAA
@@ -4074,7 +4112,7 @@ Z = (195, 195, 195)
AAJAAACKKJAAAJAA
ACJJAAAAAAAACJJA
}
# tile 213 (sub knox walls 3)
# tile 214 (sub knox walls 3)
{
AAAAAAKCJKAAAAAA
AAAAKKCLKJKKAAAA
@@ -4093,7 +4131,7 @@ Z = (195, 195, 195)
AAJAAACKKJAAAJAA
ACJJAAAAAAAACJJA
}
# tile 214 (sub knox walls 4)
# tile 215 (sub knox walls 4)
{
AAAAAAKCJKAAAAAA
AAAAKKCLKJKKAAAA
@@ -4112,7 +4150,7 @@ Z = (195, 195, 195)
KJJACJJAKJJACJJA
AAAAAAAAAAAAAAAA
}
# tile 215 (sub knox walls 5)
# tile 216 (sub knox walls 5)
{
AAAAAAKCJKAAAAAA
AAAAKKCLKJKKAAAA
@@ -4131,7 +4169,7 @@ Z = (195, 195, 195)
KJJACJJAKJJACJJA
AAAAAAAAAAAAAAAA
}
# tile 216 (sub knox walls 6)
# tile 217 (sub knox walls 6)
{
AAAAAAKCJKAAAAAA
AAAAKKCLKJKKAAAA
@@ -4150,7 +4188,7 @@ Z = (195, 195, 195)
AAJAAACKKJAAAJAA
ACJJAAAAAAAACJJA
}
# tile 217 (sub knox walls 7)
# tile 218 (sub knox walls 7)
{
AAAAAAKCJKAAAAAA
AAAAKKCLKJKKAAAA
@@ -4169,7 +4207,7 @@ Z = (195, 195, 195)
KJJACJJAKJJACJJA
AAAAAAAAAAAAAAAA
}
# tile 218 (sub knox walls 8)
# tile 219 (sub knox walls 8)
{
AAAAAAKCJKAAAAAA
AAAAKKCLKJKKAAAA
@@ -4188,7 +4226,7 @@ Z = (195, 195, 195)
AAJAAACKKJAAAJAA
ACJJAAAAAAAACJJA
}
# tile 219 (sub knox walls 9)
# tile 220 (sub knox walls 9)
{
AAAAAAKCJKAAAAAA
AAAAKKCLKJKKAAAA
@@ -4207,7 +4245,7 @@ Z = (195, 195, 195)
AAJAAACKKJAAAJAA
ACJJAAAAAAAACJJA
}
# tile 220 (sub knox walls 10)
# tile 221 (sub knox walls 10)
{
AAAAAAKCJKAAAAAA
AAAAKKCLKJKKAAAA
@@ -4226,7 +4264,7 @@ Z = (195, 195, 195)
AAJAAACKKJAAAJAA
ACJJAAAAAAAACJJA
}
# tile 221 (sub sokoban walls 0)
# tile 222 (sub sokoban walls 0)
{
ANNBA1EEEEE1NNBA
ABBBA1E1EE11BBBA
@@ -4245,7 +4283,7 @@ Z = (195, 195, 195)
A111A11EEEE1111A
ABEEA11EEEE1BE1A
}
# tile 222 (sub sokoban walls 1)
# tile 223 (sub sokoban walls 1)
{
AAANBBAAAAANBBAA
BBBNBBA1BBBNBBA1
@@ -4264,7 +4302,7 @@ Z = (195, 195, 195)
1111111111111111
AAAAAAAAAAAAAAAA
}
# tile 223 (sub sokoban walls 2)
# tile 224 (sub sokoban walls 2)
{
AAANNNNBBBBBBAAA
NNNNAA11EEEEB111
@@ -4283,7 +4321,7 @@ Z = (195, 195, 195)
A111A11EEEE1111A
ABEEA11EEEE1BE1A
}
# tile 224 (sub sokoban walls 3)
# tile 225 (sub sokoban walls 3)
{
AAANNNNBBBBBBAAA
NNNNAA11EEEEB111
@@ -4302,7 +4340,7 @@ Z = (195, 195, 195)
A111A11EEEE1111A
ABEEA11EEEE1BE1A
}
# tile 225 (sub sokoban walls 4)
# tile 226 (sub sokoban walls 4)
{
AAANNNNBBBBBBAAA
NNNNAA11EEEEB111
@@ -4321,7 +4359,7 @@ Z = (195, 195, 195)
1111111111111111
AAAAAAAAAAAAAAAA
}
# tile 226 (sub sokoban walls 5)
# tile 227 (sub sokoban walls 5)
{
AAANNNNBBBBBBAAA
NNNNAA11EEEEB111
@@ -4340,7 +4378,7 @@ Z = (195, 195, 195)
1111111111111111
AAAAAAAAAAAAAAAA
}
# tile 227 (sub sokoban walls 6)
# tile 228 (sub sokoban walls 6)
{
AAANNNNBBBBBBAAA
NNNNAA11EEEEB111
@@ -4359,7 +4397,7 @@ Z = (195, 195, 195)
A111A11EEEE1111A
ABEEA11EEEE1BE1A
}
# tile 228 (sub sokoban walls 7)
# tile 229 (sub sokoban walls 7)
{
AAANNNNBBBBBBAAA
NNNNAA11EEEEB111
@@ -4378,7 +4416,7 @@ Z = (195, 195, 195)
1111111111111111
AAAAAAAAAAAAAAAA
}
# tile 229 (sub sokoban walls 8)
# tile 230 (sub sokoban walls 8)
{
AAANNNNBBBBBBAAA
NNNNAA11EEEEB111
@@ -4397,7 +4435,7 @@ Z = (195, 195, 195)
A111A11EEEE1111A
ABEEA11EEEE1BE1A
}
# tile 230 (sub sokoban walls 9)
# tile 231 (sub sokoban walls 9)
{
AAANNNNBBBBBBAAA
NNNNAA11EEEEB111
@@ -4416,7 +4454,7 @@ Z = (195, 195, 195)
A111A11EEEE1111A
ABEEA11EEEE1BE1A
}
# tile 231 (sub sokoban walls 10)
# tile 232 (sub sokoban walls 10)
{
AAANNNNBBBBBBAAA
NNNNAA11EEEEB111

View File

@@ -207,6 +207,24 @@ int set, entry;
}
tilenum += WARNCOUNT;
i = entry - tilenum;
if (i < 1) {
if (set == OTH_GLYPH) {
Sprintf(buf, "unexplored");
return buf;
}
}
tilenum += 1;
i = entry - tilenum;
if (i < 1) {
if (set == OTH_GLYPH) {
Sprintf(buf, "nothing");
return buf;
}
}
tilenum += 1;
for (i = 0; i < SIZE(substitutes); i++) {
j = entry - tilenum;
if (j <= substitutes[i].last_glyph - substitutes[i].first_glyph) {
@@ -361,6 +379,16 @@ init_tilemap()
tilenum++;
}
for (i = 0; i < 1; i++) {
tilemap[GLYPH_UNEXPLORED_OFF + i] = tilenum;
tilenum++;
}
for (i = 0; i < 1; i++) {
tilemap[GLYPH_NOTHING + i] = tilenum;
tilenum++;
}
#ifndef STATUES_LOOK_LIKE_MONSTERS
/* statue patch: statues still use the same glyph as in vanilla */