4 #include "monsterrace-hook.h"
6 #include "monster-spell.h"
9 #include "monsterrace.h"
11 /*! 通常pit生成時のモンスターの構成条件ID / Race index for "monster pit (clone)" */
14 /*! 単一シンボルpit生成時の指定シンボル / Race index for "monster pit (symbol clone)" */
17 /*! ブレス属性に基づくドラゴンpit生成時条件マスク / Breath mask for "monster pit (dragon)" */
18 BIT_FLAGS vault_aux_dragon_mask4;
22 * @brief pit/nestの基準となる単種モンスターを決める /
25 void vault_prep_clone(void)
27 /* Apply the monster restriction */
28 get_mon_num_prep(vault_aux_simple, NULL);
30 /* Pick a race to clone */
31 vault_aux_race = get_mon_num(current_floor_ptr->dun_level + 10);
33 /* Remove the monster restriction */
34 get_mon_num_prep(NULL, NULL);
39 * @brief pit/nestの基準となるモンスターシンボルを決める /
42 void vault_prep_symbol(void)
46 /* Apply the monster restriction */
47 get_mon_num_prep(vault_aux_simple, NULL);
49 /* Pick a race to clone */
50 r_idx = get_mon_num(current_floor_ptr->dun_level + 10);
52 /* Remove the monster restriction */
53 get_mon_num_prep(NULL, NULL);
55 /* Extract the symbol */
56 vault_aux_char = r_info[r_idx].d_char;
61 * @brief pit/nestの基準となるドラゴンの種類を決める /
64 void vault_prep_dragon(void)
66 /* Pick dragon type */
70 vault_aux_dragon_mask4 = RF4_BR_ACID;
73 vault_aux_dragon_mask4 = RF4_BR_ELEC;
76 vault_aux_dragon_mask4 = RF4_BR_FIRE;
79 vault_aux_dragon_mask4 = RF4_BR_COLD;
82 vault_aux_dragon_mask4 = RF4_BR_POIS;
84 default: /* Multi-hued */
85 vault_aux_dragon_mask4 = (RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | RF4_BR_COLD | RF4_BR_POIS);
91 * @brief モンスターがクエストの討伐対象に成り得るかを返す / Hook function for quest monsters
92 * @param r_idx モンスターID
93 * @return 討伐対象にできるならTRUEを返す。
95 bool mon_hook_quest(MONRACE_IDX r_idx)
97 monster_race *r_ptr = &r_info[r_idx];
99 /* Random quests are in the dungeon */
100 if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
102 /* No random quests for aquatic monsters */
103 if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
105 /* No random quests for multiplying monsters */
106 if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
108 /* No quests to kill friendly monsters */
109 if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
116 * @brief モンスターがダンジョンに出現するかどうかを返す
117 * @param r_idx 判定するモンスターの種族ID
118 * @return ダンジョンに出現するならばTRUEを返す
120 bool mon_hook_dungeon(MONRACE_IDX r_idx)
122 monster_race *r_ptr = &r_info[r_idx];
124 if (!(r_ptr->flags8 & RF8_WILD_ONLY))
128 dungeon_type *d_ptr = &d_info[p_ptr->dungeon_idx];
129 if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&
130 (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
137 * @brief モンスターが海洋に出現するかどうかを返す
138 * @param r_idx 判定するモンスターの種族ID
139 * @return 海洋に出現するならばTRUEを返す
141 bool mon_hook_ocean(MONRACE_IDX r_idx)
143 monster_race *r_ptr = &r_info[r_idx];
145 if (r_ptr->flags8 & RF8_WILD_OCEAN)
153 * @brief モンスターが海岸に出現するかどうかを返す
154 * @param r_idx 判定するモンスターの種族ID
155 * @return 海岸に出現するならばTRUEを返す
157 bool mon_hook_shore(MONRACE_IDX r_idx)
159 monster_race *r_ptr = &r_info[r_idx];
161 if (r_ptr->flags8 & RF8_WILD_SHORE)
169 * @brief モンスターが荒地に出現するかどうかを返す
170 * @param r_idx 判定するモンスターの種族ID
171 * @return 荒地に出現するならばTRUEを返す
173 bool mon_hook_waste(MONRACE_IDX r_idx)
175 monster_race *r_ptr = &r_info[r_idx];
177 if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
185 * @brief モンスターが町に出現するかどうかを返す
186 * @param r_idx 判定するモンスターの種族ID
187 * @return 荒地に出現するならばTRUEを返す
189 bool mon_hook_town(MONRACE_IDX r_idx)
191 monster_race *r_ptr = &r_info[r_idx];
193 if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
201 * @brief モンスターが森林に出現するかどうかを返す
202 * @param r_idx 判定するモンスターの種族ID
203 * @return 森林に出現するならばTRUEを返す
205 bool mon_hook_wood(MONRACE_IDX r_idx)
207 monster_race *r_ptr = &r_info[r_idx];
209 if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
217 * @brief モンスターが火山に出現するかどうかを返す
218 * @param r_idx 判定するモンスターの種族ID
219 * @return 火山に出現するならばTRUEを返す
221 bool mon_hook_volcano(MONRACE_IDX r_idx)
223 monster_race *r_ptr = &r_info[r_idx];
225 if (r_ptr->flags8 & RF8_WILD_VOLCANO)
232 * @brief モンスターが山地に出現するかどうかを返す
233 * @param r_idx 判定するモンスターの種族ID
234 * @return 山地に出現するならばTRUEを返す
236 bool mon_hook_mountain(MONRACE_IDX r_idx)
238 monster_race *r_ptr = &r_info[r_idx];
240 if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
248 * @brief モンスターが草原に出現するかどうかを返す
249 * @param r_idx 判定するモンスターの種族ID
250 * @return 森林に出現するならばTRUEを返す
252 bool mon_hook_grass(MONRACE_IDX r_idx)
254 monster_race *r_ptr = &r_info[r_idx];
256 if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
263 * @brief モンスターが深い水地形に出現するかどうかを返す
264 * @param r_idx 判定するモンスターの種族ID
265 * @return 深い水地形に出現するならばTRUEを返す
267 bool mon_hook_deep_water(MONRACE_IDX r_idx)
269 monster_race *r_ptr = &r_info[r_idx];
271 if (!mon_hook_dungeon(r_idx)) return FALSE;
273 if (r_ptr->flags7 & RF7_AQUATIC)
281 * @brief モンスターが浅い水地形に出現するかどうかを返す
282 * @param r_idx 判定するモンスターの種族ID
283 * @return 浅い水地形に出現するならばTRUEを返す
285 bool mon_hook_shallow_water(MONRACE_IDX r_idx)
287 monster_race *r_ptr = &r_info[r_idx];
289 if (!mon_hook_dungeon(r_idx)) return FALSE;
291 if (r_ptr->flags2 & RF2_AURA_FIRE)
299 * @brief モンスターが溶岩地形に出現するかどうかを返す
300 * @param r_idx 判定するモンスターの種族ID
301 * @return 溶岩地形に出現するならばTRUEを返す
303 bool mon_hook_lava(MONRACE_IDX r_idx)
305 monster_race *r_ptr = &r_info[r_idx];
306 if (!mon_hook_dungeon(r_idx)) return FALSE;
307 if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||
308 (r_ptr->flags7 & RF7_CAN_FLY)) &&
309 !(r_ptr->flags3 & RF3_AURA_COLD))
317 * @brief モンスターが通常の床地形に出現するかどうかを返す
318 * @param r_idx 判定するモンスターの種族ID
319 * @return 通常の床地形に出現するならばTRUEを返す
321 bool mon_hook_floor(MONRACE_IDX r_idx)
323 monster_race *r_ptr = &r_info[r_idx];
324 if (!(r_ptr->flags7 & RF7_AQUATIC) || (r_ptr->flags7 & RF7_CAN_FLY))
331 * Helper function for "glass room"
333 bool vault_aux_lite(MONRACE_IDX r_idx)
335 monster_race *r_ptr = &r_info[r_idx];
336 if (!vault_monster_okay(r_idx)) return FALSE;
337 if (!(r_ptr->flags4 & RF4_BR_LITE) && !(r_ptr->a_ability_flags1 & RF5_BA_LITE)) return FALSE;
338 if (r_ptr->flags2 & (RF2_PASS_WALL | RF2_KILL_WALL)) return FALSE;
339 if (r_ptr->flags4 & RF4_BR_DISI) return FALSE;
344 * Helper function for "glass room"
346 bool vault_aux_shards(MONRACE_IDX r_idx)
348 monster_race *r_ptr = &r_info[r_idx];
349 if (!vault_monster_okay(r_idx)) return FALSE;
350 if (!(r_ptr->flags4 & RF4_BR_SHAR)) return FALSE;
356 * @brief モンスターがVault生成の最低必要条件を満たしているかを返す /
357 * Helper monster selection function
358 * @param r_idx 確認したいモンスター種族ID
359 * @return Vault生成の最低必要条件を満たしているならTRUEを返す。
361 bool vault_aux_simple(MONRACE_IDX r_idx)
363 return (vault_monster_okay(r_idx));
368 * @brief モンスターがゼリーnestの生成必要条件を満たしているかを返す /
369 * Helper function for "monster nest (jelly)"
370 * @param r_idx 確認したいモンスター種族ID
371 * @return 生成必要条件を満たしているならTRUEを返す。
373 bool vault_aux_jelly(MONRACE_IDX r_idx)
375 monster_race *r_ptr = &r_info[r_idx];
376 if (!vault_monster_okay(r_idx)) return (FALSE);
377 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
378 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
379 if (!my_strchr("ijm,", r_ptr->d_char)) return (FALSE);
384 * @brief モンスターが動物nestの生成必要条件を満たしているかを返す /
385 * Helper function for "monster nest (animal)"
386 * @param r_idx 確認したいモンスター種族ID
387 * @return 生成必要条件を満たしているならTRUEを返す。
389 bool vault_aux_animal(MONRACE_IDX r_idx)
391 monster_race *r_ptr = &r_info[r_idx];
392 if (!vault_monster_okay(r_idx)) return (FALSE);
393 if (!(r_ptr->flags3 & (RF3_ANIMAL))) return (FALSE);
399 * @brief モンスターがアンデッドnestの生成必要条件を満たしているかを返す /
400 * Helper function for "monster nest (undead)"
401 * @param r_idx 確認したいモンスター種族ID
402 * @return 生成必要条件を満たしているならTRUEを返す。
404 bool vault_aux_undead(MONRACE_IDX r_idx)
406 monster_race *r_ptr = &r_info[r_idx];
407 if (!vault_monster_okay(r_idx)) return (FALSE);
408 if (!(r_ptr->flags3 & (RF3_UNDEAD))) return (FALSE);
413 * @brief モンスターが聖堂nestの生成必要条件を満たしているかを返す /
414 * Helper function for "monster nest (chapel)"
415 * @param r_idx 確認したいモンスター種族ID
416 * @return 生成必要条件を満たしているならTRUEを返す。
418 bool vault_aux_chapel_g(MONRACE_IDX r_idx)
420 static int chapel_list[] = {
421 MON_NOV_PRIEST, MON_NOV_PALADIN, MON_NOV_PRIEST_G, MON_NOV_PALADIN_G,
422 MON_PRIEST, MON_JADE_MONK, MON_IVORY_MONK, MON_ULTRA_PALADIN,
423 MON_EBONY_MONK, MON_W_KNIGHT, MON_KNI_TEMPLAR, MON_PALADIN,
427 monster_race *r_ptr = &r_info[r_idx];
428 if (!vault_monster_okay(r_idx)) return (FALSE);
429 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
430 if ((r_idx == MON_A_GOLD) || (r_idx == MON_A_SILVER)) return (FALSE);
431 if (r_ptr->d_char == 'A') return TRUE;
432 for (i = 0; chapel_list[i]; i++)
433 if (r_idx == chapel_list[i]) return TRUE;
438 * @brief モンスターが犬小屋nestの生成必要条件を満たしているかを返す /
439 * Helper function for "monster nest (kennel)"
440 * @param r_idx 確認したいモンスター種族ID
441 * @return 生成必要条件を満たしているならTRUEを返す。
443 bool vault_aux_kennel(MONRACE_IDX r_idx)
445 monster_race *r_ptr = &r_info[r_idx];
446 if (!vault_monster_okay(r_idx)) return (FALSE);
447 if (!my_strchr("CZ", r_ptr->d_char)) return (FALSE);
452 * @brief モンスターがミミックnestの生成必要条件を満たしているかを返す /
453 * Helper function for "monster nest (mimic)"
454 * @param r_idx 確認したいモンスター種族ID
455 * @return 生成必要条件を満たしているならTRUEを返す。
457 bool vault_aux_mimic(MONRACE_IDX r_idx)
459 monster_race *r_ptr = &r_info[r_idx];
460 if (!vault_monster_okay(r_idx)) return (FALSE);
461 if (!my_strchr("!$&(/=?[\\|", r_ptr->d_char)) return (FALSE);
466 * @brief モンスターが単一クローンnestの生成必要条件を満たしているかを返す /
467 * Helper function for "monster nest (clone)"
468 * @param r_idx 確認したいモンスター種族ID
469 * @return 生成必要条件を満たしているならTRUEを返す。
471 bool vault_aux_clone(MONRACE_IDX r_idx)
473 if (!vault_monster_okay(r_idx)) return (FALSE);
474 return (r_idx == vault_aux_race);
479 * @brief モンスターが邪悪属性シンボルクローンnestの生成必要条件を満たしているかを返す /
480 * Helper function for "monster nest (symbol clone)"
481 * @param r_idx 確認したいモンスター種族ID
482 * @return 生成必要条件を満たしているならTRUEを返す。
484 bool vault_aux_symbol_e(MONRACE_IDX r_idx)
486 monster_race *r_ptr = &r_info[r_idx];
487 if (!vault_monster_okay(r_idx)) return (FALSE);
488 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
489 if (r_ptr->flags3 & (RF3_GOOD)) return (FALSE);
490 if (r_ptr->d_char != vault_aux_char) return (FALSE);
496 * @brief モンスターが善良属性シンボルクローンnestの生成必要条件を満たしているかを返す /
497 * Helper function for "monster nest (symbol clone)"
498 * @param r_idx 確認したいモンスター種族ID
499 * @return 生成必要条件を満たしているならTRUEを返す。
501 bool vault_aux_symbol_g(MONRACE_IDX r_idx)
503 monster_race *r_ptr = &r_info[r_idx];
504 if (!vault_monster_okay(r_idx)) return (FALSE);
505 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
506 if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);
507 if (r_ptr->d_char != vault_aux_char) return (FALSE);
513 * @brief モンスターがオークpitの生成必要条件を満たしているかを返す /
514 * Helper function for "monster pit (orc)"
515 * @param r_idx 確認したいモンスター種族ID
516 * @return 生成必要条件を満たしているならTRUEを返す。
518 bool vault_aux_orc(MONRACE_IDX r_idx)
520 monster_race *r_ptr = &r_info[r_idx];
521 if (!vault_monster_okay(r_idx)) return (FALSE);
522 if (!(r_ptr->flags3 & RF3_ORC)) return (FALSE);
523 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
529 * @brief モンスターがトロルpitの生成必要条件を満たしているかを返す /
530 * Helper function for "monster pit (troll)"
531 * @param r_idx 確認したいモンスター種族ID
532 * @return 生成必要条件を満たしているならTRUEを返す。
534 bool vault_aux_troll(MONRACE_IDX r_idx)
536 monster_race *r_ptr = &r_info[r_idx];
537 if (!vault_monster_okay(r_idx)) return (FALSE);
538 if (!(r_ptr->flags3 & RF3_TROLL)) return (FALSE);
539 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
545 * @brief モンスターが巨人pitの生成必要条件を満たしているかを返す /
546 * Helper function for "monster pit (giant)"
547 * @param r_idx 確認したいモンスター種族ID
548 * @return 生成必要条件を満たしているならTRUEを返す。
550 bool vault_aux_giant(MONRACE_IDX r_idx)
552 monster_race *r_ptr = &r_info[r_idx];
553 if (!vault_monster_okay(r_idx)) return (FALSE);
554 if (!(r_ptr->flags3 & RF3_GIANT)) return (FALSE);
555 if (r_ptr->flags3 & RF3_GOOD) return (FALSE);
556 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
562 * @brief モンスターがドラゴンpitの生成必要条件を満たしているかを返す /
563 * Helper function for "monster pit (dragon)"
564 * @param r_idx 確認したいモンスター種族ID
565 * @return 生成必要条件を満たしているならTRUEを返す。
567 bool vault_aux_dragon(MONRACE_IDX r_idx)
569 monster_race *r_ptr = &r_info[r_idx];
570 if (!vault_monster_okay(r_idx)) return (FALSE);
571 if (!(r_ptr->flags3 & RF3_DRAGON)) return (FALSE);
572 if (r_ptr->flags4 != vault_aux_dragon_mask4) return (FALSE);
573 if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);
579 * @brief モンスターが悪魔pitの生成必要条件を満たしているかを返す /
580 * Helper function for "monster pit (demon)"
581 * @param r_idx 確認したいモンスター種族ID
582 * @return 生成必要条件を満たしているならTRUEを返す。
584 bool vault_aux_demon(MONRACE_IDX r_idx)
586 monster_race *r_ptr = &r_info[r_idx];
587 if (!vault_monster_okay(r_idx)) return (FALSE);
588 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
589 if (!(r_ptr->flags3 & RF3_DEMON)) return (FALSE);
595 * @brief モンスターが狂気pitの生成必要条件を満たしているかを返す /
596 * Helper function for "monster pit (lovecraftian)"
597 * @param r_idx 確認したいモンスター種族ID
598 * @return 生成必要条件を満たしているならTRUEを返す。
600 bool vault_aux_cthulhu(MONRACE_IDX r_idx)
602 monster_race *r_ptr = &r_info[r_idx];
603 if (!vault_monster_okay(r_idx)) return (FALSE);
604 if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);
605 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return (FALSE);
610 * @brief モンスターがダークエルフpitの生成必要条件を満たしているかを返す /
611 * Helper function for "monster pit (dark elf)"
612 * @param r_idx 確認したいモンスター種族ID
613 * @return 生成必要条件を満たしているならTRUEを返す。
615 bool vault_aux_dark_elf(MONRACE_IDX r_idx)
618 static int dark_elf_list[] =
620 MON_D_ELF, MON_D_ELF_MAGE, MON_D_ELF_WARRIOR, MON_D_ELF_PRIEST,
621 MON_D_ELF_LORD, MON_D_ELF_WARLOCK, MON_D_ELF_DRUID, MON_NIGHTBLADE,
622 MON_D_ELF_SORC, MON_D_ELF_SHADE, 0,
624 if (!vault_monster_okay(r_idx)) return FALSE;
625 for (i = 0; dark_elf_list[i]; i++) if (r_idx == dark_elf_list[i]) return TRUE;
632 * @brief モンスターが生命体かどうかを返す
633 * Is the monster "alive"?
634 * @param r_ptr 判定するモンスターの種族情報構造体参照ポインタ
635 * @return 生命体ならばTRUEを返す
637 * Used to determine the message to print for a killed monster.
638 * ("dies", "destroyed")
640 bool monster_living(MONRACE_IDX r_idx)
642 monster_race *r_ptr = &r_info[r_idx];
644 /* Non-living, undead, or demon */
645 if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
652 * @brief モンスターが特殊能力上、賞金首から排除する必要があるかどうかを返す。
653 * Is the monster "alive"? / Is this monster declined to be questor or bounty?
654 * @param r_idx モンスターの種族ID
655 * @return 賞金首に加えられないならばTRUEを返す
659 bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx)
664 * Decline them to be questor or bounty because they use
665 * special motion "split and combine"
667 case MON_BANORLUPART:
677 * @brief バルログが死体を食べられるモンスターかの判定 / Hook function for human corpses
678 * @param r_idx モンスターID
679 * @return 死体を食べられるならTRUEを返す。
681 bool monster_hook_human(MONRACE_IDX r_idx)
683 monster_race *r_ptr = &r_info[r_idx];
684 if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE;
685 if (my_strchr("pht", r_ptr->d_char)) return TRUE;
691 * @brief 悪夢の元凶となるモンスターかどうかを返す。
692 * @param r_idx 判定対象となるモンスターのID
693 * @return 悪夢の元凶となり得るか否か。
695 bool get_nightmare(MONRACE_IDX r_idx)
697 monster_race *r_ptr = &r_info[r_idx];
699 /* Require eldritch horrors */
700 if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return (FALSE);
702 /* Require high level */
703 if (r_ptr->level <= p_ptr->lev) return (FALSE);
705 /* Accept this monster */
710 * @brief モンスター種族が釣れる種族かどうかを判定する。
711 * @param r_idx 判定したいモンスター種族のID
712 * @return 釣れる対象ならばTRUEを返す
714 bool monster_is_fishing_target(MONRACE_IDX r_idx)
716 monster_race *r_ptr = &r_info[r_idx];
718 if ((r_ptr->flags7 & RF7_AQUATIC) && !(r_ptr->flags1 & RF1_UNIQUE) && my_strchr("Jjlw", r_ptr->d_char))
725 * @brief モンスター闘技場に参加できるモンスターの判定
726 * @param r_idx モンスターID
727 * @details 基準はNEVER_MOVE MULTIPLY QUANTUM RF7_AQUATIC RF7_CHAMELEONのいずれも持たず、
728 * 自爆以外のなんらかのHP攻撃手段を持っていること。
731 bool monster_can_entry_arena(MONRACE_IDX r_idx)
736 monster_race *r_ptr = &r_info[r_idx];
738 /* Decline town monsters */
739 /* if (!mon_hook_dungeon(r_idx)) return FALSE; */
741 /* Decline unique monsters */
742 /* if (r_ptr->flags1 & (RF1_UNIQUE)) return (FALSE); */
743 /* if (r_ptr->flags7 & (RF7_NAZGUL)) return (FALSE); */
745 if (r_ptr->flags1 & (RF1_NEVER_MOVE)) return (FALSE);
746 if (r_ptr->flags2 & (RF2_MULTIPLY)) return (FALSE);
747 if (r_ptr->flags2 & (RF2_QUANTUM)) return (FALSE);
748 if (r_ptr->flags7 & (RF7_AQUATIC)) return (FALSE);
749 if (r_ptr->flags7 & (RF7_CHAMELEON)) return (FALSE);
751 for (i = 0; i < 4; i++)
753 if (r_ptr->blow[i].method == RBM_EXPLODE) return (FALSE);
754 if (r_ptr->blow[i].effect != RBE_DR_MANA) dam += r_ptr->blow[i].d_dice;
756 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);
762 * @brief モンスターが人形のベースにできるかを返す
763 * @param r_idx チェックしたいモンスター種族のID
764 * @return 人形にできるならTRUEを返す
766 bool item_monster_okay(MONRACE_IDX r_idx)
768 monster_race *r_ptr = &r_info[r_idx];
771 if (r_ptr->flags1 & RF1_UNIQUE) return (FALSE);
772 if (r_ptr->flags7 & RF7_KAGE) return (FALSE);
773 if (r_ptr->flagsr & RFR_RES_ALL) return (FALSE);
774 if (r_ptr->flags7 & RF7_NAZGUL) return (FALSE);
775 if (r_ptr->flags1 & RF1_FORCE_DEPTH) return (FALSE);
776 if (r_ptr->flags7 & RF7_UNIQUE2) return (FALSE);