OSDN Git Service

[Refactor] #40514 have_resist_pois() を calc_bonuses() から分離. / Separated have_resist_p...
authordeskull <deskull@users.sourceforge.jp>
Sun, 9 Aug 2020 12:50:19 +0000 (21:50 +0900)
committerdeskull <deskull@users.sourceforge.jp>
Sun, 9 Aug 2020 12:50:19 +0000 (21:50 +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 4fe0d16..6394d85 100644 (file)
@@ -1247,8 +1247,6 @@ void calc_class_status(player_type *creature_ptr)
         }
 
         creature_ptr->resist_fear = TRUE;
-        if (creature_ptr->lev > 19)
-            creature_ptr->resist_pois = TRUE;
         if (creature_ptr->lev > 44) {
             creature_ptr->oppose_pois = 1;
             creature_ptr->redraw |= PR_STATUS;
index e9889f5..88d8b05 100644 (file)
@@ -139,7 +139,6 @@ void calc_race_status(player_type *creature_ptr)
         case MIMIC_DEMON_LORD:
             creature_ptr->resist_chaos = TRUE;
             creature_ptr->resist_neth = TRUE;
-            creature_ptr->resist_pois = TRUE;
             creature_ptr->resist_conf = TRUE;
             creature_ptr->resist_disen = TRUE;
             creature_ptr->resist_nexus = TRUE;
@@ -148,7 +147,6 @@ void calc_race_status(player_type *creature_ptr)
         case MIMIC_VAMPIRE:
             creature_ptr->resist_dark = TRUE;
             creature_ptr->resist_neth = TRUE;
-            creature_ptr->resist_pois = TRUE;
             if (creature_ptr->pclass != CLASS_NINJA)
                 creature_ptr->lite = TRUE;
             break;
@@ -199,16 +197,8 @@ void calc_race_status(player_type *creature_ptr)
         case RACE_DARK_ELF:
             creature_ptr->resist_dark = TRUE;
             break;
-        case RACE_DRACONIAN:
-            if (creature_ptr->lev > 34)
-                creature_ptr->resist_pois = TRUE;
-            break;
-        case RACE_GOLEM:
-            creature_ptr->resist_pois = TRUE;
-            break;
         case RACE_SKELETON:
             creature_ptr->resist_shard = TRUE;
-            creature_ptr->resist_pois = TRUE;
             break;
         case RACE_ZOMBIE:
             creature_ptr->resist_neth = TRUE;
@@ -217,7 +207,6 @@ void calc_race_status(player_type *creature_ptr)
         case RACE_VAMPIRE:
             creature_ptr->resist_dark = TRUE;
             creature_ptr->resist_neth = TRUE;
-            creature_ptr->resist_pois = TRUE;
             if (creature_ptr->pclass != CLASS_NINJA)
                 creature_ptr->lite = TRUE;
             break;
@@ -244,9 +233,6 @@ void calc_race_status(player_type *creature_ptr)
         case RACE_KUTAR:
             creature_ptr->resist_conf = TRUE;
             break;
-        case RACE_ANDROID:
-            creature_ptr->resist_pois = TRUE;
-            break;
         case RACE_MERFOLK:
             creature_ptr->resist_water = TRUE;
             break;
index 5606d55..0a07d4d 100644 (file)
@@ -1520,10 +1520,50 @@ void have_resist_cold(player_type *creature_ptr)
             creature_ptr->resist_cold = TRUE;
     }
 
-
     if (creature_ptr->immune_cold)
         creature_ptr->resist_cold = TRUE;
