36 lines
850 B
C++
36 lines
850 B
C++
#include "vampire.h"
|
|
|
|
vampire::vampire(RNG *rng, const position &pos):
|
|
character{rng, race::rvampire, pos} {
|
|
gold = 0;
|
|
hostile = true;
|
|
}
|
|
|
|
result vampire::attack(const direction dir, character_list &chlist) {
|
|
position tmp{pos + MOVE[dir]};
|
|
|
|
for (auto &ch : chlist)
|
|
if (tmp == ch->get_position()) {
|
|
auto res = ch->get_hit(race, ATK, base_hit_rate);
|
|
|
|
if (res != result::miss) {
|
|
HP += GAIN_HP;
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
return result::fine;
|
|
}
|
|
|
|
result vampire::get_hit(const enum race &race, const int atk,
|
|
const fraction hitrate) {
|
|
if (rng->trial(hitrate))
|
|
HP = std::max(HP - calc_dmg(atk, DEF), 0);
|
|
|
|
if (HP == 0)
|
|
return result::died;
|
|
|
|
return result::hit;
|
|
}
|