OSDN Git Service

[Refactor] #40514 have_regenerate() を calc_bonuses() から分離. / Separated have_regenerat...
authordeskull <deskull@users.sourceforge.jp>
Fri, 7 Aug 2020 17:58:54 +0000 (02:58 +0900)
committerdeskull <deskull@users.sourceforge.jp>
Fri, 7 Aug 2020 17:58:54 +0000 (02:58 +0900)
src/mutation/mutation-calculator.c
src/player/player-class.c
src/player/player-race.c
src/player/player-status-flags.c
src/player/player-status-flags.h
src/player/player-status.c

index a9fc7f4..e4b892a 100644 (file)
@@ -59,9 +59,6 @@ void set_mutation_flags(player_type *creature_ptr)
     if (creature_ptr->muta3 == 0)
         return;
 
-    if (creature_ptr->muta3 & MUT3_FLESH_ROT)
-        creature_ptr->regenerate = FALSE;
-
     if (creature_ptr->muta3 & MUT3_FIRE_BODY) {
         creature_ptr->lite = TRUE;
     }
@@ -72,7 +69,5 @@ void set_mutation_flags(player_type *creature_ptr)
     if (creature_ptr->muta3 & MUT3_FEARLESS)
         creature_ptr->resist_fear = TRUE;
 
-    if (creature_ptr->muta3 & MUT3_REGEN)
-        creature_ptr->regenerate = TRUE;
 
 }
index 74fb768..4fe0d16 100644 (file)
@@ -1204,8 +1204,6 @@ void calc_class_status(player_type *creature_ptr)
     case CLASS_WARRIOR:
         if (creature_ptr->lev > 29)
             creature_ptr->resist_fear = TRUE;
-        if (creature_ptr->lev > 44)
-            creature_ptr->regenerate = TRUE;
         break;
     case CLASS_PALADIN:
         if (creature_ptr->lev > 39)
@@ -1232,7 +1230,6 @@ void calc_class_status(player_type *creature_ptr)
         break;
     case CLASS_BERSERKER:
         creature_ptr->shero = 1;
-        creature_ptr->regenerate = TRUE;
         creature_ptr->redraw |= PR_STATUS;
         break;
     case CLASS_NINJA:
index e75098e..2583b6e 100644 (file)
@@ -171,14 +171,6 @@ void calc_race_status(player_type *creature_ptr)
         case RACE_HALF_ORC:
             creature_ptr->resist_dark = TRUE;
             break;
-        case RACE_HALF_TROLL:
-            if (creature_ptr->lev > 14) {
-                creature_ptr->regenerate = TRUE;
-            }
-            break;
-        case RACE_AMBERITE:
-            creature_ptr->regenerate = TRUE;
-            break;
         case RACE_HIGH_ELF:
             creature_ptr->resist_lite = TRUE;
             break;
index c0dc01c..8cfd273 100644 (file)
@@ -1175,3 +1175,62 @@ void have_slow_digest(player_type *creature_ptr)
             creature_ptr->slow_digest = TRUE;
     }
 }
