4 #include "monsterrace-hook.h"
6 #include "monster-spell.h"
9 #include "monsterrace.h"
12 /*! 通常pit生成時のモンスターの構成条件ID / Race index for "monster pit (clone)" */
15 /*! 単一シンボルpit生成時の指定シンボル / Race index for "monster pit (symbol clone)" */
18 /*! ブレス属性に基づくドラゴンpit生成時条件マスク / Breath mask for "monster pit (dragon)" */
19 BIT_FLAGS vault_aux_dragon_mask4;
23 * @brief pit/nestの基準となる単種モンスターを決める /
24 * @param player_ptr プレーヤーへの参照ポインタ
27 void vault_prep_clone(player_type *player_ptr)
29 /* Apply the monster restriction */
30 get_mon_num_prep(player_ptr, vault_aux_simple, NULL);
32 /* Pick a race to clone */
33 vault_aux_race = get_mon_num(player_ptr, player_ptr->current_floor_ptr->dun_level + 10);
35 /* Remove the monster restriction */
36 get_mon_num_prep(player_ptr, NULL, NULL);
41 * @brief pit/nestの基準となるモンスターシンボルを決める /
42 * @param player_ptr プレーヤーへの参照ポインタ
45 void vault_prep_symbol(player_type *player_ptr)
49 /* Apply the monster restriction */
50 get_mon_num_prep(player_ptr, vault_aux_simple, NULL);
52 /* Pick a race to clone */
53 r_idx = get_mon_num(player_ptr, player_ptr->current_floor_ptr->dun_level + 10);
55 /* Remove the monster restriction */
56 get_mon_num_prep(player_ptr, NULL, NULL);
58 /* Extract the symbol */
59 vault_aux_char = r_info[r_idx].d_char;
64 * todo 関数ポインタ設計の都合上、使わないが引数に含めなければならない
65 * @brief pit/nestの基準となるドラゴンの種類を決める /
66 * @param player_ptr プレーヤーへの参照ポインタ
69 void vault_prep_dragon(player_type *player_ptr)
72 /* Pick dragon type */
76 vault_aux_dragon_mask4 = RF4_BR_ACID;
79 vault_aux_dragon_mask4 = RF4_BR_ELEC;
82 vault_aux_dragon_mask4 = RF4_BR_FIRE;
85 vault_aux_dragon_mask4 = RF4_BR_COLD;
88 vault_aux_dragon_mask4 = RF4_BR_POIS;
90 default: /* Multi-hued */
91 vault_aux_dragon_mask4 = (RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | RF4_BR_COLD | RF4_BR_POIS);
97 * @brief モンスターがクエストの討伐対象に成り得るかを返す / Hook function for quest monsters
98 * @param r_idx モンスターID
99 * @return 討伐対象にできるならTRUEを返す。
101 bool mon_hook_quest(MONRACE_IDX r_idx)
103 monster_race *r_ptr = &r_info[r_idx];
105 /* Random quests are in the dungeon */
106 if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
108 /* No random quests for aquatic monsters */
109 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
111 /* No random quests for multiplying monsters */
112 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
114 /* No quests to kill friendly monsters */
115 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
122 * @brief モンスターがダンジョンに出現するかどうかを返す
123 * @param r_idx 判定するモンスターの種族ID
124 * @return ダンジョンに出現するならばTRUEを返す
126 bool mon_hook_dungeon(MONRACE_IDX r_idx)
128 monster_race *r_ptr = &r_info[r_idx];
130 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
134 dungeon_type *d_ptr = &d_info[p_ptr->dungeon_idx];
135 if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&
136 (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
143 * @brief モンスターが海洋に出現するかどうかを返す
144 * @param r_idx 判定するモンスターの種族ID
145 * @return 海洋に出現するならばTRUEを返す
147 bool mon_hook_ocean(MONRACE_IDX r_idx)
149 monster_race *r_ptr = &r_info[r_idx];
151 if (r_ptr->flags8 & RF8_WILD_OCEAN)
159 * @brief モンスターが海岸に出現するかどうかを返す
160 * @param r_idx 判定するモンスターの種族ID
161 * @return 海岸に出現するならばTRUEを返す
163 bool mon_hook_shore(MONRACE_IDX r_idx)
165 monster_race *r_ptr = &r_info[r_idx];
167 if (r_ptr->flags8 & RF8_WILD_SHORE)
175 * @brief モンスターが荒地に出現するかどうかを返す
176 * @param r_idx 判定するモンスターの種族ID
177 * @return 荒地に出現するならばTRUEを返す
179 bool mon_hook_waste(MONRACE_IDX r_idx)
181 monster_race *r_ptr = &r_info[r_idx];
183 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
191 * @brief モンスターが町に出現するかどうかを返す
192 * @param r_idx 判定するモンスターの種族ID
193 * @return 荒地に出現するならばTRUEを返す
195 bool mon_hook_town(MONRACE_IDX r_idx)
197 monster_race *r_ptr = &r_info[r_idx];
199 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
207 * @brief モンスターが森林に出現するかどうかを返す
208 * @param r_idx 判定するモンスターの種族ID
209 * @return 森林に出現するならばTRUEを返す
211 bool mon_hook_wood(MONRACE_IDX r_idx)
213 monster_race *r_ptr = &r_info[r_idx];
215 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
223 * @brief モンスターが火山に出現するかどうかを返す
224 * @param r_idx 判定するモンスターの種族ID
225 * @return 火山に出現するならばTRUEを返す
227 bool mon_hook_volcano(MONRACE_IDX r_idx)
229 monster_race *r_ptr = &r_info[r_idx];
231 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
238 * @brief モンスターが山地に出現するかどうかを返す
239 * @param r_idx 判定するモンスターの種族ID
240 * @return 山地に出現するならばTRUEを返す
242 bool mon_hook_mountain(MONRACE_IDX r_idx)
244 monster_race *r_ptr = &r_info[r_idx];
246 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
254 * @brief モンスターが草原に出現するかどうかを返す
255 * @param r_idx 判定するモンスターの種族ID
256 * @return 森林に出現するならばTRUEを返す
258 bool mon_hook_grass(MONRACE_IDX r_idx)
260 monster_race *r_ptr = &r_info[r_idx];
262 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
269 * @brief モンスターが深い水地形に出現するかどうかを返す
270 * @param r_idx 判定するモンスターの種族ID
271 * @return 深い水地形に出現するならばTRUEを返す
273 bool mon_hook_deep_water(MONRACE_IDX r_idx)
275 monster_race *r_ptr = &r_info[r_idx];
277 if (!mon_hook_dungeon(r_idx)) return FALSE;
279 if (r_ptr->flags7 & RF7_AQUATIC)
287 * @brief モンスターが浅い水地形に出現するかどうかを返す
288 * @param r_idx 判定するモンスターの種族ID
289 * @return 浅い水地形に出現するならばTRUEを返す
291 bool mon_hook_shallow_water(MONRACE_IDX r_idx)
293 monster_race *r_ptr = &r_info[r_idx];
295 if (!mon_hook_dungeon(r_idx)) return FALSE;
297 if (r_ptr->flags2 & RF2_AURA_FIRE)
305 * @brief モンスターが溶岩地形に出現するかどうかを返す
306 * @param r_idx 判定するモンスターの種族ID
307 * @return 溶岩地形に出現するならばTRUEを返す
309 bool mon_hook_lava(MONRACE_IDX r_idx)
311 monster_race *r_ptr = &r_info[r_idx];
312 if (!mon_hook_dungeon(r_idx)) return FALSE;
313 if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||
314 (r_ptr->flags7 & RF7_CAN_FLY)) &&
315 !(r_ptr->flags3 & RF3_AURA_COLD))
323 * @brief モンスターが通常の床地形に出現するかどうかを返す
324 * @param r_idx 判定するモンスターの種族ID
325 * @return 通常の床地形に出現するならばTRUEを返す
327 bool mon_hook_floor(MONRACE_IDX r_idx)
329 monster_race *r_ptr = &r_info[r_idx];
330 if (!(r_ptr->flags7 & RF7_AQUATIC) || (r_ptr->flags7 & RF7_CAN_FLY))
337 * Helper function for "glass room"
339 bool vault_aux_lite(MONRACE_IDX r_idx)
341 monster_race *r_ptr = &r_info[r_idx];
342 if (!vault_monster_okay(r_idx)) return FALSE;
343 if (!(r_ptr->flags4 & RF4_BR_LITE) && !(r_ptr->a_ability_flags1 & RF5_BA_LITE)) return FALSE;
344 if (r_ptr->flags2 & (RF2_PASS_WALL | RF2_KILL_WALL)) return FALSE;
345 if (r_ptr->flags4 & RF4_BR_DISI) return FALSE;
350 * Helper function for "glass room"
352 bool vault_aux_shards(MONRACE_IDX r_idx)
354 monster_race *r_ptr = &r_info[r_idx];
355 if (!vault_monster_okay(r_idx)) return FALSE;
356 if (!(r_ptr->flags4 & RF4_BR_SHAR)) return FALSE;
362 * @brief モンスターがVault生成の最低必要条件を満たしているかを返す /
363 * Helper monster selection function
364 * @param r_idx 確認したいモンスター種族ID
365 * @return Vault生成の最低必要条件を満たしているならTRUEを返す。
367 bool vault_aux_simple(MONRACE_IDX r_idx)
369 return (vault_monster_okay(r_idx));
374 * @brief モンスターがゼリーnestの生成必要条件を満たしているかを返す /
375 * Helper function for "monster nest (jelly)"
376 * @param r_idx 確認したいモンスター種族ID
377 * @return 生成必要条件を満たしているならTRUEを返す。
379 bool vault_aux_jelly(MONRACE_IDX r_idx)
381 monster_race *r_ptr = &r_info[r_idx];
382 if (!vault_monster_okay(r_idx)) return FALSE;
383 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return FALSE;
384 if (r_ptr->flags3 & (RF3_EVIL)) return FALSE;
385 if (!my_strchr("ijm,", r_ptr->d_char)) return FALSE;
390 * @brief モンスターが動物nestの生成必要条件を満たしているかを返す /
391 * Helper function for "monster nest (animal)"
392 * @param r_idx 確認したいモンスター種族ID
393 * @return 生成必要条件を満たしているならTRUEを返す。
395 bool vault_aux_animal(MONRACE_IDX r_idx)
397 monster_race *r_ptr = &r_info[r_idx];
398 if (!vault_monster_okay(r_idx)) return FALSE;
399 if (!(r_ptr->flags3 & (RF3_ANIMAL))) return FALSE;
405 * @brief モンスターがアンデッドnestの生成必要条件を満たしているかを返す /
406 * Helper function for "monster nest (undead)"
407 * @param r_idx 確認したいモンスター種族ID
408 * @return 生成必要条件を満たしているならTRUEを返す。
410 bool vault_aux_undead(MONRACE_IDX r_idx)
412 monster_race *r_ptr = &r_info[r_idx];
413 if (!vault_monster_okay(r_idx)) return FALSE;
414 if (!(r_ptr->flags3 & (RF3_UNDEAD))) return FALSE;
419 * @brief モンスターが聖堂nestの生成必要条件を満たしているかを返す /
420 * Helper function for "monster nest (chapel)"
421 * @param r_idx 確認したいモンスター種族ID
422 * @return 生成必要条件を満たしているならTRUEを返す。
424 bool vault_aux_chapel_g(MONRACE_IDX r_idx)
426 static int chapel_list[] = {
427 MON_NOV_PRIEST, MON_NOV_PALADIN, MON_NOV_PRIEST_G, MON_NOV_PALADIN_G,
428 MON_PRIEST, MON_JADE_MONK, MON_IVORY_MONK, MON_ULTRA_PALADIN,
429 MON_EBONY_MONK, MON_W_KNIGHT, MON_KNI_TEMPLAR, MON_PALADIN,
433 monster_race *r_ptr = &r_info[r_idx];
434 if (!vault_monster_okay(r_idx)) return FALSE;
435 if (r_ptr->flags3 & (RF3_EVIL)) return FALSE;
436 if ((r_idx == MON_A_GOLD) || (r_idx == MON_A_SILVER)) return FALSE;
437 if (r_ptr->d_char == 'A') return TRUE;
438 for (i = 0; chapel_list[i]; i++)
439 if (r_idx == chapel_list[i]) return TRUE;
444 * @brief モンスターが犬小屋nestの生成必要条件を満たしているかを返す /
445 * Helper function for "monster nest (kennel)"
446 * @param r_idx 確認したいモンスター種族ID
447 * @return 生成必要条件を満たしているならTRUEを返す。
449 bool vault_aux_kennel(MONRACE_IDX r_idx)
451 monster_race *r_ptr = &r_info[r_idx];
452 if (!vault_monster_okay(r_idx)) return FALSE;
453 if (!my_strchr("CZ", r_ptr->d_char)) return FALSE;
458 * @brief モンスターがミミックnestの生成必要条件を満たしているかを返す /
459 * Helper function for "monster nest (mimic)"
460 * @param r_idx 確認したいモンスター種族ID
461 * @return 生成必要条件を満たしているならTRUEを返す。
463 bool vault_aux_mimic(MONRACE_IDX r_idx)
465 monster_race *r_ptr = &r_info[r_idx];
466 if (!vault_monster_okay(r_idx)) return FALSE;
467 if (!my_strchr("!$&(/=?[\\|", r_ptr->d_char)) return FALSE;
472 * @brief モンスターが単一クローンnestの生成必要条件を満たしているかを返す /
473 * Helper function for "monster nest (clone)"
474 * @param r_idx 確認したいモンスター種族ID
475 * @return 生成必要条件を満たしているならTRUEを返す。
477 bool vault_aux_clone(MONRACE_IDX r_idx)
479 if (!vault_monster_okay(r_idx)) return FALSE;
480 return (r_idx == vault_aux_race);
485 * @brief モンスターが邪悪属性シンボルクローンnestの生成必要条件を満たしているかを返す /
486 * Helper function for "monster nest (symbol clone)"
487 * @param r_idx 確認したいモンスター種族ID
488 * @return 生成必要条件を満たしているならTRUEを返す。
490 bool vault_aux_symbol_e(MONRACE_IDX r_idx)
492 monster_race *r_ptr = &r_info[r_idx];
493 if (!vault_monster_okay(r_idx)) return FALSE;
494 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return FALSE;
495 if (r_ptr->flags3 & (RF3_GOOD)) return FALSE;
496 if (r_ptr->d_char != vault_aux_char) return FALSE;
502 * @brief モンスターが善良属性シンボルクローンnestの生成必要条件を満たしているかを返す /
503 * Helper function for "monster nest (symbol clone)"
504 * @param r_idx 確認したいモンスター種族ID
505 * @return 生成必要条件を満たしているならTRUEを返す。
507 bool vault_aux_symbol_g(MONRACE_IDX r_idx)
509 monster_race *r_ptr = &r_info[r_idx];
510 if (!vault_monster_okay(r_idx)) return FALSE;
511 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return FALSE;
512 if (r_ptr->flags3 & (RF3_EVIL)) return FALSE;
513 if (r_ptr->d_char != vault_aux_char) return FALSE;
519 * @brief モンスターがオークpitの生成必要条件を満たしているかを返す /
520 * Helper function for "monster pit (orc)"
521 * @param r_idx 確認したいモンスター種族ID
522 * @return 生成必要条件を満たしているならTRUEを返す。
524 bool vault_aux_orc(MONRACE_IDX r_idx)
526 monster_race *r_ptr = &r_info[r_idx];
527 if (!vault_monster_okay(r_idx)) return FALSE;
528 if (!(r_ptr->flags3 & RF3_ORC)) return FALSE;
529 if (r_ptr->flags3 & RF3_UNDEAD) return FALSE;
535 * @brief モンスターがトロルpitの生成必要条件を満たしているかを返す /
536 * Helper function for "monster pit (troll)"
537 * @param r_idx 確認したいモンスター種族ID
538 * @return 生成必要条件を満たしているならTRUEを返す。
540 bool vault_aux_troll(MONRACE_IDX r_idx)
542 monster_race *r_ptr = &r_info[r_idx];
543 if (!vault_monster_okay(r_idx)) return FALSE;
544 if (!(r_ptr->flags3 & RF3_TROLL)) return FALSE;
545 if (r_ptr->flags3 & RF3_UNDEAD) return FALSE;
551 * @brief モンスターが巨人pitの生成必要条件を満たしているかを返す /
552 * Helper function for "monster pit (giant)"
553 * @param r_idx 確認したいモンスター種族ID
554 * @return 生成必要条件を満たしているならTRUEを返す。
556 bool vault_aux_giant(MONRACE_IDX r_idx)
558 monster_race *r_ptr = &r_info[r_idx];
559 if (!vault_monster_okay(r_idx)) return FALSE;
560 if (!(r_ptr->flags3 & RF3_GIANT)) return FALSE;
561 if (r_ptr->flags3 & RF3_GOOD) return FALSE;
562 if (r_ptr->flags3 & RF3_UNDEAD) return FALSE;
568 * @brief モンスターがドラゴンpitの生成必要条件を満たしているかを返す /
569 * Helper function for "monster pit (dragon)"
570 * @param r_idx 確認したいモンスター種族ID
571 * @return 生成必要条件を満たしているならTRUEを返す。
573 bool vault_aux_dragon(MONRACE_IDX r_idx)
575 monster_race *r_ptr = &r_info[r_idx];
576 if (!vault_monster_okay(r_idx)) return FALSE;
577 if (!(r_ptr->flags3 & RF3_DRAGON)) return FALSE;
578 if (r_ptr->flags4 != vault_aux_dragon_mask4) return FALSE;
579 if (r_ptr->flags3 & RF3_UNDEAD) return FALSE;
585 * @brief モンスターが悪魔pitの生成必要条件を満たしているかを返す /
586 * Helper function for "monster pit (demon)"
587 * @param r_idx 確認したいモンスター種族ID
588 * @return 生成必要条件を満たしているならTRUEを返す。
590 bool vault_aux_demon(MONRACE_IDX r_idx)
592 monster_race *r_ptr = &r_info[r_idx];
593 if (!vault_monster_okay(r_idx)) return FALSE;
594 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return FALSE;
595 if (!(r_ptr->flags3 & RF3_DEMON)) return FALSE;
601 * @brief モンスターが狂気pitの生成必要条件を満たしているかを返す /
602 * Helper function for "monster pit (lovecraftian)"
603 * @param r_idx 確認したいモンスター種族ID
604 * @return 生成必要条件を満たしているならTRUEを返す。
606 bool vault_aux_cthulhu(MONRACE_IDX r_idx)
608 monster_race *r_ptr = &r_info[r_idx];
609 if (!vault_monster_okay(r_idx)) return FALSE;
610 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return FALSE;
611 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return FALSE;
616 * @brief モンスターがダークエルフpitの生成必要条件を満たしているかを返す /
617 * Helper function for "monster pit (dark elf)"
618 * @param r_idx 確認したいモンスター種族ID
619 * @return 生成必要条件を満たしているならTRUEを返す。
621 bool vault_aux_dark_elf(MONRACE_IDX r_idx)
624 static int dark_elf_list[] =
626 MON_D_ELF, MON_D_ELF_MAGE, MON_D_ELF_WARRIOR, MON_D_ELF_PRIEST,
627 MON_D_ELF_LORD, MON_D_ELF_WARLOCK, MON_D_ELF_DRUID, MON_NIGHTBLADE,
628 MON_D_ELF_SORC, MON_D_ELF_SHADE, 0,
630 if (!vault_monster_okay(r_idx)) return FALSE;
631 for (i = 0; dark_elf_list[i]; i++) if (r_idx == dark_elf_list[i]) return TRUE;
638 * @brief モンスターが生命体かどうかを返す
639 * Is the monster "alive"?
640 * @param r_ptr 判定するモンスターの種族情報構造体参照ポインタ
641 * @return 生命体ならばTRUEを返す
643 * Used to determine the message to print for a killed monster.
644 * ("dies", "destroyed")
646 bool monster_living(MONRACE_IDX r_idx)
648 monster_race *r_ptr = &r_info[r_idx];
650 /* Non-living, undead, or demon */
651 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
658 * @brief モンスターが特殊能力上、賞金首から排除する必要があるかどうかを返す。
659 * Is the monster "alive"? / Is this monster declined to be questor or bounty?
660 * @param r_idx モンスターの種族ID
661 * @return 賞金首に加えられないならばTRUEを返す
665 bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx)
670 * Decline them to be questor or bounty because they use
671 * special motion "split and combine"
673 case MON_BANORLUPART:
683 * @brief バルログが死体を食べられるモンスターかの判定 / Hook function for human corpses
684 * @param r_idx モンスターID
685 * @return 死体を食べられるならTRUEを返す。
687 bool monster_hook_human(MONRACE_IDX r_idx)
689 monster_race *r_ptr = &r_info[r_idx];
690 if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE;
691 if (my_strchr("pht", r_ptr->d_char)) return TRUE;
697 * @brief 悪夢の元凶となるモンスターかどうかを返す。
698 * @param r_idx 判定対象となるモンスターのID
699 * @return 悪夢の元凶となり得るか否か。
701 bool get_nightmare(MONRACE_IDX r_idx)
703 monster_race *r_ptr = &r_info[r_idx];
705 /* Require eldritch horrors */
706 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return FALSE;
708 /* Require high level */
709 if (r_ptr->level <= p_ptr->lev) return FALSE;
711 /* Accept this monster */
716 * @brief モンスター種族が釣れる種族かどうかを判定する。
717 * @param r_idx 判定したいモンスター種族のID
718 * @return 釣れる対象ならばTRUEを返す
720 bool monster_is_fishing_target(MONRACE_IDX r_idx)
722 monster_race *r_ptr = &r_info[r_idx];
724 if ((r_ptr->flags7 & RF7_AQUATIC) && !(r_ptr->flags1 & RF1_UNIQUE) && my_strchr("Jjlw", r_ptr->d_char))
731 * @brief モンスター闘技場に参加できるモンスターの判定
732 * @param r_idx モンスターID
733 * @details 基準はNEVER_MOVE MULTIPLY QUANTUM RF7_AQUATIC RF7_CHAMELEONのいずれも持たず、
734 * 自爆以外のなんらかのHP攻撃手段を持っていること。
737 bool monster_can_entry_arena(MONRACE_IDX r_idx)
742 monster_race *r_ptr = &r_info[r_idx];
744 /* Decline town monsters */
745 /* if (!mon_hook_dungeon(r_idx)) return FALSE; */
747 /* Decline unique monsters */
748 /* if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE; */
749 /* if (r_ptr->flags7 & (RF7_NAZGUL)) return FALSE; */
751 if (r_ptr->flags1 & (RF1_NEVER_MOVE)) return FALSE;
752 if (r_ptr->flags2 & (RF2_MULTIPLY)) return FALSE;
753 if (r_ptr->flags2 & (RF2_QUANTUM)) return FALSE;
754 if (r_ptr->flags7 & (RF7_AQUATIC)) return FALSE;
755 if (r_ptr->flags7 & (RF7_CHAMELEON)) return FALSE;
757 for (i = 0; i < 4; i++)
759 if (r_ptr->blow[i].method == RBM_EXPLODE) return FALSE;
760 if (r_ptr->blow[i].effect != RBE_DR_MANA) dam += r_ptr->blow[i].d_dice;
762 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;
768 * @brief モンスターが人形のベースにできるかを返す
769 * @param r_idx チェックしたいモンスター種族のID
770 * @return 人形にできるならTRUEを返す
772 bool item_monster_okay(MONRACE_IDX r_idx)
774 monster_race *r_ptr = &r_info[r_idx];
777 if (r_ptr->flags1 & RF1_UNIQUE) return FALSE;
778 if (r_ptr->flags7 & RF7_KAGE) return FALSE;
779 if (r_ptr->flagsr & RFR_RES_ALL) return FALSE;
780 if (r_ptr->flags7 & RF7_NAZGUL) return FALSE;
781 if (r_ptr->flags1 & RF1_FORCE_DEPTH) return FALSE;
782 if (r_ptr->flags7 & RF7_UNIQUE2) return FALSE;