OSDN Git Service

Implementing MCI command for BGM playing.
[hengband/hengband.git] / src / do-spell.c
index f0c5a76..059919d 100644 (file)
@@ -1,12 +1,22 @@
-/* File: do-spell.c */
-
-/* Purpose: Do everything for each spell */
+/*!
+    @file do-spell.c
+    @brief ËâË¡¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Èȯư / Purpose: Do everything for each spell
+    @date 2013/12/31
+    @author
+    2013 Deskull rearranged comment for Doxygen.
+ */
 
 #include "angband.h"
 
 
-/*
- * Generate dice info string such as "foo 2d10"
+/*!
+ * @brief
+ * ËâË¡¤Î¸ú²Ì¤ò¡Ö¥­¥ã¥×¥·¥ç¥ó:¥À¥¤¥¹¡ÜÄê¿ôÃ͡פΥե©¡¼¥Þ¥Ã¥È¤Ç½ÐÎϤ¹¤ë / Generate dice info string such as "foo 2d10"
+ * @param str ¥­¥ã¥×¥·¥ç¥ó
+ * @param dice ¥À¥¤¥¹¿ô
+ * @param sides ¥À¥¤¥¹ÌÜ
+ * @param base ¸ÇÄêÃÍ
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
  */
 static cptr info_string_dice(cptr str, int dice, int sides, int base)
 {
@@ -24,8 +34,12 @@ static cptr info_string_dice(cptr str, int dice, int sides, int base)
 }
 
 
-/*
- * Generate damage-dice info string such as "dam 2d10"
+/*!
+ * @brief ËâË¡¤Ë¤è¤ë¥À¥á¡¼¥¸¤ò½ÐÎϤ¹¤ë / Generate damage-dice info string such as "dam 2d10"
+ * @param dice ¥À¥¤¥¹¿ô
+ * @param sides ¥À¥¤¥¹ÌÜ
+ * @param base ¸ÇÄêÃÍ
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
  */
 static cptr info_damage(int dice, int sides, int base)
 {
@@ -36,9 +50,11 @@ static cptr info_damage(int dice, int sides, int base)
 #endif
 }
 
-
-/*
- * Generate duration info string such as "dur 20+1d20"
+/*!
+ * @brief ËâË¡¤Î¸ú²Ì»þ´Ö¤ò½ÐÎϤ¹¤ë / Generate duration info string such as "dur 20+1d20"
+ * @param base ¸ÇÄêÃÍ
+ * @param sides ¥À¥¤¥¹ÌÜ
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
  */
 static cptr info_duration(int base, int sides)
 {
@@ -49,9 +65,10 @@ static cptr info_duration(int base, int sides)
 #endif
 }
 
-
-/*
- * Generate range info string such as "range 5"
+/*!
+ * @brief ËâË¡¤Î¸ú²ÌÈϰϤò½ÐÎϤ¹¤ë / Generate range info string such as "range 5"
+ * @param range ¸ú²ÌÈÏ°Ï
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
  */
 static cptr info_range(int range)
 {
@@ -62,9 +79,12 @@ static cptr info_range(int range)
 #endif
 }
 
-
-/*
- * Generate heal info string such as "heal 2d8"
+/*!
+ * @brief ËâË¡¤Ë¤è¤ë²óÉüÎ̤ò½ÐÎϤ¹¤ë / Generate heal info string such as "heal 2d8"
+ * @param dice ¥À¥¤¥¹¿ô
+ * @param sides ¥À¥¤¥¹ÌÜ
+ * @param base ¸ÇÄêÃÍ
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
  */
 static cptr info_heal(int dice, int sides, int base)
 {
@@ -75,9 +95,11 @@ static cptr info_heal(int dice, int sides, int base)
 #endif
 }
 
-
-/*
- * Generate delay info string such as "delay 15+1d15"
+/*!
+ * @brief ËâË¡¸ú²Ìȯư¤Þ¤Ç¤ÎÃٱ䥿¡¼¥ó¤ò½ÐÎϤ¹¤ë / Generate delay info string such as "delay 15+1d15"
+ * @param base ¸ÇÄêÃÍ
+ * @param sides ¥À¥¤¥¹ÌÜ
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
  */
 static cptr info_delay(int base, int sides)
 {
@@ -89,8 +111,10 @@ static cptr info_delay(int base, int sides)
 }
 
 
-/*
- * Generate multiple-damage info string such as "dam 25 each"
+/*!
+ * @brief ËâË¡¤Ë¤è¤ë¥À¥á¡¼¥¸¤ò½ÐÎϤ¹¤ë(¸ÇÄêÃÍ¡õÊ£¿ô²ó½èÍý) / Generate multiple-damage info string such as "dam 25 each"
+ * @param dam ¸ÇÄêÃÍ
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
  */
 static cptr info_multi_damage(int dam)
 {
@@ -102,8 +126,11 @@ static cptr info_multi_damage(int dam)
 }
 
 
-/*
- * Generate multiple-damage-dice info string such as "dam 5d2 each"
+/*!
+ * @brief ËâË¡¤Ë¤è¤ë¥À¥á¡¼¥¸¤ò½ÐÎϤ¹¤ë(¥À¥¤¥¹¤Î¤ß¡õÊ£¿ô²ó½èÍý) / Generate multiple-damage-dice info string such as "dam 5d2 each"
+ * @param dice ¥À¥¤¥¹¿ô
+ * @param sides ¥À¥¤¥¹ÌÜ
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
  */
 static cptr info_multi_damage_dice(int dice, int sides)
 {
@@ -114,9 +141,10 @@ static cptr info_multi_damage_dice(int dice, int sides)
 #endif
 }
 
-
-/*
- * Generate power info string such as "power 100"
+/*!
+ * @brief ËâË¡¤Ë¤è¤ë°ìÈÌŪ¤Ê¸úÎÏÃͤò½ÐÎϤ¹¤ë¡Ê¸ÇÄêÃÍ¡Ë / Generate power info string such as "power 100"
+ * @param power ¸ÇÄêÃÍ
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
  */
 static cptr info_power(int power)
 {
@@ -128,6 +156,12 @@ static cptr info_power(int power)
 }
 
 
+/*!
+ * @brief ËâË¡¤Ë¤è¤ë°ìÈÌŪ¤Ê¸úÎÏÃͤò½ÐÎϤ¹¤ë¡Ê¥À¥¤¥¹ÃÍ¡Ë / Generate power info string such as "power 100"
+ * @param dice ¥À¥¤¥¹¿ô
+ * @param sides ¥À¥¤¥¹ÌÜ
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
+ */
 /*
  * Generate power info string such as "power 1d100"
  */
@@ -141,8 +175,10 @@ static cptr info_power_dice(int dice, int sides)
 }
 
 
-/*
- * Generate radius info string such as "rad 100"
+/*!
+ * @brief ËâË¡¤Î¸ú²ÌȾ·Â¤ò½ÐÎϤ¹¤ë / Generate radius info string such as "rad 100"
+ * @param rad ¸ú²ÌȾ·Â
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
  */
 static cptr info_radius(int rad)
 {
@@ -154,21 +190,27 @@ static cptr info_radius(int rad)
 }
 
 
-/*
- * Generate weight info string such as "max wgt 15"
+/*!
+ * @brief ËâË¡¸ú²Ì¤Î¸Â³¦½ÅÎ̤ò½ÐÎϤ¹¤ë / Generate weight info string such as "max wgt 15"
+ * @param weight ºÇÂç½ÅÎÌ
+ * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
  */
 static cptr info_weight(int weight)
 {
 #ifdef JP
-       return format("ºÇÂç½ÅÎÌ:%d.%dkg", lbtokg1(weight/10), lbtokg2(weight/10));
+       return format("ºÇÂç½ÅÎÌ:%d.%dkg", lbtokg1(weight), lbtokg2(weight));
 #else
        return format("max wgt %d", weight/10);
 #endif
 }
 
 
-/*
- * Prepare standard probability to become beam for fire_bolt_or_beam()
+/*!
+ * @brief °ìÉô¥Ü¥ë¥ÈËâË¡¤Î¥Ó¡¼¥à²½³ÎΨ¤ò»»½Ð¤¹¤ë / Prepare standard probability to become beam for fire_bolt_or_beam()
+ * @return ¥Ó¡¼¥à²½³ÎΨ(%)
+ * @details
+ * ¥Ï¡¼¥É¥³¡¼¥Æ¥£¥ó¥°¤Ë¤è¤ë¼ÂÁõ¤¬¹Ô¤ï¤ì¤Æ¤¤¤ë¡£
+ * ¥á¥¤¥¸¤Ï(¥ì¥Ù¥ë)%¡¢¥Ï¥¤¥á¥¤¥¸¡¢¥¹¥Ú¥ë¥Þ¥¹¥¿¡¼¤Ï(¥ì¥Ù¥ë)%¡¢¤½¤ì°Ê³°¤Î¿¦¶È¤Ï(¥ì¥Ù¥ë/2)%
  */
 static int beam_chance(void)
 {
@@ -180,9 +222,16 @@ static int beam_chance(void)
        return p_ptr->lev / 2;
 }
 
-
-/*
- * Handle summoning and failure of trump spells
+/*!
+ * @brief ¥È¥é¥ó¥×ËâË¡Æȼ«¤Î¾¤´­½èÍý¤ò¹Ô¤¦ / Handle summoning and failure of trump spells
+ * @param num summon_specific()´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹²ó¿ô
+ * @param pet ¥Ú¥Ã¥È²½¤È¤·¤Æ¾¤´­¤µ¤ì¤ë¤«Èݤ«
+ * @param y ¾¤´­°ÌÃÖ¤ÎyºÂɸ
+ * @param x ¾¤´­°ÌÃÖ¤ÎxºÂɸ
+ * @param lev ¾¤´­¥ì¥Ù¥ë
+ * @param type ¾¤´­¾ò·ïID
+ * @param mode ¥â¥ó¥¹¥¿¡¼À¸À®¾ò·ï¥Õ¥é¥°
+ * @return ¥â¥ó¥¹¥¿¡¼¤¬¡ÊŨÂФâ´Þ¤á¤Æ¡Ë¾¤´Ô¤µ¤ì¤¿¤Ê¤é¤ÐTRUE¤òÊÖ¤¹¡£
  */
 static bool trump_summoning(int num, bool pet, int y, int x, int lev, int type, u32b mode)
 {
@@ -239,11 +288,15 @@ static bool trump_summoning(int num, bool pet, int y, int x, int lev, int type,
 }
 
 
-/*
- * This spell should become more useful (more controlled) as the
- * player gains experience levels.  Thus, add 1/5 of the player's
- * level to the die roll.  This eliminates the worst effects later on,
- * while keeping the results quite random.  It also allows some potent
+/*!
+ * @brief ¡Ö¥ï¥ó¥À¡¼¡×¤Î¥é¥ó¥À¥à¤Ê¸ú²Ì¤ò·èÄꤷ¤Æ½èÍý¤¹¤ë¡£
+ * @param dir Êý¸þID
+ * @return ¤Ê¤·
+ * @details
+ * This spell should become more useful (more controlled) as the\n
+ * player gains experience levels.  Thus, add 1/5 of the player's\n
+ * level to the die roll.  This eliminates the worst effects later on,\n
+ * while keeping the results quite random.  It also allows some potent\n
  * effects only at high level.
  */
 static void cast_wonder(int dir)
@@ -277,15 +330,15 @@ static void cast_wonder(int dir)
        }
 
        if (die < 8) clone_monster(dir);
