}
/*!
- * 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;
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;
}
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;
}
}
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));
}
/*!
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];
|| (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);
}
/*!
* @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;
}
/*!
- * 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);
}
* @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;
}
* @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;
* @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;
* @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))
/*
* 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))
/*
* 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))
* @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の生成必要条件を満たしているかを返す /
* @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))
* @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)))
* @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)))
* @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))
* @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))
* @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))
* @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);
* @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))
* @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))
* @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))
* @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))
* @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))
* @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))
* @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))
* @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))
* @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,
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++)
* @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;
}
/*!
- * 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;
* @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;
* 自爆以外のなんらかの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))
* @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;
}
/*!
- * vaultに配置可能なモンスターの条件を指定するマクロ / Monster validation macro
+ * vaultに配置可能なモンスターの条件を指定する / Monster validation
* @param r_idx モンスター種別ID
* @param Vaultに配置可能であればTRUE
* @details
* 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));
}
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);
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);
}
/*!
- * 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];
|| (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;
}
}
/*!
- * 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];
|| (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 (!(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);
}
/*!
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) {
#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;
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;
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;
#include "room/rooms-pit-nest.h"
-#include "util/sort.h"
#include "dungeon/dungeon.h"
#include "floor/floor-generate.h"
#include "floor/floor.h"
#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"
/*!
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;