summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/l_moninf.cc
diff options
context:
space:
mode:
authorAdam Borowski <kilobyte@angband.pl>2012-04-04 16:29:36 +0200
committerAdam Borowski <kilobyte@angband.pl>2012-04-04 20:58:48 +0200
commit3924635d30720b588c3fbd6bc2cd57d90775bd5b (patch)
treefc6e4378c5191e92c95f79d1a848c3e5bc8b9153 /crawl-ref/source/l_moninf.cc
parentc76b155cc9ba7be84db12e4378c82354f55a1946 (diff)
downloadcrawl-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.cc35
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),