Walls of lava
Add "walls of lava", basically lava which blocks vision and require a bit more than just levitation or flight to move through. No levels use this yet, as testing isn't thorough enough.
This commit is contained in:
@@ -133,6 +133,7 @@ start: Blank
|
||||
S_kop: \032
|
||||
S_land_mine: \032
|
||||
S_lava: \032
|
||||
S_lavawall: \032
|
||||
S_leprechaun: \032
|
||||
S_level_teleporter: \032
|
||||
S_lich: \032
|
||||
@@ -260,6 +261,7 @@ start: IBMgraphics
|
||||
S_pool: \xf7 # meta-w, approx. equals
|
||||
S_ice: \xfa # meta-z, centered dot
|
||||
S_lava: \xf7 # meta-w, approx. equals
|
||||
S_lavawall: \xf7 # meta-w, approx. equals
|
||||
S_vodbridge: \xfa # meta-z, centered dot
|
||||
S_hodbridge: \xfa # meta-z, centered dot
|
||||
S_water: \xf7 # meta-w, approx. equals
|
||||
@@ -519,6 +521,7 @@ start: DECgraphics
|
||||
S_pool: \xe0 # meta-\, diamond
|
||||
S_ice: \xfe # meta-~, centered dot
|
||||
S_lava: \xe0 # meta-\, diamond
|
||||
S_lavawall: \xe0 # meta-\, diamond
|
||||
S_vodbridge: \xfe # meta-~, centered dot
|
||||
S_hodbridge: \xfe # meta-~, centered dot
|
||||
S_water: \xe0 # meta-\, diamond
|
||||
@@ -591,6 +594,7 @@ start: Enhanced1
|
||||
S_pool: U+224b # TRIPLE TILDE
|
||||
S_ice: U+00b7 # MIDDLE DOT
|
||||
S_lava: U+224b # TRIPLE TILDE
|
||||
S_lavawall: U+2248 # ALMOST EQUAL TO
|
||||
S_vodbridge: U+00b7 # MIDDLE DOT
|
||||
S_hodbridge: U+00b7 # MIDDLE DOT
|
||||
S_water: U+2248 # ALMOST EQUAL TO
|
||||
|
||||
@@ -1407,6 +1407,7 @@ Example:
|
||||
| `"}"` | moat
|
||||
| `"P"` | pool of water
|
||||
| `"L"` | lava pool
|
||||
| `"Z"` | wall of lava
|
||||
| `"I"` | ice
|
||||
| `"W"` | water
|
||||
| `"T"` | tree
|
||||
|
||||
127
include/defsym.h
127
include/defsym.h
@@ -133,49 +133,50 @@
|
||||
PCHAR2(36, '}', S_pool, "pool", "water", CLR(CLR_BLUE))
|
||||
PCHAR( 37, '.', S_ice, "ice", CLR(CLR_CYAN))
|
||||
PCHAR( 38, '}', S_lava, "molten lava", CLR(CLR_RED))
|
||||
PCHAR2(39, '.', S_vodbridge, "vertical open drawbridge",
|
||||
PCHAR( 39, '}', S_lavawall, "wall of lava", CLR(CLR_ORANGE))
|
||||
PCHAR2(40, '.', S_vodbridge, "vertical open drawbridge",
|
||||
"lowered drawbridge", CLR(CLR_BROWN))
|
||||
PCHAR2(40, '.', S_hodbridge, "horizontal open drawbridge",
|
||||
PCHAR2(41, '.', S_hodbridge, "horizontal open drawbridge",
|
||||
"lowered drawbridge", CLR(CLR_BROWN))
|
||||
PCHAR2(41, '#', S_vcdbridge, "vertical closed drawbridge",
|
||||
PCHAR2(42, '#', S_vcdbridge, "vertical closed drawbridge",
|
||||
"raised drawbridge", CLR(CLR_BROWN))
|
||||
PCHAR2(42, '#', S_hcdbridge, "horizontal closed drawbridge",
|
||||
PCHAR2(43, '#', S_hcdbridge, "horizontal closed drawbridge",
|
||||
"raised drawbridge", CLR(CLR_BROWN))
|
||||
PCHAR( 43, ' ', S_air, "air", CLR(CLR_CYAN))
|
||||
PCHAR( 44, '#', S_cloud, "cloud", CLR(CLR_GRAY))
|
||||
PCHAR( 45, '}', S_water, "water", CLR(CLR_BLUE))
|
||||
PCHAR( 44, ' ', S_air, "air", CLR(CLR_CYAN))
|
||||
PCHAR( 45, '#', S_cloud, "cloud", CLR(CLR_GRAY))
|
||||
PCHAR( 46, '}', S_water, "water", CLR(CLR_BLUE))
|
||||
/* end dungeon characters */
|
||||
/* */
|
||||
/* begin traps */
|
||||
/* */
|
||||
PCHAR( 46, '^', S_arrow_trap, "arrow trap", CLR(HI_METAL))
|
||||
PCHAR( 47, '^', S_dart_trap, "dart trap", CLR(HI_METAL))
|
||||
PCHAR( 48, '^', S_falling_rock_trap, "falling rock trap", CLR(CLR_GRAY))
|
||||
PCHAR( 49, '^', S_squeaky_board, "squeaky board", CLR(CLR_BROWN))
|
||||
PCHAR( 50, '^', S_bear_trap, "bear trap", CLR(HI_METAL))
|
||||
PCHAR( 51, '^', S_land_mine, "land mine", CLR(CLR_RED))
|
||||
PCHAR( 52, '^', S_rolling_boulder_trap, "rolling boulder trap",
|
||||
PCHAR( 47, '^', S_arrow_trap, "arrow trap", CLR(HI_METAL))
|
||||
PCHAR( 48, '^', S_dart_trap, "dart trap", CLR(HI_METAL))
|
||||
PCHAR( 49, '^', S_falling_rock_trap, "falling rock trap", CLR(CLR_GRAY))
|
||||
PCHAR( 50, '^', S_squeaky_board, "squeaky board", CLR(CLR_BROWN))
|
||||
PCHAR( 51, '^', S_bear_trap, "bear trap", CLR(HI_METAL))
|
||||
PCHAR( 52, '^', S_land_mine, "land mine", CLR(CLR_RED))
|
||||
PCHAR( 53, '^', S_rolling_boulder_trap, "rolling boulder trap",
|
||||
CLR(CLR_GRAY))
|
||||
PCHAR( 53, '^', S_sleeping_gas_trap, "sleeping gas trap", CLR(HI_ZAP))
|
||||
PCHAR( 54, '^', S_rust_trap, "rust trap", CLR(CLR_BLUE))
|
||||
PCHAR( 55, '^', S_fire_trap, "fire trap", CLR(CLR_ORANGE))
|
||||
PCHAR( 56, '^', S_pit, "pit", CLR(CLR_BLACK))
|
||||
PCHAR( 57, '^', S_spiked_pit, "spiked pit", CLR(CLR_BLACK))
|
||||
PCHAR( 58, '^', S_hole, "hole", CLR(CLR_BROWN))
|
||||
PCHAR( 59, '^', S_trap_door, "trap door", CLR(CLR_BROWN))
|
||||
PCHAR( 60, '^', S_teleportation_trap, "teleportation trap",
|
||||
PCHAR( 54, '^', S_sleeping_gas_trap, "sleeping gas trap", CLR(HI_ZAP))
|
||||
PCHAR( 55, '^', S_rust_trap, "rust trap", CLR(CLR_BLUE))
|
||||
PCHAR( 56, '^', S_fire_trap, "fire trap", CLR(CLR_ORANGE))
|
||||
PCHAR( 57, '^', S_pit, "pit", CLR(CLR_BLACK))
|
||||
PCHAR( 58, '^', S_spiked_pit, "spiked pit", CLR(CLR_BLACK))
|
||||
PCHAR( 59, '^', S_hole, "hole", CLR(CLR_BROWN))
|
||||
PCHAR( 60, '^', S_trap_door, "trap door", CLR(CLR_BROWN))
|
||||
PCHAR( 61, '^', S_teleportation_trap, "teleportation trap",
|
||||
CLR(CLR_MAGENTA))
|
||||
PCHAR( 61, '^', S_level_teleporter, "level teleporter", CLR(CLR_MAGENTA))
|
||||
PCHAR( 62, '^', S_magic_portal, "magic portal", CLR(CLR_BRIGHT_MAGENTA))
|
||||
PCHAR( 63, '"', S_web, "web", CLR(CLR_GRAY))
|
||||
PCHAR( 64, '^', S_statue_trap, "statue trap", CLR(CLR_GRAY))
|
||||
PCHAR( 65, '^', S_magic_trap, "magic trap", CLR(HI_ZAP))
|
||||
PCHAR2(66, '^', S_anti_magic_trap, "anti magic trap", "anti-magic field",
|
||||
PCHAR( 62, '^', S_level_teleporter, "level teleporter", CLR(CLR_MAGENTA))
|
||||
PCHAR( 63, '^', S_magic_portal, "magic portal", CLR(CLR_BRIGHT_MAGENTA))
|
||||
PCHAR( 64, '"', S_web, "web", CLR(CLR_GRAY))
|
||||
PCHAR( 65, '^', S_statue_trap, "statue trap", CLR(CLR_GRAY))
|
||||
PCHAR( 66, '^', S_magic_trap, "magic trap", CLR(HI_ZAP))
|
||||
PCHAR2(67, '^', S_anti_magic_trap, "anti magic trap", "anti-magic field",
|
||||
CLR(HI_ZAP))
|
||||
PCHAR( 67, '^', S_polymorph_trap, "polymorph trap", CLR(CLR_BRIGHT_GREEN))
|
||||
PCHAR( 68, '~', S_vibrating_square, "vibrating square", CLR(CLR_MAGENTA))
|
||||
PCHAR( 69, '^', S_trapped_door, "trapped door", CLR(CLR_ORANGE))
|
||||
PCHAR( 70, '^', S_trapped_chest, "trapped chest", CLR(CLR_ORANGE))
|
||||
PCHAR( 68, '^', S_polymorph_trap, "polymorph trap", CLR(CLR_BRIGHT_GREEN))
|
||||
PCHAR( 69, '~', S_vibrating_square, "vibrating square", CLR(CLR_MAGENTA))
|
||||
PCHAR( 70, '^', S_trapped_door, "trapped door", CLR(CLR_ORANGE))
|
||||
PCHAR( 71, '^', S_trapped_chest, "trapped chest", CLR(CLR_ORANGE))
|
||||
/* end traps */
|
||||
/* end cmap B */
|
||||
/* */
|
||||
@@ -183,22 +184,22 @@
|
||||
/* */
|
||||
/* zap colors are changed by reset_glyphmap() to match type of beam */
|
||||
/* */
|
||||
PCHAR2(71, '|', S_vbeam, "vertical beam", "", CLR(CLR_GRAY))
|
||||
PCHAR2(72, '-', S_hbeam, "horizontal beam", "", CLR(CLR_GRAY))
|
||||
PCHAR2(73, '\\', S_lslant, "left slant beam", "", CLR(CLR_GRAY))
|
||||
PCHAR2(74, '/', S_rslant, "right slant beam", "", CLR(CLR_GRAY))
|
||||
PCHAR2(72, '|', S_vbeam, "vertical beam", "", CLR(CLR_GRAY))
|
||||
PCHAR2(73, '-', S_hbeam, "horizontal beam", "", CLR(CLR_GRAY))
|
||||
PCHAR2(74, '\\', S_lslant, "left slant beam", "", CLR(CLR_GRAY))
|
||||
PCHAR2(75, '/', S_rslant, "right slant beam", "", CLR(CLR_GRAY))
|
||||
/* start cmap C */
|
||||
PCHAR2(75, '*', S_digbeam, "dig beam", "", CLR(CLR_WHITE))
|
||||
PCHAR2(76, '!', S_flashbeam, "flash beam", "", CLR(CLR_WHITE))
|
||||
PCHAR2(77, ')', S_boomleft, "boom left", "", CLR(HI_WOOD))
|
||||
PCHAR2(78, '(', S_boomright, "boom right", "", CLR(HI_WOOD))
|
||||
PCHAR2(76, '*', S_digbeam, "dig beam", "", CLR(CLR_WHITE))
|
||||
PCHAR2(77, '!', S_flashbeam, "flash beam", "", CLR(CLR_WHITE))
|
||||
PCHAR2(78, ')', S_boomleft, "boom left", "", CLR(HI_WOOD))
|
||||
PCHAR2(79, '(', S_boomright, "boom right", "", CLR(HI_WOOD))
|
||||
/* 4 magic shield symbols */
|
||||
PCHAR2(79, '0', S_ss1, "shield1", "", CLR(HI_ZAP))
|
||||
PCHAR2(80, '#', S_ss2, "shield2", "", CLR(HI_ZAP))
|
||||
PCHAR2(81, '@', S_ss3, "shield3", "", CLR(HI_ZAP))
|
||||
PCHAR2(82, '*', S_ss4, "shield4", "", CLR(HI_ZAP))
|
||||
PCHAR( 83, '#', S_poisoncloud, "poison cloud", CLR(CLR_BRIGHT_GREEN))
|
||||
PCHAR( 84, '?', S_goodpos, "valid position", CLR(CLR_BRIGHT_GREEN))
|
||||
PCHAR2(80, '0', S_ss1, "shield1", "", CLR(HI_ZAP))
|
||||
PCHAR2(81, '#', S_ss2, "shield2", "", CLR(HI_ZAP))
|
||||
PCHAR2(82, '@', S_ss3, "shield3", "", CLR(HI_ZAP))
|
||||
PCHAR2(83, '*', S_ss4, "shield4", "", CLR(HI_ZAP))
|
||||
PCHAR( 84, '#', S_poisoncloud, "poison cloud", CLR(CLR_BRIGHT_GREEN))
|
||||
PCHAR( 85, '?', S_goodpos, "valid position", CLR(CLR_BRIGHT_GREEN))
|
||||
/* end cmap C */
|
||||
/* */
|
||||
/* The 8 swallow symbols. Do NOT separate. */
|
||||
@@ -212,14 +213,14 @@
|
||||
/* 4 5 6 */
|
||||
/* 7 8 9 */
|
||||
/* */
|
||||
PCHAR2(85, '/', S_sw_tl, "swallow top left", "", CLR(CLR_GREEN)) /*1*/
|
||||
PCHAR2(86, '-', S_sw_tc, "swallow top center", "", CLR(CLR_GREEN)) /*2*/
|
||||
PCHAR2(87, '\\', S_sw_tr, "swallow top right", "", CLR(CLR_GREEN)) /*3*/
|
||||
PCHAR2(88, '|', S_sw_ml, "swallow middle left", "", CLR(CLR_GREEN)) /*4*/
|
||||
PCHAR2(89, '|', S_sw_mr, "swallow middle right", "", CLR(CLR_GREEN)) /*6*/
|
||||
PCHAR2(90, '\\', S_sw_bl, "swallow bottom left", "", CLR(CLR_GREEN)) /*7*/
|
||||
PCHAR2(91, '-', S_sw_bc, "swallow bottom center", "", CLR(CLR_GREEN))/*8*/
|
||||
PCHAR2(92, '/', S_sw_br, "swallow bottom right", "", CLR(CLR_GREEN)) /*9*/
|
||||
PCHAR2(86, '/', S_sw_tl, "swallow top left", "", CLR(CLR_GREEN)) /*1*/
|
||||
PCHAR2(87, '-', S_sw_tc, "swallow top center", "", CLR(CLR_GREEN)) /*2*/
|
||||
PCHAR2(88, '\\', S_sw_tr, "swallow top right", "", CLR(CLR_GREEN)) /*3*/
|
||||
PCHAR2(89, '|', S_sw_ml, "swallow middle left", "", CLR(CLR_GREEN)) /*4*/
|
||||
PCHAR2(90, '|', S_sw_mr, "swallow middle right", "", CLR(CLR_GREEN)) /*6*/
|
||||
PCHAR2(91, '\\', S_sw_bl, "swallow bottom left", "", CLR(CLR_GREEN)) /*7*/
|
||||
PCHAR2(92, '-', S_sw_bc, "swallow bottom center", "", CLR(CLR_GREEN))/*8*/
|
||||
PCHAR2(93, '/', S_sw_br, "swallow bottom right", "", CLR(CLR_GREEN)) /*9*/
|
||||
/* */
|
||||
/* explosion colors are changed by reset_glyphmap() to match */
|
||||
/* the type of expl. */
|
||||
@@ -230,15 +231,15 @@
|
||||
/* |@| */
|
||||
/* \-/ */
|
||||
/* */
|
||||
PCHAR2(93, '/', S_expl_tl, "explosion top left", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(94, '-', S_expl_tc, "explosion top center", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(95, '\\', S_expl_tr, "explosion top right", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(96, '|', S_expl_ml, "explosion middle left", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(97, ' ', S_expl_mc, "explosion middle center", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(98, '|', S_expl_mr, "explosion middle right", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(99, '\\', S_expl_bl, "explosion bottom left", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(100, '-', S_expl_bc, "explosion bottom center", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(101, '/', S_expl_br, "explosion bottom right", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(94, '/', S_expl_tl, "explosion top left", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(95, '-', S_expl_tc, "explosion top center", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(96, '\\', S_expl_tr, "explosion top right", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(97, '|', S_expl_ml, "explosion middle left", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(98, ' ', S_expl_mc, "explosion middle center", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(99, '|', S_expl_mr, "explosion middle right", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(100, '\\', S_expl_bl, "explosion bottom left", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(101, '-', S_expl_bc, "explosion bottom center", "", CLR(CLR_ORANGE))
|
||||
PCHAR2(102, '/', S_expl_br, "explosion bottom right", "", CLR(CLR_ORANGE))
|
||||
#undef PCHAR
|
||||
#undef PCHAR2
|
||||
#endif /* PCHAR_S_ENUM || PCHAR_PARSE || PCHAR_DRAWING || PCHAR_TILES */
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Incrementing EDITLEVEL can be used to force invalidation of old bones
|
||||
* and save files.
|
||||
*/
|
||||
#define EDITLEVEL 72
|
||||
#define EDITLEVEL 73
|
||||
|
||||
/*
|
||||
* Development status possibilities.
|
||||
|
||||
35
include/rm.h
35
include/rm.h
@@ -57,24 +57,25 @@ enum levl_typ_types {
|
||||
WATER = 18,
|
||||
DRAWBRIDGE_UP = 19,
|
||||
LAVAPOOL = 20,
|
||||
IRONBARS = 21, /* KMH */
|
||||
DOOR = 22,
|
||||
CORR = 23,
|
||||
ROOM = 24,
|
||||
STAIRS = 25,
|
||||
LADDER = 26,
|
||||
FOUNTAIN = 27,
|
||||
THRONE = 28,
|
||||
SINK = 29,
|
||||
GRAVE = 30,
|
||||
ALTAR = 31,
|
||||
ICE = 32,
|
||||
DRAWBRIDGE_DOWN = 33,
|
||||
AIR = 34,
|
||||
CLOUD = 35,
|
||||
LAVAWALL = 21,
|
||||
IRONBARS = 22, /* KMH */
|
||||
DOOR = 23,
|
||||
CORR = 24,
|
||||
ROOM = 25,
|
||||
STAIRS = 26,
|
||||
LADDER = 27,
|
||||
FOUNTAIN = 28,
|
||||
THRONE = 29,
|
||||
SINK = 30,
|
||||
GRAVE = 31,
|
||||
ALTAR = 32,
|
||||
ICE = 33,
|
||||
DRAWBRIDGE_DOWN = 34,
|
||||
AIR = 35,
|
||||
CLOUD = 36,
|
||||
|
||||
MAX_TYPE = 36,
|
||||
MATCH_WALL = 37,
|
||||
MAX_TYPE = 37,
|
||||
MATCH_WALL = 38,
|
||||
INVALID_TYPE = 127
|
||||
};
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ is_lava(coordxy x, coordxy y)
|
||||
if (!isok(x, y))
|
||||
return FALSE;
|
||||
ltyp = levl[x][y].typ;
|
||||
if (ltyp == LAVAPOOL
|
||||
if (ltyp == LAVAPOOL || ltyp == LAVAWALL
|
||||
|| (ltyp == DRAWBRIDGE_UP
|
||||
&& (levl[x][y].drawbridgemask & DB_UNDER) == DB_LAVA))
|
||||
return TRUE;
|
||||
|
||||
@@ -2153,6 +2153,9 @@ back_to_glyph(coordxy x, coordxy y)
|
||||
case LAVAPOOL:
|
||||
idx = S_lava;
|
||||
break;
|
||||
case LAVAWALL:
|
||||
idx = S_lavawall;
|
||||
break;
|
||||
case ICE:
|
||||
idx = S_ice;
|
||||
break;
|
||||
@@ -2316,6 +2319,9 @@ get_bkglyph_and_framecolor(coordxy x, coordxy y, int *bkglyph, uint32 *framecolo
|
||||
case LAVAPOOL:
|
||||
idx = S_lava;
|
||||
break;
|
||||
case LAVAWALL:
|
||||
idx = S_lavawall;
|
||||
break;
|
||||
default:
|
||||
idx = S_room;
|
||||
break;
|
||||
@@ -2889,6 +2895,7 @@ static const char *const type_names[MAX_TYPE] = {
|
||||
"STONE", "VWALL", "HWALL", "TLCORNER", "TRCORNER", "BLCORNER", "BRCORNER",
|
||||
"CROSSWALL", "TUWALL", "TDWALL", "TLWALL", "TRWALL", "DBWALL", "TREE",
|
||||
"SDOOR", "SCORR", "POOL", "MOAT", "WATER", "DRAWBRIDGE_UP", "LAVAPOOL",
|
||||
"LAVAWALL",
|
||||
"IRON_BARS", "DOOR", "CORR", "ROOM", "STAIRS", "LADDER", "FOUNTAIN",
|
||||
"THRONE", "SINK", "GRAVE", "ALTAR", "ICE", "DRAWBRIDGE_DOWN", "AIR",
|
||||
"CLOUD"
|
||||
|
||||
@@ -2931,6 +2931,7 @@ recalc_mapseen(void)
|
||||
mptr->feat.water = count;
|
||||
break;
|
||||
case LAVAPOOL:
|
||||
case LAVAWALL:
|
||||
count = mptr->feat.lava + 1;
|
||||
if (count <= 3)
|
||||
mptr->feat.lava = count;
|
||||
|
||||
12
src/hack.c
12
src/hack.c
@@ -1078,7 +1078,7 @@ test_move(
|
||||
/* FIXME: should be using lastseentyp[x][y] rather than seen vector
|
||||
*/
|
||||
if ((levl[x][y].seenv && is_pool_or_lava(x, y)) /* known pool/lava */
|
||||
&& (IS_WATERWALL(levl[x][y].typ) /* never enter wall of water */
|
||||
&& ((IS_WATERWALL(levl[x][y].typ) || levl[x][y].typ == LAVAWALL) /* never enter wall of liquid */
|
||||
/* don't enter pool or lava (must be one of the two to
|
||||
get here) unless flying or levitating or have known
|
||||
water-walking for pool or known lava-walking and
|
||||
@@ -1630,6 +1630,8 @@ u_simple_floortyp(coordxy x, coordxy y)
|
||||
|
||||
if (is_waterwall(x, y))
|
||||
return WATER; /* wall of water, fly/lev does not matter */
|
||||
if (levl[x][y].typ == LAVAWALL)
|
||||
return LAVAWALL; /* wall of lava, fly/lev does not matter */
|
||||
if (!u_in_air) {
|
||||
if (is_pool(x, y))
|
||||
return POOL;
|
||||
@@ -1644,7 +1646,8 @@ static boolean
|
||||
swim_move_danger(coordxy x, coordxy y)
|
||||
{
|
||||
schar newtyp = u_simple_floortyp(x, y);
|
||||
boolean liquid_wall = IS_WATERWALL(newtyp);
|
||||
boolean liquid_wall = IS_WATERWALL(newtyp)
|
||||
|| newtyp == LAVAWALL;
|
||||
|
||||
if ((newtyp != u_simple_floortyp(u.ux, u.uy))
|
||||
&& !Stunned && !Confusion && levl[x][y].seenv
|
||||
@@ -2164,7 +2167,7 @@ avoid_moving_on_liquid(
|
||||
|| gc.context.travel)
|
||||
/* and you know you won't fall in */
|
||||
&& (in_air || Known_lwalking || (is_pool(x, y) && Known_wwalking))
|
||||
&& !IS_WATERWALL(levl[x][y].typ)) {
|
||||
&& !(IS_WATERWALL(levl[x][y].typ) || levl[x][y].typ == LAVAWALL)) {
|
||||
/* XXX: should send 'is_clinger(gy.youmonst.data)' here once clinging
|
||||
polyforms are allowed to move over water */
|
||||
return FALSE; /* liquid is safe to traverse */
|
||||
@@ -2679,7 +2682,8 @@ switch_terrain(void)
|
||||
{
|
||||
struct rm *lev = &levl[u.ux][u.uy];
|
||||
boolean blocklev = (IS_ROCK(lev->typ) || closed_door(u.ux, u.uy)
|
||||
|| IS_WATERWALL(lev->typ)),
|
||||
|| IS_WATERWALL(lev->typ)
|
||||
|| lev->typ == LAVAWALL),
|
||||
was_levitating = !!Levitation, was_flying = !!Flying;
|
||||
|
||||
if (blocklev) {
|
||||
|
||||
@@ -1012,6 +1012,9 @@ cmap_to_type(int sym)
|
||||
case S_water:
|
||||
typ = WATER;
|
||||
break;
|
||||
case S_lavawall:
|
||||
typ = LAVAWALL;
|
||||
break;
|
||||
default:
|
||||
break; /* not a cmap symbol? */
|
||||
}
|
||||
|
||||
@@ -1989,6 +1989,8 @@ mfndpos(
|
||||
|| (m_at(x, ny) && m_at(nx, y) && worm_cross(x, y, nx, ny)
|
||||
&& !m_at(nx, ny) && (nx != u.ux || ny != u.uy))))
|
||||
continue;
|
||||
if ((!lavaok || !(flag & ALLOW_WALL)) && ntyp == LAVAWALL)
|
||||
continue;
|
||||
if ((poolok || is_pool(nx, ny) == wantpool)
|
||||
&& (lavaok || !is_lava(nx, ny))) {
|
||||
int dispx, dispy;
|
||||
|
||||
@@ -338,6 +338,7 @@ const struct {
|
||||
{ '}', MOAT },
|
||||
{ 'P', POOL },
|
||||
{ 'L', LAVAPOOL },
|
||||
{ 'Z', LAVAWALL },
|
||||
{ 'I', ICE },
|
||||
{ 'W', WATER },
|
||||
{ 'T', TREE },
|
||||
|
||||
@@ -3291,12 +3291,13 @@ wizterrainwish(struct _readobjnam_data *d)
|
||||
madeterrain = TRUE;
|
||||
|
||||
/* also matches "molten lava" */
|
||||
} else if (!BSTRCMPI(bp, p - 4, "lava")) {
|
||||
lev->typ = LAVAPOOL;
|
||||
} else if (!BSTRCMPI(bp, p - 4, "lava")
|
||||
|| !BSTRCMPI(bp, p - 12, "wall of lava")) {
|
||||
lev->typ = !BSTRCMPI(bp, p - 12, "wall of lava") ? LAVAWALL : LAVAPOOL;
|
||||
lev->flags = 0;
|
||||
del_engr_at(x, y);
|
||||
pline("A pool of molten lava.");
|
||||
if (!(Levitation || Flying))
|
||||
if (!(Levitation || Flying) || lev->typ == LAVAWALL)
|
||||
pooleffects(FALSE);
|
||||
madeterrain = TRUE;
|
||||
} else if (!BSTRCMPI(bp, p - 3, "ice")) {
|
||||
|
||||
@@ -519,6 +519,9 @@ waterbody_name(coordxy x, coordxy y)
|
||||
return "limitless water"; /* even if hallucinating */
|
||||
Snprintf(pooltype, sizeof pooltype, "wall of %s", hliquid("water"));
|
||||
return pooltype;
|
||||
} else if (ltyp == LAVAWALL) {
|
||||
Snprintf(pooltype, sizeof pooltype, "wall of %s", hliquid("lava"));
|
||||
return pooltype;
|
||||
}
|
||||
/* default; should be unreachable */
|
||||
return "water"; /* don't hallucinate this as some other liquid */
|
||||
|
||||
@@ -161,6 +161,7 @@ does_block(int x, int y, struct rm *lev)
|
||||
if (gs.seethru != 1) {
|
||||
#endif
|
||||
if (lev->typ == CLOUD || IS_WATERWALL(lev->typ)
|
||||
|| lev->typ == LAVAWALL
|
||||
|| (Underwater && is_moat(x, y)))
|
||||
return 1;
|
||||
#ifdef DEBUG
|
||||
|
||||
@@ -3524,7 +3524,7 @@ bhit(coordxy ddx, coordxy ddy, int range, /* direction and range */
|
||||
typ = levl[gb.bhitpos.x][gb.bhitpos.y].typ;
|
||||
|
||||
/* WATER aka "wall of water" stops items */
|
||||
if (IS_WATERWALL(typ)) {
|
||||
if (IS_WATERWALL(typ) || typ == LAVAWALL) {
|
||||
if (weapon == THROWN_WEAPON || weapon == KICKED_WEAPON)
|
||||
break;
|
||||
}
|
||||
@@ -4780,8 +4780,8 @@ zap_over_floor(
|
||||
break; /* ZT_FIRE */
|
||||
|
||||
case ZT_COLD:
|
||||
if (is_pool(x, y) || is_lava(x, y)) {
|
||||
boolean lava = is_lava(x, y),
|
||||
if (is_pool(x, y) || is_lava(x, y) || levl[x][y].typ == LAVAWALL) {
|
||||
boolean lava = (is_lava(x, y) || levl[x][y].typ == LAVAWALL),
|
||||
moat = is_moat(x, y);
|
||||
|
||||
if (IS_WATERWALL(lev->typ)) {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user