A2JHMM2QW2Q5OZ4DY4N3VIT53SOPTI434NJB72XBMJD67YJRI4CQC
RJIGO3YE7LKSLASPVA7K6CNWJAPKXD7ENJDURI5GXBGIEXFBBINAC
3A5FX3Y4RPKWQEHKKXZKXZJ7RKV6RKWT7GTR4WFE5UBWKV2HT4RQC
O6QYS2KYXUXMODO3X4SYX7SPZE7AOIFT2XJZHRABMMQFEUN4UXLAC
IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC
7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC
AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC
LE5U6CTXEIETQN5GOVYF2K2VCISRXR3ULORXDKIKWYDVBG5GS3WAC
6LJ7HNA6M2RVACJM4OASJPQAQ42UZGCXW636AVJ4CPICGQZBKLWQC
HWTL2S7OVOJRJAAN66ZTT26HJDAOIW6RKAG5NFMNZJU63CTU2U5AC
NOUFW6ACJ7KPVHSPF4WLRAVOWI7PZ6OAVYDRMI3WYNPXVMGAB3QAC
ZLQAAP55CJ77XIJN3DZVPT4GTTVLIBFJLIJJKI6L5UBSHX7VUK6AC
ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC
QEEJFAETO6B2J4IWDIDCJ5UNIFNNHHG22IWF2CUJRTJJBNE47CWQC
ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC
}
/*
* Functions for library "dgn".
*/
static const char *dgn_event_type_names[] =
{
"none", "turn", "mons_move", "player_move", "leave_level",
"entering_level", "entered_level", "player_los", "player_climb",
"monster_dies", "item_pickup", "item_moved", "feat_change",
"wall_hit"
};
static dgn_event_type dgn_event_type_by_name(const std::string &name)
{
for (unsigned i = 0; i < ARRAYSZ(dgn_event_type_names); ++i)
if (dgn_event_type_names[i] == name)
return static_cast<dgn_event_type>(i? 1 << (i - 1) : 0);
return (DET_NONE);
static const char *dgn_event_type_name(unsigned evmask)
{
if (evmask == 0)
return (dgn_event_type_names[0]);
for (unsigned i = 1; i < ARRAYSZ(dgn_event_type_names); ++i)
if (evmask & (1 << (i - 1)))
return (dgn_event_type_names[i]);
return (dgn_event_type_names[0]);
}
static void dgn_push_event_type(lua_State *ls, int n)
{
if (lua_isstring(ls, n))
lua_pushnumber(ls, dgn_event_type_by_name(lua_tostring(ls, n)));
else if (lua_isnumber(ls, n))
lua_pushstring(ls, dgn_event_type_name(luaL_checkint(ls, n)));
else
lua_pushnil(ls);
}
static int dgn_dgn_event(lua_State *ls)
{
const int start = lua_isuserdata(ls, 1)? 2 : 1;
int retvals = 0;
for (int i = start, nargs = lua_gettop(ls); i <= nargs; ++i)
{
dgn_push_event_type(ls, i);
retvals++;
}
return (retvals);
}
const struct luaL_reg dgn_event_lib[] =
{
{ "dgn_event_type", dgn_dgn_event },
{ NULL, NULL }
};
}
static const char *dgn_event_type_names[] =
{
"none", "turn", "mons_move", "player_move", "leave_level",
"entering_level", "entered_level", "player_los", "player_climb",
"monster_dies", "item_pickup", "item_moved", "feat_change",
"wall_hit"
};
static dgn_event_type dgn_event_type_by_name(const std::string &name)
{
for (unsigned i = 0; i < ARRAYSZ(dgn_event_type_names); ++i)
if (dgn_event_type_names[i] == name)
return static_cast<dgn_event_type>(i? 1 << (i - 1) : 0);
return (DET_NONE);
static const char *dgn_event_type_name(unsigned evmask)
{
if (evmask == 0)
return (dgn_event_type_names[0]);
for (unsigned i = 1; i < ARRAYSZ(dgn_event_type_names); ++i)
if (evmask & (1 << (i - 1)))
return (dgn_event_type_names[i]);
return (dgn_event_type_names[0]);
}
static void dgn_push_event_type(lua_State *ls, int n)
{
if (lua_isstring(ls, n))
lua_pushnumber(ls, dgn_event_type_by_name(lua_tostring(ls, n)));
else if (lua_isnumber(ls, n))
lua_pushstring(ls, dgn_event_type_name(luaL_checkint(ls, n)));
else
lua_pushnil(ls);
}
static int dgn_dgn_event(lua_State *ls)
{
const int start = lua_isuserdata(ls, 1)? 2 : 1;
int retvals = 0;
for (int i = start, nargs = lua_gettop(ls); i <= nargs; ++i)
{
dgn_push_event_type(ls, i);
retvals++;
}
return (retvals);
}