-       else if (die < 14) speed_monster(dir);
+       else if (die < 14) speed_monster(dir, plev);
        else if (die < 26) heal_monster(dir, damroll(4, 6));
-       else if (die < 31) poly_monster(dir);
+       else if (die < 31) poly_monster(dir, plev);
        else if (die < 36)
                fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir,
                                  damroll(3 + ((plev - 1) / 5), 4));
        else if (die < 41) confuse_monster(dir, plev);
        else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
-       else if (die < 51) (void)lite_line(dir);
+       else if (die < 51) (void)lite_line(dir, damroll(6, 8));
        else if (die < 56)
                fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir,
                                  damroll(3 + ((plev - 5) / 4), 8));
@@ -320,13 +373,18 @@ static void cast_wonder(int dir)
        else /* RARE */
        {
                dispel_monsters(150);
-               slow_monsters();
-               sleep_monsters();
+               slow_monsters(plev);
+               sleep_monsters(plev);
                hp_player(300);
        }
 }
 
 
+/*!
+ * @brief ¡Ö°­Î´­¡×¤Î¥é¥ó¥À¥à¤Ê¸ú²Ì¤ò·èÄꤷ¤Æ½èÍý¤¹¤ë¡£
+ * @param dir Êý¸þID
+ * @return ¤Ê¤·
+ */
 static void cast_invoke_spirits(int dir)
 {
        int plev = p_ptr->lev;
@@ -396,7 +454,7 @@ static void cast_invoke_spirits(int dir)
        }
        else if (die < 31)
        {
-               poly_monster(dir);
+               poly_monster(dir, plev);
        }
        else if (die < 36)
        {
@@ -413,7 +471,7 @@ static void cast_invoke_spirits(int dir)
        }
        else if (die < 51)
        {
-               (void)lite_line(dir);
+               (void)lite_line(dir, damroll(6, 8));
        }
        else if (die < 56)
        {
@@ -478,8 +536,8 @@ static void cast_invoke_spirits(int dir)
        else
        { /* RARE */
                dispel_monsters(150);
-               slow_monsters();
-               sleep_monsters();
+               slow_monsters(plev);
+               sleep_monsters(plev);
                hp_player(300);
        }
 
@@ -493,7 +551,11 @@ static void cast_invoke_spirits(int dir)
        }
 }
 
-
+/*!
+ * @brief ¥«¥ª¥¹Åª¸ú²Ì¤¢¤ë¤¤¤ÏµÚ¤Ó¥·¥ã¥Ã¥Õ¥ë¤Î¡Ö±¿Ì¿¤ÎÎء׸ú²Ì¤ò°ú¿ô´ð½à¤Ë½èÍý¤¹¤ë¡£
+ * @param spell ´ð½à¤È¤Ê¤ë°ú¿ôID
+ * @return ¤Ê¤·
+ */
 static void wild_magic(int spell)
 {
        int counter = 0;
@@ -507,16 +569,16 @@ static void wild_magic(int spell)
        case 1:
        case 2:
        case 3:
-               teleport_player(10, TRUE);
+               teleport_player(10, TELEPORT_PASSIVE);
                break;
        case 4:
        case 5:
        case 6:
-               teleport_player(100, TRUE);
+               teleport_player(100, TELEPORT_PASSIVE);
                break;
        case 7:
        case 8:
-               teleport_player(200, TRUE);
+               teleport_player(200, TELEPORT_PASSIVE);
                break;
        case 9:
        case 10:
@@ -592,7 +654,10 @@ static void wild_magic(int spell)
        }
 }
 
-
+/*!
+ * @brief ¥È¥é¥ó¥×Îΰè¤Î¡Ö¥·¥ã¥Ã¥Õ¥ë¡×¤Î¸ú²Ì¤ò¥é¥ó¥À¥à¤Ë·è¤á¤Æ½èÍý¤¹¤ë¡£
+ * @return ¤Ê¤·
+ */
 static void cast_shuffle(void)
 {
        int plev = p_ptr->lev;
@@ -722,7 +787,7 @@ static void cast_shuffle(void)
                msg_print("It's a teleport trump card.");
 #endif
 
-               teleport_player(10, TRUE);
+               teleport_player(10, TELEPORT_PASSIVE);
        }
        else if (die < 42)
        {
@@ -742,7 +807,7 @@ static void cast_shuffle(void)
                msg_print("It's a teleport trump card.");
 #endif
 
-               teleport_player(100, TRUE);
+               teleport_player(100, TELEPORT_PASSIVE);
        }
        else if (die < 52)
        {
@@ -752,7 +817,7 @@ static void cast_shuffle(void)
                msg_print("It's a teleport trump card.");
 #endif
 
-               teleport_player(200, TRUE);
+               teleport_player(200, TELEPORT_PASSIVE);
        }
        else if (die < 60)
        {
@@ -902,9 +967,12 @@ static void cast_shuffle(void)
        }
 }
 
-
-/*
- * Drop 10+1d10 meteor ball at random places near the player
+/*!
+ * @brief ¥«¥ª¥¹ËâË¡¡ÖήÀ±·²¡×¤Î½èÍý¤È¤·¤Æ¥×¥ì¥¤¥ä¡¼¤òÃæ¿´¤Ëð¨ÀÐÍî²¼½èÍý¤ò10+1d10²ó·«¤êÊÖ¤¹¡£
+ * / Drop 10+1d10 meteor ball at random places near the player
+ * @param dam ¥À¥á¡¼¥¸
+ * @param rad ¸úÎϤÎȾ·Â
+ * @return ¤Ê¤·
  */
 static void cast_meteor(int dam, int rad)
 {
@@ -931,7 +999,8 @@ static void cast_meteor(int dam, int rad)
 
                        if (d >= 9) continue;
 
-                       if (!in_bounds(y, x) || !projectable(py, px, y, x)) continue;
+                       if (!in_bounds(y, x) || !projectable(py, px, y, x)
+                           || !cave_have_flag_bold(y, x, FF_PROJECT)) continue;
 
                        /* Valid position */
                        break;
@@ -944,8 +1013,11 @@ static void cast_meteor(int dam, int rad)
 }
 
 
-/*
- * Drop 10+1d10 disintegration ball at random places near the target
+/*!
+ * @brief Ç˼ÙËâË¡¡Ö¿À¤ÎÅܤê¡×¤Î½èÍý¤È¤·¤Æ¥¿¡¼¥²¥Ã¥È¤ò»ØÄꤷ¤¿¸åʬ²ò¤Î¥Ü¡¼¥ë¤òºÇÂç20²óȯÀ¸¤µ¤»¤ë¡£
+ * @param dam ¥À¥á¡¼¥¸
+ * @param rad ¸úÎϤÎȾ·Â
+ * @return ¥¿¡¼¥²¥Ã¥È¤ò»ØÄꤷ¡¢¼Â¹Ô¤·¤¿¤Ê¤é¤ÐTRUE¤òÊÖ¤¹¡£
  */
 static bool cast_wrath_of_the_god(int dam, int rad)
 {
@@ -1029,9 +1101,10 @@ static bool cast_wrath_of_the_god(int dam, int rad)
        return TRUE;
 }
 
-
-/*
- * An "item_tester_hook" for offer
+/*!
+ * @brief °­ËâÎΰè¤Î¥°¥ì¡¼¥¿¡¼¥Ç¡¼¥â¥ó¾¤´­¤ËÍøÍѲÄǽ¤Ê»àÂΤ«¤É¤¦¤«¤òÊÖ¤¹¡£ / An "item_tester_hook" for offer
+ * @param o_ptr ¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
+ * @return À¸ìӤ˻ÈÍѲÄǽ¤Ê»àÂΤʤé¤ÐTRUE¤òÊÖ¤¹¡£
  */
 static bool item_tester_offer(object_type *o_ptr)
 {
@@ -1046,9 +1119,9 @@ static bool item_tester_offer(object_type *o_ptr)
        return (FALSE);
 }
 
-
-/*
- * Daemon spell Summon Greater Demon
+/*!
+ * @brief °­ËâÎΰè¤Î¥°¥ì¡¼¥¿¡¼¥Ç¡¼¥â¥ó¾¤´­¤ò½èÍý¤¹¤ë / Daemon spell Summon Greater Demon
+ * @return ½èÍý¤ò¼Â¹Ô¤·¤¿¤Ê¤é¤ÐTRUE¤òÊÖ¤¹¡£
  */
 static bool cast_summon_greater_demon(void)
 {
@@ -1125,9 +1198,11 @@ static bool cast_summon_greater_demon(void)
        return TRUE;
 }
 
-
-/*
- * Start singing if the player is a Bard 
+/*!
+ * @brief ²Î¤Î³«»Ï¤ò½èÍý¤¹¤ë / Start singing if the player is a Bard 
+ * @param spell ÎΰèËâË¡¤È¤·¤Æ¤ÎID
+ * @param song ËâË¡¸ú²Ì¤ÎID
+ * @return ¤Ê¤·
  */
 static void start_singing(int spell, int song)
 {
@@ -1149,9 +1224,9 @@ static void start_singing(int spell, int song)
        p_ptr->redraw |= (PR_STATUS);
 }
 
-
-/*
- * Stop singing if the player is a Bard 
+/*!
+ * @brief ²Î¤ÎÄä»ß¤ò½èÍý¤¹¤ë / Stop singing if the player is a Bard 
+ * @return ¤Ê¤·
  */
 void stop_singing(void)
 {
@@ -1185,6 +1260,12 @@ void stop_singing(void)
 }
 
 
