2 #include "monsterrace-hook.h"
4 #include "monster-spell.h"
6 /*! 通常pit生成時のモンスターの構成条件ID / Race index for "monster pit (clone)" */
9 /*! 単一シンボルpit生成時の指定シンボル / Race index for "monster pit (symbol clone)" */
12 /*! ブレス属性に基づくドラゴンpit生成時条件マスク / Breath mask for "monster pit (dragon)" */
13 BIT_FLAGS vault_aux_dragon_mask4;
17 * @brief pit/nestの基準となる単種モンスターを決める /
20 void vault_prep_clone(void)
22 /* Apply the monster restriction */
23 get_mon_num_prep(vault_aux_simple, NULL);
25 /* Pick a race to clone */
26 vault_aux_race = get_mon_num(current_floor_ptr->dun_level + 10);
28 /* Remove the monster restriction */
29 get_mon_num_prep(NULL, NULL);
34 * @brief pit/nestの基準となるモンスターシンボルを決める /
37 void vault_prep_symbol(void)
41 /* Apply the monster restriction */
42 get_mon_num_prep(vault_aux_simple, NULL);
44 /* Pick a race to clone */
45 r_idx = get_mon_num(current_floor_ptr->dun_level + 10);
47 /* Remove the monster restriction */
48 get_mon_num_prep(NULL, NULL);
50 /* Extract the symbol */
51 vault_aux_char = r_info[r_idx].d_char;
56 * @brief pit/nestの基準となるドラゴンの種類を決める /
59 void vault_prep_dragon(void)
61 /* Pick dragon type */
65 vault_aux_dragon_mask4 = RF4_BR_ACID;
68 vault_aux_dragon_mask4 = RF4_BR_ELEC;
71 vault_aux_dragon_mask4 = RF4_BR_FIRE;
74 vault_aux_dragon_mask4 = RF4_BR_COLD;
77 vault_aux_dragon_mask4 = RF4_BR_POIS;
79 default: /* Multi-hued */
80 vault_aux_dragon_mask4 = (RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | RF4_BR_COLD | RF4_BR_POIS);
86 * @brief モンスターがクエストの討伐対象に成り得るかを返す / Hook function for quest monsters
87 * @param r_idx モンスターID
88 * @return 討伐対象にできるならTRUEを返す。
90 bool mon_hook_quest(MONRACE_IDX r_idx)
92 monster_race *r_ptr = &r_info[r_idx];
94 /* Random quests are in the dungeon */
95 if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
97 /* No random quests for aquatic monsters */
98 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
100 /* No random quests for multiplying monsters */
101 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
103 /* No quests to kill friendly monsters */
104 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
111 * @brief モンスターがダンジョンに出現するかどうかを返す
112 * @param r_idx 判定するモンスターの種族ID
113 * @return ダンジョンに出現するならばTRUEを返す
115 bool mon_hook_dungeon(MONRACE_IDX r_idx)
117 monster_race *r_ptr = &r_info[r_idx];
119 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
123 dungeon_type *d_ptr = &d_info[p_ptr->dungeon_idx];
124 if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&
125 (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
132 * @brief モンスターが海洋に出現するかどうかを返す
133 * @param r_idx 判定するモンスターの種族ID
134 * @return 海洋に出現するならばTRUEを返す
136 bool mon_hook_ocean(MONRACE_IDX r_idx)
138 monster_race *r_ptr = &r_info[r_idx];
140 if (r_ptr->flags8 & RF8_WILD_OCEAN)
148 * @brief モンスターが海岸に出現するかどうかを返す
149 * @param r_idx 判定するモンスターの種族ID
150 * @return 海岸に出現するならばTRUEを返す
152 bool mon_hook_shore(MONRACE_IDX r_idx)
154 monster_race *r_ptr = &r_info[r_idx];
156 if (r_ptr->flags8 & RF8_WILD_SHORE)
164 * @brief モンスターが荒地に出現するかどうかを返す
165 * @param r_idx 判定するモンスターの種族ID
166 * @return 荒地に出現するならばTRUEを返す
168 bool mon_hook_waste(MONRACE_IDX r_idx)
170 monster_race *r_ptr = &r_info[r_idx];
172 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
180 * @brief モンスターが町に出現するかどうかを返す
181 * @param r_idx 判定するモンスターの種族ID
182 * @return 荒地に出現するならばTRUEを返す
184 bool mon_hook_town(MONRACE_IDX r_idx)
186 monster_race *r_ptr = &r_info[r_idx];
188 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
196 * @brief モンスターが森林に出現するかどうかを返す
197 * @param r_idx 判定するモンスターの種族ID
198 * @return 森林に出現するならばTRUEを返す
200 bool mon_hook_wood(MONRACE_IDX r_idx)
202 monster_race *r_ptr = &r_info[r_idx];
204 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
212 * @brief モンスターが火山に出現するかどうかを返す
213 * @param r_idx 判定するモンスターの種族ID
214 * @return 火山に出現するならばTRUEを返す
216 bool mon_hook_volcano(MONRACE_IDX r_idx)
218 monster_race *r_ptr = &r_info[r_idx];
220 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
227 * @brief モンスターが山地に出現するかどうかを返す
228 * @param r_idx 判定するモンスターの種族ID
229 * @return 山地に出現するならばTRUEを返す
231 bool mon_hook_mountain(MONRACE_IDX r_idx)
233 monster_race *r_ptr = &r_info[r_idx];
235 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
243 * @brief モンスターが草原に出現するかどうかを返す
244 * @param r_idx 判定するモンスターの種族ID
245 * @return 森林に出現するならばTRUEを返す
247 bool mon_hook_grass(MONRACE_IDX r_idx)
249 monster_race *r_ptr = &r_info[r_idx];
251 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
258 * @brief モンスターが深い水地形に出現するかどうかを返す
259 * @param r_idx 判定するモンスターの種族ID
260 * @return 深い水地形に出現するならばTRUEを返す
262 bool mon_hook_deep_water(MONRACE_IDX r_idx)
264 monster_race *r_ptr = &r_info[r_idx];
266 if (!mon_hook_dungeon(r_idx)) return FALSE;
268 if (r_ptr->flags7 & RF7_AQUATIC)
276 * @brief モンスターが浅い水地形に出現するかどうかを返す
277 * @param r_idx 判定するモンスターの種族ID
278 * @return 浅い水地形に出現するならばTRUEを返す
280 bool mon_hook_shallow_water(MONRACE_IDX r_idx)
282 monster_race *r_ptr = &r_info[r_idx];
284 if (!mon_hook_dungeon(r_idx)) return FALSE;
286 if (r_ptr->flags2 & RF2_AURA_FIRE)
294 * @brief モンスターが溶岩地形に出現するかどうかを返す
295 * @param r_idx 判定するモンスターの種族ID
296 * @return 溶岩地形に出現するならばTRUEを返す
298 bool mon_hook_lava(MONRACE_IDX r_idx)
300 monster_race *r_ptr = &r_info[r_idx];
301 if (!mon_hook_dungeon(r_idx)) return FALSE;
302 if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||
303 (r_ptr->flags7 & RF7_CAN_FLY)) &&
304 !(r_ptr->flags3 & RF3_AURA_COLD))
312 * @brief モンスターが通常の床地形に出現するかどうかを返す
313 * @param r_idx 判定するモンスターの種族ID
314 * @return 通常の床地形に出現するならばTRUEを返す
316 bool mon_hook_floor(MONRACE_IDX r_idx)
318 monster_race *r_ptr = &r_info[r_idx];
319 if (!(r_ptr->flags7 & RF7_AQUATIC) || (r_ptr->flags7 & RF7_CAN_FLY))
326 * Helper function for "glass room"
328 bool vault_aux_lite(MONRACE_IDX r_idx)
330 monster_race *r_ptr = &r_info[r_idx];
331 if (!vault_monster_okay(r_idx)) return FALSE;
332 if (!(r_ptr->flags4 & RF4_BR_LITE) && !(r_ptr->a_ability_flags1 & RF5_BA_LITE)) return FALSE;
333 if (r_ptr->flags2 & (RF2_PASS_WALL | RF2_KILL_WALL)) return FALSE;
334 if (r_ptr->flags4 & RF4_BR_DISI) return FALSE;
339 * Helper function for "glass room"
341 bool vault_aux_shards(MONRACE_IDX r_idx)
343 monster_race *r_ptr = &r_info[r_idx];
344 if (!vault_monster_okay(r_idx)) return FALSE;
345 if (!(r_ptr->flags4 & RF4_BR_SHAR)) return FALSE;
351 * @brief モンスターがVault生成の最低必要条件を満たしているかを返す /
352 * Helper monster selection function
353 * @param r_idx 確認したいモンスター種族ID
354 * @return Vault生成の最低必要条件を満たしているならTRUEを返す。
356 bool vault_aux_simple(MONRACE_IDX r_idx)
358 return (vault_monster_okay(r_idx));
363 * @brief モンスターがゼリーnestの生成必要条件を満たしているかを返す /
364 * Helper function for "monster nest (jelly)"
365 * @param r_idx 確認したいモンスター種族ID
366 * @return 生成必要条件を満たしているならTRUEを返す。
368 bool vault_aux_jelly(MONRACE_IDX r_idx)
370 monster_race *r_ptr = &r_info[r_idx];
371 if (!vault_monster_okay(r_idx)) return (FALSE);
372 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
373 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
374 if (!my_strchr("ijm,", r_ptr->d_char)) return (FALSE);
379 * @brief モンスターが動物nestの生成必要条件を満たしているかを返す /
380 * Helper function for "monster nest (animal)"
381 * @param r_idx 確認したいモンスター種族ID
382 * @return 生成必要条件を満たしているならTRUEを返す。
384 bool vault_aux_animal(MONRACE_IDX r_idx)
386 monster_race *r_ptr = &r_info[r_idx];
387 if (!vault_monster_okay(r_idx)) return (FALSE);
388 if (!(r_ptr->flags3 & (RF3_ANIMAL))) return (FALSE);
394 * @brief モンスターがアンデッドnestの生成必要条件を満たしているかを返す /
395 * Helper function for "monster nest (undead)"
396 * @param r_idx 確認したいモンスター種族ID
397 * @return 生成必要条件を満たしているならTRUEを返す。
399 bool vault_aux_undead(MONRACE_IDX r_idx)
401 monster_race *r_ptr = &r_info[r_idx];
402 if (!vault_monster_okay(r_idx)) return (FALSE);
403 if (!(r_ptr->flags3 & (RF3_UNDEAD))) return (FALSE);
408 * @brief モンスターが聖堂nestの生成必要条件を満たしているかを返す /
409 * Helper function for "monster nest (chapel)"
410 * @param r_idx 確認したいモンスター種族ID
411 * @return 生成必要条件を満たしているならTRUEを返す。
413 bool vault_aux_chapel_g(MONRACE_IDX r_idx)
415 static int chapel_list[] = {
416 MON_NOV_PRIEST, MON_NOV_PALADIN, MON_NOV_PRIEST_G, MON_NOV_PALADIN_G,
417 MON_PRIEST, MON_JADE_MONK, MON_IVORY_MONK, MON_ULTRA_PALADIN,
418 MON_EBONY_MONK, MON_W_KNIGHT, MON_KNI_TEMPLAR, MON_PALADIN,
422 monster_race *r_ptr = &r_info[r_idx];
423 if (!vault_monster_okay(r_idx)) return (FALSE);
424 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
425 if ((r_idx == MON_A_GOLD) || (r_idx == MON_A_SILVER)) return (FALSE);
426 if (r_ptr->d_char == 'A') return TRUE;
427 for (i = 0; chapel_list[i]; i++)
428 if (r_idx == chapel_list[i]) return TRUE;
433 * @brief モンスターが犬小屋nestの生成必要条件を満たしているかを返す /
434 * Helper function for "monster nest (kennel)"
435 * @param r_idx 確認したいモンスター種族ID
436 * @return 生成必要条件を満たしているならTRUEを返す。
438 bool vault_aux_kennel(MONRACE_IDX r_idx)
440 monster_race *r_ptr = &r_info[r_idx];
441 if (!vault_monster_okay(r_idx)) return (FALSE);
442 if (!my_strchr("CZ", r_ptr->d_char)) return (FALSE);
447 * @brief モンスターがミミックnestの生成必要条件を満たしているかを返す /
448 * Helper function for "monster nest (mimic)"
449 * @param r_idx 確認したいモンスター種族ID
450 * @return 生成必要条件を満たしているならTRUEを返す。
452 bool vault_aux_mimic(MONRACE_IDX r_idx)
454 monster_race *r_ptr = &r_info[r_idx];
455 if (!vault_monster_okay(r_idx)) return (FALSE);
456 if (!my_strchr("!$&(/=?[\\|", r_ptr->d_char)) return (FALSE);
461 * @brief モンスターが単一クローンnestの生成必要条件を満たしているかを返す /
462 * Helper function for "monster nest (clone)"
463 * @param r_idx 確認したいモンスター種族ID
464 * @return 生成必要条件を満たしているならTRUEを返す。
466 bool vault_aux_clone(MONRACE_IDX r_idx)
468 if (!vault_monster_okay(r_idx)) return (FALSE);
469 return (r_idx == vault_aux_race);
474 * @brief モンスターが邪悪属性シンボルクローンnestの生成必要条件を満たしているかを返す /
475 * Helper function for "monster nest (symbol clone)"
476 * @param r_idx 確認したいモンスター種族ID
477 * @return 生成必要条件を満たしているならTRUEを返す。
479 bool vault_aux_symbol_e(MONRACE_IDX r_idx)
481 monster_race *r_ptr = &r_info[r_idx];
482 if (!vault_monster_okay(r_idx)) return (FALSE);
483 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
484 if (r_ptr->flags3 & (RF3_GOOD)) return (FALSE);
485 if (r_ptr->d_char != vault_aux_char) return (FALSE);
491 * @brief モンスターが善良属性シンボルクローンnestの生成必要条件を満たしているかを返す /
492 * Helper function for "monster nest (symbol clone)"
493 * @param r_idx 確認したいモンスター種族ID
494 * @return 生成必要条件を満たしているならTRUEを返す。
496 bool vault_aux_symbol_g(MONRACE_IDX r_idx)
498 monster_race *r_ptr = &r_info[r_idx];
499 if (!vault_monster_okay(r_idx)) return (FALSE);
500 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
501 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
502 if (r_ptr->d_char != vault_aux_char) return (FALSE);
508 * @brief モンスターがオークpitの生成必要条件を満たしているかを返す /
509 * Helper function for "monster pit (orc)"
510 * @param r_idx 確認したいモンスター種族ID
511 * @return 生成必要条件を満たしているならTRUEを返す。
513 bool vault_aux_orc(MONRACE_IDX r_idx)
515 monster_race *r_ptr = &r_info[r_idx];
516 if (!vault_monster_okay(r_idx)) return (FALSE);
517 if (!(r_ptr->flags3 & RF3_ORC)) return (FALSE);
518 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
524 * @brief モンスターがトロルpitの生成必要条件を満たしているかを返す /
525 * Helper function for "monster pit (troll)"
526 * @param r_idx 確認したいモンスター種族ID
527 * @return 生成必要条件を満たしているならTRUEを返す。
529 bool vault_aux_troll(MONRACE_IDX r_idx)
531 monster_race *r_ptr = &r_info[r_idx];
532 if (!vault_monster_okay(r_idx)) return (FALSE);
533 if (!(r_ptr->flags3 & RF3_TROLL)) return (FALSE);
534 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
540 * @brief モンスターが巨人pitの生成必要条件を満たしているかを返す /
541 * Helper function for "monster pit (giant)"
542 * @param r_idx 確認したいモンスター種族ID
543 * @return 生成必要条件を満たしているならTRUEを返す。
545 bool vault_aux_giant(MONRACE_IDX r_idx)
547 monster_race *r_ptr = &r_info[r_idx];
548 if (!vault_monster_okay(r_idx)) return (FALSE);
549 if (!(r_ptr->flags3 & RF3_GIANT)) return (FALSE);
550 if (r_ptr->flags3 & RF3_GOOD) return (FALSE);
551 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
557 * @brief モンスターがドラゴンpitの生成必要条件を満たしているかを返す /
558 * Helper function for "monster pit (dragon)"
559 * @param r_idx 確認したいモンスター種族ID
560 * @return 生成必要条件を満たしているならTRUEを返す。
562 bool vault_aux_dragon(MONRACE_IDX r_idx)
564 monster_race *r_ptr = &r_info[r_idx];
565 if (!vault_monster_okay(r_idx)) return (FALSE);
566 if (!(r_ptr->flags3 & RF3_DRAGON)) return (FALSE);
567 if (r_ptr->flags4 != vault_aux_dragon_mask4) return (FALSE);
568 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
574 * @brief モンスターが悪魔pitの生成必要条件を満たしているかを返す /
575 * Helper function for "monster pit (demon)"
576 * @param r_idx 確認したいモンスター種族ID
577 * @return 生成必要条件を満たしているならTRUEを返す。
579 bool vault_aux_demon(MONRACE_IDX r_idx)
581 monster_race *r_ptr = &r_info[r_idx];
582 if (!vault_monster_okay(r_idx)) return (FALSE);
583 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
584 if (!(r_ptr->flags3 & RF3_DEMON)) return (FALSE);
590 * @brief モンスターが狂気pitの生成必要条件を満たしているかを返す /
591 * Helper function for "monster pit (lovecraftian)"
592 * @param r_idx 確認したいモンスター種族ID
593 * @return 生成必要条件を満たしているならTRUEを返す。
595 bool vault_aux_cthulhu(MONRACE_IDX r_idx)
597 monster_race *r_ptr = &r_info[r_idx];
598 if (!vault_monster_okay(r_idx)) return (FALSE);
599 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
600 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return (FALSE);
605 * @brief モンスターがダークエルフpitの生成必要条件を満たしているかを返す /
606 * Helper function for "monster pit (dark elf)"
607 * @param r_idx 確認したいモンスター種族ID
608 * @return 生成必要条件を満たしているならTRUEを返す。
610 bool vault_aux_dark_elf(MONRACE_IDX r_idx)
613 static int dark_elf_list[] =
615 MON_D_ELF, MON_D_ELF_MAGE, MON_D_ELF_WARRIOR, MON_D_ELF_PRIEST,
616 MON_D_ELF_LORD, MON_D_ELF_WARLOCK, MON_D_ELF_DRUID, MON_NIGHTBLADE,
617 MON_D_ELF_SORC, MON_D_ELF_SHADE, 0,
619 if (!vault_monster_okay(r_idx)) return FALSE;
620 for (i = 0; dark_elf_list[i]; i++) if (r_idx == dark_elf_list[i]) return TRUE;
627 * @brief モンスターが生命体かどうかを返す
628 * Is the monster "alive"?
629 * @param r_ptr 判定するモンスターの種族情報構造体参照ポインタ
630 * @return 生命体ならばTRUEを返す
632 * Used to determine the message to print for a killed monster.
633 * ("dies", "destroyed")
635 bool monster_living(MONRACE_IDX r_idx)
637 monster_race *r_ptr = &r_info[r_idx];
639 /* Non-living, undead, or demon */
640 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
647 * @brief モンスターが特殊能力上、賞金首から排除する必要があるかどうかを返す。
648 * Is the monster "alive"? / Is this monster declined to be questor or bounty?
649 * @param r_idx モンスターの種族ID
650 * @return 賞金首に加えられないならばTRUEを返す
654 bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx)
659 * Decline them to be questor or bounty because they use
660 * special motion "split and combine"
662 case MON_BANORLUPART:
672 * @brief バルログが死体を食べられるモンスターかの判定 / Hook function for human corpses
673 * @param r_idx モンスターID
674 * @return 死体を食べられるならTRUEを返す。
676 bool monster_hook_human(MONRACE_IDX r_idx)
678 monster_race *r_ptr = &r_info[r_idx];
679 if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE;
680 if (my_strchr("pht", r_ptr->d_char)) return TRUE;
686 * @brief 悪夢の元凶となるモンスターかどうかを返す。
687 * @param r_idx 判定対象となるモンスターのID
688 * @return 悪夢の元凶となり得るか否か。
690 bool get_nightmare(MONRACE_IDX r_idx)
692 monster_race *r_ptr = &r_info[r_idx];
694 /* Require eldritch horrors */
695 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return (FALSE);
697 /* Require high level */
698 if (r_ptr->level <= p_ptr->lev) return (FALSE);
700 /* Accept this monster */
705 * @brief モンスター種族が釣れる種族かどうかを判定する。
706 * @param r_idx 判定したいモンスター種族のID
707 * @return 釣れる対象ならばTRUEを返す
709 bool monster_is_fishing_target(MONRACE_IDX r_idx)
711 monster_race *r_ptr = &r_info[r_idx];
713 if ((r_ptr->flags7 & RF7_AQUATIC) && !(r_ptr->flags1 & RF1_UNIQUE) && my_strchr("Jjlw", r_ptr->d_char))
720 * @brief モンスター闘技場に参加できるモンスターの判定
721 * @param r_idx モンスターID
722 * @details 基準はNEVER_MOVE MULTIPLY QUANTUM RF7_AQUATIC RF7_CHAMELEONのいずれも持たず、
723 * 自爆以外のなんらかのHP攻撃手段を持っていること。
726 bool monster_can_entry_arena(MONRACE_IDX r_idx)
731 monster_race *r_ptr = &r_info[r_idx];
733 /* Decline town monsters */
734 /* if (!mon_hook_dungeon(r_idx)) return FALSE; */
736 /* Decline unique monsters */
737 /* if (r_ptr->flags1 & (RF1_UNIQUE)) return (FALSE); */
738 /* if (r_ptr->flags7 & (RF7_NAZGUL)) return (FALSE); */
740 if (r_ptr->flags1 & (RF1_NEVER_MOVE)) return (FALSE);
741 if (r_ptr->flags2 & (RF2_MULTIPLY)) return (FALSE);
742 if (r_ptr->flags2 & (RF2_QUANTUM)) return (FALSE);
743 if (r_ptr->flags7 & (RF7_AQUATIC)) return (FALSE);
744 if (r_ptr->flags7 & (RF7_CHAMELEON)) return (FALSE);
746 for (i = 0; i < 4; i++)
748 if (r_ptr->blow[i].method == RBM_EXPLODE) return (FALSE);
749 if (r_ptr->blow[i].effect != RBE_DR_MANA) dam += r_ptr->blow[i].d_dice;
751 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);
757 * @brief モンスターが人形のベースにできるかを返す
758 * @param r_idx チェックしたいモンスター種族のID
759 * @return 人形にできるならTRUEを返す
761 bool item_monster_okay(MONRACE_IDX r_idx)
763 monster_race *r_ptr = &r_info[r_idx];
766 if (r_ptr->flags1 & RF1_UNIQUE) return (FALSE);
767 if (r_ptr->flags7 & RF7_KAGE) return (FALSE);
768 if (r_ptr->flagsr & RFR_RES_ALL) return (FALSE);
769 if (r_ptr->flags7 & RF7_NAZGUL) return (FALSE);
770 if (r_ptr->flags1 & RF1_FORCE_DEPTH) return (FALSE);
771 if (r_ptr->flags7 & RF7_UNIQUE2) return (FALSE);