From 0fb805c31d266fb45f57f3508f85710042ca6af9 Mon Sep 17 00:00:00 2001 From: deskull Date: Sun, 9 Aug 2020 21:50:19 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#40514=20have=5Fresist=5Fpois()=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=5Fresist=5Fpois()=20fr?= =?utf8?q?om=20calc=5Fbonuses().?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/player/player-class.c | 2 -- src/player/player-race.c | 14 -------------- src/player/player-status-flags.c | 42 +++++++++++++++++++++++++++++++++++++++- src/player/player-status-flags.h | 1 + src/player/player-status.c | 11 ++--------- 5 files changed, 44 insertions(+), 26 deletions(-) diff --git a/src/player/player-class.c b/src/player/player-class.c index 4fe0d169b..6394d8539 100644 --- a/src/player/player-class.c +++ b/src/player/player-class.c @@ -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; diff --git a/src/player/player-race.c b/src/player/player-race.c index e9889f514..88d8b0592 100644 --- a/src/player/player-race.c +++ b/src/player/player-race.c @@ -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; diff --git a/src/player/player-status-flags.c b/src/player/player-status-flags.c index 5606d551b..0a07d4d54 100644 --- a/src/player/player-status-flags.c +++ b/src/player/player-status-flags.c @@ -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; + } } diff --git a/src/player/player-status-flags.h b/src/player/player-status-flags.h index b44c4d2cc..fed565627 100644 --- a/src/player/player-status-flags.h +++ b/src/player/player-status-flags.h @@ -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); diff --git a/src/player/player-status.c b/src/player/player-status.c index 8f3da0b51..f2ab73b7e 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->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)) -- 2.11.0