Separate death realm process from cmd-spell.c to realm-death.c/h.
<ClCompile Include="..\..\src\cmd-pet.c" />\r
<ClCompile Include="..\..\src\cmd-quaff.c" />\r
<ClCompile Include="..\..\src\cmd-read.c" />\r
+ <ClCompile Include="..\..\src\realm-death.c" />\r
<ClCompile Include="..\..\src\realm-nature.c" />\r
<ClCompile Include="..\..\src\realm-sorcery.c" />\r
<ClCompile Include="..\..\src\cmd-usestaff.c" />\r
<ClInclude Include="..\..\src\readdib.h" />\r
<ClInclude Include="..\..\src\realm-arcane.h" />\r
<ClInclude Include="..\..\src\realm-chaos.h" />\r
+ <ClInclude Include="..\..\src\realm-death.h" />\r
<ClInclude Include="..\..\src\realm-life.h" />\r
<ClInclude Include="..\..\src\realm-nature.h" />\r
<ClInclude Include="..\..\src\realm-sorcery.h" />\r
<ClCompile Include="..\..\src\realm-nature.c">\r
<Filter>Source</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\src\realm-death.c">\r
+ <Filter>Source</Filter>\r
+ </ClCompile>\r
</ItemGroup>\r
<ItemGroup>\r
<ClInclude Include="..\..\src\angband.h">\r
<ClInclude Include="..\..\src\realm-nature.h">\r
<Filter>Header</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\src\realm-death.h">\r
+ <Filter>Header</Filter>\r
+ </ClInclude>\r
</ItemGroup>\r
<ItemGroup>\r
<ResourceCompile Include="..\..\src\angband.rc" />\r
#include "spells-summon.h"\r
#include "realm-arcane.h"\r
#include "realm-chaos.h"\r
+#include "realm-death.h"\r
#include "realm-life.h"\r
#include "realm-nature.h"\r
#include "realm-sorcery.h"\r
\r
\r
\r
-\r
-\r
-\r
-/*!\r
- * @brief 暗黒領域魔法の各処理を行う\r
- * @param spell 魔法ID\r
- * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
- * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。\r
- */\r
-static cptr do_death_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
-{\r
- bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
- bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
- bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
- bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
-\r
- static const char s_dam[] = _("損傷:", "dam ");\r
- static const char s_random[] = _("ランダム", "random");\r
-\r
- int dir;\r
- int plev = p_ptr->lev;\r
-\r
- switch (spell)\r
- {\r
- case 0:\r
- if (name) return _("無生命感知", "Detect Unlife");\r
- if (desc) return _("近くの生命のないモンスターを感知する。", "Detects all nonliving monsters in your vicinity.");\r
- \r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_monsters_nonliving(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 1:\r
- if (name) return _("呪殺弾", "Malediction");\r
- if (desc) return _("ごく小さな邪悪な力を持つボールを放つ。善良なモンスターには大きなダメージを与える。", \r
- "Fires a tiny ball of evil power which hurts good monsters greatly.");\r
- \r
- {\r
- int dice = 3 + (plev - 1) / 5;\r
- int sides = 4;\r
- int rad = 0;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- /*\r
- * A radius-0 ball may (1) be aimed at\r
- * objects etc., and will affect them;\r
- * (2) may be aimed at ANY visible\r
- * monster, unlike a 'bolt' which must\r
- * travel to the monster.\r
- */\r
-\r
- fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides), rad);\r
-\r
- if (one_in_(5))\r
- {\r
- /* Special effect first */\r
- int effect = randint1(1000);\r
-\r
- if (effect == 666)\r
- fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);\r
- else if (effect < 500)\r
- fire_ball_hide(GF_TURN_ALL, dir, plev, 0);\r
- else if (effect < 800)\r
- fire_ball_hide(GF_OLD_CONF, dir, plev, 0);\r
- else\r
- fire_ball_hide(GF_STUN, dir, plev, 0);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 2:\r
- if (name) return _("邪悪感知", "Detect Evil");\r
- if (desc) return _("近くの邪悪なモンスターを感知する。", "Detects all evil monsters in your vicinity.");\r
- \r
- {\r
- int rad = DETECT_RAD_DEFAULT;\r
-\r
- if (info) return info_radius(rad);\r
-\r
- if (cast)\r
- {\r
- detect_monsters_evil(rad);\r
- }\r
- }\r
- break;\r
-\r
- case 3:\r
- if (name) return _("悪臭雲", "Stinking Cloud");\r
- if (desc) return _("毒の球を放つ。", "Fires a ball of poison.");\r
- \r
- {\r
- HIT_POINT dam = 10 + plev / 2;\r
- int rad = 2;\r
-\r
- if (info) return info_damage(0, 0, dam);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_ball(GF_POIS, dir, dam, rad);\r
- }\r
- }\r
- break;\r
-\r
- case 4:\r
- if (name) return _("黒い眠り", "Black Sleep");\r
- if (desc) return _("1体のモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep a monster.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- sleep_monster(dir, plev);\r
- }\r
- }\r
- break;\r
-\r
- case 5:\r
- if (name) return _("耐毒", "Resist Poison");\r
- if (desc) return _("一定時間、毒への耐性を得る。装備による耐性に累積する。", \r
- "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");\r
- \r
- {\r
- int base = 20;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_oppose_pois(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 6:\r
- if (name) return _("恐慌", "Horrify");\r
- if (desc) return _("モンスター1体を恐怖させ、朦朧させる。抵抗されると無効。", "Attempts to scare and stun a monster.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fear_monster(dir, power);\r
- stun_monster(dir, power);\r
- }\r
- }\r
- break;\r
-\r
- case 7:\r
- if (name) return _("アンデッド従属", "Enslave Undead");\r
- if (desc) return _("アンデッド1体を魅了する。抵抗されると無効。", "Attempts to charm an undead monster.");\r
- \r
- {\r
- int power = plev;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- control_one_undead(dir, power);\r
- }\r
- }\r
- break;\r
-\r
- case 8:\r
- if (name) return _("エントロピーの球", "Orb of Entropy");\r
- if (desc) return _("生命のある者のHPと最大HP双方にダメージを与える効果のある球を放つ。", "Fires a ball which damages to both HP and MaxHP of living monsters.");\r
-\r
- {\r
- int dice = 3;\r
- int sides = 6;\r
- int rad = (plev < 30) ? 2 : 3;\r
- int base;\r
-\r
- if (p_ptr->pclass == CLASS_MAGE ||\r
- p_ptr->pclass == CLASS_HIGH_MAGE ||\r
- p_ptr->pclass == CLASS_SORCERER)\r
- base = plev + plev / 2;\r
- else\r
- base = plev + plev / 4;\r
-\r
-\r
- if (info) return info_damage(dice, sides, base);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_ball(GF_HYPODYNAMIA, dir, damroll(dice, sides) + base, rad);\r
- }\r
- }\r
- break;\r
-\r
- case 9:\r
- if (name) return _("地獄の矢", "Nether Bolt");\r
- if (desc) return _("地獄のボルトもしくはビームを放つ。", "Fires a bolt or beam of nether.");\r
- \r
- {\r
- int dice = 8 + (plev - 5) / 4;\r
- int sides = 8;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));\r
- }\r
- }\r
- break;\r
-\r
- case 10:\r
- if (name) return _("殺戮雲", "Cloud kill");\r
- if (desc) return _("自分を中心とした毒の球を発生させる。", "Generate a ball of poison centered on you.");\r
- \r
- {\r
- HIT_POINT dam = (30 + plev) * 2;\r
- int rad = plev / 10 + 2;\r
-\r
- if (info) return info_damage(0, 0, dam/2);\r
-\r
- if (cast)\r
- {\r
- project(0, rad, p_ptr->y, p_ptr->x, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);\r
- }\r
- }\r
- break;\r
-\r
- case 11:\r
- if (name) return _("モンスター消滅", "Genocide One");\r
- if (desc) return _("モンスター1体を消し去る。経験値やアイテムは手に入らない。抵抗されると無効。", "Attempts to vanish a monster.");\r
- \r
- {\r
- int power = plev + 50;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_ball_hide(GF_GENOCIDE, dir, power, 0);\r
- }\r
- }\r
- break;\r
-\r
- case 12:\r
- if (name) return _("毒の刃", "Poison Branding");\r
- if (desc) return _("武器に毒の属性をつける。", "Makes current weapon poison branded.");\r
- \r
- {\r
- if (cast)\r
- {\r
- brand_weapon(3);\r
- }\r
- }\r
- break;\r
-\r
- case 13:\r
- if (name) return _("吸血の矢", "Vampiric Bolt");\r
- if (desc) return _("ボルトによりモンスター1体から生命力を吸いとる。吸いとった生命力によって満腹度が上がる。", \r
- "Absorbs some HP from a monster and gives them to you by bolt. You will also gain nutritional sustenance from this.");\r
- \r
- {\r
- int dice = 1;\r
- int sides = plev * 2;\r
- int base = plev * 2;\r
-\r
- if (info) return info_damage(dice, sides, base);\r
-\r
- if (cast)\r
- {\r
- HIT_POINT dam = base + damroll(dice, sides);\r
-\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- if (hypodynamic_bolt(dir, dam))\r
- {\r
- chg_virtue(V_SACRIFICE, -1);\r
- chg_virtue(V_VITALITY, -1);\r
-\r
- hp_player(dam);\r
-\r
- /*\r
- * Gain nutritional sustenance:\r
- * 150/hp drained\r
- *\r
- * A Food ration gives 5000\r
- * food points (by contrast)\r
- * Don't ever get more than\r
- * "Full" this way But if we\r
- * ARE Gorged, it won't cure\r
- * us\r
- */\r
- dam = p_ptr->food + MIN(5000, 100 * dam);\r
-\r
- /* Not gorged already */\r
- if (p_ptr->food < PY_FOOD_MAX)\r
- set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 14:\r
- if (name) return _("反魂の術", "Animate dead");\r
- if (desc) return _("周囲の死体や骨を生き返す。", "Resurrects nearby corpse and skeletons. And makes these your pets.");\r
- \r
- {\r
- if (cast)\r
- {\r
- animate_dead(0, p_ptr->y, p_ptr->x);\r
- }\r
- }\r
- break;\r
-\r
- case 15:\r
- if (name) return _("抹殺", "Genocide");\r
- if (desc) return _("指定した文字のモンスターを現在の階から消し去る。抵抗されると無効。", \r
- "Eliminates an entire class of monster, exhausting you. Powerful or unique monsters may resist.");\r
- \r
- {\r
- int power = plev+50;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- symbol_genocide(power, TRUE);\r
- }\r
- }\r
- break;\r
-\r
- case 16:\r
- if (name) return _("狂戦士化", "Berserk");\r
- if (desc) return _("狂戦士化し、恐怖を除去する。", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");\r
- \r
- {\r
- int base = 25;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_shero(randint1(base) + base, FALSE);\r
- hp_player(30);\r
- set_afraid(0);\r
- }\r
- }\r
- break;\r
-\r
- case 17:\r
- if (name) return _("悪霊召喚", "Invoke Spirits");\r
- if (desc) return _("ランダムで様々な効果が起こる。", "Causes random effects.");\r
- \r
- {\r
- if (info) return s_random;\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- cast_invoke_spirits(dir);\r
- }\r
- }\r
- break;\r
-\r
- case 18:\r
- if (name) return _("暗黒の矢", "Dark Bolt");\r
- if (desc) return _("暗黒のボルトもしくはビームを放つ。", "Fires a bolt or beam of darkness.");\r
- \r
- {\r
- int dice = 4 + (plev - 5) / 4;\r
- int sides = 8;\r
-\r
- if (info) return info_damage(dice, sides, 0);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));\r
- }\r
- }\r
- break;\r
-\r
- case 19:\r
- if (name) return _("狂乱戦士", "Battle Frenzy");\r
- if (desc) return _("狂戦士化し、恐怖を除去し、加速する。", \r
- "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.");\r
- \r
- {\r
- int b_base = 25;\r
- int sp_base = plev / 2;\r
- int sp_sides = 20 + plev / 2;\r
-\r
- if (info) return info_duration(b_base, b_base);\r
-\r
- if (cast)\r
- {\r
- set_shero(randint1(25) + 25, FALSE);\r
- hp_player(30);\r
- set_afraid(0);\r
- set_fast(randint1(sp_sides) + sp_base, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 20:\r
- if (name) return _("吸血の刃", "Vampiric Branding");\r
- if (desc) return _("武器に吸血の属性をつける。", "Makes current weapon Vampiric.");\r
- \r
- {\r
- if (cast)\r
- {\r
- brand_weapon(4);\r
- }\r
- }\r
- break;\r
-\r
- case 21:\r
- if (name) return _("吸血の連矢", "Vampiric Bolts");\r
- if (desc) return _("3連射のボルトによりモンスター1体から生命力を吸いとる。吸いとった生命力によって体力が回復する。", \r
- "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.");\r
- {\r
- HIT_POINT dam = 100;\r
-\r
- if (info) return format("%s3*%d", s_dam, dam);\r
-\r
- if (cast)\r
- {\r
- int i;\r
-\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- chg_virtue(V_SACRIFICE, -1);\r
- chg_virtue(V_VITALITY, -1);\r
-\r
- for (i = 0; i < 3; i++)\r
- {\r
- if (hypodynamic_bolt(dir, dam))\r
- hp_player(dam);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 22:\r
- if (name) return _("死の言魂", "Nether Wave");\r
- if (desc) return _("視界内の生命のあるモンスターにダメージを与える。", "Damages all living monsters in sight.");\r
- \r
- {\r
- int sides = plev * 3;\r
-\r
- if (info) return info_damage(1, sides, 0);\r
-\r
- if (cast)\r
- {\r
- dispel_living(randint1(sides));\r
- }\r
- }\r
- break;\r
-\r
- case 23:\r
- if (name) return _("暗黒の嵐", "Darkness Storm");\r
- if (desc) return _("巨大な暗黒の球を放つ。", "Fires a huge ball of darkness.");\r
- \r
- {\r
- HIT_POINT dam = 100 + plev * 2;\r
- int rad = 4;\r
-\r
- if (info) return info_damage(0, 0, dam);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_ball(GF_DARK, dir, dam, rad);\r
- }\r
- }\r
- break;\r
-\r
- case 24:\r
- if (name) return _("死の光線", "Death Ray");\r
- if (desc) return _("死の光線を放つ。", "Fires a beam of death.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- death_ray(dir, plev);\r
- }\r
- }\r
- break;\r
-\r
- case 25:\r
- if (name) return _("死者召喚", "Raise the Dead");\r
- if (desc) return _("1体のアンデッドを召喚する。", "Summons an undead monster.");\r
- \r
- {\r
- if (cast)\r
- {\r
- int type;\r
- bool pet = one_in_(3);\r
- u32b flg = 0L;\r
-\r
- type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);\r
-\r
- if (!pet || (pet && (plev > 24) && one_in_(3)))\r
- flg |= PM_ALLOW_GROUP;\r
-\r
- if (pet) flg |= PM_FORCE_PET;\r
- else flg |= (PM_ALLOW_UNIQUE | PM_NO_PET);\r
-\r
- if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, type, flg))\r
- {\r
- msg_print(_("冷たい風があなたの周りに吹き始めた。それは腐敗臭を運んでいる...",\r
- "Cold winds begin to blow around you, carrying with them the stench of decay..."));\r
-\r
-\r
- if (pet)\r
- {\r
- msg_print(_("古えの死せる者共があなたに仕えるため土から甦った!",\r
- "Ancient, long-dead forms arise from the ground to serve you!"));\r
- }\r
- else\r
- {\r
- msg_print(_("死者が甦った。眠りを妨げるあなたを罰するために!",\r
- "'The dead arise... to punish you for disturbing them!'"));\r
- }\r
-\r
- chg_virtue(V_UNLIFE, 1);\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 26:\r
- if (name) return _("死者の秘伝", "Esoteria");\r
- if (desc) return _("アイテムを1つ識別する。レベルが高いとアイテムの能力を完全に知ることができる。",\r
- "Identifies an item. Or *identifies* an item at higher level.");\r
- \r
- {\r
- if (cast)\r
- {\r
- if (randint1(50) > plev)\r
- {\r
- if (!ident_spell(FALSE)) return NULL;\r
- }\r
- else\r
- {\r
- if (!identify_fully(FALSE)) return NULL;\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case 27:\r
- if (name) return _("吸血鬼変化", "Polymorph Vampire");\r
- if (desc) return _("一定時間、吸血鬼に変化する。変化している間は本来の種族の能力を失い、代わりに吸血鬼としての能力を得る。", \r
- "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.");\r
- \r
- {\r
- int base = 10 + plev / 2;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);\r
- }\r
- }\r
- break;\r
-\r
- case 28:\r
- if (name) return _("経験値復活", "Restore Life");\r
- if (desc) return _("失った経験値を回復する。", "Restore lost experience.");\r
- \r
- {\r
- if (cast)\r
- {\r
- restore_level();\r
- }\r
- }\r
- break;\r
-\r
- case 29:\r
- if (name) return _("周辺抹殺", "Mass Genocide");\r
- if (desc) return _("自分の周囲にいるモンスターを現在の階から消し去る。抵抗されると無効。", \r
- "Eliminates all nearby monsters, exhausting you. Powerful or unique monsters may be able to resist.");\r
- \r
- {\r
- int power = plev + 50;\r
-\r
- if (info) return info_power(power);\r
-\r
- if (cast)\r
- {\r
- mass_genocide(power, TRUE);\r
- }\r
- }\r
- break;\r
-\r
- case 30:\r
- if (name) return _("地獄の劫火", "Hellfire");\r
- if (desc) return _("邪悪な力を持つ宝珠を放つ。善良なモンスターには大きなダメージを与える。", \r
- "Fires a powerful ball of evil power. Hurts good monsters greatly.");\r
- \r
- {\r
- HIT_POINT dam = 666;\r
- int rad = 3;\r
-\r
- if (info) return info_damage(0, 0, dam);\r
-\r
- if (cast)\r
- {\r
- if (!get_aim_dir(&dir)) return NULL;\r
-\r
- fire_ball(GF_HELL_FIRE, dir, dam, rad);\r
- take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("地獄の劫火の呪文を唱えた疲労", "the strain of casting Hellfire"), -1);\r
- }\r
- }\r
- break;\r
-\r
- case 31:\r
- if (name) return _("幽体化", "Wraithform");\r
- if (desc) return _("一定時間、壁を通り抜けることができ受けるダメージが軽減される幽体の状態に変身する。", \r
- "Becomes wraith form which gives ability to pass walls and makes all damages half.");\r
- \r
- {\r
- int base = plev / 2;\r
-\r
- if (info) return info_duration(base, base);\r
-\r
- if (cast)\r
- {\r
- set_wraith_form(randint1(base) + base, FALSE);\r
- }\r
- }\r
- break;\r
- }\r
-\r
- return "";\r
-}\r
-\r
-\r
/*!\r
* @brief トランプ領域魔法の各処理を行う\r
* @param spell 魔法ID\r
--- /dev/null
+#include "angband.h"\r
+#include "cmd-spell.h"\r
+\r
+\r
+\r
+/*!\r
+* @brief \88Ã\8d\95\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
+* @param spell \96\82\96@ID\r
+* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95¶\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95¶\8e\9a\97ñ\82ð\95Ô\82·\81B\r
+*/\r
+cptr do_death_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
+{\r
+ bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
+ bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
+ bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
+ bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
+\r
+ static const char s_dam[] = _("\91¹\8f\9d:", "dam ");\r
+ static const char s_random[] = _("\83\89\83\93\83_\83\80", "random");\r
+\r
+ int dir;\r
+ int plev = p_ptr->lev;\r
+\r
+ switch (spell)\r
+ {\r
+ case 0:\r
+ if (name) return _("\96³\90¶\96½\8a´\92m", "Detect Unlife");\r
+ if (desc) return _("\8bß\82\82Ì\90¶\96½\82Ì\82È\82¢\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "Detects all nonliving monsters in your vicinity.");\r
+\r
+ {\r
+ int rad = DETECT_RAD_DEFAULT;\r
+\r
+ if (info) return info_radius(rad);\r
+\r
+ if (cast)\r
+ {\r
+ detect_monsters_nonliving(rad);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 1:\r
+ if (name) return _("\8eô\8eE\92e", "Malediction");\r
+ if (desc) return _("\82²\82\8f¬\82³\82È\8e×\88«\82È\97Í\82ð\8e\9d\82Â\83{\81[\83\8b\82ð\95ú\82Â\81B\91P\97Ç\82È\83\82\83\93\83X\83^\81[\82É\82Í\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
+ "Fires a tiny ball of evil power which hurts good monsters greatly.");\r
+\r
+ {\r
+ int dice = 3 + (plev - 1) / 5;\r
+ int sides = 4;\r
+ int rad = 0;\r
+\r
+ if (info) return info_damage(dice, sides, 0);\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ /*\r
+ * A radius-0 ball may (1) be aimed at\r
+ * objects etc., and will affect them;\r
+ * (2) may be aimed at ANY visible\r
+ * monster, unlike a 'bolt' which must\r
+ * travel to the monster.\r
+ */\r
+\r
+ fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides), rad);\r
+\r
+ if (one_in_(5))\r
+ {\r
+ /* Special effect first */\r
+ int effect = randint1(1000);\r
+\r
+ if (effect == 666)\r
+ fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);\r
+ else if (effect < 500)\r
+ fire_ball_hide(GF_TURN_ALL, dir, plev, 0);\r
+ else if (effect < 800)\r
+ fire_ball_hide(GF_OLD_CONF, dir, plev, 0);\r
+ else\r
+ fire_ball_hide(GF_STUN, dir, plev, 0);\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 2:\r
+ if (name) return _("\8e×\88«\8a´\92m", "Detect Evil");\r
+ if (desc) return _("\8bß\82\82Ì\8e×\88«\82È\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "Detects all evil monsters in your vicinity.");\r
+\r
+ {\r
+ int rad = DETECT_RAD_DEFAULT;\r
+\r
+ if (info) return info_radius(rad);\r
+\r
+ if (cast)\r
+ {\r
+ detect_monsters_evil(rad);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 3:\r
+ if (name) return _("\88«\8fL\89_", "Stinking Cloud");\r
+ if (desc) return _("\93Å\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of poison.");\r
+\r
+ {\r
+ HIT_POINT dam = 10 + plev / 2;\r
+ int rad = 2;\r
+\r
+ if (info) return info_damage(0, 0, dam);\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ fire_ball(GF_POIS, dir, dam, rad);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 4:\r
+ if (name) return _("\8d\95\82¢\96°\82è", "Black Sleep");\r
+ if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82ð\96°\82ç\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to sleep a monster.");\r
+\r
+ {\r
+ int power = plev;\r
+\r
+ if (info) return info_power(power);\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ sleep_monster(dir, plev);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 5:\r
+ if (name) return _("\91Ï\93Å", "Resist Poison");\r
+ if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93Å\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
+ "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");\r
+\r
+ {\r
+ int base = 20;\r
+\r
+ if (info) return info_duration(base, base);\r
+\r
+ if (cast)\r
+ {\r
+ set_oppose_pois(randint1(base) + base, FALSE);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 6:\r
+ if (name) return _("\8b°\8dQ", "Horrify");\r
+ if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8b°\95|\82³\82¹\81A\9eN\9eO\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to scare and stun a monster.");\r
+\r
+ {\r
+ int power = plev;\r
+\r
+ if (info) return info_power(power);\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ fear_monster(dir, power);\r
+ stun_monster(dir, power);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 7:\r
+ if (name) return _("\83A\83\93\83f\83b\83h\8f]\91®", "Enslave Undead");\r
+ if (desc) return _("\83A\83\93\83f\83b\83h1\91Ì\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to charm an undead monster.");\r
+\r
+ {\r
+ int power = plev;\r
+\r
+ if (info) return info_power(power);\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ control_one_undead(dir, power);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 8:\r
+ if (name) return _("\83G\83\93\83g\83\8d\83s\81[\82Ì\8b\85", "Orb of Entropy");\r
+ if (desc) return _("\90¶\96½\82Ì\82 \82é\8eÒ\82ÌHP\82Æ\8dÅ\91åHP\91o\95û\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\8cø\89Ê\82Ì\82 \82é\8b\85\82ð\95ú\82Â\81B", "Fires a ball which damages to both HP and MaxHP of living monsters.");\r
+\r
+ {\r
+ int dice = 3;\r
+ int sides = 6;\r
+ int rad = (plev < 30) ? 2 : 3;\r
+ int base;\r
+\r
+ if (p_ptr->pclass == CLASS_MAGE ||\r
+ p_ptr->pclass == CLASS_HIGH_MAGE ||\r
+ p_ptr->pclass == CLASS_SORCERER)\r
+ base = plev + plev / 2;\r
+ else\r
+ base = plev + plev / 4;\r
+\r
+\r
+ if (info) return info_damage(dice, sides, base);\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ fire_ball(GF_HYPODYNAMIA, dir, damroll(dice, sides) + base, rad);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 9:\r
+ if (name) return _("\92n\8d\96\82Ì\96î", "Nether Bolt");\r
+ if (desc) return _("\92n\8d\96\82Ì\83{\83\8b\83g\82à\82µ\82\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or beam of nether.");\r
+\r
+ {\r
+ int dice = 8 + (plev - 5) / 4;\r
+ int sides = 8;\r
+\r
+ if (info) return info_damage(dice, sides, 0);\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 10:\r
+ if (name) return _("\8eE\9dC\89_", "Cloud kill");\r
+ if (desc) return _("\8e©\95ª\82ð\92\86\90S\82Æ\82µ\82½\93Å\82Ì\8b\85\82ð\94\90¶\82³\82¹\82é\81B", "Generate a ball of poison centered on you.");\r
+\r
+ {\r
+ HIT_POINT dam = (30 + plev) * 2;\r
+ int rad = plev / 10 + 2;\r
+\r
+ if (info) return info_damage(0, 0, dam / 2);\r
+\r
+ if (cast)\r
+ {\r
+ project(0, rad, p_ptr->y, p_ptr->x, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 11:\r
+ if (name) return _("\83\82\83\93\83X\83^\81[\8fÁ\96Å", "Genocide One");\r
+ if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8fÁ\82µ\8b\8e\82é\81B\8co\8c±\92l\82â\83A\83C\83e\83\80\82Í\8eè\82É\93ü\82ç\82È\82¢\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to vanish a monster.");\r
+\r
+ {\r
+ int power = plev + 50;\r
+\r
+ if (info) return info_power(power);\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ fire_ball_hide(GF_GENOCIDE, dir, power, 0);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 12:\r
+ if (name) return _("\93Å\82Ì\90n", "Poison Branding");\r
+ if (desc) return _("\95\90\8aí\82É\93Å\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon poison branded.");\r
+\r
+ {\r
+ if (cast)\r
+ {\r
+ brand_weapon(3);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 13:\r
+ if (name) return _("\8bz\8c\8c\82Ì\96î", "Vampiric Bolt");\r
+ if (desc) return _("\83{\83\8b\83g\82É\82æ\82è\83\82\83\93\83X\83^\81[1\91Ì\82©\82ç\90¶\96½\97Í\82ð\8bz\82¢\82Æ\82é\81B\8bz\82¢\82Æ\82Á\82½\90¶\96½\97Í\82É\82æ\82Á\82Ä\96\9e\95 \93x\82ª\8fã\82ª\82é\81B",\r
+ "Absorbs some HP from a monster and gives them to you by bolt. You will also gain nutritional sustenance from this.");\r
+\r
+ {\r
+ int dice = 1;\r
+ int sides = plev * 2;\r
+ int base = plev * 2;\r
+\r
+ if (info) return info_damage(dice, sides, base);\r
+\r
+ if (cast)\r
+ {\r
+ HIT_POINT dam = base + damroll(dice, sides);\r
+\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ if (hypodynamic_bolt(dir, dam))\r
+ {\r
+ chg_virtue(V_SACRIFICE, -1);\r
+ chg_virtue(V_VITALITY, -1);\r
+\r
+ hp_player(dam);\r
+\r
+ /*\r
+ * Gain nutritional sustenance:\r
+ * 150/hp drained\r
+ *\r
+ * A Food ration gives 5000\r
+ * food points (by contrast)\r
+ * Don't ever get more than\r
+ * "Full" this way But if we\r
+ * ARE Gorged, it won't cure\r
+ * us\r
+ */\r
+ dam = p_ptr->food + MIN(5000, 100 * dam);\r
+\r
+ /* Not gorged already */\r
+ if (p_ptr->food < PY_FOOD_MAX)\r
+ set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 14:\r
+ if (name) return _("\94½\8d°\82Ì\8fp", "Animate dead");\r
+ if (desc) return _("\8eü\88Í\82Ì\8e\80\91Ì\82â\8d\9c\82ð\90¶\82«\95Ô\82·\81B", "Resurrects nearby corpse and skeletons. And makes these your pets.");\r
+\r
+ {\r
+ if (cast)\r
+ {\r
+ animate_dead(0, p_ptr->y, p_ptr->x);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 15:\r
+ if (name) return _("\96\95\8eE", "Genocide");\r
+ if (desc) return _("\8ew\92è\82µ\82½\95¶\8e\9a\82Ì\83\82\83\93\83X\83^\81[\82ð\8c»\8dÝ\82Ì\8aK\82©\82ç\8fÁ\82µ\8b\8e\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B",\r
+ "Eliminates an entire class of monster, exhausting you. Powerful or unique monsters may resist.");\r
+\r
+ {\r
+ int power = plev + 50;\r
+\r
+ if (info) return info_power(power);\r
+\r
+ if (cast)\r
+ {\r
+ symbol_genocide(power, TRUE);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 16:\r
+ if (name) return _("\8b¶\90í\8em\89»", "Berserk");\r
+ if (desc) return _("\8b¶\90í\8em\89»\82µ\81A\8b°\95|\82ð\8f\9c\8b\8e\82·\82é\81B", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");\r
+\r
+ {\r
+ int base = 25;\r
+\r
+ if (info) return info_duration(base, base);\r
+\r
+ if (cast)\r
+ {\r
+ set_shero(randint1(base) + base, FALSE);\r
+ hp_player(30);\r
+ set_afraid(0);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 17:\r
+ if (name) return _("\88«\97ì\8f¢\8a«", "Invoke Spirits");\r
+ if (desc) return _("\83\89\83\93\83_\83\80\82Å\97l\81X\82È\8cø\89Ê\82ª\8bN\82±\82é\81B", "Causes random effects.");\r
+\r
+ {\r
+ if (info) return s_random;\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ cast_invoke_spirits(dir);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 18:\r
+ if (name) return _("\88Ã\8d\95\82Ì\96î", "Dark Bolt");\r
+ if (desc) return _("\88Ã\8d\95\82Ì\83{\83\8b\83g\82à\82µ\82\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or beam of darkness.");\r
+\r
+ {\r
+ int dice = 4 + (plev - 5) / 4;\r
+ int sides = 8;\r
+\r
+ if (info) return info_damage(dice, sides, 0);\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 19:\r
+ if (name) return _("\8b¶\97\90\90í\8em", "Battle Frenzy");\r
+ if (desc) return _("\8b¶\90í\8em\89»\82µ\81A\8b°\95|\82ð\8f\9c\8b\8e\82µ\81A\89Á\91¬\82·\82é\81B",\r
+ "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.");\r
+\r
+ {\r
+ int b_base = 25;\r
+ int sp_base = plev / 2;\r
+ int sp_sides = 20 + plev / 2;\r
+\r
+ if (info) return info_duration(b_base, b_base);\r
+\r
+ if (cast)\r
+ {\r
+ set_shero(randint1(25) + 25, FALSE);\r
+ hp_player(30);\r
+ set_afraid(0);\r
+ set_fast(randint1(sp_sides) + sp_base, FALSE);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 20:\r
+ if (name) return _("\8bz\8c\8c\82Ì\90n", "Vampiric Branding");\r
+ if (desc) return _("\95\90\8aí\82É\8bz\8c\8c\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon Vampiric.");\r
+\r
+ {\r
+ if (cast)\r
+ {\r
+ brand_weapon(4);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 21:\r
+ if (name) return _("\8bz\8c\8c\82Ì\98A\96î", "Vampiric Bolts");\r
+ if (desc) return _("3\98A\8eË\82Ì\83{\83\8b\83g\82É\82æ\82è\83\82\83\93\83X\83^\81[1\91Ì\82©\82ç\90¶\96½\97Í\82ð\8bz\82¢\82Æ\82é\81B\8bz\82¢\82Æ\82Á\82½\90¶\96½\97Í\82É\82æ\82Á\82Ä\91Ì\97Í\82ª\89ñ\95\9c\82·\82é\81B",\r
+ "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.");\r
+ {\r
+ HIT_POINT dam = 100;\r
+\r
+ if (info) return format("%s3*%d", s_dam, dam);\r
+\r
+ if (cast)\r
+ {\r
+ int i;\r
+\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ chg_virtue(V_SACRIFICE, -1);\r
+ chg_virtue(V_VITALITY, -1);\r
+\r
+ for (i = 0; i < 3; i++)\r
+ {\r
+ if (hypodynamic_bolt(dir, dam))\r
+ hp_player(dam);\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 22:\r
+ if (name) return _("\8e\80\82Ì\8c¾\8d°", "Nether Wave");\r
+ if (desc) return _("\8e\8b\8aE\93à\82Ì\90¶\96½\82Ì\82 \82é\83\82\83\93\83X\83^\81[\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B", "Damages all living monsters in sight.");\r
+\r
+ {\r
+ int sides = plev * 3;\r
+\r
+ if (info) return info_damage(1, sides, 0);\r
+\r
+ if (cast)\r
+ {\r
+ dispel_living(randint1(sides));\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 23:\r
+ if (name) return _("\88Ã\8d\95\82Ì\97\92", "Darkness Storm");\r
+ if (desc) return _("\8b\90\91å\82È\88Ã\8d\95\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a huge ball of darkness.");\r
+\r
+ {\r
+ HIT_POINT dam = 100 + plev * 2;\r
+ int rad = 4;\r
+\r
+ if (info) return info_damage(0, 0, dam);\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ fire_ball(GF_DARK, dir, dam, rad);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 24:\r
+ if (name) return _("\8e\80\82Ì\8cõ\90ü", "Death Ray");\r
+ if (desc) return _("\8e\80\82Ì\8cõ\90ü\82ð\95ú\82Â\81B", "Fires a beam of death.");\r
+\r
+ {\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ death_ray(dir, plev);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 25:\r
+ if (name) return _("\8e\80\8eÒ\8f¢\8a«", "Raise the Dead");\r
+ if (desc) return _("1\91Ì\82Ì\83A\83\93\83f\83b\83h\82ð\8f¢\8a«\82·\82é\81B", "Summons an undead monster.");\r
+\r
+ {\r
+ if (cast)\r
+ {\r
+ int type;\r
+ bool pet = one_in_(3);\r
+ u32b flg = 0L;\r
+\r
+ type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);\r
+\r
+ if (!pet || (pet && (plev > 24) && one_in_(3)))\r
+ flg |= PM_ALLOW_GROUP;\r
+\r
+ if (pet) flg |= PM_FORCE_PET;\r
+ else flg |= (PM_ALLOW_UNIQUE | PM_NO_PET);\r
+\r
+ if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, type, flg))\r
+ {\r
+ msg_print(_("\97â\82½\82¢\95\97\82ª\82 \82È\82½\82Ì\8eü\82è\82É\90\81\82«\8en\82ß\82½\81B\82»\82ê\82Í\95\85\94s\8fL\82ð\89^\82ñ\82Å\82¢\82é...",\r
+ "Cold winds begin to blow around you, carrying with them the stench of decay..."));\r
+\r
+\r
+ if (pet)\r
+ {\r
+ msg_print(_("\8cÃ\82¦\82Ì\8e\80\82¹\82é\8eÒ\8b¤\82ª\82 \82È\82½\82É\8ed\82¦\82é\82½\82ß\93y\82©\82çáS\82Á\82½\81I",\r
+ "Ancient, long-dead forms arise from the ground to serve you!"));\r
+ }\r
+ else\r
+ {\r
+ msg_print(_("\8e\80\8eÒ\82ªáS\82Á\82½\81B\96°\82è\82ð\96W\82°\82é\82 \82È\82½\82ð\94±\82·\82é\82½\82ß\82É\81I",\r
+ "'The dead arise... to punish you for disturbing them!'"));\r
+ }\r
+\r
+ chg_virtue(V_UNLIFE, 1);\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 26:\r
+ if (name) return _("\8e\80\8eÒ\82Ì\94é\93`", "Esoteria");\r
+ if (desc) return _("\83A\83C\83e\83\80\82ð1\82Â\8e¯\95Ê\82·\82é\81B\83\8c\83x\83\8b\82ª\8d\82\82¢\82Æ\83A\83C\83e\83\80\82Ì\94\\97Í\82ð\8a®\91S\82É\92m\82é\82±\82Æ\82ª\82Å\82«\82é\81B",\r
+ "Identifies an item. Or *identifies* an item at higher level.");\r
+\r
+ {\r
+ if (cast)\r
+ {\r
+ if (randint1(50) > plev)\r
+ {\r
+ if (!ident_spell(FALSE)) return NULL;\r
+ }\r
+ else\r
+ {\r
+ if (!identify_fully(FALSE)) return NULL;\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 27:\r
+ if (name) return _("\8bz\8c\8c\8bS\95Ï\89»", "Polymorph Vampire");\r
+ if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8bz\8c\8c\8bS\82É\95Ï\89»\82·\82é\81B\95Ï\89»\82µ\82Ä\82¢\82é\8aÔ\82Í\96{\97\88\82Ì\8eí\91°\82Ì\94\\97Í\82ð\8e¸\82¢\81A\91ã\82í\82è\82É\8bz\8c\8c\8bS\82Æ\82µ\82Ä\82Ì\94\\97Í\82ð\93¾\82é\81B",\r
+ "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.");\r
+\r
+ {\r
+ int base = 10 + plev / 2;\r
+\r
+ if (info) return info_duration(base, base);\r
+\r
+ if (cast)\r
+ {\r
+ set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 28:\r
+ if (name) return _("\8co\8c±\92l\95\9c\8a\88", "Restore Life");\r
+ if (desc) return _("\8e¸\82Á\82½\8co\8c±\92l\82ð\89ñ\95\9c\82·\82é\81B", "Restore lost experience.");\r
+\r
+ {\r
+ if (cast)\r
+ {\r
+ restore_level();\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 29:\r
+ if (name) return _("\8eü\95Ó\96\95\8eE", "Mass Genocide");\r
+ if (desc) return _("\8e©\95ª\82Ì\8eü\88Í\82É\82¢\82é\83\82\83\93\83X\83^\81[\82ð\8c»\8dÝ\82Ì\8aK\82©\82ç\8fÁ\82µ\8b\8e\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B",\r
+ "Eliminates all nearby monsters, exhausting you. Powerful or unique monsters may be able to resist.");\r
+\r
+ {\r
+ int power = plev + 50;\r
+\r
+ if (info) return info_power(power);\r
+\r
+ if (cast)\r
+ {\r
+ mass_genocide(power, TRUE);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 30:\r
+ if (name) return _("\92n\8d\96\82Ì\8d\85\89Î", "Hellfire");\r
+ if (desc) return _("\8e×\88«\82È\97Í\82ð\8e\9d\82Â\95ó\8eì\82ð\95ú\82Â\81B\91P\97Ç\82È\83\82\83\93\83X\83^\81[\82É\82Í\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
+ "Fires a powerful ball of evil power. Hurts good monsters greatly.");\r
+\r
+ {\r
+ HIT_POINT dam = 666;\r
+ int rad = 3;\r
+\r
+ if (info) return info_damage(0, 0, dam);\r
+\r
+ if (cast)\r
+ {\r
+ if (!get_aim_dir(&dir)) return NULL;\r
+\r
+ fire_ball(GF_HELL_FIRE, dir, dam, rad);\r
+ take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("\92n\8d\96\82Ì\8d\85\89Î\82Ì\8eô\95¶\82ð\8f¥\82¦\82½\94æ\98J", "the strain of casting Hellfire"), -1);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case 31:\r
+ if (name) return _("\97H\91Ì\89»", "Wraithform");\r
+ if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\95Ç\82ð\92Ê\82è\94²\82¯\82é\82±\82Æ\82ª\82Å\82«\8eó\82¯\82é\83_\83\81\81[\83W\82ª\8cy\8c¸\82³\82ê\82é\97H\91Ì\82Ì\8fó\91Ô\82É\95Ï\90g\82·\82é\81B",\r
+ "Becomes wraith form which gives ability to pass walls and makes all damages half.");\r
+\r
+ {\r
+ int base = plev / 2;\r
+\r
+ if (info) return info_duration(base, base);\r
+\r
+ if (cast)\r
+ {\r
+ set_wraith_form(randint1(base) + base, FALSE);\r
+ }\r
+ }\r
+ break;\r
+ }\r
+\r
+ return "";\r
+}\r
--- /dev/null
+extern cptr do_death_spell(SPELL_IDX spell, BIT_FLAGS mode);\r