From 73a40c836462719892527b0b1d6e1c63995d15d9 Mon Sep 17 00:00:00 2001 From: deskull Date: Fri, 7 Aug 2020 02:00:05 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#40514=20have=5Fslow=5Fdigest()=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=5Fslow=5Fdigest()=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 | 1 - src/player/player-race.c | 12 ----------- src/player/player-status-flags.c | 46 ++++++++++++++++++++++++++++++++++++---- src/player/player-status-flags.h | 1 + src/player/player-status.c | 5 +---- 5 files changed, 44 insertions(+), 21 deletions(-) diff --git a/src/player/player-class.c b/src/player/player-class.c index 98cef8a7b..74fb7689c 100644 --- a/src/player/player-class.c +++ b/src/player/player-class.c @@ -1249,7 +1249,6 @@ void calc_class_status(player_type *creature_ptr) creature_ptr->dis_to_a += creature_ptr->lev / 2 + 5; } - creature_ptr->slow_digest = TRUE; creature_ptr->resist_fear = TRUE; if (creature_ptr->lev > 19) creature_ptr->resist_pois = TRUE; diff --git a/src/player/player-race.c b/src/player/player-race.c index d167e2953..e75098ed4 100644 --- a/src/player/player-race.c +++ b/src/player/player-race.c @@ -174,14 +174,6 @@ void calc_race_status(player_type *creature_ptr) case RACE_HALF_TROLL: if (creature_ptr->lev > 14) { creature_ptr->regenerate = TRUE; - if (creature_ptr->pclass == CLASS_WARRIOR || creature_ptr->pclass == CLASS_BERSERKER) { - creature_ptr->slow_digest = TRUE; - /* Let's not make Regeneration - * a disadvantage for the poor warriors who can - * never learn a spell that satisfies hunger (actually - * neither can rogues, but half-trolls are not - * supposed to play rogues) */ - } } break; case RACE_AMBERITE: @@ -240,7 +232,6 @@ void calc_race_status(player_type *creature_ptr) creature_ptr->resist_fire = TRUE; break; case RACE_GOLEM: - creature_ptr->slow_digest = TRUE; creature_ptr->resist_pois = TRUE; break; case RACE_SKELETON: @@ -251,7 +242,6 @@ void calc_race_status(player_type *creature_ptr) break; case RACE_ZOMBIE: creature_ptr->resist_neth = TRUE; - creature_ptr->resist_pois = TRUE; creature_ptr->slow_digest = TRUE; if (creature_ptr->lev > 4) creature_ptr->resist_cold = TRUE; @@ -267,7 +257,6 @@ void calc_race_status(player_type *creature_ptr) case RACE_SPECTRE: creature_ptr->resist_neth = TRUE; creature_ptr->resist_pois = TRUE; - creature_ptr->slow_digest = TRUE; creature_ptr->resist_cold = TRUE; creature_ptr->pass_wall = TRUE; break; @@ -291,7 +280,6 @@ void calc_race_status(player_type *creature_ptr) creature_ptr->resist_conf = TRUE; break; case RACE_ANDROID: - creature_ptr->slow_digest = TRUE; creature_ptr->resist_pois = TRUE; break; case RACE_MERFOLK: diff --git a/src/player/player-status-flags.c b/src/player/player-status-flags.c index bdec79460..c0dc01c61 100644 --- a/src/player/player-status-flags.c +++ b/src/player/player-status-flags.c @@ -1098,12 +1098,10 @@ void have_levitation(player_type *creature_ptr) } if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU)) { - creature_ptr->slow_digest = TRUE; - creature_ptr->regenerate = TRUE; + creature_ptr->levitation = TRUE; } if (creature_ptr->magicdef) { - creature_ptr->levitation = TRUE; } if (creature_ptr->riding) { @@ -1120,7 +1118,6 @@ void have_levitation(player_type *creature_ptr) 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_LEVITATION)) creature_ptr->levitation = TRUE; @@ -1137,3 +1134,44 @@ void have_can_swim(player_type *creature_ptr) creature_ptr->can_swim = TRUE; } } + +void have_slow_digest(player_type *creature_ptr) +{ + object_type *o_ptr; + BIT_FLAGS flgs[TR_FLAG_SIZE]; + creature_ptr->slow_digest = FALSE; + + if (creature_ptr->pclass == CLASS_NINJA) { + creature_ptr->slow_digest = TRUE; + } + + if (creature_ptr->lev > 14 && !creature_ptr->mimic_form && creature_ptr->prace == RACE_HALF_TROLL) { + if (creature_ptr->pclass == CLASS_WARRIOR || creature_ptr->pclass == CLASS_BERSERKER) { + creature_ptr->slow_digest = TRUE; + /* Let's not make Regeneration + * a disadvantage for the poor warriors who can + * never learn a spell that satisfies hunger (actually + * neither can rogues, but half-trolls are not + * supposed to play rogues) */ + } + } + + if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU)) { + creature_ptr->slow_digest = TRUE; + } + + if (!creature_ptr->mimic_form + && (creature_ptr->prace == RACE_GOLEM || creature_ptr->prace == RACE_ZOMBIE || creature_ptr->prace == RACE_SPECTRE + || creature_ptr->prace == RACE_ANDROID)) { + creature_ptr->slow_digest = 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_SLOW_DIGEST)) + creature_ptr->slow_digest = TRUE; + } +} diff --git a/src/player/player-status-flags.h b/src/player/player-status-flags.h index ce19761af..0398514f5 100644 --- a/src/player/player-status-flags.h +++ b/src/player/player-status-flags.h @@ -44,5 +44,6 @@ void have_sustain_con(player_type *creature_ptr); void have_sustain_chr(player_type *creature_ptr); void have_levitation(player_type *creature_ptr); void have_can_swim(player_type *creature_ptr); +void have_slow_digest(player_type *creature_ptr); diff --git a/src/player/player-status.c b/src/player/player-status.c index 24991634c..b0233bc74 100644 --- a/src/player/player-status.c +++ b/src/player/player-status.c @@ -567,7 +567,6 @@ static void clear_creature_bonuses(player_type *creature_ptr) creature_ptr->cursed = 0L; creature_ptr->impact[0] = FALSE; creature_ptr->impact[1] = FALSE; - creature_ptr->slow_digest = FALSE; creature_ptr->regenerate = FALSE; creature_ptr->resist_acid = FALSE; creature_ptr->resist_elec = FALSE; @@ -736,6 +735,7 @@ void calc_bonuses(player_type *creature_ptr) have_sustain_chr(creature_ptr); have_levitation(creature_ptr); have_can_swim(creature_ptr); + have_slow_digest(creature_ptr); calc_race_status(creature_ptr); @@ -4467,7 +4467,6 @@ bool is_echizen(player_type *creature_ptr) void calc_timelimit_status(player_type *creature_ptr) { if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU)) { - creature_ptr->slow_digest = TRUE; creature_ptr->regenerate = TRUE; creature_ptr->lite = TRUE; creature_ptr->resist_acid = TRUE; @@ -4593,8 +4592,6 @@ void calc_equipment_status(player_type *creature_ptr) creature_ptr->cursed |= TRC_FAST_DIGEST; if (have_flag(flgs, TR_SLOW_REGEN)) creature_ptr->cursed |= TRC_SLOW_REGEN; - if (have_flag(flgs, TR_SLOW_DIGEST)) - creature_ptr->slow_digest = TRUE; if (have_flag(flgs, TR_REGEN)) creature_ptr->regenerate = TRUE; -- 2.11.0