summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/l_mons.cc
diff options
context:
space:
mode:
authorJude Brown <bookofjude@users.sourceforge.net>2009-11-05 11:39:54 +1000
committerJude Brown <bookofjude@users.sourceforge.net>2009-11-05 11:49:30 +1000
commite17c1cb70c27a2262ad684403fc5500962226699 (patch)
tree83b18677e5eea956ce8b203987a555f8591a0b81 /crawl-ref/source/l_mons.cc
parenta9553d73ed4212fedbdb6a1fa40c545de1f97dc2 (diff)
downloadcrawl-ref-e17c1cb70c27a2262ad684403fc5500962226699.tar.gz
crawl-ref-e17c1cb70c27a2262ad684403fc5500962226699.zip
Fix up MDEFN closures, add random monster teleport wrapper.
MDEFN was currently hardcoded to wrap l_mons_do_dismiss, fixed (greensnark). Provide a wrapper for instant random teleport of monsters (restricted to dlua).
Diffstat (limited to 'crawl-ref/source/l_mons.cc')
-rw-r--r--crawl-ref/source/l_mons.cc19
1 files changed, 18 insertions, 1 deletions
diff --git a/crawl-ref/source/l_mons.cc b/crawl-ref/source/l_mons.cc
index 65d72c4ab4..8ace3eb119 100644
--- a/crawl-ref/source/l_mons.cc
+++ b/crawl-ref/source/l_mons.cc
@@ -33,7 +33,7 @@ void push_monster(lua_State *ls, monsters *mons)
static int l_mons_##name(lua_State *ls, monsters *mons, const char *attrs) \
{ \
lua_pushlightuserdata(ls, mons); \
- lua_pushcclosure(ls, l_mons_do_dismiss, 1); \
+ lua_pushcclosure(ls, l_mons_##closure, 1); \
return (1); \
}
@@ -115,6 +115,22 @@ static int l_mons_do_dismiss(lua_State *ls)
MDEFN(dismiss, do_dismiss)
+static int l_mons_do_random_teleport(lua_State *ls)
+{
+ // We should only be able to teleport monsters from dlua.
+ ASSERT_DLUA;
+
+ monsters *mons =
+ util_get_userdata<monsters>(ls, lua_upvalueindex(1));
+ if (mons->alive())
+ {
+ mons->teleport(true);
+ }
+ return (0);
+}
+
+MDEFN(random_teleport, do_random_teleport)
+
MDEF(experience)
{
ASSERT_DLUA;
@@ -137,6 +153,7 @@ static MonsAccessor mons_attrs[] =
{ "meat", l_mons_meat },
{ "dismiss", l_mons_dismiss },
{ "experience", l_mons_experience },
+ { "random_teleport", l_mons_random_teleport }
};
static int monster_get(lua_State *ls)