git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9720 c06c8d41-db1a-0410-9941-cceddc491573
EGOIFEAXIWSCOQ5RHOXNA45JN6HNUI2KOPLGWGPJSXA7EXIAJ6QQC
7IERR3KESLBDHEMGSFRYGA66PZBPGKPUGMFDCSFR3WDX7RXD5OTAC
LWYEKDQLOPEBT7MNRGKJHJDNWRPWOMYSEDSD7GSD3PPODU7DV5HQC
X7MFMKQTNZ2IWBFVGS6WQV7NRNKJ3DWQAW2X7IQMFQQXW24AHPZQC
6IHRQWBU55WYBVB7K5HDJSBISE3J3VILUCMQ6WYOBUZ43DLOQ6VQC
SM6YRPYZS6LMDQA6X3VAOK2PGMUFKPD7JMWJISOQSMX2CBR4ISPAC
DUFJKFM5KBCM4272ZKLBPGKHLMDLK6RABUNTDEWRZULTKDTHHSBAC
IHV7JHD4E67NEGLZEO3FPQGJPJF3IAV6QV5A63FPG4SU2VRFV47QC
SCC6F4PQTDQXFHBIBC5AW5W4AP5VNARSPX6AWIUXGV76GBZDHA6QC
NKONHW4JNY6HP2M63MNPM3H64ZWSUNUT5FX2STW4KTS4AMXJXXVQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
W52PCSHX72WAMWKG6L4BPUBVMO6E72KYYBNKAA7554KNOTY6V7WQC
local d = 300 - 10 * zig().depth
return "place:Elf:$ w:" .. d .. " / deep elf sorcerer / " ..
"deep elf blademaster / deep elf master archer / " ..
"deep elf annihilator / deep elf demonologist"
end))
local d = 300 - 10 * zig().depth
return "place:Elf:$ w:" .. d .. " / deep elf sorcerer / " ..
"deep elf blademaster / deep elf master archer / " ..
"deep elf annihilator / deep elf demonologist"
end))
local d = 310 - 10 * zig().depth
local e = math.max(0, zig().depth - 20)
return "place:Orc:$ w:" .. d .. " / orc warlord / orc knight / " ..
"orc high priest w:5 / orc sorcerer w:5 / stone giant / " ..
"moth of wrath w:" .. e
end))
local d = 310 - 10 * zig().depth
local e = math.max(0, zig().depth - 20)
return "place:Orc:$ w:" .. d .. " / orc warlord / orc knight / " ..
"orc high priest w:5 / orc sorcerer w:5 / stone giant / " ..
"moth of wrath w:" .. e
end))
// We currently permit no set operations on monsters
static const char *_monster_behaviour_names[] = {
"sleep",
"wander",
"seek",
"flee",
"cornered",
"panic",
"lurk"
};
static beh_type behaviour_by_name(const std::string &name) {
ASSERT(ARRAYSZ(_monster_behaviour_names) == NUM_BEHAVIOURS);
for (unsigned i = 0; i < ARRAYSZ(_monster_behaviour_names); ++i)
if (name == _monster_behaviour_names[i])
return static_cast<beh_type>(i);
return NUM_BEHAVIOURS;
}
// Changing monster behaviour is for the dungeon builder only,
// never for user scripts.
ASSERT_DLUA;
MonsterWrap *mw = clua_get_userdata< MonsterWrap >(ls, MONS_METATABLE);
if (!mw || !mw->mons)
return (0);
const char *attr = luaL_checkstring(ls, 2);
if (!attr)
return (0);
if (!strcmp(attr, "beh")) {
const beh_type beh =
lua_isnumber(ls, 3) ?
static_cast<beh_type>(lua_tonumber(ls, 3)) :
lua_isstring(ls, 3) ? behaviour_by_name(lua_tostring(ls, 3)) :
NUM_BEHAVIOURS;
if (beh != NUM_BEHAVIOURS)
mw->mons->behaviour = beh;
}
static int mons_behaviour(lua_State *ls) {
if (lua_gettop(ls) < 1)
return (0);
if (lua_isnumber(ls, 1)) {
lua_pushvalue(ls, 1);
return (1);
}
else if (lua_isstring(ls, 1)) {
const beh_type beh = behaviour_by_name(lua_tostring(ls, 1));
if (beh != NUM_BEHAVIOURS) {
lua_pushnumber(ls, beh);
return (1);
}
}
return (0);
}
static const struct luaL_reg mons_lib[] =
{
{ "behaviour", mons_behaviour },
{ NULL, NULL }
};