+
+void have_regenerate(player_type *creature_ptr)
+{
+    object_type *o_ptr;
+    BIT_FLAGS flgs[TR_FLAG_SIZE];
+    creature_ptr->regenerate = FALSE;
+
+    if (!creature_ptr->mimic_form) {
+        switch (creature_ptr->prace) {
+        case RACE_HALF_TROLL:
+            if (creature_ptr->lev > 14) {
+                creature_ptr->regenerate = TRUE;
+            }
+            break;
+        case RACE_AMBERITE:
+            creature_ptr->regenerate = TRUE;
+            break;
+        }
+    }
+
+    switch (creature_ptr->pclass) {
+    case CLASS_WARRIOR:
+        if (creature_ptr->lev > 44)
+            creature_ptr->regenerate = TRUE;
+        break;
+    case CLASS_BERSERKER:
+        creature_ptr->regenerate = TRUE;
+        break;
+    }
+
+    if (creature_ptr->muta3 & MUT3_FLESH_ROT)
+        creature_ptr->regenerate = FALSE;
+
+    if (creature_ptr->muta3 & MUT3_REGEN)
+        creature_ptr->regenerate = TRUE;
+
+    if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU)) {
+        creature_ptr->regenerate = TRUE;
+    }
+
+    if (creature_ptr->realm1 == REALM_HEX) {
+        if (hex_spelling(creature_ptr, HEX_DEMON_AURA)) {
+            creature_ptr->regenerate = TRUE;
+        }
+    }
+
+       if (creature_ptr->tim_regen) {
+        creature_ptr->regenerate = TRUE;
+    }
+
+    for (int i = INVEN_RARM; i < INVEN_TOTAL; i++) {
+        o_ptr = &creature_ptr->inventory_list[i];
+        if (!o_ptr->k_idx)
+            continue;
+        object_flags(creature_ptr, o_ptr, flgs);
+        if (have_flag(flgs, TR_REGEN))
+            creature_ptr->regenerate = TRUE;
+    }
+}
index 0398514..5fc7ced 100644 (file)
@@ -45,5 +45,6 @@ void have_sustain_chr(player_type *creature_ptr);
 void have_levitation(player_type *creature_ptr);
 void have_can_swim(player_type *creature_ptr);
 void have_slow_digest(player_type *creature_ptr);
+void have_regenerate(player_type *creature_ptr);
 
 
index b0233bc..1ced990 100644 (file)
@@ -567,7 +567,6 @@ static void clear_creature_bonuses(player_type *creature_ptr)
     creature_ptr->cursed = 0L;
     creature_ptr->impact[0] = FALSE;
     creature_ptr->impact[1] = FALSE;
-    creature_ptr->regenerate = FALSE;
     creature_ptr->resist_acid = FALSE;
     creature_ptr->resist_elec = FALSE;
     creature_ptr->resist_fire = FALSE;
@@ -736,6 +735,7 @@ void calc_bonuses(player_type *creature_ptr)
     have_levitation(creature_ptr);
     have_can_swim(creature_ptr);
     have_slow_digest(creature_ptr);
+    have_regenerate(creature_ptr);
 
     calc_race_status(creature_ptr);
 
@@ -764,13 +764,6 @@ void calc_bonuses(player_type *creature_ptr)
     if (creature_ptr->sh_fire)
         creature_ptr->lite = TRUE;
 
-    if (creature_ptr->realm1 == REALM_HEX) {
-
-        if (hex_spelling(creature_ptr, HEX_DEMON_AURA)) {
-            creature_ptr->regenerate = TRUE;
-        }
-    }
-
     calc_strength_addition(creature_ptr);
     calc_intelligence_addition(creature_ptr);
     calc_wisdom_addition(creature_ptr);
@@ -4467,7 +4460,6 @@ bool is_echizen(player_type *creature_ptr)
 void calc_timelimit_status(player_type *creature_ptr)
 {
     if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU)) {
-        creature_ptr->regenerate = TRUE;
         creature_ptr->lite = TRUE;
         creature_ptr->resist_acid = TRUE;
         creature_ptr->resist_elec = TRUE;
@@ -4511,10 +4503,6 @@ void calc_timelimit_status(player_type *creature_ptr)
             creature_ptr->immune_cold = TRUE;
     }
 
-    if (creature_ptr->tim_regen) {
-        creature_ptr->regenerate = TRUE;
-    }
-
     if (is_hero(creature_ptr) || creature_ptr->shero) {
         creature_ptr->resist_fear = TRUE;
     }
@@ -4592,8 +4580,7 @@ void calc_equipment_status(player_type *creature_ptr)
             creature_ptr->cursed |= TRC_FAST_DIGEST;
         if (have_flag(flgs, TR_SLOW_REGEN))
             creature_ptr->cursed |= TRC_SLOW_REGEN;
-        if (have_flag(flgs, TR_REGEN))
-            creature_ptr->regenerate = TRUE;
+
 
         if (have_flag(flgs, TR_TELEPORT)) {
             if (object_is_cursed(o_ptr))