+}
+
+void have_resist_pois(player_type *creature_ptr)
+{
+    object_type *o_ptr;
+    BIT_FLAGS flgs[TR_FLAG_SIZE];
+    creature_ptr->resist_pois = FALSE;
+
+    if (creature_ptr->pclass == CLASS_NINJA && creature_ptr->lev > 19)
+        creature_ptr->resist_pois = TRUE;
 
+    if (creature_ptr->mimic_form == MIMIC_VAMPIRE || creature_ptr->mimic_form == MIMIC_DEMON_LORD) {
+        creature_ptr->resist_pois = TRUE;
+    }
+
+    if (!creature_ptr->mimic_form && creature_ptr->prace == RACE_DRACONIAN && creature_ptr->lev > 34) {
+        creature_ptr->resist_pois = TRUE;
+    }
 
+    if (!creature_ptr->mimic_form
+        && (creature_ptr->prace == RACE_GOLEM || creature_ptr->prace == RACE_SKELETON || creature_ptr->prace == RACE_VAMPIRE
+            || creature_ptr->prace == RACE_SPECTRE || creature_ptr->prace == RACE_ANDROID)) {
+        creature_ptr->resist_pois = TRUE;
+    }
+
+    if (creature_ptr->special_defense & KAMAE_SEIRYU) {
+        creature_ptr->resist_pois = TRUE;
+    }
+
+       if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU)) {
+        creature_ptr->resist_pois = 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_RES_POIS))
+            creature_ptr->resist_pois = TRUE;
+    }
 }
 
index b44c4d2..fed5656 100644 (file)
@@ -53,5 +53,6 @@ void have_resist_acid(player_type *creature_ptr);
 void have_resist_elec(player_type *creature_ptr);
 void have_resist_fire(player_type *creature_ptr);
 void have_resist_cold(player_type *creature_ptr);
+void have_resist_pois(player_type *creature_ptr);
 
 
index 8f3da0b..f2ab73b 100644 (file)
@@ -560,7 +560,6 @@ static void delayed_visual_update(player_type *player_ptr)
  */
 static void clear_creature_bonuses(player_type *creature_ptr)
 {
-    creature_ptr->resist_pois = FALSE;
     creature_ptr->resist_conf = FALSE;
     creature_ptr->resist_sound = FALSE;
     creature_ptr->resist_lite = FALSE;
@@ -732,6 +731,7 @@ void calc_bonuses(player_type *creature_ptr)
     have_resist_elec(creature_ptr);
     have_resist_fire(creature_ptr);
     have_resist_cold(creature_ptr);
+    have_resist_pois(creature_ptr);
 
     calc_race_status(creature_ptr);
 
@@ -2071,10 +2071,7 @@ static void calc_num_blow(player_type *creature_ptr, int i)
             creature_ptr->dis_to_d[i] += (creature_ptr->lev / 6);
         }
 
-        if (creature_ptr->special_defense & KAMAE_SEIRYU) {
-            creature_ptr->resist_cold = TRUE;
-            creature_ptr->resist_pois = TRUE;
-        } else if (creature_ptr->special_defense & KAMAE_GENBU) {
+        if (creature_ptr->special_defense & KAMAE_GENBU) {
             creature_ptr->to_a += (creature_ptr->lev * creature_ptr->lev) / 50;
             creature_ptr->dis_to_a += (creature_ptr->lev * creature_ptr->lev) / 50;
             creature_ptr->num_blow[i] -= 2;
@@ -4442,8 +4439,6 @@ void calc_timelimit_status(player_type *creature_ptr)
 {
     if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU)) {
         creature_ptr->lite = TRUE;
-        creature_ptr->resist_cold = TRUE;
-        creature_ptr->resist_pois = TRUE;
         creature_ptr->resist_conf = TRUE;
         creature_ptr->resist_sound = TRUE;
         creature_ptr->resist_lite = TRUE;
@@ -4517,8 +4512,6 @@ void calc_equipment_status(player_type *creature_ptr)
         if (have_flag(flgs, TR_IM_ELEC))
             creature_ptr->immune_elec = TRUE;
 
-        if (have_flag(flgs, TR_RES_POIS))
-            creature_ptr->resist_pois = TRUE;
         if (have_flag(flgs, TR_RES_FEAR))
             creature_ptr->resist_fear = TRUE;
         if (have_flag(flgs, TR_RES_CONF))