git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3150 c06c8d41-db1a-0410-9941-cceddc491573
TVC7W7C2XKBQSD2IJFMWFVGXZAOD4EUOW43NAQTOF5KFMAUOJABQC
S4W5EBZLFX3HA3JNR524LF5RJ7PAPMSMN3FVRZNLQZY4QNEILGLQC
FCZSQBKDNMJZRJS2LWQQWLUFGOXSKXDJZQIHC7L5S7HXCXQPOMMAC
UIRWVLX5LDNWURTZOG7EFLXE5OOEL4XBPSLSUHUQSKHC4A7WCVLQC
K7SLUAS7TC2T6AG5HMZHVMD4ANGAI42FBSZTB6CTHLSGY2CRY4LQC
PM65H4V4GNPVIJFUQW57DC3VDB7TRUUNXKVZONQKEFZSK3AXX5GQC
AS2IQQJNNCEQNXXKTGYHLB7RO3ZKCF4F7GK6FJH66BOOKDDRGNIQC
OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
NFOXLH722RGWYY5D63VV6SF2XEJBEOQEFQME6FSA4HZRK3CPLSRQC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
QS3ZRS3E6KL3YJHPKYEWCWJYRBJSXD5OOYF6Y25HZVECGPJRDB5QC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
5XSXMOBGXFLTIQE6WDXWWFVDOTUPZSIQ2FWT3YI5QMVU6D76IUYQC
OP6CTAKWCAU64JXQ3USQYR5E5IFHQHNCACII5UMVRXUTZXJQOAZAC
CDKRLJIGVWQE2PMHCSLJBLYQEK7JYC4LQM7H2X3O6NMJMCCDRVIAC
monsterentry *entry = get_monster_data(mon->type);
dungeon_feature_type feat = grd[mon->x][mon->y];
if (feat >= DNGN_LAVA && feat <= DNGN_SHALLOW_WATER
&& !mon->airborne())
{
mon->speed_increment -= entry->energy_usage.swim;
}
else
mon->speed_increment -= entry->energy_usage.move;
const dungeon_feature_type feat = grd[mon->x][mon->y];
// FIXME: Replace check with mons_is_swimming()?
mon->lose_energy(
feat >= DNGN_LAVA && feat <= DNGN_SHALLOW_WATER
&& !mon->airborne() ? EUT_SWIM : EUT_MOVE );
monsterentry* entry = get_monster_data(type);
int delta = speed * entry->energy_usage.pickup_percent / 100;
if (speed_increment > 25 && delta < speed_increment)
speed_increment -= delta;
if (const monsterentry* entry = find_monsterentry())
{
const int delta = speed * entry->energy_usage.pickup_percent / 100;
if (speed_increment > 25 && delta < speed_increment)
speed_increment -= delta;
}
}
const monsterentry *monsters::find_monsterentry() const
{
return (type == -1 || type == MONS_PROGRAM_BUG) ? NULL
: get_monster_data(type);
}
int monsters::action_energy(energy_use_type et) const
{
if (const monsterentry *me = find_monsterentry())
{
const mon_energy_usage &mu = me->energy_usage;
switch (et)
{
case EUT_MOVE: return mu.move;
case EUT_SWIM: return mu.swim;
case EUT_MISSILE: return mu.missile;
case EUT_ITEM: return mu.item;
case EUT_SPECIAL: return mu.special;
case EUT_SPELL: return mu.spell;
case EUT_ATTACK: return mu.attack;
case EUT_PICKUP: return mu.pickup_percent;
}
}
return 10;
if (attacker->atype() == ACT_MONSTER)
{
// Make sure the monster uses up some energy, even though
// it didn't actually attack.
monsterentry *entry = get_monster_data(atk->type);
atk->speed_increment -= entry->energy_usage.attack;
}
// Make sure the monster uses up some energy, even though
// it didn't actually attack.
attacker->lose_energy(EUT_ATTACK);