OSDN Git Service

[Refactor] #1473 Replaced hex_revenge_turn() to set_revenge_turn()
authorHourier <grapefox.whitelucifer.0408@gmail.com>
Sun, 12 Sep 2021 01:37:40 +0000 (10:37 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Tue, 14 Sep 2021 14:07:49 +0000 (23:07 +0900)
src/realm/realm-hex.cpp
src/spell-realm/spells-hex.cpp
src/spell-realm/spells-hex.h

index e46ab72..6c9f813 100644 (file)
@@ -279,8 +279,10 @@ concptr do_hex_spell(player_type *player_ptr, spell_hex_type spell, spell_type m
 
         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));
@@ -291,16 +293,15 @@ concptr do_hex_spell(player_type *player_ptr, spell_hex_type spell, spell_type m
             }
 
             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) {
@@ -313,7 +314,7 @@ concptr do_hex_spell(player_type *player_ptr, spell_hex_type spell, spell_type m
 
                 /* 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);
             }
         }
@@ -864,13 +865,13 @@ concptr do_hex_spell(player_type *player_ptr, spell_hex_type spell, spell_type m
             }
 
             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;
 
index af01aca..3cd8621 100644 (file)
@@ -487,3 +487,17 @@ byte SpellHex::get_revenge_turn() const
 {
     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;
+    }
+}
index 6899492..76e996a 100644 (file)
@@ -30,6 +30,7 @@ public:
     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;
@@ -47,5 +48,4 @@ private:
     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])