]> granicus.if.org Git - nethack/commitdiff
Add poison cloud glyph, fumaroles to fire plane.
authorPasi Kallinen <paxed@alt.org>
Sun, 5 Apr 2015 09:17:57 +0000 (12:17 +0300)
committerPasi Kallinen <paxed@alt.org>
Sun, 5 Apr 2015 09:31:55 +0000 (12:31 +0300)
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.

include/extern.h
include/rm.h
src/allmain.c
src/display.c
src/do.c
src/drawing.c
src/mkmaze.c
src/region.c
win/share/other.txt

index 28680c5fa2256608ff733618c452db79569448ae..971971ea829b41c84f3621d481bfc90edf0ec650 100644 (file)
@@ -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));
index 00f0bc4c5419c065064a69fb2d90fb93b685d4e2..cfc399300a69bce41d3389788a73b40cd4d3fc20 100644 (file)
 #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 {
index 5f5ab44c78ccc02db464384b91898307e385e603..981358e772da7c2e7ef7a983f28795eb32180039 100644 (file)
@@ -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 */
index 0e8b042a6f3bc314c94a1ef9d0b1aaae3fa1e35c..87658aefaaf61b89dc1ae160991b21469f5ae626 100644 (file)
@@ -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;
        }
index eae360425174e8e5873321a3cf5f89e1bd44eb1e..acc241a9084410c9cb5d65e7a106b53d14602774 100644 (file)
--- 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 */
index a5cc10d4650d35bfa509492c012975e1ff74bceb..a08a7acc59bc13a98a6dbfbfca72dfcbe95ef4bf 100644 (file)
@@ -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"},
index 8a5b9b7939eedc92c61cbfc1b5262783fa6edfdd..d9515de2df5dcbbdfd73e7703fd1296d5705967d 100644 (file)
@@ -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).
  *
index 562747948e3a443a8f6410d796f90c49c8f18d3c..bd47b79492ac523720e26eb2e92964d05212fbc8 100644 (file)
@@ -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;
 }
index 14ec940d58540c38f7e126ef3cea6c3f08f725a3..61258f290f3e21c2faa87da63c46d66704b738eb 100644 (file)
@@ -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