+/*!
+ * @brief À¸Ì¿ÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ËâË¡ID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_life_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -1882,7 +1963,12 @@ static cptr do_life_spell(int spell, int mode)
        return "";
 }
 
-
+/*!
+ * @brief Àç½ÑÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ËâË¡ID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_sorcery_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -1932,7 +2018,7 @@ static cptr do_sorcery_spell(int spell, int mode)
 
                        if (cast)
                        {
-                               teleport_player(range, FALSE);
+                               teleport_player(range, 0L);
                        }
                }
                break;
@@ -2022,7 +2108,7 @@ static cptr do_sorcery_spell(int spell, int mode)
 
                        if (cast)
                        {
-                               teleport_player(range, FALSE);
+                               teleport_player(range, 0L);
                        }
                }
                break;
@@ -2045,7 +2131,7 @@ static cptr do_sorcery_spell(int spell, int mode)
                        {
                                if (!get_aim_dir(&dir)) return NULL;
 
-                               sleep_monster(dir);
+                               sleep_monster(dir, plev);
                        }
                }
                break;
@@ -2127,7 +2213,7 @@ static cptr do_sorcery_spell(int spell, int mode)
                        {
                                if (!get_aim_dir(&dir)) return NULL;
 
-                               slow_monster(dir);
+                               slow_monster(dir, plev);
                        }
                }
                break;
@@ -2148,7 +2234,7 @@ static cptr do_sorcery_spell(int spell, int mode)
 
                        if (cast)
                        {
-                               sleep_monsters();
+                               sleep_monsters(plev);
                        }
                }
                break;
@@ -2587,6 +2673,12 @@ static cptr do_sorcery_spell(int spell, int mode)
 }
 
 
+/*!
+ * @brief ¼«Á³ÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ËâË¡ID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_nature_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -2681,10 +2773,10 @@ static cptr do_nature_spell(int spell, int mode)
        case 3:
 #ifdef JP
                if (name) return "¿©ÎÈÀ¸À®";
-               if (desc) return "ËþÊ¢¤Ë¤Ê¤ë¡£";
+               if (desc) return "¿©ÎÁ¤ò°ì¤Äºî¤ê½Ð¤¹¡£";
 #else
                if (name) return "Produce Food";
-               if (desc) return "Satisfies hunger.";
+               if (desc) return "Produces a Ration of Food.";
 #endif
     
                {
@@ -2835,7 +2927,7 @@ static cptr do_nature_spell(int spell, int mode)
                        {
                                if (!get_aim_dir(&dir)) return NULL;
 
-                               wall_to_mud(dir);
+                               wall_to_mud(dir, 20 + randint1(30));
                        }
                }
                break;
@@ -2936,7 +3028,7 @@ static cptr do_nature_spell(int spell, int mode)
                                msg_print("A line of sunlight appears.");
 #endif
 
-                               lite_line(dir);
+                               lite_line(dir, damroll(6, 8));
                        }
                }
                break;
@@ -2957,7 +3049,7 @@ static cptr do_nature_spell(int spell, int mode)
 
                        if (cast)
                        {
-                               slow_monsters();
+                               slow_monsters(plev);
                        }
                }
                break;
@@ -3377,6 +3469,12 @@ static cptr do_nature_spell(int spell, int mode)
 }
 
 
+/*!
+ * @brief ¥«¥ª¥¹ÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ËâË¡ID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_chaos_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -3597,7 +3695,7 @@ static cptr do_chaos_spell(int spell, int mode)
 
                        if (cast)
                        {
-                               teleport_player(range, FALSE);
+                               teleport_player(range, 0L);
                        }
                }
                break;
@@ -3809,7 +3907,7 @@ static cptr do_chaos_spell(int spell, int mode)
                        {
                                if (!get_aim_dir(&dir)) return NULL;
 
-                               poly_monster(dir);
+                               poly_monster(dir, plev);
                        }
                }
                break;
@@ -4179,7 +4277,12 @@ static cptr do_chaos_spell(int spell, int mode)
        return "";
 }
 
-
+/*!
+ * @brief °Å¹õÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ËâË¡ID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_death_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -4332,7 +4435,7 @@ static cptr do_death_spell(int spell, int mode)
                        {
                                if (!get_aim_dir(&dir)) return NULL;
 
-                               sleep_monster(dir);
+                               sleep_monster(dir, plev);
                        }
                }
                break;
@@ -5014,6 +5117,12 @@ static cptr do_death_spell(int spell, int mode)
 }
 
 
+/*!
+ * @brief ¥È¥é¥ó¥×ÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ËâË¡ID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_trump_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -5049,7 +5158,7 @@ static cptr do_trump_spell(int spell, int mode)
 
                        if (cast)
                        {
-                               teleport_player(range, FALSE);
+                               teleport_player(range, 0L);
                        }
                }
                break;
@@ -5139,7 +5248,7 @@ static cptr do_trump_spell(int spell, int mode)
 
                        if (cast)
                        {
-                               teleport_player(range, FALSE);
+                               teleport_player(range, 0L);
                        }
                }
                break;
@@ -5353,7 +5462,7 @@ static cptr do_trump_spell(int spell, int mode)
 
                                if (!result) return NULL;
 
-                               speed_monster(dir);
+                               speed_monster(dir, plev);
                        }
                }
                break;
@@ -5942,6 +6051,12 @@ static cptr do_trump_spell(int spell, int mode)
 }
 
 
+/*!
+ * @brief Èë½ÑÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ËâË¡ID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_arcane_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -6055,7 +6170,7 @@ static cptr do_arcane_spell(int spell, int mode)
 
                        if (cast)
                        {
-                               teleport_player(range, FALSE);
+                               teleport_player(range, 0L);
                        }
                }
                break;
@@ -6369,7 +6484,7 @@ static cptr do_arcane_spell(int spell, int mode)
 
                        if (cast)
                        {
-                               teleport_player(range, FALSE);
+                               teleport_player(range, 0L);
                        }
                }
                break;
@@ -6411,7 +6526,7 @@ static cptr do_arcane_spell(int spell, int mode)
                        {
                                if (!get_aim_dir(&dir)) return NULL;
 
-                               wall_to_mud(dir);
+                               wall_to_mud(dir, 20 + randint1(30));
                        }
                }
                break;
@@ -6441,7 +6556,7 @@ static cptr do_arcane_spell(int spell, int mode)
                                msg_print("A line of light appears.");
 #endif
 
-                               lite_line(dir);
+                               lite_line(dir, damroll(6, 8));
                        }
                }
                break;
@@ -6664,7 +6779,12 @@ static cptr do_arcane_spell(int spell, int mode)
        return "";
 }
 
-
+/*!
+ * @brief ¾¢ÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ËâË¡ID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_craft_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -6678,23 +6798,6 @@ static cptr do_craft_spell(int spell, int mode)
        {
        case 0:
 #ifdef JP
-               if (name) return "ÁõÈ÷̵Îϲ½";
-               if (desc) return "Éð´ï¡¦Ëɶñ¤Ë¤«¤±¤é¤ì¤¿¤¢¤é¤æ¤ëËâÎϤò´°Á´¤Ë²ò½ü¤¹¤ë¡£";
-#else
-               if (name) return "Remove Enchantment";
-               if (desc) return "Removes all magics completely from any weapon or armor.";
-#endif
-    
-               {
-                       if (cast)
-                       {
-                               if (!mundane_spell(TRUE)) return NULL;
-                       }
-               }
-               break;
-
-       case 1:
-#ifdef JP
                if (name) return "ÀÖ³°Àþ»ëÎÏ";
                if (desc) return "°ìÄê»þ´Ö¡¢ÀÖ³°Àþ»ëÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
 #else
@@ -6714,7 +6817,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 2:
+       case 1:
 #ifdef JP
                if (name) return "²óÉüÎ϶¯²½";
                if (desc) return "°ìÄê»þ´Ö¡¢²óÉüÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
@@ -6735,7 +6838,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 3:
+       case 2:
 #ifdef JP
                if (name) return "¶õÊ¢½¼Â­";
                if (desc) return "ËþÊ¢¤Ë¤Ê¤ë¡£";
@@ -6752,7 +6855,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 4:
+       case 3:
 #ifdef JP
                if (name) return "ÂÑÎ䵤";
                if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
@@ -6773,7 +6876,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 5:
+       case 4:
 #ifdef JP
                if (name) return "ÂѲбê";
                if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
@@ -6794,7 +6897,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 6:
+       case 5:
 #ifdef JP
                if (name) return "»Îµ¤¹âÍÈ";
                if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
@@ -6817,7 +6920,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 7:
+       case 6:
 #ifdef JP
                if (name) return "ÂÑÅÅ·â";
                if (desc) return "°ìÄê»þ´Ö¡¢ÅÅ·â¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
@@ -6838,7 +6941,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 8:
+       case 7:
 #ifdef JP
                if (name) return "ÂÑ»À";
                if (desc) return "°ìÄê»þ´Ö¡¢»À¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
@@ -6859,7 +6962,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 9:
+       case 8:
 #ifdef JP
                if (name) return "Æ©ÌÀ»ëǧ";
                if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
@@ -6880,7 +6983,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 10:
+       case 9:
 #ifdef JP
                if (name) return "²ò¼ö";
                if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
@@ -6904,7 +7007,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 11:
+       case 10:
 #ifdef JP
                if (name) return "ÂÑÆÇ";
                if (desc) return "°ìÄê»þ´Ö¡¢ÆǤؤÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
@@ -6925,7 +7028,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 12:
+       case 11:
 #ifdef JP
                if (name) return "¶¸Àï»Î²½";
                if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤¹¤ë¡£";
@@ -6948,7 +7051,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 13:
+       case 12:
 #ifdef JP
                if (name) return "¼«¸ÊʬÀÏ";
                if (desc) return "¸½ºß¤Î¼«Ê¬¤Î¾õÂÖ¤ò´°Á´¤ËÃΤ롣";
@@ -6965,7 +7068,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 14:
+       case 13:
 #ifdef JP
                if (name) return "Âмٰ­·ë³¦";
                if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Î¹¶·â¤òËɤ°¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
@@ -6987,7 +7090,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 15:
+       case 14:
 #ifdef JP
                if (name) return "Ìþ¤·";
                if (desc) return "ÆÇ¡¢Û¯Û°¾õÂÖ¡¢Éé½ý¤òÁ´²÷¤µ¤»¡¢¸¸³Ð¤òľ¤¹¡£";
@@ -7007,7 +7110,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 16:
+       case 15:
 #ifdef JP
                if (name) return "ËâË¡·õ";
                if (desc) return "°ìÄê»þ´Ö¡¢Éð´ï¤ËÎ䵤¡¢±ê¡¢ÅÅ·â¡¢»À¡¢ÆǤΤ¤¤º¤ì¤«¤Î°À­¤ò¤Ä¤±¤ë¡£Éð´ï¤ò»ý¤¿¤Ê¤¤¤È»È¤¨¤Ê¤¤¡£";
@@ -7028,7 +7131,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 17:
+       case 16:
 #ifdef JP
                if (name) return "¥Æ¥ì¥Ñ¥·¡¼";
                if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
@@ -7050,7 +7153,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 18:
+       case 17:
 #ifdef JP
                if (name) return "È©Àв½";
                if (desc) return "°ìÄê»þ´Ö¡¢AC¤ò¾å¾º¤µ¤»¤ë¡£";
@@ -7072,7 +7175,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 19:
+       case 18:
 #ifdef JP
                if (name) return "Á´ÂÑÀ­";
                if (desc) return "°ìÄê»þ´Ö¡¢»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
@@ -7097,7 +7200,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 20:
+       case 19:
 #ifdef JP
                if (name) return "¥¹¥Ô¡¼¥É";
                if (desc) return "°ìÄê»þ´Ö¡¢²Ã®¤¹¤ë¡£";
@@ -7119,7 +7222,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 21:
+       case 20:
 #ifdef JP
                if (name) return "ÊÉÈ´¤±";
                if (desc) return "°ìÄê»þ´Ö¡¢È¾Êª¼Á²½¤·ÊɤòÄ̤êÈ´¤±¤é¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
@@ -7140,7 +7243,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 22:
+       case 21:
 #ifdef JP
                if (name) return "½âË᤭";
                if (desc) return "½â¤ËÈ¿¼Í¤Î°À­¤ò¤Ä¤±¤ë¡£";
@@ -7157,7 +7260,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 23:
+       case 22:
 #ifdef JP
                if (name) return "¥´¡¼¥ì¥àÀ½Â¤";
                if (desc) return "1ÂΤΥ´¡¼¥ì¥à¤òÀ½Â¤¤¹¤ë¡£";
@@ -7189,7 +7292,7 @@ static cptr do_craft_spell(int spell, int mode)
                }
                break;
 
-       case 24:
+       case 23:
 #ifdef JP
                if (name) return "ËâË¡¤Î³»";
                if (desc) return "°ìÄê»þ´Ö¡¢ËâË¡ËɸæÎϤÈAC¤¬¾å¤¬¤ê¡¢º®Íð¤ÈÌÕÌܤÎÂÑÀ­¡¢È¿¼ÍǽÎÏ¡¢ËãáãÃΤ餺¡¢ÉâÍ·¤òÆÀ¤ë¡£";
@@ -7209,6 +7312,24 @@ static cptr do_craft_spell(int spell, int mode)
                        }
                }
                break;
+
+       case 24:
+#ifdef JP
+               if (name) return "ÁõÈ÷̵Îϲ½";
+               if (desc) return "Éð´ï¡¦Ëɶñ¤Ë¤«¤±¤é¤ì¤¿¤¢¤é¤æ¤ëËâÎϤò´°Á´¤Ë²ò½ü¤¹¤ë¡£";
+#else
+               if (name) return "Remove Enchantment";
+               if (desc) return "Removes all magics completely from any weapon or armor.";
+#endif
+    
+               {
+                       if (cast)
+                       {
+                               if (!mundane_spell(TRUE)) return NULL;
+                       }
+               }
+               break;
+
        case 25:
 #ifdef JP
                if (name) return "¼ö¤¤Ê´ºÕ";
@@ -7360,7 +7481,12 @@ static cptr do_craft_spell(int spell, int mode)
        return "";
 }
 
-
+/*!
+ * @brief °­ËâÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ËâË¡ID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_daemon_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -8152,7 +8278,12 @@ static cptr do_daemon_spell(int spell, int mode)
        return "";
 }
 
-
+/*!
+ * @brief Ç˼ÙÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ËâË¡ID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_crusade_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -8287,7 +8418,7 @@ static cptr do_crusade_spell(int spell, int mode)
 
                        if (cast)
                        {
-                               teleport_player(range, FALSE);
+                               teleport_player(range, 0L);
                        }
                }
                break;
@@ -8886,7 +9017,7 @@ static cptr do_crusade_spell(int spell, int mode)
                        {
                                project(0, 1, py, px, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
                                dispel_monsters(d_dam);
-                               slow_monsters();
+                               slow_monsters(plev);
                                stun_monsters(power);
                                confuse_monsters(power);
                                turn_monsters(power);
@@ -8943,6 +9074,12 @@ static cptr do_crusade_spell(int spell, int mode)
 }
 
 
+/*!
+ * @brief ²Î¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ²ÎID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP »þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_music_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -8993,7 +9130,7 @@ static cptr do_music_spell(int spell, int mode)
 
                        if (cont)
                        {
-                               slow_monsters();
+                               slow_monsters(plev);
                        }
                }
                break;
@@ -9566,7 +9703,7 @@ static cptr do_music_spell(int spell, int mode)
                if (desc) return "Êɤò·¡¤ê¿Ê¤à¡£¼«Ê¬¤Î­¸µ¤Î¥¢¥¤¥Æ¥à¤Ï¾øȯ¤¹¤ë¡£";
 #else
                if (name) return "Sound of disintegration";
-               if (desc) return "Turns all rocks in the adjacent squares to mud.";
+               if (desc) return "Makes you be able to burrow into walls. Objects under your feet evaporate.";
 #endif
 
                /* Stop singing before start another */
