]> granicus.if.org Git - nethack/commitdiff
Fix medusa levels
authorPasi Kallinen <paxed@alt.org>
Fri, 1 Apr 2022 05:50:22 +0000 (08:50 +0300)
committerPasi Kallinen <paxed@alt.org>
Fri, 1 Apr 2022 05:53:15 +0000 (08:53 +0300)
My recent commit broke medusa-3 and medusa-4, so fix those.

Make des.stair and des.ladder also accept hash-coordinate:
  des.stair("up", {8, 10});

dat/medusa-3.lua
dat/medusa-4.lua
doc/lua.adoc
src/sp_lev.c
test/test_des.lua

index 143c1f86b0ab030b248c3ccf4563a3815745b0fa..7df1fa1ffb0c32e8fa522886c934a229f5a55730 100644 (file)
@@ -36,6 +36,8 @@ place:set(08,06);
 place:set(66,05);
 place:set(46,15);
 
+local medloc = place:rndcoord(1);
+
 des.region(selection.area(00,00,74,19),"lit")
 -- fixup_special hack: the first room defined on a Medusa level gets some
 -- leaderboard statues, use arrival_room to force it to be a room even though
@@ -54,7 +56,7 @@ des.non_diggable(selection.area(44,13,48,17))
 des.teleport_region({ region = {33,02,38,07}, dir="down" })
 des.levregion({ region = {32,01,39,07}, type="stair-up" });
 
-des.stair("down", place:rndcoord(1))
+des.stair("down", medloc);
 des.door("locked",08,08)
 des.door("locked",64,05)
 des.door("random",50,13)
@@ -100,7 +102,7 @@ des.trap("board")
 des.trap("board")
 des.trap()
 --
-des.monster({ id = "Medusa", x=mx, y=my, asleep=1 })
+des.monster({ id = "Medusa", coord=medloc, asleep=1 })
 des.monster("giant eel")
 des.monster("giant eel")
 des.monster("jellyfish")
index d716fe952c2abaad7b9d1a08b7455fcd2c8111ca..657765a208e15b3123ac2f101b1c43198481a6b0 100644 (file)
@@ -99,7 +99,7 @@ for i=1,7 do
    des.trap()
 end
 --
-des.monster("Medusa", mx, my)
+des.monster("Medusa", place:rndcoord(1))
 des.monster("kraken", 07,07)
 --
 -- the nesting dragon
index a550b35a0c2235fdfe113ae0492005467730083f..cb0996719984d124ebe41451979c7b62ba33faad 100644 (file)
@@ -488,6 +488,7 @@ Example:
 
  des.ladder("down");
  des.ladder("up", 6,10);
+ des.ladder("up", {6,10});
  des.ladder({ x=11, y=05, dir="down" });
  des.ladder({ coord={11, 05}, dir="down" });
 
@@ -785,6 +786,7 @@ Example:
  des.stair({ dir = "down", x = 4, y = 7 });
  des.stair({ dir = "down", coord = {5,12} });
  des.stair("down", 4, 7);
+ des.stair("down", {4, 7});
 
 === teleport_region
 
index 59feea2cb28fce821838ea33b2f77391372c064c..48f7a40474f475b4200b16ca0be2b7acb7bc54d3 100644 (file)
@@ -3833,27 +3833,29 @@ l_create_stairway(lua_State *L, boolean using_ladder)
     struct trap *badtrap;
 
     long scoord;
-    lua_Integer ax = -1, ay = -1;
-    int up;
+    int up = 0; /* default is down */
     int ltype = lua_type(L, 1);
 
     create_des_coder();
 
-    if (argc == 1 && ltype == LUA_TSTRING) {
-        up = stairdirs2i[luaL_checkoption(L, 1, "down", stairdirs)];
-    } else if (argc == 3 && ltype == LUA_TSTRING) {
-        up = stairdirs2i[luaL_checkoption(L, 1, "down", stairdirs)];
-        ax = luaL_checkinteger(L, 2);
-        ay = luaL_checkinteger(L, 3);
-    } else {
+    if (argc == 1 && ltype == LUA_TTABLE) {
+        lua_Integer ax = -1, ay = -1;
         lcheck_param_table(L);
         get_table_xy_or_coord(L, &ax, &ay);
         up = stairdirs2i[get_table_option(L, "dir", "down", stairdirs)];
+        x = ax;
+        y = ay;
+    } else {
+        int ix = -1, iy = -1;
+        if (argc > 0 && ltype == LUA_TSTRING) {
+            up = stairdirs2i[luaL_checkoption(L, 1, "down", stairdirs)];
+            lua_remove(L, 1);
+        }
+        nhl_get_xy_params(L, &ix, &iy);
+        x = ix;
+        y = iy;
     }
 
-    x = ax;
-    y = ay;
-
     if (x == -1 && y == -1) {
         set_ok_location_func(good_stair_loc);
         scoord = SP_COORD_PACK_RANDOM(0);
index 4a5698aed2d1c44f15d16be7e38daeb450fc5740..d0163f2c500a4b0fea7691cb250b87eebc8a481a 100644 (file)
@@ -400,8 +400,10 @@ function test_stair()
    des.reset_level();
    des.level_init();
 
+   des.stair();
    des.stair("up");
    des.stair("down", 4, 7);
+   des.stair("down", {7, 7});
    des.stair({ dir = "down", x = 5,  y = 7 });
    des.stair({ dir = "down", coord = {6, 7} });
 end
@@ -410,8 +412,10 @@ function test_ladder()
    des.reset_level();
    des.level_init();
 
+   des.ladder();
    des.ladder("up");
    des.ladder("down", 4, 7);
+   des.ladder("down", {7, 7});
    des.ladder({ dir = "down", x = 5,  y = 7 });
    des.ladder({ dir = "down", coord = {6, 7} });
 end