OSDN Git Service

[Refactor] #40514 have_slow_digest() を calc_bonuses() から分離. / Separated have_slow_dig...
authordeskull <deskull@users.sourceforge.jp>
Thu, 6 Aug 2020 17:00:05 +0000 (02:00 +0900)
committerHourier <hourier@users.sourceforge.jp>
Thu, 6 Aug 2020 17:00:05 +0000 (02:00 +0900)
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 98cef8a..74fb768 100644 (file)
@@ -1249,7 +1249,6 @@ void calc_class_status(player_type *creature_ptr)
             creature_ptr->dis_to_a += creature_ptr->lev / 2 + 5;
         }
 
-        creature_ptr->slow_digest = TRUE;
         creature_ptr->resist_fear = TRUE;
         if (creature_ptr->lev > 19)
             creature_ptr->resist_pois = TRUE;
index d167e29..e75098e 100644 (file)
@@ -174,14 +174,6 @@ void calc_race_status(player_type *creature_ptr)
         case RACE_HALF_TROLL:
             if (creature_ptr->lev > 14) {
                 creature_ptr->regenerate = TRUE;
-                if (creature_ptr->pclass == CLASS_WARRIOR || creature_ptr->pclass == CLASS_BERSERKER) {
-                    creature_ptr->slow_digest = TRUE;
-                    /* Let's not make Regeneration
-                     * a disadvantage for the poor warriors who can
-                     * never learn a spell that satisfies hunger (actually
-                     * neither can rogues, but half-trolls are not
-                     * supposed to play rogues) */
-                }
             }
             break;
         case RACE_AMBERITE:
@@ -240,7 +232,6 @@ void calc_race_status(player_type *creature_ptr)
             creature_ptr->resist_fire = TRUE;
             break;
         case RACE_GOLEM:
-            creature_ptr->slow_digest = TRUE;
             creature_ptr->resist_pois = TRUE;
             break;
         case RACE_SKELETON:
@@ -251,7 +242,6 @@ void calc_race_status(player_type *creature_ptr)
             break;
         case RACE_ZOMBIE:
             creature_ptr->resist_neth = TRUE;
-            creature_ptr->resist_pois = TRUE;
             creature_ptr->slow_digest = TRUE;
             if (creature_ptr->lev > 4)
                 creature_ptr->resist_cold = TRUE;
@@ -267,7 +257,6 @@ void calc_race_status(player_type *creature_ptr)
         case RACE_SPECTRE:
             creature_ptr->resist_neth = TRUE;
             creature_ptr->resist_pois = TRUE;
-            creature_ptr->slow_digest = TRUE;
             creature_ptr->resist_cold = TRUE;
             creature_ptr->pass_wall = TRUE;
             break;
@@ -291,7 +280,6 @@ void calc_race_status(player_type *creature_ptr)
             creature_ptr->resist_conf = TRUE;
             break;
         case RACE_ANDROID:
-            creature_ptr->slow_digest = TRUE;
             creature_ptr->resist_pois = TRUE;
             break;
         case RACE_MERFOLK:
index bdec794..c0dc01c 100644 (file)
@@ -1098,12 +1098,10 @@ void have_levitation(player_type *creature_ptr)
     }
 
     if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU)) {
-        creature_ptr->slow_digest = TRUE;
-        creature_ptr->regenerate = TRUE;
+        creature_ptr->levitation = TRUE;
        }
 
     if (creature_ptr->magicdef) {
-        creature_ptr->levitation = TRUE;
     }
 
     if (creature_ptr->riding) {
@@ -1120,7 +1118,6 @@ void have_levitation(player_type *creature_ptr)
         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_LEVITATION))
             creature_ptr->levitation = TRUE;
@@ -1137,3 +1134,44 @@ void have_can_swim(player_type *creature_ptr)
             creature_ptr->can_swim = TRUE;
     }
 }
+
+void have_slow_digest(player_type *creature_ptr)
+{
+    object_type *o_ptr;
+    BIT_FLAGS flgs[TR_FLAG_SIZE];
+    creature_ptr->slow_digest = FALSE;
+
+    if (creature_ptr->pclass == CLASS_NINJA) {
+        creature_ptr->slow_digest = TRUE;
+    }
+
+       if (creature_ptr->lev > 14 && !creature_ptr->mimic_form && creature_ptr->prace == RACE_HALF_TROLL) {
+        if (creature_ptr->pclass == CLASS_WARRIOR || creature_ptr->pclass == CLASS_BERSERKER) {
+            creature_ptr->slow_digest = TRUE;
+            /* Let's not make Regeneration
+             * a disadvantage for the poor warriors who can
+             * never learn a spell that satisfies hunger (actually
+             * neither can rogues, but half-trolls are not
+             * supposed to play rogues) */
+        }
+    }
+
+    if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU)) {
+        creature_ptr->slow_digest = TRUE;
+    }
+
+    if (!creature_ptr->mimic_form
+        && (creature_ptr->prace == RACE_GOLEM || creature_ptr->prace == RACE_ZOMBIE || creature_ptr->prace == RACE_SPECTRE
+            || creature_ptr->prace == RACE_ANDROID)) {
+        creature_ptr->slow_digest = 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_SLOW_DIGEST))
+            creature_ptr->slow_digest = TRUE;
+    }
+}
index ce19761..0398514 100644 (file)
@@ -44,5 +44,6 @@ void have_sustain_con(player_type *creature_ptr);
 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);
 
 
index 2499163..b0233bc 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->slow_digest = FALSE;
     creature_ptr->regenerate = FALSE;
     creature_ptr->resist_acid = FALSE;
     creature_ptr->resist_elec = FALSE;
@@ -736,6 +735,7 @@ void calc_bonuses(player_type *creature_ptr)
     have_sustain_chr(creature_ptr);
     have_levitation(creature_ptr);
     have_can_swim(creature_ptr);
+    have_slow_digest(creature_ptr);
 
     calc_race_status(creature_ptr);
 
@@ -4467,7 +4467,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->slow_digest = TRUE;
         creature_ptr->regenerate = TRUE;
         creature_ptr->lite = TRUE;
         creature_ptr->resist_acid = TRUE;
@@ -4593,8 +4592,6 @@ 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_SLOW_DIGEST))
-            creature_ptr->slow_digest = TRUE;
         if (have_flag(flgs, TR_REGEN))
             creature_ptr->regenerate = TRUE;