Add colored branch stairs

Different color for stairs that go to another dungeon branch.

Adds four new glyphs, S_br{up,dn}{stair,ladder}, which use the
same character as normal stairs/ladders, but yellow color.
In tiles, the up/down arrow is yellow-green instead of while-blue.

This feature has been around a lot and is in several different
variants, but this is implemented from scratch so tiles work too.
This commit is contained in:
Pasi Kallinen
2021-07-27 17:11:02 +03:00
parent 141a7915d6
commit 267ac5add2
8 changed files with 385 additions and 279 deletions

View File

@@ -5274,6 +5274,10 @@ b S_blob (blob)
( S_boomright (boomerang open right)
\` S_boulder (boulder)
\- S_brcorn (bottom right corner)
> S_brdnladder (branch ladder down)
> S_brdnstair (branch staircase down)
< S_brupladder (branch ladder up)
< S_brupstair (branch staircase up)
C S_centaur (centaur)
\&_ S_chain (iron chain)
# S_cloud (cloud)

View File

@@ -5775,6 +5775,10 @@ Default & Symbol Name & Description\\
\verb@(@ & S\verb+_+boomright & (boomerang open right)\\
\verb@`@ & S\verb+_+boulder & (boulder)\\
\verb@-@ & S\verb+_+brcorn & (bottom right corner)\\
\verb@>@ & S\verb+_+brdnladder & (branch ladder down)\\
\verb@>@ & S\verb+_+brdnstair & (branch staircase down)\\
\verb@<@ & S\verb+_+brupladder & (branch ladder up)\\
\verb@<@ & S\verb+_+brupstair & (branch staircase up)\\
\verb@C@ & S\verb+_+centaur & (centaur)\\
\verb@_@ & S\verb+_+chain & (iron chain)\\
\# & S\verb+_+cloud & (cloud)\\

View File

@@ -1092,6 +1092,7 @@ spiders will occasionally spin webs when moving around
drinking a burning potion of oil will cure being turned into slime
new bigroom variant, a boulder maze
vomiting on an altar provokes the deities wrath
branch stairs have a different glyph, show up in yellow color in tty
Platform- and/or Interface-Specific New Features

View File

@@ -142,89 +142,93 @@ enum screen_symbols {
S_dnstair = 24,
S_upladder = 25,
S_dnladder = 26,
S_altar = 27,
S_grave = 28,
S_throne = 29,
S_sink = 30,
S_fountain = 31,
S_pool = 32,
S_ice = 33,
S_lava = 34,
S_vodbridge = 35,
S_hodbridge = 36,
S_vcdbridge = 37, /* closed drawbridge, vertical wall */
S_hcdbridge = 38, /* closed drawbridge, horizontal wall */
S_air = 39,
S_cloud = 40,
S_water = 41,
S_brupstair = 27,
S_brdnstair = 28,
S_brupladder= 29,
S_brdnladder= 30,
S_altar = 31,
S_grave = 32,
S_throne = 33,
S_sink = 34,
S_fountain = 35,
S_pool = 36,
S_ice = 37,
S_lava = 38,
S_vodbridge = 39,
S_hodbridge = 40,
S_vcdbridge = 41, /* closed drawbridge, vertical wall */
S_hcdbridge = 42, /* closed drawbridge, horizontal wall */
S_air = 43,
S_cloud = 44,
S_water = 45,
/* end dungeon characters, begin traps */
S_arrow_trap = 42,
S_dart_trap = 43,
S_falling_rock_trap = 44,
S_squeaky_board = 45,
S_bear_trap = 46,
S_land_mine = 47,
S_rolling_boulder_trap = 48,
S_sleeping_gas_trap = 49,
S_rust_trap = 50,
S_fire_trap = 51,
S_pit = 52,
S_spiked_pit = 53,
S_hole = 54,
S_trap_door = 55,
S_teleportation_trap = 56,
S_level_teleporter = 57,
S_magic_portal = 58,
S_web = 59,
S_statue_trap = 60,
S_magic_trap = 61,
S_anti_magic_trap = 62,
S_polymorph_trap = 63,
S_vibrating_square = 64, /* for display rather than any trap effect */
S_arrow_trap = 46,
S_dart_trap = 47,
S_falling_rock_trap = 48,
S_squeaky_board = 49,
S_bear_trap = 50,
S_land_mine = 51,
S_rolling_boulder_trap = 52,
S_sleeping_gas_trap = 53,
S_rust_trap = 54,
S_fire_trap = 55,
S_pit = 56,
S_spiked_pit = 57,
S_hole = 58,
S_trap_door = 59,
S_teleportation_trap = 60,
S_level_teleporter = 61,
S_magic_portal = 62,
S_web = 63,
S_statue_trap = 64,
S_magic_trap = 65,
S_anti_magic_trap = 66,
S_polymorph_trap = 67,
S_vibrating_square = 68, /* for display rather than any trap effect */
/* end traps, begin special effects */
S_vbeam = 65, /* The 4 zap beam symbols. Do NOT separate. */
S_hbeam = 66, /* To change order or add, see function */
S_lslant = 67, /* zapdir_to_glyph() in display.c. */
S_rslant = 68,
S_digbeam = 69, /* dig beam symbol */
S_flashbeam = 70, /* camera flash symbol */
S_boomleft = 71, /* thrown boomerang, open left, e.g ')' */
S_boomright = 72, /* thrown boomerang, open right, e.g. '(' */
S_ss1 = 73, /* 4 magic shield ("resistance sparkle") glyphs */
S_ss2 = 74,
S_ss3 = 75,
S_ss4 = 76,
S_poisoncloud = 77,
S_goodpos = 78, /* valid position for targeting via getpos() */
S_vbeam = 69, /* The 4 zap beam symbols. Do NOT separate. */
S_hbeam = 70, /* To change order or add, see function */
S_lslant = 71, /* zapdir_to_glyph() in display.c. */
S_rslant = 72,
S_digbeam = 73, /* dig beam symbol */
S_flashbeam = 74, /* camera flash symbol */
S_boomleft = 75, /* thrown boomerang, open left, e.g ')' */
S_boomright = 76, /* thrown boomerang, open right, e.g. '(' */
S_ss1 = 77, /* 4 magic shield ("resistance sparkle") glyphs */
S_ss2 = 78,
S_ss3 = 79,
S_ss4 = 80,
S_poisoncloud = 81,
S_goodpos = 82, /* valid position for targeting via getpos() */
/* The 8 swallow symbols. Do NOT separate. To change order or add, */
/* see the function swallow_to_glyph() in display.c. */
S_sw_tl = 79, /* swallow top left [1] */
S_sw_tc = 80, /* swallow top center [2] Order: */
S_sw_tr = 81, /* swallow top right [3] */
S_sw_ml = 82, /* swallow middle left [4] 1 2 3 */
S_sw_mr = 83, /* swallow middle right [6] 4 5 6 */
S_sw_bl = 84, /* swallow bottom left [7] 7 8 9 */
S_sw_bc = 85, /* swallow bottom center [8] */
S_sw_br = 86, /* swallow bottom right [9] */
S_sw_tl = 83, /* swallow top left [1] */
S_sw_tc = 84, /* swallow top center [2] Order: */
S_sw_tr = 85, /* swallow top right [3] */
S_sw_ml = 86, /* swallow middle left [4] 1 2 3 */
S_sw_mr = 87, /* swallow middle right [6] 4 5 6 */
S_sw_bl = 88, /* swallow bottom left [7] 7 8 9 */
S_sw_bc = 89, /* swallow bottom center [8] */
S_sw_br = 90, /* swallow bottom right [9] */
S_explode1 = 87, /* explosion top left */
S_explode2 = 88, /* explosion top center */
S_explode3 = 89, /* explosion top right Ex. */
S_explode4 = 90, /* explosion middle left */
S_explode5 = 91, /* explosion middle center /-\ */
S_explode6 = 92, /* explosion middle right |@| */
S_explode7 = 93, /* explosion bottom left \-/ */
S_explode8 = 94, /* explosion bottom center */
S_explode9 = 95, /* explosion bottom right */
S_explode1 = 91, /* explosion top left */
S_explode2 = 92, /* explosion top center */
S_explode3 = 93, /* explosion top right Ex. */
S_explode4 = 94, /* explosion middle left */
S_explode5 = 95, /* explosion middle center /-\ */
S_explode6 = 96, /* explosion middle right |@| */
S_explode7 = 97, /* explosion bottom left \-/ */
S_explode8 = 98, /* explosion bottom center */
S_explode9 = 99, /* explosion bottom right */
/* end effects */
MAXPCHARS = 96 /* maximum number of mapped characters */
MAXPCHARS = 100 /* maximum number of mapped characters */
};
#define MAXDCHARS (S_water - S_stone + 1) /* mapped dungeon characters */

View File

@@ -1806,6 +1806,7 @@ back_to_glyph(xchar x, xchar y)
{
int idx;
struct rm *ptr = &(levl[x][y]);
struct stairway *sway;
switch (ptr->typ) {
case SCORR:
@@ -1854,10 +1855,18 @@ back_to_glyph(xchar x, xchar y)
idx = S_pool;
break;
case STAIRS:
idx = (ptr->ladder & LA_DOWN) ? S_dnstair : S_upstair;
sway = stairway_at(x, y);
if (sway && (sway->tolev.dnum != u.uz.dnum))
idx = (ptr->ladder & LA_DOWN) ? S_brdnstair : S_brupstair;
else
idx = (ptr->ladder & LA_DOWN) ? S_dnstair : S_upstair;
break;
case LADDER:
idx = (ptr->ladder & LA_DOWN) ? S_dnladder : S_upladder;
sway = stairway_at(x, y);
if (sway && (sway->tolev.dnum != u.uz.dnum))
idx = (ptr->ladder & LA_DOWN) ? S_brdnladder : S_brupladder;
else
idx = (ptr->ladder & LA_DOWN) ? S_dnladder : S_upladder;
break;
case FOUNTAIN:
idx = S_fountain;

View File

@@ -157,6 +157,10 @@ const struct symdef defsyms[MAXPCHARS] = {
{ '>', "staircase down", C(CLR_GRAY) }, /* dnstair */
{ '<', "ladder up", C(CLR_BROWN) }, /* upladder */
{ '>', "ladder down", C(CLR_BROWN) }, /* dnladder */
{ '<', "branch staircase up", C(CLR_YELLOW) }, /* brupstair */
{ '>', "branch staircase down", C(CLR_YELLOW) }, /* brdnstair */
{ '<', "branch ladder up", C(CLR_YELLOW) }, /* brupladder */
{ '>', "branch ladder down", C(CLR_YELLOW) }, /* brdnladder */
{ '_', "altar", C(CLR_GRAY) }, /* altar */
{ '|', "grave", C(CLR_WHITE) }, /* grave */
{ '\\', "opulent throne", C(HI_GOLD) }, /* throne */

View File

@@ -383,6 +383,10 @@ const struct symparse loadsyms[] = {
{ SYM_PCHAR, S_dnstair, "S_dnstair" },
{ SYM_PCHAR, S_upladder, "S_upladder" },
{ SYM_PCHAR, S_dnladder, "S_dnladder" },
{ SYM_PCHAR, S_brupstair, "S_brupstair" },
{ SYM_PCHAR, S_brdnstair, "S_brdnstair" },
{ SYM_PCHAR, S_brupladder, "S_brupladder" },
{ SYM_PCHAR, S_brdnladder, "S_brdnladder" },
{ SYM_PCHAR, S_altar, "S_altar" },
{ SYM_PCHAR, S_grave, "S_grave" },
{ SYM_PCHAR, S_throne, "S_throne" },

File diff suppressed because it is too large Load Diff