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));
#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 {
/* 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 */
*/
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;
}
/* 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 */
{'#', "", 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 */
{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"},
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).
*
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;
}
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