From 16d0f5a74c2ba894908c60f482a5c5ecc9597180 Mon Sep 17 00:00:00 2001 From: deskull Date: Mon, 10 Aug 2020 13:43:28 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#40514=20have=5Fimmune=5Facid()=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=5Facid()=20fr?= =?utf8?q?om=20calc=5Fbonuses().?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/player/player-race.c | 4 ---- src/player/player-status-flags.c | 25 +++++++++++++++++++++++++ src/player/player-status-flags.h | 1 + src/player/player-status.c | 8 ++------ 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/player/player-race.c b/src/player/player-race.c index f7f8b8c1d..924ae9953 100644 --- a/src/player/player-race.c +++ b/src/player/player-race.c @@ -141,10 +141,6 @@ void calc_race_status(player_type *creature_ptr) } } else { switch (creature_ptr->prace) { - case RACE_YEEK: - if (creature_ptr->lev > 19) - creature_ptr->immune_acid = TRUE; - break; case RACE_ZOMBIE: creature_ptr->slow_digest = TRUE; break; diff --git a/src/player/player-status-flags.c b/src/player/player-status-flags.c index 5962b9a51..482b8d8cb 100644 --- a/src/player/player-status-flags.c +++ b/src/player/player-status-flags.c @@ -1957,3 +1957,28 @@ void have_resist_fear(player_type *creature_ptr) creature_ptr->resist_fear = TRUE; } } + +void have_immune_acid(player_type *creature_ptr) +{ + object_type *o_ptr; + BIT_FLAGS flgs[TR_FLAG_SIZE]; + creature_ptr->immune_acid = FALSE; + + if (!creature_ptr->mimic_form && creature_ptr->prace == RACE_YEEK && creature_ptr->lev > 19) + creature_ptr->immune_acid = TRUE; + + if (creature_ptr->ele_immune) { + if (creature_ptr->special_defense & DEFENSE_ACID) + creature_ptr->immune_acid = 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_ACID)) + creature_ptr->immune_acid = TRUE; + } +} diff --git a/src/player/player-status-flags.h b/src/player/player-status-flags.h index 2a2f23f5f..7a8b6cc7c 100644 --- a/src/player/player-status-flags.h +++ b/src/player/player-status-flags.h @@ -67,5 +67,6 @@ void have_resist_neth(player_type *creature_ptr); void have_resist_time(player_type *creature_ptr); void have_resist_water(player_type *creature_ptr); void have_resist_fear(player_type *creature_ptr); +void have_immune_acid(player_type *creature_ptr); diff --git a/src/player/player-status.c b/src/player/player-status.c index f38494856..b473c0bd3 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_acid = FALSE; creature_ptr->immune_elec = FALSE; creature_ptr->immune_fire = FALSE; creature_ptr->immune_cold = FALSE; @@ -731,6 +730,7 @@ void calc_bonuses(player_type *creature_ptr) have_resist_neth(creature_ptr); have_resist_time(creature_ptr); have_resist_fear(creature_ptr); + have_immune_acid(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_ACID) - creature_ptr->immune_acid = TRUE; - else if (creature_ptr->special_defense & DEFENSE_ELEC) + if (creature_ptr->special_defense & DEFENSE_ELEC) creature_ptr->immune_elec = TRUE; else if (creature_ptr->special_defense & DEFENSE_FIRE) creature_ptr->immune_fire = TRUE; @@ -4477,8 +4475,6 @@ void calc_equipment_status(player_type *creature_ptr) if (have_flag(flgs, TR_IM_FIRE)) creature_ptr->immune_fire = TRUE; - if (have_flag(flgs, TR_IM_ACID)) - creature_ptr->immune_acid = TRUE; if (have_flag(flgs, TR_IM_COLD)) creature_ptr->immune_cold = TRUE; if (have_flag(flgs, TR_IM_ELEC)) -- 2.11.0