From 95178088cf106b506ad7b25422eea93a28fd2a5c Mon Sep 17 00:00:00 2001 From: Deskull Date: Wed, 9 Jan 2019 13:19:51 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#37353=20vault=5Faux=5Fbattle()=20?= =?utf8?q?=E9=96=A2=E6=95=B0=E3=82=92=20monster=5Fcan=5Fenter=5Farena()=20?= =?utf8?q?=E3=81=AB=20=E6=94=B9=E5=90=8D=E3=81=97=E3=81=A6monsterace-hook.?= =?utf8?q?c=20=E3=81=AB=E7=A7=BB=E5=8B=95=E3=80=82=20/=20Rename=20vault=5F?= =?utf8?q?aux=5Fbattle()=20to=20monster=5Fcan=5Fenter=5Farena()=20and=20mo?= =?utf8?q?ve=20to=20monsterrace-hook.c.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/bldg.c | 40 ++-------------------------------------- src/monsterrace-hook.c | 37 +++++++++++++++++++++++++++++++++++++ src/monsterrace-hook.h | 1 + 3 files changed, 40 insertions(+), 38 deletions(-) diff --git a/src/bldg.c b/src/bldg.c index 8e191b731..5fa980cf1 100644 --- a/src/bldg.c +++ b/src/bldg.c @@ -14,6 +14,7 @@ #include "angband.h" #include "object-hook.h" +#include "monsterrace-hook.h" #include "melee.h" #include "world.h" @@ -1341,43 +1342,6 @@ static bool gamble_comm(int cmd) } /*! - * @brief モンスター闘技場に参加できるモンスターの判定 - * @param r_idx モンスターID - * @details 基準はNEVER_MOVE MULTIPLY QUANTUM RF7_AQUATIC RF7_CHAMELEONのいずれも持たず、 - * 自爆以外のなんらかのHP攻撃手段を持っていること。 - * @return 参加できるか否か - */ -static bool vault_aux_battle(MONRACE_IDX r_idx) -{ - int i; - HIT_POINT dam = 0; - - monster_race *r_ptr = &r_info[r_idx]; - - /* Decline town monsters */ -/* if (!mon_hook_dungeon(r_idx)) return FALSE; */ - - /* Decline unique monsters */ -/* if (r_ptr->flags1 & (RF1_UNIQUE)) return (FALSE); */ -/* if (r_ptr->flags7 & (RF7_NAZGUL)) return (FALSE); */ - - if (r_ptr->flags1 & (RF1_NEVER_MOVE)) return (FALSE); - if (r_ptr->flags2 & (RF2_MULTIPLY)) return (FALSE); - if (r_ptr->flags2 & (RF2_QUANTUM)) return (FALSE); - if (r_ptr->flags7 & (RF7_AQUATIC)) return (FALSE); - if (r_ptr->flags7 & (RF7_CHAMELEON)) return (FALSE); - - for (i = 0; i < 4; i++) - { - if (r_ptr->blow[i].method == RBM_EXPLODE) return (FALSE); - if (r_ptr->blow[i].effect != RBE_DR_MANA) dam += r_ptr->blow[i].d_dice; - } - if (!dam && !(r_ptr->flags4 & (RF4_BOLT_MASK | RF4_BEAM_MASK | RF4_BALL_MASK | RF4_BREATH_MASK)) && !(r_ptr->a_ability_flags1 & (RF5_BOLT_MASK | RF5_BEAM_MASK | RF5_BALL_MASK | RF5_BREATH_MASK)) && !(r_ptr->a_ability_flags2 & (RF6_BOLT_MASK | RF6_BEAM_MASK | RF6_BALL_MASK | RF6_BREATH_MASK))) return (FALSE); - - return (TRUE); -} - -/*! * @brief モンスター闘技場に参加するモンスターをリセットする。 * @return なし */ @@ -1415,7 +1379,7 @@ void battle_monsters(void) int j; while (1) { - get_mon_num_prep(vault_aux_battle, NULL); + get_mon_num_prep(monster_can_entry_arena, NULL); p_ptr->inside_battle = TRUE; r_idx = get_mon_num(mon_level); p_ptr->inside_battle = old_inside_battle; diff --git a/src/monsterrace-hook.c b/src/monsterrace-hook.c index c469332c1..1b9e91a1b 100644 --- a/src/monsterrace-hook.c +++ b/src/monsterrace-hook.c @@ -713,3 +713,40 @@ bool monster_is_fishing_target(MONRACE_IDX r_idx) else return FALSE; } + +/*! + * @brief モンスター闘技場に参加できるモンスターの判定 + * @param r_idx モンスターID + * @details 基準はNEVER_MOVE MULTIPLY QUANTUM RF7_AQUATIC RF7_CHAMELEONのいずれも持たず、 + * 自爆以外のなんらかのHP攻撃手段を持っていること。 + * @return 参加できるか否か + */ +bool monster_can_entry_arena(MONRACE_IDX r_idx) +{ + int i; + HIT_POINT dam = 0; + + monster_race *r_ptr = &r_info[r_idx]; + + /* Decline town monsters */ +/* if (!mon_hook_dungeon(r_idx)) return FALSE; */ + + /* Decline unique monsters */ +/* if (r_ptr->flags1 & (RF1_UNIQUE)) return (FALSE); */ +/* if (r_ptr->flags7 & (RF7_NAZGUL)) return (FALSE); */ + + if (r_ptr->flags1 & (RF1_NEVER_MOVE)) return (FALSE); + if (r_ptr->flags2 & (RF2_MULTIPLY)) return (FALSE); + if (r_ptr->flags2 & (RF2_QUANTUM)) return (FALSE); + if (r_ptr->flags7 & (RF7_AQUATIC)) return (FALSE); + if (r_ptr->flags7 & (RF7_CHAMELEON)) return (FALSE); + + for (i = 0; i < 4; i++) + { + if (r_ptr->blow[i].method == RBM_EXPLODE) return (FALSE); + if (r_ptr->blow[i].effect != RBE_DR_MANA) dam += r_ptr->blow[i].d_dice; + } + if (!dam && !(r_ptr->flags4 & (RF4_BOLT_MASK | RF4_BEAM_MASK | RF4_BALL_MASK | RF4_BREATH_MASK)) && !(r_ptr->a_ability_flags1 & (RF5_BOLT_MASK | RF5_BEAM_MASK | RF5_BALL_MASK | RF5_BREATH_MASK)) && !(r_ptr->a_ability_flags2 & (RF6_BOLT_MASK | RF6_BEAM_MASK | RF6_BALL_MASK | RF6_BREATH_MASK))) return (FALSE); + + return (TRUE); +} diff --git a/src/monsterrace-hook.h b/src/monsterrace-hook.h index d109aadfb..18e82e98f 100644 --- a/src/monsterrace-hook.h +++ b/src/monsterrace-hook.h @@ -63,6 +63,7 @@ extern bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx); extern bool monster_hook_human(MONRACE_IDX r_idx); extern bool get_nightmare(MONRACE_IDX r_idx); extern bool monster_is_fishing_target(MONRACE_IDX r_idx); +extern bool monster_can_entry_arena(MONRACE_IDX r_idx); -- 2.11.0