diff options
author | Adam Borowski <kilobyte@angband.pl> | 2012-04-04 16:29:36 +0200 |
---|---|---|
committer | Adam Borowski <kilobyte@angband.pl> | 2012-04-04 20:58:48 +0200 |
commit | 3924635d30720b588c3fbd6bc2cd57d90775bd5b (patch) | |
tree | fc6e4378c5191e92c95f79d1a848c3e5bc8b9153 /crawl-ref/source/l_moninf.cc | |
parent | c76b155cc9ba7be84db12e4378c82354f55a1946 (diff) | |
download | crawl-ref-3924635d30720b588c3fbd6bc2cd57d90775bd5b.tar.gz crawl-ref-3924635d30720b588c3fbd6bc2cd57d90775bd5b.zip |
Add monster.stabbability to lua.
Return a float 0..1 representing the stab bonus.
Diffstat (limited to 'crawl-ref/source/l_moninf.cc')
-rw-r--r-- | crawl-ref/source/l_moninf.cc | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/crawl-ref/source/l_moninf.cc b/crawl-ref/source/l_moninf.cc index 73e5fb99d3..7c0fe1dba4 100644 --- a/crawl-ref/source/l_moninf.cc +++ b/crawl-ref/source/l_moninf.cc @@ -62,6 +62,40 @@ LUAFN(moninf_get_is) return (1); } +static bool cant_see_you(const monster_info *mi) +{ + if (mons_class_flag(mi->type, M_SEE_INVIS)) + return false; + if (mons_class_flag(mi->type, M_SENSE_INVIS) + && (you.pos() - mi->pos).abs() <= 17) + { + return false; + } + if (you.in_water()) + return false; + return you.invisible() || mi->is(MB_BLIND); +} + +LUAFN(moninf_get_stabbability) +{ + MONINF(ls, 1, mi); + if (mi->is(MB_DORMANT) || mi->is(MB_SLEEPING) || mi->is(MB_PARALYSED)) + lua_pushnumber(ls, 1.0); + else if (mi->is(MB_CAUGHT) || mi->is(MB_WEBBED) || mi->is(MB_PETRIFYING) + || mi->is(MB_PETRIFIED)) + { + lua_pushnumber(ls, 0.5); + } + else if (mi->is(MB_CONFUSED) || mi->is(MB_FLEEING) || cant_see_you(mi)) + lua_pushnumber(ls, 0.25); + else if (mi->is(MB_DISTRACTED)) + lua_pushnumber(ls, 0.16666666); + else + lua_pushnumber(ls, 0); + + return (1); +} + LUAFN(moninf_get_is_very_stabbable) { MONINF(ls, 1, mi); @@ -132,6 +166,7 @@ static const struct luaL_reg moninf_lib[] = MIREG(is_safe), MIREG(is_firewood), MIREG(is_very_stabbable), + MIREG(stabbability), MIREG(holiness), MIREG(attitude), MIREG(threat), |