From 816f1b99f6acae5acb22cc0728f113f0a643d456 Mon Sep 17 00:00:00 2001 From: Deskull Date: Sat, 2 Feb 2019 00:13:14 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#37353=20spells1.c=20=E3=81=8B?= =?utf8?q?=E3=82=89=20spell-diceroll.c=20=E3=82=92=E5=88=86=E9=9B=A2?= =?utf8?q?=E3=80=82=20/=20Separate=20spell-diceroll.c=20from=20spells1.c.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Hengband_vcs2017/Hengband/Hengband.vcxproj | 2 + src/spells-diceroll.c | 85 ++++++++++++++++++++++++++++++ src/spells-diceroll.h | 5 ++ src/spells1.c | 76 +------------------------- 4 files changed, 93 insertions(+), 75 deletions(-) create mode 100644 src/spells-diceroll.c create mode 100644 src/spells-diceroll.h diff --git a/Hengband_vcs2017/Hengband/Hengband.vcxproj b/Hengband_vcs2017/Hengband/Hengband.vcxproj index bfcad53f0..8c2ee6a1d 100644 --- a/Hengband_vcs2017/Hengband/Hengband.vcxproj +++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj @@ -239,6 +239,7 @@ + @@ -325,6 +326,7 @@ + diff --git a/src/spells-diceroll.c b/src/spells-diceroll.c new file mode 100644 index 000000000..5aea49bab --- /dev/null +++ b/src/spells-diceroll.c @@ -0,0 +1,85 @@ +#include "angband.h" + +#include "spells-diceroll.h" + +#include "monster.h" +#include "monsterrace-hook.h" +#include "mutation.h" +#include "projection.h" +#include "rooms.h" + + +/*! + * @brief モンスター魅了用セービングスロー共通部(汎用系) + * @param pow 魅了パワー + * @param m_ptr 対象モンスター + * @return 魅了に抵抗したらTRUE + */ +bool_hack common_saving_throw_charm(player_type *player_ptr, HIT_POINT pow, monster_type *m_ptr) +{ + monster_race *r_ptr = &r_info[m_ptr->r_idx]; + + if (p_ptr->inside_arena) return TRUE; + + /* Memorize a flag */ + if (r_ptr->flagsr & RFR_RES_ALL) + { + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + return TRUE; + } + + if (r_ptr->flags3 & RF3_NO_CONF) + { + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); + return TRUE; + } + + if (r_ptr->flags1 & RF1_QUESTOR || m_ptr->mflag2 & MFLAG2_NOPET) return TRUE; + + pow += (adj_chr_chm[player_ptr->stat_ind[A_CHR]] - 1); + if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) pow = pow * 2 / 3; + return (r_ptr->level > randint1((pow - 10) < 1 ? 1 : (pow - 10)) + 5); +} + +/*! + * @brief モンスター服従用セービングスロー共通部(部族依存系) + * @param pow 服従パワー + * @param m_ptr 対象モンスター + * @return 服従に抵抗したらTRUE + */ +bool_hack common_saving_throw_control(player_type *player_ptr, HIT_POINT pow, monster_type *m_ptr) +{ + monster_race *r_ptr = &r_info[m_ptr->r_idx]; + + if (p_ptr->inside_arena) return TRUE; + + /* Memorize a flag */ + if (r_ptr->flagsr & RFR_RES_ALL) + { + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + return TRUE; + } + + if (r_ptr->flags1 & RF1_QUESTOR || m_ptr->mflag2 & MFLAG2_NOPET) return TRUE; + + pow += adj_chr_chm[player_ptr->stat_ind[A_CHR]] - 1; + if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) pow = pow * 2 / 3; + return (r_ptr->level > randint1((pow - 10) < 1 ? 1 : (pow - 10)) + 5); +} + +/*! +* @brief 一部ボルト魔法のビーム化確率を算出する / Prepare standard probability to become beam for fire_bolt_or_beam() +* @return ビーム化確率(%) +* @details +* ハードコーティングによる実装が行われている。 +* メイジは(レベル)%、ハイメイジ、スペルマスターは(レベル)%、それ以外の職業は(レベル/2)% +*/ +PERCENTAGE beam_chance(void) +{ + if (p_ptr->pclass == CLASS_MAGE) + return (PERCENTAGE)(p_ptr->lev); + if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) + return (PERCENTAGE)(p_ptr->lev + 10); + + return (PERCENTAGE)(p_ptr->lev / 2); +} diff --git a/src/spells-diceroll.h b/src/spells-diceroll.h new file mode 100644 index 000000000..53b96f766 --- /dev/null +++ b/src/spells-diceroll.h @@ -0,0 +1,5 @@ +#pragma once + +extern bool_hack common_saving_throw_control(player_type *player_ptr, HIT_POINT pow, monster_type *m_ptr); +extern bool_hack common_saving_throw_charm(player_type *player_ptr, HIT_POINT pow, monster_type *m_ptr); + diff --git a/src/spells1.c b/src/spells1.c index fc2c1472d..3a68fe55d 100644 --- a/src/spells1.c +++ b/src/spells1.c @@ -19,6 +19,7 @@ #include "monster.h" #include "monster-status.h" +#include "spells-diceroll.h" #include "spells-summon.h" #include "monsterrace-hook.h" @@ -39,81 +40,6 @@ static int rakubadam_p; /*!< 落馬した際のダメージ量 */ int project_length = 0; /*!< 投射の射程距離 */ -/*! - * @brief モンスター魅了用セービングスロー共通部(汎用系) - * @param pow 魅了パワー - * @param m_ptr 対象モンスター - * @return 魅了に抵抗したらTRUE - */ -static bool_hack common_saving_throw_charm(player_type *player_ptr, HIT_POINT pow, monster_type *m_ptr) -{ - monster_race *r_ptr = &r_info[m_ptr->r_idx]; - - if(p_ptr->inside_arena) return TRUE; - - /* Memorize a flag */ - if (r_ptr->flagsr & RFR_RES_ALL) - { - if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); - return TRUE; - } - - if (r_ptr->flags3 & RF3_NO_CONF) - { - if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); - return TRUE; - } - - if (r_ptr->flags1 & RF1_QUESTOR || m_ptr->mflag2 & MFLAG2_NOPET) return TRUE; - - pow += (adj_chr_chm[player_ptr->stat_ind[A_CHR]] - 1); - if((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) pow = pow * 2 / 3; - return (r_ptr->level > randint1((pow - 10) < 1 ? 1 : (pow - 10)) + 5); -} - -/*! - * @brief モンスター服従用セービングスロー共通部(部族依存系) - * @param pow 服従パワー - * @param m_ptr 対象モンスター - * @return 服従に抵抗したらTRUE - */ -static bool_hack common_saving_throw_control(player_type *player_ptr, HIT_POINT pow, monster_type *m_ptr) -{ - monster_race *r_ptr = &r_info[m_ptr->r_idx]; - - if (p_ptr->inside_arena) return TRUE; - - /* Memorize a flag */ - if (r_ptr->flagsr & RFR_RES_ALL) - { - if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); - return TRUE; - } - - if (r_ptr->flags1 & RF1_QUESTOR || m_ptr->mflag2 & MFLAG2_NOPET) return TRUE; - - pow += adj_chr_chm[player_ptr->stat_ind[A_CHR]] - 1; - if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) pow = pow * 2 / 3; - return (r_ptr->level > randint1((pow - 10) < 1 ? 1 : (pow - 10)) + 5); -} - -/*! -* @brief 一部ボルト魔法のビーム化確率を算出する / Prepare standard probability to become beam for fire_bolt_or_beam() -* @return ビーム化確率(%) -* @details -* ハードコーティングによる実装が行われている。 -* メイジは(レベル)%、ハイメイジ、スペルマスターは(レベル)%、それ以外の職業は(レベル/2)% -*/ -PERCENTAGE beam_chance(void) -{ - if (p_ptr->pclass == CLASS_MAGE) - return (PERCENTAGE)(p_ptr->lev); - if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER) - return (PERCENTAGE)(p_ptr->lev + 10); - - return (PERCENTAGE)(p_ptr->lev / 2); -} - /*! * @brief 配置した鏡リストの次を取得する / -- 2.11.0