4 #include "monsterrace-hook.h"
6 #include "monster-spell.h"
9 /*! 通常pit生成時のモンスターの構成条件ID / Race index for "monster pit (clone)" */
12 /*! 単一シンボルpit生成時の指定シンボル / Race index for "monster pit (symbol clone)" */
15 /*! ブレス属性に基づくドラゴンpit生成時条件マスク / Breath mask for "monster pit (dragon)" */
16 BIT_FLAGS vault_aux_dragon_mask4;
20 * @brief pit/nestの基準となる単種モンスターを決める /
23 void vault_prep_clone(void)
25 /* Apply the monster restriction */
26 get_mon_num_prep(vault_aux_simple, NULL);
28 /* Pick a race to clone */
29 vault_aux_race = get_mon_num(current_floor_ptr->dun_level + 10);
31 /* Remove the monster restriction */
32 get_mon_num_prep(NULL, NULL);
37 * @brief pit/nestの基準となるモンスターシンボルを決める /
40 void vault_prep_symbol(void)
44 /* Apply the monster restriction */
45 get_mon_num_prep(vault_aux_simple, NULL);
47 /* Pick a race to clone */
48 r_idx = get_mon_num(current_floor_ptr->dun_level + 10);
50 /* Remove the monster restriction */
51 get_mon_num_prep(NULL, NULL);
53 /* Extract the symbol */
54 vault_aux_char = r_info[r_idx].d_char;
59 * @brief pit/nestの基準となるドラゴンの種類を決める /
62 void vault_prep_dragon(void)
64 /* Pick dragon type */
68 vault_aux_dragon_mask4 = RF4_BR_ACID;
71 vault_aux_dragon_mask4 = RF4_BR_ELEC;
74 vault_aux_dragon_mask4 = RF4_BR_FIRE;
77 vault_aux_dragon_mask4 = RF4_BR_COLD;
80 vault_aux_dragon_mask4 = RF4_BR_POIS;
82 default: /* Multi-hued */
83 vault_aux_dragon_mask4 = (RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | RF4_BR_COLD | RF4_BR_POIS);
89 * @brief モンスターがクエストの討伐対象に成り得るかを返す / Hook function for quest monsters
90 * @param r_idx モンスターID
91 * @return 討伐対象にできるならTRUEを返す。
93 bool mon_hook_quest(MONRACE_IDX r_idx)
95 monster_race *r_ptr = &r_info[r_idx];
97 /* Random quests are in the dungeon */
98 if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
100 /* No random quests for aquatic monsters */
101 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
103 /* No random quests for multiplying monsters */
104 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
106 /* No quests to kill friendly monsters */
107 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
114 * @brief モンスターがダンジョンに出現するかどうかを返す
115 * @param r_idx 判定するモンスターの種族ID
116 * @return ダンジョンに出現するならばTRUEを返す
118 bool mon_hook_dungeon(MONRACE_IDX r_idx)
120 monster_race *r_ptr = &r_info[r_idx];
122 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
126 dungeon_type *d_ptr = &d_info[p_ptr->dungeon_idx];
127 if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&
128 (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
135 * @brief モンスターが海洋に出現するかどうかを返す
136 * @param r_idx 判定するモンスターの種族ID
137 * @return 海洋に出現するならばTRUEを返す
139 bool mon_hook_ocean(MONRACE_IDX r_idx)
141 monster_race *r_ptr = &r_info[r_idx];
143 if (r_ptr->flags8 & RF8_WILD_OCEAN)
151 * @brief モンスターが海岸に出現するかどうかを返す
152 * @param r_idx 判定するモンスターの種族ID
153 * @return 海岸に出現するならばTRUEを返す
155 bool mon_hook_shore(MONRACE_IDX r_idx)
157 monster_race *r_ptr = &r_info[r_idx];
159 if (r_ptr->flags8 & RF8_WILD_SHORE)
167 * @brief モンスターが荒地に出現するかどうかを返す
168 * @param r_idx 判定するモンスターの種族ID
169 * @return 荒地に出現するならばTRUEを返す
171 bool mon_hook_waste(MONRACE_IDX r_idx)
173 monster_race *r_ptr = &r_info[r_idx];
175 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
183 * @brief モンスターが町に出現するかどうかを返す
184 * @param r_idx 判定するモンスターの種族ID
185 * @return 荒地に出現するならばTRUEを返す
187 bool mon_hook_town(MONRACE_IDX r_idx)
189 monster_race *r_ptr = &r_info[r_idx];
191 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
199 * @brief モンスターが森林に出現するかどうかを返す
200 * @param r_idx 判定するモンスターの種族ID
201 * @return 森林に出現するならばTRUEを返す
203 bool mon_hook_wood(MONRACE_IDX r_idx)
205 monster_race *r_ptr = &r_info[r_idx];
207 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
215 * @brief モンスターが火山に出現するかどうかを返す
216 * @param r_idx 判定するモンスターの種族ID
217 * @return 火山に出現するならばTRUEを返す
219 bool mon_hook_volcano(MONRACE_IDX r_idx)
221 monster_race *r_ptr = &r_info[r_idx];
223 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
230 * @brief モンスターが山地に出現するかどうかを返す
231 * @param r_idx 判定するモンスターの種族ID
232 * @return 山地に出現するならばTRUEを返す
234 bool mon_hook_mountain(MONRACE_IDX r_idx)
236 monster_race *r_ptr = &r_info[r_idx];
238 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
246 * @brief モンスターが草原に出現するかどうかを返す
247 * @param r_idx 判定するモンスターの種族ID
248 * @return 森林に出現するならばTRUEを返す
250 bool mon_hook_grass(MONRACE_IDX r_idx)
252 monster_race *r_ptr = &r_info[r_idx];
254 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
261 * @brief モンスターが深い水地形に出現するかどうかを返す
262 * @param r_idx 判定するモンスターの種族ID
263 * @return 深い水地形に出現するならばTRUEを返す
265 bool mon_hook_deep_water(MONRACE_IDX r_idx)
267 monster_race *r_ptr = &r_info[r_idx];
269 if (!mon_hook_dungeon(r_idx)) return FALSE;
271 if (r_ptr->flags7 & RF7_AQUATIC)
279 * @brief モンスターが浅い水地形に出現するかどうかを返す
280 * @param r_idx 判定するモンスターの種族ID
281 * @return 浅い水地形に出現するならばTRUEを返す
283 bool mon_hook_shallow_water(MONRACE_IDX r_idx)
285 monster_race *r_ptr = &r_info[r_idx];
287 if (!mon_hook_dungeon(r_idx)) return FALSE;
289 if (r_ptr->flags2 & RF2_AURA_FIRE)
297 * @brief モンスターが溶岩地形に出現するかどうかを返す
298 * @param r_idx 判定するモンスターの種族ID
299 * @return 溶岩地形に出現するならばTRUEを返す
301 bool mon_hook_lava(MONRACE_IDX r_idx)
303 monster_race *r_ptr = &r_info[r_idx];
304 if (!mon_hook_dungeon(r_idx)) return FALSE;
305 if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||
306 (r_ptr->flags7 & RF7_CAN_FLY)) &&
307 !(r_ptr->flags3 & RF3_AURA_COLD))
315 * @brief モンスターが通常の床地形に出現するかどうかを返す
316 * @param r_idx 判定するモンスターの種族ID
317 * @return 通常の床地形に出現するならばTRUEを返す
319 bool mon_hook_floor(MONRACE_IDX r_idx)
321 monster_race *r_ptr = &r_info[r_idx];
322 if (!(r_ptr->flags7 & RF7_AQUATIC) || (r_ptr->flags7 & RF7_CAN_FLY))
329 * Helper function for "glass room"
331 bool vault_aux_lite(MONRACE_IDX r_idx)
333 monster_race *r_ptr = &r_info[r_idx];
334 if (!vault_monster_okay(r_idx)) return FALSE;
335 if (!(r_ptr->flags4 & RF4_BR_LITE) && !(r_ptr->a_ability_flags1 & RF5_BA_LITE)) return FALSE;
336 if (r_ptr->flags2 & (RF2_PASS_WALL | RF2_KILL_WALL)) return FALSE;
337 if (r_ptr->flags4 & RF4_BR_DISI) return FALSE;
342 * Helper function for "glass room"
344 bool vault_aux_shards(MONRACE_IDX r_idx)
346 monster_race *r_ptr = &r_info[r_idx];
347 if (!vault_monster_okay(r_idx)) return FALSE;
348 if (!(r_ptr->flags4 & RF4_BR_SHAR)) return FALSE;
354 * @brief モンスターがVault生成の最低必要条件を満たしているかを返す /
355 * Helper monster selection function
356 * @param r_idx 確認したいモンスター種族ID
357 * @return Vault生成の最低必要条件を満たしているならTRUEを返す。
359 bool vault_aux_simple(MONRACE_IDX r_idx)
361 return (vault_monster_okay(r_idx));
366 * @brief モンスターがゼリーnestの生成必要条件を満たしているかを返す /
367 * Helper function for "monster nest (jelly)"
368 * @param r_idx 確認したいモンスター種族ID
369 * @return 生成必要条件を満たしているならTRUEを返す。
371 bool vault_aux_jelly(MONRACE_IDX r_idx)
373 monster_race *r_ptr = &r_info[r_idx];
374 if (!vault_monster_okay(r_idx)) return (FALSE);
375 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
376 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
377 if (!my_strchr("ijm,", r_ptr->d_char)) return (FALSE);
382 * @brief モンスターが動物nestの生成必要条件を満たしているかを返す /
383 * Helper function for "monster nest (animal)"
384 * @param r_idx 確認したいモンスター種族ID
385 * @return 生成必要条件を満たしているならTRUEを返す。
387 bool vault_aux_animal(MONRACE_IDX r_idx)
389 monster_race *r_ptr = &r_info[r_idx];
390 if (!vault_monster_okay(r_idx)) return (FALSE);
391 if (!(r_ptr->flags3 & (RF3_ANIMAL))) return (FALSE);
397 * @brief モンスターがアンデッドnestの生成必要条件を満たしているかを返す /
398 * Helper function for "monster nest (undead)"
399 * @param r_idx 確認したいモンスター種族ID
400 * @return 生成必要条件を満たしているならTRUEを返す。
402 bool vault_aux_undead(MONRACE_IDX r_idx)
404 monster_race *r_ptr = &r_info[r_idx];
405 if (!vault_monster_okay(r_idx)) return (FALSE);
406 if (!(r_ptr->flags3 & (RF3_UNDEAD))) return (FALSE);
411 * @brief モンスターが聖堂nestの生成必要条件を満たしているかを返す /
412 * Helper function for "monster nest (chapel)"
413 * @param r_idx 確認したいモンスター種族ID
414 * @return 生成必要条件を満たしているならTRUEを返す。
416 bool vault_aux_chapel_g(MONRACE_IDX r_idx)
418 static int chapel_list[] = {
419 MON_NOV_PRIEST, MON_NOV_PALADIN, MON_NOV_PRIEST_G, MON_NOV_PALADIN_G,
420 MON_PRIEST, MON_JADE_MONK, MON_IVORY_MONK, MON_ULTRA_PALADIN,
421 MON_EBONY_MONK, MON_W_KNIGHT, MON_KNI_TEMPLAR, MON_PALADIN,
425 monster_race *r_ptr = &r_info[r_idx];
426 if (!vault_monster_okay(r_idx)) return (FALSE);
427 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
428 if ((r_idx == MON_A_GOLD) || (r_idx == MON_A_SILVER)) return (FALSE);
429 if (r_ptr->d_char == 'A') return TRUE;
430 for (i = 0; chapel_list[i]; i++)
431 if (r_idx == chapel_list[i]) return TRUE;
436 * @brief モンスターが犬小屋nestの生成必要条件を満たしているかを返す /
437 * Helper function for "monster nest (kennel)"
438 * @param r_idx 確認したいモンスター種族ID
439 * @return 生成必要条件を満たしているならTRUEを返す。
441 bool vault_aux_kennel(MONRACE_IDX r_idx)
443 monster_race *r_ptr = &r_info[r_idx];
444 if (!vault_monster_okay(r_idx)) return (FALSE);
445 if (!my_strchr("CZ", r_ptr->d_char)) return (FALSE);
450 * @brief モンスターがミミックnestの生成必要条件を満たしているかを返す /
451 * Helper function for "monster nest (mimic)"
452 * @param r_idx 確認したいモンスター種族ID
453 * @return 生成必要条件を満たしているならTRUEを返す。
455 bool vault_aux_mimic(MONRACE_IDX r_idx)
457 monster_race *r_ptr = &r_info[r_idx];
458 if (!vault_monster_okay(r_idx)) return (FALSE);
459 if (!my_strchr("!$&(/=?[\\|", r_ptr->d_char)) return (FALSE);
464 * @brief モンスターが単一クローンnestの生成必要条件を満たしているかを返す /
465 * Helper function for "monster nest (clone)"
466 * @param r_idx 確認したいモンスター種族ID
467 * @return 生成必要条件を満たしているならTRUEを返す。
469 bool vault_aux_clone(MONRACE_IDX r_idx)
471 if (!vault_monster_okay(r_idx)) return (FALSE);
472 return (r_idx == vault_aux_race);
477 * @brief モンスターが邪悪属性シンボルクローンnestの生成必要条件を満たしているかを返す /
478 * Helper function for "monster nest (symbol clone)"
479 * @param r_idx 確認したいモンスター種族ID
480 * @return 生成必要条件を満たしているならTRUEを返す。
482 bool vault_aux_symbol_e(MONRACE_IDX r_idx)
484 monster_race *r_ptr = &r_info[r_idx];
485 if (!vault_monster_okay(r_idx)) return (FALSE);
486 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
487 if (r_ptr->flags3 & (RF3_GOOD)) return (FALSE);
488 if (r_ptr->d_char != vault_aux_char) return (FALSE);
494 * @brief モンスターが善良属性シンボルクローンnestの生成必要条件を満たしているかを返す /
495 * Helper function for "monster nest (symbol clone)"
496 * @param r_idx 確認したいモンスター種族ID
497 * @return 生成必要条件を満たしているならTRUEを返す。
499 bool vault_aux_symbol_g(MONRACE_IDX r_idx)
501 monster_race *r_ptr = &r_info[r_idx];
502 if (!vault_monster_okay(r_idx)) return (FALSE);
503 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
504 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
505 if (r_ptr->d_char != vault_aux_char) return (FALSE);
511 * @brief モンスターがオークpitの生成必要条件を満たしているかを返す /
512 * Helper function for "monster pit (orc)"
513 * @param r_idx 確認したいモンスター種族ID
514 * @return 生成必要条件を満たしているならTRUEを返す。
516 bool vault_aux_orc(MONRACE_IDX r_idx)
518 monster_race *r_ptr = &r_info[r_idx];
519 if (!vault_monster_okay(r_idx)) return (FALSE);
520 if (!(r_ptr->flags3 & RF3_ORC)) return (FALSE);
521 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
527 * @brief モンスターがトロルpitの生成必要条件を満たしているかを返す /
528 * Helper function for "monster pit (troll)"
529 * @param r_idx 確認したいモンスター種族ID
530 * @return 生成必要条件を満たしているならTRUEを返す。
532 bool vault_aux_troll(MONRACE_IDX r_idx)
534 monster_race *r_ptr = &r_info[r_idx];
535 if (!vault_monster_okay(r_idx)) return (FALSE);
536 if (!(r_ptr->flags3 & RF3_TROLL)) return (FALSE);
537 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
543 * @brief モンスターが巨人pitの生成必要条件を満たしているかを返す /
544 * Helper function for "monster pit (giant)"
545 * @param r_idx 確認したいモンスター種族ID
546 * @return 生成必要条件を満たしているならTRUEを返す。
548 bool vault_aux_giant(MONRACE_IDX r_idx)
550 monster_race *r_ptr = &r_info[r_idx];
551 if (!vault_monster_okay(r_idx)) return (FALSE);
552 if (!(r_ptr->flags3 & RF3_GIANT)) return (FALSE);
553 if (r_ptr->flags3 & RF3_GOOD) return (FALSE);
554 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
560 * @brief モンスターがドラゴンpitの生成必要条件を満たしているかを返す /
561 * Helper function for "monster pit (dragon)"
562 * @param r_idx 確認したいモンスター種族ID
563 * @return 生成必要条件を満たしているならTRUEを返す。
565 bool vault_aux_dragon(MONRACE_IDX r_idx)
567 monster_race *r_ptr = &r_info[r_idx];
568 if (!vault_monster_okay(r_idx)) return (FALSE);
569 if (!(r_ptr->flags3 & RF3_DRAGON)) return (FALSE);
570 if (r_ptr->flags4 != vault_aux_dragon_mask4) return (FALSE);
571 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
577 * @brief モンスターが悪魔pitの生成必要条件を満たしているかを返す /
578 * Helper function for "monster pit (demon)"
579 * @param r_idx 確認したいモンスター種族ID
580 * @return 生成必要条件を満たしているならTRUEを返す。
582 bool vault_aux_demon(MONRACE_IDX r_idx)
584 monster_race *r_ptr = &r_info[r_idx];
585 if (!vault_monster_okay(r_idx)) return (FALSE);
586 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
587 if (!(r_ptr->flags3 & RF3_DEMON)) return (FALSE);
593 * @brief モンスターが狂気pitの生成必要条件を満たしているかを返す /
594 * Helper function for "monster pit (lovecraftian)"
595 * @param r_idx 確認したいモンスター種族ID
596 * @return 生成必要条件を満たしているならTRUEを返す。
598 bool vault_aux_cthulhu(MONRACE_IDX r_idx)
600 monster_race *r_ptr = &r_info[r_idx];
601 if (!vault_monster_okay(r_idx)) return (FALSE);
602 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
603 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return (FALSE);
608 * @brief モンスターがダークエルフpitの生成必要条件を満たしているかを返す /
609 * Helper function for "monster pit (dark elf)"
610 * @param r_idx 確認したいモンスター種族ID
611 * @return 生成必要条件を満たしているならTRUEを返す。
613 bool vault_aux_dark_elf(MONRACE_IDX r_idx)
616 static int dark_elf_list[] =
618 MON_D_ELF, MON_D_ELF_MAGE, MON_D_ELF_WARRIOR, MON_D_ELF_PRIEST,
619 MON_D_ELF_LORD, MON_D_ELF_WARLOCK, MON_D_ELF_DRUID, MON_NIGHTBLADE,
620 MON_D_ELF_SORC, MON_D_ELF_SHADE, 0,
622 if (!vault_monster_okay(r_idx)) return FALSE;
623 for (i = 0; dark_elf_list[i]; i++) if (r_idx == dark_elf_list[i]) return TRUE;
630 * @brief モンスターが生命体かどうかを返す
631 * Is the monster "alive"?
632 * @param r_ptr 判定するモンスターの種族情報構造体参照ポインタ
633 * @return 生命体ならばTRUEを返す
635 * Used to determine the message to print for a killed monster.
636 * ("dies", "destroyed")
638 bool monster_living(MONRACE_IDX r_idx)
640 monster_race *r_ptr = &r_info[r_idx];
642 /* Non-living, undead, or demon */
643 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
650 * @brief モンスターが特殊能力上、賞金首から排除する必要があるかどうかを返す。
651 * Is the monster "alive"? / Is this monster declined to be questor or bounty?
652 * @param r_idx モンスターの種族ID
653 * @return 賞金首に加えられないならばTRUEを返す
657 bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx)
662 * Decline them to be questor or bounty because they use
663 * special motion "split and combine"
665 case MON_BANORLUPART:
675 * @brief バルログが死体を食べられるモンスターかの判定 / Hook function for human corpses
676 * @param r_idx モンスターID
677 * @return 死体を食べられるならTRUEを返す。
679 bool monster_hook_human(MONRACE_IDX r_idx)
681 monster_race *r_ptr = &r_info[r_idx];
682 if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE;
683 if (my_strchr("pht", r_ptr->d_char)) return TRUE;
689 * @brief 悪夢の元凶となるモンスターかどうかを返す。
690 * @param r_idx 判定対象となるモンスターのID
691 * @return 悪夢の元凶となり得るか否か。
693 bool get_nightmare(MONRACE_IDX r_idx)
695 monster_race *r_ptr = &r_info[r_idx];
697 /* Require eldritch horrors */
698 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return (FALSE);
700 /* Require high level */
701 if (r_ptr->level <= p_ptr->lev) return (FALSE);
703 /* Accept this monster */
708 * @brief モンスター種族が釣れる種族かどうかを判定する。
709 * @param r_idx 判定したいモンスター種族のID
710 * @return 釣れる対象ならばTRUEを返す
712 bool monster_is_fishing_target(MONRACE_IDX r_idx)
714 monster_race *r_ptr = &r_info[r_idx];
716 if ((r_ptr->flags7 & RF7_AQUATIC) && !(r_ptr->flags1 & RF1_UNIQUE) && my_strchr("Jjlw", r_ptr->d_char))
723 * @brief モンスター闘技場に参加できるモンスターの判定
724 * @param r_idx モンスターID
725 * @details 基準はNEVER_MOVE MULTIPLY QUANTUM RF7_AQUATIC RF7_CHAMELEONのいずれも持たず、
726 * 自爆以外のなんらかのHP攻撃手段を持っていること。
729 bool monster_can_entry_arena(MONRACE_IDX r_idx)
734 monster_race *r_ptr = &r_info[r_idx];
736 /* Decline town monsters */
737 /* if (!mon_hook_dungeon(r_idx)) return FALSE; */
739 /* Decline unique monsters */
740 /* if (r_ptr->flags1 & (RF1_UNIQUE)) return (FALSE); */
741 /* if (r_ptr->flags7 & (RF7_NAZGUL)) return (FALSE); */
743 if (r_ptr->flags1 & (RF1_NEVER_MOVE)) return (FALSE);
744 if (r_ptr->flags2 & (RF2_MULTIPLY)) return (FALSE);
745 if (r_ptr->flags2 & (RF2_QUANTUM)) return (FALSE);
746 if (r_ptr->flags7 & (RF7_AQUATIC)) return (FALSE);
747 if (r_ptr->flags7 & (RF7_CHAMELEON)) return (FALSE);
749 for (i = 0; i < 4; i++)
751 if (r_ptr->blow[i].method == RBM_EXPLODE) return (FALSE);
752 if (r_ptr->blow[i].effect != RBE_DR_MANA) dam += r_ptr->blow[i].d_dice;
754 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);
760 * @brief モンスターが人形のベースにできるかを返す
761 * @param r_idx チェックしたいモンスター種族のID
762 * @return 人形にできるならTRUEを返す
764 bool item_monster_okay(MONRACE_IDX r_idx)
766 monster_race *r_ptr = &r_info[r_idx];
769 if (r_ptr->flags1 & RF1_UNIQUE) return (FALSE);
770 if (r_ptr->flags7 & RF7_KAGE) return (FALSE);
771 if (r_ptr->flagsr & RFR_RES_ALL) return (FALSE);
772 if (r_ptr->flags7 & RF7_NAZGUL) return (FALSE);
773 if (r_ptr->flags1 & RF1_FORCE_DEPTH) return (FALSE);
774 if (r_ptr->flags7 & RF7_UNIQUE2) return (FALSE);