From: Pasi Kallinen Date: Sun, 5 Apr 2015 09:17:57 +0000 (+0300) Subject: Add poison cloud glyph, fumaroles to fire plane. X-Git-Tag: NetHack-3.6.0_RC01~492^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=71401a7db877a726dbd219aa4939181c26792dfd;p=nethack Add poison cloud glyph, fumaroles to fire plane. When a gas cloud that deals damage is created, it uses a poison cloud glyph instead of the cloud glyph. (A bright green '#', or a bright-green recolor of the cloud tile) The plane of fire has random "stinking clouds", or fumaroles, centered on lava pools. Also make poison cloud glyph override lava, pool and moat glyphs. --- diff --git a/include/extern.h b/include/extern.h index 28680c5fa..971971ea8 100644 --- a/include/extern.h +++ b/include/extern.h @@ -1158,6 +1158,7 @@ E boolean FDECL(bad_location, (XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P)) E void FDECL(place_lregion, (XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P, XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P, XCHAR_P,d_level *)); +E void NDECL(fumaroles); E void NDECL(movebubbles); E void NDECL(water_friction); E void FDECL(save_waterlevel, (int,int)); diff --git a/include/rm.h b/include/rm.h index 00f0bc4c5..cfc399300 100644 --- a/include/rm.h +++ b/include/rm.h @@ -189,34 +189,35 @@ #define S_ss2 72 #define S_ss3 73 #define S_ss4 74 +#define S_poisoncloud 75 /* The 8 swallow symbols. Do NOT separate. To change order or add, see */ /* the function swallow_to_glyph() in display.c. */ -#define S_sw_tl 75 /* swallow top left [1] */ -#define S_sw_tc 76 /* swallow top center [2] Order: */ -#define S_sw_tr 77 /* swallow top right [3] */ -#define S_sw_ml 78 /* swallow middle left [4] 1 2 3 */ -#define S_sw_mr 79 /* swallow middle right [6] 4 5 6 */ -#define S_sw_bl 80 /* swallow bottom left [7] 7 8 9 */ -#define S_sw_bc 81 /* swallow bottom center [8] */ -#define S_sw_br 82 /* swallow bottom right [9] */ - -#define S_explode1 83 /* explosion top left */ -#define S_explode2 84 /* explosion top center */ -#define S_explode3 85 /* explosion top right Ex. */ -#define S_explode4 86 /* explosion middle left */ -#define S_explode5 87 /* explosion middle center /-\ */ -#define S_explode6 88 /* explosion middle right |@| */ -#define S_explode7 89 /* explosion bottom left \-/ */ -#define S_explode8 90 /* explosion bottom center */ -#define S_explode9 91 /* explosion bottom right */ +#define S_sw_tl 76 /* swallow top left [1] */ +#define S_sw_tc 77 /* swallow top center [2] Order: */ +#define S_sw_tr 78 /* swallow top right [3] */ +#define S_sw_ml 79 /* swallow middle left [4] 1 2 3 */ +#define S_sw_mr 80 /* swallow middle right [6] 4 5 6 */ +#define S_sw_bl 81 /* swallow bottom left [7] 7 8 9 */ +#define S_sw_bc 82 /* swallow bottom center [8] */ +#define S_sw_br 83 /* swallow bottom right [9] */ + +#define S_explode1 84 /* explosion top left */ +#define S_explode2 85 /* explosion top center */ +#define S_explode3 86 /* explosion top right Ex. */ +#define S_explode4 87 /* explosion middle left */ +#define S_explode5 88 /* explosion middle center /-\ */ +#define S_explode6 89 /* explosion middle right |@| */ +#define S_explode7 90 /* explosion bottom left \-/ */ +#define S_explode8 91 /* explosion bottom center */ +#define S_explode9 92 /* explosion bottom right */ /* end effects */ -#define MAXPCHARS 92 /* maximum number of mapped characters */ +#define MAXPCHARS 93 /* maximum number of mapped characters */ #define MAXDCHARS 41 /* maximum of mapped dungeon characters */ #define MAXTCHARS 22 /* maximum of mapped trap characters */ -#define MAXECHARS 29 /* maximum of mapped effects characters */ +#define MAXECHARS 30 /* maximum of mapped effects characters */ #define MAXEXPCHARS 9 /* number of explosion characters */ struct symdef { diff --git a/src/allmain.c b/src/allmain.c index 5f5ab44c7..981358e77 100644 --- a/src/allmain.c +++ b/src/allmain.c @@ -294,6 +294,8 @@ boolean resuming; /* underwater and waterlevel vision are done here */ if (Is_waterlevel(&u.uz) || Is_airlevel(&u.uz)) movebubbles(); + else if (Is_firelevel(&u.uz)) + fumaroles(); else if (Underwater) under_water(0); /* vision while buried done here */ diff --git a/src/display.c b/src/display.c index 0e8b042a6..87658aefa 100644 --- a/src/display.c +++ b/src/display.c @@ -674,7 +674,12 @@ newsym(x,y) */ lev->waslit = (lev->lit!=0); /* remember lit condition */ - if (reg != NULL && ACCESSIBLE(lev->typ)) { + /* normal region shown only on accessible positions, but poison clouds + * also shown above lava, pools and moats. + */ + if (reg != NULL && (ACCESSIBLE(lev->typ) || + (reg->glyph == cmap_to_glyph(S_poisoncloud) && + (lev->typ == LAVAPOOL || lev->typ == POOL || lev->typ == MOAT)))) { show_region(reg,x,y); return; } diff --git a/src/do.c b/src/do.c index eae360425..acc241a90 100644 --- a/src/do.c +++ b/src/do.c @@ -1288,6 +1288,8 @@ boolean at_stairs, falling, portal; /* initial movement of bubbles just before vision_recalc */ if (Is_waterlevel(&u.uz) || Is_airlevel(&u.uz)) movebubbles(); + else if (Is_firelevel(&u.uz)) + fumaroles(); if (level_info[new_ledger].flags & FORGOTTEN) { forget_map(ALL_MAP); /* forget the map */ diff --git a/src/drawing.c b/src/drawing.c index a5cc10d46..a08a7acc5 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -211,6 +211,7 @@ const struct symdef defsyms[MAXPCHARS] = { {'#', "", C(HI_ZAP)}, {'@', "", C(HI_ZAP)}, {'*', "", C(HI_ZAP)}, + {'#', "poison cloud", C(CLR_BRIGHT_GREEN)}, /* [part of] a poison cloud */ {'/', "", C(CLR_GREEN)}, /* swallow top left */ {'-', "", C(CLR_GREEN)}, /* swallow top center */ {'\\', "", C(CLR_GREEN)}, /* swallow top right */ @@ -614,6 +615,7 @@ struct symparse loadsyms[] = { {SYM_PCHAR, S_hcdbridge, "S_hcdbridge"}, {SYM_PCHAR, S_air, "S_air"}, {SYM_PCHAR, S_cloud, "S_cloud"}, + {SYM_PCHAR, S_poisoncloud, "S_poisoncloud"}, {SYM_PCHAR, S_water, "S_water"}, {SYM_PCHAR, S_arrow_trap, "S_arrow_trap"}, {SYM_PCHAR, S_dart_trap, "S_dart_trap"}, diff --git a/src/mkmaze.c b/src/mkmaze.c index 8a5b9b793..d9515de2d 100644 --- a/src/mkmaze.c +++ b/src/mkmaze.c @@ -879,6 +879,26 @@ register xchar x, y, todnum, todlevel; return; } +void +fumaroles() +{ + xchar n; + boolean snd = FALSE, loud = FALSE; + for (n = rn2(3)+2; n; n--) { + xchar x = rn1(COLNO-4,3); + xchar y = rn1(ROWNO-4,3); + struct trap *ttmp = t_at(x,y); + if (levl[x][y].typ == LAVAPOOL) { + NhRegion *r = create_gas_cloud(x,y, 4+rn2(5), rn1(10,5)); + clear_heros_fault(r); + snd = TRUE; + if (distu(x,y) < 15) loud = TRUE; + } + } + if (snd && !Deaf) + Norep("You hear a %swhoosh!", loud ? "loud " : ""); +} + /* * Special waterlevel stuff in endgame (TH). * diff --git a/src/region.c b/src/region.c index 562747948..bd47b7949 100644 --- a/src/region.c +++ b/src/region.c @@ -996,7 +996,7 @@ int damage; cloud->arg = zeroany; cloud->arg.a_int = damage; cloud->visible = TRUE; - cloud->glyph = cmap_to_glyph(S_cloud); + cloud->glyph = cmap_to_glyph(damage ? S_poisoncloud : S_cloud); add_region(cloud); return cloud; } diff --git a/win/share/other.txt b/win/share/other.txt index 14ec940d5..61258f290 100644 --- a/win/share/other.txt +++ b/win/share/other.txt @@ -1439,6 +1439,25 @@ P = (108, 145, 182) MMMMMNNNNNMMMMMM MMMMMMMMMMMMMMMM } +# tile 75 (poison cloud) +{ + BBBBBBBBBBBBBBBB + BBBBBFFFFFFFBBBB + BBBFFFFFFFFFFBBB + BBFFFFFFFFFGFFBB + BBFFFFFFFFFFFFFB + BFFFFFFFFFFFFGFB + FFFGFFFFFFFFGFFF + FFFFFFFFFFGGFFFF + FFFFFFFFFFFFFGFF + FFGGFFFFFFFGGFFG + FFFFFGGGGGFFFFGG + BGFFFFFFFFFFGGGB + BBGGGFFFFGGGGGGB + BBBGGGGGGGGGGBBB + BBBBBBGGGGBBBBBB + BBBBBBBBBBBBBBBB +} # tile 75 (cmap 75) { AAAAAAADDDDDDAAA