#define PIT_TYPE_DARK_ELF 9\r
\r
\r
-\r
-\r
-\r
-\r
-/*! 通常pit生成時のモンスターの構成条件ID / Race index for "monster pit (clone)" */\r
-static int vault_aux_race;\r
-\r
-/*! 単一シンボルpit生成時の指定シンボル / Race index for "monster pit (symbol clone)" */\r
-static char vault_aux_char;\r
-\r
-/*! ブレス属性に基づくドラゴンpit生成時条件マスク / Breath mask for "monster pit (dragon)" */\r
-static u32b vault_aux_dragon_mask4;\r
-\r
-\r
-/*!\r
-* @brief モンスターがVault生成の最低必要条件を満たしているかを返す /\r
-* Helper monster selection function\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return Vault生成の最低必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_simple(MONRACE_IDX r_idx)\r
-{\r
- return (vault_monster_okay(r_idx));\r
-}\r
-\r
-\r
-/*!\r
-* @brief モンスターがゼリーnestの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster nest (jelly)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_jelly(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);\r
-\r
- /* Also decline evil jellies (like death molds and shoggoths) */\r
- if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);\r
-\r
- /* Require icky thing, jelly, mold, or mushroom */\r
- if (!my_strchr("ijm,", r_ptr->d_char)) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-/*!\r
-* @brief モンスターが動物nestの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster nest (animal)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_animal(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- /* Require "animal" flag */\r
- if (!(r_ptr->flags3 & (RF3_ANIMAL))) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief モンスターがアンデッドnestの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster nest (undead)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_undead(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- /* Require Undead */\r
- if (!(r_ptr->flags3 & (RF3_UNDEAD))) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-/*!\r
-* @brief モンスターが聖堂nestの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster nest (chapel)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_chapel_g(MONRACE_IDX r_idx)\r
-{\r
- static int chapel_list[] = {\r
- MON_NOV_PRIEST, MON_NOV_PALADIN, MON_NOV_PRIEST_G, MON_NOV_PALADIN_G,\r
- MON_PRIEST, MON_JADE_MONK, MON_IVORY_MONK, MON_ULTRA_PALADIN,\r
- MON_EBONY_MONK, MON_W_KNIGHT, MON_KNI_TEMPLAR, MON_PALADIN,\r
- MON_TOPAZ_MONK, 0 };\r
-\r
- int i;\r
-\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);\r
- if ((r_idx == MON_A_GOLD) || (r_idx == MON_A_SILVER)) return (FALSE);\r
-\r
- /* Require "priest" or Angel */\r
-\r
- if (r_ptr->d_char == 'A') return TRUE;\r
-\r
- for (i = 0; chapel_list[i]; i++)\r
- if (r_idx == chapel_list[i]) return TRUE;\r
-\r
- return FALSE;\r
-}\r
-\r
-/*!\r
-* @brief モンスターが犬小屋nestの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster nest (kennel)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_kennel(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- /* Require a Zephyr Hound or a dog */\r
- if (!my_strchr("CZ", r_ptr->d_char)) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-/*!\r
-* @brief モンスターがミミックnestの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster nest (mimic)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_mimic(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- /* Require mimic */\r
- if (!my_strchr("!$&(/=?[\\|", r_ptr->d_char)) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-/*!\r
-* @brief モンスターが単一クローンnestの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster nest (clone)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_clone(MONRACE_IDX r_idx)\r
-{\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- return (r_idx == vault_aux_race);\r
-}\r
-\r
-\r
-/*!\r
-* @brief モンスターが邪悪属性シンボルクローンnestの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster nest (symbol clone)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_symbol_e(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);\r
-\r
- if (r_ptr->flags3 & (RF3_GOOD)) return (FALSE);\r
-\r
- /* Decline incorrect symbol */\r
- if (r_ptr->d_char != vault_aux_char) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief モンスターが善良属性シンボルクローンnestの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster nest (symbol clone)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_symbol_g(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);\r
-\r
- if (r_ptr->flags3 & (RF3_EVIL)) return (FALSE);\r
-\r
- /* Decline incorrect symbol */\r
- if (r_ptr->d_char != vault_aux_char) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief モンスターがオークpitの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster pit (orc)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_orc(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- /* Require orc */\r
- if (!(r_ptr->flags3 & RF3_ORC)) return (FALSE);\r
-\r
- /* Decline undead */\r
- if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief モンスターがトロルpitの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster pit (troll)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_troll(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- /* Require troll */\r
- if (!(r_ptr->flags3 & RF3_TROLL)) return (FALSE);\r
-\r
- /* Decline undead */\r
- if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief モンスターが巨人pitの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster pit (giant)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_giant(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- /* Require giant */\r
- if (!(r_ptr->flags3 & RF3_GIANT)) return (FALSE);\r
-\r
- if (r_ptr->flags3 & RF3_GOOD) return (FALSE);\r
-\r
- /* Decline undead */\r
- if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief モンスターがドラゴンpitの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster pit (dragon)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_dragon(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- /* Require dragon */\r
- if (!(r_ptr->flags3 & RF3_DRAGON)) return (FALSE);\r
-\r
- /* Hack -- Require correct "breath attack" */\r
- if (r_ptr->flags4 != vault_aux_dragon_mask4) return (FALSE);\r
-\r
- /* Decline undead */\r
- if (r_ptr->flags3 & RF3_UNDEAD) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief モンスターが悪魔pitの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster pit (demon)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_demon(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);\r
-\r
- /* Require demon */\r
- if (!(r_ptr->flags3 & RF3_DEMON)) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief モンスターが狂気pitの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster pit (lovecraftian)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_cthulhu(MONRACE_IDX r_idx)\r
-{\r
- monster_race *r_ptr = &r_info[r_idx];\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return (FALSE);\r
-\r
- if ((r_ptr->flags2 & RF2_KILL_BODY) && !(r_ptr->flags1 & RF1_NEVER_BLOW)) return (FALSE);\r
-\r
- /* Require eldritch horror */\r
- if (!(r_ptr->flags2 & (RF2_ELDRITCH_HORROR))) return (FALSE);\r
-\r
- return (TRUE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief pit/nestの基準となる単種モンスターを決める /\r
-* @return なし\r
-*/\r
-static void vault_prep_clone(void)\r
-{\r
- /* Apply the monster restriction */\r
- get_mon_num_prep(vault_aux_simple, NULL);\r
-\r
- /* Pick a race to clone */\r
- vault_aux_race = get_mon_num(dun_level + 10);\r
-\r
- /* Remove the monster restriction */\r
- get_mon_num_prep(NULL, NULL);\r
-}\r
-\r
-\r
-/*!\r
-* @brief pit/nestの基準となるモンスターシンボルを決める /\r
-* @return なし\r
-*/\r
-static void vault_prep_symbol(void)\r
-{\r
- MONRACE_IDX r_idx;\r
-\r
- /* Apply the monster restriction */\r
- get_mon_num_prep(vault_aux_simple, NULL);\r
-\r
- /* Pick a race to clone */\r
- r_idx = get_mon_num(dun_level + 10);\r
-\r
- /* Remove the monster restriction */\r
- get_mon_num_prep(NULL, NULL);\r
-\r
- /* Extract the symbol */\r
- vault_aux_char = r_info[r_idx].d_char;\r
-}\r
-\r
-/*!\r
-* @brief pit/nestの基準となるドラゴンの種類を決める /\r
-* @return なし\r
-*/\r
-static void vault_prep_dragon(void)\r
-{\r
- /* Pick dragon type */\r
- switch (randint0(6))\r
- {\r
- /* Black */\r
- case 0:\r
- {\r
- /* Restrict dragon breath type */\r
- vault_aux_dragon_mask4 = RF4_BR_ACID;\r
-\r
- break;\r
- }\r
-\r
- /* Blue */\r
- case 1:\r
- {\r
- /* Restrict dragon breath type */\r
- vault_aux_dragon_mask4 = RF4_BR_ELEC;\r
-\r
- break;\r
- }\r
-\r
- /* Red */\r
- case 2:\r
- {\r
- /* Restrict dragon breath type */\r
- vault_aux_dragon_mask4 = RF4_BR_FIRE;\r
-\r
- break;\r
- }\r
-\r
- /* White */\r
- case 3:\r
- {\r
- /* Restrict dragon breath type */\r
- vault_aux_dragon_mask4 = RF4_BR_COLD;\r
-\r
- break;\r
- }\r
-\r
- /* Green */\r
- case 4:\r
- {\r
- /* Restrict dragon breath type */\r
- vault_aux_dragon_mask4 = RF4_BR_POIS;\r
-\r
- break;\r
- }\r
-\r
- /* Multi-hued */\r
- default:\r
- {\r
- /* Restrict dragon breath type */\r
- vault_aux_dragon_mask4 = (RF4_BR_ACID | RF4_BR_ELEC |\r
- RF4_BR_FIRE | RF4_BR_COLD |\r
- RF4_BR_POIS);\r
-\r
- break;\r
- }\r
- }\r
-}\r
-\r
-\r
-/*!\r
-* @brief モンスターがダークエルフpitの生成必要条件を満たしているかを返す /\r
-* Helper function for "monster pit (dark elf)"\r
-* @param r_idx 確認したいモンスター種族ID\r
-* @return 生成必要条件を満たしているならTRUEを返す。\r
-*/\r
-static bool vault_aux_dark_elf(MONRACE_IDX r_idx)\r
-{\r
- int i;\r
- static int dark_elf_list[] =\r
- {\r
- MON_D_ELF, MON_D_ELF_MAGE, MON_D_ELF_WARRIOR, MON_D_ELF_PRIEST,\r
- MON_D_ELF_LORD, MON_D_ELF_WARLOCK, MON_D_ELF_DRUID, MON_NIGHTBLADE,\r
- MON_D_ELF_SORC, MON_D_ELF_SHADE, 0,\r
- };\r
-\r
- /* Validate the monster */\r
- if (!vault_monster_okay(r_idx)) return FALSE;\r
-\r
- /* Require dark elves */\r
- for (i = 0; dark_elf_list[i]; i++)\r
- if (r_idx == dark_elf_list[i]) return TRUE;\r
-\r
- /* Assume not */\r
- return FALSE;\r
-}\r
-\r
-\r
/*!\r
* @brief ダンジョン毎に指定されたピット配列を基準にランダムなpit/nestタイプを決める\r
* @param l_ptr 選択されたpit/nest情報を返す参照ポインタ\r
case PIT_TYPE_DRAGON:\r
switch (vault_aux_dragon_mask4)\r
{\r
- case RF4_BR_ACID: strcpy(inner_buf, _("(酸)", "(acid)")); break;\r
- case RF4_BR_ELEC: strcpy(inner_buf, _("(稲妻)", "(lightning)")); break;\r
- case RF4_BR_FIRE: strcpy(inner_buf, _("(火炎)", "(fire)")); break;\r
- case RF4_BR_COLD: strcpy(inner_buf, _("(冷気)", "(frost)")); break;\r
- case RF4_BR_POIS: strcpy(inner_buf, _("(毒)", "(poison)")); break;\r
- case (RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | RF4_BR_COLD | RF4_BR_POIS) :\r
- strcpy(inner_buf, _("(万色)", "(multi-hued)")); break;\r
- default: strcpy(inner_buf, _("(未定義)", "(undefined)")); break;\r
+ case RF4_BR_ACID: strcpy(inner_buf, _("(酸)", "(acid)")); break;\r
+ case RF4_BR_ELEC: strcpy(inner_buf, _("(稲妻)", "(lightning)")); break;\r
+ case RF4_BR_FIRE: strcpy(inner_buf, _("(火炎)", "(fire)")); break;\r
+ case RF4_BR_COLD: strcpy(inner_buf, _("(冷気)", "(frost)")); break;\r
+ case RF4_BR_POIS: strcpy(inner_buf, _("(毒)", "(poison)")); break;\r
+ case (RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | RF4_BR_COLD | RF4_BR_POIS) :\r
+ strcpy(inner_buf, _("(万色)", "(multi-hued)")); break;\r
+ default: strcpy(inner_buf, _("(未定義)", "(undefined)")); break;\r
}\r
break;\r
}\r
return inner_buf;\r
}\r
\r
-\r
-\r
-\r
-\r
/*\r
*! @brief nestのモンスターリストをソートするための関数 /\r
* Comp function for sorting nest monster information\r
{\r
monster_race *r_ptr = &r_info[r_idx];\r
\r
- /* Validate the monster */\r
if (!vault_monster_okay(r_idx)) return (FALSE);\r
\r
/* No wall passing monster */\r