From 5bf6cbc26dedd359183da0464c02afc8b8f1a6d3 Mon Sep 17 00:00:00 2001 From: Hourier Date: Mon, 17 Feb 2020 23:15:27 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#40030=20decide=5Fmonster=5Fmovemen?= =?utf8?q?t=5Fdirection()=20=E3=81=8B=E3=82=89random=5Fwalk()=20=E3=82=92?= =?utf8?q?=E5=88=86=E9=9B=A2=20/=20Separated=20random=5Fwalk()=20from=20de?= =?utf8?q?cide=5Fmonster=5Fmovement=5Fdirection()?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/monster-process.c | 54 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/src/monster-process.c b/src/monster-process.c index fb5df04ab..96d519717 100644 --- a/src/monster-process.c +++ b/src/monster-process.c @@ -90,6 +90,7 @@ void produce_quantum_effect(player_type *target_ptr, MONSTER_IDX m_idx, bool see bool explode_monster(player_type *target_ptr, MONSTER_IDX m_idx); bool decide_monster_multiplication(player_type *target_ptr, MONSTER_IDX m_idx, POSITION oy, POSITION ox); bool decide_monster_movement_direction(player_type *target_ptr, DIRECTION *mm, MONSTER_IDX m_idx, bool aware); +bool random_walk(player_type *target_ptr, DIRECTION *mm, monster_type *m_ptr); bool decide_pet_movement_direction(player_type *target_ptr, DIRECTION *mm, MONSTER_IDX m_idx); bool runaway_monster(player_type *target_ptr, turn_flags *turn_flags_ptr, MONSTER_IDX m_idx); void escape_monster(player_type *target_ptr, turn_flags *turn_flags_ptr, monster_type *m_ptr, GAME_TEXT *m_name); @@ -1625,48 +1626,65 @@ bool decide_monster_movement_direction(player_type *target_ptr, DIRECTION *mm, M return TRUE; } - if (((r_ptr->flags1 & (RF1_RAND_50 | RF1_RAND_25)) == (RF1_RAND_50 | RF1_RAND_25)) && (randint0(100) < 75)) - { - if (is_original_ap_and_seen(target_ptr, m_ptr)) r_ptr->r_flags1 |= (RF1_RAND_50 | RF1_RAND_25); + if (random_walk(target_ptr, mm, m_ptr)) return TRUE; + if ((r_ptr->flags1 & RF1_NEVER_MOVE) && (m_ptr->cdis > 1)) + { mm[0] = mm[1] = mm[2] = mm[3] = 5; return TRUE; } - if ((r_ptr->flags1 & RF1_RAND_50) && (randint0(100) < 50)) - { - if (is_original_ap_and_seen(target_ptr, m_ptr)) r_ptr->r_flags1 |= (RF1_RAND_50); + if (decide_pet_movement_direction(target_ptr, mm, m_idx)) return TRUE; + if (!is_hostile(m_ptr)) + { mm[0] = mm[1] = mm[2] = mm[3] = 5; + get_enemy_dir(target_ptr, m_idx, mm); return TRUE; } - if ((r_ptr->flags1 & RF1_RAND_25) && (randint0(100) < 25)) - { - if (is_original_ap_and_seen(target_ptr, m_ptr)) r_ptr->r_flags1 |= RF1_RAND_25; + if (!get_moves(target_ptr, m_idx, mm)) return FALSE; + + return TRUE; +} + + +/*! + * todo ↓のように書いたが、"5"とはもしかして「その場に留まる」という意味か? + * @brief 不規則歩行フラグを持つモンスターの移動方向をその確率に基づいて決定する + * @param target_ptr プレーヤーへの参照ポインタ + * @param mm 移動方向 + * @param m_ptr モンスターへの参照ポインタ + * @return 不規則な方向へ歩くことになったらTRUE + */ +bool random_walk(player_type *target_ptr, DIRECTION *mm, monster_type *m_ptr) +{ + monster_race *r_ptr = &r_info[m_ptr->r_idx]; + if (((r_ptr->flags1 & (RF1_RAND_50 | RF1_RAND_25)) == (RF1_RAND_50 | RF1_RAND_25)) && (randint0(100) < 75)) + { + if (is_original_ap_and_seen(target_ptr, m_ptr)) r_ptr->r_flags1 |= (RF1_RAND_50 | RF1_RAND_25); mm[0] = mm[1] = mm[2] = mm[3] = 5; return TRUE; - } + } - if ((r_ptr->flags1 & RF1_NEVER_MOVE) && (m_ptr->cdis > 1)) + if ((r_ptr->flags1 & RF1_RAND_50) && (randint0(100) < 50)) { + if (is_original_ap_and_seen(target_ptr, m_ptr)) r_ptr->r_flags1 |= RF1_RAND_50; + mm[0] = mm[1] = mm[2] = mm[3] = 5; return TRUE; } - if (decide_pet_movement_direction(target_ptr, mm, m_idx)) return TRUE; - - if (!is_hostile(m_ptr)) + if ((r_ptr->flags1 & RF1_RAND_25) && (randint0(100) < 25)) { + if (is_original_ap_and_seen(target_ptr, m_ptr)) r_ptr->r_flags1 |= RF1_RAND_25; + mm[0] = mm[1] = mm[2] = mm[3] = 5; - get_enemy_dir(target_ptr, m_idx, mm); return TRUE; } - if (!get_moves(target_ptr, m_idx, mm)) return FALSE; - - return TRUE; + return FALSE; } -- 2.11.0