@@ -9799,8 +9936,8 @@ static cptr do_music_spell(int spell, int mode)
 
                        if (cont)
                        {
-                               slow_monsters();
-                               sleep_monsters();
+                               slow_monsters(plev);
+                               sleep_monsters(plev);
                        }
                }
 
@@ -10180,7 +10317,12 @@ static cptr do_music_spell(int spell, int mode)
        return "";
 }
 
-
+/*!
+ * @brief ·õ½Ñ¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ·õ½ÑID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_CAST)
+ * @return SPELL_NAME / SPELL_DESC »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
 static cptr do_hissatsu_spell(int spell, int mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
@@ -10278,7 +10420,7 @@ static cptr do_hissatsu_spell(int spell, int mode)
     
                if (cast)
                {
-                       if (!do_cmd_throw_aux(1, TRUE, 0)) return NULL;
+                       if (!do_cmd_throw_aux(1, TRUE, -1)) return NULL;
                }
                break;
 
@@ -11056,7 +11198,11 @@ static cptr do_hissatsu_spell(int spell, int mode)
                                        /* Move the player */
                                        if (!move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP)) break;
                                }
-       
+                               else
+                               {
+                                       break;
+                               }
+
                                /* -more- */
                                if (i < 2) msg_print(NULL);
                        }
@@ -11130,17 +11276,17 @@ static cptr do_hissatsu_spell(int spell, int mode)
                if (cast)
                {
                        const int mana_cost_per_monster = 8;
-                       bool new = TRUE;
+                       bool is_new = TRUE;
                        bool mdeath;
 
                        do
                        {
                                if (!rush_attack(&mdeath)) break;
-                               if (new)
+                               if (is_new)
                                {
                                        /* Reserve needed mana point */
                                        p_ptr->csp -= technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
-                                       new = FALSE;
+                                       is_new = FALSE;
                                }
                                else
                                        p_ptr->csp -= mana_cost_per_monster;
@@ -11153,7 +11299,7 @@ static cptr do_hissatsu_spell(int spell, int mode)
                        }
                        while (p_ptr->csp > mana_cost_per_monster);
 
-                       if (new) return NULL;
+                       if (is_new) return NULL;
        
                        /* Restore reserved mana */
                        p_ptr->csp += technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
@@ -11175,7 +11321,7 @@ static cptr do_hissatsu_spell(int spell, int mode)
 
                        if (!tgt_pt(&x, &y)) return NULL;
 
-                       if (!cave_player_teleportable_bold(y, x, FALSE, FALSE) ||
+                       if (!cave_player_teleportable_bold(y, x, 0L) ||
                            (distance(y, x, py, px) > MAX_SIGHT / 2) ||
                            !projectable(py, px, y, x))
                        {
@@ -11197,7 +11343,7 @@ static cptr do_hissatsu_spell(int spell, int mode)
                                break;
                        }
                        project(0, 0, y, x, HISSATSU_ISSEN, GF_ATTACK, PROJECT_BEAM | PROJECT_KILL, -1);
-                       teleport_player_to(y, x, TRUE, FALSE);
+                       teleport_player_to(y, x, 0L);
                }
                break;
 
@@ -11380,11 +11526,10 @@ static cptr do_hissatsu_spell(int spell, int mode)
                        {
 #ifdef JP
                                msg_print("Éð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£");
-                               take_hit(DAMAGE_FORCE, 9999, "ÀÚÊ¢", -1);
 #else
                                msg_print("Meaning of Bushi-do is found in the death.");
-                               take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
 #endif
+                               take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
                        }
                }
                break;
@@ -11393,9 +11538,1234 @@ static cptr do_hissatsu_spell(int spell, int mode)
        return "";
 }
 
+/*!
+ * @brief ¼ö½ÑÎΰè¤ÎÉð´ï¼öÇû¤ÎÂоݤˤǤ­¤ëÉð´ï¤«¤É¤¦¤«¤òÊÖ¤¹¡£ / An "item_tester_hook" for offer
+ * @param o_ptr ¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
+ * @return ¼öÇû²Äǽ¤ÊÉð´ï¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
+ */
+static bool item_tester_hook_weapon_except_bow(object_type *o_ptr)
+{
+       switch (o_ptr->tval)
+       {
+               case TV_SWORD:
+               case TV_HAFTED:
+               case TV_POLEARM:
+               case TV_DIGGING:
+               {
+                       return (TRUE);
+               }
+       }
+
+       return (FALSE);
+}
 
