OSDN Git Service

[Refactor] #40514 have_resist_lite() を calc_bonuses() から分離. / Separated have_resist_l...
authordeskull <deskull@users.sourceforge.jp>
Sun, 9 Aug 2020 15:20:11 +0000 (00:20 +0900)
committerdeskull <deskull@users.sourceforge.jp>
Sun, 9 Aug 2020 15:20:11 +0000 (00:20 +0900)
src/player/player-race.c
src/player/player-status-flags.c
src/player/player-status-flags.h
src/player/player-status.c

index 3556fc3..58bc12f 100644 (file)
@@ -152,18 +152,13 @@ void calc_race_status(player_type *creature_ptr)
         }
     } else {
         switch (creature_ptr->prace) {
-        case RACE_ELF:
-            creature_ptr->resist_lite = TRUE;
-            break;
+
         case RACE_DWARF:
             creature_ptr->resist_blind = TRUE;
             break;
         case RACE_HALF_ORC:
             creature_ptr->resist_dark = TRUE;
             break;
-        case RACE_HIGH_ELF:
-            creature_ptr->resist_lite = TRUE;
-            break;
         case RACE_BARBARIAN:
             creature_ptr->resist_fear = TRUE;
             break;
@@ -208,9 +203,7 @@ void calc_race_status(player_type *creature_ptr)
             creature_ptr->resist_pois = TRUE;
             creature_ptr->pass_wall = TRUE;
             break;
-        case RACE_SPRITE:
-            creature_ptr->resist_lite = TRUE;
-            break;
+
         case RACE_BALROG:
             creature_ptr->resist_neth = TRUE;
             if (creature_ptr->lev > 44) {
index 53b3199..08e71e3 100644 (file)
@@ -1637,3 +1637,29 @@ void have_resist_sound(player_type *creature_ptr)
                                creature_ptr->resist_sound = TRUE;
     }
 }
+
+void have_resist_lite(player_type *creature_ptr)
+{
+    object_type *o_ptr;
+    BIT_FLAGS flgs[TR_FLAG_SIZE];
+    creature_ptr->resist_lite = FALSE;
+
+    if (!creature_ptr->mimic_form && (creature_ptr->prace == RACE_ELF || creature_ptr->prace == RACE_HIGH_ELF || creature_ptr->prace == RACE_SPRITE)) {
+        creature_ptr->resist_lite = TRUE;
+    }
+
+    if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU)) {
+        creature_ptr->resist_lite = 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_LITE))
+                       creature_ptr->resist_lite = TRUE;
+    }
+}
index eee3150..573c9dc 100644 (file)
@@ -56,5 +56,6 @@ void have_resist_cold(player_type *creature_ptr);
 void have_resist_pois(player_type *creature_ptr);
 void have_resist_conf(player_type *creature_ptr);
 void have_resist_sound(player_type *creature_ptr);
+void have_resist_lite(player_type *creature_ptr);
 
 
index f94d2ca..da99009 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_lite = FALSE;
     creature_ptr->resist_dark = FALSE;
     creature_ptr->resist_chaos = FALSE;
     creature_ptr->resist_disen = FALSE;
@@ -732,6 +731,7 @@ void calc_bonuses(player_type *creature_ptr)
     have_resist_pois(creature_ptr);
     have_resist_conf(creature_ptr);
     have_resist_sound(creature_ptr);
+    have_resist_lite(creature_ptr);
 
     calc_race_status(creature_ptr);
 
@@ -4439,7 +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_lite = TRUE;
         creature_ptr->resist_dark = TRUE;
         creature_ptr->resist_chaos = TRUE;
         creature_ptr->resist_disen = TRUE;
@@ -4511,8 +4510,6 @@ void calc_equipment_status(player_type *creature_ptr)
 
         if (have_flag(flgs, TR_RES_FEAR))
             creature_ptr->resist_fear = TRUE;
-        if (have_flag(flgs, TR_RES_LITE))
-            creature_ptr->resist_lite = TRUE;
         if (have_flag(flgs, TR_RES_DARK))
             creature_ptr->resist_dark = TRUE;
         if (have_flag(flgs, TR_RES_CHAOS))