OSDN Git Service

[Refactor]
authorHourier <hourier@users.sourceforge.jp>
Sun, 28 Jun 2020 10:55:40 +0000 (19:55 +0900)
committerHourier <hourier@users.sourceforge.jp>
Sun, 28 Jun 2020 10:55:40 +0000 (19:55 +0900)
src/monster-floor/monster-generator.c
src/monster-floor/monster-summon.c
src/monster-floor/one-monster-placer.c
src/monster-race/monster-race-hook.c
src/monster-race/monster-race-hook.h
src/monster/monster-list.c
src/monster/monster-util.c
src/monster/monster-util.h
src/object-enchant/apply-magic-others.c
src/room/pit-nest-kinds-table.h
src/room/rooms-pit-nest.c

index 7a57c94..9593b7c 100644 (file)
@@ -203,18 +203,17 @@ static bool place_monster_group(player_type *player_ptr, MONSTER_IDX who, POSITI
 }
 
 /*!
- * todo ここにplayer_typeを追加すると関数ポインタ周りの収拾がつかなくなるので保留
  * @brief モンスター種族が召喚主の護衛となれるかどうかをチェックする / Hack -- help pick an escort type
  * @param r_idx チェックするモンスター種族のID
  * @return 護衛にできるならばtrue
  */
-static bool place_monster_can_escort(MONRACE_IDX r_idx)
+static bool place_monster_can_escort(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[place_monster_idx];
-    monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[place_monster_m_idx];
+    monster_type *m_ptr = &player_ptr->current_floor_ptr->m_list[place_monster_m_idx];
     monster_race *z_ptr = &r_info[r_idx];
 
-    if (mon_hook_dungeon(place_monster_idx) != mon_hook_dungeon(r_idx))
+    if (mon_hook_dungeon(player_ptr, place_monster_idx) != mon_hook_dungeon(player_ptr, r_idx))
         return FALSE;
     if (z_ptr->d_char != r_ptr->d_char)
         return FALSE;
@@ -224,11 +223,11 @@ static bool place_monster_can_escort(MONRACE_IDX r_idx)
         return FALSE;
     if (place_monster_idx == r_idx)
         return FALSE;
-    if (monster_has_hostile_align(p_ptr, m_ptr, 0, 0, z_ptr))
+    if (monster_has_hostile_align(player_ptr, m_ptr, 0, 0, z_ptr))
         return FALSE;
 
     if (r_ptr->flags7 & RF7_FRIENDLY) {
-        if (monster_has_hostile_align(p_ptr, NULL, 1, -1, z_ptr))
+        if (monster_has_hostile_align(player_ptr, NULL, 1, -1, z_ptr))
             return FALSE;
     }
 
index 04750c1..12b08d3 100644 (file)
@@ -31,24 +31,23 @@ int summon_specific_who = -1;
 bool summon_unique_okay = FALSE;
 
 /*!
- * todo ここにplayer_typeを追加すると関数ポインタ周りの収拾がつかなくなるので保留
  * @brief モンスターが召喚の基本条件に合っているかをチェックする / Hack -- help decide if a monster race is "okay" to summon
  * @param r_idx チェックするモンスター種族ID
  * @return 召喚対象にできるならばTRUE
  */
-static bool summon_specific_okay(MONRACE_IDX r_idx)
+static bool summon_specific_okay(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[summon_specific_who];
-    if (!mon_hook_dungeon(r_idx))
+    monster_type *m_ptr = &player_ptr->current_floor_ptr->m_list[summon_specific_who];
+    if (!mon_hook_dungeon(player_ptr, r_idx))
         return FALSE;
 
     if (summon_specific_who > 0) {
-        if (monster_has_hostile_align(p_ptr, m_ptr, 0, 0, r_ptr))
+        if (monster_has_hostile_align(player_ptr, m_ptr, 0, 0, r_ptr))
             return FALSE;
     } else if (summon_specific_who < 0) {
-        if (monster_has_hostile_align(p_ptr, NULL, 10, -10, r_ptr)) {
-            if (!one_in_(ABS(p_ptr->align) / 2 + 1))
+        if (monster_has_hostile_align(player_ptr, NULL, 10, -10, r_ptr)) {
+            if (!one_in_(ABS(player_ptr->align) / 2 + 1))
                 return FALSE;
         }
     }
@@ -59,13 +58,13 @@ static bool summon_specific_okay(MONRACE_IDX r_idx)
     if (!summon_specific_type)
         return TRUE;
 
-    if ((summon_specific_who < 0) && ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) && monster_has_hostile_align(p_ptr, NULL, 10, -10, r_ptr))
+    if ((summon_specific_who < 0) && ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) && monster_has_hostile_align(player_ptr, NULL, 10, -10, r_ptr))
         return FALSE;
 
-    if ((r_ptr->flags7 & RF7_CHAMELEON) && (d_info[p_ptr->dungeon_idx].flags1 & DF1_CHAMELEON))
+    if ((r_ptr->flags7 & RF7_CHAMELEON) && (d_info[player_ptr->dungeon_idx].flags1 & DF1_CHAMELEON))
         return TRUE;
 
-    return (check_summon_specific(p_ptr, m_ptr->r_idx, r_idx));
+    return (check_summon_specific(player_ptr, m_ptr->r_idx, r_idx));
 }
 
 /*!
index 36879f9..c7ee354 100644 (file)
 static bool is_friendly_idx(player_type *player_ptr, MONSTER_IDX m_idx) { return m_idx > 0 && is_friendly(&player_ptr->current_floor_ptr->m_list[(m_idx)]); }
 
 /*!
- * todo ここにplayer_typeを追加すると関数ポインタ周りの収拾がつかなくなるので保留
  * @brief たぬきの変身対象となるモンスターかどうか判定する / Hook for Tanuki
  * @param r_idx モンスター種族ID
  * @return 対象にできるならtrueを返す
  * @todo グローバル変数対策の上 monster_hook.cへ移す。
  */
