git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6526 c06c8d41-db1a-0410-9941-cceddc491573
SYGI2ZUUWAD7IEJ6D6SSDEK5BD7CV4Y6XS4BP7FZJJNUJIFV5IAQC
MHWSAWELF3VEV52PNGAI43GK7OGF5PTYATO4O7ERZ75O7RCRKQRQC
AOAJ6D3OKSELEYKAT55XCVU5LYJ7SMCZKC6DIEGLLB3TF2LEENWQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
542UIZKI65UDRNEMGFFDBWYD5XC7AYLTZ3JZQRR2GHYJALD3YY6QC
22MF6OUN62WDBJR5QFNJTKU7Q5TIQ76XWCEIRBFWAZDMZUSKJGCAC
OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC
TVC7W7C2XKBQSD2IJFMWFVGXZAOD4EUOW43NAQTOF5KFMAUOJABQC
RBAGQ2PB7V5YAM5KSHSZR2E3MLKDSRVM5XYGI2TIXP5QMVBOQHDQC
PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC
3WHI3KM43ZCN4ITJLFQQBQBC4OJPRS7QTBPIQ6QBCUVKRSK476SAC
KR655YT3I3U5DMN5NS3FPUGMDNT4BI56K3SFF2FNJ77C45NFKL5AC
int energy_gained = (monster->speed * you.time_taken) / 10;
// Slow monsters might get 0 here. Maybe we should factor in
// *how* slow it is...but a 10-to-1 move ratio seems more than
// enough.
if (energy_gained == 0 && monster->speed != 0)
energy_gained = 1;
monster->speed_increment += energy_gained;
if (monster->speed > 0)
{
// Randomise to make counting off monster moves harder:
const int energy_gained =
std::max(1, div_rand_round(monster->speed * you.time_taken, 10));
monster->speed_increment += energy_gained;
}
public:
mon_energy_usage(int mv = 10, int sw = 10, int att = 10, int miss = 10,
int spl = 10, int spc = 10, int itm = 10, int pick = 100)
: move(mv), swim(sw), attack(att), missile(miss),
spell(spl), special(spc), item(itm), pickup_percent(pick)
{
}
static mon_energy_usage attack_cost(int cost)
{
mon_energy_usage me;
me.attack = cost;
return me;
}
static mon_energy_usage missile_cost(int cost)
{
mon_energy_usage me;
me.missile = cost;
return me;
}
static mon_energy_usage move_cost(int mv, int sw = 10)
{
const mon_energy_usage me(mv, sw);
return me;
}
mon_energy_usage operator | (const mon_energy_usage &o) const
{
return mon_energy_usage( combine(move, o.move),
combine(swim, o.swim),
combine(attack, o.attack),
combine(missile, o.missile),
combine(spell, o.spell),
combine(special, o.special),
combine(item, o.item),
combine(pickup_percent, o.pickup_percent,
100) );
}
private:
char combine(char a, char b, char def = 10) const {
return (b != def? b : a);
}
case EUT_SWIM: return mu.swim;
case EUT_SWIM:
// [ds] Amphibious monsters get a significant speed boost
// when swimming, as discussed with dpeg. We do not
// distinguish between amphibians that favour land
// (HT_LAND, such as hydras) and those that favour water
// (HT_WATER, such as merfolk), but that's something we
// can think about.
if (mons_class_flag(type, M_AMPHIBIOUS))
return div_rand_round(mu.swim * 7, 10);
else
return mu.swim;
#define DEFAULT_ENERGY {10, 10, 10, 10, 10, 10, 10, 100}
#define MOVE_ENERGY(x) {(x), (x), 10, 10, 10, 10, 10, 100}
static inline mon_energy_usage MOVE_ENERGY(int me)
{
return mon_energy_usage::move_cost(me, me);
}
static inline mon_energy_usage ATTACK_ENERGY(int ae)
{
return mon_energy_usage::attack_cost(ae);
}
static inline mon_energy_usage MISSILE_ENERGY(int ae)
{
return mon_energy_usage::missile_cost(ae);
}
static monsterentry mondata[] = {
};