+/*!
+ * @brief モンスターへの単体抹殺処理サブルーチン / Delete a non-unique/non-quest monster
+ * @param m_idx 抹殺するモンスターID
+ * @param power 抹殺の威力
+ * @param player_cast プレイヤーの魔法によるものならば TRUE
+ * @param dam_side プレイヤーへの負担ダメージ量(1d(dam_side))
+ * @param spell_name 抹殺効果を起こした魔法の名前
+ * @return 効力があった場合TRUEを返す
+ */
+bool genocide_aux(int m_idx, int power, bool player_cast, int dam_side, cptr spell_name)
+{
+ int msec = delay_factor * delay_factor * delay_factor;
+ monster_type *m_ptr = &m_list[m_idx];
+ monster_race *r_ptr = &r_info[m_ptr->r_idx];
+ bool resist = FALSE;
+
+ if (is_pet(m_ptr) && !player_cast) return FALSE;
+
+ /* Hack -- Skip Unique Monsters or Quest Monsters */
+ if (r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) resist = TRUE;
+
+ else if (r_ptr->flags7 & RF7_UNIQUE2) resist = TRUE;
+
+ else if (m_idx == p_ptr->riding) resist = TRUE;
+
+ else if ((p_ptr->inside_quest && !random_quest_number(dun_level)) || p_ptr->inside_arena || p_ptr->inside_battle) resist = TRUE;
+
+ else if (player_cast && (r_ptr->level > randint0(power))) resist = TRUE;
+
+ else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) resist = TRUE;
+
+ /* Delete the monster */
+ else
+ {
+ if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname)
+ {
+ char m_name[80];
+
+ monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
+ do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_GENOCIDE, m_name);
+ }
+
+ delete_monster_idx(m_idx);
+ }
+
+ if (resist && player_cast)
+ {
+ bool see_m = is_seen(m_ptr);
+ char m_name[80];
+
+ monster_desc(m_name, m_ptr, 0);
+ if (see_m)
+ {
+ msg_format(_("%^sには効果がなかった。", "%^s is unaffected."), m_name);
+ }
+ if (MON_CSLEEP(m_ptr))
+ {
+ (void)set_monster_csleep(m_idx, 0);
+ if (m_ptr->ml)
+ {
+ msg_format(_("%^sが目を覚ました。", "%^s wakes up."), m_name);
+ }
+ }
+ if (is_friendly(m_ptr) && !is_pet(m_ptr))
+ {
+ if (see_m)
+ {
+ msg_format(_("%sは怒った!", "%^s gets angry!"), m_name);
+ }
+ set_hostile(m_ptr);
+ }
+ if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
+ }
+
+ if (player_cast)
+ {
+ /* Take damage */
+ take_hit(DAMAGE_GENO, randint1(dam_side), format(_("%^sの呪文を唱えた疲労", "the strain of casting %^s"), spell_name), -1);
+ }
+
+ /* Visual feedback */
+ move_cursor_relative(p_ptr->y, p_ptr->x);
+
+ /* Redraw */
+ p_ptr->redraw |= (PR_HP);
+
+ /* Window stuff */
+ p_ptr->window |= (PW_PLAYER);
+
+ /* Handle */
+ handle_stuff();
+
+ /* Fresh */
+ Term_fresh();
+
+ /* Delay */
+ Term_xtra(TERM_XTRA_DELAY, msec);
+
+ return !resist;
+}
+