]> granicus.if.org Git - nethack/commitdiff
Add some stair helper functions
authorPasi Kallinen <paxed@alt.org>
Sat, 8 Feb 2020 15:02:18 +0000 (17:02 +0200)
committerPasi Kallinen <paxed@alt.org>
Sat, 8 Feb 2020 15:08:26 +0000 (17:08 +0200)
include/extern.h
src/cmd.c
src/dig.c
src/dungeon.c

index fb493078c342b3222877e65ef89820acc24b56bf..2e40f60e4c1a9204ef380b090618460e5c21a12b 100644 (file)
@@ -630,6 +630,9 @@ E void FDECL(u_on_sstairs, (int));
 E void NDECL(u_on_upstairs);
 E void NDECL(u_on_dnstairs);
 E boolean FDECL(On_stairs, (XCHAR_P, XCHAR_P));
+E boolean FDECL(On_ladder, (XCHAR_P, XCHAR_P));
+E boolean FDECL(On_stairs_up, (XCHAR_P, XCHAR_P));
+E boolean FDECL(On_stairs_dn, (XCHAR_P, XCHAR_P));
 E void FDECL(get_level, (d_level *, int));
 E boolean FDECL(Is_botlevel, (d_level *));
 E boolean FDECL(Can_fall_thru, (d_level *));
index 34bedb28473b5e68f4e459fef4283c2335053383..4264e1e28e0440cb829cefb969e99e7a23f040b9 100644 (file)
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -3835,17 +3835,13 @@ boolean doit;
         add_herecmd_menuitem(win, dosit,
                              "Sit on the throne");
 
-    if ((u.ux == xupstair && u.uy == yupstair)
-        || (u.ux == g.sstairs.sx && u.uy == g.sstairs.sy && g.sstairs.up)
-        || (u.ux == xupladder && u.uy == yupladder)) {
+    if (On_stairs_up(u.ux, u.uy)) {
         Sprintf(buf, "Go up the %s",
                 (u.ux == xupladder && u.uy == yupladder)
                 ? "ladder" : "stairs");
         add_herecmd_menuitem(win, doup, buf);
     }
-    if ((u.ux == xdnstair && u.uy == ydnstair)
-        || (u.ux == g.sstairs.sx && u.uy == g.sstairs.sy && !g.sstairs.up)
-        || (u.ux == xdnladder && u.uy == ydnladder)) {
+    if (On_stairs_dn(u.ux, u.uy)) {
         Sprintf(buf, "Go down the %s",
                 (u.ux == xupladder && u.uy == yupladder)
                 ? "ladder" : "stairs");
@@ -3955,16 +3951,10 @@ int x, y, mod;
             } else if (IS_THRONE(levl[u.ux][u.uy].typ)) {
                 cmd[0] = cmd_from_func(dosit);
                 return cmd;
-            } else if ((u.ux == xupstair && u.uy == yupstair)
-                       || (u.ux == g.sstairs.sx && u.uy == g.sstairs.sy
-                           && g.sstairs.up)
-                       || (u.ux == xupladder && u.uy == yupladder)) {
+            } else if (On_stairs_up(u.ux, u.uy)) {
                 cmd[0] = cmd_from_func(doup);
                 return cmd;
-            } else if ((u.ux == xdnstair && u.uy == ydnstair)
-                       || (u.ux == g.sstairs.sx && u.uy == g.sstairs.sy
-                           && !g.sstairs.up)
-                       || (u.ux == xdnladder && u.uy == ydnladder)) {
+            } else if (On_stairs_dn(u.ux, u.uy)) {
                 cmd[0] = cmd_from_func(dodown);
                 return cmd;
             } else if ((o = vobj_at(u.ux, u.uy)) != 0) {
index 7d61f687d2b25dd752eff2cdd1b3ec50ca3fe44a..7f08ce170c74f8e7130400f8e0f7d3dd1f5440b8 100644 (file)
--- a/src/dig.c
+++ b/src/dig.c
@@ -1645,8 +1645,7 @@ char *msg;
     } else if (IS_SINK(ltyp)) {
         Strcpy(msg, "A tangled mass of plumbing remains below the sink.");
         return FALSE;
-    } else if ((cc->x == xupladder && cc->y == yupladder) /* ladder up */
-               || (cc->x == xdnladder && cc->y == ydnladder)) { /* " down */
+    } else if (On_ladder(cc->x, cc->y)) {
         Strcpy(msg, "The ladder is unaffected.");
         return FALSE;
     } else {
@@ -1658,15 +1657,8 @@ char *msg;
             supporting = "throne";
         else if (IS_ALTAR(ltyp))
             supporting = "altar";
-        else if ((cc->x == xupstair && cc->y == yupstair)
-                 || (cc->x == g.sstairs.sx && cc->y == g.sstairs.sy
-                     && g.sstairs.up))
-            /* "staircase up" */
-            supporting = "stairs";
-        else if ((cc->x == xdnstair && cc->y == ydnstair)
-                 || (cc->x == g.sstairs.sx && cc->y == g.sstairs.sy
-                     && !g.sstairs.up))
-            /* "staircase down" */
+        else if (On_stairs(cc->x, cc->y))
+            /* staircase up or down. On_ladder handled above. */
             supporting = "stairs";
         else if (ltyp == DRAWBRIDGE_DOWN   /* "lowered drawbridge" */
                  || ltyp == DBWALL)        /* "raised drawbridge" */
index 9546b7c3a5b5a9fab520c5943f77e3229b167271..59473d6c3c395856539968122b0dce5fdbe6a62c 100644 (file)
@@ -1524,6 +1524,32 @@ xchar x, y;
                       || (x == g.sstairs.sx && y == g.sstairs.sy));
 }
 
+boolean
+On_ladder(x, y)
+xchar x, y;
+{
+    return (boolean) ((x == xdnladder && y == ydnladder)
+                      || (x == xupladder && y == yupladder));
+}
+
+boolean
+On_stairs_up(x, y)
+xchar x, y;
+{
+    return ((x == xupstair && y == yupstair)
+            || (x == g.sstairs.sx && y == g.sstairs.sy && g.sstairs.up)
+            || (x == xupladder && y == yupladder));
+}
+
+boolean
+On_stairs_dn(x, y)
+xchar x, y;
+{
+    return ((x == xdnstair && y == ydnstair)
+            || (x == g.sstairs.sx && y == g.sstairs.sy && !g.sstairs.up)
+            || (x == xdnladder && y == ydnladder));
+}
+
 boolean
 Is_botlevel(lev)
 d_level *lev;