-static bool monster_hook_tanuki(MONRACE_IDX r_idx)
+static bool monster_hook_tanuki(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
 
@@ -61,7 +60,7 @@ static bool monster_hook_tanuki(MONRACE_IDX r_idx)
         || (r_ptr->blow[3].method == RBM_EXPLODE))
         return FALSE;
 
-    return (*(get_monster_hook(p_ptr)))(r_idx);
+    return (*(get_monster_hook(player_ptr)))(player_ptr, r_idx);
 }
 
 /*!
index 8bf4b2b..cc9997e 100644 (file)
@@ -89,8 +89,11 @@ void vault_prep_dragon(player_type *player_ptr)
  * @param r_idx モンスターID
  * @return 討伐対象にできるならTRUEを返す。
  */
-bool mon_hook_quest(MONRACE_IDX r_idx)
+bool mon_hook_quest(player_type *player_ptr, MONRACE_IDX r_idx)
 {
+    /* Unused */
+    (void)player_ptr;
+
     monster_race *r_ptr = &r_info[r_idx];
     if (r_ptr->flags8 & RF8_WILD_ONLY)
         return FALSE;
@@ -108,18 +111,17 @@ bool mon_hook_quest(MONRACE_IDX r_idx)
 }
 
 /*!
- * todo ここにplayer_typeを追加すると関数ポインタ周りの収拾がつかなくなるので保留
  * @brief モンスターがダンジョンに出現するかどうかを返す
  * @param r_idx 判定するモンスターの種族ID
  * @return ダンジョンに出現するならばTRUEを返す
  */
-bool mon_hook_dungeon(MONRACE_IDX r_idx)
+bool mon_hook_dungeon(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
     if (!(r_ptr->flags8 & RF8_WILD_ONLY))
         return TRUE;
 
-    dungeon_type *d_ptr = &d_info[p_ptr->dungeon_idx];
+    dungeon_type *d_ptr = &d_info[player_ptr->dungeon_idx];
     return ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) != 0) && ((r_ptr->flags8 & RF8_WILD_MOUNTAIN) != 0);
 }
 
@@ -150,8 +152,11 @@ bool mon_hook_shore(MONRACE_IDX r_idx)
  * @param r_idx 判定するモンスターの種族ID
  * @return 荒地に出現するならばTRUEを返す
  */
-bool mon_hook_waste(MONRACE_IDX r_idx)
+bool mon_hook_waste(player_type *player_ptr, MONRACE_IDX r_idx)
 {
+    /* Unused */
+    (void)player_ptr;
+
     monster_race *r_ptr = &r_info[r_idx];
     return (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL)) != 0;
 }
@@ -216,10 +221,10 @@ bool mon_hook_grass(MONRACE_IDX r_idx)
  * @param r_idx 判定するモンスターの種族ID
  * @return 深い水地形に出現するならばTRUEを返す
  */
