Lua: ice theme room and melting ice
Allow the ice theme room to occasionally have melting ice. Add nh.abscoord() to convert room-relative to map-absolute coords.
This commit is contained in:
+10
-1
@@ -73,7 +73,16 @@ themerooms = {
|
|||||||
function()
|
function()
|
||||||
des.room({ type = "themed", filled = 1,
|
des.room({ type = "themed", filled = 1,
|
||||||
contents = function()
|
contents = function()
|
||||||
des.terrain(selection.floodfill(1,1), "I");
|
local ice = selection.floodfill(1,1);
|
||||||
|
des.terrain(ice, "I");
|
||||||
|
if (percent(25)) then
|
||||||
|
local mintime = 1000 - (nh.level_difficulty() * 100);
|
||||||
|
local ice_melter = function(x,y)
|
||||||
|
local ax,ay = nh.abscoord(x,y);
|
||||||
|
nh.start_timer_at(ax,ay, "melt-ice", mintime + nh.rn2(1000));
|
||||||
|
end;
|
||||||
|
ice:iterate(ice_melter);
|
||||||
|
end
|
||||||
end
|
end
|
||||||
});
|
});
|
||||||
end,
|
end,
|
||||||
|
|||||||
@@ -6,6 +6,17 @@
|
|||||||
|
|
||||||
Functions exposed from the NetHack core. They are all in the `nh` table.
|
Functions exposed from the NetHack core. They are all in the `nh` table.
|
||||||
|
|
||||||
|
=== abscoord
|
||||||
|
|
||||||
|
Convert a relative coordinate to absolute.
|
||||||
|
des-routines tend to use relative coordinates, nh and obj use absolute.
|
||||||
|
(This mess is still very much in need of improvement.)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
local ax, ay = nh.abscoord(x, y);
|
||||||
|
|
||||||
|
|
||||||
=== an
|
=== an
|
||||||
|
|
||||||
Returns a string with "a " or "an " prepended to it.
|
Returns a string with "a " or "an " prepended to it.
|
||||||
|
|||||||
@@ -2527,6 +2527,7 @@ extern void selection_do_gradient(struct selectionvar *, long, long, long,
|
|||||||
long, long, long, long, long);
|
long, long, long, long, long);
|
||||||
extern int lspo_reset_level(lua_State *);
|
extern int lspo_reset_level(lua_State *);
|
||||||
extern int lspo_finalize_level(lua_State *);
|
extern int lspo_finalize_level(lua_State *);
|
||||||
|
extern int nhl_abs_coord(lua_State *);
|
||||||
extern void update_croom(void);
|
extern void update_croom(void);
|
||||||
extern const char *get_trapname_bytype(int);
|
extern const char *get_trapname_bytype(int);
|
||||||
extern void l_register_des(lua_State *);
|
extern void l_register_des(lua_State *);
|
||||||
|
|||||||
@@ -1152,6 +1152,8 @@ static const struct luaL_Reg nhl_functions[] = {
|
|||||||
{"stop_timer_at", nhl_timer_stop_at},
|
{"stop_timer_at", nhl_timer_stop_at},
|
||||||
{"start_timer_at", nhl_timer_start_at},
|
{"start_timer_at", nhl_timer_start_at},
|
||||||
|
|
||||||
|
{"abscoord", nhl_abs_coord},
|
||||||
|
|
||||||
{"pline", nhl_pline},
|
{"pline", nhl_pline},
|
||||||
{"verbalize", nhl_verbalize},
|
{"verbalize", nhl_verbalize},
|
||||||
{"menu", nhl_menu},
|
{"menu", nhl_menu},
|
||||||
|
|||||||
@@ -4922,6 +4922,24 @@ l_table_getset_feature_flag(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* convert relative coordinate to absolute */
|
||||||
|
int
|
||||||
|
nhl_abs_coord(lua_State *L)
|
||||||
|
{
|
||||||
|
int argc = lua_gettop(L);
|
||||||
|
xchar x = -1, y = -1;
|
||||||
|
|
||||||
|
if (argc == 2) {
|
||||||
|
x = (xchar) lua_tointeger(L, 1);
|
||||||
|
y = (xchar) lua_tointeger(L, 2);
|
||||||
|
get_location_coord(&x, &y, ANY_LOC, NULL, SP_COORD_PACK(x,y));
|
||||||
|
} else
|
||||||
|
nhl_error(L, "nhl_abs_coord: Wrong args");
|
||||||
|
lua_pushinteger(L, x);
|
||||||
|
lua_pushinteger(L, y);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
/* feature("fountain", x, y); */
|
/* feature("fountain", x, y); */
|
||||||
/* feature("fountain", {x,y}); */
|
/* feature("fountain", {x,y}); */
|
||||||
/* feature({ type="fountain", x=NN, y=NN }); */
|
/* feature({ type="fountain", x=NN, y=NN }); */
|
||||||
|
|||||||
Reference in New Issue
Block a user