OSDN Git Service

[Refactor] #37353 コメント整理。 / Refactor comments.
[hengband/hengband.git] / src / monsterrace-hook.c
index 6fb76c0..1b9e91a 100644 (file)
@@ -1,5 +1,5 @@
 #include "angband.h"
-#include "monster-hook.h"
+#include "monsterrace-hook.h"
 
 /*! 通常pit生成時のモンスターの構成条件ID / Race index for "monster pit (clone)" */
 int vault_aux_race;
@@ -665,3 +665,88 @@ bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx)
                return FALSE;
        }
 }
+
+/*!
+ * @brief バルログが死体を食べられるモンスターかの判定 / Hook function for human corpses
+ * @param r_idx モンスターID
+ * @return 死体を食べられるならTRUEを返す。
+ */
+bool monster_hook_human(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+       if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE;
+       if (my_strchr("pht", r_ptr->d_char)) return TRUE;
+
+       return FALSE;
+}
+
+/*!
+ * @brief 悪夢の元凶となるモンスターかどうかを返す。
+ * @param r_idx 判定対象となるモンスターのID
+ * @return 悪夢の元凶となり得るか否か。
+ */
+bool get_nightmare(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       /* Require eldritch horrors */
+       if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return (FALSE);
+
+       /* Require high level */
+       if (r_ptr->level <= p_ptr->lev) return (FALSE);
+
+       /* Accept this monster */
+       return (TRUE);
+}
+
+/*!
+ * @brief モンスター種族が釣れる種族かどうかを判定する。
+ * @param r_idx 判定したいモンスター種族のID
+ * @return 釣れる対象ならばTRUEを返す
+ */
+bool monster_is_fishing_target(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if ((r_ptr->flags7 & RF7_AQUATIC) && !(r_ptr->flags1 & RF1_UNIQUE) && my_strchr("Jjlw", r_ptr->d_char))
+               return TRUE;
+       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);
+}