-bool mon_hook_deep_water(MONRACE_IDX r_idx)
+bool mon_hook_deep_water(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!mon_hook_dungeon(r_idx))
+    if (!mon_hook_dungeon(player_ptr, r_idx))
         return FALSE;
 
     return (r_ptr->flags7 & RF7_AQUATIC) != 0;
@@ -230,10 +235,10 @@ bool mon_hook_deep_water(MONRACE_IDX r_idx)
  * @param r_idx 判定するモンスターの種族ID
  * @return 浅い水地形に出現するならばTRUEを返す
  */
-bool mon_hook_shallow_water(MONRACE_IDX r_idx)
+bool mon_hook_shallow_water(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!mon_hook_dungeon(r_idx))
+    if (!mon_hook_dungeon(player_ptr, r_idx))
         return FALSE;
 
     return (r_ptr->flags2 & RF2_AURA_FIRE) != 0;
@@ -244,10 +249,10 @@ bool mon_hook_shallow_water(MONRACE_IDX r_idx)
  * @param r_idx 判定するモンスターの種族ID
  * @return 溶岩地形に出現するならばTRUEを返す
  */
-bool mon_hook_lava(MONRACE_IDX r_idx)
+bool mon_hook_lava(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!mon_hook_dungeon(r_idx))
+    if (!mon_hook_dungeon(player_ptr, r_idx))
         return FALSE;
 
     if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) || (r_ptr->flags7 & RF7_CAN_FLY)) && !(r_ptr->flags3 & RF3_AURA_COLD))
@@ -273,10 +278,13 @@ bool mon_hook_floor(MONRACE_IDX r_idx)
 /*
  * Helper function for "glass room"
  */
