[3.6.x] Recolor walls and floor of special dungeon regions in TTY mode: * Ported L's patch from 3.4.3 (https://bilious.alt.org/?296) * Beehive walls and floors are yellow (with honeycomb). * The walls of the Wizard's tower are magenta. * Other walls in Gehennom (except for the Valley) are red, and the floor is orange, except in Juiblex's lair, where it's green. * The Mines' walls are brown, except for room walls. * The Astral Plane's walls are white. * Altars are white, gray, black or red depending on alignment, except for Astral altars, which are bright magenta. * The Valley of the Dead is drained of colour - it appears in grayscale. (Note: this isn't the same as the rogue level's monochrome.) diff --git a/dat/mines.des b/dat/mines.des index ec1a0964..b281c909 100644 --- a/dat/mines.des +++ b/dat/mines.des @@ -576,6 +576,20 @@ REGION:(37,13,39,17),lit,"ordinary" REGION:(36,14,40,17),lit,"ordinary" REGION:(59,02,72,10),lit,"ordinary" +# mapglyph.c needs the gnome's homes defined +# "delphi" is a kludge to ensure that these rooms are not disposed of by mkmap() +REGION:(02,13,03,14),lit,"delphi" +REGION:(01,18,03,19),lit,"delphi" +REGION:(21,12,25,13),lit,"delphi" +REGION:(19,17,21,18),lit,"delphi" +REGION:(38,05,39,07),lit,"delphi" +REGION:(43,08,44,10),lit,"delphi" +REGION:(58,04,59,05),lit,"delphi" +REGION:(61,04,63,04),lit,"delphi" +REGION:(70,04,71,05),lit,"delphi" +REGION:(66,14,68,15),lit,"delphi" +REGION:(70,17,73,19),lit,"delphi" + MONSTER: ('@', "watchman"), random, peaceful MONSTER: ('@', "watchman"), random, peaceful MONSTER: ('@', "watchman"), random, peaceful @@ -674,6 +688,20 @@ REGION:(22,12,24,13),lit,"food shop" REGION:(31,12,36,14),lit,"temple" ALTAR:(35,13),align[0],shrine +# mapglyph.c needs the gnome's homes defined +# "delphi" is a kludge to ensure that these rooms are not disposed of by mkmap() +REGION:(2,1,4,3),lit,"delphi" +REGION:(2,8,3,9),lit,"delphi" +REGION:(9,3,11,5),lit,"delphi" +REGION:(13,5,14,6),lit,"delphi" +REGION:(13,10,14,11),lit,"delphi" +REGION:(19,11,20,13),lit,"delphi" +REGION:(21,9,31,9),lit,"delphi" +REGION:(27,1,28,3),lit,"delphi" +REGION:(27,7,28,8),lit,"delphi" +REGION:(30,1,36,2),lit,"delphi" +REGION:(34,6,36,8),lit,"delphi" + DOOR:closed,(5,2) DOOR:locked,(4,8) DOOR:closed,(10,2) diff --git a/src/hack.c b/src/hack.c index f16ed1bf..d89fb530 100644 --- a/src/hack.c +++ b/src/hack.c @@ -2360,6 +2360,7 @@ register boolean newlev; /* Did we just enter some other special room? */ /* vault.c insists that a vault remain a VAULT, + * BEEHIVEs have special colouration, * and temples should remain TEMPLEs, * but everything else gives a message only the first time */ switch (rt) { @@ -2384,7 +2385,9 @@ register boolean newlev; You("have an uncanny feeling..."); break; case BEEHIVE: - You("enter a giant beehive!"); + if (monstinroom(&mons[PM_QUEEN_BEE], roomno)) + You("enter a giant beehive!"); + rt = 0; break; case COCKNEST: You("enter a disgusting nest!"); diff --git a/src/mapglyph.c b/src/mapglyph.c index 4ba4ee7e..83f6ed26 100644 --- a/src/mapglyph.c +++ b/src/mapglyph.c @@ -138,9 +138,48 @@ unsigned *ospecial; && (showsyms[idx] == showsyms[S_pool + SYM_OFF_P] || showsyms[idx] == showsyms[S_water + SYM_OFF_P])) { special |= MG_BW_LAVA; - } else { + /* Special colors for special dungeon walls */ + } else if (iflags.use_color && offset >= S_vwall && offset <= S_hcdoor) { + if (*in_rooms(x, y, BEEHIVE)) + color = CLR_YELLOW; + else if (In_W_tower(x, y, &u.uz)) + color = CLR_MAGENTA; + else if (In_mines(&u.uz) && !*in_rooms(x, y, 0)) + color = CLR_BROWN; + else if (In_hell(&u.uz) && !Is_valley(&u.uz)) + color = CLR_RED; + else if (Is_astralevel(&u.uz)) + color = CLR_WHITE; + /* Special colors for special dungeon floors */ + } else if (iflags.use_color && offset == S_room) { + if (*in_rooms(x, y, BEEHIVE)) + color = CLR_YELLOW; + else if (In_hell(&u.uz) && !In_W_tower(x, y, &u.uz)) + color = Is_juiblex_level(&u.uz) ? CLR_GREEN : CLR_ORANGE; + /* Special colors for altars */ + } else if (iflags.use_color && offset == S_altar) { + if (Is_astralevel(&u.uz)) // no cheating! + color = CLR_BRIGHT_MAGENTA; + else + switch((aligntyp)Amask2align(levl[x][y].altarmask & AM_MASK)) { + case A_LAWFUL: + color = CLR_WHITE; + break; + case A_NEUTRAL: + color = CLR_GRAY; + break; + case A_CHAOTIC: + color = CLR_BLACK; + break; + default: + color = CLR_RED; + break; + } + } + + if (color == NO_COLOR) cmap_color(offset); - } + } else if ((offset = (glyph - GLYPH_OBJ_OFF)) >= 0) { /* object */ idx = objects[offset].oc_class + SYM_OFF_O; if (offset == BOULDER) @@ -222,6 +261,9 @@ unsigned *ospecial; } } + if (iflags.use_color && Is_valley(&u.uz) && color != CLR_BLACK) + color = color < NO_COLOR ? CLR_GRAY : CLR_WHITE; + ch = showsyms[idx]; #ifdef TEXTCOLOR /* Turn off color if no color defined, or rogue level w/o PC graphics. */