2 #include "monsterrace-hook.h"
3 #include "monster-spell.h"
5 /*! 通常pit生成時のモンスターの構成条件ID / Race index for "monster pit (clone)" */
8 /*! 単一シンボルpit生成時の指定シンボル / Race index for "monster pit (symbol clone)" */
11 /*! ブレス属性に基づくドラゴンpit生成時条件マスク / Breath mask for "monster pit (dragon)" */
12 BIT_FLAGS vault_aux_dragon_mask4;
16 * @brief pit/nestの基準となる単種モンスターを決める /
19 void vault_prep_clone(void)
21 /* Apply the monster restriction */
22 get_mon_num_prep(vault_aux_simple, NULL);
24 /* Pick a race to clone */
25 vault_aux_race = get_mon_num(current_floor_ptr->dun_level + 10);
27 /* Remove the monster restriction */
28 get_mon_num_prep(NULL, NULL);
33 * @brief pit/nestの基準となるモンスターシンボルを決める /
36 void vault_prep_symbol(void)
40 /* Apply the monster restriction */
41 get_mon_num_prep(vault_aux_simple, NULL);
43 /* Pick a race to clone */
44 r_idx = get_mon_num(current_floor_ptr->dun_level + 10);
46 /* Remove the monster restriction */
47 get_mon_num_prep(NULL, NULL);
49 /* Extract the symbol */
50 vault_aux_char = r_info[r_idx].d_char;
55 * @brief pit/nestの基準となるドラゴンの種類を決める /
58 void vault_prep_dragon(void)
60 /* Pick dragon type */
64 vault_aux_dragon_mask4 = RF4_BR_ACID;
67 vault_aux_dragon_mask4 = RF4_BR_ELEC;
70 vault_aux_dragon_mask4 = RF4_BR_FIRE;
73 vault_aux_dragon_mask4 = RF4_BR_COLD;
76 vault_aux_dragon_mask4 = RF4_BR_POIS;
78 default: /* Multi-hued */
79 vault_aux_dragon_mask4 = (RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | RF4_BR_COLD | RF4_BR_POIS);
85 * @brief モンスターがクエストの討伐対象に成り得るかを返す / Hook function for quest monsters
86 * @param r_idx モンスターID
87 * @return 討伐対象にできるならTRUEを返す。
89 bool mon_hook_quest(MONRACE_IDX r_idx)
91 monster_race *r_ptr = &r_info[r_idx];
93 /* Random quests are in the dungeon */
94 if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
96 /* No random quests for aquatic monsters */
97 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
99 /* No random quests for multiplying monsters */
100 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
102 /* No quests to kill friendly monsters */
103 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
110 * @brief モンスターがダンジョンに出現するかどうかを返す
111 * @param r_idx 判定するモンスターの種族ID
112 * @return ダンジョンに出現するならばTRUEを返す
114 bool mon_hook_dungeon(MONRACE_IDX r_idx)
116 monster_race *r_ptr = &r_info[r_idx];
118 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
122 dungeon_type *d_ptr = &d_info[p_ptr->dungeon_idx];
123 if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&
124 (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
131 * @brief モンスターが海洋に出現するかどうかを返す
132 * @param r_idx 判定するモンスターの種族ID
133 * @return 海洋に出現するならばTRUEを返す
135 bool mon_hook_ocean(MONRACE_IDX r_idx)
137 monster_race *r_ptr = &r_info[r_idx];
139 if (r_ptr->flags8 & RF8_WILD_OCEAN)
147 * @brief モンスターが海岸に出現するかどうかを返す
148 * @param r_idx 判定するモンスターの種族ID
149 * @return 海岸に出現するならばTRUEを返す
151 bool mon_hook_shore(MONRACE_IDX r_idx)
153 monster_race *r_ptr = &r_info[r_idx];
155 if (r_ptr->flags8 & RF8_WILD_SHORE)
163 * @brief モンスターが荒地に出現するかどうかを返す
164 * @param r_idx 判定するモンスターの種族ID
165 * @return 荒地に出現するならばTRUEを返す
167 bool mon_hook_waste(MONRACE_IDX r_idx)
169 monster_race *r_ptr = &r_info[r_idx];
171 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
179 * @brief モンスターが町に出現するかどうかを返す
180 * @param r_idx 判定するモンスターの種族ID
181 * @return 荒地に出現するならばTRUEを返す
183 bool mon_hook_town(MONRACE_IDX r_idx)
185 monster_race *r_ptr = &r_info[r_idx];
187 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
195 * @brief モンスターが森林に出現するかどうかを返す
196 * @param r_idx 判定するモンスターの種族ID
197 * @return 森林に出現するならばTRUEを返す
199 bool mon_hook_wood(MONRACE_IDX r_idx)
201 monster_race *r_ptr = &r_info[r_idx];
203 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
211 * @brief モンスターが火山に出現するかどうかを返す
212 * @param r_idx 判定するモンスターの種族ID
213 * @return 火山に出現するならばTRUEを返す
215 bool mon_hook_volcano(MONRACE_IDX r_idx)
217 monster_race *r_ptr = &r_info[r_idx];
219 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
226 * @brief モンスターが山地に出現するかどうかを返す
227 * @param r_idx 判定するモンスターの種族ID
228 * @return 山地に出現するならばTRUEを返す
230 bool mon_hook_mountain(MONRACE_IDX r_idx)
232 monster_race *r_ptr = &r_info[r_idx];
234 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
242 * @brief モンスターが草原に出現するかどうかを返す
243 * @param r_idx 判定するモンスターの種族ID
244 * @return 森林に出現するならばTRUEを返す
246 bool mon_hook_grass(MONRACE_IDX r_idx)
248 monster_race *r_ptr = &r_info[r_idx];
250 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
257 * @brief モンスターが深い水地形に出現するかどうかを返す
258 * @param r_idx 判定するモンスターの種族ID
259 * @return 深い水地形に出現するならばTRUEを返す
261 bool mon_hook_deep_water(MONRACE_IDX r_idx)
263 monster_race *r_ptr = &r_info[r_idx];
265 if (!mon_hook_dungeon(r_idx)) return FALSE;
267 if (r_ptr->flags7 & RF7_AQUATIC)
275 * @brief モンスターが浅い水地形に出現するかどうかを返す
276 * @param r_idx 判定するモンスターの種族ID
277 * @return 浅い水地形に出現するならばTRUEを返す
279 bool mon_hook_shallow_water(MONRACE_IDX r_idx)
281 monster_race *r_ptr = &r_info[r_idx];
283 if (!mon_hook_dungeon(r_idx)) return FALSE;
285 if (r_ptr->flags2 & RF2_AURA_FIRE)
293 * @brief モンスターが溶岩地形に出現するかどうかを返す
294 * @param r_idx 判定するモンスターの種族ID
295 * @return 溶岩地形に出現するならばTRUEを返す
297 bool mon_hook_lava(MONRACE_IDX r_idx)
299 monster_race *r_ptr = &r_info[r_idx];
300 if (!mon_hook_dungeon(r_idx)) return FALSE;
301 if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||
302 (r_ptr->flags7 & RF7_CAN_FLY)) &&
303 !(r_ptr->flags3 & RF3_AURA_COLD))
311 * @brief モンスターが通常の床地形に出現するかどうかを返す
312 * @param r_idx 判定するモンスターの種族ID
313 * @return 通常の床地形に出現するならばTRUEを返す
315 bool mon_hook_floor(MONRACE_IDX r_idx)
317 monster_race *r_ptr = &r_info[r_idx];
318 if (!(r_ptr->flags7 & RF7_AQUATIC) || (r_ptr->flags7 & RF7_CAN_FLY))
325 * Helper function for "glass room"
327 bool vault_aux_lite(MONRACE_IDX r_idx)
329 monster_race *r_ptr = &r_info[r_idx];
330 if (!vault_monster_okay(r_idx)) return FALSE;
331 if (!(r_ptr->flags4 & RF4_BR_LITE) && !(r_ptr->a_ability_flags1 & RF5_BA_LITE)) return FALSE;
332 if (r_ptr->flags2 & (RF2_PASS_WALL | RF2_KILL_WALL)) return FALSE;
333 if (r_ptr->flags4 & RF4_BR_DISI) return FALSE;
338 * Helper function for "glass room"
340 bool vault_aux_shards(MONRACE_IDX r_idx)
342 monster_race *r_ptr = &r_info[r_idx];
343 if (!vault_monster_okay(r_idx)) return FALSE;
344 if (!(r_ptr->flags4 & RF4_BR_SHAR)) return FALSE;
350 * @brief モンスターがVault生成の最低必要条件を満たしているかを返す /
351 * Helper monster selection function
352 * @param r_idx 確認したいモンスター種族ID
353 * @return Vault生成の最低必要条件を満たしているならTRUEを返す。
355 bool vault_aux_simple(MONRACE_IDX r_idx)
357 return (vault_monster_okay(r_idx));
362 * @brief モンスターがゼリーnestの生成必要条件を満たしているかを返す /
363 * Helper function for "monster nest (jelly)"
364 * @param r_idx 確認したいモンスター種族ID
365 * @return 生成必要条件を満たしているならTRUEを返す。
367 bool vault_aux_jelly(MONRACE_IDX r_idx)
369 monster_race *r_ptr = &r_info[r_idx];
370 if (!vault_monster_okay(r_idx)) return (FALSE);
371 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
372 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
373 if (!my_strchr("ijm,", r_ptr->d_char)) return (FALSE);
378 * @brief モンスターが動物nestの生成必要条件を満たしているかを返す /
379 * Helper function for "monster nest (animal)"
380 * @param r_idx 確認したいモンスター種族ID
381 * @return 生成必要条件を満たしているならTRUEを返す。
383 bool vault_aux_animal(MONRACE_IDX r_idx)
385 monster_race *r_ptr = &r_info[r_idx];
386 if (!vault_monster_okay(r_idx)) return (FALSE);
387 if (!(r_ptr->flags3 & (RF3_ANIMAL))) return (FALSE);
393 * @brief モンスターがアンデッドnestの生成必要条件を満たしているかを返す /
394 * Helper function for "monster nest (undead)"
395 * @param r_idx 確認したいモンスター種族ID
396 * @return 生成必要条件を満たしているならTRUEを返す。
398 bool vault_aux_undead(MONRACE_IDX r_idx)
400 monster_race *r_ptr = &r_info[r_idx];
401 if (!vault_monster_okay(r_idx)) return (FALSE);
402 if (!(r_ptr->flags3 & (RF3_UNDEAD))) return (FALSE);
407 * @brief モンスターが聖堂nestの生成必要条件を満たしているかを返す /
408 * Helper function for "monster nest (chapel)"
409 * @param r_idx 確認したいモンスター種族ID
410 * @return 生成必要条件を満たしているならTRUEを返す。
412 bool vault_aux_chapel_g(MONRACE_IDX r_idx)
414 static int chapel_list[] = {
415 MON_NOV_PRIEST, MON_NOV_PALADIN, MON_NOV_PRIEST_G, MON_NOV_PALADIN_G,
416 MON_PRIEST, MON_JADE_MONK, MON_IVORY_MONK, MON_ULTRA_PALADIN,
417 MON_EBONY_MONK, MON_W_KNIGHT, MON_KNI_TEMPLAR, MON_PALADIN,
421 monster_race *r_ptr = &r_info[r_idx];
422 if (!vault_monster_okay(r_idx)) return (FALSE);
423 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
424 if ((r_idx == MON_A_GOLD) || (r_idx == MON_A_SILVER)) return (FALSE);
425 if (r_ptr->d_char == 'A') return TRUE;
426 for (i = 0; chapel_list[i]; i++)
427 if (r_idx == chapel_list[i]) return TRUE;
432 * @brief モンスターが犬小屋nestの生成必要条件を満たしているかを返す /
433 * Helper function for "monster nest (kennel)"
434 * @param r_idx 確認したいモンスター種族ID
435 * @return 生成必要条件を満たしているならTRUEを返す。
437 bool vault_aux_kennel(MONRACE_IDX r_idx)
439 monster_race *r_ptr = &r_info[r_idx];
440 if (!vault_monster_okay(r_idx)) return (FALSE);
441 if (!my_strchr("CZ", r_ptr->d_char)) return (FALSE);
446 * @brief モンスターがミミックnestの生成必要条件を満たしているかを返す /
447 * Helper function for "monster nest (mimic)"
448 * @param r_idx 確認したいモンスター種族ID
449 * @return 生成必要条件を満たしているならTRUEを返す。
451 bool vault_aux_mimic(MONRACE_IDX r_idx)
453 monster_race *r_ptr = &r_info[r_idx];
454 if (!vault_monster_okay(r_idx)) return (FALSE);
455 if (!my_strchr("!$&(/=?[\\|", r_ptr->d_char)) return (FALSE);
460 * @brief モンスターが単一クローンnestの生成必要条件を満たしているかを返す /
461 * Helper function for "monster nest (clone)"
462 * @param r_idx 確認したいモンスター種族ID
463 * @return 生成必要条件を満たしているならTRUEを返す。
465 bool vault_aux_clone(MONRACE_IDX r_idx)
467 if (!vault_monster_okay(r_idx)) return (FALSE);
468 return (r_idx == vault_aux_race);
473 * @brief モンスターが邪悪属性シンボルクローンnestの生成必要条件を満たしているかを返す /
474 * Helper function for "monster nest (symbol clone)"
475 * @param r_idx 確認したいモンスター種族ID
476 * @return 生成必要条件を満たしているならTRUEを返す。
478 bool vault_aux_symbol_e(MONRACE_IDX r_idx)
480 monster_race *r_ptr = &r_info[r_idx];
481 if (!vault_monster_okay(r_idx)) return (FALSE);
482 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
483 if (r_ptr->flags3 & (RF3_GOOD)) return (FALSE);
484 if (r_ptr->d_char != vault_aux_char) return (FALSE);
490 * @brief モンスターが善良属性シンボルクローンnestの生成必要条件を満たしているかを返す /
491 * Helper function for "monster nest (symbol clone)"
492 * @param r_idx 確認したいモンスター種族ID
493 * @return 生成必要条件を満たしているならTRUEを返す。
495 bool vault_aux_symbol_g(MONRACE_IDX r_idx)
497 monster_race *r_ptr = &r_info[r_idx];
498 if (!vault_monster_okay(r_idx)) return (FALSE);
499 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
500 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
501 if (r_ptr->d_char != vault_aux_char) return (FALSE);
507 * @brief モンスターがオークpitの生成必要条件を満たしているかを返す /
508 * Helper function for "monster pit (orc)"
509 * @param r_idx 確認したいモンスター種族ID
510 * @return 生成必要条件を満たしているならTRUEを返す。
512 bool vault_aux_orc(MONRACE_IDX r_idx)
514 monster_race *r_ptr = &r_info[r_idx];
515 if (!vault_monster_okay(r_idx)) return (FALSE);
516 if (!(r_ptr->flags3 & RF3_ORC)) return (FALSE);
517 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
523 * @brief モンスターがトロルpitの生成必要条件を満たしているかを返す /
524 * Helper function for "monster pit (troll)"
525 * @param r_idx 確認したいモンスター種族ID
526 * @return 生成必要条件を満たしているならTRUEを返す。
528 bool vault_aux_troll(MONRACE_IDX r_idx)
530 monster_race *r_ptr = &r_info[r_idx];
531 if (!vault_monster_okay(r_idx)) return (FALSE);
532 if (!(r_ptr->flags3 & RF3_TROLL)) return (FALSE);
533 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
539 * @brief モンスターが巨人pitの生成必要条件を満たしているかを返す /
540 * Helper function for "monster pit (giant)"
541 * @param r_idx 確認したいモンスター種族ID
542 * @return 生成必要条件を満たしているならTRUEを返す。
544 bool vault_aux_giant(MONRACE_IDX r_idx)
546 monster_race *r_ptr = &r_info[r_idx];
547 if (!vault_monster_okay(r_idx)) return (FALSE);
548 if (!(r_ptr->flags3 & RF3_GIANT)) return (FALSE);
549 if (r_ptr->flags3 & RF3_GOOD) return (FALSE);
550 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
556 * @brief モンスターがドラゴンpitの生成必要条件を満たしているかを返す /
557 * Helper function for "monster pit (dragon)"
558 * @param r_idx 確認したいモンスター種族ID
559 * @return 生成必要条件を満たしているならTRUEを返す。
561 bool vault_aux_dragon(MONRACE_IDX r_idx)
563 monster_race *r_ptr = &r_info[r_idx];
564 if (!vault_monster_okay(r_idx)) return (FALSE);
565 if (!(r_ptr->flags3 & RF3_DRAGON)) return (FALSE);
566 if (r_ptr->flags4 != vault_aux_dragon_mask4) return (FALSE);
567 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
573 * @brief モンスターが悪魔pitの生成必要条件を満たしているかを返す /
574 * Helper function for "monster pit (demon)"
575 * @param r_idx 確認したいモンスター種族ID
576 * @return 生成必要条件を満たしているならTRUEを返す。
578 bool vault_aux_demon(MONRACE_IDX r_idx)
580 monster_race *r_ptr = &r_info[r_idx];
581 if (!vault_monster_okay(r_idx)) return (FALSE);
582 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
583 if (!(r_ptr->flags3 & RF3_DEMON)) return (FALSE);
589 * @brief モンスターが狂気pitの生成必要条件を満たしているかを返す /
590 * Helper function for "monster pit (lovecraftian)"
591 * @param r_idx 確認したいモンスター種族ID
592 * @return 生成必要条件を満たしているならTRUEを返す。
594 bool vault_aux_cthulhu(MONRACE_IDX r_idx)
596 monster_race *r_ptr = &r_info[r_idx];
597 if (!vault_monster_okay(r_idx)) return (FALSE);
598 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
599 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return (FALSE);
604 * @brief モンスターがダークエルフpitの生成必要条件を満たしているかを返す /
605 * Helper function for "monster pit (dark elf)"
606 * @param r_idx 確認したいモンスター種族ID
607 * @return 生成必要条件を満たしているならTRUEを返す。
609 bool vault_aux_dark_elf(MONRACE_IDX r_idx)
612 static int dark_elf_list[] =
614 MON_D_ELF, MON_D_ELF_MAGE, MON_D_ELF_WARRIOR, MON_D_ELF_PRIEST,
615 MON_D_ELF_LORD, MON_D_ELF_WARLOCK, MON_D_ELF_DRUID, MON_NIGHTBLADE,
616 MON_D_ELF_SORC, MON_D_ELF_SHADE, 0,
618 if (!vault_monster_okay(r_idx)) return FALSE;
619 for (i = 0; dark_elf_list[i]; i++) if (r_idx == dark_elf_list[i]) return TRUE;
626 * @brief モンスターが生命体かどうかを返す
627 * Is the monster "alive"?
628 * @param r_ptr 判定するモンスターの種族情報構造体参照ポインタ
629 * @return 生命体ならばTRUEを返す
631 * Used to determine the message to print for a killed monster.
632 * ("dies", "destroyed")
634 bool monster_living(MONRACE_IDX r_idx)
636 monster_race *r_ptr = &r_info[r_idx];
638 /* Non-living, undead, or demon */
639 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
646 * @brief モンスターが特殊能力上、賞金首から排除する必要があるかどうかを返す。
647 * Is the monster "alive"? / Is this monster declined to be questor or bounty?
648 * @param r_idx モンスターの種族ID
649 * @return 賞金首に加えられないならばTRUEを返す
653 bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx)
658 * Decline them to be questor or bounty because they use
659 * special motion "split and combine"
661 case MON_BANORLUPART:
671 * @brief バルログが死体を食べられるモンスターかの判定 / Hook function for human corpses
672 * @param r_idx モンスターID
673 * @return 死体を食べられるならTRUEを返す。
675 bool monster_hook_human(MONRACE_IDX r_idx)
677 monster_race *r_ptr = &r_info[r_idx];
678 if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE;
679 if (my_strchr("pht", r_ptr->d_char)) return TRUE;
685 * @brief 悪夢の元凶となるモンスターかどうかを返す。
686 * @param r_idx 判定対象となるモンスターのID
687 * @return 悪夢の元凶となり得るか否か。
689 bool get_nightmare(MONRACE_IDX r_idx)
691 monster_race *r_ptr = &r_info[r_idx];
693 /* Require eldritch horrors */
694 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return (FALSE);
696 /* Require high level */
697 if (r_ptr->level <= p_ptr->lev) return (FALSE);
699 /* Accept this monster */
704 * @brief モンスター種族が釣れる種族かどうかを判定する。
705 * @param r_idx 判定したいモンスター種族のID
706 * @return 釣れる対象ならばTRUEを返す
708 bool monster_is_fishing_target(MONRACE_IDX r_idx)
710 monster_race *r_ptr = &r_info[r_idx];
712 if ((r_ptr->flags7 & RF7_AQUATIC) && !(r_ptr->flags1 & RF1_UNIQUE) && my_strchr("Jjlw", r_ptr->d_char))
719 * @brief モンスター闘技場に参加できるモンスターの判定
720 * @param r_idx モンスターID
721 * @details 基準はNEVER_MOVE MULTIPLY QUANTUM RF7_AQUATIC RF7_CHAMELEONのいずれも持たず、
722 * 自爆以外のなんらかのHP攻撃手段を持っていること。
725 bool monster_can_entry_arena(MONRACE_IDX r_idx)
730 monster_race *r_ptr = &r_info[r_idx];
732 /* Decline town monsters */
733 /* if (!mon_hook_dungeon(r_idx)) return FALSE; */
735 /* Decline unique monsters */
736 /* if (r_ptr->flags1 & (RF1_UNIQUE)) return (FALSE); */
737 /* if (r_ptr->flags7 & (RF7_NAZGUL)) return (FALSE); */
739 if (r_ptr->flags1 & (RF1_NEVER_MOVE)) return (FALSE);
740 if (r_ptr->flags2 & (RF2_MULTIPLY)) return (FALSE);
741 if (r_ptr->flags2 & (RF2_QUANTUM)) return (FALSE);
742 if (r_ptr->flags7 & (RF7_AQUATIC)) return (FALSE);
743 if (r_ptr->flags7 & (RF7_CHAMELEON)) return (FALSE);
745 for (i = 0; i < 4; i++)
747 if (r_ptr->blow[i].method == RBM_EXPLODE) return (FALSE);
748 if (r_ptr->blow[i].effect != RBE_DR_MANA) dam += r_ptr->blow[i].d_dice;
750 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);
756 * @brief モンスターが人形のベースにできるかを返す
757 * @param r_idx チェックしたいモンスター種族のID
758 * @return 人形にできるならTRUEを返す
760 bool item_monster_okay(MONRACE_IDX r_idx)
762 monster_race *r_ptr = &r_info[r_idx];
765 if (r_ptr->flags1 & RF1_UNIQUE) return (FALSE);
766 if (r_ptr->flags7 & RF7_KAGE) return (FALSE);
767 if (r_ptr->flagsr & RFR_RES_ALL) return (FALSE);
768 if (r_ptr->flags7 & RF7_NAZGUL) return (FALSE);
769 if (r_ptr->flags1 & RF1_FORCE_DEPTH) return (FALSE);
770 if (r_ptr->flags7 & RF7_UNIQUE2) return (FALSE);