fixed potions not working properly
need to test: vampire draining
This commit is contained in:
@ -67,7 +67,7 @@ void character::discard_level_effects() {
|
|||||||
tmp.reserve(effects.size());
|
tmp.reserve(effects.size());
|
||||||
|
|
||||||
for (auto p : effects)
|
for (auto p : effects)
|
||||||
if (p->get_duration() != -1)
|
if (p->get_duration() > 0)
|
||||||
tmp.push_back(p);
|
tmp.push_back(p);
|
||||||
|
|
||||||
tmp.shrink_to_fit();
|
tmp.shrink_to_fit();
|
||||||
|
@ -144,7 +144,6 @@ game_result game::run() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
player->start_turn();
|
|
||||||
player->calc_effects();
|
player->calc_effects();
|
||||||
|
|
||||||
if (player->is_dead())
|
if (player->is_dead())
|
||||||
|
@ -110,7 +110,10 @@ long_result player_base::interpret_command(level *lvl, game_command cmd) {
|
|||||||
if (cmd == game_command_terminate) {
|
if (cmd == game_command_terminate) {
|
||||||
return {result::terminate, ""};
|
return {result::terminate, ""};
|
||||||
} else if (cmd >= move_north && cmd <= move_southwest) {
|
} else if (cmd >= move_north && cmd <= move_southwest) {
|
||||||
return move(lvl, pos + MOVE[cmd - move_north]);
|
auto res = move(lvl, pos + MOVE[cmd - move_north]);
|
||||||
|
gold g = get_gold_at(pos, lvl->get_glist());
|
||||||
|
gold_cnt += g.amount;
|
||||||
|
return res;
|
||||||
} else if (cmd >= apply_north && cmd <= apply_southwest) {
|
} else if (cmd >= apply_north && cmd <= apply_southwest) {
|
||||||
return apply(get_potion_at(pos + MOVE[cmd - apply_north],
|
return apply(get_potion_at(pos + MOVE[cmd - apply_north],
|
||||||
lvl->get_plist()));
|
lvl->get_plist()));
|
||||||
|
@ -11,7 +11,7 @@ boost_atk::boost_atk(const position &pos):
|
|||||||
|
|
||||||
void boost_atk::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
void boost_atk::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
||||||
fraction &base_hit_rate) {
|
fraction &base_hit_rate) {
|
||||||
if (remaining_duration > 0) {
|
if (remaining_duration != 0) {
|
||||||
if (race == rdrow)
|
if (race == rdrow)
|
||||||
ATK += BOOST_ATK_DROW;
|
ATK += BOOST_ATK_DROW;
|
||||||
else
|
else
|
||||||
|
@ -12,7 +12,7 @@ boost_def::boost_def(const position &pos):
|
|||||||
|
|
||||||
void boost_def::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
void boost_def::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
||||||
fraction &base_hit_rate) {
|
fraction &base_hit_rate) {
|
||||||
if (remaining_duration > 0) {
|
if (remaining_duration != 0) {
|
||||||
if (race == rdrow)
|
if (race == rdrow)
|
||||||
DEF += BOOST_DEF_DROW;
|
DEF += BOOST_DEF_DROW;
|
||||||
else
|
else
|
||||||
|
@ -8,7 +8,7 @@ poison_health::poison_health(const position &pos):
|
|||||||
|
|
||||||
void poison_health::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
void poison_health::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
||||||
fraction &base_hit_rate) {
|
fraction &base_hit_rate) {
|
||||||
if (remaining_duration > 0) {
|
if (remaining_duration != 0) {
|
||||||
if (race == rdrow)
|
if (race == rdrow)
|
||||||
HP = std::max(HP - 7, 0);
|
HP = std::max(HP - 7, 0);
|
||||||
else
|
else
|
||||||
|
@ -4,11 +4,11 @@
|
|||||||
#include "../constants.h"
|
#include "../constants.h"
|
||||||
|
|
||||||
restore_health::restore_health(const position &pos):
|
restore_health::restore_health(const position &pos):
|
||||||
potion{potion_type::restore_health, -1, pos} {}
|
potion{potion_type::restore_health, 1, pos} {}
|
||||||
|
|
||||||
void restore_health::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
void restore_health::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
||||||
fraction &base_hit_rate) {
|
fraction &base_hit_rate) {
|
||||||
if (remaining_duration > 0) {
|
if (remaining_duration != 0) {
|
||||||
if (race == rdrow)
|
if (race == rdrow)
|
||||||
HP = std::min(HP + 7, MAX_HP[race]);
|
HP = std::min(HP + 7, MAX_HP[race]);
|
||||||
else
|
else
|
||||||
|
@ -11,7 +11,7 @@ wound_atk::wound_atk(const position &pos):
|
|||||||
|
|
||||||
void wound_atk::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
void wound_atk::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
||||||
fraction &base_hit_rate) {
|
fraction &base_hit_rate) {
|
||||||
if (remaining_duration > 0) {
|
if (remaining_duration != 0) {
|
||||||
if (race == rdrow)
|
if (race == rdrow)
|
||||||
ATK = std::max(ATK - WOUND_ATK_DROW, 0);
|
ATK = std::max(ATK - WOUND_ATK_DROW, 0);
|
||||||
else
|
else
|
||||||
|
@ -11,7 +11,7 @@ wound_def::wound_def(const position &pos):
|
|||||||
|
|
||||||
void wound_def::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
void wound_def::apply(const enum race &race, int &HP, int &ATK, int &DEF,
|
||||||
fraction &base_hit_rate) {
|
fraction &base_hit_rate) {
|
||||||
if (remaining_duration > 0) {
|
if (remaining_duration != 0) {
|
||||||
if (race == rdrow)
|
if (race == rdrow)
|
||||||
DEF = std::max(DEF - WOUND_DEF_DROW, 0);
|
DEF = std::max(DEF - WOUND_DEF_DROW, 0);
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user