]> granicus.if.org Git - nethack/commitdiff
Fix flipping non-existent stairs
authorPasi Kallinen <paxed@alt.org>
Sat, 7 Mar 2020 15:05:39 +0000 (17:05 +0200)
committerPasi Kallinen <paxed@alt.org>
Sat, 7 Mar 2020 15:07:10 +0000 (17:07 +0200)
If the stair or ladder x coord is 0, it doesn't exist.
Flipping it, caused "u_on_newpos: trying to place hero off map <80,0>"
when coming back up from the valley into the castle, and the
castle was flipped.

Fixes #331

src/sp_lev.c

index 2c282caf7ad0eac3029990c551fde4943309d814..b4dedd1468819cdf1a0773b4b2d5d582a41a2809 100755 (executable)
@@ -461,18 +461,28 @@ boolean extras;
 
     /* stairs and ladders */
     if (flp & 1) {
-       yupstair = FlipY(yupstair);
-       ydnstair = FlipY(ydnstair);
-       yupladder = FlipY(yupladder);
-       ydnladder = FlipY(ydnladder);
-        g.sstairs.sy = FlipY(g.sstairs.sy);
+        if (xupstair)
+            yupstair = FlipY(yupstair);
+        if (xdnstair)
+            ydnstair = FlipY(ydnstair);
+        if (xupladder)
+            yupladder = FlipY(yupladder);
+        if (xdnladder)
+            ydnladder = FlipY(ydnladder);
+        if (g.sstairs.sx)
+            g.sstairs.sy = FlipY(g.sstairs.sy);
     }
     if (flp & 2) {
-       xupstair = FlipX(xupstair);
-       xdnstair = FlipX(xdnstair);
-       xupladder = FlipX(xupladder);
-       xdnladder = FlipX(xdnladder);
-        g.sstairs.sx = FlipX(g.sstairs.sx);
+        if (xupstair)
+            xupstair = FlipX(xupstair);
+        if (xdnstair)
+            xdnstair = FlipX(xdnstair);
+        if (xupladder)
+            xupladder = FlipX(xupladder);
+        if (xdnladder)
+            xdnladder = FlipX(xdnladder);
+        if (g.sstairs.sx)
+            g.sstairs.sx = FlipX(g.sstairs.sx);
     }
 
     /* traps */