3 * Summary: User-accessible monster info.
17 #define MONINF_METATABLE "monster.info"
19 void lua_push_moninf(lua_State
*ls
, monster_info
*mi
)
21 monster_info
**miref
=
22 clua_new_userdata
<monster_info
*>(ls
, MONINF_METATABLE
);
23 *miref
= new monster_info(*mi
);
26 #define MONINF(ls, n, var) \
27 monster_info *var = *(monster_info **) \
28 luaL_checkudata(ls, n, MONINF_METATABLE)
30 #define MIRET1(type, field, cfield) \
31 static int moninf_get_##field(lua_State *ls) \
34 lua_push##type(ls, mi->cfield); \
38 #define MIREG(field) { #field, moninf_get_##field }
40 MIRET1(number
, damage_level
, dam
)
41 MIRET1(boolean
, is_safe
, is(MB_SAFE
))
42 MIRET1(string
, mname
, mname
.c_str())
43 MIRET1(number
, type
, type
)
44 MIRET1(number
, base_type
, base_type
)
45 MIRET1(number
, number
, number
)
46 MIRET1(number
, colour
, colour
)
51 int num
= luaL_checknumber(ls
, 2);
52 lua_pushboolean(ls
, mi
->is(num
));
56 LUAFN(moninf_get_damage_desc
)
59 std::string s
= mi
->damage_desc();
60 lua_pushstring(ls
, s
.c_str());
64 LUAFN(moninf_get_desc
)
69 mi
->to_string(1, desc
, col
);
70 lua_pushstring(ls
, desc
.c_str());
74 static const struct luaL_reg moninf_lib
[] =
90 // XXX: unify with directn.cc/h
91 // This uses relative coordinates with origin the player.
92 bool in_show_bounds(const coord_def
&s
)
94 return (s
.rdist() <= ENV_SHOW_OFFSET
);
97 LUAFN(mi_get_monster_at
)
100 coord_def p
= player2grid(s
);
101 if (!you
.see_cell(p
))
103 if (env
.mgrid(p
) == NON_MONSTER
)
105 monster
* m
= &env
.mons
[env
.mgrid(p
)];
106 if (!m
->visible_to(&you
))
109 lua_push_moninf(ls
, &mi
);
113 static const struct luaL_reg mon_lib
[] =
115 { "get_monster_at", mi_get_monster_at
},
120 void cluaopen_moninf(lua_State
*ls
)
122 clua_register_metatable(ls
, MONINF_METATABLE
, moninf_lib
,
123 lua_object_gc
<monster_info
>);
124 luaL_openlib(ls
, "monster", mon_lib
, 0);