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の基準となる単種モンスターを決める /
26 void vault_prep_clone(void)
28 /* Apply the monster restriction */
29 get_mon_num_prep(vault_aux_simple, NULL);
31 /* Pick a race to clone */
32 vault_aux_race = get_mon_num(p_ptr->current_floor_ptr->dun_level + 10);
34 /* Remove the monster restriction */
35 get_mon_num_prep(NULL, NULL);
40 * @brief pit/nestの基準となるモンスターシンボルを決める /
43 void vault_prep_symbol(void)
47 /* Apply the monster restriction */
48 get_mon_num_prep(vault_aux_simple, NULL);
50 /* Pick a race to clone */
51 r_idx = get_mon_num(p_ptr->current_floor_ptr->dun_level + 10);
53 /* Remove the monster restriction */
54 get_mon_num_prep(NULL, NULL);
56 /* Extract the symbol */
57 vault_aux_char = r_info[r_idx].d_char;
62 * @brief pit/nestの基準となるドラゴンの種類を決める /
65 void vault_prep_dragon(void)
67 /* Pick dragon type */
71 vault_aux_dragon_mask4 = RF4_BR_ACID;
74 vault_aux_dragon_mask4 = RF4_BR_ELEC;
77 vault_aux_dragon_mask4 = RF4_BR_FIRE;
80 vault_aux_dragon_mask4 = RF4_BR_COLD;
83 vault_aux_dragon_mask4 = RF4_BR_POIS;
85 default: /* Multi-hued */
86 vault_aux_dragon_mask4 = (RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | RF4_BR_COLD | RF4_BR_POIS);
92 * @brief モンスターがクエストの討伐対象に成り得るかを返す / Hook function for quest monsters
93 * @param r_idx モンスターID
94 * @return 討伐対象にできるならTRUEを返す。
96 bool mon_hook_quest(MONRACE_IDX r_idx)
98 monster_race *r_ptr = &r_info[r_idx];
100 /* Random quests are in the dungeon */
101 if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
103 /* No random quests for aquatic monsters */
104 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
106 /* No random quests for multiplying monsters */
107 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
109 /* No quests to kill friendly monsters */
110 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
117 * @brief モンスターがダンジョンに出現するかどうかを返す
118 * @param r_idx 判定するモンスターの種族ID
119 * @return ダンジョンに出現するならばTRUEを返す
121 bool mon_hook_dungeon(MONRACE_IDX r_idx)
123 monster_race *r_ptr = &r_info[r_idx];
125 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
129 dungeon_type *d_ptr = &d_info[p_ptr->dungeon_idx];
130 if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&
131 (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
138 * @brief モンスターが海洋に出現するかどうかを返す
139 * @param r_idx 判定するモンスターの種族ID
140 * @return 海洋に出現するならばTRUEを返す
142 bool mon_hook_ocean(MONRACE_IDX r_idx)
144 monster_race *r_ptr = &r_info[r_idx];
146 if (r_ptr->flags8 & RF8_WILD_OCEAN)
154 * @brief モンスターが海岸に出現するかどうかを返す
155 * @param r_idx 判定するモンスターの種族ID
156 * @return 海岸に出現するならばTRUEを返す
158 bool mon_hook_shore(MONRACE_IDX r_idx)
160 monster_race *r_ptr = &r_info[r_idx];
162 if (r_ptr->flags8 & RF8_WILD_SHORE)
170 * @brief モンスターが荒地に出現するかどうかを返す
171 * @param r_idx 判定するモンスターの種族ID
172 * @return 荒地に出現するならばTRUEを返す
174 bool mon_hook_waste(MONRACE_IDX r_idx)
176 monster_race *r_ptr = &r_info[r_idx];
178 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
186 * @brief モンスターが町に出現するかどうかを返す
187 * @param r_idx 判定するモンスターの種族ID
188 * @return 荒地に出現するならばTRUEを返す
190 bool mon_hook_town(MONRACE_IDX r_idx)
192 monster_race *r_ptr = &r_info[r_idx];
194 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
202 * @brief モンスターが森林に出現するかどうかを返す
203 * @param r_idx 判定するモンスターの種族ID
204 * @return 森林に出現するならばTRUEを返す
206 bool mon_hook_wood(MONRACE_IDX r_idx)
208 monster_race *r_ptr = &r_info[r_idx];
210 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
218 * @brief モンスターが火山に出現するかどうかを返す
219 * @param r_idx 判定するモンスターの種族ID
220 * @return 火山に出現するならばTRUEを返す
222 bool mon_hook_volcano(MONRACE_IDX r_idx)
224 monster_race *r_ptr = &r_info[r_idx];
226 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
233 * @brief モンスターが山地に出現するかどうかを返す
234 * @param r_idx 判定するモンスターの種族ID
235 * @return 山地に出現するならばTRUEを返す
237 bool mon_hook_mountain(MONRACE_IDX r_idx)
239 monster_race *r_ptr = &r_info[r_idx];
241 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
249 * @brief モンスターが草原に出現するかどうかを返す
250 * @param r_idx 判定するモンスターの種族ID
251 * @return 森林に出現するならばTRUEを返す
253 bool mon_hook_grass(MONRACE_IDX r_idx)
255 monster_race *r_ptr = &r_info[r_idx];
257 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
264 * @brief モンスターが深い水地形に出現するかどうかを返す
265 * @param r_idx 判定するモンスターの種族ID
266 * @return 深い水地形に出現するならばTRUEを返す
268 bool mon_hook_deep_water(MONRACE_IDX r_idx)
270 monster_race *r_ptr = &r_info[r_idx];
272 if (!mon_hook_dungeon(r_idx)) return FALSE;
274 if (r_ptr->flags7 & RF7_AQUATIC)
282 * @brief モンスターが浅い水地形に出現するかどうかを返す
283 * @param r_idx 判定するモンスターの種族ID
284 * @return 浅い水地形に出現するならばTRUEを返す
286 bool mon_hook_shallow_water(MONRACE_IDX r_idx)
288 monster_race *r_ptr = &r_info[r_idx];
290 if (!mon_hook_dungeon(r_idx)) return FALSE;
292 if (r_ptr->flags2 & RF2_AURA_FIRE)
300 * @brief モンスターが溶岩地形に出現するかどうかを返す
301 * @param r_idx 判定するモンスターの種族ID
302 * @return 溶岩地形に出現するならばTRUEを返す
304 bool mon_hook_lava(MONRACE_IDX r_idx)
306 monster_race *r_ptr = &r_info[r_idx];
307 if (!mon_hook_dungeon(r_idx)) return FALSE;
308 if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||
309 (r_ptr->flags7 & RF7_CAN_FLY)) &&
310 !(r_ptr->flags3 & RF3_AURA_COLD))
318 * @brief モンスターが通常の床地形に出現するかどうかを返す
319 * @param r_idx 判定するモンスターの種族ID
320 * @return 通常の床地形に出現するならばTRUEを返す
322 bool mon_hook_floor(MONRACE_IDX r_idx)
324 monster_race *r_ptr = &r_info[r_idx];
325 if (!(r_ptr->flags7 & RF7_AQUATIC) || (r_ptr->flags7 & RF7_CAN_FLY))
332 * Helper function for "glass room"
334 bool vault_aux_lite(MONRACE_IDX r_idx)
336 monster_race *r_ptr = &r_info[r_idx];
337 if (!vault_monster_okay(r_idx)) return FALSE;
338 if (!(r_ptr->flags4 & RF4_BR_LITE) && !(r_ptr->a_ability_flags1 & RF5_BA_LITE)) return FALSE;
339 if (r_ptr->flags2 & (RF2_PASS_WALL | RF2_KILL_WALL)) return FALSE;
340 if (r_ptr->flags4 & RF4_BR_DISI) return FALSE;
345 * Helper function for "glass room"
347 bool vault_aux_shards(MONRACE_IDX r_idx)
349 monster_race *r_ptr = &r_info[r_idx];
350 if (!vault_monster_okay(r_idx)) return FALSE;
351 if (!(r_ptr->flags4 & RF4_BR_SHAR)) return FALSE;
357 * @brief モンスターがVault生成の最低必要条件を満たしているかを返す /
358 * Helper monster selection function
359 * @param r_idx 確認したいモンスター種族ID
360 * @return Vault生成の最低必要条件を満たしているならTRUEを返す。
362 bool vault_aux_simple(MONRACE_IDX r_idx)
364 return (vault_monster_okay(r_idx));
369 * @brief モンスターがゼリーnestの生成必要条件を満たしているかを返す /
370 * Helper function for "monster nest (jelly)"
371 * @param r_idx 確認したいモンスター種族ID
372 * @return 生成必要条件を満たしているならTRUEを返す。
374 bool vault_aux_jelly(MONRACE_IDX r_idx)
376 monster_race *r_ptr = &r_info[r_idx];
377 if (!vault_monster_okay(r_idx)) return FALSE;
378 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return FALSE;
379 if (r_ptr->flags3 & (RF3_EVIL)) return FALSE;
380 if (!my_strchr("ijm,", r_ptr->d_char)) return FALSE;
385 * @brief モンスターが動物nestの生成必要条件を満たしているかを返す /
386 * Helper function for "monster nest (animal)"
387 * @param r_idx 確認したいモンスター種族ID
388 * @return 生成必要条件を満たしているならTRUEを返す。
390 bool vault_aux_animal(MONRACE_IDX r_idx)
392 monster_race *r_ptr = &r_info[r_idx];
393 if (!vault_monster_okay(r_idx)) return FALSE;
394 if (!(r_ptr->flags3 & (RF3_ANIMAL))) return FALSE;
400 * @brief モンスターがアンデッドnestの生成必要条件を満たしているかを返す /
401 * Helper function for "monster nest (undead)"
402 * @param r_idx 確認したいモンスター種族ID
403 * @return 生成必要条件を満たしているならTRUEを返す。
405 bool vault_aux_undead(MONRACE_IDX r_idx)
407 monster_race *r_ptr = &r_info[r_idx];
408 if (!vault_monster_okay(r_idx)) return FALSE;
409 if (!(r_ptr->flags3 & (RF3_UNDEAD))) return FALSE;
414 * @brief モンスターが聖堂nestの生成必要条件を満たしているかを返す /
415 * Helper function for "monster nest (chapel)"
416 * @param r_idx 確認したいモンスター種族ID
417 * @return 生成必要条件を満たしているならTRUEを返す。
419 bool vault_aux_chapel_g(MONRACE_IDX r_idx)
421 static int chapel_list[] = {
422 MON_NOV_PRIEST, MON_NOV_PALADIN, MON_NOV_PRIEST_G, MON_NOV_PALADIN_G,
423 MON_PRIEST, MON_JADE_MONK, MON_IVORY_MONK, MON_ULTRA_PALADIN,
424 MON_EBONY_MONK, MON_W_KNIGHT, MON_KNI_TEMPLAR, MON_PALADIN,
428 monster_race *r_ptr = &r_info[r_idx];
429 if (!vault_monster_okay(r_idx)) return FALSE;
430 if (r_ptr->flags3 & (RF3_EVIL)) return FALSE;
431 if ((r_idx == MON_A_GOLD) || (r_idx == MON_A_SILVER)) return FALSE;
432 if (r_ptr->d_char == 'A') return TRUE;
433 for (i = 0; chapel_list[i]; i++)
434 if (r_idx == chapel_list[i]) return TRUE;
439 * @brief モンスターが犬小屋nestの生成必要条件を満たしているかを返す /
440 * Helper function for "monster nest (kennel)"
441 * @param r_idx 確認したいモンスター種族ID
442 * @return 生成必要条件を満たしているならTRUEを返す。
444 bool vault_aux_kennel(MONRACE_IDX r_idx)
446 monster_race *r_ptr = &r_info[r_idx];
447 if (!vault_monster_okay(r_idx)) return FALSE;
448 if (!my_strchr("CZ", r_ptr->d_char)) return FALSE;
453 * @brief モンスターがミミックnestの生成必要条件を満たしているかを返す /
454 * Helper function for "monster nest (mimic)"
455 * @param r_idx 確認したいモンスター種族ID
456 * @return 生成必要条件を満たしているならTRUEを返す。
458 bool vault_aux_mimic(MONRACE_IDX r_idx)
460 monster_race *r_ptr = &r_info[r_idx];
461 if (!vault_monster_okay(r_idx)) return FALSE;
462 if (!my_strchr("!$&(/=?[\\|", r_ptr->d_char)) return FALSE;
467 * @brief モンスターが単一クローンnestの生成必要条件を満たしているかを返す /
468 * Helper function for "monster nest (clone)"
469 * @param r_idx 確認したいモンスター種族ID
470 * @return 生成必要条件を満たしているならTRUEを返す。
472 bool vault_aux_clone(MONRACE_IDX r_idx)
474 if (!vault_monster_okay(r_idx)) return FALSE;
475 return (r_idx == vault_aux_race);
480 * @brief モンスターが邪悪属性シンボルクローンnestの生成必要条件を満たしているかを返す /
481 * Helper function for "monster nest (symbol clone)"
482 * @param r_idx 確認したいモンスター種族ID
483 * @return 生成必要条件を満たしているならTRUEを返す。
485 bool vault_aux_symbol_e(MONRACE_IDX r_idx)
487 monster_race *r_ptr = &r_info[r_idx];
488 if (!vault_monster_okay(r_idx)) return FALSE;
489 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return FALSE;
490 if (r_ptr->flags3 & (RF3_GOOD)) return FALSE;
491 if (r_ptr->d_char != vault_aux_char) return FALSE;
497 * @brief モンスターが善良属性シンボルクローンnestの生成必要条件を満たしているかを返す /
498 * Helper function for "monster nest (symbol clone)"
499 * @param r_idx 確認したいモンスター種族ID
500 * @return 生成必要条件を満たしているならTRUEを返す。
502 bool vault_aux_symbol_g(MONRACE_IDX r_idx)
504 monster_race *r_ptr = &r_info[r_idx];
505 if (!vault_monster_okay(r_idx)) return FALSE;
506 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return FALSE;
507 if (r_ptr->flags3 & (RF3_EVIL)) return FALSE;
508 if (r_ptr->d_char != vault_aux_char) return FALSE;
514 * @brief モンスターがオークpitの生成必要条件を満たしているかを返す /
515 * Helper function for "monster pit (orc)"
516 * @param r_idx 確認したいモンスター種族ID
517 * @return 生成必要条件を満たしているならTRUEを返す。
519 bool vault_aux_orc(MONRACE_IDX r_idx)
521 monster_race *r_ptr = &r_info[r_idx];
522 if (!vault_monster_okay(r_idx)) return FALSE;
523 if (!(r_ptr->flags3 & RF3_ORC)) return FALSE;
524 if (r_ptr->flags3 & RF3_UNDEAD) return FALSE;
530 * @brief モンスターがトロルpitの生成必要条件を満たしているかを返す /
531 * Helper function for "monster pit (troll)"
532 * @param r_idx 確認したいモンスター種族ID
533 * @return 生成必要条件を満たしているならTRUEを返す。
535 bool vault_aux_troll(MONRACE_IDX r_idx)
537 monster_race *r_ptr = &r_info[r_idx];
538 if (!vault_monster_okay(r_idx)) return FALSE;
539 if (!(r_ptr->flags3 & RF3_TROLL)) return FALSE;
540 if (r_ptr->flags3 & RF3_UNDEAD) return FALSE;
546 * @brief モンスターが巨人pitの生成必要条件を満たしているかを返す /
547 * Helper function for "monster pit (giant)"
548 * @param r_idx 確認したいモンスター種族ID
549 * @return 生成必要条件を満たしているならTRUEを返す。
551 bool vault_aux_giant(MONRACE_IDX r_idx)
553 monster_race *r_ptr = &r_info[r_idx];
554 if (!vault_monster_okay(r_idx)) return FALSE;
555 if (!(r_ptr->flags3 & RF3_GIANT)) return FALSE;
556 if (r_ptr->flags3 & RF3_GOOD) return FALSE;
557 if (r_ptr->flags3 & RF3_UNDEAD) return FALSE;
563 * @brief モンスターがドラゴンpitの生成必要条件を満たしているかを返す /
564 * Helper function for "monster pit (dragon)"
565 * @param r_idx 確認したいモンスター種族ID
566 * @return 生成必要条件を満たしているならTRUEを返す。
568 bool vault_aux_dragon(MONRACE_IDX r_idx)
570 monster_race *r_ptr = &r_info[r_idx];
571 if (!vault_monster_okay(r_idx)) return FALSE;
572 if (!(r_ptr->flags3 & RF3_DRAGON)) return FALSE;
573 if (r_ptr->flags4 != vault_aux_dragon_mask4) return FALSE;
574 if (r_ptr->flags3 & RF3_UNDEAD) return FALSE;
580 * @brief モンスターが悪魔pitの生成必要条件を満たしているかを返す /
581 * Helper function for "monster pit (demon)"
582 * @param r_idx 確認したいモンスター種族ID
583 * @return 生成必要条件を満たしているならTRUEを返す。
585 bool vault_aux_demon(MONRACE_IDX r_idx)
587 monster_race *r_ptr = &r_info[r_idx];
588 if (!vault_monster_okay(r_idx)) return FALSE;
589 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return FALSE;
590 if (!(r_ptr->flags3 & RF3_DEMON)) return FALSE;
596 * @brief モンスターが狂気pitの生成必要条件を満たしているかを返す /
597 * Helper function for "monster pit (lovecraftian)"
598 * @param r_idx 確認したいモンスター種族ID
599 * @return 生成必要条件を満たしているならTRUEを返す。
601 bool vault_aux_cthulhu(MONRACE_IDX r_idx)
603 monster_race *r_ptr = &r_info[r_idx];
604 if (!vault_monster_okay(r_idx)) return FALSE;
605 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return FALSE;
606 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return FALSE;
611 * @brief モンスターがダークエルフpitの生成必要条件を満たしているかを返す /
612 * Helper function for "monster pit (dark elf)"
613 * @param r_idx 確認したいモンスター種族ID
614 * @return 生成必要条件を満たしているならTRUEを返す。
616 bool vault_aux_dark_elf(MONRACE_IDX r_idx)
619 static int dark_elf_list[] =
621 MON_D_ELF, MON_D_ELF_MAGE, MON_D_ELF_WARRIOR, MON_D_ELF_PRIEST,
622 MON_D_ELF_LORD, MON_D_ELF_WARLOCK, MON_D_ELF_DRUID, MON_NIGHTBLADE,
623 MON_D_ELF_SORC, MON_D_ELF_SHADE, 0,
625 if (!vault_monster_okay(r_idx)) return FALSE;
626 for (i = 0; dark_elf_list[i]; i++) if (r_idx == dark_elf_list[i]) return TRUE;
633 * @brief モンスターが生命体かどうかを返す
634 * Is the monster "alive"?
635 * @param r_ptr 判定するモンスターの種族情報構造体参照ポインタ
636 * @return 生命体ならばTRUEを返す
638 * Used to determine the message to print for a killed monster.
639 * ("dies", "destroyed")
641 bool monster_living(MONRACE_IDX r_idx)
643 monster_race *r_ptr = &r_info[r_idx];
645 /* Non-living, undead, or demon */
646 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
653 * @brief モンスターが特殊能力上、賞金首から排除する必要があるかどうかを返す。
654 * Is the monster "alive"? / Is this monster declined to be questor or bounty?
655 * @param r_idx モンスターの種族ID
656 * @return 賞金首に加えられないならばTRUEを返す
660 bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx)
665 * Decline them to be questor or bounty because they use
666 * special motion "split and combine"
668 case MON_BANORLUPART:
678 * @brief バルログが死体を食べられるモンスターかの判定 / Hook function for human corpses
679 * @param r_idx モンスターID
680 * @return 死体を食べられるならTRUEを返す。
682 bool monster_hook_human(MONRACE_IDX r_idx)
684 monster_race *r_ptr = &r_info[r_idx];
685 if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE;
686 if (my_strchr("pht", r_ptr->d_char)) return TRUE;
692 * @brief 悪夢の元凶となるモンスターかどうかを返す。
693 * @param r_idx 判定対象となるモンスターのID
694 * @return 悪夢の元凶となり得るか否か。
696 bool get_nightmare(MONRACE_IDX r_idx)
698 monster_race *r_ptr = &r_info[r_idx];
700 /* Require eldritch horrors */
701 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return FALSE;
703 /* Require high level */
704 if (r_ptr->level <= p_ptr->lev) return FALSE;
706 /* Accept this monster */
711 * @brief モンスター種族が釣れる種族かどうかを判定する。
712 * @param r_idx 判定したいモンスター種族のID
713 * @return 釣れる対象ならばTRUEを返す
715 bool monster_is_fishing_target(MONRACE_IDX r_idx)
717 monster_race *r_ptr = &r_info[r_idx];
719 if ((r_ptr->flags7 & RF7_AQUATIC) && !(r_ptr->flags1 & RF1_UNIQUE) && my_strchr("Jjlw", r_ptr->d_char))
726 * @brief モンスター闘技場に参加できるモンスターの判定
727 * @param r_idx モンスターID
728 * @details 基準はNEVER_MOVE MULTIPLY QUANTUM RF7_AQUATIC RF7_CHAMELEONのいずれも持たず、
729 * 自爆以外のなんらかのHP攻撃手段を持っていること。
732 bool monster_can_entry_arena(MONRACE_IDX r_idx)
737 monster_race *r_ptr = &r_info[r_idx];
739 /* Decline town monsters */
740 /* if (!mon_hook_dungeon(r_idx)) return FALSE; */
742 /* Decline unique monsters */
743 /* if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE; */
744 /* if (r_ptr->flags7 & (RF7_NAZGUL)) return FALSE; */
746 if (r_ptr->flags1 & (RF1_NEVER_MOVE)) return FALSE;
747 if (r_ptr->flags2 & (RF2_MULTIPLY)) return FALSE;
748 if (r_ptr->flags2 & (RF2_QUANTUM)) return FALSE;
749 if (r_ptr->flags7 & (RF7_AQUATIC)) return FALSE;
750 if (r_ptr->flags7 & (RF7_CHAMELEON)) return FALSE;
752 for (i = 0; i < 4; i++)
754 if (r_ptr->blow[i].method == RBM_EXPLODE) return FALSE;
755 if (r_ptr->blow[i].effect != RBE_DR_MANA) dam += r_ptr->blow[i].d_dice;
757 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;
763 * @brief モンスターが人形のベースにできるかを返す
764 * @param r_idx チェックしたいモンスター種族のID
765 * @return 人形にできるならTRUEを返す
767 bool item_monster_okay(MONRACE_IDX r_idx)
769 monster_race *r_ptr = &r_info[r_idx];
772 if (r_ptr->flags1 & RF1_UNIQUE) return FALSE;
773 if (r_ptr->flags7 & RF7_KAGE) return FALSE;
774 if (r_ptr->flagsr & RFR_RES_ALL) return FALSE;
775 if (r_ptr->flags7 & RF7_NAZGUL) return FALSE;
776 if (r_ptr->flags1 & RF1_FORCE_DEPTH) return FALSE;
777 if (r_ptr->flags7 & RF7_UNIQUE2) return FALSE;