-/*
- * Do everything for each spell
+/*!
+ * @brief ¼ö½ÑÎΰè¤Î³Æ½èÍý¤Ë»È¤¨¤ë¼ö¤ï¤ì¤¿ÁõÈ÷¤«¤É¤¦¤«¤òÊÖ¤¹¡£ / An "item_tester_hook" for offer
+ * @param o_ptr ¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
+ * @return »È¤¨¤ëÁõÈ÷¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
+ */
+static bool item_tester_hook_cursed(object_type *o_ptr)
+{
+       return (bool)(object_is_cursed(o_ptr));
+}
+
+/*!
+ * @brief ¼ö½ÑÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
+ * @param spell ËâË¡ID
+ * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST / SPELL_CONT / SPELL_STOP)
+ * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST / SPELL_CONT / SPELL_STOP »þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
+ */
+static cptr do_hex_spell(int spell, int mode)
+{
+       bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
+       bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
+       bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
+       bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
+       bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
+       bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
+
+       bool add = TRUE;
+
+       int plev = p_ptr->lev;
+       int power;
+
+       switch (spell)
+       {
+       /*** 1st book (0-7) ***/
+       case 0:
+#ifdef JP
+               if (name) return "¼Ù¤Ê¤ë½ËÊ¡";
+               if (desc) return "½ËÊ¡¤Ë¤è¤ê¹¶·âÀºÅÙ¤ÈËɸæÎϤ¬¾å¤¬¤ë¡£";
+#else
+               if (name) return "Evily blessing";
+               if (desc) return "Attempts to increase +to_hit of a weapon and AC";
+#endif
+               if (cast)
+               {
+                       if (!p_ptr->blessed)
+                       {
+#ifdef JP
+                               msg_print("¹â·é¤Êµ¤Ê¬¤Ë¤Ê¤Ã¤¿¡ª");
+#else
+                               msg_print("You feel righteous!");
+#endif
+                       }
+               }
+               if (stop)
+               {
+                       if (!p_ptr->blessed)
+                       {
+#ifdef JP
+                               msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
+#else
+                               msg_print("The prayer has expired.");
+#endif
+                       }
+               }
+               break;
+
+       case 1:
+#ifdef JP
+               if (name) return "·Ú½ý¤Î¼£Ìþ";
+               if (desc) return "HP¤ä½ý¤ò¾¯¤·²óÉü¤µ¤»¤ë¡£";
+#else
+               if (name) return "Cure light wounds";
+               if (desc) return "Heals cut and HP a little.";
+#endif
+               if (info) return info_heal(1, 10, 0);
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
+#else
+                       msg_print("You feel better and better.");
+#endif
+               }
+               if (cast || cont)
+               {
+                       hp_player(damroll(1, 10));
+                       set_cut(p_ptr->cut - 10);
+               }
+               break;
+
+       case 2:
+#ifdef JP
+               if (name) return "°­Ëâ¤Î¥ª¡¼¥é";
+               if (desc) return "±ê¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢²óÉü®ÅÙ¤¬Â®¤¯¤Ê¤ë¡£";
+#else
+               if (name) return "Demonic aura";
+               if (desc) return "Gives fire aura and regeneration.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("ÂΤ¬±ê¤Î¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£");
+#else
+                       msg_print("You have enveloped by fiery aura!");
+#endif
+               }
+               if (stop)
+               {
+#ifdef JP
+                       msg_print("±ê¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
+#else
+                       msg_print("Fiery aura disappeared.");
+#endif
+               }
+               break;
+
+       case 3:
+#ifdef JP
+               if (name) return "°­½­Ì¸";
+               if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÈù¼åÎ̤ÎÆǤΥÀ¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
+#else
+               if (name) return "Stinking mist";
+               if (desc) return "Deals few damages of poison to all monsters in your sight.";
+#endif
+               power = plev / 2 + 5;
+               if (info) return info_damage(1, power, 0);
+               if (cast || cont)
+               {
+                       project_hack(GF_POIS, randint1(power));
+               }
+               break;
+
+       case 4:
+#ifdef JP
+               if (name) return "ÏÓÎ϶¯²½";
+               if (desc) return "½Ñ¼Ô¤ÎÏÓÎϤò¾å¾º¤µ¤»¤ë¡£";
+#else
+               if (name) return "Extra might";
+               if (desc) return "Attempts to increase your strength.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("²¿¤À¤«ÎϤ¬Í¯¤¤¤ÆÍè¤ë¡£");
+#else
+                       msg_print("You feel you get stronger.");
+#endif
+               }
+               break;
+
+       case 5:
+#ifdef JP
+               if (name) return "Éð´ï¼öÇû";
+               if (desc) return "ÁõÈ÷¤·¤Æ¤¤¤ëÉð´ï¤ò¼ö¤¦¡£";
+#else
+               if (name) return "Curse weapon";
+               if (desc) return "Curses your weapon.";
+#endif
+               if (cast)
+               {
+                       int item;
+                       cptr q, s;
+                       char o_name[MAX_NLEN];
+                       object_type *o_ptr;
+                       u32b f[TR_FLAG_SIZE];
+
+                       item_tester_hook = item_tester_hook_weapon_except_bow;
+#ifdef JP
+                       q = "¤É¤ì¤ò¼ö¤¤¤Þ¤¹¤«¡©";
+                       s = "Éð´ï¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
+#else
+                       q = "Which weapon do you curse?";
+                       s = "You wield no weapons.";
+#endif
+
+                       if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
+
+                       o_ptr = &inventory[item];
+                       object_desc(o_name, o_ptr, OD_NAME_ONLY);
+                       object_flags(o_ptr, f);
+
+#ifdef JP
+                       if (!get_check(format("ËÜÅö¤Ë %s ¤ò¼ö¤¤¤Þ¤¹¤«¡©", o_name))) return FALSE;
+#else
+                       if (!get_check(format("Do you curse %s, really¡©", o_name))) return FALSE;
+#endif
+
+                       if (!one_in_(3) &&
+                               (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
+                       {
+#ifdef JP
+                               msg_format("%s ¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡£", o_name);
+#else
+                               msg_format("%s resists the effect.", o_name);
+#endif
+                               if (one_in_(3))
+                               {
+                                       if (o_ptr->to_d > 0)
+                                       {
+                                               o_ptr->to_d -= randint1(3) % 2;
+                                               if (o_ptr->to_d < 0) o_ptr->to_d = 0;
+                                       }
+                                       if (o_ptr->to_h > 0)
+                                       {
+                                               o_ptr->to_h -= randint1(3) % 2;
+                                               if (o_ptr->to_h < 0) o_ptr->to_h = 0;
+                                       }
+                                       if (o_ptr->to_a > 0)
+                                       {
+                                               o_ptr->to_a -= randint1(3) % 2;
+                                               if (o_ptr->to_a < 0) o_ptr->to_a = 0;
+                                       }
+#ifdef JP
+                                       msg_format("%s ¤ÏÎô²½¤·¤Æ¤·¤Þ¤Ã¤¿¡£", o_name);
+#else
+                                       msg_format("Your %s was disenchanted!", o_name);
+#endif
+                               }
+                       }
+                       else
+                       {
+                               int power = 0;
+#ifdef JP
+                               msg_format("¶²ÉݤΰŹõ¥ª¡¼¥é¤¬¤¢¤Ê¤¿¤Î%s¤òÊñ¤ß¹þ¤ó¤À¡ª", o_name);
+#else
+                               msg_format("A terrible black aura blasts your %s!", o_name);
+#endif
+                               o_ptr->curse_flags |= (TRC_CURSED);
+
+                               if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
+                               {
+
+                                       if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+                                       if (one_in_(666))
+                                       {
+                                               o_ptr->curse_flags |= (TRC_TY_CURSE);
+                                               if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
+
+                                               add_flag(o_ptr->art_flags, TR_AGGRAVATE);
+                                               add_flag(o_ptr->art_flags, TR_VORPAL);
+                                               add_flag(o_ptr->art_flags, TR_VAMPIRIC);
+#ifdef JP
+                                               msg_print("·ì¤À¡ª·ì¤À¡ª·ì¤À¡ª");
+#else
+                                               msg_print("Blood, Blood, Blood!");
+#endif
+                                               power = 2;
+                                       }
+                               }
+
+                               o_ptr->curse_flags |= get_curse(power, o_ptr);
+                       }
+
+                       p_ptr->update |= (PU_BONUS);
+                       add = FALSE;
+               }
+               break;
+
+       case 6:
+#ifdef JP
+               if (name) return "¼Ù°­´¶ÃÎ";
+               if (desc) return "¼þ°Ï¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
+#else
+               if (name) return "Evil detection";
+               if (desc) return "Detects evil monsters.";
+#endif
+               if (info) return info_range(MAX_SIGHT);
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("¼Ù°­¤ÊÀ¸Êª¤Î¸ºß¤ò´¶¤¸¼è¤í¤¦¤È¤·¤¿¡£");
+#else
+                       msg_print("You attend to the presence of evil creatures.");
+#endif
+               }
+               break;
+
+       case 7:
+#ifdef JP
+               if (name) return "²æËý";
+               if (desc) return "¿ô¥¿¡¼¥ó¹¶·â¤òÂѤ¨¤¿¸å¡¢¼õ¤±¤¿¥À¥á¡¼¥¸¤òÃϹö¤Î¶È²Ð¤È¤·¤Æ¼þ°Ï¤ËÊü½Ð¤¹¤ë¡£";
+#else
+               if (name) return "Patience";
+               if (desc) return "Bursts hell fire strongly after patients any damage while few turns.";
+#endif
+               power = MIN(200, (p_ptr->magic_num1[2] * 2));
+               if (info) return info_damage(0, 0, power);
+               if (cast)
+               {
+                       int a = 3 - (p_ptr->pspeed - 100) / 10;
+                       int r = 3 + randint1(3) + MAX(0, MIN(3, a));
+
+                       if (p_ptr->magic_num2[2] > 0)
+                       {
+#ifdef JP
+                               msg_print("¤¹¤Ç¤Ë²æËý¤ò¤·¤Æ¤¤¤ë¡£");
+#else
+                               msg_print("You are already patienting.");
+#endif
+                               return NULL;
+                       }
+
+                       p_ptr->magic_num2[1] = 1;
+                       p_ptr->magic_num2[2] = r;
+                       p_ptr->magic_num1[2] = 0;
+#ifdef JP
+                       msg_print("¤¸¤Ã¤ÈÂѤ¨¤ë¤³¤È¤Ë¤·¤¿¡£");
+#else
+                       msg_print("You decide to patient all damages.");
+#endif
+                       add = FALSE;
+               }
+               if (cont)
+               {
+                       int rad = 2 + (power / 50);
+
+                       p_ptr->magic_num2[2]--;
+
+                       if ((p_ptr->magic_num2[2] <= 0) || (power >= 200))
+                       {
+#ifdef JP
+                               msg_print("²æËý¤¬²ò¤«¤ì¤¿¡ª");
+#else
+                               msg_print("Time for end of patioence!");
+#endif
+                               if (power)
+                               {
+                                       project(0, rad, py, px, power, GF_HELL_FIRE,
+                                               (PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
+                               }
+                               if (p_ptr->wizard)
+                               {
+#ifdef JP
+                                       msg_format("%dÅÀ¤Î¥À¥á¡¼¥¸¤òÊÖ¤·¤¿¡£", power);
+#else
+                                       msg_format("You return %d damages.", power);
+#endif
+                               }
+
+                               /* Reset */
+                               p_ptr->magic_num2[1] = 0;
+                               p_ptr->magic_num2[2] = 0;
+                               p_ptr->magic_num1[2] = 0;
+                       }
+               }
+               break;
+
+       /*** 2nd book (8-15) ***/
+       case 8:
+#ifdef JP
+               if (name) return "ɹ¤Î³»";
+               if (desc) return "ɹ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢ËɸæÎϤ¬¾å¾º¤¹¤ë¡£";
+#else
+               if (name) return "Ice armor";
+               if (desc) return "Gives fire aura and bonus to AC.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("ÂΤ¬É¹¤Î³»¤Çʤ¤ï¤ì¤¿¡£");
+#else
+                       msg_print("You have enveloped by ice armor!");
+#endif
+               }
+               if (stop)
+               {
+#ifdef JP
+                       msg_print("ɹ¤Î³»¤¬¾Ã¤¨µî¤Ã¤¿¡£");
+#else
+                       msg_print("Ice armor disappeared.");
+#endif
+               }
+               break;
+
+       case 9:
+#ifdef JP
+               if (name) return "½Å½ý¤Î¼£Ìþ";
+               if (desc) return "ÂÎÎϤä½ý¤ò¿¾¯²óÉü¤µ¤»¤ë¡£";
+#else
+               if (name) return "Cure serious wounds";
+               if (desc) return "Heals cut and HP more.";
+#endif
+               if (info) return info_heal(2, 10, 0);
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
+#else
+                       msg_print("You feel better and better.");
+#endif
+               }
+               if (cast || cont)
+               {
+                       hp_player(damroll(2, 10));
+                       set_cut((p_ptr->cut / 2) - 10);
+               }
+               break;
+
+       case 10:
+#ifdef JP
+               if (name) return "ÌôÉʵÛÆþ";
+               if (desc) return "¼öʸ±Ó¾§¤òÃæ»ß¤¹¤ë¤³¤È¤Ê¤¯¡¢Ìô¤Î¸ú²Ì¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
+#else
+               if (name) return "Inhail potion";
+               if (desc) return "Quaffs a potion without canceling of casting a spell.";
+#endif
+               if (cast)
+               {
+                       p_ptr->magic_num1[0] |= (1L << HEX_INHAIL);
+                       do_cmd_quaff_potion();
+                       p_ptr->magic_num1[0] &= ~(1L << HEX_INHAIL);
+                       add = FALSE;
+               }
+               break;
+
+       case 11:
+#ifdef JP
+               if (name) return "µÛ·ì̸";
+               if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÈù¼åÎ̤ÎÀ¸Ì¿Îϵۼý¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Í¿¤¨¤¿¥À¥á¡¼¥¸¤Îʬ¡¢ÂÎÎϤ¬²óÉü¤¹¤ë¡£";
+#else
+               if (name) return "Vampiric mist";
+               if (desc) return "Deals few dameges of drain life to all monsters in your sight.";
+#endif
+               power = (plev / 2) + 5;
+               if (info) return info_damage(1, power, 0);
+               if (cast || cont)
+               {
+                       project_hack(GF_OLD_DRAIN, randint1(power));
+               }
+               break;
+
+       case 12:
+#ifdef JP
+               if (name) return "Ëâ·õ²½";
+               if (desc) return "Éð´ï¤Î¹¶·âÎϤò¾å¤²¤ë¡£ÀÚ¤ìÌ£¤òÆÀ¡¢¼ö¤¤¤Ë±þ¤¸¤ÆÍ¿¤¨¤ë¥À¥á¡¼¥¸¤¬¾å¾º¤·¡¢Á±Îɤʥâ¥ó¥¹¥¿¡¼¤ËÂФ¹¤ë¥À¥á¡¼¥¸¤¬2Çܤˤʤ롣";
+#else
+               if (name) return "Swords to runeswords";
+               if (desc) return "Gives vorpal ability to your weapon. Increases damages by your weapon acccording to curse of your weapon.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("¤¢¤Ê¤¿¤ÎÉð´ï¤¬¹õ¤¯µ±¤¤¤¿¡£");
+#else
+                       if (!empty_hands(FALSE))
+                               msg_print("Your weapons glow bright black.");
+                       else
+                               msg_print("Your weapon glows bright black.");
+#endif
+               }
+               if (stop)
+               {
+#ifdef JP
+                       msg_print("Éð´ï¤Îµ±¤­¤¬¾Ã¤¨µî¤Ã¤¿¡£");
+#else
+                       msg_format("Brightness of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
+#endif
+               }
+               break;
+
+       case 13:
+#ifdef JP
+               if (name) return "º®Íð¤Î¼ê";
+               if (desc) return "¹¶·â¤·¤¿ºÝ¥â¥ó¥¹¥¿¡¼¤òº®Í𤵤»¤ë¡£";
+#else
+               if (name) return "Touch of confusion";
+               if (desc) return "Confuses a monster when you attack.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("¤¢¤Ê¤¿¤Î¼ê¤¬ÀÖ¤¯µ±¤­»Ï¤á¤¿¡£");
+#else
+                       msg_print("Your hands glow bright red.");
+#endif
+               }
+               if (stop)
+               {
+#ifdef JP
+                       msg_print("¼ê¤Îµ±¤­¤¬¤Ê¤¯¤Ê¤Ã¤¿¡£");
+#else
+                       msg_print("Brightness on your hands disappeard.");
+#endif
+               }
+               break;
+
+       case 14:
+#ifdef JP
+               if (name) return "ÆùÂζ¯²½";
+               if (desc) return "½Ñ¼Ô¤ÎÏÓÎÏ¡¢´ïÍѤµ¡¢Âѵ×ÎϤò¾å¾º¤µ¤»¤ë¡£¹¶·â²ó¿ô¤Î¾å¸Â¤ò 1 Áý²Ã¤µ¤»¤ë¡£";
+#else
+               if (name) return "Building up";
+               if (desc) return "Attempts to increases your strength, dexterity and constitusion.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("¿ÈÂΤ¬¶¯¤¯¤Ê¤Ã¤¿µ¤¤¬¤·¤¿¡£");
+#else
+                       msg_print("You feel your body is developed more now.");
+#endif
+               }
+               break;
+
+       case 15:
+#ifdef JP
+               if (name) return "È¿¥Æ¥ì¥Ý¡¼¥È·ë³¦";
+               if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤Î¥Æ¥ì¥Ý¡¼¥È¤òÁ˳²¤¹¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
+#else
+               if (name) return "Anti teleport barrier";
+               if (desc) return "Obstructs all teleportations by monsters in your sight.";
+#endif
+               power = plev * 3 / 2;
+               if (info) return info_power(power);
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("¥Æ¥ì¥Ý¡¼¥È¤òËɤ°¼ö¤¤¤ò¤«¤±¤¿¡£");
+#else
+                       msg_print("You feel anyone can not teleport except you.");
+#endif
+               }
+               break;
+
+       /*** 3rd book (16-23) ***/
+       case 16:
+#ifdef JP
+               if (name) return "¾×·â¤Î¥¯¥í¡¼¥¯";
+               if (desc) return "Åŵ¤¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢Æ°¤­¤¬Â®¤¯¤Ê¤ë¡£";
+#else
+               if (name) return "Cloak of shock";
+               if (desc) return "Gives lightning aura and a bonus to speed.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("ÂΤ¬°ðºÊ¤Î¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£");
+#else
+                       msg_print("You have enveloped by electrical aura!");
+#endif
+               }
+               if (stop)
+               {
+#ifdef JP
+                       msg_print("°ðºÊ¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
+#else
+                       msg_print("Electrical aura disappeared.");
+#endif
+               }
+               break;
+
+       case 17:
+#ifdef JP
+               if (name) return "Ã×Ì¿½ý¤Î¼£Ìþ";
+               if (desc) return "ÂÎÎϤä½ý¤ò²óÉü¤µ¤»¤ë¡£";
+#else
+               if (name) return "Cure critical wounds";
+               if (desc) return "Heals cut and HP greatry.";
+#endif
+               if (info) return info_heal(4, 10, 0);
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
+#else
+                       msg_print("You feel better and better.");
+#endif
+               }
+               if (cast || cont)
+               {
+                       hp_player(damroll(4, 10));
+                       set_stun(0);
+                       set_cut(0);
+                       set_poisoned(0);
+               }
+               break;
+
+       case 18:
+#ifdef JP
+               if (name) return "¼öÎÏÉõÆþ";
+               if (desc) return "ËâË¡¤ÎÆ»¶ñ¤ËËâÎϤòºÆ½¼Å¶¤¹¤ë¡£";
+#else
+               if (name) return "Recharging";
+               if (desc) return "Recharges a magic device.";
+#endif
+               power = plev * 2;
+               if (info) return info_power(power);
+               if (cast)
+               {
+                       if (!recharge(power)) return NULL;
+                       add = FALSE;
+               }
+               break;
+
+       case 19:
+#ifdef JP
+               if (name) return "»à¼ÔÉü³è";
+               if (desc) return "»àÂΤòÁɤ餻¤Æ¥Ú¥Ã¥È¤Ë¤¹¤ë¡£";
+#else
+               if (name) return "Animate Dead";
+               if (desc) return "Raises corpses and skeletons from dead.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("»à¼Ô¤Ø¤Î¸Æ¤Ó¤«¤±¤ò»Ï¤á¤¿¡£");
+#else
+                       msg_print("You start to call deads.!");
+#endif
+               }
+               if (cast || cont)
+               {
+                       animate_dead(0, py, px);
+               }
+               break;
+
+       case 20:
+#ifdef JP
+               if (name) return "Ëɶñ¼öÇû";
+               if (desc) return "ÁõÈ÷¤·¤Æ¤¤¤ëËɶñ¤Ë¼ö¤¤¤ò¤«¤±¤ë¡£";
+#else
+               if (name) return "Curse armor";
+               if (desc) return "Curse a piece of armour that you wielding.";
+#endif
+               if (cast)
+               {
+                       int item;
+                       cptr q, s;
+                       char o_name[MAX_NLEN];
+                       object_type *o_ptr;
+                       u32b f[TR_FLAG_SIZE];
+
+                       item_tester_hook = object_is_armour;
+#ifdef JP
+                       q = "¤É¤ì¤ò¼ö¤¤¤Þ¤¹¤«¡©";
+                       s = "Ëɶñ¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
+#else
+                       q = "Which piece of armour do you curse?";
+                       s = "You wield no piece of armours.";
+#endif
+
+                       if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
+
+                       o_ptr = &inventory[item];
+                       object_desc(o_name, o_ptr, OD_NAME_ONLY);
+                       object_flags(o_ptr, f);
+
+#ifdef JP
+                       if (!get_check(format("ËÜÅö¤Ë %s ¤ò¼ö¤¤¤Þ¤¹¤«¡©", o_name))) return FALSE;
+#else
+                       if (!get_check(format("Do you curse %s, really¡©", o_name))) return FALSE;
+#endif
+
+                       if (!one_in_(3) &&
+                               (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
+                       {
+#ifdef JP
+                               msg_format("%s ¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡£", o_name);
+#else
+                               msg_format("%s resists the effect.", o_name);
+#endif
+                               if (one_in_(3))
+                               {
+                                       if (o_ptr->to_d > 0)
+                                       {
+                                               o_ptr->to_d -= randint1(3) % 2;
+                                               if (o_ptr->to_d < 0) o_ptr->to_d = 0;
+                                       }
+                                       if (o_ptr->to_h > 0)
+                                       {
+                                               o_ptr->to_h -= randint1(3) % 2;
+                                               if (o_ptr->to_h < 0) o_ptr->to_h = 0;
+                                       }
+                                       if (o_ptr->to_a > 0)
+                                       {
+                                               o_ptr->to_a -= randint1(3) % 2;
+                                               if (o_ptr->to_a < 0) o_ptr->to_a = 0;
+                                       }
+#ifdef JP
+                                       msg_format("%s ¤ÏÎô²½¤·¤Æ¤·¤Þ¤Ã¤¿¡£", o_name);
+#else
+                                       msg_format("Your %s was disenchanted!", o_name);
+#endif
+                               }
+                       }
+                       else
+                       {
+                               int power = 0;
+#ifdef JP
+                               msg_format("¶²ÉݤΰŹõ¥ª¡¼¥é¤¬¤¢¤Ê¤¿¤Î%s¤òÊñ¤ß¹þ¤ó¤À¡ª", o_name);
+#else
+                               msg_format("A terrible black aura blasts your %s!", o_name);
+#endif
+                               o_ptr->curse_flags |= (TRC_CURSED);
+
+                               if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
+                               {
+
+                                       if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+                                       if (one_in_(666))
+                                       {
+                                               o_ptr->curse_flags |= (TRC_TY_CURSE);
+                                               if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
+
+                                               add_flag(o_ptr->art_flags, TR_AGGRAVATE);
+                                               add_flag(o_ptr->art_flags, TR_RES_POIS);
+                                               add_flag(o_ptr->art_flags, TR_RES_DARK);
+                                               add_flag(o_ptr->art_flags, TR_RES_NETHER);
+#ifdef JP
+                                               msg_print("·ì¤À¡ª·ì¤À¡ª·ì¤À¡ª");
+#else
+                                               msg_print("Blood, Blood, Blood!");
+#endif
+                                               power = 2;
+                                       }
+                               }
+
+                               o_ptr->curse_flags |= get_curse(power, o_ptr);
+                       }
+
+                       p_ptr->update |= (PU_BONUS);
+                       add = FALSE;
+               }
+               break;
+
+       case 21:
+#ifdef JP
+               if (name) return "±Æ¤Î¥¯¥í¡¼¥¯";
+               if (desc) return "±Æ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢Å¨¤Ë±Æ¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
+#else
+               if (name) return "Cloak of shadow";
+               if (desc) return "Gives aura of shadow.";
+#endif
+               if (cast)
+               {
+                       object_type *o_ptr = &inventory[INVEN_OUTER];
+
+                       if (!o_ptr->k_idx)
+                       {
+#ifdef JP
+                               msg_print("¥¯¥í¡¼¥¯¤ò¿È¤Ë¤Ä¤±¤Æ¤¤¤Ê¤¤¡ª");
+#else
+                               msg_print("You don't ware any cloak.");
+#endif
+                               return NULL;
+                       }
+                       else if (!object_is_cursed(o_ptr))
+                       {
+#ifdef JP
+                               msg_print("¥¯¥í¡¼¥¯¤Ï¼ö¤ï¤ì¤Æ¤¤¤Ê¤¤¡ª");
+#else
+                               msg_print("Your cloak is not cursed.");
+#endif
+                               return NULL;
+                       }
+                       else
+                       {
+#ifdef JP
+                               msg_print("±Æ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤Ã¤¿¡£");
+#else
+                               msg_print("You have enveloped by shadow aura!");
+#endif
+                       }
+               }
+               if (cont)
+               {
+                       object_type *o_ptr = &inventory[INVEN_OUTER];
+
+                       if ((!o_ptr->k_idx) || (!object_is_cursed(o_ptr)))
+                       {
+                               do_spell(REALM_HEX, spell, SPELL_STOP);
+                               p_ptr->magic_num1[0] &= ~(1L << spell);
+                               p_ptr->magic_num2[0]--;
+                               if (!p_ptr->magic_num2[0]) set_action(ACTION_NONE);
+                       }
+               }
+               if (stop)
+               {
+#ifdef JP
+                       msg_print("±Æ¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
+#else
+                       msg_print("Shadow aura disappeared.");
+#endif
+               }
+               break;
+
+       case 22:
+#ifdef JP
+               if (name) return "¶ìÄˤòËâÎϤË";
+               if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÀº¿À¥À¥á¡¼¥¸Í¿¤¨¡¢ËâÎϤòµÛ¤¤¼è¤ë¡£";
+#else
+               if (name) return "Pains to mana";
+               if (desc) return "Deals psychic damages to all monsters in sight, and drains some mana.";
+#endif
+               power = plev * 3 / 2;
+               if (info) return info_damage(1, power, 0);
+               if (cast || cont)
+               {
+                       project_hack(GF_PSI_DRAIN, randint1(power));
+               }
+               break;
+
+       case 23:
+#ifdef JP
+               if (name) return "ÌܤˤÏÌܤò";
+               if (desc) return "ÂÇ·â¤äËâË¡¤Ç¼õ¤±¤¿¥À¥á¡¼¥¸¤ò¡¢¹¶·â¸µ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤âÍ¿¤¨¤ë¡£";
+#else
+               if (name) return "Eye for an eye";
+               if (desc) return "Returns same damage which you got to the monster which damaged you.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("Éü½²¤·¤¿¤¤Íß˾¤Ë¤«¤é¤ì¤¿¡£");
+#else
+                       msg_print("You wish strongly you want to revenge anything.");
+#endif
+               }
+               break;
+
+       /*** 4th book (24-31) ***/
+       case 24:
+#ifdef JP
+               if (name) return "È¿Áý¿£·ë³¦";
+               if (desc) return "¤½¤Î³¬¤ÎÁý¿£¤¹¤ë¥â¥ó¥¹¥¿¡¼¤ÎÁý¿£¤òÁ˻ߤ¹¤ë¡£";
+#else
+               if (name) return "Anti multiply barrier";
+               if (desc) return "Obstructs all multiplying by monsters in entire floor.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("Áý¿£¤òÁ˻ߤ¹¤ë¼ö¤¤¤ò¤«¤±¤¿¡£");
+#else
+                       msg_print("You feel anyone can not already multiply.");
+#endif
+               }
+               break;
+
+       case 25:
+#ifdef JP
+               if (name) return "À¸Ì¿ÎÏÉü³è";
+               if (desc) return "·Ð¸³Ãͤò½ù¡¹¤ËÉü³è¤·¡¢¸º¾¯¤·¤¿Ç½ÎÏÃͤò²óÉü¤µ¤»¤ë¡£";
+#else
+               if (name) return "Restore life";
+               if (desc) return "Restores life energy and status.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("À¸Ì¿ÎϤ¬Ìá¤ê»Ï¤á¤¿¡£");
+#else
+                       msg_print("You feel your life energy starting to return.");
+#endif
+               }
+               if (cast || cont)
+               {
+                       bool flag = FALSE;
+                       int d = (p_ptr->max_exp - p_ptr->exp);
+                       int r = (p_ptr->exp / 20);
+                       int i;
+
+                       if (d > 0)
+                       {
+                               if (d < r)
+                                       p_ptr->exp = p_ptr->max_exp;
+                               else
+                                       p_ptr->exp += r;
+
+                               /* Check the experience */
+                               check_experience();
+
+                               flag = TRUE;
+                       }
+                       for (i = A_STR; i < 6; i ++)
+                       {
+                               if (p_ptr->stat_cur[i] < p_ptr->stat_max[i])
+                               {
+                                       if (p_ptr->stat_cur[i] < 18)
+                                               p_ptr->stat_cur[i]++;
+                                       else
+                                               p_ptr->stat_cur[i] += 10;
+
+                                       if (p_ptr->stat_cur[i] > p_ptr->stat_max[i])
+                                               p_ptr->stat_cur[i] = p_ptr->stat_max[i];
+
+                                       /* Recalculate bonuses */
+                                       p_ptr->update |= (PU_BONUS);
+
+                                       flag = TRUE;
+                               }
+                       }
+
+                       if (!flag)
+                       {
+#ifdef JP
+                               msg_format("%s¤Î¼öʸ¤Î±Ó¾§¤ò¤ä¤á¤¿¡£", do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME));
+#else
+                               msg_format("Finish casting '%^s'.", do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME));
+#endif
+                               p_ptr->magic_num1[0] &= ~(1L << HEX_RESTORE);
+                               if (cont) p_ptr->magic_num2[0]--;
+                               if (p_ptr->magic_num2) p_ptr->action = ACTION_NONE;
+
+                               /* Redraw status */
+                               p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
+                               p_ptr->redraw |= (PR_EXTRA);
+
+                               return "";
+                       }
+               }
+               break;
+
+       case 26:
+#ifdef JP
+               if (name) return "¼öÎϵۼý";
+               if (desc) return "¼ö¤ï¤ì¤¿Éð´ï¤Î¼ö¤¤¤òµÛ¼ý¤·¤ÆËâÎϤò²óÉü¤¹¤ë¡£";
+#else
+               if (name) return "Drain curse power";
+               if (desc) return "Drains curse on your weapon and heals SP a little.";
+#endif
+               if (cast)
+               {
+                       int item;
+                       cptr s, q;
+                       u32b f[TR_FLAG_SIZE];
+                       object_type *o_ptr;
+
+                       item_tester_hook = item_tester_hook_cursed;
+#ifdef JP
+                       q = "¤É¤ÎÁõÈ÷Éʤ«¤éµÛ¼ý¤·¤Þ¤¹¤«¡©";
+                       s = "¼ö¤ï¤ì¤¿¥¢¥¤¥Æ¥à¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
+#else
+                       q = "Which cursed equipment do you drain mana from?";
+                       s = "You have no cursed equipment.";
+#endif
+
+                       if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
+
+                       o_ptr = &inventory[item];
+                       object_flags(o_ptr, f);
+
+                       p_ptr->csp += (p_ptr->lev / 5) + randint1(p_ptr->lev / 5);
+                       if (have_flag(f, TR_TY_CURSE) || (o_ptr->curse_flags & TRC_TY_CURSE)) p_ptr->csp += randint1(5);
+                       if (p_ptr->csp > p_ptr->msp) p_ptr->csp = p_ptr->msp;
+
+                       if (o_ptr->curse_flags & TRC_PERMA_CURSE)
+                       {
+                               /* Nothing */
+                       }
+                       else if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
+                       {
+                               if (one_in_(7))
+                               {
+#ifdef JP
+                                       msg_print("¼ö¤¤¤òÁ´¤ÆµÛ¤¤¼è¤Ã¤¿¡£");
+#else
+                                       msg_print("Heavy curse vanished away.");
+#endif
+                                       o_ptr->curse_flags = 0L;
+                               }
+                       }
+                       else if ((o_ptr->curse_flags & (TRC_CURSED)) && one_in_(3))
+                       {
+#ifdef JP
+                               msg_print("¼ö¤¤¤òÁ´¤ÆµÛ¤¤¼è¤Ã¤¿¡£");
+#else
+                               msg_print("Curse vanished away.");
+#endif
+                               o_ptr->curse_flags = 0L;
+                       }
+
+                       add = FALSE;
+               }
+               break;
+
+       case 27:
+#ifdef JP
+               if (name) return "µÛ·ì¤Î¿Ï";
+               if (desc) return "µÛ·ì°À­¤Ç¹¶·â¤¹¤ë¡£";
+#else
+               if (name) return "Swords to vampires";
+               if (desc) return "Gives vampiric ability to your weapon.";
+#endif
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("¤¢¤Ê¤¿¤ÎÉð´ï¤¬·ì¤òÍߤ·¤Æ¤¤¤ë¡£");
+#else
+                       if (!empty_hands(FALSE))
+                               msg_print("Your weapons want more blood now.");
+                       else
+                               msg_print("Your weapon wants more blood now.");
+#endif
+               }
+               if (stop)
+               {
+#ifdef JP
+                       msg_print("Éð´ï¤Î³é˾¤¬¾Ã¤¨µî¤Ã¤¿¡£");
+#else
+                       msg_format("Thirsty of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
+#endif
+               }
+               break;
+
+       case 28:
+#ifdef JP
+               if (name) return "Û¯Û°¤Î¸ÀÍÕ";
+               if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤òÛ¯Û°¤È¤µ¤»¤ë¡£";
+#else
+               if (name) return "Word of stun";
+               if (desc) return "Stuns all monsters in your sight.";
+#endif
+               power = plev * 4;
+               if (info) return info_power(power);
+               if (cast || cont)
+               {
+                       stun_monsters(power);
+               }
+               break;
+
+       case 29:
+#ifdef JP
+               if (name) return "±Æ°ÜÆ°";
+               if (desc) return "¥â¥ó¥¹¥¿¡¼¤ÎÎ٤Υޥ¹¤Ë½Ö´Ö°ÜÆ°¤¹¤ë¡£";
+#else
+               if (name) return "Moving into shadow";
+               if (desc) return "Teleports you close to a monster.";
+#endif
+               if (cast)
+               {
+                       int i, y, x, dir;
+                       bool flag;
+
+                       for (i = 0; i < 3; i++)
+                       {
+                               if (!tgt_pt(&x, &y)) return FALSE;
+
+                               flag = FALSE;
+
+                               for (dir = 0; dir < 8; dir++)
+                               {
+                                       int dy = y + ddy_ddd[dir];
+                                       int dx = x + ddx_ddd[dir];
+                                       if (dir == 5) continue;
+                                       if(cave[dy][dx].m_idx) flag = TRUE;
+                               }
+
+                               if (!cave_empty_bold(y, x) || (cave[y][x].info & CAVE_ICKY) ||
+                                       (distance(y, x, py, px) > plev + 2))
+                               {
+#ifdef JP
+                                       msg_print("¤½¤³¤Ë¤Ï°ÜÆ°¤Ç¤­¤Ê¤¤¡£");
+#else
+                                       msg_print("Can not teleport to there.");
+#endif
+                                       continue;
+                               }
+                               break;
+                       }
+
+                       if (flag && randint0(plev * plev / 2))
+                       {
+                               teleport_player_to(y, x, 0L);
+                       }
+                       else
+                       {
+#ifdef JP
+                               msg_print("¤ª¤Ã¤È¡ª");
+#else
+                               msg_print("Oops!");
+#endif
+                               teleport_player(30, 0L);
+                       }
+
+                       add = FALSE;
+               }
+               break;
+
+       case 30:
+#ifdef JP
+               if (name) return "È¿ËâË¡·ë³¦";
+               if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ÎËâË¡¤òÁ˳²¤¹¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
+#else
+               if (name) return "Anti magic barrier";
+               if (desc) return "Obstructs all magic spell of monsters in your sight.";
+#endif
+               power = plev * 3 / 2;
+               if (info) return info_power(power);
+               if (cast)
+               {
+#ifdef JP
+                       msg_print("ËâË¡¤òËɤ°¼ö¤¤¤ò¤«¤±¤¿¡£");
+#else
+                       msg_print("You feel anyone can not cast spells except you.");
+#endif
+               }
+               break;
+
+       case 31:
+#ifdef JP
+               if (name) return "Éü½²¤ÎÀë¹ð";
+               if (desc) return "¿ô¥¿¡¼¥ó¸å¤Ë¤½¤ì¤Þ¤Ç¼õ¤±¤¿¥À¥á¡¼¥¸¤Ë±þ¤¸¤¿°ÒÎϤÎÃϹö¤Î¹å²Ð¤ÎÃƤòÊü¤Ä¡£";
+#else
+               if (name) return "Revenge sentence";
+               if (desc) return "Fires  a ball of hell fire to try revenging after few turns.";
+#endif
+               power = p_ptr->magic_num1[2];
+               if (info) return info_damage(0, 0, power);
+               if (cast)
+               {
+                       int r;
+                       int a = 3 - (p_ptr->pspeed - 100) / 10;
+                       r = 1 + randint1(2) + MAX(0, MIN(3, a));
+
+                       if (p_ptr->magic_num2[2] > 0)
+                       {
+#ifdef JP
+                               msg_print("¤¹¤Ç¤ËÉü½²¤ÏÀë¹ðºÑ¤ß¤À¡£");
+#else
+                               msg_print("You already pronounced your revenge.");
+#endif
+                               return NULL;
+                       }
+
+                       p_ptr->magic_num2[1] = 2;
+                       p_ptr->magic_num2[2] = r;
+#ifdef JP
+                       msg_format("¤¢¤Ê¤¿¤ÏÉü½²¤òÀë¹ð¤·¤¿¡£¤¢¤È %d ¥¿¡¼¥ó¡£", r);
+#else
+                       msg_format("You pronounce your revenge. %d turns left.", r);
+#endif
+                       add = FALSE;
+               }
+               if (cont)
+               {
+                       p_ptr->magic_num2[2]--;
+
+                       if (p_ptr->magic_num2[2] <= 0)
+                       {
+                               int dir;
+
+                               if (power)
+                               {
+                                       command_dir = 0;
+
+                                       do
+                                       {
+#ifdef JP
+                                               msg_print("Éü½²¤Î»þ¤À¡ª");
+#else
+                                               msg_print("Time to revenge!");
+#endif
+                                       }
+                                       while (!get_aim_dir(&dir));
+
+                                       fire_ball(GF_HELL_FIRE, dir, power, 1);
+
+                                       if (p_ptr->wizard)
+                                       {
+#ifdef JP
+                                               msg_format("%dÅÀ¤Î¥À¥á¡¼¥¸¤òÊÖ¤·¤¿¡£", power);
+#else
+                                               msg_format("You return %d damages.", power);
+#endif
+                                       }
+                               }
+                               else
+                               {
+#ifdef JP
+                                       msg_print("Éü½²¤¹¤ëµ¤¤¬¼º¤»¤¿¡£");
+#else
+                                       msg_print("You are not a mood to revenge.");
+#endif
+                               }
+                               p_ptr->magic_num1[2] = 0;
+                       }
+               }
+               break;
+       }
+
+       /* start casting */
+       if ((cast) && (add))
+       {
+               /* add spell */
+               p_ptr->magic_num1[0] |= 1L << (spell);
+               p_ptr->magic_num2[0]++;
+
+               if (p_ptr->action != ACTION_SPELL) set_action(ACTION_SPELL);
+       }
+
+       /* Redraw status */
+       if (!info)
+       {
+               p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
+               p_ptr->redraw |= (PR_EXTRA | PR_HP | PR_MANA);
+       }
+
+       return "";
+}
+
+
+/*!
+ * @brief ËâË¡½èÍý¤Î¥á¥¤¥ó¥ë¡¼¥Á¥ó
+ * @param realm ËâË¡Îΰè¤ÎID
+ * @param spell ³ÆÎΰè¤ÎËâË¡ID
+ * @param mode µá¤á¤ë½èÍý
+ * @return ³ÆÎΰèËâË¡¤Ë³Æ¼ï¥Æ¥­¥¹¥È¤òµá¤á¤¿¾ì¹ç¤Ïʸ»úÎ󻲾ȥݥ¤¥ó¥¿¡¢¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤ÏNULL¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£
  */
 cptr do_spell(int realm, int spell, int mode)
 {
@@ -11413,6 +12783,7 @@ cptr do_spell(int realm, int spell, int mode)
        case REALM_CRUSADE:  return do_crusade_spell(spell, mode);
        case REALM_MUSIC:    return do_music_spell(spell, mode);
        case REALM_HISSATSU: return do_hissatsu_spell(spell, mode);
+       case REALM_HEX:      return do_hex_spell(spell, mode);
        }
 
        return NULL;