SpellHex spell_hex(player_ptr);
power = MIN(200, spell_hex.get_revenge_power() * 2);
- if (info)
+ if (info) {
return info_damage(0, 0, power);
+ }
+
if (cast) {
int a = 3 - (player_ptr->pspeed - 100) / 10;
byte r = 3 + randint1(3) + MAX(0, MIN(3, a));
}
hex_revenge_type(player_ptr) = 1;
- hex_revenge_turn(player_ptr) = r;
+ spell_hex.set_revenge_turn(r, true);
spell_hex.set_revenge_power(0, true);
msg_print(_("じっと耐えることにした。", "You decide to endure damage for future retribution."));
add = false;
}
+
if (cont) {
POSITION rad = 2 + (power / 50);
-
- hex_revenge_turn(player_ptr)--;
-
+ spell_hex.set_revenge_turn(1, false);
if ((spell_hex.get_revenge_turn() == 0) || (power >= 200)) {
msg_print(_("我慢が解かれた!", "My patience is at an end!"));
if (power) {
/* Reset */
hex_revenge_type(player_ptr) = 0;
- hex_revenge_turn(player_ptr) = 0;
+ spell_hex.set_revenge_turn(0, true);
spell_hex.set_revenge_power(0, true);
}
}
}
hex_revenge_type(player_ptr) = 2;
- hex_revenge_turn(player_ptr) = r;
+ spell_hex.set_revenge_turn(r, true);
msg_format(_("あなたは復讐を宣告した。あと %d ターン。", "You declare your revenge. %d turns left."), r);
add = false;
}
if (cont) {
- hex_revenge_turn(player_ptr)--;
+ spell_hex.set_revenge_turn(1, false);
if (spell_hex.get_revenge_turn() == 0) {
DIRECTION dir;
{
return this->player_ptr->magic_num2[2];
}
+
+/*!
+ * @brief 復讐の残りターンをセットするか、残りターン数を減らす
+ * @param turn 残りターン (非負整数であること)
+ * @param substitution セットならtrue、ターン減少ならfalse
+ */
+void SpellHex::set_revenge_turn(byte turn, bool substitution)
+{
+ if (substitution) {
+ this->player_ptr->magic_num2[2] = turn;
+ } else {
+ this->player_ptr->magic_num2[2] -= turn;
+ }
+}
int32_t get_revenge_power() const;
void set_revenge_power(int32_t power, bool substitution);
byte get_revenge_turn() const;
+ void set_revenge_turn(byte power, bool substitution);
private:
player_type *player_ptr;
void gain_exp_master(const int spell);
};
-#define hex_revenge_turn(P_PTR) ((P_PTR)->magic_num2[2])
#define hex_revenge_type(P_PTR) ((P_PTR)->magic_num2[1])