OSDN Git Service

[Refactor] #37353 匠領域処理を cmd-spell.c から realm-craft.c/h へ分離。
[hengband/hengband.git] / src / cmd-spell.c
index 6636410..0fd8d75 100644 (file)
 #include "selfinfo.h"\r
 #include "cmd-quaff.h"\r
 #include "spells-summon.h"\r
-\r
+#include "realm-arcane.h"\r
+#include "realm-chaos.h"\r
+#include "realm-craft.h"\r
+#include "realm-death.h"\r
+#include "realm-life.h"\r
+#include "realm-nature.h"\r
+#include "realm-sorcery.h"\r
+#include "realm-trump.h"\r
 \r
 /*!\r
  * @brief\r
@@ -21,7 +28,7 @@
  * @param base 固定値\r
  * @return フォーマットに従い整形された文字列\r
  */\r
-static cptr info_string_dice(cptr str, int dice, int sides, int base)\r
+cptr info_string_dice(cptr str, int dice, int sides, int base)\r
 {\r
        /* Fix value */\r
        if (!dice)\r
@@ -44,7 +51,7 @@ static cptr info_string_dice(cptr str, int dice, int sides, int base)
  * @param base 固定値\r
  * @return フォーマットに従い整形された文字列\r
  */\r
-static cptr info_damage(int dice, int sides, int base)\r
+cptr info_damage(int dice, int sides, int base)\r
 {\r
        return info_string_dice(_("損傷:", "dam "), dice, sides, base);\r
 }\r
@@ -55,7 +62,7 @@ static cptr info_damage(int dice, int sides, int base)
  * @param sides ダイス目\r
  * @return フォーマットに従い整形された文字列\r
  */\r
-static cptr info_duration(int base, int sides)\r
+cptr info_duration(int base, int sides)\r
 {\r
        return format(_("期間:%d+1d%d", "dur %d+1d%d"), base, sides);\r
 }\r
@@ -65,7 +72,7 @@ static cptr info_duration(int base, int sides)
  * @param range 効果範囲\r
  * @return フォーマットに従い整形された文字列\r
  */\r
-static cptr info_range(POSITION range)\r
+cptr info_range(POSITION range)\r
 {\r
        return format(_("範囲:%d", "range %d"), range);\r
 }\r
@@ -77,7 +84,7 @@ static cptr info_range(POSITION range)
  * @param base 固定値\r
  * @return フォーマットに従い整形された文字列\r
  */\r
-static cptr info_heal(int dice, int sides, int base)\r
+cptr info_heal(int dice, int sides, int base)\r
 {\r
        return info_string_dice(_("回復:", "heal "), dice, sides, base);\r
 }\r
@@ -88,7 +95,7 @@ static cptr info_heal(int dice, int sides, int base)
  * @param sides ダイス目\r
  * @return フォーマットに従い整形された文字列\r
  */\r
-static cptr info_delay(int base, int sides)\r
+cptr info_delay(int base, int sides)\r
 {\r
        return format(_("遅延:%d+1d%d", "delay %d+1d%d"), base, sides);\r
 }\r
@@ -99,7 +106,7 @@ static cptr info_delay(int base, int sides)
  * @param dam 固定値\r
  * @return フォーマットに従い整形された文字列\r
  */\r
-static cptr info_multi_damage(HIT_POINT dam)\r
+cptr info_multi_damage(HIT_POINT dam)\r
 {\r
        return format(_("損傷:各%d", "dam %d each"), dam);\r
 }\r
@@ -111,7 +118,7 @@ static cptr info_multi_damage(HIT_POINT dam)
  * @param sides ダイス目\r
  * @return フォーマットに従い整形された文字列\r
  */\r
-static cptr info_multi_damage_dice(int dice, int sides)\r
+cptr info_multi_damage_dice(int dice, int sides)\r
 {\r
        return format(_("損傷:各%dd%d", "dam %dd%d each"), dice, sides);\r
 }\r
@@ -121,7 +128,7 @@ static cptr info_multi_damage_dice(int dice, int sides)
  * @param power 固定値\r
  * @return フォーマットに従い整形された文字列\r
  */\r
-static cptr info_power(int power)\r
+cptr info_power(int power)\r
 {\r
        return format(_("効力:%d", "power %d"), power);\r
 }\r
@@ -136,7 +143,7 @@ static cptr info_power(int power)
 /*\r
  * Generate power info string such as "power 1d100"\r
  */\r
-static cptr info_power_dice(int dice, int sides)\r
+cptr info_power_dice(int dice, int sides)\r
 {\r
        return format(_("効力:%dd%d", "power %dd%d"), dice, sides);\r
 }\r
@@ -147,7 +154,7 @@ static cptr info_power_dice(int dice, int sides)
  * @param rad 効果半径\r
  * @return フォーマットに従い整形された文字列\r
  */\r
-static cptr info_radius(int rad)\r
+cptr info_radius(int rad)\r
 {\r
        return format(_("半径:%d", "rad %d"), rad);\r
 }\r
@@ -158,7 +165,7 @@ static cptr info_radius(int rad)
  * @param weight 最大重量\r
  * @return フォーマットに従い整形された文字列\r
  */\r
-static cptr info_weight(int weight)\r
+cptr info_weight(int weight)\r
 {\r
 #ifdef JP\r
        return format("最大重量:%d.%dkg", lbtokg1(weight), lbtokg2(weight));\r
@@ -231,4710 +238,6 @@ void stop_singing(void)
 \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_life_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
-       int dir;\r
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("軽傷の治癒", "Cure Light Wounds");\r
-               if (desc) return _("怪我と体力を少し回復させる。", "Heals cut and HP a little.");\r
-               {\r
-                       int dice = 2;\r
-                       int sides = 10;\r
-\r
-                       if (info) return info_heal(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               hp_player(damroll(dice, sides));\r
-                               set_cut(p_ptr->cut - 10);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("祝福", "Bless");\r
-               if (desc) return _("一定時間、命中率とACにボーナスを得る。", "Gives bonus to hit and AC for a few turns.");\r
-               {\r
-                       int base = 12;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_blessed(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("軽傷", "Cause Light Wounds");\r
-               if (desc) return _("1体のモンスターに小ダメージを与える。抵抗されると無効。", "Wounds a monster a little unless resisted.");\r
-               {\r
-                       int dice = 3 + (plev - 1) / 5;\r
-                       int sides = 4;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-                               fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("光の召喚", "Call Light");\r
-               if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");\r
-               {\r
-                       int dice = 2;\r
-                       int sides = plev / 2;\r
-                       int rad = plev / 10 + 1;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               lite_area(damroll(dice, sides), rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("罠 & 隠し扉感知", "Detect Doors & Traps");\r
-               if (desc) return _("近くの全ての罠と扉と階段を感知する。", "Detects traps, doors, and stairs in your vicinity.");\r
-               {\r
-                       int rad = DETECT_RAD_DEFAULT;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               detect_traps(rad, TRUE);\r
-                               detect_doors(rad);\r
-                               detect_stairs(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("重傷の治癒", "Cure Medium Wounds");\r
-               if (desc) return _("怪我と体力を中程度回復させる。", "Heals cut and HP more.");\r
-               {\r
-                       int dice = 4;\r
-                       int sides = 10;\r
-\r
-                       if (info) return info_heal(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               hp_player(damroll(dice, sides));\r
-                               set_cut((p_ptr->cut / 2) - 20);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("解毒", "Cure Poison");\r
-               if (desc) return _("体内の毒を取り除く。", "Cure poison status.");\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               set_poisoned(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("空腹充足", "Satisfy Hunger");\r
-               if (desc) return _("満腹にする。", "Satisfies hunger.");\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               set_food(PY_FOOD_MAX - 1);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("解呪", "Remove Curse");\r
-               if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (remove_curse())\r
-                               {\r
-                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("重傷", "Cause Medium Wounds");\r
-               if (desc) return _("1体のモンスターに中ダメージを与える。抵抗されると無効。", "Wounds a monster unless resisted.");\r
-               {\r
-                       int sides = 8 + (plev - 5) / 4;\r
-                       int dice = 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
-                               fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("致命傷の治癒", "Cure Critical Wounds");\r
-               if (desc) return _("体力を大幅に回復させ、負傷と朦朧状態も全快する。", "Heals cut, stun and HP greatly.");\r
-               {\r
-                       int dice = 8;\r
-                       int sides = 10;\r
-\r
-                       if (info) return info_heal(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               hp_player(damroll(dice, sides));\r
-                               set_stun(0);\r
-                               set_cut(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("耐熱耐寒", "Resist Heat and Cold");\r
-               if (desc) return _("一定時間、火炎と冷気に対する耐性を得る。装備による耐性に累積する。", \r
-                       "Gives resistance to fire and cold. These resistances can be added to which from equipment for more powerful resistances.");\r
-    \r
-               {\r
-                       int base = 20;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_oppose_cold(randint1(base) + base, FALSE);\r
-                               set_oppose_fire(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("周辺感知", "Sense Surroundings");\r
-               if (desc) return _("周辺の地形を感知する。", "Maps nearby area.");\r
-    \r
-               {\r
-                       int rad = DETECT_RAD_MAP;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               map_area(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("パニック・アンデッド", "Turn Undead");\r
-               if (desc) return _("視界内のアンデッドを恐怖させる。抵抗されると無効。", "Attempts to scare undead monsters in sight.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               turn_undead();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("体力回復", "Healing");\r
-               if (desc) return _("極めて強力な回復呪文で、負傷と朦朧状態も全快する。", "Much powerful healing magic, and heals cut and stun completely.");\r
-    \r
-               {\r
-                       int heal = 300;\r
-\r
-                       if (info) return info_heal(0, 0, heal);\r
-\r
-                       if (cast)\r
-                       {\r
-                               hp_player(heal);\r
-                               set_stun(0);\r
-                               set_cut(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("結界の紋章", "Glyph of Warding");\r
-               if (desc) return _("自分のいる床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。",\r
-                       "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               warding_glyph();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("*解呪*", "Dispel Curse");\r
-               if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (remove_all_curse())\r
-                               {\r
-                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("鑑識", "Perception");\r
-               if (desc) return _("アイテムを識別する。", "Identifies an item.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!ident_spell(FALSE)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("アンデッド退散", "Dispel Undead");\r
-               if (desc) return _("視界内の全てのアンデッドにダメージを与える。", "Damages all undead monsters in sight.");\r
-    \r
-               {\r
-                       int dice = 1;\r
-                       int sides = plev * 5;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               dispel_undead(damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("凪の刻", "Day of the Dove");\r
-               if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");\r
-    \r
-               {\r
-                       int power = plev * 2;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               charm_monsters(power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("致命傷", "Cause Critical Wounds");\r
-               if (desc) return _("1体のモンスターに大ダメージを与える。抵抗されると無効。", "Wounds a monster critically unless resisted.");\r
-    \r
-               {\r
-                       int dice = 5 + (plev - 5) / 3;\r
-                       int sides = 15;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-                               fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("帰還の詔", "Word of Recall");\r
-               if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。", "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");\r
-    \r
-               {\r
-                       int base = 15;\r
-                       int sides = 20;\r
-\r
-                       if (info) return info_delay(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!word_of_recall()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("真実の祭壇", "Alter Reality");\r
-               if (desc) return _("現在の階を再構成する。", "Recreates current dungeon level.");\r
-    \r
-               {\r
-                       int base = 15;\r
-                       int sides = 20;\r
-\r
-                       if (info) return info_delay(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               alter_reality();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("真・結界", "Warding True");\r
-               if (desc) return _("自分のいる床と周囲8マスの床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。", "Creates glyphs in all adjacent squares and under you.");\r
-    \r
-               {\r
-                       int rad = 1;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               warding_glyph();\r
-                               glyph_creation();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("不毛化", "Sterilization");\r
-               if (desc) return _("この階の増殖するモンスターが増殖できなくなる。", "Prevents any breeders on current level from breeding.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               num_repro += MAX_REPRO;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("全感知", "Detection");\r
-               if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。", "Detects all monsters, traps, doors, stairs, treasures and items 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_all(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("アンデッド消滅", "Annihilate Undead");\r
-               if (desc) return _("自分の周囲にいるアンデッドを現在の階から消し去る。抵抗されると無効。",\r
-                       "Eliminates all nearby undead 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_undead(power, TRUE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("千里眼", "Clairvoyance");\r
-               if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。", "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               wiz_lite(FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("全復活", "Restoration");\r
-               if (desc) return _("すべてのステータスと経験値を回復する。", "Restores all stats and experience.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               do_res_stat(A_STR);\r
-                               do_res_stat(A_INT);\r
-                               do_res_stat(A_WIS);\r
-                               do_res_stat(A_DEX);\r
-                               do_res_stat(A_CON);\r
-                               do_res_stat(A_CHR);\r
-                               restore_level();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("*体力回復*", "Healing True");\r
-               if (desc) return _("最強の治癒の魔法で、負傷と朦朧状態も全快する。", "The greatest healing magic. Heals all HP, cut and stun.");\r
-    \r
-               {\r
-                       int heal = 2000;\r
-\r
-                       if (info) return info_heal(0, 0, heal);\r
-\r
-                       if (cast)\r
-                       {\r
-                               hp_player(heal);\r
-                               set_stun(0);\r
-                               set_cut(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("聖なるビジョン", "Holy Vision");\r
-               if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!identify_fully(FALSE)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("究極の耐性", "Ultimate Resistance");\r
-               if (desc) return _("一定時間、あらゆる耐性を付け、ACと魔法防御能力を上昇させる。", "Gives ultimate resistance, bonus to AC and speed.");\r
-    \r
-               {\r
-                       TIME_EFFECT base = (TIME_EFFECT)plev / 2;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               TIME_EFFECT v = randint1(base) + base;\r
-                               set_fast(v, FALSE);\r
-                               set_oppose_acid(v, FALSE);\r
-                               set_oppose_elec(v, FALSE);\r
-                               set_oppose_fire(v, FALSE);\r
-                               set_oppose_cold(v, FALSE);\r
-                               set_oppose_pois(v, FALSE);\r
-                               set_ultimate_res(v, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\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_sorcery_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
-       int dir;\r
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("モンスター感知", "Detect Monsters");\r
-               if (desc) return _("近くの全ての見えるモンスターを感知する。", "Detects all monsters in your vicinity unless invisible.");\r
-    \r
-               {\r
-                       int rad = DETECT_RAD_DEFAULT;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               detect_monsters_normal(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("ショート・テレポート", "Phase Door");\r
-               if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");\r
-    \r
-               {\r
-                       POSITION range = 10;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               teleport_player(range, 0L);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("罠と扉感知", "Detect Doors and Traps");\r
-               if (desc) return _("近くの全ての扉と罠を感知する。", "Detects traps, doors, and stairs 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_traps(rad, TRUE);\r
-                               detect_doors(rad);\r
-                               detect_stairs(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("ライト・エリア", "Light Area");\r
-               if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");\r
-    \r
-               {\r
-                       int dice = 2;\r
-                       int sides = plev / 2;\r
-                       int rad = plev / 10 + 1;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               lite_area(damroll(dice, sides), rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("パニック・モンスター", "Confuse Monster");\r
-               if (desc) return _("モンスター1体を混乱させる。抵抗されると無効。", "Attempts to confuse a monster.");\r
-    \r
-               {\r
-                       int power = (plev * 3) / 2;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               confuse_monster(dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("テレポート", "Teleport");\r
-               if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");\r
-    \r
-               {\r
-                       POSITION range = plev * 5;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               teleport_player(range, 0L);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("スリープ・モンスター", "Sleep Monster");\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 7:\r
-               if (name) return _("魔力充填", "Recharging");\r
-               if (desc) return _("杖/魔法棒の充填回数を増やすか、充填中のロッドの充填時間を減らす。", "Recharges staffs, wands or rods.");\r
-    \r
-               {\r
-                       int power = plev * 4;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!recharge(power)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("魔法の地図", "Magic Mapping");\r
-               if (desc) return _("周辺の地形を感知する。", "Maps nearby area.");\r
-    \r
-               {\r
-                       int rad = DETECT_RAD_MAP;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               map_area(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("鑑定", "Identify");\r
-               if (desc) return _("アイテムを識別する。", "Identifies an item.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!ident_spell(FALSE)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("スロウ・モンスター", "Slow Monster");\r
-               if (desc) return _("モンスター1体を減速さる。抵抗されると無効。", "Attempts to slow 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
-                               slow_monster(dir, plev);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("周辺スリープ", "Mass Sleep");\r
-               if (desc) return _("視界内の全てのモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep all monsters in sight.");\r
-    \r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               sleep_monsters(plev);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("テレポート・モンスター", "Teleport Away");\r
-               if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");\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
-                               fire_beam(GF_AWAY_ALL, dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("スピード", "Haste Self");\r
-               if (desc) return _("一定時間、加速する。", "Hastes you for a while.");\r
-    \r
-               {\r
-                       int base = plev;\r
-                       int sides = 20 + plev;\r
-\r
-                       if (info) return info_duration(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_fast(randint1(sides) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("真・感知", "Detection True");\r
-               if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",\r
-                       "Detects all monsters, traps, doors, stairs, treasures and items 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_all(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("真・鑑定", "Identify True");\r
-               if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!identify_fully(FALSE)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("物体と財宝感知", "Detect items and Treasure");\r
-               if (desc) return _("近くの全てのアイテムと財宝を感知する。", "Detects all treasures and items 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_objects_normal(rad);\r
-                               detect_treasure(rad);\r
-                               detect_objects_gold(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("チャーム・モンスター", "Charm Monster");\r
-               if (desc) return _("モンスター1体を魅了する。抵抗されると無効。", "Attempts to charm 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
-                               charm_monster(dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("精神感知", "Sense Minds");\r
-               if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");\r
-    \r
-               {\r
-                       int base = 25;\r
-                       int sides = 30;\r
-\r
-                       if (info) return info_duration(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_tim_esp(randint1(sides) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("街移動", "Teleport to town");\r
-               if (desc) return _("街へ移動する。地上にいるときしか使えない。", "Teleport to a town which you choose in a moment. Can only be used outdoors.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!tele_town()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("自己分析", "Self Knowledge");\r
-               if (desc) return _("現在の自分の状態を完全に知る。",\r
-                       "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               self_knowledge();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("テレポート・レベル", "Teleport Level");\r
-               if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;\r
-                               teleport_level(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("帰還の呪文", "Word of Recall");\r
-               if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。", \r
-                       "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");\r
-    \r
-               {\r
-                       int base = 15;\r
-                       int sides = 20;\r
-\r
-                       if (info) return info_delay(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!word_of_recall()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("次元の扉", "Dimension Door");\r
-               if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleport to given location.");\r
-    \r
-               {\r
-                       POSITION range = plev / 2 + 10;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               msg_print(_("次元の扉が開いた。目的地を選んで下さい。", "You open a dimensional gate. Choose a destination."));\r
-                               if (!dimension_door()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("調査", "Probing");\r
-               if (desc) return _("モンスターの属性、残り体力、最大体力、スピード、正体を知る。",\r
-                       "Proves all monsters' alignment, HP, speed and their true character.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               probing();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("爆発のルーン", "Explosive Rune");\r
-               if (desc) return _("自分のいる床の上に、モンスターが通ると爆発してダメージを与えるルーンを描く。", \r
-                       "Sets a glyph under you. The glyph will explode when a monster moves on it.");\r
-    \r
-               {\r
-                       int dice = 7;\r
-                       int sides = 7;\r
-                       int base = plev;\r
-\r
-                       if (info) return info_damage(dice, sides, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               explosive_rune();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("念動力", "Telekinesis");\r
-               if (desc) return _("アイテムを自分の足元へ移動させる。", "Pulls a distant item close to you.");\r
-    \r
-               {\r
-                       int weight = plev * 15;\r
-\r
-                       if (info) return info_weight(weight);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fetch(dir, weight, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("千里眼", "Clairvoyance");\r
-               if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。さらに、一定時間テレパシー能力を得る。",\r
-                       "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");\r
-    \r
-               {\r
-                       int base = 25;\r
-                       int sides = 30;\r
-\r
-                       if (info) return info_duration(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               chg_virtue(V_KNOWLEDGE, 1);\r
-                               chg_virtue(V_ENLIGHTEN, 1);\r
-\r
-                               wiz_lite(FALSE);\r
-\r
-                               if (!p_ptr->telepathy)\r
-                               {\r
-                                       set_tim_esp(randint1(sides) + base, FALSE);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("魅了の視線", "Charm monsters");\r
-               if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");\r
-    \r
-               {\r
-                       int power = plev * 2;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               charm_monsters(power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("錬金術", "Alchemy");\r
-               if (desc) return _("アイテム1つをお金に変える。", "Turns an item into 1/3 of its value in gold.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!alchemy()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("怪物追放", "Banishment");\r
-               if (desc) return _("視界内の全てのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all monsters in sight away unless resisted.");\r
-    \r
-               {\r
-                       int power = plev * 4;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               banish_monsters(power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("無傷の球", "Globe of Invulnerability");\r
-               if (desc) return _("一定時間、ダメージを受けなくなるバリアを張る。切れた瞬間に少しターンを消費するので注意。",\r
-                       "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks or duration time is exceeded.");\r
-    \r
-               {\r
-                       int base = 4;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_invuln(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\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_nature_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_rng[] = _("射程", "rng ");\r
-\r
-       int dir;\r
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("モンスター感知", "Detect Creatures");\r
-               if (desc) return _("近くの全ての見えるモンスターを感知する。", "Detects all monsters in your vicinity unless invisible.");\r
-    \r
-               {\r
-                       int rad = DETECT_RAD_DEFAULT;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               detect_monsters_normal(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("稲妻", "Lightning");\r
-               if (desc) return _("電撃の短いビームを放つ。", "Fires a short beam of lightning.");\r
-    \r
-               {\r
-                       int dice = 3 + (plev - 1) / 5;\r
-                       int sides = 4;\r
-                       POSITION range = plev / 6 + 2;\r
-\r
-                       if (info) return format("%s%dd%d %s%d", s_dam, dice, sides, s_rng, range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               project_length = range;\r
-\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fire_beam(GF_ELEC, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("罠と扉感知", "Detect Doors and Traps");\r
-               if (desc) return _("近くの全ての罠と扉を感知する。", "Detects traps, doors, and stairs 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_traps(rad, TRUE);\r
-                               detect_doors(rad);\r
-                               detect_stairs(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("食糧生成", "Produce Food");\r
-               if (desc) return _("食料を一つ作り出す。", "Produces a Ration of Food.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               object_type forge, *q_ptr = &forge;\r
-                               msg_print(_("食料を生成した。", "A food ration is produced."));\r
-\r
-                               /* Create the food ration */\r
-                               object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));\r
-\r
-                               /* Drop the object from heaven */\r
-                               drop_near(q_ptr, -1, p_ptr->y, p_ptr->x);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("日の光", "Daylight");\r
-               if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");\r
-    \r
-               {\r
-                       int dice = 2;\r
-                       int sides = plev / 2;\r
-                       int rad = (plev / 10) + 1;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               lite_area(damroll(dice, sides), rad);\r
-\r
-                               if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)\r
-                               {\r
-                                       msg_print(_("日の光があなたの肉体を焦がした!", "The daylight scorches your flesh!"));\r
-                                       take_hit(DAMAGE_NOESCAPE, damroll(2, 2), _("日の光", "daylight"), -1);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("動物習し", "Animal Taming");\r
-               if (desc) return _("動物1体を魅了する。抵抗されると無効。", "Attempts to charm an animal.");\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
-                               charm_animal(dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("環境への耐性", "Resist Environment");\r
-               if (desc) return _("一定時間、冷気、炎、電撃に対する耐性を得る。装備による耐性に累積する。",\r
-                       "Gives resistance to fire, cold and electricity for a while. These resistances can be added to which from equipment for more powerful resistances.");\r
-    \r
-               {\r
-                       int base = 20;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_oppose_cold(randint1(base) + base, FALSE);\r
-                               set_oppose_fire(randint1(base) + base, FALSE);\r
-                               set_oppose_elec(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("傷と毒治療", "Cure Wounds & Poison");\r
-               if (desc) return _("怪我を全快させ、毒を体から完全に取り除き、体力を少し回復させる。", "Heals all cut and poison status. Heals HP a little.");\r
-    \r
-               {\r
-                       int dice = 2;\r
-                       int sides = 8;\r
-\r
-                       if (info) return info_heal(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               hp_player(damroll(dice, sides));\r
-                               set_cut(0);\r
-                               set_poisoned(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("岩石溶解", "Stone to Mud");\r
-               if (desc) return _("壁を溶かして床にする。", "Turns one rock square to mud.");\r
-    \r
-               {\r
-                       int dice = 1;\r
-                       int sides = 30;\r
-                       int base = 20;\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
-                               wall_to_mud(dir, 20 + randint1(30));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("アイス・ボルト", "Frost Bolt");\r
-               if (desc) return _("冷気のボルトもしくはビームを放つ。", "Fires a bolt or beam of cold.");\r
-    \r
-               {\r
-                       int dice = 3 + (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
-                               fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("自然の覚醒", "Nature Awareness");\r
-               if (desc) return _("周辺の地形を感知し、近くの罠、扉、階段、全てのモンスターを感知する。",\r
-                       "Maps nearby area. Detects all monsters, traps, doors and stairs.");\r
-    \r
-               {\r
-                       int rad1 = DETECT_RAD_MAP;\r
-                       int rad2 = DETECT_RAD_DEFAULT;\r
-\r
-                       if (info) return info_radius(MAX(rad1, rad2));\r
-\r
-                       if (cast)\r
-                       {\r
-                               map_area(rad1);\r
-                               detect_traps(rad2, TRUE);\r
-                               detect_doors(rad2);\r
-                               detect_stairs(rad2);\r
-                               detect_monsters_normal(rad2);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("ファイア・ボルト", "Fire Bolt");\r
-               if (desc) return _("火炎のボルトもしくはビームを放つ。", "Fires a bolt or beam of fire.");\r
-    \r
-               {\r
-                       int dice = 5 + (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
-                               fire_bolt_or_beam(beam_chance() - 10, GF_FIRE, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("太陽光線", "Ray of Sunlight");\r
-               if (desc) return _("光線を放つ。光りを嫌うモンスターに効果がある。", "Fires a beam of light which damages to light-sensitive monsters.");\r
-    \r
-               {\r
-                       int dice = 6;\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
-                               msg_print(_("太陽光線が現れた。", "A line of sunlight appears."));\r
-                               lite_line(dir, damroll(6, 8));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("足かせ", "Entangle");\r
-               if (desc) return _("視界内の全てのモンスターを減速させる。抵抗されると無効。", "Attempts to slow all monsters in sight.");\r
-    \r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               slow_monsters(plev);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("動物召喚", "Summon Animal");\r
-               if (desc) return _("動物を1体召喚する。", "Summons an animal.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!(summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))\r
-                               {\r
-                                       msg_print(_("動物は現れなかった。", "No animals arrive."));\r
-                               }\r
-                               break;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("薬草治療", "Herbal Healing");\r
-               if (desc) return _("体力を大幅に回復させ、負傷、朦朧状態、毒から全快する。", "Heals HP greatly. And heals cut, stun and poison completely.");\r
-    \r
-               {\r
-                       int heal = 500;\r
-\r
-                       if (info) return info_heal(0, 0, heal);\r
-\r
-                       if (cast)\r
-                       {\r
-                               hp_player(heal);\r
-                               set_stun(0);\r
-                               set_cut(0);\r
-                               set_poisoned(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("階段生成", "Stair Building");\r
-               if (desc) return _("自分のいる位置に階段を作る。", "Creates a stair which goes down or up.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               stair_creation();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("肌石化", "Stone Skin");\r
-               if (desc) return _("一定時間、ACを上昇させる。", "Gives bonus to AC for a while.");\r
-    \r
-               {\r
-                       int base = 20;\r
-                       int sides = 30;\r
-\r
-                       if (info) return info_duration(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_shield(randint1(sides) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("真・耐性", "Resistance True");\r
-               if (desc) return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。", \r
-                       "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to which from equipment for more powerful resistances.");\r
-    \r
-               {\r
-                       int base = 20;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_oppose_acid(randint1(base) + base, FALSE);\r
-                               set_oppose_elec(randint1(base) + base, FALSE);\r
-                               set_oppose_fire(randint1(base) + base, FALSE);\r
-                               set_oppose_cold(randint1(base) + base, FALSE);\r
-                               set_oppose_pois(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("森林創造", "Forest Creation");\r
-               if (desc) return _("周囲に木を作り出す。", "Creates trees in all adjacent squares.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               tree_creation();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("動物友和", "Animal Friendship");\r
-               if (desc) return _("視界内の全ての動物を魅了する。抵抗されると無効。", "Attempts to charm all animals in sight.");\r
-    \r
-               {\r
-                       int power = plev * 2;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               charm_animals(power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("試金石", "Stone Tell");\r
-               if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!identify_fully(FALSE)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("石の壁", "Wall of Stone");\r
-               if (desc) return _("自分の周囲に花崗岩の壁を作る。", "Creates granite walls in all adjacent squares.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               wall_stone();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("腐食防止", "Protect from Corrosion");\r
-               if (desc) return _("アイテムを酸で傷つかないよう加工する。", "Makes an equipment acid-proof.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!rustproof()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("地震", "Earthquake");\r
-               if (desc) return _("周囲のダンジョンを揺らし、壁と床をランダムに入れ変える。", \r
-                       "Shakes dungeon structure, and results in random swapping of floors and walls.");\r
-    \r
-               {\r
-                       int rad = 10;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               earthquake(p_ptr->y, p_ptr->x, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("カマイタチ", "Cyclone");\r
-               if (desc) return _("全方向に向かって攻撃する。", "Attacks all adjacent monsters.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               int y = 0, x = 0;\r
-                               cave_type       *c_ptr;\r
-                               monster_type    *m_ptr;\r
-\r
-                               for (dir = 0; dir < 8; dir++)\r
-                               {\r
-                                       y = p_ptr->y + ddy_ddd[dir];\r
-                                       x = p_ptr->x + ddx_ddd[dir];\r
-                                       c_ptr = &cave[y][x];\r
-\r
-                                       /* Get the monster */\r
-                                       m_ptr = &m_list[c_ptr->m_idx];\r
-\r
-                                       /* Hack -- attack monsters */\r
-                                       if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))\r
-                                               py_attack(y, x, 0);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("ブリザード", "Blizzard");\r
-               if (desc) return _("巨大な冷気の球を放つ。", "Fires a huge ball of cold.");\r
-    \r
-               {\r
-                       HIT_POINT dam = 70 + plev * 3 / 2;\r
-                       int rad = plev / 12 + 1;\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_COLD, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("稲妻嵐", "Lightning Storm");\r
-               if (desc) return _("巨大な電撃の球を放つ。", "Fires a huge electric ball.");\r
-    \r
-               {\r
-                       HIT_POINT dam = 90 + plev * 3 / 2;\r
-                       int rad = plev / 12 + 1;\r
-\r
-                       if (info) return info_damage(0, 0, dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-                               fire_ball(GF_ELEC, dir, dam, rad);\r
-                               break;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("渦潮", "Whirlpool");\r
-               if (desc) return _("巨大な水の球を放つ。", "Fires a huge ball of water.");\r
-    \r
-               {\r
-                       HIT_POINT dam = 100 + plev * 3 / 2;\r
-                       int rad = plev / 12 + 1;\r
-\r
-                       if (info) return info_damage(0, 0, dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-                               fire_ball(GF_WATER, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("陽光召喚", "Call Sunlight");\r
-               if (desc) return _("自分を中心とした光の球を発生させる。さらに、その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。",\r
-                       "Generates ball of light centered on you. Maps and lights whole dungeon level. Knows all objects location.");\r
-    \r
-               {\r
-                       HIT_POINT dam = 150;\r
-                       int rad = 8;\r
-\r
-                       if (info) return info_damage(0, 0, dam/2);\r
-\r
-                       if (cast)\r
-                       {\r
-                               fire_ball(GF_LITE, 0, dam, rad);\r
-                               chg_virtue(V_KNOWLEDGE, 1);\r
-                               chg_virtue(V_ENLIGHTEN, 1);\r
-                               wiz_lite(FALSE);\r
-\r
-                               if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)\r
-                               {\r
-                                       msg_print(_("日光があなたの肉体を焦がした!", "The sunlight scorches your flesh!"));\r
-                                       take_hit(DAMAGE_NOESCAPE, 50, _("日光", "sunlight"), -1);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("精霊の刃", "Elemental Branding");\r
-               if (desc) return _("武器に炎か冷気の属性をつける。", "Makes current weapon fire or frost branded.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               brand_weapon(randint0(2));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("自然の脅威", "Nature's Wrath");\r
-               if (desc) return _("近くの全てのモンスターにダメージを与え、地震を起こし、自分を中心とした分解の球を発生させる。", \r
-                       "Damages all monsters in sight. Makes quake. Generates disintegration ball centered on you.");\r
-    \r
-               {\r
-                       int d_dam = 4 * plev;\r
-                       int b_dam = (100 + plev) * 2;\r
-                       int b_rad = 1 + plev / 12;\r
-                       int q_rad = 20 + plev / 2;\r
-\r
-                       if (info) return format("%s%d+%d", s_dam, d_dam, b_dam/2);\r
-\r
-                       if (cast)\r
-                       {\r
-                               dispel_monsters(d_dam);\r
-                               earthquake(p_ptr->y, p_ptr->x, q_rad);\r
-                               project(0, b_rad, p_ptr->y, p_ptr->x, b_dam, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\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_chaos_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 _("マジック・ミサイル", "Magic Missile");\r
-               if (desc) return _("弱い魔法の矢を放つ。", "Fires a weak bolt of magic.");\r
-    \r
-               {\r
-                       int dice = 3 + ((plev - 1) / 5);\r
-                       int sides = 4;\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() - 10, GF_MISSILE, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("トラップ/ドア破壊", "Trap / Door Destruction");\r
-               if (desc) return _("隣接する罠と扉を破壊する。", "Destroys all traps in adjacent squares.");\r
-    \r
-               {\r
-                       int rad = 1;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               destroy_doors_touch();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("閃光", "Flash of Light");\r
-               if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");\r
-    \r
-               {\r
-                       int dice = 2;\r
-                       int sides = plev / 2;\r
-                       int rad = (plev / 10) + 1;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               lite_area(damroll(dice, sides), rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("混乱の手", "Touch of Confusion");\r
-               if (desc) return _("相手を混乱させる攻撃をできるようにする。", "Attempts to confuse the next monster that you hit.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!(p_ptr->special_attack & ATTACK_CONFUSE))\r
-                               {\r
-                                       msg_print(_("あなたの手は光り始めた。", "Your hands start glowing."));\r
-                                       p_ptr->special_attack |= ATTACK_CONFUSE;\r
-                                       p_ptr->redraw |= (PR_STATUS);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("魔力炸裂", "Mana Burst");\r
-               if (desc) return _("魔法の球を放つ。", "Fires a ball of magic.");\r
-    \r
-               {\r
-                       int dice = 3;\r
-                       int sides = 5;\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_MISSILE, dir, damroll(dice, sides) + base, rad);\r
-\r
-                               /*\r
-                                * Shouldn't actually use GF_MANA, as\r
-                                * it will destroy all items on the\r
-                                * floor\r
-                                */\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("ファイア・ボルト", "Fire Bolt");\r
-               if (desc) return _("炎のボルトもしくはビームを放つ。", "Fires a bolt or beam of fire.");\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_FIRE, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("力の拳", "Fist of Force");\r
-               if (desc) return _("ごく小さな分解の球を放つ。", "Fires a tiny ball of disintegration.");\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_ball(GF_DISINTEGRATE, dir, damroll(dice, sides), 0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("テレポート", "Teleport Self");\r
-               if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");\r
-    \r
-               {\r
-                       POSITION range = plev * 5;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               teleport_player(range, 0L);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("ワンダー", "Wonder");\r
-               if (desc) return _("モンスターにランダムな効果を与える。", "Fires something with random effects.");\r
-    \r
-               {\r
-                       if (info) return s_random;\r
-\r
-                       if (cast)\r
-                       {\r
-\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               cast_wonder(dir);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("カオス・ボルト", "Chaos Bolt");\r
-               if (desc) return _("カオスのボルトもしくはビームを放つ。", "Fires a bolt or ball of chaos.");\r
-    \r
-               {\r
-                       int dice = 10 + (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_CHAOS, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("ソニック・ブーム", "Sonic Boom");\r
-               if (desc) return _("自分を中心とした轟音の球を発生させる。", "Generates a ball of sound centered on you.");\r
-    \r
-               {\r
-                       HIT_POINT dam = 60 + plev;\r
-                       int rad = plev / 10 + 2;\r
-\r
-                       if (info) return info_damage(0, 0, dam/2);\r
-\r
-                       if (cast)\r
-                       {\r
-                               msg_print(_("ドーン!部屋が揺れた!", "BOOM! Shake the room!"));\r
-                               project(0, rad, p_ptr->y, p_ptr->x, dam, GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("破滅の矢", "Doom Bolt");\r
-               if (desc) return _("純粋な魔力のビームを放つ。", "Fires a beam of pure mana.");\r
-    \r
-               {\r
-                       int dice = 11 + (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_beam(GF_MANA, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("ファイア・ボール", "Fire Ball");\r
-               if (desc) return _("炎の球を放つ。", "Fires a ball of fire.");\r
-    \r
-               {\r
-                       HIT_POINT dam = plev + 55;\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_FIRE, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("テレポート・アウェイ", "Teleport Other");\r
-               if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");\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
-                               fire_beam(GF_AWAY_ALL, dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("破壊の言葉", "Word of Destruction");\r
-               if (desc) return _("周辺のアイテム、モンスター、地形を破壊する。", "Destroy everything in nearby area.");\r
-    \r
-               {\r
-                       int base = 12;\r
-                       int sides = 4;\r
-\r
-                       if (cast)\r
-                       {\r
-                               destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("ログルス発動", "Invoke Logrus");\r
-               if (desc) return _("巨大なカオスの球を放つ。", "Fires a huge ball of chaos.");\r
-    \r
-               {\r
-                       HIT_POINT dam = plev * 2 + 99;\r
-                       int rad = plev / 5;\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_CHAOS, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("他者変容", "Polymorph Other");\r
-               if (desc) return _("モンスター1体を変身させる。抵抗されると無効。", "Attempts to polymorph 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
-                               poly_monster(dir, plev);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("連鎖稲妻", "Chain Lightning");\r
-               if (desc) return _("全方向に対して電撃のビームを放つ。", "Fires lightning beams in all directions.");\r
-    \r
-               {\r
-                       int dice = 5 + plev / 10;\r
-                       int sides = 8;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               for (dir = 0; dir <= 9; dir++)\r
-                                       fire_beam(GF_ELEC, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("魔力封入", "Arcane Binding");\r
-               if (desc) return _("杖/魔法棒の充填回数を増やすか、充填中のロッドの充填時間を減らす。", "Recharges staffs, wands or rods.");\r
-    \r
-               {\r
-                       int power = 90;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!recharge(power)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("原子分解", "Disintegrate");\r
-               if (desc) return _("巨大な分解の球を放つ。", "Fires a huge ball of disintegration.");\r
-    \r
-               {\r
-                       HIT_POINT dam = plev + 70;\r
-                       int rad = 3 + plev / 40;\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_DISINTEGRATE, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("現実変容", "Alter Reality");\r
-               if (desc) return _("現在の階を再構成する。", "Recreates current dungeon level.");\r
-    \r
-               {\r
-                       int base = 15;\r
-                       int sides = 20;\r
-\r
-                       if (info) return info_delay(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               alter_reality();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("マジック・ロケット", "Magic Rocket");\r
-               if (desc) return _("ロケットを発射する。", "Fires a magic rocket.");\r
-    \r
-               {\r
-                       HIT_POINT dam = 120 + 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
-                               msg_print(_("ロケット発射!", "You launch a rocket!"));\r
-                               fire_rocket(GF_ROCKET, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("混沌の刃", "Chaos Branding");\r
-               if (desc) return _("武器にカオスの属性をつける。", "Makes current weapon a Chaotic weapon.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               brand_weapon(2);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("悪魔召喚", "Summon Demon");\r
-               if (desc) return _("悪魔を1体召喚する。", "Summons a demon.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               u32b flg = 0L;\r
-                               bool pet = !one_in_(3);\r
-\r
-                               if (pet) flg |= PM_FORCE_PET;\r
-                               else flg |= PM_NO_PET;\r
-                               if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;\r
-\r
-                               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_DEMON, flg))\r
-                               {\r
-                                       msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone."));\r
-                                       if (pet)\r
-                                       {\r
-                                               msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               msg_print(_("「卑しき者よ、我は汝の下僕にあらず! お前の魂を頂くぞ!」",\r
-                                                                       "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("重力光線", "Beam of Gravity");\r
-               if (desc) return _("重力のビームを放つ。", "Fires a beam of gravity.");\r
-    \r
-               {\r
-                       int dice = 9 + (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_beam(GF_GRAVITY, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("流星群", "Meteor Swarm");\r
-               if (desc) return _("自分の周辺に隕石を落とす。", "Makes meteor balls fall down to nearby random locations.");\r
-    \r
-               {\r
-                       HIT_POINT dam = plev * 2;\r
-                       int rad = 2;\r
-\r
-                       if (info) return info_multi_damage(dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               cast_meteor(dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("焔の一撃", "Flame Strike");\r
-               if (desc) return _("自分を中心とした超巨大な炎の球を発生させる。", "Generate a huge ball of fire centered on you.");\r
-    \r
-               {\r
-                       HIT_POINT dam = 300 + 3 * plev;\r
-                       int rad = 8;\r
-\r
-                       if (info) return info_damage(0, 0, dam/2);\r
-\r
-                       if (cast)\r
-                       {\r
-                               fire_ball(GF_FIRE, 0, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("混沌召来", "Call Chaos");\r
-               if (desc) return _("ランダムな属性の球やビームを発生させる。", "Generate random kind of balls or beams.");\r
-    \r
-               {\r
-                       if (info) return format("%s150 / 250", s_dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               call_chaos();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("自己変容", "Polymorph Self");\r
-               if (desc) return _("自分を変身させようとする。", "Polymorphs yourself.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_check(_("変身します。よろしいですか?", "You will polymorph yourself. Are you sure? "))) return NULL;\r
-                               do_poly_self();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("魔力の嵐", "Mana Storm");\r
-               if (desc) return _("非常に強力で巨大な純粋な魔力の球を放つ。", "Fires an extremely powerful huge ball of pure mana.");\r
-    \r
-               {\r
-                       HIT_POINT dam = 300 + plev * 4;\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_MANA, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("ログルスのブレス", "Breathe Logrus");\r
-               if (desc) return _("非常に強力なカオスの球を放つ。", "Fires an extremely powerful ball of chaos.");\r
-    \r
-               {\r
-                       HIT_POINT dam = p_ptr->chp;\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_CHAOS, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("虚無召来", "Call the Void");\r
-               if (desc) return _("自分に周囲に向かって、ロケット、純粋な魔力の球、放射性廃棄物の球を放つ。ただし、壁に隣接して使用すると広範囲を破壊する。", \r
-                       "Fires rockets, mana balls and nuclear waste balls in all directions each unless you are not adjacent to any walls. Otherwise *destroys* huge area.");\r
-    \r
-               {\r
-                       if (info) return format("%s3 * 175", s_dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               call_the_();\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\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
- * @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_trump_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
-       bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;\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 _("ショート・テレポート", "Phase Door");\r
-               if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");\r
-    \r
-               {\r
-                       POSITION range = 10;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               teleport_player(range, 0L);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("蜘蛛のカード", "Trump Spiders");\r
-               if (desc) return _("蜘蛛を召喚する。", "Summons spiders.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたは蜘蛛のカードに集中する...", "You concentrate on the trump of an spider..."));\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚された蜘蛛は怒っている!", "The summoned spiders get angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("シャッフル", "Shuffle");\r
-               if (desc) return _("カードの占いをする。", "Causes random effects.");\r
-    \r
-               {\r
-                       if (info) return s_random;\r
-\r
-                       if (cast)\r
-                       {\r
-                               cast_shuffle();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("フロア・リセット", "Reset Recall");\r
-               if (desc) return _("最深階を変更する。", "Resets the 'deepest' level for recall spell.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!reset_recall()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("テレポート", "Teleport");\r
-               if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");\r
-    \r
-               {\r
-                       POSITION range = plev * 4;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               teleport_player(range, 0L);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("感知のカード", "Trump Spying");\r
-               if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");\r
-    \r
-               {\r
-                       int base = 25;\r
-                       int sides = 30;\r
-\r
-                       if (info) return info_duration(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_tim_esp(randint1(sides) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("テレポート・モンスター", "Teleport Away");\r
-               if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");\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
-                               fire_beam(GF_AWAY_ALL, dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("動物のカード", "Trump Animals");\r
-               if (desc) return _("1体の動物を召喚する。", "Summons an animal.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);\r
-                               msg_print(_("あなたは動物のカードに集中する...", "You concentrate on the trump of an animal..."));\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚された動物は怒っている!", "The summoned animal gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("移動のカード", "Trump Reach");\r
-               if (desc) return _("アイテムを自分の足元へ移動させる。", "Pulls a distant item close to you.");\r
-    \r
-               {\r
-                       int weight = plev * 15;\r
-\r
-                       if (info) return info_weight(weight);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fetch(dir, weight, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("カミカゼのカード", "Trump Kamikaze");\r
-               if (desc) return _("複数の爆発するモンスターを召喚する。", "Summons monsters which explode by itself.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               int x, y;\r
-                               int type;\r
-\r
-                               if (cast)\r
-                               {\r
-                                       if (!target_set(TARGET_KILL)) return NULL;\r
-                                       x = target_col;\r
-                                       y = target_row;\r
-                               }\r
-                               else\r
-                               {\r
-                                       /* Summons near player when failed */\r
-                                       x = p_ptr->x;\r
-                                       y = p_ptr->y;\r
-                               }\r
-\r
-                               if (p_ptr->pclass == CLASS_BEASTMASTER)\r
-                                       type = SUMMON_KAMIKAZE_LIVING;\r
-                               else\r
-                                       type = SUMMON_KAMIKAZE;\r
-\r
-                               msg_print(_("あなたはカミカゼのカードに集中する...", "You concentrate on several trumps at once..."));\r
-                               if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("幻霊召喚", "Phantasmal Servant");\r
-               if (desc) return _("1体の幽霊を召喚する。", "Summons a ghost.");\r
-    \r
-               {\r
-                       /* Phantasmal Servant is not summoned as enemy when failed */\r
-                       if (cast)\r
-                       {\r
-                               int summon_lev = plev * 2 / 3 + randint1(plev / 2);\r
-\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))\r
-                               {\r
-                                       msg_print(_("御用でございますか、御主人様?", "'Your wish, master?'"));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("スピード・モンスター", "Haste Monster");\r
-               if (desc) return _("モンスター1体を加速させる。", "Hastes a monster.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               bool result;\r
-\r
-                               /* Temporary enable target_pet option */\r
-                               bool old_target_pet = target_pet;\r
-                               target_pet = TRUE;\r
-\r
-                               result = get_aim_dir(&dir);\r
-\r
-                               /* Restore target_pet option */\r
-                               target_pet = old_target_pet;\r
-\r
-                               if (!result) return NULL;\r
-\r
-                               speed_monster(dir, plev);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("テレポート・レベル", "Teleport Level");\r
-               if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;\r
-                               teleport_level(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("次元の扉", "Dimension Door");\r
-               if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleport to given location.");\r
-    \r
-               {\r
-                       POSITION range = plev / 2 + 10;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               msg_print(_("次元の扉が開いた。目的地を選んで下さい。", "You open a dimensional gate. Choose a destination."));\r
-                               if (!dimension_door()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("帰還の呪文", "Word of Recall");\r
-               if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",\r
-                       "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");\r
-    \r
-               {\r
-                       int base = 15;\r
-                       int sides = 20;\r
-\r
-                       if (info) return info_delay(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!word_of_recall()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("怪物追放", "Banish");\r
-               if (desc) return _("視界内の全てのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all monsters in sight away unless resisted.");\r
-    \r
-               {\r
-                       int power = plev * 4;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               banish_monsters(power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("位置交換のカード", "Swap Position");\r
-               if (desc) return _("1体のモンスターと位置を交換する。", "Swap positions of you and a monster.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               bool result;\r
-\r
-                               /* HACK -- No range limit */\r
-                               project_length = -1;\r
-\r
-                               result = get_aim_dir(&dir);\r
-\r
-                               /* Restore range to default */\r
-                               project_length = 0;\r
-\r
-                               if (!result) return NULL;\r
-\r
-                               teleport_swap(dir);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("アンデッドのカード", "Trump Undead");\r
-               if (desc) return _("1体のアンデッドを召喚する。", "Summons an undead monster.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたはアンデッドのカードに集中する...", "You concentrate on the trump of an undead creature..."));\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_UNDEAD, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚されたアンデッドは怒っている!", "The summoned undead creature gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("爬虫類のカード", "Trump Reptiles");\r
-               if (desc) return _("1体のヒドラを召喚する。", "Summons a hydra.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたは爬虫類のカードに集中する...", "You concentrate on the trump of a reptile..."));\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HYDRA, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚された爬虫類は怒っている!", "The summoned reptile gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("モンスターのカード", "Trump Monsters");\r
-               if (desc) return _("複数のモンスターを召喚する。", "Summons some monsters.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               int type;\r
-                               msg_print(_("あなたはモンスターのカードに集中する...", "You concentrate on several trumps at once..."));\r
-                               if (p_ptr->pclass == CLASS_BEASTMASTER)\r
-                                       type = SUMMON_LIVING;\r
-                               else\r
-                                       type = 0;\r
-\r
-                               if (trump_summoning((1 + (plev - 15)/ 10), !fail, p_ptr->y, p_ptr->x, 0, type, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));\r
-                                       }\r
-                               }\r
-\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("ハウンドのカード", "Trump Hounds");\r
-               if (desc) return _("1グループのハウンドを召喚する。", "Summons a group of hounds.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたはハウンドのカードに集中する...", "You concentrate on the trump of a hound..."));\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HOUND, PM_ALLOW_GROUP))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚されたハウンドは怒っている!", "The summoned hounds get angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("トランプの刃", "Trump Branding");\r
-               if (desc) return _("武器にトランプの属性をつける。", "Makes current weapon a Trump weapon.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               brand_weapon(5);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("人間トランプ", "Living Trump");\r
-               if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。", \r
-                       "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               int mutation;\r
-\r
-                               if (one_in_(7))\r
-                                       /* Teleport control */\r
-                                       mutation = 12;\r
-                               else\r
-                                       /* Random teleportation (uncontrolled) */\r
-                                       mutation = 77;\r
-\r
-                               /* Gain the mutation */\r
-                               if (gain_random_mutation(mutation))\r
-                               {\r
-                                       msg_print(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("サイバーデーモンのカード", "Trump Cyberdemon");\r
-               if (desc) return _("1体のサイバーデーモンを召喚する。", "Summons a cyber demon.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたはサイバーデーモンのカードに集中する...", "You concentrate on the trump of a Cyberdemon..."));\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_CYBER, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("予見のカード", "Trump Divination");\r
-               if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",\r
-                       "Detects all monsters, traps, doors, stairs, treasures and items 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_all(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("知識のカード", "Trump Lore");\r
-               if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!identify_fully(FALSE)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("回復モンスター", "Heal Monster");\r
-               if (desc) return _("モンスター1体の体力を回復させる。", "Heal a monster.");\r
-    \r
-               {\r
-                       int heal = plev * 10 + 200;\r
-\r
-                       if (info) return info_heal(0, 0, heal);\r
-\r
-                       if (cast)\r
-                       {\r
-                               bool result;\r
-\r
-                               /* Temporary enable target_pet option */\r
-                               bool old_target_pet = target_pet;\r
-                               target_pet = TRUE;\r
-\r
-                               result = get_aim_dir(&dir);\r
-\r
-                               /* Restore target_pet option */\r
-                               target_pet = old_target_pet;\r
-\r
-                               if (!result) return NULL;\r
-\r
-                               heal_monster(dir, heal);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("ドラゴンのカード", "Trump Dragon");\r
-               if (desc) return _("1体のドラゴンを召喚する。", "Summons a dragon.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたはドラゴンのカードに集中する...", "You concentrate on the trump of a dragon..."));\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DRAGON, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚されたドラゴンは怒っている!", "The summoned dragon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("隕石のカード", "Trump Meteor");\r
-               if (desc) return _("自分の周辺に隕石を落とす。", "Makes meteor balls fall down to nearby random locations.");\r
-    \r
-               {\r
-                       HIT_POINT dam = plev * 2;\r
-                       int rad = 2;\r
-\r
-                       if (info) return info_multi_damage(dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               cast_meteor(dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("デーモンのカード", "Trump Demon");\r
-               if (desc) return _("1体の悪魔を召喚する。", "Summons a demon.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたはデーモンのカードに集中する...", "You concentrate on the trump of a demon..."));\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DEMON, 0L))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚されたデーモンは怒っている!", "The summoned demon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("地獄のカード", "Trump Greater Undead");\r
-               if (desc) return _("1体の上級アンデッドを召喚する。", "Summons a greater undead.");\r
-    \r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("あなたは強力なアンデッドのカードに集中する...", "You concentrate on the trump of a greater undead being..."));\r
-                               /* May allow unique depend on level and dice roll */\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead creature gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("古代ドラゴンのカード", "Trump Ancient Dragon");\r
-               if (desc) return _("1体の古代ドラゴンを召喚する。", "Summons an ancient dragon.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               int type;\r
-\r
-                               if (p_ptr->pclass == CLASS_BEASTMASTER)\r
-                                       type = SUMMON_HI_DRAGON_LIVING;\r
-                               else\r
-                                       type = SUMMON_HI_DRAGON;\r
-\r
-                               msg_print(_("あなたは古代ドラゴンのカードに集中する...", "You concentrate on the trump of an ancient dragon..."));\r
-                               /* May allow unique depend on level and dice roll */\r
-                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, PM_ALLOW_UNIQUE))\r
-                               {\r
-                                       if (fail)\r
-                                       {\r
-                                               msg_print(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\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_arcane_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
-       int dir;\r
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("電撃", "Zap");\r
-               if (desc) return _("電撃のボルトもしくはビームを放つ。", "Fires a bolt or beam of lightning.");\r
-    \r
-               {\r
-                       int dice = 3 + (plev - 1) / 5;\r
-                       int sides = 3;\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() - 10, GF_ELEC, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("魔法の施錠", "Wizard Lock");\r
-               if (desc) return _("扉に鍵をかける。", "Locks a door.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               wizard_lock(dir);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("透明体感知", "Detect Invisibility");\r
-               if (desc) return _("近くの透明なモンスターを感知する。", "Detects all invisible 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_invis(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("モンスター感知", "Detect Monsters");\r
-               if (desc) return _("近くの全ての見えるモンスターを感知する。", "Detects all monsters in your vicinity unless invisible.");\r
-    \r
-               {\r
-                       int rad = DETECT_RAD_DEFAULT;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               detect_monsters_normal(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("ショート・テレポート", "Blink");\r
-               if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");\r
-    \r
-               {\r
-                       POSITION range = 10;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               teleport_player(range, 0L);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("ライト・エリア", "Light Area");\r
-               if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");\r
-    \r
-               {\r
-                       int dice = 2;\r
-                       int sides = plev / 2;\r
-                       int rad = plev / 10 + 1;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               lite_area(damroll(dice, sides), rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("罠と扉 破壊", "Trap & Door Destruction");\r
-               if (desc) return _("一直線上の全ての罠と扉を破壊する。", "Fires a beam which destroy traps and doors.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               destroy_door(dir);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("軽傷の治癒", "Cure Light Wounds");\r
-               if (desc) return _("怪我と体力を少し回復させる。", "Heals cut and HP a little.");\r
-    \r
-               {\r
-                       int dice = 2;\r
-                       int sides = 8;\r
-\r
-                       if (info) return info_heal(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               hp_player(damroll(dice, sides));\r
-                               set_cut(p_ptr->cut - 10);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("罠と扉 感知", "Detect Doors & Traps");\r
-               if (desc) return _("近くの全ての罠と扉と階段を感知する。", "Detects traps, doors, and stairs 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_traps(rad, TRUE);\r
-                               detect_doors(rad);\r
-                               detect_stairs(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("燃素", "Phlogiston");\r
-               if (desc) return _("光源に燃料を補給する。", "Adds more turns of light to a lantern or torch.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               phlogiston();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("財宝感知", "Detect Treasure");\r
-               if (desc) return _("近くの財宝を感知する。", "Detects all treasures 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_treasure(rad);\r
-                               detect_objects_gold(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("魔法 感知", "Detect Enchantment");\r
-               if (desc) return _("近くの魔法がかかったアイテムを感知する。", "Detects all magical items 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_objects_magic(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("アイテム感知", "Detect Objects");\r
-               if (desc) return _("近くの全てのアイテムを感知する。", "Detects all items 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_objects_normal(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("解毒", "Cure Poison");\r
-               if (desc) return _("毒を体内から完全に取り除く。", "Cures poison status.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               set_poisoned(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("耐冷", "Resist Cold");\r
-               if (desc) return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。", "Gives resistance to cold. 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_cold(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("耐火", "Resist Fire");\r
-               if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。", \r
-                       "Gives resistance to fire. 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_fire(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("耐電", "Resist Lightning");\r
-               if (desc) return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。", \r
-                       "Gives resistance to electricity. 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_elec(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("耐酸", "Resist Acid");\r
-               if (desc) return _("一定時間、酸への耐性を得る。装備による耐性に累積する。", \r
-                       "Gives resistance to acid. 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_acid(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("重傷の治癒", "Cure Medium Wounds");\r
-               if (desc) return _("怪我と体力を中程度回復させる。", "Heals cut and HP more.");\r
-    \r
-               {\r
-                       int dice = 4;\r
-                       int sides = 8;\r
-\r
-                       if (info) return info_heal(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               hp_player(damroll(dice, sides));\r
-                               set_cut((p_ptr->cut / 2) - 50);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("テレポート", "Teleport");\r
-               if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");\r
-    \r
-               {\r
-                       POSITION range = plev * 5;\r
-\r
-                       if (info) return info_range(range);\r
-\r
-                       if (cast)\r
-                       {\r
-                               teleport_player(range, 0L);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("鑑定", "Identify");\r
-               if (desc) return _("アイテムを識別する。", "Identifies an item.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!ident_spell(FALSE)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("岩石溶解", "Stone to Mud");\r
-               if (desc) return _("壁を溶かして床にする。", "Turns one rock square to mud.");\r
-    \r
-               {\r
-                       int dice = 1;\r
-                       int sides = 30;\r
-                       int base = 20;\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
-                               wall_to_mud(dir, 20 + randint1(30));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("閃光", "Ray of Light");\r
-               if (desc) return _("光線を放つ。光りを嫌うモンスターに効果がある。", "Fires a beam of light which damages to light-sensitive monsters.");\r
-    \r
-               {\r
-                       int dice = 6;\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
-                               msg_print(_("光線が放たれた。", "A line of light appears."));\r
-                               lite_line(dir, damroll(6, 8));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("空腹充足", "Satisfy Hunger");\r
-               if (desc) return _("満腹にする。", "Satisfies hunger.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               set_food(PY_FOOD_MAX - 1);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("透明視認", "See Invisible");\r
-               if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");\r
-    \r
-               {\r
-                       int base = 24;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_tim_invis(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("エレメンタル召喚", "Conjure Elemental");\r
-               if (desc) return _("1体のエレメンタルを召喚する。", "Summons an elemental.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))\r
-                               {\r
-                                       msg_print(_("エレメンタルは現れなかった。", "No Elementals arrive."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("テレポート・レベル", "Teleport Level");\r
-               if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;\r
-                               teleport_level(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("テレポート・モンスター", "Teleport Away");\r
-               if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");\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
-                               fire_beam(GF_AWAY_ALL, dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("元素の球", "Elemental Ball");\r
-               if (desc) return _("炎、電撃、冷気、酸のどれかの球を放つ。", "Fires a ball of some elements.");\r
-    \r
-               {\r
-                       HIT_POINT dam = 75 + plev;\r
-                       int rad = 2;\r
-\r
-                       if (info) return info_damage(0, 0, dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               int type;\r
-\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               switch (randint1(4))\r
-                               {\r
-                                       case 1:  type = GF_FIRE;break;\r
-                                       case 2:  type = GF_ELEC;break;\r
-                                       case 3:  type = GF_COLD;break;\r
-                                       default: type = GF_ACID;break;\r
-                               }\r
-\r
-                               fire_ball(type, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("全感知", "Detection");\r
-               if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。", \r
-                       "Detects all monsters, traps, doors, stairs, treasures and items 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_all(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("帰還の呪文", "Word of Recall");\r
-               if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。", \r
-                       "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");\r
-    \r
-               {\r
-                       int base = 15;\r
-                       int sides = 20;\r
-\r
-                       if (info) return info_delay(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!word_of_recall()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("千里眼", "Clairvoyance");\r
-               if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。さらに、一定時間テレパシー能力を得る。", \r
-                       "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");\r
-    \r
-               {\r
-                       int base = 25;\r
-                       int sides = 30;\r
-\r
-                       if (info) return info_duration(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               chg_virtue(V_KNOWLEDGE, 1);\r
-                               chg_virtue(V_ENLIGHTEN, 1);\r
-\r
-                               wiz_lite(FALSE);\r
-\r
-                               if (!p_ptr->telepathy)\r
-                               {\r
-                                       set_tim_esp(randint1(sides) + base, FALSE);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\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_craft_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
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("赤外線視力", "Infravision");\r
-               if (desc) return _("一定時間、赤外線視力が増強される。", "Gives infravision for a while.");\r
-    \r
-               {\r
-                       int base = 100;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_tim_infra(base + randint1(base), FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("回復力強化", "Regeneration");\r
-               if (desc) return _("一定時間、回復力が増強される。", "Gives regeneration ability for a while.");\r
-    \r
-               {\r
-                       int base = 80;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_tim_regen(base + randint1(base), FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("空腹充足", "Satisfy Hunger");\r
-               if (desc) return _("満腹になる。", "Satisfies hunger.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               set_food(PY_FOOD_MAX - 1);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("耐冷気", "Resist Cold");\r
-               if (desc) return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。", \r
-                       "Gives resistance to cold. 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_cold(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("耐火炎", "Resist Fire");\r
-               if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。", \r
-                       "Gives resistance to fire. 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_fire(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("士気高揚", "Heroism");\r
-               if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");\r
-    \r
-               {\r
-                       int base = 25;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_hero(randint1(base) + base, FALSE);\r
-                               hp_player(10);\r
-                               set_afraid(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("耐電撃", "Resist Lightning");\r
-               if (desc) return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。",\r
-                       "Gives resistance to electricity. 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_elec(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("耐酸", "Resist Acid");\r
-               if (desc) return _("一定時間、酸への耐性を得る。装備による耐性に累積する。",\r
-                       "Gives resistance to acid. 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_acid(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("透明視認", "See Invisibility");\r
-               if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");\r
-    \r
-               {\r
-                       int base = 24;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_tim_invis(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("解呪", "Remove Curse");\r
-               if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (remove_curse())\r
-                               {\r
-                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\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 11:\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 12:\r
-               if (name) return _("自己分析", "Self Knowledge");\r
-               if (desc) return _("現在の自分の状態を完全に知る。",\r
-                       "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               self_knowledge();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("対邪悪結界", "Protection from Evil");\r
-               if (desc) return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack.");\r
-    \r
-               {\r
-                       int base = 3 * plev;\r
-                       int sides = 25;\r
-\r
-                       if (info) return info_duration(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_protevil(randint1(sides) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("癒し", "Cure");\r
-               if (desc) return _("毒、朦朧状態、負傷を全快させ、幻覚を直す。", "Heals poison, stun, cut and hallucination completely.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               set_poisoned(0);\r
-                               set_stun(0);\r
-                               set_cut(0);\r
-                               set_image(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("魔法剣", "Mana Branding");\r
-               if (desc) return _("一定時間、武器に冷気、炎、電撃、酸、毒のいずれかの属性をつける。武器を持たないと使えない。",\r
-                       "Makes current weapon some elemental branded. You must wield weapons.");\r
-    \r
-               {\r
-                       int base = plev / 2;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!choose_ele_attack()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("テレパシー", "Telepathy");\r
-               if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");\r
-    \r
-               {\r
-                       int base = 25;\r
-                       int sides = 30;\r
-\r
-                       if (info) return info_duration(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_tim_esp(randint1(sides) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("肌石化", "Stone Skin");\r
-               if (desc) return _("一定時間、ACを上昇させる。", "Gives bonus to AC for a while.");\r
-    \r
-               {\r
-                       int base = 30;\r
-                       int sides = 20;\r
-\r
-                       if (info) return info_duration(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_shield(randint1(sides) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("全耐性", "Resistance");\r
-               if (desc) return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。", \r
-                       "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to which from equipment for more powerful resistances.");\r
-    \r
-               {\r
-                       int base = 20;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_oppose_acid(randint1(base) + base, FALSE);\r
-                               set_oppose_elec(randint1(base) + base, FALSE);\r
-                               set_oppose_fire(randint1(base) + base, FALSE);\r
-                               set_oppose_cold(randint1(base) + base, FALSE);\r
-                               set_oppose_pois(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("スピード", "Haste Self");\r
-               if (desc) return _("一定時間、加速する。", "Hastes you for a while.");\r
-    \r
-               {\r
-                       int base = plev;\r
-                       int sides = 20 + plev;\r
-\r
-                       if (info) return info_duration(base, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_fast(randint1(sides) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("壁抜け", "Walk through Wall");\r
-               if (desc) return _("一定時間、半物質化し壁を通り抜けられるようになる。", "Gives ability to pass walls for a while.");\r
-    \r
-               {\r
-                       int base = plev / 2;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_kabenuke(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("盾磨き", "Polish Shield");\r
-               if (desc) return _("盾に反射の属性をつける。", "Makes a shield a shield of reflection.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               pulish_shield();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("ゴーレム製造", "Create Golem");\r
-               if (desc) return _("1体のゴーレムを製造する。", "Creates a golem.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_GOLEM, PM_FORCE_PET))\r
-                               {\r
-                                       msg_print(_("ゴーレムを作った。", "You make a golem."));\r
-                               }\r
-                               else\r
-                               {\r
-                                       msg_print(_("うまくゴーレムを作れなかった。", "No Golems arrive."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("魔法の鎧", "Magical armor");\r
-               if (desc) return _("一定時間、魔法防御力とACが上がり、混乱と盲目の耐性、反射能力、麻痺知らず、浮遊を得る。",\r
-                       "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.");\r
-    \r
-               {\r
-                       int base = 20;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_magicdef(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("装備無力化", "Remove Enchantment");\r
-               if (desc) return _("武器・防具にかけられたあらゆる魔力を完全に解除する。", "Removes all magics completely from any weapon or armor.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!mundane_spell(TRUE)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("呪い粉砕", "Remove All Curse");\r
-               if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (remove_all_curse())\r
-                               {\r
-                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("完全なる知識", "Knowledge True");\r
-               if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!identify_fully(FALSE)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("武器強化", "Enchant Weapon");\r
-               if (desc) return _("武器の命中率修正とダメージ修正を強化する。", "Attempts to increase +to-hit, +to-dam of a weapon.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!enchant_spell(randint0(4) + 1, randint0(4) + 1, 0)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("防具強化", "Enchant Armor");\r
-               if (desc) return _("鎧の防御修正を強化する。", "Attempts to increase +AC of an armor.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!enchant_spell(0, 0, randint0(3) + 2)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("武器属性付与", "Brand Weapon");\r
-               if (desc) return _("武器にランダムに属性をつける。", "Makes current weapon a random ego weapon.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               brand_weapon(randint0(18));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("人間トランプ", "Living Trump");\r
-               if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。",\r
-                       "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");\r
-    \r
-               {\r
-                       if (cast)\r
-                       {\r
-                               int mutation;\r
-\r
-                               if (one_in_(7))\r
-                                       /* Teleport control */\r
-                                       mutation = 12;\r
-                               else\r
-                                       /* Random teleportation (uncontrolled) */\r
-                                       mutation = 77;\r
-\r
-                               /* Gain the mutation */\r
-                               if (gain_random_mutation(mutation))\r
-                               {\r
-                                       msg_print(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("属性への免疫", "Immunity");\r
-               if (desc) return _("一定時間、冷気、炎、電撃、酸のいずれかに対する免疫を得る。",\r
-                       "Gives an immunity to fire, cold, electricity or acid for a while.");\r
-    \r
-               {\r
-                       int base = 13;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!choose_ele_immune(base + randint1(base))) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\r
-}\r
-\r
-/*!\r
  * @brief 悪魔領域魔法の各処理を行う\r
  * @param spell 魔法ID\r
  * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r