From 86dc5cf5880412f8b641fa5c37353fef82c5a2fa Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Mon, 27 Apr 2015 22:15:23 +0300 Subject: [PATCH] Unify getting terrain under drawbridge --- include/extern.h | 1 + src/dbridge.c | 12 ++++++++++++ src/dungeon.c | 7 +------ src/mkmaze.c | 7 +------ src/monmove.c | 13 ++++--------- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/include/extern.h b/include/extern.h index eb736303a..a185be710 100644 --- a/include/extern.h +++ b/include/extern.h @@ -222,6 +222,7 @@ E boolean FDECL(is_lava, (int,int)); E boolean FDECL(is_pool_or_lava, (int,int)); E boolean FDECL(is_ice, (int,int)); E boolean FDECL(is_moat, (int,int)); +E schar FDECL(db_under_typ, (int)); E int FDECL(is_drawbridge_wall, (int,int)); E boolean FDECL(is_db_wall, (int,int)); E boolean FDECL(find_drawbridge, (int *,int*)); diff --git a/src/dbridge.c b/src/dbridge.c index 8c4b90031..e2aa105ab 100644 --- a/src/dbridge.c +++ b/src/dbridge.c @@ -103,6 +103,18 @@ int x, y; return FALSE; } +schar +db_under_typ(mask) +int mask; +{ + switch (mask & DB_UNDER) { + case DB_ICE: return ICE; break; + case DB_LAVA: return LAVAPOOL; break; + case DB_MOAT: return MOAT; break; + default: return STONE; break; + } +} + /* * We want to know whether a wall (or a door) is the portcullis (passageway) * of an eventual drawbridge. diff --git a/src/dungeon.c b/src/dungeon.c index 3d1bfcb65..95d6c0946 100644 --- a/src/dungeon.c +++ b/src/dungeon.c @@ -2207,12 +2207,7 @@ recalc_mapseen() if (cansee(x, y) || (x == u.ux && y == u.uy && !Levitation)) { ltyp = levl[x][y].typ; if (ltyp == DRAWBRIDGE_UP) - switch (levl[x][y].drawbridgemask & DB_UNDER) { - case DB_ICE: ltyp = ICE; break; - case DB_LAVA: ltyp = LAVAPOOL; break; - case DB_MOAT: ltyp = MOAT; break; - default: ltyp = STONE; break; - } + ltyp = db_under_typ(levl[x][y].drawbridgemask); if ((mtmp = m_at(x, y)) != 0 && mtmp->m_ap_type == M_AP_FURNITURE && canseemon(mtmp)) ltyp = cmap_to_type(mtmp->mappearance); diff --git a/src/mkmaze.c b/src/mkmaze.c index 42851c0df..923a51f1d 100644 --- a/src/mkmaze.c +++ b/src/mkmaze.c @@ -1157,12 +1157,7 @@ xchar x,y; lev = &levl[x][y]; ltyp = lev->typ; if (ltyp == DRAWBRIDGE_UP) - switch (lev->drawbridgemask & DB_UNDER) { - case DB_ICE: ltyp = ICE; break; - case DB_LAVA: ltyp = LAVAPOOL; break; - case DB_MOAT: ltyp = MOAT; break; - default: ltyp = STONE; break; - } + ltyp = db_under_typ(lev->drawbridgemask); if (ltyp == LAVAPOOL) return "lava"; diff --git a/src/monmove.c b/src/monmove.c index f98a58aca..9b4d47cce 100644 --- a/src/monmove.c +++ b/src/monmove.c @@ -1305,15 +1305,10 @@ register int x, y; { int levtyp = levl[x][y].typ; - if (levtyp == DRAWBRIDGE_UP) { - /* use underlying terrain in front of closed drawbridge */ - switch (levl[x][y].drawbridgemask & DB_UNDER) { - case DB_MOAT: levtyp = MOAT; break; - case DB_LAVA: levtyp = LAVAPOOL; break; - case DB_ICE: levtyp = ICE; break; - case DB_FLOOR: levtyp = ROOM; break; - } - } + /* use underlying terrain in front of closed drawbridge */ + if (levtyp == DRAWBRIDGE_UP) + levtyp = db_under_typ(levl[x][y].drawbridgemask); + return (boolean)(ACCESSIBLE(levtyp) && !closed_door(x, y)); }