From 2abac2dfbfa3c66d85934f5e6fb03a78e7abe6e3 Mon Sep 17 00:00:00 2001 From: deskull Date: Mon, 10 Aug 2020 13:55:05 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#40514=20have=5Fimmune=5Ffire()=20?= =?utf8?q?=E3=82=92=20calc=5Fbonuses()=E3=80=80=E3=81=8B=E3=82=89=E5=88=86?= =?utf8?q?=E9=9B=A2=EF=BC=8E=20/=20Separated=20have=5Fimmune=5Ffire()=20fr?= =?utf8?q?om=20calc=5Fbonuses().?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/player/player-status-flags.c | 21 +++++++++++++++++++++ src/player/player-status-flags.h | 1 + src/player/player-status.c | 9 ++------- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/player/player-status-flags.c b/src/player/player-status-flags.c index a4507774e..4f67d0b7a 100644 --- a/src/player/player-status-flags.c +++ b/src/player/player-status-flags.c @@ -2003,3 +2003,24 @@ void have_immune_elec(player_type *creature_ptr) creature_ptr->immune_elec = TRUE; } } + +void have_immune_fire(player_type *creature_ptr) +{ + object_type *o_ptr; + BIT_FLAGS flgs[TR_FLAG_SIZE]; + creature_ptr->immune_fire = FALSE; + if (creature_ptr->ele_immune) { + if (creature_ptr->special_defense & DEFENSE_FIRE) + creature_ptr->immune_fire = 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_IM_FIRE)) + creature_ptr->immune_fire = TRUE; + } +} diff --git a/src/player/player-status-flags.h b/src/player/player-status-flags.h index ea3b870b6..4a0fb1096 100644 --- a/src/player/player-status-flags.h +++ b/src/player/player-status-flags.h @@ -69,5 +69,6 @@ void have_resist_water(player_type *creature_ptr); void have_resist_fear(player_type *creature_ptr); void have_immune_acid(player_type *creature_ptr); void have_immune_elec(player_type *creature_ptr); +void have_immune_fire(player_type *creature_ptr); diff --git a/src/player/player-status.c b/src/player/player-status.c index 5b51f39c0..add90e997 100644 --- a/src/player/player-status.c +++ b/src/player/player-status.c @@ -560,7 +560,6 @@ static void delayed_visual_update(player_type *player_ptr) */ static void clear_creature_bonuses(player_type *creature_ptr) { - creature_ptr->immune_fire = FALSE; creature_ptr->immune_cold = FALSE; creature_ptr->two_handed_weapon = FALSE; creature_ptr->right_hand_weapon = FALSE; @@ -731,6 +730,7 @@ void calc_bonuses(player_type *creature_ptr) have_resist_fear(creature_ptr); have_immune_acid(creature_ptr); have_immune_elec(creature_ptr); + have_immune_fire(creature_ptr); calc_race_status(creature_ptr); @@ -4441,9 +4441,7 @@ void calc_timelimit_status(player_type *creature_ptr) } if (creature_ptr->ele_immune) { - if (creature_ptr->special_defense & DEFENSE_FIRE) - creature_ptr->immune_fire = TRUE; - else if (creature_ptr->special_defense & DEFENSE_COLD) + if (creature_ptr->special_defense & DEFENSE_COLD) creature_ptr->immune_cold = TRUE; } @@ -4470,9 +4468,6 @@ void calc_equipment_status(player_type *creature_ptr) if (have_flag(flgs, TR_INFRA)) creature_ptr->see_infra += o_ptr->pval; - - if (have_flag(flgs, TR_IM_FIRE)) - creature_ptr->immune_fire = TRUE; if (have_flag(flgs, TR_IM_COLD)) creature_ptr->immune_cold = TRUE; -- 2.11.0