cmap_walls_to_glyph() and a couple of others

I wasted a bunch of time yesterday trying to figure out why a maze
level in Gehennom wasn't being shown with orange walls and ended up
reformatting a few glyph handling macros while hunting for the problem.
It turned out that the wall color choosing was working as intended.
I was looking at a maze bordered by solid stone (pale blue with Qt's
tiles, unlike tty's blank space) rather than by walls.

Anyway, a couple of the macros have had a little bit of common code
factored out rather than just be reformatted so I'm putting this in.

[For future, maybe stone should be given branch-specific coloring
similar to walls?]
This commit is contained in:
PatR
2022-05-16 09:46:36 -07:00
parent b562c8ac89
commit 93b972c158

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 display.h $NHDT-Date: 1652391718 2022/05/12 21:41:58 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.70 $ */
/* NetHack 3.7 display.h $NHDT-Date: 1652719570 2022/05/16 16:46:10 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.71 $ */
/* Copyright (c) Dean Luick, with acknowledgements to Kevin Darcy */
/* and Dave Cohrs, 1990. */
/* NetHack may be freely redistributed. See license for details. */
@@ -503,13 +503,12 @@ enum glyph_offsets {
GLYPH_CMAP_STONE_OFF = (GLYPH_CMAP_OFF),
GLYPH_CMAP_MAIN_OFF = (1 + GLYPH_CMAP_STONE_OFF),
GLYPH_CMAP_MINES_OFF = (((S_trwall - S_vwall) + 1) + GLYPH_CMAP_MAIN_OFF),
GLYPH_CMAP_GEH_OFF = (((S_trwall - S_vwall) + 1) + GLYPH_CMAP_MINES_OFF),
GLYPH_CMAP_KNOX_OFF = (((S_trwall - S_vwall) + 1) + GLYPH_CMAP_GEH_OFF),
GLYPH_CMAP_SOKO_OFF = (((S_trwall - S_vwall) + 1) + GLYPH_CMAP_KNOX_OFF),
GLYPH_CMAP_A_OFF = (((S_trwall - S_vwall) + 1) + GLYPH_CMAP_SOKO_OFF),
GLYPH_CMAP_GEH_OFF = (((S_trwall - S_vwall) + 1) + GLYPH_CMAP_MINES_OFF),
GLYPH_CMAP_KNOX_OFF = (((S_trwall - S_vwall) + 1) + GLYPH_CMAP_GEH_OFF),
GLYPH_CMAP_SOKO_OFF = (((S_trwall - S_vwall) + 1) + GLYPH_CMAP_KNOX_OFF),
GLYPH_CMAP_A_OFF = (((S_trwall - S_vwall) + 1) + GLYPH_CMAP_SOKO_OFF),
GLYPH_ALTAR_OFF = (((S_brdnladder - S_ndoor) + 1) + GLYPH_CMAP_A_OFF),
GLYPH_CMAP_B_OFF = (5 + GLYPH_ALTAR_OFF),
/* (46 + (26 - 1)- 32 ) == 39 */
GLYPH_ZAP_OFF = ((S_arrow_trap + MAXTCHARS - S_grave)
+ GLYPH_CMAP_B_OFF),
GLYPH_CMAP_C_OFF = ((NUM_ZAP << 2) + GLYPH_ZAP_OFF),
@@ -573,27 +572,23 @@ enum glyph_offsets {
((((cmap_idx) - S_vbeam) + 1) + GLYPH_ZAP_OFF)
*/
/* EXPL_FIERY is the default explosion type */
#define explosion_to_glyph(expltyp, idx) \
((expltyp == EXPL_FROSTY) ? \
(((idx) - S_expl_tl) + GLYPH_EXPLODE_FROSTY_OFF) \
: (expltyp == EXPL_FIERY) ? \
(((idx) - S_expl_tl) + GLYPH_EXPLODE_FIERY_OFF) \
: (expltyp == EXPL_MAGICAL) ? \
(((idx) - S_expl_tl) + GLYPH_EXPLODE_MAGICAL_OFF) \
: (expltyp == EXPL_WET) ? \
(((idx) - S_expl_tl) + GLYPH_EXPLODE_WET_OFF) \
: (expltyp == EXPL_MUDDY) ? \
(((idx) - S_expl_tl) + GLYPH_EXPLODE_MUDDY_OFF) \
: (expltyp == EXPL_NOXIOUS) ? \
(((idx) - S_expl_tl) + GLYPH_EXPLODE_NOXIOUS_OFF) \
: (((idx) - S_expl_tl) + GLYPH_EXPLODE_FIERY_OFF))
((idx) - S_expl_tl \
+ (((expltyp) == EXPL_FROSTY) ? GLYPH_EXPLODE_FROSTY_OFF \
: ((expltyp) == EXPL_MAGICAL) ? GLYPH_EXPLODE_MAGICAL_OFF \
: ((expltyp) == EXPL_WET) ? GLYPH_EXPLODE_WET_OFF \
: ((expltyp) == EXPL_MUDDY) ? GLYPH_EXPLODE_MUDDY_OFF \
: ((expltyp) == EXPL_NOXIOUS) ? GLYPH_EXPLODE_NOXIOUS_OFF \
: GLYPH_EXPLODE_FIERY_OFF))
#define cmap_walls_to_glyph(cmap_idx) \
( In_mines(&u.uz) ? (((cmap_idx) - S_vwall) + GLYPH_CMAP_MINES_OFF) \
: In_hell(&u.uz) ? (((cmap_idx) - S_vwall) + GLYPH_CMAP_GEH_OFF) \
: Is_knox(&u.uz) ? (((cmap_idx) - S_vwall) + GLYPH_CMAP_KNOX_OFF) \
: In_sokoban(&u.uz) ? (((cmap_idx) - S_vwall) + GLYPH_CMAP_SOKO_OFF) \
: (((cmap_idx) - S_vwall) + GLYPH_CMAP_MAIN_OFF))
((cmap_idx) - S_vwall \
+ (In_mines(&u.uz) ? GLYPH_CMAP_MINES_OFF \
: In_hell(&u.uz) ? GLYPH_CMAP_GEH_OFF \
: Is_knox(&u.uz) ? GLYPH_CMAP_KNOX_OFF \
: In_sokoban(&u.uz) ? GLYPH_CMAP_SOKO_OFF \
: GLYPH_CMAP_MAIN_OFF))
#define cmap_a_to_glyph(cmap_idx) \
(((cmap_idx) - S_ndoor) + GLYPH_CMAP_A_OFF)
@@ -605,14 +600,13 @@ enum glyph_offsets {
(((cmap_idx) - S_digbeam) + GLYPH_CMAP_C_OFF)
#define cmap_to_glyph(cmap_idx) \
( ((cmap_idx) == S_stone) ? GLYPH_CMAP_STONE_OFF \
: ((cmap_idx) <= S_trwall) ? cmap_walls_to_glyph(cmap_idx) \
: ((cmap_idx) < S_altar) ? cmap_a_to_glyph(cmap_idx) \
: ((cmap_idx) == S_altar) ? altar_to_glyph(AM_NEUTRAL) \
: ((cmap_idx) < S_arrow_trap + MAXTCHARS) \
? cmap_b_to_glyph(cmap_idx) \
: ((cmap_idx) <= S_goodpos) ? cmap_c_to_glyph(cmap_idx) \
: NO_GLYPH)
( ((cmap_idx) == S_stone) ? GLYPH_CMAP_STONE_OFF \
: ((cmap_idx) <= S_trwall) ? cmap_walls_to_glyph(cmap_idx) \
: ((cmap_idx) < S_altar) ? cmap_a_to_glyph(cmap_idx) \
: ((cmap_idx) == S_altar) ? altar_to_glyph(AM_NEUTRAL) \
: ((cmap_idx) < S_arrow_trap + MAXTCHARS) ? cmap_b_to_glyph(cmap_idx) \
: ((cmap_idx) <= S_goodpos) ? cmap_c_to_glyph(cmap_idx) \
: NO_GLYPH )
#define trap_to_glyph(trap) \
cmap_to_glyph(trap_to_defsym(((int) (trap)->ttyp)))