-bool vault_aux_lite(MONRACE_IDX r_idx)
+bool vault_aux_lite(player_type *player_ptr, MONRACE_IDX r_idx)
 {
+    /* Unused */
+    (void)player_ptr;
+
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if (!(r_ptr->flags4 & RF4_BR_LITE) && !(r_ptr->a_ability_flags1 & RF5_BA_LITE))
@@ -294,10 +302,10 @@ bool vault_aux_lite(MONRACE_IDX r_idx)
 /*
  * Helper function for "glass room"
  */
-bool vault_aux_shards(MONRACE_IDX r_idx)
+bool vault_aux_shards(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if (!(r_ptr->flags4 & RF4_BR_SHAR))
@@ -312,7 +320,13 @@ bool vault_aux_shards(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return Vault生成の最低必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_simple(MONRACE_IDX r_idx) { return (vault_monster_okay(r_idx)); }
+bool vault_aux_simple(player_type *player_ptr, MONRACE_IDX r_idx)
+{
+    /* Unused */
+    (void)player_ptr;
+
+    return (vault_monster_okay(player_ptr, r_idx));
+}
 
 /*!
  * @brief モンスターがゼリーnestの生成必要条件を満たしているかを返す /
@@ -320,10 +334,10 @@ bool vault_aux_simple(MONRACE_IDX r_idx) { return (vault_monster_okay(r_idx)); }
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_jelly(MONRACE_IDX r_idx)
+bool vault_aux_jelly(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW))
@@ -344,10 +358,10 @@ bool vault_aux_jelly(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_animal(MONRACE_IDX r_idx)
+bool vault_aux_animal(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if (!(r_ptr->flags3 & (RF3_ANIMAL)))
@@ -362,10 +376,10 @@ bool vault_aux_animal(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_undead(MONRACE_IDX r_idx)
+bool vault_aux_undead(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if (!(r_ptr->flags3 & (RF3_UNDEAD)))
@@ -380,13 +394,13 @@ bool vault_aux_undead(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_chapel_g(MONRACE_IDX r_idx)
+bool vault_aux_chapel_g(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     static int chapel_list[] = { MON_NOV_PRIEST, MON_NOV_PALADIN, MON_NOV_PRIEST_G, MON_NOV_PALADIN_G, MON_PRIEST, MON_JADE_MONK, MON_IVORY_MONK,
         MON_ULTRA_PALADIN, MON_EBONY_MONK, MON_W_KNIGHT, MON_KNI_TEMPLAR, MON_PALADIN, MON_TOPAZ_MONK, 0 };
 
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if (r_ptr->flags3 & (RF3_EVIL))
@@ -411,10 +425,10 @@ bool vault_aux_chapel_g(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_kennel(MONRACE_IDX r_idx)
+bool vault_aux_kennel(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if (!angband_strchr("CZ", r_ptr->d_char))
@@ -429,10 +443,10 @@ bool vault_aux_kennel(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_mimic(MONRACE_IDX r_idx)
+bool vault_aux_mimic(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if (!angband_strchr("!$&(/=?[\\|", r_ptr->d_char))
@@ -447,9 +461,9 @@ bool vault_aux_mimic(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_clone(MONRACE_IDX r_idx)
+bool vault_aux_clone(player_type *player_ptr, MONRACE_IDX r_idx)
 {
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     return (r_idx == vault_aux_race);
@@ -461,10 +475,10 @@ bool vault_aux_clone(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_symbol_e(MONRACE_IDX r_idx)
+bool vault_aux_symbol_e(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW))
@@ -485,10 +499,10 @@ bool vault_aux_symbol_e(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_symbol_g(MONRACE_IDX r_idx)
+bool vault_aux_symbol_g(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW))
@@ -509,10 +523,10 @@ bool vault_aux_symbol_g(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_orc(MONRACE_IDX r_idx)
+bool vault_aux_orc(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if (!(r_ptr->flags3 & RF3_ORC))
@@ -530,10 +544,10 @@ bool vault_aux_orc(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_troll(MONRACE_IDX r_idx)
+bool vault_aux_troll(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if (!(r_ptr->flags3 & RF3_TROLL))
@@ -551,10 +565,10 @@ bool vault_aux_troll(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_giant(MONRACE_IDX r_idx)
+bool vault_aux_giant(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if (!(r_ptr->flags3 & RF3_GIANT))
@@ -575,10 +589,10 @@ bool vault_aux_giant(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_dragon(MONRACE_IDX r_idx)
+bool vault_aux_dragon(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if (!(r_ptr->flags3 & RF3_DRAGON))
@@ -599,10 +613,10 @@ bool vault_aux_dragon(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_demon(MONRACE_IDX r_idx)
+bool vault_aux_demon(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW))
@@ -620,10 +634,10 @@ bool vault_aux_demon(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_cthulhu(MONRACE_IDX r_idx)
+bool vault_aux_cthulhu(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW))
@@ -641,7 +655,7 @@ bool vault_aux_cthulhu(MONRACE_IDX r_idx)
  * @param r_idx 確認したいモンスター種族ID
  * @return 生成必要条件を満たしているならTRUEを返す。
  */
-bool vault_aux_dark_elf(MONRACE_IDX r_idx)
+bool vault_aux_dark_elf(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     static int dark_elf_list[] = {
         MON_D_ELF,
@@ -657,7 +671,7 @@ bool vault_aux_dark_elf(MONRACE_IDX r_idx)
         0,
     };
 
-    if (!vault_monster_okay(r_idx))
+    if (!vault_monster_okay(player_ptr, r_idx))
         return FALSE;
 
     for (int i = 0; dark_elf_list[i]; i++)
@@ -711,8 +725,11 @@ bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx)
  * @param r_idx モンスターID
  * @return 死体を食べられるならTRUEを返す。
  */
-bool monster_hook_human(MONRACE_IDX r_idx)
+bool monster_hook_human(player_type *player_ptr, MONRACE_IDX r_idx)
 {
+    /* Unused */
+    (void)player_ptr;
+
     monster_race *r_ptr = &r_info[r_idx];
     if (r_ptr->flags1 & (RF1_UNIQUE))
         return FALSE;
@@ -724,18 +741,17 @@ bool monster_hook_human(MONRACE_IDX r_idx)
 }
 
 /*!
- * todo ここにplayer_tyepを追加すると関数ポインタの収拾がつかなくなるので保留
  * @brief 悪夢の元凶となるモンスターかどうかを返す。
  * @param r_idx 判定対象となるモンスターのID
  * @return 悪夢の元凶となり得るか否か。
  */
-bool get_nightmare(MONRACE_IDX r_idx)
+bool get_nightmare(player_type *player_ptr, MONRACE_IDX r_idx)
 {
     monster_race *r_ptr = &r_info[r_idx];
     if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR)))
         return FALSE;
 
-    if (r_ptr->level <= p_ptr->lev)
+    if (r_ptr->level <= player_ptr->lev)
         return FALSE;
 
     return TRUE;
@@ -746,8 +762,11 @@ bool get_nightmare(MONRACE_IDX r_idx)
  * @param r_idx 判定したいモンスター種族のID
  * @return 釣れる対象ならばTRUEを返す
  */
-bool monster_is_fishing_target(MONRACE_IDX r_idx)
+bool monster_is_fishing_target(player_type *player_ptr, MONRACE_IDX r_idx)
 {
+    /* Unused */
+    (void)player_ptr;
+
     monster_race *r_ptr = &r_info[r_idx];
     if ((r_ptr->flags7 & RF7_AQUATIC) && !(r_ptr->flags1 & RF1_UNIQUE) && angband_strchr("Jjlw", r_ptr->d_char))
         return TRUE;
@@ -762,8 +781,11 @@ bool monster_is_fishing_target(MONRACE_IDX r_idx)
  * 自爆以外のなんらかのHP攻撃手段を持っていること。
  * @return 参加できるか否か
  */
-bool monster_can_entry_arena(MONRACE_IDX r_idx)
+bool monster_can_entry_arena(player_type *player_ptr, MONRACE_IDX r_idx)
 {
+    /* Unused */
+    (void)player_ptr;
+
     HIT_POINT dam = 0;
     monster_race *r_ptr = &r_info[r_idx];
     if (r_ptr->flags1 & (RF1_NEVER_MOVE))
@@ -802,8 +824,11 @@ bool monster_can_entry_arena(MONRACE_IDX r_idx)
  * @param r_idx チェックしたいモンスター種族のID
  * @return 人形にできるならTRUEを返す
  */
-bool item_monster_okay(MONRACE_IDX r_idx)
+bool item_monster_okay(player_type *player_ptr, MONRACE_IDX r_idx)
 {
+    /* Unused */
+    (void)player_ptr;
+
     monster_race *r_ptr = &r_info[r_idx];
     if (r_ptr->flags1 & RF1_UNIQUE)
         return FALSE;
@@ -827,7 +852,7 @@ bool item_monster_okay(MONRACE_IDX r_idx)
 }
 
 /*!
- * vaultに配置可能なモンスターの条件を指定するマクロ / Monster validation macro
+ * vaultに配置可能なモンスターの条件を指定する / Monster validation
  * @param r_idx モンスター種別ID
  * @param Vaultに配置可能であればTRUE
  * @details
@@ -835,8 +860,9 @@ bool item_monster_okay(MONRACE_IDX r_idx)
  * Line 2 -- forbid uniques
  * Line 3 -- forbid aquatic monsters
  */
-bool vault_monster_okay(MONRACE_IDX r_idx)
+bool vault_monster_okay(player_type *player_ptr, MONRACE_IDX r_idx)
 {
-    return (mon_hook_dungeon(r_idx) && !(r_info[r_idx].flags1 & RF1_UNIQUE) && !(r_info[r_idx].flags7 & RF7_UNIQUE2) && !(r_info[r_idx].flagsr & RFR_RES_ALL)
+    return (mon_hook_dungeon(player_ptr, r_idx) && !(r_info[r_idx].flags1 & RF1_UNIQUE) && !(r_info[r_idx].flags7 & RF7_UNIQUE2)
+        && !(r_info[r_idx].flagsr & RFR_RES_ALL)
         && !(r_info[r_idx].flags7 & RF7_AQUATIC));
 }
index 2779ba0..5d9a359 100644 (file)
@@ -6,11 +6,11 @@ extern int vault_aux_race;
 extern char vault_aux_char;
 extern BIT_FLAGS vault_aux_dragon_mask4;
 
-bool mon_hook_quest(MONRACE_IDX r_idx);
-bool mon_hook_dungeon(MONRACE_IDX r_idx);
+bool mon_hook_quest(player_type *player_ptr, MONRACE_IDX r_idx);
+bool mon_hook_dungeon(player_type *player_ptr, MONRACE_IDX r_idx);
 bool mon_hook_ocean(MONRACE_IDX r_idx);
 bool mon_hook_shore(MONRACE_IDX r_idx);
-bool mon_hook_waste(MONRACE_IDX r_idx);
+bool mon_hook_waste(player_type *player_ptr, MONRACE_IDX r_idx);
 bool mon_hook_town(MONRACE_IDX r_idx);
 bool mon_hook_wood(MONRACE_IDX r_idx);
 bool mon_hook_volcano(MONRACE_IDX r_idx);
@@ -18,41 +18,41 @@ bool mon_hook_wood(MONRACE_IDX r_idx);
 bool mon_hook_volcano(MONRACE_IDX r_idx);
 bool mon_hook_mountain(MONRACE_IDX r_idx);
 bool mon_hook_grass(MONRACE_IDX r_idx);
-bool mon_hook_deep_water(MONRACE_IDX r_idx);
-bool mon_hook_shallow_water(MONRACE_IDX r_idx);
-bool mon_hook_lava(MONRACE_IDX r_idx);
+bool mon_hook_deep_water(player_type *player_ptr, MONRACE_IDX r_idx);
+bool mon_hook_shallow_water(player_type *player_ptr, MONRACE_IDX r_idx);
+bool mon_hook_lava(player_type *player_ptr, MONRACE_IDX r_idx);
 bool mon_hook_floor(MONRACE_IDX r_idx);
 
 void vault_prep_clone(player_type *player_ptr);
 void vault_prep_dragon(player_type *player_ptr);
 void vault_prep_symbol(player_type *player_ptr);
 
-bool vault_aux_lite(MONRACE_IDX r_idx);
-bool vault_aux_shards(MONRACE_IDX r_idx);
-bool vault_aux_simple(MONRACE_IDX r_idx);
-bool vault_aux_jelly(MONRACE_IDX r_idx);
-bool vault_aux_animal(MONRACE_IDX r_idx);
-bool vault_aux_undead(MONRACE_IDX r_idx);
-bool vault_aux_chapel_g(MONRACE_IDX r_idx);
-bool vault_aux_kennel(MONRACE_IDX r_idx);
-bool vault_aux_mimic(MONRACE_IDX r_idx);
-bool vault_aux_clone(MONRACE_IDX r_idx);
-bool vault_aux_symbol_e(MONRACE_IDX r_idx);
-bool vault_aux_symbol_g(MONRACE_IDX r_idx);
-bool vault_aux_orc(MONRACE_IDX r_idx);
-bool vault_aux_troll(MONRACE_IDX r_idx);
-bool vault_aux_giant(MONRACE_IDX r_idx);
-bool vault_aux_dragon(MONRACE_IDX r_idx);
-bool vault_aux_demon(MONRACE_IDX r_idx);
-bool vault_aux_cthulhu(MONRACE_IDX r_idx);
-bool vault_aux_dark_elf(MONRACE_IDX r_idx);
+bool vault_aux_lite(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_shards(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_simple(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_jelly(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_animal(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_undead(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_chapel_g(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_kennel(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_mimic(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_clone(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_symbol_e(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_symbol_g(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_orc(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_troll(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_giant(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_dragon(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_demon(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_cthulhu(player_type *player_ptr, MONRACE_IDX r_idx);
+bool vault_aux_dark_elf(player_type *player_ptr, MONRACE_IDX r_idx);
 
-bool vault_monster_okay(MONRACE_IDX r_idx);
+bool vault_monster_okay(player_type *player_ptr, MONRACE_IDX r_idx);
 
 bool monster_living(MONRACE_IDX r_idx);
 bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx);
-bool monster_hook_human(MONRACE_IDX r_idx);
-bool get_nightmare(MONRACE_IDX r_idx);
-bool monster_is_fishing_target(MONRACE_IDX r_idx);
-bool monster_can_entry_arena(MONRACE_IDX r_idx);
-bool item_monster_okay(MONRACE_IDX r_idx);
+bool monster_hook_human(player_type *player_ptr, MONRACE_IDX r_idx);
+bool get_nightmare(player_type *player_ptr, MONRACE_IDX r_idx);
+bool monster_is_fishing_target(player_type *player_ptr, MONRACE_IDX r_idx);
+bool monster_can_entry_arena(player_type *player_ptr, MONRACE_IDX r_idx);
+bool item_monster_okay(player_type *player_ptr, MONRACE_IDX r_idx);
index f47c835..cc6347f 100644 (file)
@@ -201,15 +201,14 @@ MONRACE_IDX get_mon_num(player_type *player_ptr, DEPTH level, BIT_FLAGS option)
 }
 
 /*!
- * todo ここにplayer_typeを追加すると関数ポインタ周りの収拾がつかなくなるので保留
  * @param player_ptr プレーヤーへの参照ポインタ
  * @brief カメレオンの王の変身対象となるモンスターかどうか判定する / Hack -- the index of the summoning monster
  * @param r_idx モンスター種族ID
  * @return 対象にできるならtrueを返す
  */
-static bool monster_hook_chameleon_lord(MONRACE_IDX r_idx)
+static bool monster_hook_chameleon_lord(player_type *player_ptr, MONRACE_IDX r_idx)
 {
-    floor_type *floor_ptr = p_ptr->current_floor_ptr;
+    floor_type *floor_ptr = player_ptr->current_floor_ptr;
     monster_race *r_ptr = &r_info[r_idx];
     monster_type *m_ptr = &floor_ptr->m_list[chameleon_change_m_idx];
     monster_race *old_r_ptr = &r_info[m_ptr->r_idx];
@@ -226,14 +225,14 @@ static bool monster_hook_chameleon_lord(MONRACE_IDX r_idx)
         || (r_ptr->blow[3].method == RBM_EXPLODE))
         return FALSE;
 
-    if (!monster_can_cross_terrain(p_ptr, floor_ptr->grid_array[m_ptr->fy][m_ptr->fx].feat, r_ptr, 0))
+    if (!monster_can_cross_terrain(player_ptr, floor_ptr->grid_array[m_ptr->fy][m_ptr->fx].feat, r_ptr, 0))
         return FALSE;
 
     if (!(old_r_ptr->flags7 & RF7_CHAMELEON)) {
-        if (monster_has_hostile_align(p_ptr, m_ptr, 0, 0, r_ptr))
+        if (monster_has_hostile_align(player_ptr, m_ptr, 0, 0, r_ptr))
             return FALSE;
     } else if (summon_specific_who > 0) {
-        if (monster_has_hostile_align(p_ptr, &floor_ptr->m_list[summon_specific_who], 0, 0, r_ptr))
+        if (monster_has_hostile_align(player_ptr, &floor_ptr->m_list[summon_specific_who], 0, 0, r_ptr))
             return FALSE;
     }
 
@@ -241,15 +240,14 @@ static bool monster_hook_chameleon_lord(MONRACE_IDX r_idx)
 }
 
 /*!
- * todo ここにplayer_typeを追加すると関数ポインタ周りの収拾がつかなくなるので保留
  * @brief カメレオンの変身対象となるモンスターかどうか判定する / Hack -- the index of the summoning monster
  * @param r_idx モンスター種族ID
  * @return 対象にできるならtrueを返す
  * @todo グローバル変数対策の上 monster_hook.cへ移す。
  */
-static bool monster_hook_chameleon(MONRACE_IDX r_idx)
+static bool monster_hook_chameleon(player_type *player_ptr, MONRACE_IDX r_idx)
 {
-    floor_type *floor_ptr = p_ptr->current_floor_ptr;
+    floor_type *floor_ptr = player_ptr->current_floor_ptr;
     monster_race *r_ptr = &r_info[r_idx];
     monster_type *m_ptr = &floor_ptr->m_list[chameleon_change_m_idx];
     monster_race *old_r_ptr = &r_info[m_ptr->r_idx];
@@ -265,7 +263,7 @@ static bool monster_hook_chameleon(MONRACE_IDX r_idx)
         || (r_ptr->blow[3].method == RBM_EXPLODE))
         return FALSE;
 
-    if (!monster_can_cross_terrain(p_ptr, floor_ptr->grid_array[m_ptr->fy][m_ptr->fx].feat, r_ptr, 0))
+    if (!monster_can_cross_terrain(player_ptr, floor_ptr->grid_array[m_ptr->fy][m_ptr->fx].feat, r_ptr, 0))
         return FALSE;
 
     if (!(old_r_ptr->flags7 & RF7_CHAMELEON)) {
@@ -276,11 +274,11 @@ static bool monster_hook_chameleon(MONRACE_IDX r_idx)
         if (!(old_r_ptr->flags3 & (RF3_GOOD | RF3_EVIL)) && (r_ptr->flags3 & (RF3_GOOD | RF3_EVIL)))
             return FALSE;
     } else if (summon_specific_who > 0) {
-        if (monster_has_hostile_align(p_ptr, &floor_ptr->m_list[summon_specific_who], 0, 0, r_ptr))
+        if (monster_has_hostile_align(player_ptr, &floor_ptr->m_list[summon_specific_who], 0, 0, r_ptr))
             return FALSE;
     }
 
-    return (*(get_monster_hook(p_ptr)))(r_idx);
+    return (*(get_monster_hook(player_ptr)))(player_ptr, r_idx);
 }
 
 /*!
index 3dd805e..479f1fd 100644 (file)
@@ -334,7 +334,7 @@ errr get_mon_num_prep(player_type *player_ptr, monsterrace_hook_type monster_hoo
         entry->prob2 = 0;
         r_ptr = &r_info[entry->index];
 
-        if ((get_mon_num_hook && !((*get_mon_num_hook)(entry->index))) || (get_mon_num2_hook && !((*get_mon_num2_hook)(entry->index))))
+        if ((get_mon_num_hook && !((*get_mon_num_hook)(player_ptr, entry->index))) || (get_mon_num2_hook && !((*get_mon_num2_hook)(player_ptr, entry->index))))
             continue;
 
         if (!player_ptr->phase_out && !chameleon_change_m_idx && summon_specific_type != SUMMON_GUARDIANS) {
index 2dc6c55..4bd0aec 100644 (file)
@@ -2,7 +2,7 @@
 
 #include "system/angband.h"
 
-typedef bool (*monsterrace_hook_type)(MONRACE_IDX r_idx);
+typedef bool (*monsterrace_hook_type)(player_type *, MONRACE_IDX);
 
 extern MONSTER_IDX hack_m_idx;
 extern MONSTER_IDX hack_m_idx_ii;
index ccf4793..eacfa30 100644 (file)
@@ -126,7 +126,7 @@ void apply_magic_others(player_type *owner_ptr, object_type *o_ptr, int power)
         while (TRUE) {
             i = randint1(max_r_idx - 1);
 
-            if (!item_monster_okay(i))
+            if (!item_monster_okay(owner_ptr, i))
                 continue;
             if (i == MON_TSUCHINOKO)
                 continue;
index 079e98a..d9b89ee 100644 (file)
@@ -35,8 +35,8 @@
 typedef struct vault_aux_type
 {
        concptr name;
-       bool(*hook_func)(MONRACE_IDX r_idx);
-       void(*prep_func)(player_type *player_ptr);
+    bool (*hook_func)(player_type *player_ptr, MONRACE_IDX r_idx);
+       void (*prep_func)(player_type *player_ptr);
        DEPTH level;
        int chance;
 } vault_aux_type;
index 0bb2ec3..50ede6e 100644 (file)
@@ -1,5 +1,4 @@
 #include "room/rooms-pit-nest.h"
-#include "util/sort.h"
 #include "dungeon/dungeon.h"
 #include "floor/floor-generate.h"
 #include "floor/floor.h"
@@ -7,18 +6,22 @@
 #include "game-option/cheat-types.h"
 #include "grid/feature.h"
 #include "grid/grid.h"
+#include "monster-floor/monster-generator.h"
+#include "monster-floor/place-monster-types.h"
+#include "monster-race/monster-race-hook.h"
 #include "monster-race/monster-race.h"
+#include "monster-race/race-flags-resistance.h"
+#include "monster-race/race-flags1.h"
 #include "monster-race/race-flags2.h"
 #include "monster-race/race-flags3.h"
 #include "monster-race/race-flags4.h"
-#include "monster-race/monster-race-hook.h"
-#include "monster-floor/monster-generator.h"
+#include "monster-race/race-flags7.h"
 #include "monster/monster-info.h"
 #include "monster/monster-list.h"
 #include "monster/monster-util.h"
-#include "monster-floor/place-monster-types.h"
 #include "room/pit-nest-kinds-table.h"
 #include "rooms.h"
+#include "util/sort.h"
 #include "view/display-messages.h"
 
 /*!
@@ -644,16 +647,17 @@ bool build_type6(player_type *player_ptr)
        return TRUE;
 }
 
-
 /*
-* todo vault_monster_okay() をmonsterrace-hook以外から呼んでいるのはここだけなので、何とかしたい
-* Helper function for "trapped monster pit"
-*/
-static bool vault_aux_trapped_pit(MONRACE_IDX r_idx)
+ * Helper function for "trapped monster pit"
+ */
+static bool vault_aux_trapped_pit(player_type *player_ptr, MONRACE_IDX r_idx)
 {
-       monster_race *r_ptr = &r_info[r_idx];
+    /* Unused */
+    (void)player_ptr;
+
+    monster_race *r_ptr = &r_info[r_idx];
 
-       if (!vault_monster_okay(r_idx)) return FALSE;
+       if (!vault_monster_okay(player_ptr, r_idx)) return FALSE;
 
        /* No wall passing monster */
        if (r_ptr->flags2 & (RF2_PASS_WALL | RF2_KILL_WALL)) return FALSE;