OSDN Git Service

[Fix] #37353 文字コード修正中。
authorDeskull <deskull@users.sourceforge.jp>
Tue, 30 Oct 2018 13:50:41 +0000 (22:50 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Tue, 30 Oct 2018 13:50:41 +0000 (22:50 +0900)
Fixing Encoding.

20 files changed:
src/chest.c
src/cmd-pet.c
src/cmd-zaprod.c
src/cmd-zapwand.c
src/gameoption.c
src/history.c
src/monster-hook.c
src/monster-status.c
src/object-hook.c
src/realm-arcane.c
src/realm-chaos.c
src/realm-craft.c
src/realm-crusade.c
src/realm-daemon.c
src/realm-death.c
src/realm-hissatsu.c
src/realm-life.c
src/realm-song.c
src/realm-sorcery.c
src/realm-trump.c

index 721d084..b017db3 100644 (file)
-\r
-#include "angband.h"\r
-\r
-/*!\r
-* @brief \94 \82©\82ç\83A\83C\83e\83\80\82ð\88ø\82«\8fo\82· /\r
-* Allocates objects upon opening a chest    -BEN-\r
-* @param scatter TRUE\82È\82ç\82Î\83g\83\89\83b\83v\82É\82æ\82é\83A\83C\83e\83\80\82Ì\8ag\8eU\8f\88\97\9d\r
-* @param y \94 \82Ì\91\8dÝ\82·\82é\83}\83X\82ÌY\8dÀ\95W\r
-* @param x \94 \82Ì\91\8dÝ\82·\82é\83}\83X\82ÌX\8dÀ\95W\r
-* @param o_idx \94 \82Ì\83I\83u\83W\83F\83N\83gID\r
-* @return \82È\82µ\r
-* @details\r
-* <pre>\r
-* Disperse treasures from the given chest, centered at (x,y).\r
-*\r
-* Small chests often contain "gold", while Large chests always contain\r
-* items.  Wooden chests contain 2 items, Iron chests contain 4 items,\r
-* and Steel chests contain 6 items.  The "value" of the items in a\r
-* chest is based on the "power" of the chest, which is in turn based\r
-* on the level on which the chest is generated.\r
-* </pre>\r
-*/\r
-void chest_death(bool scatter, POSITION y, POSITION x, OBJECT_IDX o_idx)\r
-{\r
-       int number;\r
-\r
-       bool small;\r
-       BIT_FLAGS mode = AM_GOOD;\r
-\r
-       object_type forge;\r
-       object_type *q_ptr;\r
-\r
-       object_type *o_ptr = &o_list[o_idx];\r
-\r
-\r
-       /* Small chests often hold "gold" */\r
-       small = (o_ptr->sval < SV_CHEST_MIN_LARGE);\r
-\r
-       /* Determine how much to drop (see above) */\r
-       number = (o_ptr->sval % SV_CHEST_MIN_LARGE) * 2;\r
-\r
-       if (o_ptr->sval == SV_CHEST_KANDUME)\r
-       {\r
-               number = 5;\r
-               small = FALSE;\r
-               mode |= AM_GREAT;\r
-               object_level = o_ptr->xtra3;\r
-       }\r
-       else\r
-       {\r
-               /* Determine the "value" of the items */\r
-               object_level = ABS(o_ptr->pval) + 10;\r
-       }\r
-\r
-       /* Zero pval means empty chest */\r
-       if (!o_ptr->pval) number = 0;\r
-\r
-       /* Opening a chest */\r
-       opening_chest = TRUE;\r
-\r
-       /* Drop some objects (non-chests) */\r
-       for (; number > 0; --number)\r
-       {\r
-               /* Get local object */\r
-               q_ptr = &forge;\r
-\r
-               /* Wipe the object */\r
-               object_wipe(q_ptr);\r
-\r
-               /* Small chests often drop gold */\r
-               if (small && (randint0(100) < 25))\r
-               {\r
-                       /* Make some gold */\r
-                       if (!make_gold(q_ptr)) continue;\r
-               }\r
-\r
-               /* Otherwise drop an item */\r
-               else\r
-               {\r
-                       /* Make a good object */\r
-                       if (!make_object(q_ptr, mode)) continue;\r
-               }\r
-\r
-               /* If chest scatters its contents, pick any floor square. */\r
-               if (scatter)\r
-               {\r
-                       int i;\r
-                       for (i = 0; i < 200; i++)\r
-                       {\r
-                               /* Pick a totally random spot. */\r
-                               y = randint0(MAX_HGT);\r
-                               x = randint0(MAX_WID);\r
-\r
-                               /* Must be an empty floor. */\r
-                               if (!cave_empty_bold(y, x)) continue;\r
-\r
-                               /* Place the object there. */\r
-                               (void)drop_near(q_ptr, -1, y, x);\r
-\r
-                               /* Done. */\r
-                               break;\r
-                       }\r
-               }\r
-               /* Normally, drop object near the chest. */\r
-               else (void)drop_near(q_ptr, -1, y, x);\r
-       }\r
-\r
-       /* Reset the object level */\r
-       object_level = base_level;\r
-\r
-       /* No longer opening a chest */\r
-       opening_chest = FALSE;\r
-\r
-       /* Empty */\r
-       o_ptr->pval = 0;\r
-\r
-       /* Known */\r
-       object_known(o_ptr);\r
-}\r
-\r
-\r
-/*!\r
-* @brief \94 \82Ì\83g\83\89\83b\83v\8f\88\97\9d /\r
-* Chests have traps too.\r
-* @param y \94 \82Ì\91\8dÝ\82·\82é\83}\83X\82ÌY\8dÀ\95W\r
-* @param x \94 \82Ì\91\8dÝ\82·\82é\83}\83X\82ÌX\8dÀ\95W\r
-* @param o_idx \94 \82Ì\83I\83u\83W\83F\83N\83gID\r
-* @return \82È\82µ\r
-* @details\r
-* <pre>\r
-* Exploding chest destroys contents (and traps).\r
-* Note that the chest itself is never destroyed.\r
-* </pre>\r
-*/\r
-void chest_trap(POSITION y, POSITION x, OBJECT_IDX o_idx)\r
-{\r
-       int i, trap;\r
-\r
-       object_type *o_ptr = &o_list[o_idx];\r
-\r
-       int mon_level = o_ptr->xtra3;\r
-\r
-       /* Ignore disarmed chests */\r
-       if (o_ptr->pval <= 0) return;\r
-\r
-       /* Obtain the traps */\r
-       trap = chest_traps[o_ptr->pval];\r
-\r
-       /* Lose strength */\r
-       if (trap & (CHEST_LOSE_STR))\r
-       {\r
-               msg_print(_("\8ed\8a|\82¯\82ç\82ê\82Ä\82¢\82½\8f¬\82³\82È\90j\82É\8eh\82³\82ê\82Ä\82µ\82Ü\82Á\82½\81I", "A small needle has pricked you!"));\r
-               take_hit(DAMAGE_NOESCAPE, damroll(1, 4), _("\93Å\90j", "a poison needle"), -1);\r
-               (void)do_dec_stat(A_STR);\r
-       }\r
-\r
-       /* Lose constitution */\r
-       if (trap & (CHEST_LOSE_CON))\r
-       {\r
-               msg_print(_("\8ed\8a|\82¯\82ç\82ê\82Ä\82¢\82½\8f¬\82³\82È\90j\82É\8eh\82³\82ê\82Ä\82µ\82Ü\82Á\82½\81I", "A small needle has pricked you!"));\r
-               take_hit(DAMAGE_NOESCAPE, damroll(1, 4), _("\93Å\90j", "a poison needle"), -1);\r
-               (void)do_dec_stat(A_CON);\r
-       }\r
-\r
-       /* Poison */\r
-       if (trap & (CHEST_POISON))\r
-       {\r
-               msg_print(_("\93Ë\94@\90\81\82«\8fo\82µ\82½\97Î\90F\82Ì\83K\83X\82É\95ï\82Ý\8d\9e\82Ü\82ê\82½\81I", "A puff of green gas surrounds you!"));\r
-               if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()))\r
-               {\r
-                       (void)set_poisoned(p_ptr->poisoned + 10 + randint1(20));\r
-               }\r
-       }\r
-\r
-       /* Paralyze */\r
-       if (trap & (CHEST_PARALYZE))\r
-       {\r
-               msg_print(_("\93Ë\94@\90\81\82«\8fo\82µ\82½\89©\90F\82¢\83K\83X\82É\95ï\82Ý\8d\9e\82Ü\82ê\82½\81I", "A puff of yellow gas surrounds you!"));\r
-               if (!p_ptr->free_act)\r
-               {\r
-                       (void)set_paralyzed(p_ptr->paralyzed + 10 + randint1(20));\r
-               }\r
-       }\r
-\r
-       /* Summon monsters */\r
-       if (trap & (CHEST_SUMMON))\r
-       {\r
-               int num = 2 + randint1(3);\r
-               msg_print(_("\93Ë\94@\90\81\82«\8fo\82µ\82½\89\8c\82É\95ï\82Ý\8d\9e\82Ü\82ê\82½\81I", "You are enveloped in a cloud of smoke!"));\r
-               for (i = 0; i < num; i++)\r
-               {\r
-                       if (randint1(100)<dun_level)\r
-                               activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);\r
-                       else\r
-                               (void)summon_specific(0, y, x, mon_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));\r
-               }\r
-       }\r
-\r
-       /* Elemental summon. */\r
-       if (trap & (CHEST_E_SUMMON))\r
-       {\r
-               msg_print(_("\95ó\82ð\8eç\82é\82½\82ß\82É\83G\83\8c\83\81\83\93\83^\83\8b\82ª\8c»\82ê\82½\81I", "Elemental beings appear to protect their treasures!"));\r
-               for (i = 0; i < randint1(3) + 5; i++)\r
-               {\r
-                       (void)summon_specific(0, y, x, mon_level, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));\r
-               }\r
-       }\r
-\r
-       /* Force clouds, then summon birds. */\r
-       if (trap & (CHEST_BIRD_STORM))\r
-       {\r
-               msg_print(_("\92¹\82Ì\8cQ\82ê\82ª\82 \82È\82½\82ð\8eæ\82è\8aª\82¢\82½\81I", "A storm of birds swirls around you!"));\r
-\r
-               for (i = 0; i < randint1(3) + 3; i++)\r
-                       (void)fire_meteor(-1, GF_FORCE, y, x, o_ptr->pval / 5, 7);\r
-\r
-               for (i = 0; i < randint1(5) + o_ptr->pval / 5; i++)\r
-               {\r
-                       (void)summon_specific(0, y, x, mon_level, SUMMON_BIRD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));\r
-               }\r
-       }\r
-\r
-       /* Various colorful summonings. */\r
-       if (trap & (CHEST_H_SUMMON))\r
-       {\r
-               /* Summon demons. */\r
-               if (one_in_(4))\r
-               {\r
-                       msg_print(_("\89\8a\82Æ\97°\89©\82Ì\89_\82Ì\92\86\82É\88«\96\82\82ª\8ep\82ð\8c»\82µ\82½\81I", "Demons materialize in clouds of fire and brimstone!"));\r
-                       for (i = 0; i < randint1(3) + 2; i++)\r
-                       {\r
-                               (void)fire_meteor(-1, GF_FIRE, y, x, 10, 5);\r
-                               (void)summon_specific(0, y, x, mon_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));\r
-                       }\r
-               }\r
-\r
-               /* Summon dragons. */\r
-               else if (one_in_(3))\r
-               {\r
-                       msg_print(_("\88Ã\88Å\82É\83h\83\89\83S\83\93\82Ì\89e\82ª\82Ú\82ñ\82â\82è\82Æ\8c»\82ê\82½\81I", "Draconic forms loom out of the darkness!"));\r
-                       for (i = 0; i < randint1(3) + 2; i++)\r
-                       {\r
-                               (void)summon_specific(0, y, x, mon_level, SUMMON_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));\r
-                       }\r
-               }\r
-\r
-               /* Summon hybrids. */\r
-               else if (one_in_(2))\r
-               {\r
-                       msg_print(_("\8aï\96­\82È\8ep\82Ì\89ö\95¨\82ª\8fP\82Á\82Ä\97\88\82½\81I", "Creatures strange and twisted assault you!"));\r
-                       for (i = 0; i < randint1(5) + 3; i++)\r
-                       {\r
-                               (void)summon_specific(0, y, x, mon_level, SUMMON_HYBRID, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));\r
-                       }\r
-               }\r
-\r
-               /* Summon vortices (scattered) */\r
-               else\r
-               {\r
-                       msg_print(_("\89Q\8aª\82ª\8d\87\91Ì\82µ\81A\94j\97ô\82µ\82½\81I", "Vortices coalesce and wreak destruction!"));\r
-                       for (i = 0; i < randint1(3) + 2; i++)\r
-                       {\r
-                               (void)summon_specific(0, y, x, mon_level, SUMMON_VORTEX, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));\r
-                       }\r
-               }\r
-       }\r
-\r
-       /* Dispel player. */\r
-       if ((trap & (CHEST_RUNES_OF_EVIL)) && o_ptr->k_idx)\r
-       {\r
-               /* Determine how many nasty tricks can be played. */\r
-               int nasty_tricks_count = 4 + randint0(3);\r
-\r
-               /* Message. */\r
-               msg_print(_("\8b°\82ë\82µ\82¢\90º\82ª\8b¿\82¢\82½:  \81u\88Ã\88Å\82ª\93ð\82ð\82Â\82Â\82Ü\82ñ\81I\81v", "Hideous voices bid:  'Let the darkness have thee!'"));\r
-               /* This is gonna hurt... */\r
-               for (; nasty_tricks_count > 0; nasty_tricks_count--)\r
-               {\r
-                       /* ...but a high saving throw does help a little. */\r
-                       if (randint1(100 + o_ptr->pval * 2) > p_ptr->skill_sav)\r
-                       {\r
-                               if (one_in_(6)) take_hit(DAMAGE_NOESCAPE, damroll(5, 20), _("\94j\96Å\82Ì\83g\83\89\83b\83v\82Ì\95ó\94 ", "a chest dispel-player trap"), -1);\r
-                               else if (one_in_(5)) (void)set_cut(p_ptr->cut + 200);\r
-                               else if (one_in_(4))\r
-                               {\r
-                                       if (!p_ptr->free_act)\r
-                                               (void)set_paralyzed(p_ptr->paralyzed + 2 +\r
-                                                       randint0(6));\r
-                                       else\r
-                                               (void)set_stun(p_ptr->stun + 10 +\r
-                                                       randint0(100));\r
-                               }\r
-                               else if (one_in_(3)) apply_disenchant(0);\r
-                               else if (one_in_(2))\r
-                               {\r
-                                       (void)do_dec_stat(A_STR);\r
-                                       (void)do_dec_stat(A_DEX);\r
-                                       (void)do_dec_stat(A_CON);\r
-                                       (void)do_dec_stat(A_INT);\r
-                                       (void)do_dec_stat(A_WIS);\r
-                                       (void)do_dec_stat(A_CHR);\r
-                               }\r
-                               else (void)fire_meteor(-1, GF_NETHER, y, x, 150, 1);\r
-                       }\r
-               }\r
-       }\r
-\r
-       /* Aggravate monsters. */\r
-       if (trap & (CHEST_ALARM))\r
-       {\r
-               msg_print(_("\82¯\82½\82½\82Ü\82µ\82¢\89¹\82ª\96Â\82è\8b¿\82¢\82½\81I", "An alarm sounds!"));\r
-               aggravate_monsters(0);\r
-       }\r
-\r
-       /* Explode */\r
-       if ((trap & (CHEST_EXPLODE)) && o_ptr->k_idx)\r
-       {\r
-               msg_print(_("\93Ë\91R\81A\94 \82ª\94\9a\94­\82µ\82½\81I", "There is a sudden explosion!"));\r
-               msg_print(_("\94 \82Ì\92\86\82Ì\95¨\82Í\82·\82×\82Ä\95²\81X\82É\8dÓ\82¯\8eU\82Á\82½\81I", "Everything inside the chest is destroyed!"));\r
-               o_ptr->pval = 0;\r
-               sound(SOUND_EXPLODE);\r
-               take_hit(DAMAGE_ATTACK, damroll(5, 8), _("\94\9a\94­\82·\82é\94 ", "an exploding chest"), -1);\r
-       }\r
-       /* Scatter contents. */\r
-       if ((trap & (CHEST_SCATTER)) && o_ptr->k_idx)\r
-       {\r
-               msg_print(_("\95ó\94 \82Ì\92\86\90g\82Í\83_\83\93\83W\83\87\83\93\82\82ã\82¤\82É\8eU\97\90\82µ\82½\81I", "The contents of the chest scatter all over the dungeon!"));\r
-               chest_death(TRUE, y, x, o_idx);\r
-               o_ptr->pval = 0;\r
-       }\r
-}\r
-\r
+
+#include "angband.h"
+
+/*!
+* @brief 箱からアイテムを引き出す /
+* Allocates objects upon opening a chest    -BEN-
+* @param scatter TRUEならばトラップによるアイテムの拡散処理
+* @param y 箱の存在するマスのY座標
+* @param x 箱の存在するマスのX座標
+* @param o_idx 箱のオブジェクトID
+* @return なし
+* @details
+* <pre>
+* Disperse treasures from the given chest, centered at (x,y).
+*
+* Small chests often contain "gold", while Large chests always contain
+* items.  Wooden chests contain 2 items, Iron chests contain 4 items,
+* and Steel chests contain 6 items.  The "value" of the items in a
+* chest is based on the "power" of the chest, which is in turn based
+* on the level on which the chest is generated.
+* </pre>
+*/
+void chest_death(bool scatter, POSITION y, POSITION x, OBJECT_IDX o_idx)
+{
+       int number;
+
+       bool small;
+       BIT_FLAGS mode = AM_GOOD;
+
+       object_type forge;
+       object_type *q_ptr;
+
+       object_type *o_ptr = &o_list[o_idx];
+
+
+       /* Small chests often hold "gold" */
+       small = (o_ptr->sval < SV_CHEST_MIN_LARGE);
+
+       /* Determine how much to drop (see above) */
+       number = (o_ptr->sval % SV_CHEST_MIN_LARGE) * 2;
+
+       if (o_ptr->sval == SV_CHEST_KANDUME)
+       {
+               number = 5;
+               small = FALSE;
+               mode |= AM_GREAT;
+               object_level = o_ptr->xtra3;
+       }
+       else
+       {
+               /* Determine the "value" of the items */
+               object_level = ABS(o_ptr->pval) + 10;
+       }
+
+       /* Zero pval means empty chest */
+       if (!o_ptr->pval) number = 0;
+
+       /* Opening a chest */
+       opening_chest = TRUE;
+
+       /* Drop some objects (non-chests) */
+       for (; number > 0; --number)
+       {
+               /* Get local object */
+               q_ptr = &forge;
+
+               /* Wipe the object */
+               object_wipe(q_ptr);
+
+               /* Small chests often drop gold */
+               if (small && (randint0(100) < 25))
+               {
+                       /* Make some gold */
+                       if (!make_gold(q_ptr)) continue;
+               }
+
+               /* Otherwise drop an item */
+               else
+               {
+                       /* Make a good object */
+                       if (!make_object(q_ptr, mode)) continue;
+               }
+
+               /* If chest scatters its contents, pick any floor square. */
+               if (scatter)
+               {
+                       int i;
+                       for (i = 0; i < 200; i++)
+                       {
+                               /* Pick a totally random spot. */
+                               y = randint0(MAX_HGT);
+                               x = randint0(MAX_WID);
+
+                               /* Must be an empty floor. */
+                               if (!cave_empty_bold(y, x)) continue;
+
+                               /* Place the object there. */
+                               (void)drop_near(q_ptr, -1, y, x);
+
+                               /* Done. */
+                               break;
+                       }
+               }
+               /* Normally, drop object near the chest. */
+               else (void)drop_near(q_ptr, -1, y, x);
+       }
+
+       /* Reset the object level */
+       object_level = base_level;
+
+       /* No longer opening a chest */
+       opening_chest = FALSE;
+
+       /* Empty */
+       o_ptr->pval = 0;
+
+       /* Known */
+       object_known(o_ptr);
+}
+
+
+/*!
+* @brief 箱のトラップ処理 /
+* Chests have traps too.
+* @param y 箱の存在するマスのY座標
+* @param x 箱の存在するマスのX座標
+* @param o_idx 箱のオブジェクトID
+* @return なし
+* @details
+* <pre>
+* Exploding chest destroys contents (and traps).
+* Note that the chest itself is never destroyed.
+* </pre>
+*/
+void chest_trap(POSITION y, POSITION x, OBJECT_IDX o_idx)
+{
+       int i, trap;
+
+       object_type *o_ptr = &o_list[o_idx];
+
+       int mon_level = o_ptr->xtra3;
+
+       /* Ignore disarmed chests */
+       if (o_ptr->pval <= 0) return;
+
+       /* Obtain the traps */
+       trap = chest_traps[o_ptr->pval];
+
+       /* Lose strength */
+       if (trap & (CHEST_LOSE_STR))
+       {
+               msg_print(_("仕掛けられていた小さな針に刺されてしまった!", "A small needle has pricked you!"));
+               take_hit(DAMAGE_NOESCAPE, damroll(1, 4), _("毒針", "a poison needle"), -1);
+               (void)do_dec_stat(A_STR);
+       }
+
+       /* Lose constitution */
+       if (trap & (CHEST_LOSE_CON))
+       {
+               msg_print(_("仕掛けられていた小さな針に刺されてしまった!", "A small needle has pricked you!"));
+               take_hit(DAMAGE_NOESCAPE, damroll(1, 4), _("毒針", "a poison needle"), -1);
+               (void)do_dec_stat(A_CON);
+       }
+
+       /* Poison */
+       if (trap & (CHEST_POISON))
+       {
+               msg_print(_("突如吹き出した緑色のガスに包み込まれた!", "A puff of green gas surrounds you!"));
+               if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()))
+               {
+                       (void)set_poisoned(p_ptr->poisoned + 10 + randint1(20));
+               }
+       }
+
+       /* Paralyze */
+       if (trap & (CHEST_PARALYZE))
+       {
+               msg_print(_("突如吹き出した黄色いガスに包み込まれた!", "A puff of yellow gas surrounds you!"));
+               if (!p_ptr->free_act)
+               {
+                       (void)set_paralyzed(p_ptr->paralyzed + 10 + randint1(20));
+               }
+       }
+
+       /* Summon monsters */
+       if (trap & (CHEST_SUMMON))
+       {
+               int num = 2 + randint1(3);
+               msg_print(_("突如吹き出した煙に包み込まれた!", "You are enveloped in a cloud of smoke!"));
+               for (i = 0; i < num; i++)
+               {
+                       if (randint1(100)<dun_level)
+                               activate_hi_summon(p_ptr->y, p_ptr->x, FALSE);
+                       else
+                               (void)summon_specific(0, y, x, mon_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
+               }
+       }
+
+       /* Elemental summon. */
+       if (trap & (CHEST_E_SUMMON))
+       {
+               msg_print(_("宝を守るためにエレメンタルが現れた!", "Elemental beings appear to protect their treasures!"));
+               for (i = 0; i < randint1(3) + 5; i++)
+               {
+                       (void)summon_specific(0, y, x, mon_level, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
+               }
+       }
+
+       /* Force clouds, then summon birds. */
+       if (trap & (CHEST_BIRD_STORM))
+       {
+               msg_print(_("鳥の群れがあなたを取り巻いた!", "A storm of birds swirls around you!"));
+
+               for (i = 0; i < randint1(3) + 3; i++)
+                       (void)fire_meteor(-1, GF_FORCE, y, x, o_ptr->pval / 5, 7);
+
+               for (i = 0; i < randint1(5) + o_ptr->pval / 5; i++)
+               {
+                       (void)summon_specific(0, y, x, mon_level, SUMMON_BIRD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
+               }
+       }
+
+       /* Various colorful summonings. */
+       if (trap & (CHEST_H_SUMMON))
+       {
+               /* Summon demons. */
+               if (one_in_(4))
+               {
+                       msg_print(_("炎と硫黄の雲の中に悪魔が姿を現した!", "Demons materialize in clouds of fire and brimstone!"));
+                       for (i = 0; i < randint1(3) + 2; i++)
+                       {
+                               (void)fire_meteor(-1, GF_FIRE, y, x, 10, 5);
+                               (void)summon_specific(0, y, x, mon_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
+                       }
+               }
+
+               /* Summon dragons. */
+               else if (one_in_(3))
+               {
+                       msg_print(_("暗闇にドラゴンの影がぼんやりと現れた!", "Draconic forms loom out of the darkness!"));
+                       for (i = 0; i < randint1(3) + 2; i++)
+                       {
+                               (void)summon_specific(0, y, x, mon_level, SUMMON_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
+                       }
+               }
+
+               /* Summon hybrids. */
+               else if (one_in_(2))
+               {
+                       msg_print(_("奇妙な姿の怪物が襲って来た!", "Creatures strange and twisted assault you!"));
+                       for (i = 0; i < randint1(5) + 3; i++)
+                       {
+                               (void)summon_specific(0, y, x, mon_level, SUMMON_HYBRID, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
+                       }
+               }
+
+               /* Summon vortices (scattered) */
+               else
+               {
+                       msg_print(_("渦巻が合体し、破裂した!", "Vortices coalesce and wreak destruction!"));
+                       for (i = 0; i < randint1(3) + 2; i++)
+                       {
+                               (void)summon_specific(0, y, x, mon_level, SUMMON_VORTEX, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
+                       }
+               }
+       }
+
+       /* Dispel player. */
+       if ((trap & (CHEST_RUNES_OF_EVIL)) && o_ptr->k_idx)
+       {
+               /* Determine how many nasty tricks can be played. */
+               int nasty_tricks_count = 4 + randint0(3);
+
+               /* Message. */
+               msg_print(_("恐ろしい声が響いた:  「暗闇が汝をつつまん!」", "Hideous voices bid:  'Let the darkness have thee!'"));
+               /* This is gonna hurt... */
+               for (; nasty_tricks_count > 0; nasty_tricks_count--)
+               {
+                       /* ...but a high saving throw does help a little. */
+                       if (randint1(100 + o_ptr->pval * 2) > p_ptr->skill_sav)
+                       {
+                               if (one_in_(6)) take_hit(DAMAGE_NOESCAPE, damroll(5, 20), _("破滅のトラップの宝箱", "a chest dispel-player trap"), -1);
+                               else if (one_in_(5)) (void)set_cut(p_ptr->cut + 200);
+                               else if (one_in_(4))
+                               {
+                                       if (!p_ptr->free_act)
+                                               (void)set_paralyzed(p_ptr->paralyzed + 2 +
+                                                       randint0(6));
+                                       else
+                                               (void)set_stun(p_ptr->stun + 10 +
+                                                       randint0(100));
+                               }
+                               else if (one_in_(3)) apply_disenchant(0);
+                               else if (one_in_(2))
+                               {
+                                       (void)do_dec_stat(A_STR);
+                                       (void)do_dec_stat(A_DEX);
+                                       (void)do_dec_stat(A_CON);
+                                       (void)do_dec_stat(A_INT);
+                                       (void)do_dec_stat(A_WIS);
+                                       (void)do_dec_stat(A_CHR);
+                               }
+                               else (void)fire_meteor(-1, GF_NETHER, y, x, 150, 1);
+                       }
+               }
+       }
+
+       /* Aggravate monsters. */
+       if (trap & (CHEST_ALARM))
+       {
+               msg_print(_("けたたましい音が鳴り響いた!", "An alarm sounds!"));
+               aggravate_monsters(0);
+       }
+
+       /* Explode */
+       if ((trap & (CHEST_EXPLODE)) && o_ptr->k_idx)
+       {
+               msg_print(_("突然、箱が爆発した!", "There is a sudden explosion!"));
+               msg_print(_("箱の中の物はすべて粉々に砕け散った!", "Everything inside the chest is destroyed!"));
+               o_ptr->pval = 0;
+               sound(SOUND_EXPLODE);
+               take_hit(DAMAGE_ATTACK, damroll(5, 8), _("爆発する箱", "an exploding chest"), -1);
+       }
+       /* Scatter contents. */
+       if ((trap & (CHEST_SCATTER)) && o_ptr->k_idx)
+       {
+               msg_print(_("宝箱の中身はダンジョンじゅうに散乱した!", "The contents of the chest scatter all over the dungeon!"));
+               chest_death(TRUE, y, x, o_idx);
+               o_ptr->pval = 0;
+       }
+}
+
index 4e9ba82..de8bd5d 100644 (file)
-#include "angband.h"\r
-\r
-/*!\r
-* @brief \83v\83\8c\83C\83\84\81[\82Ì\8bR\8fæ/\89º\94n\8f\88\97\9d\94»\92è\r
-* @param c_ptr \83v\83\8c\83C\83\84\81[\82Ì\88Ú\93®\90æ\83}\83X\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @param now_riding TRUE\82È\82ç\89º\94n\8f\88\97\9d\81AFALSE\82È\82ç\82Î\8bR\8fæ\8f\88\97\9d\r
-* @return \89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool player_can_ride_aux(cave_type *c_ptr, bool now_riding)\r
-{\r
-       bool p_can_enter;\r
-       bool old_character_xtra = character_xtra;\r
-       MONSTER_IDX old_riding = p_ptr->riding;\r
-       bool old_riding_ryoute = p_ptr->riding_ryoute;\r
-       bool old_old_riding_ryoute = p_ptr->old_riding_ryoute;\r
-       bool old_pf_ryoute = (p_ptr->pet_extra_flags & PF_RYOUTE) ? TRUE : FALSE;\r
-\r
-       /* Hack -- prevent "icky" message */\r
-       character_xtra = TRUE;\r
-\r
-       if (now_riding) p_ptr->riding = c_ptr->m_idx;\r
-       else\r
-       {\r
-               p_ptr->riding = 0;\r
-               p_ptr->pet_extra_flags &= ~(PF_RYOUTE);\r
-               p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;\r
-       }\r
-\r
-       calc_bonuses();\r
-\r
-       p_can_enter = player_can_enter(c_ptr->feat, CEM_P_CAN_ENTER_PATTERN);\r
-\r
-       p_ptr->riding = old_riding;\r
-       if (old_pf_ryoute) p_ptr->pet_extra_flags |= (PF_RYOUTE);\r
-       else p_ptr->pet_extra_flags &= ~(PF_RYOUTE);\r
-       p_ptr->riding_ryoute = old_riding_ryoute;\r
-       p_ptr->old_riding_ryoute = old_old_riding_ryoute;\r
-\r
-       calc_bonuses();\r
-\r
-       character_xtra = old_character_xtra;\r
-\r
-       return p_can_enter;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83y\83b\83g\82É\82È\82Á\82Ä\82¢\82é\83\82\83\93\83X\83^\81[\82ð\83\\81[\83g\82·\82é\82½\82ß\82Ì\94ä\8ar\8f\88\97\9d\r
-* @param u \83\82\83\93\83X\83^\81[\82Ì\8d\\91¢\91Ì\94z\97ñ\r
-* @param v \96¢\8eg\97p\r
-* @param a \94ä\8ar\91Î\8fÛ\82Ì\83\82\83\93\83X\83^\81[ID1\r
-* @param b \94ä\8ar\91Î\8fÛ\82Ì\83\82\83\93\83X\83^\81[ID2\r
-* @return 2\94Ô\96Ú\82ª\91å\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-static bool ang_sort_comp_pet_dismiss(vptr u, vptr v, int a, int b)\r
-{\r
-       u16b *who = (u16b*)(u);\r
-\r
-       int w1 = who[a];\r
-       int w2 = who[b];\r
-\r
-       monster_type *m_ptr1 = &m_list[w1];\r
-       monster_type *m_ptr2 = &m_list[w2];\r
-       monster_race *r_ptr1 = &r_info[m_ptr1->r_idx];\r
-       monster_race *r_ptr2 = &r_info[m_ptr2->r_idx];\r
-\r
-       /* Unused */\r
-       (void)v;\r
-\r
-       if (w1 == p_ptr->riding) return TRUE;\r
-       if (w2 == p_ptr->riding) return FALSE;\r
-\r
-       if (m_ptr1->nickname && !m_ptr2->nickname) return TRUE;\r
-       if (m_ptr2->nickname && !m_ptr1->nickname) return FALSE;\r
-\r
-       if (!m_ptr1->parent_m_idx && m_ptr2->parent_m_idx) return TRUE;\r
-       if (!m_ptr2->parent_m_idx && m_ptr1->parent_m_idx) return FALSE;\r
-\r
-       if ((r_ptr1->flags1 & RF1_UNIQUE) && !(r_ptr2->flags1 & RF1_UNIQUE)) return TRUE;\r
-       if ((r_ptr2->flags1 & RF1_UNIQUE) && !(r_ptr1->flags1 & RF1_UNIQUE)) return FALSE;\r
-\r
-       if (r_ptr1->level > r_ptr2->level) return TRUE;\r
-       if (r_ptr2->level > r_ptr1->level) return FALSE;\r
-\r
-       if (m_ptr1->hp > m_ptr2->hp) return TRUE;\r
-       if (m_ptr2->hp > m_ptr1->hp) return FALSE;\r
-\r
-       return w1 <= w2;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83y\83b\83g\82Ì\88Û\8e\9d\83R\83X\83g\8cv\8eZ\r
-* @return \88Û\8e\9d\83R\83X\83g(%)\r
-*/\r
-int calculate_upkeep(void)\r
-{\r
-       s32b old_friend_align = friend_align;\r
-       MONSTER_IDX m_idx;\r
-       bool have_a_unique = FALSE;\r
-       s32b total_friend_levels = 0;\r
-\r
-       total_friends = 0;\r
-       friend_align = 0;\r
-\r
-       for (m_idx = m_max - 1; m_idx >= 1; m_idx--)\r
-       {\r
-               monster_type *m_ptr;\r
-               monster_race *r_ptr;\r
-\r
-               m_ptr = &m_list[m_idx];\r
-               if (!m_ptr->r_idx) continue;\r
-               r_ptr = &r_info[m_ptr->r_idx];\r
-\r
-               if (is_pet(m_ptr))\r
-               {\r
-                       total_friends++;\r
-                       if (r_ptr->flags1 & RF1_UNIQUE)\r
-                       {\r
-                               if (p_ptr->pclass == CLASS_CAVALRY)\r
-                               {\r
-                                       if (p_ptr->riding == m_idx)\r
-                                               total_friend_levels += (r_ptr->level + 5) * 2;\r
-                                       else if (!have_a_unique && (r_info[m_ptr->r_idx].flags7 & RF7_RIDING))\r
-                                               total_friend_levels += (r_ptr->level + 5) * 7 / 2;\r
-                                       else\r
-                                               total_friend_levels += (r_ptr->level + 5) * 10;\r
-                                       have_a_unique = TRUE;\r
-                               }\r
-                               else\r
-                                       total_friend_levels += (r_ptr->level + 5) * 10;\r
-                       }\r
-                       else\r
-                               total_friend_levels += r_ptr->level;\r
-\r
-                       /* Determine pet alignment */\r
-                       if (r_ptr->flags3 & RF3_GOOD) friend_align += r_ptr->level;\r
-                       if (r_ptr->flags3 & RF3_EVIL) friend_align -= r_ptr->level;\r
-               }\r
-       }\r
-       if (old_friend_align != friend_align) p_ptr->update |= (PU_BONUS);\r
-       if (total_friends)\r
-       {\r
-               int upkeep_factor;\r
-               upkeep_factor = (total_friend_levels - (p_ptr->lev * 80 / (cp_ptr->pet_upkeep_div)));\r
-               if (upkeep_factor < 0) upkeep_factor = 0;\r
-               if (upkeep_factor > 1000) upkeep_factor = 1000;\r
-               return upkeep_factor;\r
-       }\r
-       else\r
-               return 0;\r
-}\r
-\r
-/*!\r
-* @brief \83y\83b\83g\82ð\8aJ\95ú\82·\82é\83R\83}\83\93\83h\82Ì\83\81\83C\83\93\83\8b\81[\83`\83\93\r
-* @return \82È\82µ\r
-*/\r
-void do_cmd_pet_dismiss(void)\r
-{\r
-       monster_type    *m_ptr;\r
-       bool            all_pets = FALSE;\r
-       MONSTER_IDX pet_ctr;\r
-       int i;\r
-       int Dismissed = 0;\r
-\r
-       MONSTER_IDX *who;\r
-       u16b dummy_why;\r
-       int max_pet = 0;\r
-       bool_hack cu, cv;\r
-\r
-       cu = Term->scr->cu;\r
-       cv = Term->scr->cv;\r
-       Term->scr->cu = 0;\r
-       Term->scr->cv = 1;\r
-\r
-       /* Allocate the "who" array */\r
-       C_MAKE(who, max_m_idx, MONSTER_IDX);\r
-\r
-       /* Process the monsters (backwards) */\r
-       for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)\r
-       {\r
-               if (is_pet(&m_list[pet_ctr]))\r
-                       who[max_pet++] = pet_ctr;\r
-       }\r
-\r
-       /* Select the sort method */\r
-       ang_sort_comp = ang_sort_comp_pet_dismiss;\r
-       ang_sort_swap = ang_sort_swap_hook;\r
-\r
-       ang_sort(who, &dummy_why, max_pet);\r
-\r
-       /* Process the monsters (backwards) */\r
-       for (i = 0; i < max_pet; i++)\r
-       {\r
-               bool delete_this;\r
-               char friend_name[80];\r
-               bool kakunin;\r
-\r
-               /* Access the monster */\r
-               pet_ctr = who[i];\r
-               m_ptr = &m_list[pet_ctr];\r
-\r
-               delete_this = FALSE;\r
-               kakunin = ((pet_ctr == p_ptr->riding) || (m_ptr->nickname));\r
-               monster_desc(friend_name, m_ptr, MD_ASSUME_VISIBLE);\r
-\r
-               if (!all_pets)\r
-               {\r
-                       /* Hack -- health bar for this monster */\r
-                       health_track(pet_ctr);\r
-\r
-                       /* Hack -- handle stuff */\r
-                       handle_stuff();\r
-\r
-                       msg_format(_("%s\82ð\95ú\82µ\82Ü\82·\82©\81H [Yes/No/Unnamed (%d\91Ì)]", "Dismiss %s? [Yes/No/Unnamed (%d remain)]"), friend_name, max_pet - i);\r
-\r
-                       if (m_ptr->ml)\r
-                               move_cursor_relative(m_ptr->fy, m_ptr->fx);\r
-\r
-                       while (TRUE)\r
-                       {\r
-                               char ch = inkey();\r
-\r
-                               if (ch == 'Y' || ch == 'y')\r
-                               {\r
-                                       delete_this = TRUE;\r
-\r
-                                       if (kakunin)\r
-                                       {\r
-                                               msg_format(_("\96{\93\96\82É\82æ\82ë\82µ\82¢\82Å\82·\82©\81H (%s) ", "Are you sure? (%s) "), friend_name);\r
-                                               ch = inkey();\r
-                                               if (ch != 'Y' && ch != 'y')\r
-                                                       delete_this = FALSE;\r
-                                       }\r
-                                       break;\r
-                               }\r
-\r
-                               if (ch == 'U' || ch == 'u')\r
-                               {\r
-                                       all_pets = TRUE;\r
-                                       break;\r
-                               }\r
-\r
-                               if (ch == ESCAPE || ch == 'N' || ch == 'n')\r
-                                       break;\r
-\r
-                               bell();\r
-                       }\r
-               }\r
-\r
-               if ((all_pets && !kakunin) || (!all_pets && delete_this))\r
-               {\r
-                       if (record_named_pet && m_ptr->nickname)\r
-                       {\r
-                               char m_name[80];\r
-\r
-                               monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);\r
-                               do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_DISMISS, m_name);\r
-                       }\r
-\r
-                       if (pet_ctr == p_ptr->riding)\r
-                       {\r
-                               msg_format(_("%s\82©\82ç\8d~\82è\82½\81B", "You have got off %s. "), friend_name);\r
-\r
-                               p_ptr->riding = 0;\r
-\r
-                               /* Update the monsters */\r
-                               p_ptr->update |= (PU_BONUS | PU_MONSTERS);\r
-                               p_ptr->redraw |= (PR_EXTRA | PR_UHEALTH);\r
-                       }\r
-\r
-                       /* HACK : Add the line to message buffer */\r
-                       msg_format(_("%s \82ð\95ú\82µ\82½\81B", "Dismissed %s."), friend_name);\r
-                       p_ptr->window |= (PW_MESSAGE);\r
-                       window_stuff();\r
-\r
-                       delete_monster_idx(pet_ctr);\r
-                       Dismissed++;\r
-               }\r
-       }\r
-\r
-       Term->scr->cu = cu;\r
-       Term->scr->cv = cv;\r
-       Term_fresh();\r
-\r
-       C_KILL(who, max_m_idx, MONSTER_IDX);\r
-\r
-#ifdef JP\r
-       msg_format("%d \91Ì\82Ì\83y\83b\83g\82ð\95ú\82µ\82Ü\82µ\82½\81B", Dismissed);\r
-#else\r
-       msg_format("You have dismissed %d pet%s.", Dismissed,\r
-               (Dismissed == 1 ? "" : "s"));\r
-#endif\r
-       if (Dismissed == 0 && all_pets)\r
-               msg_print(_("'U'nnamed \82Í\81A\8fæ\94n\88È\8aO\82Ì\96¼\91O\82Ì\82È\82¢\83y\83b\83g\82¾\82¯\82ð\91S\82Ä\89ð\95ú\82µ\82Ü\82·\81B", "'U'nnamed means all your pets except named pets and your mount."));\r
-}\r
-\r
-\r
-\r
-/*!\r
-* @brief \83y\83b\83g\82©\82ç\8bR\8fæ/\89º\94n\82·\82é\83R\83}\83\93\83h\82Ì\83\81\83C\83\93\83\8b\81[\83`\83\93 /\r
-* @param force \8b­\90§\93I\82É\8bR\8fæ/\89º\94n\82·\82é\82È\82ç\82ÎTRUE\r
-* @return \8bR\8fæ/\89º\94n\82Å\82«\82½\82çTRUE\r
-*/\r
-bool do_riding(bool force)\r
-{\r
-       int x, y, dir = 0;\r
-       cave_type *c_ptr;\r
-       monster_type *m_ptr;\r
-\r
-       if (!get_rep_dir2(&dir)) return FALSE;\r
-       y = p_ptr->y + ddy[dir];\r
-       x = p_ptr->x + ddx[dir];\r
-       c_ptr = &cave[y][x];\r
-\r
-       if (p_ptr->special_defense & KATA_MUSOU) set_action(ACTION_NONE);\r
-\r
-       if (p_ptr->riding)\r
-       {\r
-               /* Skip non-empty grids */\r
-               if (!player_can_ride_aux(c_ptr, FALSE))\r
-               {\r
-                       msg_print(_("\82»\82¿\82ç\82É\82Í\8d~\82è\82ç\82ê\82Ü\82¹\82ñ\81B", "You cannot go to that direction."));\r
-                       return FALSE;\r
-               }\r
-\r
-               if (!pattern_seq(p_ptr->y, p_ptr->x, y, x)) return FALSE;\r
-\r
-               if (c_ptr->m_idx)\r
-               {\r
-                       /* Take a turn */\r
-                       p_ptr->energy_use = 100;\r
-\r
-                       /* Message */\r
-                       msg_print(_("\83\82\83\93\83X\83^\81[\82ª\97§\82¿\82Ó\82³\82ª\82Á\82Ä\82¢\82é\81I", "There is a monster in the way!"));\r
-\r
-                       py_attack(y, x, 0);\r
-                       return FALSE;\r
-               }\r
-\r
-               p_ptr->riding = 0;\r
-               p_ptr->pet_extra_flags &= ~(PF_RYOUTE);\r
-               p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;\r
-       }\r
-       else\r
-       {\r
-               if (p_ptr->confused)\r
-               {\r
-                       msg_print(_("\8d¬\97\90\82µ\82Ä\82¢\82Ä\8fæ\82ê\82È\82¢\81I", "You are too confused!"));\r
-                       return FALSE;\r
-               }\r
-\r
-               m_ptr = &m_list[c_ptr->m_idx];\r
-\r
-               if (!c_ptr->m_idx || !m_ptr->ml)\r
-               {\r
-                       msg_print(_("\82»\82Ì\8fê\8f\8a\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "Here is no monster."));\r
-                       return FALSE;\r
-               }\r
-               if (!is_pet(m_ptr) && !force)\r
-               {\r
-                       msg_print(_("\82»\82Ì\83\82\83\93\83X\83^\81[\82Í\83y\83b\83g\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81B", "That monster is not a pet."));\r
-                       return FALSE;\r
-               }\r
-               if (!(r_info[m_ptr->r_idx].flags7 & RF7_RIDING))\r
-               {\r
-                       msg_print(_("\82»\82Ì\83\82\83\93\83X\83^\81[\82É\82Í\8fæ\82ê\82È\82³\82»\82¤\82¾\81B", "This monster doesn't seem suitable for riding."));\r
-                       return FALSE;\r
-               }\r
-\r
-               if (!pattern_seq(p_ptr->y, p_ptr->x, y, x)) return FALSE;\r
-\r
-               if (!player_can_ride_aux(c_ptr, TRUE))\r
-               {\r
-                       /* Feature code (applying "mimic" field) */\r
-                       feature_type *f_ptr = &f_info[get_feat_mimic(c_ptr)];\r
-#ifdef JP\r
-                       msg_format("\82»\82Ì\83\82\83\93\83X\83^\81[\82Í%s\82Ì%s\82É\82¢\82é\81B", f_name + f_ptr->name,\r
-                               ((!have_flag(f_ptr->flags, FF_MOVE) && !have_flag(f_ptr->flags, FF_CAN_FLY)) ||\r
-                                       (!have_flag(f_ptr->flags, FF_LOS) && !have_flag(f_ptr->flags, FF_TREE))) ?\r
-                               "\92\86" : "\8fã");\r
-#else\r
-                       msg_format("This monster is %s the %s.",\r
-                               ((!have_flag(f_ptr->flags, FF_MOVE) && !have_flag(f_ptr->flags, FF_CAN_FLY)) ||\r
-                                       (!have_flag(f_ptr->flags, FF_LOS) && !have_flag(f_ptr->flags, FF_TREE))) ?\r
-                               "in" : "on", f_name + f_ptr->name);\r
-#endif\r
-\r
-                       return FALSE;\r
-               }\r
-               if (r_info[m_ptr->r_idx].level > randint1((p_ptr->skill_exp[GINOU_RIDING] / 50 + p_ptr->lev / 2 + 20)))\r
-               {\r
-                       msg_print(_("\82¤\82Ü\82­\8fæ\82ê\82È\82©\82Á\82½\81B", "You failed to ride."));\r
-                       p_ptr->energy_use = 100;\r
-                       return FALSE;\r
-               }\r
-\r
-               if (MON_CSLEEP(m_ptr))\r
-               {\r
-                       char m_name[80];\r
-                       monster_desc(m_name, m_ptr, 0);\r
-                       (void)set_monster_csleep(c_ptr->m_idx, 0);\r
-                       msg_format(_("%s\82ð\8bN\82±\82µ\82½\81B", "You have waked %s up."), m_name);\r
-               }\r
-\r
-               if (p_ptr->action == ACTION_KAMAE) set_action(ACTION_NONE);\r
-\r
-               p_ptr->riding = c_ptr->m_idx;\r
-\r
-               /* Hack -- remove tracked monster */\r
-               if (p_ptr->riding == p_ptr->health_who) health_track(0);\r
-       }\r
-\r
-       p_ptr->energy_use = 100;\r
-\r
-       /* Mega-Hack -- Forget the view and lite */\r
-       p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);\r
-\r
-       /* Update the monsters */\r
-       p_ptr->update |= (PU_BONUS);\r
-\r
-       /* Redraw map */\r
-       p_ptr->redraw |= (PR_MAP | PR_EXTRA);\r
-\r
-       p_ptr->redraw |= (PR_UHEALTH);\r
-\r
-       /* Move the player */\r
-       (void)move_player_effect(y, x, MPE_HANDLE_STUFF | MPE_ENERGY_USE | MPE_DONT_PICKUP | MPE_DONT_SWAP_MON);\r
-\r
-       return TRUE;\r
-}\r
-\r
-/*!\r
-* @brief \83y\83b\83g\82É\96¼\91O\82ð\82Â\82¯\82é\83R\83}\83\93\83h\82Ì\83\81\83C\83\93\83\8b\81[\83`\83\93\r
-* @return \82È\82µ\r
-*/\r
-static void do_name_pet(void)\r
-{\r
-       monster_type *m_ptr;\r
-       char out_val[20];\r
-       char m_name[80];\r
-       bool old_name = FALSE;\r
-       bool old_target_pet = target_pet;\r
-\r
-       target_pet = TRUE;\r
-       if (!target_set(TARGET_KILL))\r
-       {\r
-               target_pet = old_target_pet;\r
-               return;\r
-       }\r
-       target_pet = old_target_pet;\r
-\r
-       if (cave[target_row][target_col].m_idx)\r
-       {\r
-               m_ptr = &m_list[cave[target_row][target_col].m_idx];\r
-\r
-               if (!is_pet(m_ptr))\r
-               {\r
-                       /* Message */\r
-                       msg_print(_("\82»\82Ì\83\82\83\93\83X\83^\81[\82Í\83y\83b\83g\82Å\82Í\82È\82¢\81B", "This monster is not a pet."));\r
-                       return;\r
-               }\r
-               if (r_info[m_ptr->r_idx].flags1 & RF1_UNIQUE)\r
-               {\r
-                       msg_print(_("\82»\82Ì\83\82\83\93\83X\83^\81[\82Ì\96¼\91O\82Í\95Ï\82¦\82ç\82ê\82È\82¢\81I", "You cannot change name of this monster!"));\r
-                       return;\r
-               }\r
-               monster_desc(m_name, m_ptr, 0);\r
-\r
-               /* Message */\r
-               msg_format(_("%s\82É\96¼\91O\82ð\82Â\82¯\82é\81B", "Name %s."), m_name);\r
-               msg_print(NULL);\r
-\r
-               /* Start with nothing */\r
-               strcpy(out_val, "");\r
-\r
-               /* Use old inscription */\r
-               if (m_ptr->nickname)\r
-               {\r
-                       /* Start with the old inscription */\r
-                       strcpy(out_val, quark_str(m_ptr->nickname));\r
-                       old_name = TRUE;\r
-               }\r
-\r
-               /* Get a new inscription (possibly empty) */\r
-               if (get_string(_("\96¼\91O: ", "Name: "), out_val, 15))\r
-               {\r
-                       if (out_val[0])\r
-                       {\r
-                               /* Save the inscription */\r
-                               m_ptr->nickname = quark_add(out_val);\r
-                               if (record_named_pet)\r
-                               {\r
-                                       monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);\r
-                                       do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_NAME, m_name);\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               if (record_named_pet && old_name)\r
-                               {\r
-                                       monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);\r
-                                       do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_UNNAME, m_name);\r
-                               }\r
-                               m_ptr->nickname = 0;\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83y\83b\83g\82É\8aÖ\82·\82é\83R\83}\83\93\83h\83\8a\83X\83g\82Ì\83\81\83C\83\93\83\8b\81[\83`\83\93 /\r
-* Issue a pet command\r
-* @return \82È\82µ\r
-*/\r
-void do_cmd_pet(void)\r
-{\r
-       COMMAND_CODE i = 0;\r
-       int                     num;\r
-       int                     powers[36];\r
-       cptr                    power_desc[36];\r
-       bool                    flag, redraw;\r
-       char                    choice;\r
-       char                    out_val[160];\r
-       int                     pet_ctr;\r
-       monster_type    *m_ptr;\r
-\r
-       PET_COMMAND_IDX mode = 0;\r
-\r
-       char buf[160];\r
-       char target_buf[160];\r
-\r
-       int menu_line = use_menu ? 1 : 0;\r
-\r
-       num = 0;\r
-\r
-       power_desc[num] = _("\83y\83b\83g\82ð\95ú\82·", "dismiss pets");\r
-       powers[num++] = PET_DISMISS;\r
-\r
-#ifdef JP\r
-       sprintf(target_buf, "\83y\83b\83g\82Ì\83^\81[\83Q\83b\83g\82ð\8ew\92è (\8c»\8dÝ\81F%s)",\r
-               (pet_t_m_idx ? (p_ptr->image ? "\89½\82©\8aï\96­\82È\95¨" : (r_name + r_info[m_list[pet_t_m_idx].ap_r_idx].name)) : "\8ew\92è\82È\82µ"));\r
-#else\r
-       sprintf(target_buf, "specify a target of pet (now:%s)",\r
-               (pet_t_m_idx ? (p_ptr->image ? "something strange" : (r_name + r_info[m_list[pet_t_m_idx].ap_r_idx].name)) : "nothing"));\r
-#endif\r
-       power_desc[num] = target_buf;\r
-       powers[num++] = PET_TARGET;\r
-       power_desc[num] = _("\8bß\82­\82É\82¢\82ë", "stay close");\r
-\r
-       if (p_ptr->pet_follow_distance == PET_CLOSE_DIST) mode = num;\r
-       powers[num++] = PET_STAY_CLOSE;\r
-       power_desc[num] = _("\82Â\82¢\82Ä\97\88\82¢", "follow me");\r
-\r
-       if (p_ptr->pet_follow_distance == PET_FOLLOW_DIST) mode = num;\r
-       powers[num++] = PET_FOLLOW_ME;\r
-       power_desc[num] = _("\93G\82ð\8c©\82Â\82¯\82Ä\93|\82¹", "seek and destroy");\r
-\r
-       if (p_ptr->pet_follow_distance == PET_DESTROY_DIST) mode = num;\r
-       powers[num++] = PET_SEEK_AND_DESTROY;\r
-       power_desc[num] = _("\8f­\82µ\97£\82ê\82Ä\82¢\82ë", "give me space");\r
-\r
-       if (p_ptr->pet_follow_distance == PET_SPACE_DIST) mode = num;\r
-       powers[num++] = PET_ALLOW_SPACE;\r
-       power_desc[num] = _("\97£\82ê\82Ä\82¢\82ë", "stay away");\r
-\r
-       if (p_ptr->pet_follow_distance == PET_AWAY_DIST) mode = num;\r
-       powers[num++] = PET_STAY_AWAY;\r
-\r
-       if (p_ptr->pet_extra_flags & PF_OPEN_DOORS)\r
-       {\r
-               power_desc[num] = _("\83h\83A\82ð\8aJ\82¯\82é (\8c»\8dÝ:ON)", "pets open doors (now On)");\r
-       }\r
-       else\r
-       {\r
-               power_desc[num] = _("\83h\83A\82ð\8aJ\82¯\82é (\8c»\8dÝ:OFF)", "pets open doors (now Off)");\r
-       }\r
-       powers[num++] = PET_OPEN_DOORS;\r
-\r
-       if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)\r
-       {\r
-               power_desc[num] = _("\83A\83C\83e\83\80\82ð\8fE\82¤ (\8c»\8dÝ:ON)", "pets pick up items (now On)");\r
-       }\r
-       else\r
-       {\r
-               power_desc[num] = _("\83A\83C\83e\83\80\82ð\8fE\82¤ (\8c»\8dÝ:OFF)", "pets pick up items (now Off)");\r
-       }\r
-       powers[num++] = PET_TAKE_ITEMS;\r
-\r
-       if (p_ptr->pet_extra_flags & PF_TELEPORT)\r
-       {\r
-               power_desc[num] = _("\83e\83\8c\83|\81[\83g\8cn\96\82\96@\82ð\8eg\82¤ (\8c»\8dÝ:ON)", "allow teleport (now On)");\r
-       }\r
-       else\r
-       {\r
-               power_desc[num] = _("\83e\83\8c\83|\81[\83g\8cn\96\82\96@\82ð\8eg\82¤ (\8c»\8dÝ:OFF)", "allow teleport (now Off)");\r
-       }\r
-       powers[num++] = PET_TELEPORT;\r
-\r
-       if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL)\r
-       {\r
-               power_desc[num] = _("\8dU\8c\82\96\82\96@\82ð\8eg\82¤ (\8c»\8dÝ:ON)", "allow cast attack spell (now On)");\r
-       }\r
-       else\r
-       {\r
-               power_desc[num] = _("\8dU\8c\82\96\82\96@\82ð\8eg\82¤ (\8c»\8dÝ:OFF)", "allow cast attack spell (now Off)");\r
-       }\r
-       powers[num++] = PET_ATTACK_SPELL;\r
-\r
-       if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL)\r
-       {\r
-               power_desc[num] = _("\8f¢\8a«\96\82\96@\82ð\8eg\82¤ (\8c»\8dÝ:ON)", "allow cast summon spell (now On)");\r
-       }\r
-       else\r
-       {\r
-               power_desc[num] = _("\8f¢\8a«\96\82\96@\82ð\8eg\82¤ (\8c»\8dÝ:OFF)", "allow cast summon spell (now Off)");\r
-       }\r
-       powers[num++] = PET_SUMMON_SPELL;\r
-\r
-       if (p_ptr->pet_extra_flags & PF_BALL_SPELL)\r
-       {\r
-               power_desc[num] = _("\83v\83\8c\83C\83\84\81[\82ð\8aª\82«\8d\9e\82Þ\94Í\88Í\96\82\96@\82ð\8eg\82¤ (\8c»\8dÝ:ON)", "allow involve player in area spell (now On)");\r
-       }\r
-       else\r
-       {\r
-               power_desc[num] = _("\83v\83\8c\83C\83\84\81[\82ð\8aª\82«\8d\9e\82Þ\94Í\88Í\96\82\96@\82ð\8eg\82¤ (\8c»\8dÝ:OFF)", "allow involve player in area spell (now Off)");\r
-       }\r
-       powers[num++] = PET_BALL_SPELL;\r
-\r
-       if (p_ptr->riding)\r
-       {\r
-               power_desc[num] = _("\83y\83b\83g\82©\82ç\8d~\82è\82é", "get off a pet");\r
-       }\r
-       else\r
-       {\r
-               power_desc[num] = _("\83y\83b\83g\82É\8fæ\82é", "ride a pet");\r
-       }\r
-       powers[num++] = PET_RIDING;\r
-       power_desc[num] = _("\83y\83b\83g\82É\96¼\91O\82ð\82Â\82¯\82é", "name pets");\r
-       powers[num++] = PET_NAME;\r
-\r
-       if (p_ptr->riding)\r
-       {\r
-               if ((p_ptr->migite && (empty_hands(FALSE) == EMPTY_HAND_LARM) &&\r
-                       object_allow_two_hands_wielding(&inventory[INVEN_RARM])) ||\r
-                       (p_ptr->hidarite && (empty_hands(FALSE) == EMPTY_HAND_RARM) &&\r
-                               object_allow_two_hands_wielding(&inventory[INVEN_LARM])))\r
-               {\r
-                       if (p_ptr->pet_extra_flags & PF_RYOUTE)\r
-                       {\r
-                               power_desc[num] = _("\95\90\8aí\82ð\95Ð\8eè\82Å\8e\9d\82Â", "use one hand to control a riding pet");\r
-                       }\r
-                       else\r
-                       {\r
-                               power_desc[num] = _("\95\90\8aí\82ð\97¼\8eè\82Å\8e\9d\82Â", "use both hands for a weapon");\r
-                       }\r
-\r
-                       powers[num++] = PET_RYOUTE;\r
-               }\r
-               else\r
-               {\r
-                       switch (p_ptr->pclass)\r
-                       {\r
-                       case CLASS_MONK:\r
-                       case CLASS_FORCETRAINER:\r
-                       case CLASS_BERSERKER:\r
-                               if (empty_hands(FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))\r
-                               {\r
-                                       if (p_ptr->pet_extra_flags & PF_RYOUTE)\r
-                                       {\r
-                                               power_desc[num] = _("\95Ð\8eè\82Å\8ai\93¬\82·\82é", "use one hand to control a riding pet");\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               power_desc[num] = _("\97¼\8eè\82Å\8ai\93¬\82·\82é", "use both hands for melee");\r
-                                       }\r
-\r
-                                       powers[num++] = PET_RYOUTE;\r
-                               }\r
-                               else if ((empty_hands(FALSE) != EMPTY_HAND_NONE) && !buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))\r
-                               {\r
-                                       if (p_ptr->pet_extra_flags & PF_RYOUTE)\r
-                                       {\r
-                                               power_desc[num] = _("\8ai\93¬\82ð\8ds\82í\82È\82¢", "use one hand to control a riding pet");\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               power_desc[num] = _("\8ai\93¬\82ð\8ds\82¤", "use one hand for melee");\r
-                                       }\r
-\r
-                                       powers[num++] = PET_RYOUTE;\r
-                               }\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-#ifdef ALLOW_REPEAT\r
-       if (!(repeat_pull(&i) && (i >= 0) && (i < num)))\r
-       {\r
-#endif /* ALLOW_REPEAT */\r
-\r
-               /* Nothing chosen yet */\r
-               flag = FALSE;\r
-\r
-               /* No redraw yet */\r
-               redraw = FALSE;\r
-\r
-               if (use_menu)\r
-               {\r
-                       /* Save the screen */\r
-                       screen_save();\r
-\r
-                       /* Build a prompt */\r
-                       strnfmt(out_val, 78, _("(\83R\83}\83\93\83h\81AESC=\8fI\97¹) \83R\83}\83\93\83h\82ð\91I\82ñ\82Å\82­\82¾\82³\82¢:", "(Command, ESC=exit) Choose command from menu."));\r
-               }\r
-               else\r
-               {\r
-                       /* Build a prompt */\r
-                       strnfmt(out_val, 78,\r
-                               _("(\83R\83}\83\93\83h %c-%c\81A'*'=\88ê\97\97\81AESC=\8fI\97¹) \83R\83}\83\93\83h\82ð\91I\82ñ\82Å\82­\82¾\82³\82¢:", "(Command %c-%c, *=List, ESC=exit) Select a command: "),\r
-                               I2A(0), I2A(num - 1));\r
-               }\r
-\r
-               choice = (always_show_list || use_menu) ? ESCAPE : 1;\r
-\r
-               /* Get a command from the user */\r
-               while (!flag)\r
-               {\r
-                       int ask = TRUE;\r
-\r
-                       if (choice == ESCAPE) choice = ' ';\r
-                       else if (!get_com(out_val, &choice, TRUE)) break;\r
-\r
-                       if (use_menu && (choice != ' '))\r
-                       {\r
-                               switch (choice)\r
-                               {\r
-                               case '0':\r
-                                       screen_load();\r
-                                       return;\r
-\r
-                               case '8':\r
-                               case 'k':\r
-                               case 'K':\r
-                                       menu_line += (num - 1);\r
-                                       break;\r
-\r
-                               case '2':\r
-                               case 'j':\r
-                               case 'J':\r
-                                       menu_line++;\r
-                                       break;\r
-\r
-                               case '4':\r
-                               case 'h':\r
-                               case 'H':\r
-                                       menu_line = 1;\r
-                                       break;\r
-\r
-                               case '6':\r
-                               case 'l':\r
-                               case 'L':\r
-                                       menu_line = num;\r
-                                       break;\r
-\r
-                               case 'x':\r
-                               case 'X':\r
-                               case '\r':\r
-                               case '\n':\r
-                                       i = menu_line - 1;\r
-                                       ask = FALSE;\r
-                                       break;\r
-                               }\r
-                               if (menu_line > num) menu_line -= num;\r
-                       }\r
-\r
-                       /* Request redraw */\r
-                       if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))\r
-                       {\r
-                               /* Show the list */\r
-                               if (!redraw || use_menu)\r
-                               {\r
-                                       byte y = 1, x = 0;\r
-                                       PET_COMMAND_IDX ctr = 0;\r
-\r
-                                       /* Show list */\r
-                                       redraw = TRUE;\r
-\r
-                                       /* Save the screen */\r
-                                       if (!use_menu) screen_save();\r
-\r
-                                       prt("", y++, x);\r
-\r
-                                       /* Print list */\r
-                                       for (ctr = 0; ctr < num; ctr++)\r
-                                       {\r
-                                               /* Letter/number for power selection */\r
-                                               if (use_menu)\r
-                                                       sprintf(buf, "%c%s ", (ctr == mode) ? '*' : ' ', (ctr == (menu_line - 1)) ? _("\81t", "> ") : "  ");\r
-                                               else\r
-                                                       sprintf(buf, "%c%c) ", (ctr == mode) ? '*' : ' ', I2A(ctr));\r
-\r
-                                               strcat(buf, power_desc[ctr]);\r
-\r
-                                               prt(buf, y + ctr, x);\r
-                                       }\r
-\r
-                                       prt("", y + MIN(ctr, 17), x);\r
-                               }\r
-\r
-                               /* Hide the list */\r
-                               else\r
-                               {\r
-                                       /* Hide list */\r
-                                       redraw = FALSE;\r
-\r
-                                       /* Restore the screen */\r
-                                       screen_load();\r
-                               }\r
-\r
-                               /* Redo asking */\r
-                               continue;\r
-                       }\r
-\r
-                       if (!use_menu)\r
-                       {\r
-                               /* Note verify */\r
-                               ask = (isupper(choice));\r
-\r
-                               /* Lowercase */\r
-                               if (ask) choice = (char)tolower(choice);\r
-\r
-                               /* Extract request */\r
-                               i = (islower(choice) ? A2I(choice) : -1);\r
-                       }\r
-\r
-                       /* Totally Illegal */\r
-                       if ((i < 0) || (i >= num))\r
-                       {\r
-                               bell();\r
-                               continue;\r
-                       }\r
-\r
-                       /* Verify it */\r
-                       if (ask)\r
-                       {\r
-                               /* Prompt */\r
-                               strnfmt(buf, 78, _("%s\82ð\8eg\82¢\82Ü\82·\82©\81H ", "Use %s? "), power_desc[i]);\r
-\r
-                               /* Belay that order */\r
-                               if (!get_check(buf)) continue;\r
-                       }\r
-\r
-                       /* Stop the loop */\r
-                       flag = TRUE;\r
-               }\r
-\r
-               /* Restore the screen */\r
-               if (redraw) screen_load();\r
-\r
-               /* Abort if needed */\r
-               if (!flag)\r
-               {\r
-                       p_ptr->energy_use = 0;\r
-                       return;\r
-               }\r
-\r
-#ifdef ALLOW_REPEAT\r
-               repeat_push(i);\r
-       }\r
-#endif /* ALLOW_REPEAT */\r
-\r
-       switch (powers[i])\r
-       {\r
-       case PET_DISMISS: /* Dismiss pets */\r
-       {\r
-               /* Check pets (backwards) */\r
-               for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)\r
-               {\r
-                       /* Player has pet */\r
-                       if (is_pet(&m_list[pet_ctr])) break;\r
-               }\r
-\r
-               if (!pet_ctr)\r
-               {\r
-                       msg_print(_("\83y\83b\83g\82ª\82¢\82È\82¢\81I", "You have no pets!"));\r
-                       break;\r
-               }\r
-               do_cmd_pet_dismiss();\r
-               (void)calculate_upkeep();\r
-               break;\r
-       }\r
-       case PET_TARGET:\r
-       {\r
-               project_length = -1;\r
-               if (!target_set(TARGET_KILL)) pet_t_m_idx = 0;\r
-               else\r
-               {\r
-                       cave_type *c_ptr = &cave[target_row][target_col];\r
-                       if (c_ptr->m_idx && (m_list[c_ptr->m_idx].ml))\r
-                       {\r
-                               pet_t_m_idx = cave[target_row][target_col].m_idx;\r
-                               p_ptr->pet_follow_distance = PET_DESTROY_DIST;\r
-                       }\r
-                       else pet_t_m_idx = 0;\r
-               }\r
-               project_length = 0;\r
-\r
-               break;\r
-       }\r
-       /* Call pets */\r
-       case PET_STAY_CLOSE:\r
-       {\r
-               p_ptr->pet_follow_distance = PET_CLOSE_DIST;\r
-               pet_t_m_idx = 0;\r
-               break;\r
-       }\r
-       /* "Follow Me" */\r
-       case PET_FOLLOW_ME:\r
-       {\r
-               p_ptr->pet_follow_distance = PET_FOLLOW_DIST;\r
-               pet_t_m_idx = 0;\r
-               break;\r
-       }\r
-       /* "Seek and destoy" */\r
-       case PET_SEEK_AND_DESTROY:\r
-       {\r
-               p_ptr->pet_follow_distance = PET_DESTROY_DIST;\r
-               break;\r
-       }\r
-       /* "Give me space" */\r
-       case PET_ALLOW_SPACE:\r
-       {\r
-               p_ptr->pet_follow_distance = PET_SPACE_DIST;\r
-               break;\r
-       }\r
-       /* "Stay away" */\r
-       case PET_STAY_AWAY:\r
-       {\r
-               p_ptr->pet_follow_distance = PET_AWAY_DIST;\r
-               break;\r
-       }\r
-       /* flag - allow pets to open doors */\r
-       case PET_OPEN_DOORS:\r
-       {\r
-               if (p_ptr->pet_extra_flags & PF_OPEN_DOORS) p_ptr->pet_extra_flags &= ~(PF_OPEN_DOORS);\r
-               else p_ptr->pet_extra_flags |= (PF_OPEN_DOORS);\r
-               break;\r
-       }\r
-       /* flag - allow pets to pickup items */\r
-       case PET_TAKE_ITEMS:\r
-       {\r
-               if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)\r
-               {\r
-                       p_ptr->pet_extra_flags &= ~(PF_PICKUP_ITEMS);\r
-                       for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)\r
-                       {\r
-                               /* Access the monster */\r
-                               m_ptr = &m_list[pet_ctr];\r
-\r
-                               if (is_pet(m_ptr))\r
-                               {\r
-                                       monster_drop_carried_objects(m_ptr);\r
-                               }\r
-                       }\r
-               }\r
-               else p_ptr->pet_extra_flags |= (PF_PICKUP_ITEMS);\r
-\r
-               break;\r
-       }\r
-       /* flag - allow pets to teleport */\r
-       case PET_TELEPORT:\r
-       {\r
-               if (p_ptr->pet_extra_flags & PF_TELEPORT) p_ptr->pet_extra_flags &= ~(PF_TELEPORT);\r
-               else p_ptr->pet_extra_flags |= (PF_TELEPORT);\r
-               break;\r
-       }\r
-       /* flag - allow pets to cast attack spell */\r
-       case PET_ATTACK_SPELL:\r
-       {\r
-               if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL) p_ptr->pet_extra_flags &= ~(PF_ATTACK_SPELL);\r
-               else p_ptr->pet_extra_flags |= (PF_ATTACK_SPELL);\r
-               break;\r
-       }\r
-       /* flag - allow pets to cast attack spell */\r
-       case PET_SUMMON_SPELL:\r
-       {\r
-               if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL) p_ptr->pet_extra_flags &= ~(PF_SUMMON_SPELL);\r
-               else p_ptr->pet_extra_flags |= (PF_SUMMON_SPELL);\r
-               break;\r
-       }\r
-       /* flag - allow pets to cast attack spell */\r
-       case PET_BALL_SPELL:\r
-       {\r
-               if (p_ptr->pet_extra_flags & PF_BALL_SPELL) p_ptr->pet_extra_flags &= ~(PF_BALL_SPELL);\r
-               else p_ptr->pet_extra_flags |= (PF_BALL_SPELL);\r
-               break;\r
-       }\r
-\r
-       case PET_RIDING:\r
-       {\r
-               (void)do_riding(FALSE);\r
-               break;\r
-       }\r
-\r
-       case PET_NAME:\r
-       {\r
-               do_name_pet();\r
-               break;\r
-       }\r
-\r
-       case PET_RYOUTE:\r
-       {\r
-               if (p_ptr->pet_extra_flags & PF_RYOUTE) p_ptr->pet_extra_flags &= ~(PF_RYOUTE);\r
-               else p_ptr->pet_extra_flags |= (PF_RYOUTE);\r
-               p_ptr->update |= (PU_BONUS);\r
-               handle_stuff();\r
-               break;\r
-       }\r
-       }\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83y\83b\83g\82Ì\91P\88«\91®\90«\82É\89\9e\82\82½\88Û\8e\9d\83R\83X\83g\82Ì\93r\92\86\8cv\8eZ\8f\88\97\9d\r
-* @param m_ptr \8cv\8eZ\8aî\8f\80\82Æ\82È\82é\83\82\83\93\83X\83^\81[\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @param inc m_ptr\82Å\8ew\92è\82µ\82½\83\82\83\93\83X\83^\81[\82ð\88Û\8e\9d\83R\83X\83g\8cv\8eZ\82É\89Á\82¦\82é\82È\82çTRUE\81A\8aO\82·\82È\82çFALSE\82ð\8ew\92è\r
-* @return \82È\82µ\r
-*/\r
-void check_pets_num_and_align(monster_type *m_ptr, bool inc)\r
-{\r
-       s32b old_friend_align = friend_align;\r
-       monster_race *r_ptr = &r_info[m_ptr->r_idx];\r
-\r
-       if (inc)\r
-       {\r
-               total_friends++;\r
-               if (r_ptr->flags3 & RF3_GOOD) friend_align += r_ptr->level;\r
-               if (r_ptr->flags3 & RF3_EVIL) friend_align -= r_ptr->level;\r
-       }\r
-       else\r
-       {\r
-               total_friends--;\r
-               if (r_ptr->flags3 & RF3_GOOD) friend_align -= r_ptr->level;\r
-               if (r_ptr->flags3 & RF3_EVIL) friend_align += r_ptr->level;\r
-       }\r
-\r
-       if (old_friend_align != friend_align) p_ptr->update |= (PU_BONUS);\r
-}\r
-\r
-\r
-\r
-/*!\r
-* @brief \83v\83\8c\83C\83\84\81[\82Ì\97\8e\94n\94»\92è\8f\88\97\9d\r
-* @param dam \97\8e\94n\94»\92è\82ð\94­\82µ\82½\8dÛ\82É\8eó\82¯\82½\83_\83\81\81[\83W\97Ê\r
-* @param force TRUE\82È\82ç\82Î\8b­\90§\93I\82É\97\8e\94n\82·\82é\r
-* @return \8eÀ\8dÛ\82É\97\8e\94n\82µ\82½\82çTRUE\82ð\95Ô\82·\r
-*/\r
-bool rakuba(HIT_POINT dam, bool force)\r
-{\r
-       int i, y, x, oy, ox;\r
-       int sn = 0, sy = 0, sx = 0;\r
-       char m_name[80];\r
-       monster_type *m_ptr = &m_list[p_ptr->riding];\r
-       monster_race *r_ptr = &r_info[m_ptr->r_idx];\r
-       bool fall_dam = FALSE;\r
-\r
-       if (!p_ptr->riding) return FALSE;\r
-       if (p_ptr->wild_mode) return FALSE;\r
-\r
-       if (dam >= 0 || force)\r
-       {\r
-               if (!force)\r
-               {\r
-                       int cur = p_ptr->skill_exp[GINOU_RIDING];\r
-                       int max = s_info[p_ptr->pclass].s_max[GINOU_RIDING];\r
-                       int ridinglevel = r_ptr->level;\r
-\r
-                       /* \97\8e\94n\82Ì\82µ\82â\82·\82³ */\r
-                       int rakubalevel = r_ptr->level;\r
-                       if (p_ptr->riding_ryoute) rakubalevel += 20;\r
-\r
-                       if ((cur < max) && (max > 1000) &&\r
-                               (dam / 2 + ridinglevel) > (cur / 30 + 10))\r
-                       {\r
-                               int inc = 0;\r
-\r
-                               if (ridinglevel > (cur / 100 + 15))\r
-                                       inc += 1 + (ridinglevel - cur / 100 - 15);\r
-                               else\r
-                                       inc += 1;\r
-\r
-                               p_ptr->skill_exp[GINOU_RIDING] = MIN(max, cur + inc);\r
-                       }\r
-\r
-                       /* \83\8c\83x\83\8b\82Ì\92á\82¢\8fæ\94n\82©\82ç\82Í\97\8e\94n\82µ\82É\82­\82¢ */\r
-                       if (randint0(dam / 2 + rakubalevel * 2) < cur / 30 + 10)\r
-                       {\r
-                               if ((((p_ptr->pclass == CLASS_BEASTMASTER) || (p_ptr->pclass == CLASS_CAVALRY)) && !p_ptr->riding_ryoute) || !one_in_(p_ptr->lev*(p_ptr->riding_ryoute ? 2 : 3) + 30))\r
-                               {\r
-                                       return FALSE;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               /* Check around the player */\r
-               for (i = 0; i < 8; i++)\r
-               {\r
-                       cave_type *c_ptr;\r
-\r
-                       /* Access the location */\r
-                       y = p_ptr->y + ddy_ddd[i];\r
-                       x = p_ptr->x + ddx_ddd[i];\r
-\r
-                       c_ptr = &cave[y][x];\r
-\r
-                       if (c_ptr->m_idx) continue;\r
-\r
-                       /* Skip non-empty grids */\r
-                       if (!cave_have_flag_grid(c_ptr, FF_MOVE) && !cave_have_flag_grid(c_ptr, FF_CAN_FLY))\r
-                       {\r
-                               if (!player_can_ride_aux(c_ptr, FALSE)) continue;\r
-                       }\r
-\r
-                       if (cave_have_flag_grid(c_ptr, FF_PATTERN)) continue;\r
-\r
-                       /* Count "safe" grids */\r
-                       sn++;\r
-\r
-                       /* Randomize choice */\r
-                       if (randint0(sn) > 0) continue;\r
-\r
-                       /* Save the safe location */\r
-                       sy = y; sx = x;\r
-               }\r
-               if (!sn)\r
-               {\r
-                       monster_desc(m_name, m_ptr, 0);\r
-#ifdef JP\r
-                       msg_format("%s\82©\82ç\90U\82è\97\8e\82Æ\82³\82ê\82»\82¤\82É\82È\82Á\82Ä\81A\95Ç\82É\82Ô\82Â\82©\82Á\82½\81B", m_name);\r
-                       take_hit(DAMAGE_NOESCAPE, r_ptr->level + 3, "\95Ç\82Ö\82Ì\8fÕ\93Ë", -1);\r
-#else\r
-                       msg_format("You have nearly fallen from %s, but bumped into wall.", m_name);\r
-                       take_hit(DAMAGE_NOESCAPE, r_ptr->level + 3, "bumping into wall", -1);\r
-#endif\r
-                       return FALSE;\r
-               }\r
-\r
-               oy = p_ptr->y;\r
-               ox = p_ptr->x;\r
-\r
-               p_ptr->y = sy;\r
-               p_ptr->x = sx;\r
-\r
-               /* Redraw the old spot */\r
-               lite_spot(oy, ox);\r
-\r
-               /* Redraw the new spot */\r
-               lite_spot(p_ptr->y, p_ptr->x);\r
-\r
-               /* Check for new panel */\r
-               verify_panel();\r
-       }\r
-\r
-       p_ptr->riding = 0;\r
-       p_ptr->pet_extra_flags &= ~(PF_RYOUTE);\r
-       p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;\r
-\r
-       calc_bonuses();\r
-\r
-       p_ptr->update |= (PU_BONUS);\r
-\r
-       /* Update stuff */\r
-       p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE | PU_MONSTERS);\r
-\r
-       /* Window stuff */\r
-       p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);\r
-\r
-       p_ptr->redraw |= (PR_EXTRA);\r
-\r
-       /* Update health track of mount */\r
-       p_ptr->redraw |= (PR_UHEALTH);\r
-\r
-       if (p_ptr->levitation && !force)\r
-       {\r
-               monster_desc(m_name, m_ptr, 0);\r
-               msg_format(_("%s\82©\82ç\97\8e\82¿\82½\82ª\81A\8bó\92\86\82Å\82¤\82Ü\82­\91Ì\90¨\82ð\97§\82Ä\92¼\82µ\82Ä\92\85\92n\82µ\82½\81B", "You are thrown from %s, but make a good landing."), m_name);\r
-       }\r
-       else\r
-       {\r
-               take_hit(DAMAGE_NOESCAPE, r_ptr->level + 3, _("\97\8e\94n", "Falling from riding"), -1);\r
-               fall_dam = TRUE;\r
-       }\r
-\r
-       /* Move the player */\r
-       if (sy && !p_ptr->is_dead)\r
-               (void)move_player_effect(p_ptr->y, p_ptr->x, MPE_DONT_PICKUP | MPE_DONT_SWAP_MON);\r
-\r
-       return fall_dam;\r
-}\r
-\r
+#include "angband.h"
+
+/*!
+* @brief プレイヤーの騎乗/下馬処理判定
+* @param c_ptr プレイヤーの移動先マスの構造体参照ポインタ
+* @param now_riding TRUEなら下馬処理、FALSEならば騎乗処理
+* @return 可能ならばTRUEを返す
+*/
+bool player_can_ride_aux(cave_type *c_ptr, bool now_riding)
+{
+       bool p_can_enter;
+       bool old_character_xtra = character_xtra;
+       MONSTER_IDX old_riding = p_ptr->riding;
+       bool old_riding_ryoute = p_ptr->riding_ryoute;
+       bool old_old_riding_ryoute = p_ptr->old_riding_ryoute;
+       bool old_pf_ryoute = (p_ptr->pet_extra_flags & PF_RYOUTE) ? TRUE : FALSE;
+
+       /* Hack -- prevent "icky" message */
+       character_xtra = TRUE;
+
+       if (now_riding) p_ptr->riding = c_ptr->m_idx;
+       else
+       {
+               p_ptr->riding = 0;
+               p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
+               p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
+       }
+
+       calc_bonuses();
+
+       p_can_enter = player_can_enter(c_ptr->feat, CEM_P_CAN_ENTER_PATTERN);
+
+       p_ptr->riding = old_riding;
+       if (old_pf_ryoute) p_ptr->pet_extra_flags |= (PF_RYOUTE);
+       else p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
+       p_ptr->riding_ryoute = old_riding_ryoute;
+       p_ptr->old_riding_ryoute = old_old_riding_ryoute;
+
+       calc_bonuses();
+
+       character_xtra = old_character_xtra;
+
+       return p_can_enter;
+}
+
+
+/*!
+* @brief ペットになっているモンスターをソートするための比較処理
+* @param u モンスターの構造体配列
+* @param v 未使用
+* @param a 比較対象のモンスターID1
+* @param b 比較対象のモンスターID2
+* @return 2番目が大ならばTRUEを返す
+*/
+static bool ang_sort_comp_pet_dismiss(vptr u, vptr v, int a, int b)
+{
+       u16b *who = (u16b*)(u);
+
+       int w1 = who[a];
+       int w2 = who[b];
+
+       monster_type *m_ptr1 = &m_list[w1];
+       monster_type *m_ptr2 = &m_list[w2];
+       monster_race *r_ptr1 = &r_info[m_ptr1->r_idx];
+       monster_race *r_ptr2 = &r_info[m_ptr2->r_idx];
+
+       /* Unused */
+       (void)v;
+
+       if (w1 == p_ptr->riding) return TRUE;
+       if (w2 == p_ptr->riding) return FALSE;
+
+       if (m_ptr1->nickname && !m_ptr2->nickname) return TRUE;
+       if (m_ptr2->nickname && !m_ptr1->nickname) return FALSE;
+
+       if (!m_ptr1->parent_m_idx && m_ptr2->parent_m_idx) return TRUE;
+       if (!m_ptr2->parent_m_idx && m_ptr1->parent_m_idx) return FALSE;
+
+       if ((r_ptr1->flags1 & RF1_UNIQUE) && !(r_ptr2->flags1 & RF1_UNIQUE)) return TRUE;
+       if ((r_ptr2->flags1 & RF1_UNIQUE) && !(r_ptr1->flags1 & RF1_UNIQUE)) return FALSE;
+
+       if (r_ptr1->level > r_ptr2->level) return TRUE;
+       if (r_ptr2->level > r_ptr1->level) return FALSE;
+
+       if (m_ptr1->hp > m_ptr2->hp) return TRUE;
+       if (m_ptr2->hp > m_ptr1->hp) return FALSE;
+
+       return w1 <= w2;
+}
+
+
+/*!
+* @brief ペットの維持コスト計算
+* @return 維持コスト(%)
+*/
+int calculate_upkeep(void)
+{
+       s32b old_friend_align = friend_align;
+       MONSTER_IDX m_idx;
+       bool have_a_unique = FALSE;
+       s32b total_friend_levels = 0;
+
+       total_friends = 0;
+       friend_align = 0;
+
+       for (m_idx = m_max - 1; m_idx >= 1; m_idx--)
+       {
+               monster_type *m_ptr;
+               monster_race *r_ptr;
+
+               m_ptr = &m_list[m_idx];
+               if (!m_ptr->r_idx) continue;
+               r_ptr = &r_info[m_ptr->r_idx];
+
+               if (is_pet(m_ptr))
+               {
+                       total_friends++;
+                       if (r_ptr->flags1 & RF1_UNIQUE)
+                       {
+                               if (p_ptr->pclass == CLASS_CAVALRY)
+                               {
+                                       if (p_ptr->riding == m_idx)
+                                               total_friend_levels += (r_ptr->level + 5) * 2;
+                                       else if (!have_a_unique && (r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
+                                               total_friend_levels += (r_ptr->level + 5) * 7 / 2;
+                                       else
+                                               total_friend_levels += (r_ptr->level + 5) * 10;
+                                       have_a_unique = TRUE;
+                               }
+                               else
+                                       total_friend_levels += (r_ptr->level + 5) * 10;
+                       }
+                       else
+                               total_friend_levels += r_ptr->level;
+
+                       /* Determine pet alignment */
+                       if (r_ptr->flags3 & RF3_GOOD) friend_align += r_ptr->level;
+                       if (r_ptr->flags3 & RF3_EVIL) friend_align -= r_ptr->level;
+               }
+       }
+       if (old_friend_align != friend_align) p_ptr->update |= (PU_BONUS);
+       if (total_friends)
+       {
+               int upkeep_factor;
+               upkeep_factor = (total_friend_levels - (p_ptr->lev * 80 / (cp_ptr->pet_upkeep_div)));
+               if (upkeep_factor < 0) upkeep_factor = 0;
+               if (upkeep_factor > 1000) upkeep_factor = 1000;
+               return upkeep_factor;
+       }
+       else
+               return 0;
+}
+
+/*!
+* @brief ペットを開放するコマンドのメインルーチン
+* @return なし
+*/
+void do_cmd_pet_dismiss(void)
+{
+       monster_type    *m_ptr;
+       bool            all_pets = FALSE;
+       MONSTER_IDX pet_ctr;
+       int i;
+       int Dismissed = 0;
+
+       MONSTER_IDX *who;
+       u16b dummy_why;
+       int max_pet = 0;
+       bool_hack cu, cv;
+
+       cu = Term->scr->cu;
+       cv = Term->scr->cv;
+       Term->scr->cu = 0;
+       Term->scr->cv = 1;
+
+       /* Allocate the "who" array */
+       C_MAKE(who, max_m_idx, MONSTER_IDX);
+
+       /* Process the monsters (backwards) */
+       for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
+       {
+               if (is_pet(&m_list[pet_ctr]))
+                       who[max_pet++] = pet_ctr;
+       }
+
+       /* Select the sort method */
+       ang_sort_comp = ang_sort_comp_pet_dismiss;
+       ang_sort_swap = ang_sort_swap_hook;
+
+       ang_sort(who, &dummy_why, max_pet);
+
+       /* Process the monsters (backwards) */
+       for (i = 0; i < max_pet; i++)
+       {
+               bool delete_this;
+               char friend_name[80];
+               bool kakunin;
+
+               /* Access the monster */
+               pet_ctr = who[i];
+               m_ptr = &m_list[pet_ctr];
+
+               delete_this = FALSE;
+               kakunin = ((pet_ctr == p_ptr->riding) || (m_ptr->nickname));
+               monster_desc(friend_name, m_ptr, MD_ASSUME_VISIBLE);
+
+               if (!all_pets)
+               {
+                       /* Hack -- health bar for this monster */
+                       health_track(pet_ctr);
+
+                       /* Hack -- handle stuff */
+                       handle_stuff();
+
+                       msg_format(_("%sを放しますか? [Yes/No/Unnamed (%d体)]", "Dismiss %s? [Yes/No/Unnamed (%d remain)]"), friend_name, max_pet - i);
+
+                       if (m_ptr->ml)
+                               move_cursor_relative(m_ptr->fy, m_ptr->fx);
+
+                       while (TRUE)
+                       {
+                               char ch = inkey();
+
+                               if (ch == 'Y' || ch == 'y')
+                               {
+                                       delete_this = TRUE;
+
+                                       if (kakunin)
+                                       {
+                                               msg_format(_("本当によろしいですか? (%s) ", "Are you sure? (%s) "), friend_name);
+                                               ch = inkey();
+                                               if (ch != 'Y' && ch != 'y')
+                                                       delete_this = FALSE;
+                                       }
+                                       break;
+                               }
+
+                               if (ch == 'U' || ch == 'u')
+                               {
+                                       all_pets = TRUE;
+                                       break;
+                               }
+
+                               if (ch == ESCAPE || ch == 'N' || ch == 'n')
+                                       break;
+
+                               bell();
+                       }
+               }
+
+               if ((all_pets && !kakunin) || (!all_pets && delete_this))
+               {
+                       if (record_named_pet && m_ptr->nickname)
+                       {
+                               char m_name[80];
+
+                               monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
+                               do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_DISMISS, m_name);
+                       }
+
+                       if (pet_ctr == p_ptr->riding)
+                       {
+                               msg_format(_("%sから降りた。", "You have got off %s. "), friend_name);
+
+                               p_ptr->riding = 0;
+
+                               /* Update the monsters */
+                               p_ptr->update |= (PU_BONUS | PU_MONSTERS);
+                               p_ptr->redraw |= (PR_EXTRA | PR_UHEALTH);
+                       }
+
+                       /* HACK : Add the line to message buffer */
+                       msg_format(_("%s を放した。", "Dismissed %s."), friend_name);
+                       p_ptr->window |= (PW_MESSAGE);
+                       window_stuff();
+
+                       delete_monster_idx(pet_ctr);
+                       Dismissed++;
+               }
+       }
+
+       Term->scr->cu = cu;
+       Term->scr->cv = cv;
+       Term_fresh();
+
+       C_KILL(who, max_m_idx, MONSTER_IDX);
+
+#ifdef JP
+       msg_format("%d 体のペットを放しました。", Dismissed);
+#else
+       msg_format("You have dismissed %d pet%s.", Dismissed,
+               (Dismissed == 1 ? "" : "s"));
+#endif
+       if (Dismissed == 0 && all_pets)
+               msg_print(_("'U'nnamed は、乗馬以外の名前のないペットだけを全て解放します。", "'U'nnamed means all your pets except named pets and your mount."));
+}
+
+
+
+/*!
+* @brief ペットから騎乗/下馬するコマンドのメインルーチン /
+* @param force 強制的に騎乗/下馬するならばTRUE
+* @return 騎乗/下馬できたらTRUE
+*/
+bool do_riding(bool force)
+{
+       int x, y, dir = 0;
+       cave_type *c_ptr;
+       monster_type *m_ptr;
+
+       if (!get_rep_dir2(&dir)) return FALSE;
+       y = p_ptr->y + ddy[dir];
+       x = p_ptr->x + ddx[dir];
+       c_ptr = &cave[y][x];
+
+       if (p_ptr->special_defense & KATA_MUSOU) set_action(ACTION_NONE);
+
+       if (p_ptr->riding)
+       {
+               /* Skip non-empty grids */
+               if (!player_can_ride_aux(c_ptr, FALSE))
+               {
+                       msg_print(_("そちらには降りられません。", "You cannot go to that direction."));
+                       return FALSE;
+               }
+
+               if (!pattern_seq(p_ptr->y, p_ptr->x, y, x)) return FALSE;
+
+               if (c_ptr->m_idx)
+               {
+                       /* Take a turn */
+                       p_ptr->energy_use = 100;
+
+                       /* Message */
+                       msg_print(_("モンスターが立ちふさがっている!", "There is a monster in the way!"));
+
+                       py_attack(y, x, 0);
+                       return FALSE;
+               }
+
+               p_ptr->riding = 0;
+               p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
+               p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
+       }
+       else
+       {
+               if (p_ptr->confused)
+               {
+                       msg_print(_("混乱していて乗れない!", "You are too confused!"));
+                       return FALSE;
+               }
+
+               m_ptr = &m_list[c_ptr->m_idx];
+
+               if (!c_ptr->m_idx || !m_ptr->ml)
+               {
+                       msg_print(_("その場所にはモンスターはいません。", "Here is no monster."));
+                       return FALSE;
+               }
+               if (!is_pet(m_ptr) && !force)
+               {
+                       msg_print(_("そのモンスターはペットではありません。", "That monster is not a pet."));
+                       return FALSE;
+               }
+               if (!(r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
+               {
+                       msg_print(_("そのモンスターには乗れなさそうだ。", "This monster doesn't seem suitable for riding."));
+                       return FALSE;
+               }
+
+               if (!pattern_seq(p_ptr->y, p_ptr->x, y, x)) return FALSE;
+
+               if (!player_can_ride_aux(c_ptr, TRUE))
+               {
+                       /* Feature code (applying "mimic" field) */
+                       feature_type *f_ptr = &f_info[get_feat_mimic(c_ptr)];
+#ifdef JP
+                       msg_format("そのモンスターは%sの%sにいる。", f_name + f_ptr->name,
+                               ((!have_flag(f_ptr->flags, FF_MOVE) && !have_flag(f_ptr->flags, FF_CAN_FLY)) ||
+                                       (!have_flag(f_ptr->flags, FF_LOS) && !have_flag(f_ptr->flags, FF_TREE))) ?
+                               "中" : "上");
+#else
+                       msg_format("This monster is %s the %s.",
+                               ((!have_flag(f_ptr->flags, FF_MOVE) && !have_flag(f_ptr->flags, FF_CAN_FLY)) ||
+                                       (!have_flag(f_ptr->flags, FF_LOS) && !have_flag(f_ptr->flags, FF_TREE))) ?
+                               "in" : "on", f_name + f_ptr->name);
+#endif
+
+                       return FALSE;
+               }
+               if (r_info[m_ptr->r_idx].level > randint1((p_ptr->skill_exp[GINOU_RIDING] / 50 + p_ptr->lev / 2 + 20)))
+               {
+                       msg_print(_("うまく乗れなかった。", "You failed to ride."));
+                       p_ptr->energy_use = 100;
+                       return FALSE;
+               }
+
+               if (MON_CSLEEP(m_ptr))
+               {
+                       char m_name[80];
+                       monster_desc(m_name, m_ptr, 0);
+                       (void)set_monster_csleep(c_ptr->m_idx, 0);
+                       msg_format(_("%sを起こした。", "You have waked %s up."), m_name);
+               }
+
+               if (p_ptr->action == ACTION_KAMAE) set_action(ACTION_NONE);
+
+               p_ptr->riding = c_ptr->m_idx;
+
+               /* Hack -- remove tracked monster */
+               if (p_ptr->riding == p_ptr->health_who) health_track(0);
+       }
+
+       p_ptr->energy_use = 100;
+
+       /* Mega-Hack -- Forget the view and lite */
+       p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
+
+       /* Update the monsters */
+       p_ptr->update |= (PU_BONUS);
+
+       /* Redraw map */
+       p_ptr->redraw |= (PR_MAP | PR_EXTRA);
+
+       p_ptr->redraw |= (PR_UHEALTH);
+
+       /* Move the player */
+       (void)move_player_effect(y, x, MPE_HANDLE_STUFF | MPE_ENERGY_USE | MPE_DONT_PICKUP | MPE_DONT_SWAP_MON);
+
+       return TRUE;
+}
+
+/*!
+* @brief ペットに名前をつけるコマンドのメインルーチン
+* @return なし
+*/
+static void do_name_pet(void)
+{
+       monster_type *m_ptr;
+       char out_val[20];
+       char m_name[80];
+       bool old_name = FALSE;
+       bool old_target_pet = target_pet;
+
+       target_pet = TRUE;
+       if (!target_set(TARGET_KILL))
+       {
+               target_pet = old_target_pet;
+               return;
+       }
+       target_pet = old_target_pet;
+
+       if (cave[target_row][target_col].m_idx)
+       {
+               m_ptr = &m_list[cave[target_row][target_col].m_idx];
+
+               if (!is_pet(m_ptr))
+               {
+                       /* Message */
+                       msg_print(_("そのモンスターはペットではない。", "This monster is not a pet."));
+                       return;
+               }
+               if (r_info[m_ptr->r_idx].flags1 & RF1_UNIQUE)
+               {
+                       msg_print(_("そのモンスターの名前は変えられない!", "You cannot change name of this monster!"));
+                       return;
+               }
+               monster_desc(m_name, m_ptr, 0);
+
+               /* Message */
+               msg_format(_("%sに名前をつける。", "Name %s."), m_name);
+               msg_print(NULL);
+
+               /* Start with nothing */
+               strcpy(out_val, "");
+
+               /* Use old inscription */
+               if (m_ptr->nickname)
+               {
+                       /* Start with the old inscription */
+                       strcpy(out_val, quark_str(m_ptr->nickname));
+                       old_name = TRUE;
+               }
+
+               /* Get a new inscription (possibly empty) */
+               if (get_string(_("名前: ", "Name: "), out_val, 15))
+               {
+                       if (out_val[0])
+                       {
+                               /* Save the inscription */
+                               m_ptr->nickname = quark_add(out_val);
+                               if (record_named_pet)
+                               {
+                                       monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
+                                       do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_NAME, m_name);
+                               }
+                       }
+                       else
+                       {
+                               if (record_named_pet && old_name)
+                               {
+                                       monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
+                                       do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_UNNAME, m_name);
+                               }
+                               m_ptr->nickname = 0;
+                       }
+               }
+       }
+}
+
+
+/*!
+* @brief ペットに関するコマンドリストのメインルーチン /
+* Issue a pet command
+* @return なし
+*/
+void do_cmd_pet(void)
+{
+       COMMAND_CODE i = 0;
+       int                     num;
+       int                     powers[36];
+       cptr                    power_desc[36];
+       bool                    flag, redraw;
+       char                    choice;
+       char                    out_val[160];
+       int                     pet_ctr;
+       monster_type    *m_ptr;
+
+       PET_COMMAND_IDX mode = 0;
+
+       char buf[160];
+       char target_buf[160];
+
+       int menu_line = use_menu ? 1 : 0;
+
+       num = 0;
+
+       power_desc[num] = _("ペットを放す", "dismiss pets");
+       powers[num++] = PET_DISMISS;
+
+#ifdef JP
+       sprintf(target_buf, "ペットのターゲットを指定 (現在:%s)",
+               (pet_t_m_idx ? (p_ptr->image ? "何か奇妙な物" : (r_name + r_info[m_list[pet_t_m_idx].ap_r_idx].name)) : "指定なし"));
+#else
+       sprintf(target_buf, "specify a target of pet (now:%s)",
+               (pet_t_m_idx ? (p_ptr->image ? "something strange" : (r_name + r_info[m_list[pet_t_m_idx].ap_r_idx].name)) : "nothing"));
+#endif
+       power_desc[num] = target_buf;
+       powers[num++] = PET_TARGET;
+       power_desc[num] = _("近くにいろ", "stay close");
+
+       if (p_ptr->pet_follow_distance == PET_CLOSE_DIST) mode = num;
+       powers[num++] = PET_STAY_CLOSE;
+       power_desc[num] = _("ついて来い", "follow me");
+
+       if (p_ptr->pet_follow_distance == PET_FOLLOW_DIST) mode = num;
+       powers[num++] = PET_FOLLOW_ME;
+       power_desc[num] = _("敵を見つけて倒せ", "seek and destroy");
+
+       if (p_ptr->pet_follow_distance == PET_DESTROY_DIST) mode = num;
+       powers[num++] = PET_SEEK_AND_DESTROY;
+       power_desc[num] = _("少し離れていろ", "give me space");
+
+       if (p_ptr->pet_follow_distance == PET_SPACE_DIST) mode = num;
+       powers[num++] = PET_ALLOW_SPACE;
+       power_desc[num] = _("離れていろ", "stay away");
+
+       if (p_ptr->pet_follow_distance == PET_AWAY_DIST) mode = num;
+       powers[num++] = PET_STAY_AWAY;
+
+       if (p_ptr->pet_extra_flags & PF_OPEN_DOORS)
+       {
+               power_desc[num] = _("ドアを開ける (現在:ON)", "pets open doors (now On)");
+       }
+       else
+       {
+               power_desc[num] = _("ドアを開ける (現在:OFF)", "pets open doors (now Off)");
+       }
+       powers[num++] = PET_OPEN_DOORS;
+
+       if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
+       {
+               power_desc[num] = _("アイテムを拾う (現在:ON)", "pets pick up items (now On)");
+       }
+       else
+       {
+               power_desc[num] = _("アイテムを拾う (現在:OFF)", "pets pick up items (now Off)");
+       }
+       powers[num++] = PET_TAKE_ITEMS;
+
+       if (p_ptr->pet_extra_flags & PF_TELEPORT)
+       {
+               power_desc[num] = _("テレポート系魔法を使う (現在:ON)", "allow teleport (now On)");
+       }
+       else
+       {
+               power_desc[num] = _("テレポート系魔法を使う (現在:OFF)", "allow teleport (now Off)");
+       }
+       powers[num++] = PET_TELEPORT;
+
+       if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL)
+       {
+               power_desc[num] = _("攻撃魔法を使う (現在:ON)", "allow cast attack spell (now On)");
+       }
+       else
+       {
+               power_desc[num] = _("攻撃魔法を使う (現在:OFF)", "allow cast attack spell (now Off)");
+       }
+       powers[num++] = PET_ATTACK_SPELL;
+
+       if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL)
+       {
+               power_desc[num] = _("召喚魔法を使う (現在:ON)", "allow cast summon spell (now On)");
+       }
+       else
+       {
+               power_desc[num] = _("召喚魔法を使う (現在:OFF)", "allow cast summon spell (now Off)");
+       }
+       powers[num++] = PET_SUMMON_SPELL;
+
+       if (p_ptr->pet_extra_flags & PF_BALL_SPELL)
+       {
+               power_desc[num] = _("プレイヤーを巻き込む範囲魔法を使う (現在:ON)", "allow involve player in area spell (now On)");
+       }
+       else
+       {
+               power_desc[num] = _("プレイヤーを巻き込む範囲魔法を使う (現在:OFF)", "allow involve player in area spell (now Off)");
+       }
+       powers[num++] = PET_BALL_SPELL;
+
+       if (p_ptr->riding)
+       {
+               power_desc[num] = _("ペットから降りる", "get off a pet");
+       }
+       else
+       {
+               power_desc[num] = _("ペットに乗る", "ride a pet");
+       }
+       powers[num++] = PET_RIDING;
+       power_desc[num] = _("ペットに名前をつける", "name pets");
+       powers[num++] = PET_NAME;
+
+       if (p_ptr->riding)
+       {
+               if ((p_ptr->migite && (empty_hands(FALSE) == EMPTY_HAND_LARM) &&
+                       object_allow_two_hands_wielding(&inventory[INVEN_RARM])) ||
+                       (p_ptr->hidarite && (empty_hands(FALSE) == EMPTY_HAND_RARM) &&
+                               object_allow_two_hands_wielding(&inventory[INVEN_LARM])))
+               {
+                       if (p_ptr->pet_extra_flags & PF_RYOUTE)
+                       {
+                               power_desc[num] = _("武器を片手で持つ", "use one hand to control a riding pet");
+                       }
+                       else
+                       {
+                               power_desc[num] = _("武器を両手で持つ", "use both hands for a weapon");
+                       }
+
+                       powers[num++] = PET_RYOUTE;
+               }
+               else
+               {
+                       switch (p_ptr->pclass)
+                       {
+                       case CLASS_MONK:
+                       case CLASS_FORCETRAINER:
+                       case CLASS_BERSERKER:
+                               if (empty_hands(FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))
+                               {
+                                       if (p_ptr->pet_extra_flags & PF_RYOUTE)
+                                       {
+                                               power_desc[num] = _("片手で格闘する", "use one hand to control a riding pet");
+                                       }
+                                       else
+                                       {
+                                               power_desc[num] = _("両手で格闘する", "use both hands for melee");
+                                       }
+
+                                       powers[num++] = PET_RYOUTE;
+                               }
+                               else if ((empty_hands(FALSE) != EMPTY_HAND_NONE) && !buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
+                               {
+                                       if (p_ptr->pet_extra_flags & PF_RYOUTE)
+                                       {
+                                               power_desc[num] = _("格闘を行わない", "use one hand to control a riding pet");
+                                       }
+                                       else
+                                       {
+                                               power_desc[num] = _("格闘を行う", "use one hand for melee");
+                                       }
+
+                                       powers[num++] = PET_RYOUTE;
+                               }
+                               break;
+                       }
+               }
+       }
+
+#ifdef ALLOW_REPEAT
+       if (!(repeat_pull(&i) && (i >= 0) && (i < num)))
+       {
+#endif /* ALLOW_REPEAT */
+
+               /* Nothing chosen yet */
+               flag = FALSE;
+
+               /* No redraw yet */
+               redraw = FALSE;
+
+               if (use_menu)
+               {
+                       /* Save the screen */
+                       screen_save();
+
+                       /* Build a prompt */
+                       strnfmt(out_val, 78, _("(コマンド、ESC=終了) コマンドを選んでください:", "(Command, ESC=exit) Choose command from menu."));
+               }
+               else
+               {
+                       /* Build a prompt */
+                       strnfmt(out_val, 78,
+                               _("(コマンド %c-%c、'*'=一覧、ESC=終了) コマンドを選んでください:", "(Command %c-%c, *=List, ESC=exit) Select a command: "),
+                               I2A(0), I2A(num - 1));
+               }
+
+               choice = (always_show_list || use_menu) ? ESCAPE : 1;
+
+               /* Get a command from the user */
+               while (!flag)
+               {
+                       int ask = TRUE;
+
+                       if (choice == ESCAPE) choice = ' ';
+                       else if (!get_com(out_val, &choice, TRUE)) break;
+
+                       if (use_menu && (choice != ' '))
+                       {
+                               switch (choice)
+                               {
+                               case '0':
+                                       screen_load();
+                                       return;
+
+                               case '8':
+                               case 'k':
+                               case 'K':
+                                       menu_line += (num - 1);
+                                       break;
+
+                               case '2':
+                               case 'j':
+                               case 'J':
+                                       menu_line++;
+                                       break;
+
+                               case '4':
+                               case 'h':
+                               case 'H':
+                                       menu_line = 1;
+                                       break;
+
+                               case '6':
+                               case 'l':
+                               case 'L':
+                                       menu_line = num;
+                                       break;
+
+                               case 'x':
+                               case 'X':
+                               case '\r':
+                               case '\n':
+                                       i = menu_line - 1;
+                                       ask = FALSE;
+                                       break;
+                               }
+                               if (menu_line > num) menu_line -= num;
+                       }
+
+                       /* Request redraw */
+                       if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))
+                       {
+                               /* Show the list */
+                               if (!redraw || use_menu)
+                               {
+                                       byte y = 1, x = 0;
+                                       PET_COMMAND_IDX ctr = 0;
+
+                                       /* Show list */
+                                       redraw = TRUE;
+
+                                       /* Save the screen */
+                                       if (!use_menu) screen_save();
+
+                                       prt("", y++, x);
+
+                                       /* Print list */
+                                       for (ctr = 0; ctr < num; ctr++)
+                                       {
+                                               /* Letter/number for power selection */
+                                               if (use_menu)
+                                                       sprintf(buf, "%c%s ", (ctr == mode) ? '*' : ' ', (ctr == (menu_line - 1)) ? _("》", "> ") : "  ");
+                                               else
+                                                       sprintf(buf, "%c%c) ", (ctr == mode) ? '*' : ' ', I2A(ctr));
+
+                                               strcat(buf, power_desc[ctr]);
+
+                                               prt(buf, y + ctr, x);
+                                       }
+
+                                       prt("", y + MIN(ctr, 17), x);
+                               }
+
+                               /* Hide the list */
+                               else
+                               {
+                                       /* Hide list */
+                                       redraw = FALSE;
+
+                                       /* Restore the screen */
+                                       screen_load();
+                               }
+
+                               /* Redo asking */
+                               continue;
+                       }
+
+                       if (!use_menu)
+                       {
+                               /* Note verify */
+                               ask = (isupper(choice));
+
+                               /* Lowercase */
+                               if (ask) choice = (char)tolower(choice);
+
+                               /* Extract request */
+                               i = (islower(choice) ? A2I(choice) : -1);
+                       }
+
+                       /* Totally Illegal */
+                       if ((i < 0) || (i >= num))
+                       {
+                               bell();
+                               continue;
+                       }
+
+                       /* Verify it */
+                       if (ask)
+                       {
+                               /* Prompt */
+                               strnfmt(buf, 78, _("%sを使いますか? ", "Use %s? "), power_desc[i]);
+
+                               /* Belay that order */
+                               if (!get_check(buf)) continue;
+                       }
+
+                       /* Stop the loop */
+                       flag = TRUE;
+               }
+
+               /* Restore the screen */
+               if (redraw) screen_load();
+
+               /* Abort if needed */
+               if (!flag)
+               {
+                       p_ptr->energy_use = 0;
+                       return;
+               }
+
+#ifdef ALLOW_REPEAT
+               repeat_push(i);
+       }
+#endif /* ALLOW_REPEAT */
+
+       switch (powers[i])
+       {
+       case PET_DISMISS: /* Dismiss pets */
+       {
+               /* Check pets (backwards) */
+               for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
+               {
+                       /* Player has pet */
+                       if (is_pet(&m_list[pet_ctr])) break;
+               }
+
+               if (!pet_ctr)
+               {
+                       msg_print(_("ペットがいない!", "You have no pets!"));
+                       break;
+               }
+               do_cmd_pet_dismiss();
+               (void)calculate_upkeep();
+               break;
+       }
+       case PET_TARGET:
+       {
+               project_length = -1;
+               if (!target_set(TARGET_KILL)) pet_t_m_idx = 0;
+               else
+               {
+                       cave_type *c_ptr = &cave[target_row][target_col];
+                       if (c_ptr->m_idx && (m_list[c_ptr->m_idx].ml))
+                       {
+                               pet_t_m_idx = cave[target_row][target_col].m_idx;
+                               p_ptr->pet_follow_distance = PET_DESTROY_DIST;
+                       }
+                       else pet_t_m_idx = 0;
+               }
+               project_length = 0;
+
+               break;
+       }
+       /* Call pets */
+       case PET_STAY_CLOSE:
+       {
+               p_ptr->pet_follow_distance = PET_CLOSE_DIST;
+               pet_t_m_idx = 0;
+               break;
+       }
+       /* "Follow Me" */
+       case PET_FOLLOW_ME:
+       {
+               p_ptr->pet_follow_distance = PET_FOLLOW_DIST;
+               pet_t_m_idx = 0;
+               break;
+       }
+       /* "Seek and destoy" */
+       case PET_SEEK_AND_DESTROY:
+       {
+               p_ptr->pet_follow_distance = PET_DESTROY_DIST;
+               break;
+       }
+       /* "Give me space" */
+       case PET_ALLOW_SPACE:
+       {
+               p_ptr->pet_follow_distance = PET_SPACE_DIST;
+               break;
+       }
+       /* "Stay away" */
+       case PET_STAY_AWAY:
+       {
+               p_ptr->pet_follow_distance = PET_AWAY_DIST;
+               break;
+       }
+       /* flag - allow pets to open doors */
+       case PET_OPEN_DOORS:
+       {
+               if (p_ptr->pet_extra_flags & PF_OPEN_DOORS) p_ptr->pet_extra_flags &= ~(PF_OPEN_DOORS);
+               else p_ptr->pet_extra_flags |= (PF_OPEN_DOORS);
+               break;
+       }
+       /* flag - allow pets to pickup items */
+       case PET_TAKE_ITEMS:
+       {
+               if (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)
+               {
+                       p_ptr->pet_extra_flags &= ~(PF_PICKUP_ITEMS);
+                       for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
+                       {
+                               /* Access the monster */
+                               m_ptr = &m_list[pet_ctr];
+
+                               if (is_pet(m_ptr))
+                               {
+                                       monster_drop_carried_objects(m_ptr);
+                               }
+                       }
+               }
+               else p_ptr->pet_extra_flags |= (PF_PICKUP_ITEMS);
+
+               break;
+       }
+       /* flag - allow pets to teleport */
+       case PET_TELEPORT:
+       {
+               if (p_ptr->pet_extra_flags & PF_TELEPORT) p_ptr->pet_extra_flags &= ~(PF_TELEPORT);
+               else p_ptr->pet_extra_flags |= (PF_TELEPORT);
+               break;
+       }
+       /* flag - allow pets to cast attack spell */
+       case PET_ATTACK_SPELL:
+       {
+               if (p_ptr->pet_extra_flags & PF_ATTACK_SPELL) p_ptr->pet_extra_flags &= ~(PF_ATTACK_SPELL);
+               else p_ptr->pet_extra_flags |= (PF_ATTACK_SPELL);
+               break;
+       }
+       /* flag - allow pets to cast attack spell */
+       case PET_SUMMON_SPELL:
+       {
+               if (p_ptr->pet_extra_flags & PF_SUMMON_SPELL) p_ptr->pet_extra_flags &= ~(PF_SUMMON_SPELL);
+               else p_ptr->pet_extra_flags |= (PF_SUMMON_SPELL);
+               break;
+       }
+       /* flag - allow pets to cast attack spell */
+       case PET_BALL_SPELL:
+       {
+               if (p_ptr->pet_extra_flags & PF_BALL_SPELL) p_ptr->pet_extra_flags &= ~(PF_BALL_SPELL);
+               else p_ptr->pet_extra_flags |= (PF_BALL_SPELL);
+               break;
+       }
+
+       case PET_RIDING:
+       {
+               (void)do_riding(FALSE);
+               break;
+       }
+
+       case PET_NAME:
+       {
+               do_name_pet();
+               break;
+       }
+
+       case PET_RYOUTE:
+       {
+               if (p_ptr->pet_extra_flags & PF_RYOUTE) p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
+               else p_ptr->pet_extra_flags |= (PF_RYOUTE);
+               p_ptr->update |= (PU_BONUS);
+               handle_stuff();
+               break;
+       }
+       }
+}
+
+
+/*!
+* @brief ペットの善悪属性に応じた維持コストの途中計算処理
+* @param m_ptr 計算基準となるモンスターの構造体参照ポインタ
+* @param inc m_ptrで指定したモンスターを維持コスト計算に加えるならTRUE、外すならFALSEを指定
+* @return なし
+*/
+void check_pets_num_and_align(monster_type *m_ptr, bool inc)
+{
+       s32b old_friend_align = friend_align;
+       monster_race *r_ptr = &r_info[m_ptr->r_idx];
+
+       if (inc)
+       {
+               total_friends++;
+               if (r_ptr->flags3 & RF3_GOOD) friend_align += r_ptr->level;
+               if (r_ptr->flags3 & RF3_EVIL) friend_align -= r_ptr->level;
+       }
+       else
+       {
+               total_friends--;
+               if (r_ptr->flags3 & RF3_GOOD) friend_align -= r_ptr->level;
+               if (r_ptr->flags3 & RF3_EVIL) friend_align += r_ptr->level;
+       }
+
+       if (old_friend_align != friend_align) p_ptr->update |= (PU_BONUS);
+}
+
+
+
+/*!
+* @brief プレイヤーの落馬判定処理
+* @param dam 落馬判定を発した際に受けたダメージ量
+* @param force TRUEならば強制的に落馬する
+* @return 実際に落馬したらTRUEを返す
+*/
+bool rakuba(HIT_POINT dam, bool force)
+{
+       int i, y, x, oy, ox;
+       int sn = 0, sy = 0, sx = 0;
+       char m_name[80];
+       monster_type *m_ptr = &m_list[p_ptr->riding];
+       monster_race *r_ptr = &r_info[m_ptr->r_idx];
+       bool fall_dam = FALSE;
+
+       if (!p_ptr->riding) return FALSE;
+       if (p_ptr->wild_mode) return FALSE;
+
+       if (dam >= 0 || force)
+       {
+               if (!force)
+               {
+                       int cur = p_ptr->skill_exp[GINOU_RIDING];
+                       int max = s_info[p_ptr->pclass].s_max[GINOU_RIDING];
+                       int ridinglevel = r_ptr->level;
+
+                       /* 落馬のしやすさ */
+                       int rakubalevel = r_ptr->level;
+                       if (p_ptr->riding_ryoute) rakubalevel += 20;
+
+                       if ((cur < max) && (max > 1000) &&
+                               (dam / 2 + ridinglevel) > (cur / 30 + 10))
+                       {
+                               int inc = 0;
+
+                               if (ridinglevel > (cur / 100 + 15))
+                                       inc += 1 + (ridinglevel - cur / 100 - 15);
+                               else
+                                       inc += 1;
+
+                               p_ptr->skill_exp[GINOU_RIDING] = MIN(max, cur + inc);
+                       }
+
+                       /* レベルの低い乗馬からは落馬しにくい */
+                       if (randint0(dam / 2 + rakubalevel * 2) < cur / 30 + 10)
+                       {
+                               if ((((p_ptr->pclass == CLASS_BEASTMASTER) || (p_ptr->pclass == CLASS_CAVALRY)) && !p_ptr->riding_ryoute) || !one_in_(p_ptr->lev*(p_ptr->riding_ryoute ? 2 : 3) + 30))
+                               {
+                                       return FALSE;
+                               }
+                       }
+               }
+
+               /* Check around the player */
+               for (i = 0; i < 8; i++)
+               {
+                       cave_type *c_ptr;
+
+                       /* Access the location */
+                       y = p_ptr->y + ddy_ddd[i];
+                       x = p_ptr->x + ddx_ddd[i];
+
+                       c_ptr = &cave[y][x];
+
+                       if (c_ptr->m_idx) continue;
+
+                       /* Skip non-empty grids */
+                       if (!cave_have_flag_grid(c_ptr, FF_MOVE) && !cave_have_flag_grid(c_ptr, FF_CAN_FLY))
+                       {
+                               if (!player_can_ride_aux(c_ptr, FALSE)) continue;
+                       }
+
+                       if (cave_have_flag_grid(c_ptr, FF_PATTERN)) continue;
+
+                       /* Count "safe" grids */
+                       sn++;
+
+                       /* Randomize choice */
+                       if (randint0(sn) > 0) continue;
+
+                       /* Save the safe location */
+                       sy = y; sx = x;
+               }
+               if (!sn)
+               {
+                       monster_desc(m_name, m_ptr, 0);
+#ifdef JP
+                       msg_format("%sから振り落とされそうになって、壁にぶつかった。", m_name);
+                       take_hit(DAMAGE_NOESCAPE, r_ptr->level + 3, "壁への衝突", -1);
+#else
+                       msg_format("You have nearly fallen from %s, but bumped into wall.", m_name);
+                       take_hit(DAMAGE_NOESCAPE, r_ptr->level + 3, "bumping into wall", -1);
+#endif
+                       return FALSE;
+               }
+
+               oy = p_ptr->y;
+               ox = p_ptr->x;
+
+               p_ptr->y = sy;
+               p_ptr->x = sx;
+
+               /* Redraw the old spot */
+               lite_spot(oy, ox);
+
+               /* Redraw the new spot */
+               lite_spot(p_ptr->y, p_ptr->x);
+
+               /* Check for new panel */
+               verify_panel();
+       }
+
+       p_ptr->riding = 0;
+       p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
+       p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
+
+       calc_bonuses();
+
+       p_ptr->update |= (PU_BONUS);
+
+       /* Update stuff */
+       p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE | PU_MONSTERS);
+
+       /* Window stuff */
+       p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
+
+       p_ptr->redraw |= (PR_EXTRA);
+
+       /* Update health track of mount */
+       p_ptr->redraw |= (PR_UHEALTH);
+
+       if (p_ptr->levitation && !force)
+       {
+               monster_desc(m_name, m_ptr, 0);
+               msg_format(_("%sから落ちたが、空中でうまく体勢を立て直して着地した。", "You are thrown from %s, but make a good landing."), m_name);
+       }
+       else
+       {
+               take_hit(DAMAGE_NOESCAPE, r_ptr->level + 3, _("落馬", "Falling from riding"), -1);
+               fall_dam = TRUE;
+       }
+
+       /* Move the player */
+       if (sy && !p_ptr->is_dead)
+               (void)move_player_effect(p_ptr->y, p_ptr->x, MPE_DONT_PICKUP | MPE_DONT_SWAP_MON);
+
+       return fall_dam;
+}
+
index ae1bc7b..b947963 100644 (file)
@@ -1,13 +1,13 @@
-#include "angband.h"
+#include "angband.h"
 
 /*!
- * @brief \83\8d\83b\83h\82Ì\8cø\89Ê\82ð\94­\93®\82·\82é
- * @param sval \83I\83u\83W\83F\83N\83g\82Ìsval
- * @param dir \94­\93®\96Ú\95W\82Ì\95û\8cüID
- * @param use_charge \83`\83\83\81[\83W\82ð\8fÁ\94ï\82µ\82½\82©\82Ç\82¤\82©\82ð\95Ô\82·\8eQ\8fÆ\83|\83C\83\93\83^
- * @param powerful \8b­\97Í\94­\93®\8fã\82Ì\8f\88\97\9d\82È\82ç\82ÎTRUE
- * @param magic \96\82\93¹\8bï\8fp\8fã\82Ì\8f\88\97\9d\82È\82ç\82ÎTRUE
- * @return \94­\93®\82É\82æ\82è\8cø\89Ê\93à\97e\82ª\8am\92è\82µ\82½\82È\82ç\82ÎTRUE\82ð\95Ô\82·
+ * @brief ロッドの効果を発動する
+ * @param sval オブジェクトのsval
+ * @param dir 発動目標の方向ID
+ * @param use_charge チャージを消費したかどうかを返す参照ポインタ
+ * @param powerful 強力発動上の処理ならばTRUE
+ * @param magic 魔道具術上の処理ならばTRUE
+ * @return 発動により効果内容が確定したならばTRUEを返す
  */
 int rod_effect(OBJECT_SUBTYPE_VALUE sval, int dir, bool *use_charge, bool powerful, bool magic)
 {
@@ -130,7 +130,7 @@ int rod_effect(OBJECT_SUBTYPE_VALUE sval, int dir, bool *use_charge, bool powerf
        case SV_ROD_LITE:
        {
                HIT_POINT dam = damroll((powerful ? 12 : 6), 8);
-               msg_print(_("\90Â\82­\8bP\82­\8cõ\90ü\82ª\95ú\82½\82ê\82½\81B", "A line of blue shimmering light appears."));
+               msg_print(_("青く輝く光線が放たれた。", "A line of blue shimmering light appears."));
                (void)lite_line(dir, dam);
                ident = TRUE;
                break;
@@ -241,10 +241,10 @@ int rod_effect(OBJECT_SUBTYPE_VALUE sval, int dir, bool *use_charge, bool powerf
 }
 
 /*!
-* @brief \83\8d\83b\83h\82ð\8eg\82¤\83R\83}\83\93\83h\82Ì\83T\83u\83\8b\81[\83`\83\93 /
+* @brief ロッドを使うコマンドのサブルーチン /
 * Activate (zap) a Rod
-* @param item \8eg\82¤\83I\83u\83W\83F\83N\83g\82Ì\8f\8a\8e\9d\95iID
-* @return \82È\82µ
+* @param item 使うオブジェクトの所持品ID
+* @return なし
 * @details
 * <pre>
 * Unstack fully charged rods as needed.
@@ -281,7 +281,7 @@ void do_cmd_zap_rod_aux(int item)
        /* Mega-Hack -- refuse to zap a pile from the ground */
        if ((item < 0) && (o_ptr->number > 1))
        {
-               msg_print(_("\82Ü\82¸\82Í\83\8d\83b\83h\82ð\8fE\82í\82È\82¯\82ê\82Î\81B", "You must first pick up the rods."));
+               msg_print(_("まずはロッドを拾わなければ。", "You must first pick up the rods."));
                return;
        }
 
@@ -316,7 +316,7 @@ void do_cmd_zap_rod_aux(int item)
        if (world_player)
        {
                if (flush_failure) flush();
-               msg_print(_("\8e~\82Ü\82Á\82½\8e\9e\82Ì\92\86\82Å\82Í\82¤\82Ü\82­\93­\82©\82È\82¢\82æ\82¤\82¾\81B", "Nothing happen. Maybe this rod is freezing too."));
+               msg_print(_("止まった時の中ではうまく働かないようだ。", "Nothing happen. Maybe this rod is freezing too."));
                sound(SOUND_FAIL);
                return;
        }
@@ -337,7 +337,7 @@ void do_cmd_zap_rod_aux(int item)
        if (!success)
        {
                if (flush_failure) flush();
-               msg_print(_("\82¤\82Ü\82­\83\8d\83b\83h\82ð\8eg\82¦\82È\82©\82Á\82½\81B", "You failed to use the rod properly."));
+               msg_print(_("うまくロッドを使えなかった。", "You failed to use the rod properly."));
                sound(SOUND_FAIL);
                return;
        }
@@ -348,14 +348,14 @@ void do_cmd_zap_rod_aux(int item)
        if ((o_ptr->number == 1) && (o_ptr->timeout))
        {
                if (flush_failure) flush();
-               msg_print(_("\82±\82Ì\83\8d\83b\83h\82Í\82Ü\82¾\96\82\97Í\82ð\8f[\93U\82µ\82Ä\82¢\82é\8dÅ\92\86\82¾\81B", "The rod is still charging."));
+               msg_print(_("このロッドはまだ魔力を充填している最中だ。", "The rod is still charging."));
                return;
        }
        /* A stack of rods lacks enough energy. */
        else if ((o_ptr->number > 1) && (o_ptr->timeout > k_ptr->pval * (o_ptr->number - 1)))
        {
                if (flush_failure) flush();
-               msg_print(_("\82»\82Ì\83\8d\83b\83h\82Í\82Ü\82¾\8f[\93U\92\86\82Å\82·\81B", "The rods are all still charging."));
+               msg_print(_("そのロッドはまだ充填中です。", "The rods are all still charging."));
                return;
        }
 
@@ -392,8 +392,8 @@ void do_cmd_zap_rod_aux(int item)
 }
 
 /*!
-* @brief \83\8d\83b\83h\82ð\8eg\82¤\83R\83}\83\93\83h\82Ì\83\81\83C\83\93\83\8b\81[\83`\83\93 /
-* @return \82È\82µ
+* @brief ロッドを使うコマンドのメインルーチン /
+* @return なし
 */
 void do_cmd_zap_rod(void)
 {
@@ -409,8 +409,8 @@ void do_cmd_zap_rod(void)
        item_tester_tval = TV_ROD;
 
        /* Get an item */
-       q = _("\82Ç\82Ì\83\8d\83b\83h\82ð\90U\82è\82Ü\82·\82©? ", "Zap which rod? ");
-       s = _("\8eg\82¦\82é\83\8d\83b\83h\82ª\82È\82¢\81B", "You have no rod to zap.");
+       q = _("どのロッドを振りますか? ", "Zap which rod? ");
+       s = _("使えるロッドがない。", "You have no rod to zap.");
 
        if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
 
index 3eedc15..32bfacd 100644 (file)
@@ -1,13 +1,13 @@
-#include "angband.h"
+#include "angband.h"
 
 
 /*!
-* @brief \96\82\96@\96_\82Ì\8cø\89Ê\82ð\94­\93®\82·\82é
-* @param sval \83I\83u\83W\83F\83N\83g\82Ìsval
-* @param dir \94­\93®\82Ì\95û\8cüID
-* @param powerful \8b­\97Í\94­\93®\8fã\82Ì\8f\88\97\9d\82È\82ç\82ÎTRUE
-* @param magic \96\82\93¹\8bï\8fp\8fã\82Ì\8f\88\97\9d\82È\82ç\82ÎTRUE
-* @return \94­\93®\82É\82æ\82è\8cø\89Ê\93à\97e\82ª\8am\92è\82µ\82½\82È\82ç\82ÎTRUE\82ð\95Ô\82·
+* @brief 魔法棒の効果を発動する
+* @param sval オブジェクトのsval
+* @param dir 発動の方向ID
+* @param powerful 強力発動上の処理ならばTRUE
+* @param magic 魔道具術上の処理ならばTRUE
+* @return 発動により効果内容が確定したならばTRUEを返す
 */
 int wand_effect(OBJECT_SUBTYPE_VALUE sval, int dir, bool powerful, bool magic)
 {
@@ -91,7 +91,7 @@ int wand_effect(OBJECT_SUBTYPE_VALUE sval, int dir, bool powerful, bool magic)
        case SV_WAND_LITE:
        {
                HIT_POINT dam = damroll((powerful ? 12 : 6), 8);
-               msg_print(_("\90Â\82­\8bP\82­\8cõ\90ü\82ª\95ú\82½\82ê\82½\81B", "A line of blue shimmering light appears."));
+               msg_print(_("青く輝く光線が放たれた。", "A line of blue shimmering light appears."));
                (void)lite_line(dir, dam);
                ident = TRUE;
                break;
@@ -205,7 +205,7 @@ int wand_effect(OBJECT_SUBTYPE_VALUE sval, int dir, bool powerful, bool magic)
 
        case SV_WAND_WONDER:
        {
-               msg_print(_("\82¨\82Á\82Æ\81A\93ä\82Ì\96\82\96@\96_\82ð\8en\93®\82³\82¹\82½\81B", "Oops.  Wand of wonder activated."));
+               msg_print(_("おっと、謎の魔法棒を始動させた。", "Oops.  Wand of wonder activated."));
                break;
        }
 
@@ -269,7 +269,7 @@ int wand_effect(OBJECT_SUBTYPE_VALUE sval, int dir, bool powerful, bool magic)
 
        case SV_WAND_ROCKETS:
        {
-               msg_print(_("\83\8d\83P\83b\83g\82ð\94­\8eË\82µ\82½\81I", "You launch a rocket!"));
+               msg_print(_("ロケットを発射した!", "You launch a rocket!"));
                fire_rocket(GF_ROCKET, dir, 250 + lev * 3, rad);
                ident = TRUE;
                break;
@@ -293,10 +293,10 @@ int wand_effect(OBJECT_SUBTYPE_VALUE sval, int dir, bool powerful, bool magic)
 }
 
 /*!
-* @brief \96\82\96@\96_\82ð\8eg\82¤\83R\83}\83\93\83h\82Ì\83T\83u\83\8b\81[\83`\83\93 /
+* @brief 魔法棒を使うコマンドのサブルーチン /
 * Aim a wand (from the pack or floor).
-* @param item \8eg\82¤\83I\83u\83W\83F\83N\83g\82Ì\8f\8a\8e\9d\95iID
-* @return \82È\82µ
+* @param item 使うオブジェクトの所持品ID
+* @return なし
 * @details
 * <pre>
 * Use a single charge from a single item.
@@ -334,7 +334,7 @@ void do_cmd_aim_wand_aux(int item)
        /* Mega-Hack -- refuse to aim a pile from the ground */
        if ((item < 0) && (o_ptr->number > 1))
        {
-               msg_print(_("\82Ü\82¸\82Í\96\82\96@\96_\82ð\8fE\82í\82È\82¯\82ê\82Î\81B", "You must first pick up the wands."));
+               msg_print(_("まずは魔法棒を拾わなければ。", "You must first pick up the wands."));
                return;
        }
 
@@ -375,7 +375,7 @@ void do_cmd_aim_wand_aux(int item)
        if (world_player)
        {
                if (flush_failure) flush();
-               msg_print(_("\8e~\82Ü\82Á\82½\8e\9e\82Ì\92\86\82Å\82Í\82¤\82Ü\82­\93­\82©\82È\82¢\82æ\82¤\82¾\81B", "Nothing happen. Maybe this wand is freezing too."));
+               msg_print(_("止まった時の中ではうまく働かないようだ。", "Nothing happen. Maybe this wand is freezing too."));
                sound(SOUND_FAIL);
                return;
        }
@@ -384,7 +384,7 @@ void do_cmd_aim_wand_aux(int item)
        if ((chance < USE_DEVICE) || (randint1(chance) < USE_DEVICE) || (p_ptr->pclass == CLASS_BERSERKER))
        {
                if (flush_failure) flush();
-               msg_print(_("\96\82\96@\96_\82ð\82¤\82Ü\82­\8eg\82¦\82È\82©\82Á\82½\81B", "You failed to use the wand properly."));
+               msg_print(_("魔法棒をうまく使えなかった。", "You failed to use the wand properly."));
                sound(SOUND_FAIL);
                return;
        }
@@ -393,7 +393,7 @@ void do_cmd_aim_wand_aux(int item)
        if (o_ptr->pval <= 0)
        {
                if (flush_failure) flush();
-               msg_print(_("\82±\82Ì\96\82\96@\96_\82É\82Í\82à\82¤\96\82\97Í\82ª\8ec\82Á\82Ä\82¢\82È\82¢\81B", "The wand has no charges left."));
+               msg_print(_("この魔法棒にはもう魔力が残っていない。", "The wand has no charges left."));
                o_ptr->ident |= (IDENT_EMPTY);
 
                /* Combine / Reorder the pack (later) */
@@ -449,8 +449,8 @@ void do_cmd_aim_wand_aux(int item)
 }
 
 /*!
-* @brief \96\82\96@\96_\82ð\8eg\82¤\83R\83}\83\93\83h\82Ì\83\81\83C\83\93\83\8b\81[\83`\83\93 /
-* @return \82È\82µ
+* @brief 魔法棒を使うコマンドのメインルーチン /
+* @return なし
 */
 void do_cmd_aim_wand(void)
 {
@@ -466,8 +466,8 @@ void do_cmd_aim_wand(void)
        }
 
        /* Get an item */
-       q = _("\82Ç\82Ì\96\82\96@\96_\82Å\91_\82¢\82Ü\82·\82©? ", "Aim which wand? ");
-       s = _("\8eg\82¦\82é\96\82\96@\96_\82ª\82È\82¢\81B", "You have no wand to aim.");
+       q = _("どの魔法棒で狙いますか? ", "Aim which wand? ");
+       s = _("使える魔法棒がない。", "You have no wand to aim.");
 
        if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;
 
index 7616a30..512b2b3 100644 (file)
-#include "angband.h"\r
-#include "gameoption.h"\r
-\r
-/*!\r
- * @brief \83I\83v\83V\83\87\83\93\83e\81[\83u\83\8b /\r
- * Available Options\r
- */\r
-const option_type option_info[] =\r
-{\r
-       /*** Input Options ***/\r
-\r
-       { &rogue_like_commands,         FALSE, OPT_PAGE_INPUT, 0, 0,\r
-       "rogue_like_commands",          _("\83\8d\81[\83O\95\97\83L\81[\94z\92u\82ð\8eg\97p\82·\82é", "Rogue-like commands") },\r
-\r
-       { &always_pickup,               FALSE, OPT_PAGE_INPUT, 0, 5,\r
-       "always_pickup",                _("\8fí\82É\83A\83C\83e\83\80\82ð\8fE\82¤" , "Pick things up by default") },\r
-\r
-       { &carry_query_flag,            FALSE, OPT_PAGE_INPUT, 0, 3,\r
-       "carry_query_flag",             _("\83A\83C\83e\83\80\82ð\8fE\82¤\91O\82É\8am\94F\82·\82é", "Prompt before picking things up") },\r
-\r
-       { &quick_messages,              TRUE,  OPT_PAGE_INPUT, 0, 1,\r
-       "quick_messages",               _("\83N\83C\83b\83N\81E\83\81\83b\83Z\81[\83W\82ð\8eg\97p\82·\82é", "Activate quick messages") },\r
-\r
-       { &auto_more,                   FALSE, OPT_PAGE_INPUT, 2, 6,\r
-       "auto_more",                    _("\83L\81[\91Ò\82¿\82µ\82È\82¢\82Å\98A\91±\82Å\83\81\83b\83Z\81[\83W\82ð\95\\8e¦\82·\82é", "Automatically clear '-more-' prompts") },\r
-\r
-       { &command_menu,                TRUE,  OPT_PAGE_INPUT, 2, 7,\r
-       "command_menu",                 _("\83\81\83j\83\85\81[\82É\82æ\82è\83R\83}\83\93\83h\91I\91ð\82ð\97L\8cø\82É\82·\82é", "Enable command selection menu") },\r
-\r
-       { &other_query_flag,            FALSE, OPT_PAGE_INPUT, 0, 2,\r
-       "other_query_flag",             _("\8f°\8fã\82Ì\83A\83C\83e\83\80\82ð\8eg\97p\82·\82é\82Æ\82«\82É\8am\94F\82·\82é", "Prompt for floor item selection") },\r
-\r
-       { &use_old_target,              FALSE, OPT_PAGE_INPUT, 0, 4,\r
-       "use_old_target",               _("\8fí\82É\88È\91O\82Ì\83^\81[\83Q\83b\83g\82ð\8ew\92è\82·\82é", "Use old target by default") },\r
-\r
-       { &always_repeat,               TRUE,  OPT_PAGE_INPUT, 0, 6,\r
-       "always_repeat",                _("\83R\83}\83\93\83h\8e©\93®\8cJ\82è\95Ô\82µ", "Repeat obvious commands") },\r
-\r
-       { &confirm_destroy,             FALSE, OPT_PAGE_INPUT, 5, 3,\r
-       "confirm_destroy",              _("\81u\96³\89¿\92l\81v\82È\83A\83C\83e\83\80\82ð\94j\89ó\82·\82é\8e\9e\8am\94F\82·\82é", "Prompt for destruction of known worthless items") },\r
-\r
-       { &confirm_wear,                TRUE,  OPT_PAGE_INPUT, 5, 4,\r
-       "confirm_wear",                 _("\8eô\82í\82ê\82½\95¨\82ð\91\95\94õ\82·\82é\8e\9e\8am\94F\82·\82é", "Confirm to wear/wield known cursed items") },\r
-\r
-       { &confirm_quest,               TRUE,  OPT_PAGE_INPUT, 1, 9,\r
-       "confirm_quest",                _("\83N\83G\83X\83g\82ð\92ú\82ß\82Ä\8aK\92i\82Å\93¦\82°\82é\91O\82É\8am\94F\82·\82é", "Prompt before exiting a quest level") },\r
-\r
-       { &target_pet,                  FALSE, OPT_PAGE_INPUT, 2, 5,\r
-       "target_pet",                   _("\83y\83b\83g\82ð\83^\81[\83Q\83b\83g\82É\82·\82é", "Allow targetting pets") },\r
-\r
-       #ifdef ALLOW_EASY_OPEN\r
-       { &easy_open,                   TRUE,  OPT_PAGE_INPUT, 5, 7,\r
-       "easy_open",                    _("\8e©\93®\93I\82É\83h\83A\82ð\8aJ\82¯\82é", "Automatically open doors") },\r
-       #endif /* ALLOW_EASY_OPEN */\r
-\r
-       #ifdef ALLOW_EASY_DISARM\r
-       { &easy_disarm,                 TRUE,  OPT_PAGE_INPUT, 5, 8,\r
-       "easy_disarm",                  _("\8e©\93®\93I\82Éã©\82ð\89ð\8f\9c\82·\82é", "Automatically disarm traps") },\r
-       #endif /* ALLOW_EASY_DISARM */\r
-\r
-       #ifdef ALLOW_EASY_FLOOR /* TNB */\r
-       { &easy_floor,                  FALSE, OPT_PAGE_INPUT, 5, 9,\r
-       "easy_floor",                   _("\8f°\8fã\82Å\8fd\82È\82Á\82½\83A\83C\83e\83\80\82ð\83\8a\83X\83g\82·\82é", "Display floor stacks in a list") },\r
-       #endif /* ALLOW_EASY_FLOOR -- TNB */\r
-\r
-       { &use_command,                 FALSE, OPT_PAGE_INPUT, 5, 10,\r
-       "use_command",                  _("\81u\8eg\82¤(a)\81v\83R\83}\83\93\83h\82Å\83A\83C\83e\83\80\82ð\89½\82Å\82à\8eg\82¦\82é", "Allow unified use command") },\r
-\r
-       { &over_exert,                  FALSE, OPT_PAGE_INPUT, 0, 29,\r
-       "over_exert",                   _("MP\82ª\91«\82è\82È\82­\82Ä\82à\96\82\96@\82É\92§\90í\82·\82é", "Allow casting spells when short of mana") },\r
-\r
-       { &numpad_as_cursorkey,         TRUE, OPT_PAGE_INPUT, 2, 31,\r
-       "numpad_as_cursorkey",          _("\83G\83f\83B\83^\93à\82Å\83e\83\93\83L\81[\82ð\83J\81[\83\\83\8b\83L\81[\82Æ\82µ\82Ä\8eg\82¤", "Use numpad keys as cursor keys in editor mode") },\r
-\r
-/*** Map Screen Options ***/\r
-\r
-       { &center_player,               FALSE, OPT_PAGE_MAPSCREEN, 5, 11,\r
-       "center_player",                _("\8fí\82É\83v\83\8c\83C\83\84\81[\82ð\92\86\90S\82É\92u\82­(*\92x\82¢*)", "Center map while walking (*slow*)") },\r
-\r
-       { &center_running,              TRUE,  OPT_PAGE_MAPSCREEN, 5, 12,\r
-       "center_running",               _("\91\96\82Á\82Ä\82¢\82é\8e\9e\82Å\82à\92\86\90S\82É\92u\82­", "Centering even while running") },\r
-\r
-       { &view_yellow_lite,            TRUE,  OPT_PAGE_MAPSCREEN, 1, 28,\r
-       "view_yellow_lite",             _("\96¾\82©\82è\82Ì\94Í\88Í\82ð\93Á\95Ê\82È\90F\82Å\95\\8e¦\82·\82é", "Use special colors for torch-lit grids") },\r
-\r
-       { &view_bright_lite,            TRUE,  OPT_PAGE_MAPSCREEN, 1, 29,\r
-       "view_bright_lite",             _("\8e\8b\8aE\82Ì\94Í\88Í\82ð\93Á\95Ê\82È\90F\82Å\95\\8e¦\82·\82é", "Use special colors for 'viewable' grids") },\r
-\r
-       { &view_granite_lite,           TRUE,  OPT_PAGE_MAPSCREEN, 1, 30,\r
-       "view_granite_lite",            _("\95Ç\82ð\93Á\95Ê\82È\90F\82Å\95\\8e¦\82·\82é(\8fd\82¢)", "Use special colors for wall grids (slow)") },\r
-\r
-       { &view_special_lite,           TRUE,  OPT_PAGE_MAPSCREEN, 1, 31,\r
-       "view_special_lite",            _("\8f°\82ð\93Á\95Ê\82È\90F\82Å\95\\8e¦\82·\82é(\8fd\82¢)", "Use special colors for floor grids (slow)") },\r
-\r
-       { &view_perma_grids,            TRUE,  OPT_PAGE_MAPSCREEN, 1, 6,\r
-       "view_perma_grids",             _("\96¾\82é\82¢\8fê\8f\8a\82Í\82»\82Ì\82Ü\82Ü\82É\82·\82é", "Map remembers all perma-lit grids") },\r
-\r
-       { &view_torch_grids,            FALSE, OPT_PAGE_MAPSCREEN, 1, 7,\r
-       "view_torch_grids",             _("\96¾\82©\82è\82Å\8fÆ\82ç\82µ\82½\8fê\8f\8a\82Í\82»\82Ì\82Ü\82Ü\82É\82·\82é", "Map remembers all torch-lit grids") },\r
-\r
-       { &view_unsafe_grids,           FALSE, OPT_PAGE_MAPSCREEN, 1, 8,\r
-       "view_unsafe_grids",            _("\83g\83\89\83b\83v\8a´\92m\8dÏ\82Ý\82Å\82È\82¢\8fê\8f\8a\82ð\95\\8e¦\82·\82é", "Map marked by detect traps") },\r
-\r
-       { &view_reduce_view,            FALSE, OPT_PAGE_MAPSCREEN, 1, 17,\r
-       "view_reduce_view",             _("\8aX\82Å\82Í\8e\8b\96ì\82ð\8b·\82­\82·\82é", "Reduce view-radius in town") },\r
-\r
-       { &fresh_before,                TRUE,  OPT_PAGE_MAPSCREEN, 1, 23,\r
-       "fresh_before",                 _("\98A\91±\83R\83}\83\93\83h\92\86\82É\89æ\96Ê\82ð\8dÄ\95`\89æ\82µ\91±\82¯\82é", "Flush output while continuous command") },\r
-\r
-       { &fresh_after,                 FALSE, OPT_PAGE_MAPSCREEN, 1, 24,\r
-       "fresh_after",                  _("\83R\83}\83\93\83h\8cã\82É\89æ\96Ê\82ð\8fí\82É\8dÄ\95`\89æ\82µ\91±\82¯\82é", "Flush output after monster's move") },\r
-\r
-       { &fresh_message,               FALSE, OPT_PAGE_MAPSCREEN, 1, 25,\r
-       "fresh_message",                _("\83\81\83b\83Z\81[\83W\82Ì\8cã\82É\89æ\96Ê\82ð\8dÄ\95`\89æ\82·\82é", "Flush output after every message") },\r
-\r
-       { &hilite_player,               FALSE, OPT_PAGE_MAPSCREEN, 1, 27,\r
-       "hilite_player",                _("\83v\83\8c\83C\83\84\81[\82É\83J\81[\83\\83\8b\82ð\8d\87\82í\82¹\82é", "Hilite the player with the cursor") },\r
-\r
-       { &display_path,                FALSE, OPT_PAGE_MAPSCREEN, 2, 8,\r
-       "display_path",                 _("\96\82\96@\82â\96î\82Ì\8bO\90Õ\82ð\95\\8e¦\82·\82é", "Display actual path before shooting") },\r
-\r
-/*** Text Display Options ***/\r
-\r
-       { &plain_descriptions,          TRUE,  OPT_PAGE_TEXT, 5, 1,\r
-       "plain_descriptions",           _("\83A\83C\83e\83\80\82Ì\8bL\8fq\82ð\8aÈ\97ª\82É\82·\82é", "Plain object descriptions") },\r
-\r
-       { &plain_pickup,                FALSE, OPT_PAGE_TEXT, 6, 6,\r
-       "plain_pickup",                 _("\81u\8fE\82Á\82½\81v\83\81\83b\83Z\81[\83W\82ð\8aÈ\97ª\89»\82·\82é", "Plain pickup messages(japanese only)") },\r
-\r
-       { &always_show_list,            TRUE,  OPT_PAGE_TEXT, 4, 0,\r
-       "always_show_list",             _("\91I\91ð\8e\9e\82É\82Í\8fí\82É\88ê\97\97\82ð\95\\8e¦\82·\82é", "Always show list when choosing items") },\r
-\r
-       { &depth_in_feet,               FALSE, OPT_PAGE_TEXT, 0, 7,\r
-       "depth_in_feet",                _("\83_\83\93\83W\83\87\83\93\82Ì\90[\82³\82ð\83t\83B\81[\83g\82Å\95\\8e¦\82·\82é", "Show dungeon level in feet") },\r
-\r
-       { &show_labels,                 TRUE,  OPT_PAGE_TEXT, 0, 10,\r
-       "show_labels",                  _("\91\95\94õ\88ê\97\97\82Å\91\95\94õ\8fê\8f\8a\82ð\95\\8e¦\82·\82é", "Show labels in object listings") },\r
-\r
-       { &show_weights,                TRUE,  OPT_PAGE_TEXT, 0, 11,\r
-       "show_weights",                 _("\83A\83C\83e\83\80\88ê\97\97\82Å\8fd\97Ê\82ð\95\\8e¦\82·\82é", "Show weights in object listings") },\r
-\r
-       { &show_item_graph,             TRUE,  OPT_PAGE_TEXT, 2, 0,\r
-       "show_item_graph",              _("\83A\83C\83e\83\80\82Ì\83V\83\93\83{\83\8b\82ð\95\\8e¦\82·\82é", "Show items graphics") },\r
-\r
-       { &equippy_chars,               TRUE,  OPT_PAGE_TEXT, 1, 12,\r
-       "equippy_chars",                _("\83X\83e\81[\83^\83X\82É\95\8e\9a\82Å\91\95\94õ\82ð\95\\8e¦\82·\82é", "Display 'equippy' chars") },\r
-\r
-       { &display_mutations,           FALSE, OPT_PAGE_TEXT, 5, 0,\r
-       "display_mutations",            _("'C'\83R\83}\83\93\83h\82Å\93Ë\91R\95Ï\88Ù\82ð\95\\8e¦\82·\82é", "Display mutations in 'C'haracter Display") },\r
-\r
-       { &compress_savefile,           FALSE, OPT_PAGE_TEXT, 1, 26,\r
-       "compress_savefile",            _("\83Z\81[\83u\81E\83t\83@\83C\83\8b\92\86\82Ì\83\81\83b\83Z\81[\83W\82ð\88³\8fk\82·\82é", "Compress messages in savefiles") },\r
-\r
-       { &abbrev_extra,                FALSE, OPT_PAGE_TEXT, 2, 10,\r
-       "abbrev_extra",                 _("\83A\83C\83e\83\80\82É\92Ç\89Á\91Ï\90«/\94\\97Í\82Ì\97ª\8fÌ\82ð\8d\8f\82Þ", "Describe obj's extra resistances by abbreviation") },\r
-\r
-       { &abbrev_all,                  FALSE, OPT_PAGE_TEXT, 2, 11,\r
-       "abbrev_all",                   _("\83A\83C\83e\83\80\82É\91S\82Ä\82Ì\91Ï\90«/\94\\97Í\82Ì\97ª\8fÌ\82ð\8d\8f\82Þ", "Describe obj's all resistances by abbreviation") },\r
-\r
-       { &exp_need,                    FALSE, OPT_PAGE_TEXT, 2, 12,\r
-       "exp_need",                     _("\8e\9f\82Ì\83\8c\83x\83\8b\82É\95K\97v\82È\8co\8c±\92l\82ð\95\\8e¦\82·\82é", "Show the experience needed for next level") },\r
-\r
-       { &ignore_unview,               FALSE, OPT_PAGE_TEXT, 2, 13,\r
-       "ignore_unview",                _("\8e\8b\8aE\8aO\82Ì\83\82\83\93\83X\83^\81[\82Ì\8ds\93®\82ð\95\\8e¦\82µ\82È\82¢", "Ignore whenever any monster does") },\r
-\r
-       { &show_ammo_detail,            TRUE, OPT_PAGE_TEXT, 2, 14,\r
-       "show_ammo_detail",             _("\96î\92e\82Ì\83_\83\81\81[\83W\82Ì\90à\96¾\82ð\95\\8e¦\82·\82é", "Show description of ammo damage") },\r
-\r
-       { &show_ammo_no_crit,           FALSE, OPT_PAGE_TEXT, 2, 15,\r
-       "show_ammo_no_crit",            _("\89ï\90S\82ð\8dl\97\82µ\82È\82¢\8fê\8d\87\82Ì\96î\92e\82Ì\83_\83\81\81[\83W\82ð\95\\8e¦\82·\82é", "Show ammo damage with no critical") },\r
-\r
-       { &show_ammo_crit_ratio,        FALSE, OPT_PAGE_TEXT, 2, 16,\r
-       "show_ammo_crit_ratio",         _("\96î\92e\82Ì\89ï\90S\94­\90\97¦\82ð\95\\8e¦\82·\82é", "Show critical ratio of ammo") },\r
-\r
-       { &show_actual_value,           FALSE, OPT_PAGE_TEXT, 2, 17,\r
-       "show_actual_vaule",            _("\8ae\8bZ\94\\92l\82É\8eÀ\92l\82ð\95\\8e¦\82·\82é", "Show actual value of skill") },\r
-\r
-\r
-/*** Game-Play ***/\r
-\r
-       { &stack_force_notes,           TRUE,  OPT_PAGE_GAMEPLAY, 0, 8,\r
-       "stack_force_notes",            _("\88Ù\82È\82é\96Á\82Ì\83A\83C\83e\83\80\82ð\82Ü\82Æ\82ß\82é", "Merge inscriptions when stacking") },\r
-\r
-       { &stack_force_costs,           FALSE, OPT_PAGE_GAMEPLAY, 0, 9,\r
-       "stack_force_costs",            _("\88Ù\82È\82é\8a\84\88ø\95\\8e¦\82Ì\83A\83C\83e\83\80\82ð\82Ü\82Æ\82ß\82é", "Merge discounts when stacking") },\r
-\r
-       { &expand_list,                 TRUE,  OPT_PAGE_GAMEPLAY, 1, 5,\r
-       "expand_list",                  _("\81u\88ê\97\97\81v\83R\83}\83\93\83h\82ð\8ag\92£\82·\82é", "Expand the power of the list commands") },\r
-\r
-       { &small_levels,                TRUE,  OPT_PAGE_GAMEPLAY, 0, 30,\r
-       "small_levels",                 _("\94ñ\8fí\82É\8f¬\82³\82¢\83t\83\8d\83A\82Ì\90\90¬\82ð\89Â\94\\82É\82·\82é", "Allow unusually small dungeon levels") },\r
-\r
-       { &always_small_levels,         FALSE, OPT_PAGE_GAMEPLAY, 2, 3,\r
-       "always_small_levels",          _("\8fí\82É\94ñ\8fí\82É\8f¬\82³\82¢\83t\83\8d\83A\82ð\90\90¬\82·\82é", "Always create unusually small dungeon levels") },\r
-\r
-       { &empty_levels,                TRUE,  OPT_PAGE_GAMEPLAY, 0, 31,\r
-       "empty_levels",                 _("\8bó\82Á\82Û\82Ì\81u\83A\83\8a\81[\83i\81v\83\8c\83x\83\8b\82Ì\90\90¬\82ð\89Â\94\\82É\82·\82é", "Allow empty 'arena' levels") },\r
-\r
-       { &bound_walls_perm,            FALSE, OPT_PAGE_GAMEPLAY, 2, 1,\r
-       "bound_walls_perm",             _("\83_\83\93\83W\83\87\83\93\82Ì\8aO\95Ç\82ð\89i\8bv\8aâ\82É\82·\82é", "Boundary walls become 'permanent wall'") },\r
-\r
-       { &last_words,                  TRUE,  OPT_PAGE_GAMEPLAY, 0, 28,\r
-       "last_words",                   _("\83L\83\83\83\89\83N\83^\81[\82ª\8e\80\82ñ\82¾\8e\9e\88â\8c¾\82ð\82Ì\82±\82·", "Leave last words when your character dies") },\r
-\r
-#ifdef WORLD_SCORE\r
-       { &send_score,                  TRUE,  OPT_PAGE_GAMEPLAY, 4, 6,\r
-       "send_score",                   _("\83X\83R\83A\83T\81[\83o\82É\83X\83R\83A\82ð\91\97\82é", "Send score dump to the world score server") },\r
-#endif\r
-\r
-       { &allow_debug_opts,            FALSE, OPT_PAGE_GAMEPLAY, 6, 11,\r
-       "allow_debug_opts",             _("\83f\83o\83b\83O/\8d¼\8b\\83I\83v\83V\83\87\83\93\82ð\8b\96\89Â\82·\82é", "Allow use of debug/cheat options") },\r
-\r
-/*** Disturbance ***/\r
-\r
-       { &find_ignore_stairs,          FALSE, OPT_PAGE_DISTURBANCE, 0, 16,\r
-       "find_ignore_stairs",           _("\8aK\92i\82Í\92Ê\89ß\82·\82é", "Run past stairs") },\r
-\r
-       { &find_ignore_doors,           TRUE,  OPT_PAGE_DISTURBANCE, 0, 17,\r
-       "find_ignore_doors",            _("\83h\83A\82Í\92Ê\89ß\82·\82é", "Run through open doors") },\r
-\r
-       { &find_cut,                    FALSE, OPT_PAGE_DISTURBANCE, 0, 18,\r
-       "find_cut",                     _("\8bÈ\82è\8ap\82ð\8eÎ\82ß\82É\8dÅ\92Z\8b\97\97£\82Å\92Ê\89ß\82·\82é", "Run past known corners") },\r
-\r
-       { &check_abort,                 TRUE,  OPT_PAGE_DISTURBANCE, 1, 18,\r
-       "check_abort",                  _("\98A\91±\83R\83}\83\93\83h\82Í\83L\81[\93ü\97Í\82Å\92\86\92f\82·\82é", "Check for user abort while continuous command") },\r
-\r
-       { &flush_failure,               TRUE,  OPT_PAGE_DISTURBANCE, 1, 20,\r
-       "flush_failure",                _("\97l\81X\82È\83~\83X\94­\90\8e\9e\82É\93ü\97Í\82ð\83N\83\8a\83A\82·\82é", "Flush input on various failures") },\r
-\r
-       { &flush_disturb,               FALSE, OPT_PAGE_DISTURBANCE, 1, 21,\r
-       "flush_disturb",                _("\8fá\8aQ\94­\90\8e\9e\82É\93ü\97Í\82ð\83N\83\8a\83A\82·\82é", "Flush input whenever disturbed") },\r
-\r
-       { &disturb_move,                FALSE, OPT_PAGE_DISTURBANCE, 0, 20,\r
-       "disturb_move",                 _("\82Ç\82±\82Ì\83\82\83\93\83X\83^\81[\82ª\93®\82¢\82Ä\82à\8ds\93®\82ð\92\86\8e~\82·\82é", "Disturb whenever any monster moves") },\r
-\r
-       { &disturb_high,                FALSE, OPT_PAGE_DISTURBANCE, 1, 3,\r
-       "disturb_high",                 _("\83\8c\83x\83\8b\82Ì\8d\82\82¢\83\82\83\93\83X\83^\81[\82ª\93®\82¢\82½\82ç\8ds\93®\82ð\92\86\8e~\82·\82é", "Disturb whenever high-level monster moves") },\r
-\r
-       { &disturb_near,                TRUE,  OPT_PAGE_DISTURBANCE, 0, 21,\r
-       "disturb_near",                 _("\8e\8b\8aE\93à\82Ì\83\82\83\93\83X\83^\81[\82ª\93®\82¢\82½\82ç\8ds\93®\82ð\92\86\8e~\82·\82é", "Disturb whenever viewable monster moves") },\r
-\r
-       { &disturb_pets,                FALSE, OPT_PAGE_DISTURBANCE, 5, 6,\r
-       "disturb_pets",                 _("\8e\8b\8aE\93à\82Ì\83y\83b\83g\82ª\93®\82¢\82½\82ç\8ds\93®\82ð\92\86\8e~\82·\82é", "Disturb when visible pets move") },\r
-\r
-       { &disturb_panel,               TRUE,  OPT_PAGE_DISTURBANCE, 0, 22,\r
-       "disturb_panel",                _("\89æ\96Ê\83X\83N\83\8d\81[\83\8b\8e\9e\82É\8ds\93®\82ð\92\86\8e~\82·\82é", "Disturb whenever map panel changes") },\r
-\r
-       { &disturb_state,               TRUE,  OPT_PAGE_DISTURBANCE, 0, 23,\r
-       "disturb_state",                _("\8e©\95ª\82Ì\83X\83e\81[\83^\83X\95Ï\89»\8e\9e\82É\8ds\93®\82ð\92\86\8e~\82·\82é", "Disturb whenever player state changes") },\r
-\r
-       { &disturb_minor,               TRUE,  OPT_PAGE_DISTURBANCE, 0, 24,\r
-       "disturb_minor",                _("\8d±\8d×\82È\82±\82Æ\82ª\8bN\82«\82Ä\82à\8ds\93®\82ð\92\86\8e~\82·\82é", "Disturb whenever boring things happen") },\r
-\r
-       { &ring_bell,                   FALSE, OPT_PAGE_DISTURBANCE, 0, 14,\r
-       "ring_bell",                    _("\83G\83\89\81[\8e\9e\82É\83r\81[\83v\89¹\82ð\96Â\82ç\82·", "Audible bell (on errors, etc)") },\r
-\r
-       { &disturb_trap_detect,         TRUE,  OPT_PAGE_DISTURBANCE, 0, 27,\r
-       "disturb_trap_detect",          _("\83g\83\89\83b\83v\8a´\92m\94Í\88Í\8aO\82É\8fo\82é\92¼\91O\82É\8ds\93®\82ð\92\86\8e~\82·\82é", "Disturb when leaving trap detected area") },\r
-\r
-       { &alert_trap_detect,           FALSE, OPT_PAGE_DISTURBANCE, 0, 25,\r
-       "alert_trap_detect",            _("\83g\83\89\83b\83v\8a´\92m\94Í\88Í\8aO\82É\8fo\82é\92¼\91O\82É\8cx\8d\90\82·\82é", "Alert when leaving trap detected area") },\r
-\r
-/*** Birth Options ***/\r
-       { &manual_haggle,               FALSE, OPT_PAGE_BIRTH, 1, 0,\r
-       "manual_haggle",                _("\93X\82Å\92l\90Ø\82è\8cð\8fÂ\82ð\82·\82é", "Manually haggle in stores") },\r
-\r
-       { &easy_band,                   FALSE, OPT_PAGE_BIRTH, 6, 31,\r
-       "easy_band",                    _("\8f\89\90S\8eÒ\97p\8aÈ\92P\83\82\81[\83h(*)", "Easy Mode (*)") },\r
-\r
-       { &smart_learn,                 TRUE,  OPT_PAGE_BIRTH, 1, 14,\r
-       "smart_learn",                  _("\83\82\83\93\83X\83^\81[\82Í\8e¸\94s\82ð\8aw\8fK\82·\82é(*)", "Monsters learn from their mistakes (*)") },\r
-\r
-       { &smart_cheat,                 FALSE, OPT_PAGE_BIRTH, 1, 15,\r
-       "smart_cheat",                  _("\83\82\83\93\83X\83^\81[\82Í\83v\83\8c\83C\83\84\81[\82Ì\8eã\82Ý\82ð\93Ë\82­(*)", "Monsters exploit players weaknesses (*)") },\r
-\r
-       { &vanilla_town,                FALSE, OPT_PAGE_BIRTH, 6, 0,\r
-       "vanilla_town",                 _("\8c³\91c\82Ì\8aX/\83N\83G\83X\83g\82Æ\8dr\96ì\82È\82µ", "Use 'vanilla' town without quests and wilderness") },\r
-\r
-       { &lite_town,                   FALSE, OPT_PAGE_BIRTH, 6, 1,\r
-       "lite_town",                    _("\8f¬\8bK\96Í\82È\8aX/\8dr\96ì\82È\82µ", "Use 'lite' town without a wilderness") },\r
-\r
-       { &ironman_shops,               FALSE, OPT_PAGE_BIRTH, 6, 2,\r
-       "ironman_shops",                _("(\93S\90l\97p)\93X\82ð\8eg\97p\82µ\82È\82¢(*)", "Stores are permanently closed (*)") },\r
-\r
-       { &ironman_small_levels,        FALSE, OPT_PAGE_BIRTH, 6, 3,\r
-       "ironman_small_levels",         _("(\93S\90l\97p)\8fí\82É\94ñ\8fí\82É\8f¬\82³\82¢\83t\83\8d\83A\82ð\90\90¬(*)", "Always create unusually small dungeon levels (*)") },\r
-\r
-       { &ironman_downward,            FALSE, OPT_PAGE_BIRTH, 6, 4,\r
-       "ironman_downward",             _("(\93S\90l\97p)\8bA\8aÒ\82Æ\8fã\82è\8aK\92i\82È\82µ(*)", "Disable recall and use of up stairs (*)") },\r
-\r
-       { &ironman_empty_levels,        FALSE, OPT_PAGE_BIRTH, 6, 8,\r
-       "ironman_empty_levels",         _("(\93S\90l\97p)\8fí\82É\8bó\82Á\82Û\82Ì\83A\83\8a\81[\83i\83\8c\83x\83\8b\82ð\90\90¬(*)", "Always create empty 'arena' levels (*)") },\r
-\r
-       { &ironman_rooms,               FALSE, OPT_PAGE_BIRTH, 6, 12,\r
-       "ironman_rooms",                _("(\93S\90l\97p)\8fí\82É\95\81\92Ê\82Å\82È\82¢\95\94\89®\82ð\90\90¬\82·\82é(*)", "Always generate very unusual rooms (*)") },\r
-\r
-       { &ironman_nightmare,           FALSE, OPT_PAGE_BIRTH, 6, 18,\r
-       "ironman_nightmare",            _("(\93S\90l\97p)\88«\96²\83\82\81[\83h(\82±\82ê\82Í\91S\82­\95s\8fð\97\9d\82Å\82·\81I)(*)", "Nightmare mode(it isn't even remotely fair!)(*)") },\r
-\r
-       { &left_hander,                 FALSE, OPT_PAGE_BIRTH, 6, 13,\r
-       "left_hander",                  _("\8d\97\98\82«\82Å\82 \82é", "Left-Hander") },\r
-\r
-       { &preserve_mode,               TRUE,  OPT_PAGE_BIRTH, 6, 14,\r
-       "preserve_mode",                _("\93`\90à\82Ì\83A\83C\83e\83\80\82ð\8eæ\82è\93¦\82µ\82Ä\82à\8dÄ\90\90¬\82³\82ê\82é(*)", "Preserve artifacts (*)") },\r
-\r
-       { &autoroller,                  TRUE,  OPT_PAGE_BIRTH, 6, 15,\r
-       "autoroller",                   _("\94\\97Í\92l\82É\83I\81[\83g\83\8d\81[\83\89\81[\8eg\97p(*)", "Allow use of autoroller for stats (*)") },\r
-\r
-       { &autochara,                   FALSE, OPT_PAGE_BIRTH, 6, 16,\r
-       "autochara",                   _("\91Ì\8ai/\92n\88Ê\82É\83I\81[\83g\83\8d\81[\83\89\81[\8eg\97p", "Autoroll for weight, height and social status") },\r
-\r
-       { &powerup_home,                TRUE,  OPT_PAGE_BIRTH, 4, 3,\r
-       "powerup_home",                 _("\89ä\82ª\89Æ\82ð\8ag\92£\82·\82é(*)", "Increase capacity of your home (*)") },\r
-\r
-/*** Easy Object Auto-Destroyer ***/\r
-\r
-       { &destroy_items,               FALSE, OPT_PAGE_AUTODESTROY, 7, 0,\r
-       "destroy_items",                _("\83A\83C\83e\83\80\82Ì\8aÈ\88Õ\8e©\93®\94j\89ó\82ð\8eg\97p\82·\82é", "Use easy auto-destroyer") },\r
-\r
-       { &destroy_feeling,             FALSE, OPT_PAGE_AUTODESTROY, 7, 8,\r
-       "destroy_feeling",              _("\8aÈ\88Õ\8aÓ\92è\82µ\82½\82Æ\82«\8e©\93®\94j\89ó\82ð\93K\97p\82·\82é", "Apply auto-destroy as sense feeling") },\r
-\r
-       { &destroy_identify,            FALSE, OPT_PAGE_AUTODESTROY, 7, 9,\r
-       "destroy_identify",             _("\8aÓ\92è\82µ\82½\82Æ\82«\8e©\93®\94j\89ó\82ð\93K\97p\82·\82é", "Apply auto-destroy as identify an item") },\r
-\r
-       { &leave_worth,                 TRUE,  OPT_PAGE_AUTODESTROY, 7, 2,\r
-       "leave_worth",                  _("\89¿\92l\82ª\82 \82é\83A\83C\83e\83\80\82Í\89ó\82³\82È\82¢", "Auto-destroyer leaves known worthy items") },\r
-\r
-       { &leave_equip,                 FALSE, OPT_PAGE_AUTODESTROY, 7, 3,\r
-       "leave_equip",                  _("\95\90\8aí/\96h\8bï\82Í\89ó\82³\82È\82¢", "Auto-destroyer leaves weapons and armour") },\r
-\r
-       { &leave_chest,                 TRUE,  OPT_PAGE_AUTODESTROY, 7, 7,\r
-       "leave_chest",                  _("\8aJ\95\95\82³\82ê\82Ä\82¢\82È\82¢\94 \82Í\89ó\82³\82È\82¢", "Auto-destroyer leaves closed chests") },\r
-\r
-       { &leave_wanted,                TRUE,  OPT_PAGE_AUTODESTROY, 7, 4,\r
-       "leave_wanted",                 _("\8fÜ\8bà\8eñ\82Ì\8e\80\91Ì/\8d\9c\82Í\89ó\82³\82È\82¢", "Auto-destroyer leaves wanted corpses") },\r
-\r
-       { &leave_corpse,                FALSE, OPT_PAGE_AUTODESTROY, 7, 5,\r
-       "leave_corpse",                 _("\8e\80\91Ì/\8d\9c\82Í\89ó\82³\82È\82¢", "Auto-destroyer leaves corpses and skeletons") },\r
-\r
-       { &leave_junk,                  FALSE, OPT_PAGE_AUTODESTROY, 7, 6,\r
-       "leave_junk",                   _("\82ª\82ç\82­\82½\82Í\89ó\82³\82È\82¢", "Auto-destroyer leaves junk") },\r
-\r
-       { &leave_special,               TRUE,  OPT_PAGE_AUTODESTROY, 7, 1,\r
-       "leave_special",                _("\8eí\91°/\90E\8bÆ\82Å\93Á\95Ê\82É\95K\97v\82È\83A\83C\83e\83\80\82Í\89ó\82³\82È\82¢", "Auto-destroyer leaves items your race/class needs") },\r
-\r
-/*** Play-record Options ***/\r
-\r
-       { &record_fix_art,              TRUE,  OPT_PAGE_PLAYRECORD, 4, 11,\r
-       "record_fix_art",               _("\8cÅ\92è\83A\81[\83e\83B\83t\83@\83N\83g\82Ì\93ü\8eè\82ð\8bL\98^\82·\82é", "Record fixed artifacts") },\r
-\r
-       { &record_rand_art,             TRUE,  OPT_PAGE_PLAYRECORD, 4, 12,\r
-       "record_rand_art",              _("\83\89\83\93\83_\83\80\83A\81[\83e\83B\83t\83@\83N\83g\82Ì\93ü\8eè\82ð\8bL\98^\82·\82é", "Record random artifacts") },\r
-\r
-       { &record_destroy_uniq,         TRUE,  OPT_PAGE_PLAYRECORD, 4, 13,\r
-       "record_destroy_uniq",          _("\83\86\83j\81[\83N\83\82\83\93\83X\83^\81[\82ð\93|\82µ\82½\82Æ\82«\82ð\8bL\98^\82·\82é", "Record when destroy unique monster") },\r
-\r
-       { &record_fix_quest,            TRUE,  OPT_PAGE_PLAYRECORD, 4, 14,\r
-       "record_fix_quest",             _("\8cÅ\92è\83N\83G\83X\83g\82Ì\92B\90¬\82ð\8bL\98^\82·\82é", "Record fixed quests") },\r
-\r
-       { &record_rand_quest,           TRUE,  OPT_PAGE_PLAYRECORD, 4, 15,\r
-       "record_rand_quest",            _("\83\89\83\93\83_\83\80\83N\83G\83X\83g\82Ì\92B\90¬\82ð\8bL\98^\82·\82é", "Record random quests") },\r
-\r
-       { &record_maxdepth,             TRUE,  OPT_PAGE_PLAYRECORD, 4, 16,\r
-       "record_maxdepth",              _("\8dÅ\90[\8aK\82ð\8dX\90V\82µ\82½\82Æ\82«\82É\8bL\98^\82·\82é", "Record movements to deepest level") },\r
-\r
-       { &record_stair,                TRUE,  OPT_PAGE_PLAYRECORD, 4, 17,\r
-       "record_stair",                 _("\8aK\82Ì\88Ú\93®\82ð\8bL\98^\82·\82é", "Record recall and stair movements") },\r
-\r
-       { &record_buy,                  TRUE,  OPT_PAGE_PLAYRECORD, 4, 18,\r
-       "record_buy",                   _("\83A\83C\83e\83\80\82Ì\8dw\93ü\82ð\8bL\98^\82·\82é", "Record purchased items") },\r
-\r
-       { &record_sell,                 FALSE, OPT_PAGE_PLAYRECORD, 4, 19,\r
-       "record_sell",                  _("\83A\83C\83e\83\80\82Ì\94\84\8bp\82ð\8bL\98^\82·\82é", "Record sold items") },\r
-\r
-       { &record_danger,               TRUE,  OPT_PAGE_PLAYRECORD, 4, 20,\r
-       "record_danger",                _("\83s\83\93\83`\82É\82È\82Á\82½\82Æ\82«\82ð\8bL\98^\82·\82é", "Record hitpoint warning") },\r
-\r
-       { &record_arena,                TRUE,  OPT_PAGE_PLAYRECORD, 4, 21,\r
-       "record_arena",                 _("\83A\83\8a\81[\83i\82Å\82Ì\8f\9f\97\98\82ð\8bL\98^\82·\82é", "Record arena victories") },\r
-\r
-       { &record_ident,                TRUE,  OPT_PAGE_PLAYRECORD, 4, 22,\r
-       "record_ident",                 _("\96¢\94»\96¾\82Ì\83A\83C\83e\83\80\82Ì\8e¯\95Ê\82ð\8bL\98^\82·\82é", "Record first identified items") },\r
-\r
-       { &record_named_pet,            FALSE, OPT_PAGE_PLAYRECORD, 4, 23,\r
-       "record_named_pet",             _("\96¼\91O\82Â\82«\83y\83b\83g\82Ì\8fî\95ñ\82ð\8bL\98^\82·\82é", "Record informations of named pets") },\r
-\r
-/*** End of Table ***/\r
-\r
-       { NULL,                         0, 0, 0, 0,\r
-       NULL,                           NULL }\r
-};\r
-\r
-/*!\r
- * \83`\81[\83g\83I\83v\83V\83\87\83\93\82Ì\92è\8b`\83e\81[\83u\83\8b / Cheating options\r
- */\r
-const option_type cheat_info[CHEAT_MAX] =\r
-{\r
-       { &cheat_peek,          FALSE,  255,    0x01, 0x00,\r
-       "cheat_peek",           _("\83A\83C\83e\83\80\82Ì\90\90¬\82ð\82Ì\82¼\82«\8c©\82é", "Peek into object creation")\r
-       },\r
-\r
-       { &cheat_hear,          FALSE,  255,    0x02, 0x00,\r
-       "cheat_hear",           _("\83\82\83\93\83X\83^\81[\82Ì\90\90¬\82ð\82Ì\82¼\82«\8c©\82é", "Peek into monster creation")\r
-       },\r
-\r
-       { &cheat_room,          FALSE,  255,    0x04, 0x00,\r
-       "cheat_room",           _("\83_\83\93\83W\83\87\83\93\82Ì\90\90¬\82ð\82Ì\82¼\82«\8c©\82é", "Peek into dungeon creation")\r
-       },\r
-\r
-       { &cheat_xtra,          FALSE,  255,    0x08, 0x00,\r
-       "cheat_xtra",           _("\82»\82Ì\91¼\82Ì\8e\96\82ð\82Ì\82¼\82«\8c©\82é", "Peek into something else")\r
-       },\r
-\r
-       { &cheat_know,          FALSE,  255,    0x10, 0x00,\r
-       "cheat_know",           _("\8a®\91S\82È\83\82\83\93\83X\83^\81[\82Ì\8ev\82¢\8fo\82ð\92m\82é", "Know complete monster info")\r
-       },\r
-\r
-       { &cheat_live,          FALSE,  255,    0x20, 0x00,\r
-       "cheat_live",           _("\8e\80\82ð\89ñ\94ð\82·\82é\82±\82Æ\82ð\89Â\94\\82É\82·\82é", "Allow player to avoid death")\r
-       },\r
-\r
-       { &cheat_save,          FALSE,  255,    0x40, 0x00,\r
-       "cheat_save",           _("\8e\80\82ñ\82¾\8e\9e\83Z\81[\83u\82·\82é\82©\8am\94F\82·\82é", "Ask for saving death")\r
-       },\r
-\r
-       { &cheat_diary_output,  FALSE,  255,    0x80, 0x00,\r
-       "cheat_diary_output",   _("\83E\83B\83U\81[\83h\83\8d\83O\82ð\93ú\8bL\82É\8fo\97Í\82·\82é", "Output wizard log to diary.")\r
-       },\r
-\r
-       { &cheat_turn,  FALSE,  255,    0x81, 0x00,\r
-       "cheat_turn",   _("\83Q\81[\83\80\83\81\83b\83Z\81[\83W\82É\83^\81[\83\93\95\\8e¦\82ð\8ds\82¤", "Put turn to game message.")\r
-       },\r
-\r
-       { &cheat_sight, FALSE,  255,    0x82, 0x00,\r
-       "cheat_sight",  _("\81u\8c©\82é\81v\83R\83}\83\93\83h\82ð\8ag\92£\82·\82é\81B", "Expand \"L\"ook command.")\r
-       }\r
-};\r
-\r
-\r
-/*!\r
-* \8e©\93®\83Z\81[\83u\83I\83v\83V\83\87\83\93\83e\81[\83u\83\8b\r
-*/\r
-const option_type autosave_info[2] =\r
-{\r
-       { &autosave_l,      FALSE, 255, 0x01, 0x00,\r
-       "autosave_l",    _("\90V\82µ\82¢\8aK\82É\93ü\82é\93x\82É\8e©\93®\83Z\81[\83u\82·\82é", "Autosave when entering new levels") },\r
-\r
-       { &autosave_t,      FALSE, 255, 0x02, 0x00,\r
-       "autosave_t",   _("\88ê\92è\83^\81[\83\93\96\88\82É\8e©\93®\83Z\81[\83u\82·\82é", "Timed autosave") },\r
-};\r
+#include "angband.h"
+#include "gameoption.h"
+
+/*!
+ * @brief オプションテーブル /
+ * Available Options
+ */
+const option_type option_info[] =
+{
+       /*** Input Options ***/
+
+       { &rogue_like_commands,         FALSE, OPT_PAGE_INPUT, 0, 0,
+       "rogue_like_commands",          _("ローグ風キー配置を使用する", "Rogue-like commands") },
+
+       { &always_pickup,               FALSE, OPT_PAGE_INPUT, 0, 5,
+       "always_pickup",                _("常にアイテムを拾う" , "Pick things up by default") },
+
+       { &carry_query_flag,            FALSE, OPT_PAGE_INPUT, 0, 3,
+       "carry_query_flag",             _("アイテムを拾う前に確認する", "Prompt before picking things up") },
+
+       { &quick_messages,              TRUE,  OPT_PAGE_INPUT, 0, 1,
+       "quick_messages",               _("クイック・メッセージを使用する", "Activate quick messages") },
+
+       { &auto_more,                   FALSE, OPT_PAGE_INPUT, 2, 6,
+       "auto_more",                    _("キー待ちしないで連続でメッセージを表示する", "Automatically clear '-more-' prompts") },
+
+       { &command_menu,                TRUE,  OPT_PAGE_INPUT, 2, 7,
+       "command_menu",                 _("メニューによりコマンド選択を有効にする", "Enable command selection menu") },
+
+       { &other_query_flag,            FALSE, OPT_PAGE_INPUT, 0, 2,
+       "other_query_flag",             _("床上のアイテムを使用するときに確認する", "Prompt for floor item selection") },
+
+       { &use_old_target,              FALSE, OPT_PAGE_INPUT, 0, 4,
+       "use_old_target",               _("常に以前のターゲットを指定する", "Use old target by default") },
+
+       { &always_repeat,               TRUE,  OPT_PAGE_INPUT, 0, 6,
+       "always_repeat",                _("コマンド自動繰り返し", "Repeat obvious commands") },
+
+       { &confirm_destroy,             FALSE, OPT_PAGE_INPUT, 5, 3,
+       "confirm_destroy",              _("「無価値」なアイテムを破壊する時確認する", "Prompt for destruction of known worthless items") },
+
+       { &confirm_wear,                TRUE,  OPT_PAGE_INPUT, 5, 4,
+       "confirm_wear",                 _("呪われた物を装備する時確認する", "Confirm to wear/wield known cursed items") },
+
+       { &confirm_quest,               TRUE,  OPT_PAGE_INPUT, 1, 9,
+       "confirm_quest",                _("クエストを諦めて階段で逃げる前に確認する", "Prompt before exiting a quest level") },
+
+       { &target_pet,                  FALSE, OPT_PAGE_INPUT, 2, 5,
+       "target_pet",                   _("ペットをターゲットにする", "Allow targetting pets") },
+
+       #ifdef ALLOW_EASY_OPEN
+       { &easy_open,                   TRUE,  OPT_PAGE_INPUT, 5, 7,
+       "easy_open",                    _("自動的にドアを開ける", "Automatically open doors") },
+       #endif /* ALLOW_EASY_OPEN */
+
+       #ifdef ALLOW_EASY_DISARM
+       { &easy_disarm,                 TRUE,  OPT_PAGE_INPUT, 5, 8,
+       "easy_disarm",                  _("自動的に罠を解除する", "Automatically disarm traps") },
+       #endif /* ALLOW_EASY_DISARM */
+
+       #ifdef ALLOW_EASY_FLOOR /* TNB */
+       { &easy_floor,                  FALSE, OPT_PAGE_INPUT, 5, 9,
+       "easy_floor",                   _("床上で重なったアイテムをリストする", "Display floor stacks in a list") },
+       #endif /* ALLOW_EASY_FLOOR -- TNB */
+
+       { &use_command,                 FALSE, OPT_PAGE_INPUT, 5, 10,
+       "use_command",                  _("「使う(a)」コマンドでアイテムを何でも使える", "Allow unified use command") },
+
+       { &over_exert,                  FALSE, OPT_PAGE_INPUT, 0, 29,
+       "over_exert",                   _("MPが足りなくても魔法に挑戦する", "Allow casting spells when short of mana") },
+
+       { &numpad_as_cursorkey,         TRUE, OPT_PAGE_INPUT, 2, 31,
+       "numpad_as_cursorkey",          _("エディタ内でテンキーをカーソルキーとして使う", "Use numpad keys as cursor keys in editor mode") },
+
+/*** Map Screen Options ***/
+
+       { &center_player,               FALSE, OPT_PAGE_MAPSCREEN, 5, 11,
+       "center_player",                _("常にプレイヤーを中心に置く(*遅い*)", "Center map while walking (*slow*)") },
+
+       { &center_running,              TRUE,  OPT_PAGE_MAPSCREEN, 5, 12,
+       "center_running",               _("走っている時でも中心に置く", "Centering even while running") },
+
+       { &view_yellow_lite,            TRUE,  OPT_PAGE_MAPSCREEN, 1, 28,
+       "view_yellow_lite",             _("明かりの範囲を特別な色で表示する", "Use special colors for torch-lit grids") },
+
+       { &view_bright_lite,            TRUE,  OPT_PAGE_MAPSCREEN, 1, 29,
+       "view_bright_lite",             _("視界の範囲を特別な色で表示する", "Use special colors for 'viewable' grids") },
+
+       { &view_granite_lite,           TRUE,  OPT_PAGE_MAPSCREEN, 1, 30,
+       "view_granite_lite",            _("壁を特別な色で表示する(重い)", "Use special colors for wall grids (slow)") },
+
+       { &view_special_lite,           TRUE,  OPT_PAGE_MAPSCREEN, 1, 31,
+       "view_special_lite",            _("床を特別な色で表示する(重い)", "Use special colors for floor grids (slow)") },
+
+       { &view_perma_grids,            TRUE,  OPT_PAGE_MAPSCREEN, 1, 6,
+       "view_perma_grids",             _("明るい場所はそのままにする", "Map remembers all perma-lit grids") },
+
+       { &view_torch_grids,            FALSE, OPT_PAGE_MAPSCREEN, 1, 7,
+       "view_torch_grids",             _("明かりで照らした場所はそのままにする", "Map remembers all torch-lit grids") },
+
+       { &view_unsafe_grids,           FALSE, OPT_PAGE_MAPSCREEN, 1, 8,
+       "view_unsafe_grids",            _("トラップ感知済みでない場所を表示する", "Map marked by detect traps") },
+
+       { &view_reduce_view,            FALSE, OPT_PAGE_MAPSCREEN, 1, 17,
+       "view_reduce_view",             _("街では視野を狭くする", "Reduce view-radius in town") },
+
+       { &fresh_before,                TRUE,  OPT_PAGE_MAPSCREEN, 1, 23,
+       "fresh_before",                 _("連続コマンド中に画面を再描画し続ける", "Flush output while continuous command") },
+
+       { &fresh_after,                 FALSE, OPT_PAGE_MAPSCREEN, 1, 24,
+       "fresh_after",                  _("コマンド後に画面を常に再描画し続ける", "Flush output after monster's move") },
+
+       { &fresh_message,               FALSE, OPT_PAGE_MAPSCREEN, 1, 25,
+       "fresh_message",                _("メッセージの後に画面を再描画する", "Flush output after every message") },
+
+       { &hilite_player,               FALSE, OPT_PAGE_MAPSCREEN, 1, 27,
+       "hilite_player",                _("プレイヤーにカーソルを合わせる", "Hilite the player with the cursor") },
+
+       { &display_path,                FALSE, OPT_PAGE_MAPSCREEN, 2, 8,
+       "display_path",                 _("魔法や矢の軌跡を表示する", "Display actual path before shooting") },
+
+/*** Text Display Options ***/
+
+       { &plain_descriptions,          TRUE,  OPT_PAGE_TEXT, 5, 1,
+       "plain_descriptions",           _("アイテムの記述を簡略にする", "Plain object descriptions") },
+
+       { &plain_pickup,                FALSE, OPT_PAGE_TEXT, 6, 6,
+       "plain_pickup",                 _("「拾った」メッセージを簡略化する", "Plain pickup messages(japanese only)") },
+
+       { &always_show_list,            TRUE,  OPT_PAGE_TEXT, 4, 0,
+       "always_show_list",             _("選択時には常に一覧を表示する", "Always show list when choosing items") },
+
+       { &depth_in_feet,               FALSE, OPT_PAGE_TEXT, 0, 7,
+       "depth_in_feet",                _("ダンジョンの深さをフィートで表示する", "Show dungeon level in feet") },
+
+       { &show_labels,                 TRUE,  OPT_PAGE_TEXT, 0, 10,
+       "show_labels",                  _("装備一覧で装備場所を表示する", "Show labels in object listings") },
+
+       { &show_weights,                TRUE,  OPT_PAGE_TEXT, 0, 11,
+       "show_weights",                 _("アイテム一覧で重量を表示する", "Show weights in object listings") },
+
+       { &show_item_graph,             TRUE,  OPT_PAGE_TEXT, 2, 0,
+       "show_item_graph",              _("アイテムのシンボルを表示する", "Show items graphics") },
+
+       { &equippy_chars,               TRUE,  OPT_PAGE_TEXT, 1, 12,
+       "equippy_chars",                _("ステータスに文字で装備を表示する", "Display 'equippy' chars") },
+
+       { &display_mutations,           FALSE, OPT_PAGE_TEXT, 5, 0,
+       "display_mutations",            _("'C'コマンドで突然変異を表示する", "Display mutations in 'C'haracter Display") },
+
+       { &compress_savefile,           FALSE, OPT_PAGE_TEXT, 1, 26,
+       "compress_savefile",            _("セーブ・ファイル中のメッセージを圧縮する", "Compress messages in savefiles") },
+
+       { &abbrev_extra,                FALSE, OPT_PAGE_TEXT, 2, 10,
+       "abbrev_extra",                 _("アイテムに追加耐性/能力の略称を刻む", "Describe obj's extra resistances by abbreviation") },
+
+       { &abbrev_all,                  FALSE, OPT_PAGE_TEXT, 2, 11,
+       "abbrev_all",                   _("アイテムに全ての耐性/能力の略称を刻む", "Describe obj's all resistances by abbreviation") },
+
+       { &exp_need,                    FALSE, OPT_PAGE_TEXT, 2, 12,
+       "exp_need",                     _("次のレベルに必要な経験値を表示する", "Show the experience needed for next level") },
+
+       { &ignore_unview,               FALSE, OPT_PAGE_TEXT, 2, 13,
+       "ignore_unview",                _("視界外のモンスターの行動を表示しない", "Ignore whenever any monster does") },
+
+       { &show_ammo_detail,            TRUE, OPT_PAGE_TEXT, 2, 14,
+       "show_ammo_detail",             _("矢弾のダメージの説明を表示する", "Show description of ammo damage") },
+
+       { &show_ammo_no_crit,           FALSE, OPT_PAGE_TEXT, 2, 15,
+       "show_ammo_no_crit",            _("会心を考慮しない場合の矢弾のダメージを表示する", "Show ammo damage with no critical") },
+
+       { &show_ammo_crit_ratio,        FALSE, OPT_PAGE_TEXT, 2, 16,
+       "show_ammo_crit_ratio",         _("矢弾の会心発生率を表示する", "Show critical ratio of ammo") },
+
+       { &show_actual_value,           FALSE, OPT_PAGE_TEXT, 2, 17,
+       "show_actual_vaule",            _("各技能値に実値を表示する", "Show actual value of skill") },
+
+
+/*** Game-Play ***/
+
+       { &stack_force_notes,           TRUE,  OPT_PAGE_GAMEPLAY, 0, 8,
+       "stack_force_notes",            _("異なる銘のアイテムをまとめる", "Merge inscriptions when stacking") },
+
+       { &stack_force_costs,           FALSE, OPT_PAGE_GAMEPLAY, 0, 9,
+       "stack_force_costs",            _("異なる割引表示のアイテムをまとめる", "Merge discounts when stacking") },
+
+       { &expand_list,                 TRUE,  OPT_PAGE_GAMEPLAY, 1, 5,
+       "expand_list",                  _("「一覧」コマンドを拡張する", "Expand the power of the list commands") },
+
+       { &small_levels,                TRUE,  OPT_PAGE_GAMEPLAY, 0, 30,
+       "small_levels",                 _("非常に小さいフロアの生成を可能にする", "Allow unusually small dungeon levels") },
+
+       { &always_small_levels,         FALSE, OPT_PAGE_GAMEPLAY, 2, 3,
+       "always_small_levels",          _("常に非常に小さいフロアを生成する", "Always create unusually small dungeon levels") },
+
+       { &empty_levels,                TRUE,  OPT_PAGE_GAMEPLAY, 0, 31,
+       "empty_levels",                 _("空っぽの「アリーナ」レベルの生成を可能にする", "Allow empty 'arena' levels") },
+
+       { &bound_walls_perm,            FALSE, OPT_PAGE_GAMEPLAY, 2, 1,
+       "bound_walls_perm",             _("ダンジョンの外壁を永久岩にする", "Boundary walls become 'permanent wall'") },
+
+       { &last_words,                  TRUE,  OPT_PAGE_GAMEPLAY, 0, 28,
+       "last_words",                   _("キャラクターが死んだ時遺言をのこす", "Leave last words when your character dies") },
+
+#ifdef WORLD_SCORE
+       { &send_score,                  TRUE,  OPT_PAGE_GAMEPLAY, 4, 6,
+       "send_score",                   _("スコアサーバにスコアを送る", "Send score dump to the world score server") },
+#endif
+
+       { &allow_debug_opts,            FALSE, OPT_PAGE_GAMEPLAY, 6, 11,
+       "allow_debug_opts",             _("デバッグ/詐欺オプションを許可する", "Allow use of debug/cheat options") },
+
+/*** Disturbance ***/
+
+       { &find_ignore_stairs,          FALSE, OPT_PAGE_DISTURBANCE, 0, 16,
+       "find_ignore_stairs",           _("階段は通過する", "Run past stairs") },
+
+       { &find_ignore_doors,           TRUE,  OPT_PAGE_DISTURBANCE, 0, 17,
+       "find_ignore_doors",            _("ドアは通過する", "Run through open doors") },
+
+       { &find_cut,                    FALSE, OPT_PAGE_DISTURBANCE, 0, 18,
+       "find_cut",                     _("曲り角を斜めに最短距離で通過する", "Run past known corners") },
+
+       { &check_abort,                 TRUE,  OPT_PAGE_DISTURBANCE, 1, 18,
+       "check_abort",                  _("連続コマンドはキー入力で中断する", "Check for user abort while continuous command") },
+
+       { &flush_failure,               TRUE,  OPT_PAGE_DISTURBANCE, 1, 20,
+       "flush_failure",                _("様々なミス発生時に入力をクリアする", "Flush input on various failures") },
+
+       { &flush_disturb,               FALSE, OPT_PAGE_DISTURBANCE, 1, 21,
+       "flush_disturb",                _("障害発生時に入力をクリアする", "Flush input whenever disturbed") },
+
+       { &disturb_move,                FALSE, OPT_PAGE_DISTURBANCE, 0, 20,
+       "disturb_move",                 _("どこのモンスターが動いても行動を中止する", "Disturb whenever any monster moves") },
+
+       { &disturb_high,                FALSE, OPT_PAGE_DISTURBANCE, 1, 3,
+       "disturb_high",                 _("レベルの高いモンスターが動いたら行動を中止する", "Disturb whenever high-level monster moves") },
+
+       { &disturb_near,                TRUE,  OPT_PAGE_DISTURBANCE, 0, 21,
+       "disturb_near",                 _("視界内のモンスターが動いたら行動を中止する", "Disturb whenever viewable monster moves") },
+
+       { &disturb_pets,                FALSE, OPT_PAGE_DISTURBANCE, 5, 6,
+       "disturb_pets",                 _("視界内のペットが動いたら行動を中止する", "Disturb when visible pets move") },
+
+       { &disturb_panel,               TRUE,  OPT_PAGE_DISTURBANCE, 0, 22,
+       "disturb_panel",                _("画面スクロール時に行動を中止する", "Disturb whenever map panel changes") },
+
+       { &disturb_state,               TRUE,  OPT_PAGE_DISTURBANCE, 0, 23,
+       "disturb_state",                _("自分のステータス変化時に行動を中止する", "Disturb whenever player state changes") },
+
+       { &disturb_minor,               TRUE,  OPT_PAGE_DISTURBANCE, 0, 24,
+       "disturb_minor",                _("些細なことが起きても行動を中止する", "Disturb whenever boring things happen") },
+
+       { &ring_bell,                   FALSE, OPT_PAGE_DISTURBANCE, 0, 14,
+       "ring_bell",                    _("エラー時にビープ音を鳴らす", "Audible bell (on errors, etc)") },
+
+       { &disturb_trap_detect,         TRUE,  OPT_PAGE_DISTURBANCE, 0, 27,
+       "disturb_trap_detect",          _("トラップ感知範囲外に出る直前に行動を中止する", "Disturb when leaving trap detected area") },
+
+       { &alert_trap_detect,           FALSE, OPT_PAGE_DISTURBANCE, 0, 25,
+       "alert_trap_detect",            _("トラップ感知範囲外に出る直前に警告する", "Alert when leaving trap detected area") },
+
+/*** Birth Options ***/
+       { &manual_haggle,               FALSE, OPT_PAGE_BIRTH, 1, 0,
+       "manual_haggle",                _("店で値切り交渉をする", "Manually haggle in stores") },
+
+       { &easy_band,                   FALSE, OPT_PAGE_BIRTH, 6, 31,
+       "easy_band",                    _("初心者用簡単モード(*)", "Easy Mode (*)") },
+
+       { &smart_learn,                 TRUE,  OPT_PAGE_BIRTH, 1, 14,
+       "smart_learn",                  _("モンスターは失敗を学習する(*)", "Monsters learn from their mistakes (*)") },
+
+       { &smart_cheat,                 FALSE, OPT_PAGE_BIRTH, 1, 15,
+       "smart_cheat",                  _("モンスターはプレイヤーの弱みを突く(*)", "Monsters exploit players weaknesses (*)") },
+
+       { &vanilla_town,                FALSE, OPT_PAGE_BIRTH, 6, 0,
+       "vanilla_town",                 _("元祖の街/クエストと荒野なし", "Use 'vanilla' town without quests and wilderness") },
+
+       { &lite_town,                   FALSE, OPT_PAGE_BIRTH, 6, 1,
+       "lite_town",                    _("小規模な街/荒野なし", "Use 'lite' town without a wilderness") },
+
+       { &ironman_shops,               FALSE, OPT_PAGE_BIRTH, 6, 2,
+       "ironman_shops",                _("(鉄人用)店を使用しない(*)", "Stores are permanently closed (*)") },
+
+       { &ironman_small_levels,        FALSE, OPT_PAGE_BIRTH, 6, 3,
+       "ironman_small_levels",         _("(鉄人用)常に非常に小さいフロアを生成(*)", "Always create unusually small dungeon levels (*)") },
+
+       { &ironman_downward,            FALSE, OPT_PAGE_BIRTH, 6, 4,
+       "ironman_downward",             _("(鉄人用)帰還と上り階段なし(*)", "Disable recall and use of up stairs (*)") },
+
+       { &ironman_empty_levels,        FALSE, OPT_PAGE_BIRTH, 6, 8,
+       "ironman_empty_levels",         _("(鉄人用)常に空っぽのアリーナレベルを生成(*)", "Always create empty 'arena' levels (*)") },
+
+       { &ironman_rooms,               FALSE, OPT_PAGE_BIRTH, 6, 12,
+       "ironman_rooms",                _("(鉄人用)常に普通でない部屋を生成する(*)", "Always generate very unusual rooms (*)") },
+
+       { &ironman_nightmare,           FALSE, OPT_PAGE_BIRTH, 6, 18,
+       "ironman_nightmare",            _("(鉄人用)悪夢モード(これは全く不条理です!)(*)", "Nightmare mode(it isn't even remotely fair!)(*)") },
+
+       { &left_hander,                 FALSE, OPT_PAGE_BIRTH, 6, 13,
+       "left_hander",                  _("左利きである", "Left-Hander") },
+
+       { &preserve_mode,               TRUE,  OPT_PAGE_BIRTH, 6, 14,
+       "preserve_mode",                _("伝説のアイテムを取り逃しても再生成される(*)", "Preserve artifacts (*)") },
+
+       { &autoroller,                  TRUE,  OPT_PAGE_BIRTH, 6, 15,
+       "autoroller",                   _("能力値にオートローラー使用(*)", "Allow use of autoroller for stats (*)") },
+
+       { &autochara,                   FALSE, OPT_PAGE_BIRTH, 6, 16,
+       "autochara",                   _("体格/地位にオートローラー使用", "Autoroll for weight, height and social status") },
+
+       { &powerup_home,                TRUE,  OPT_PAGE_BIRTH, 4, 3,
+       "powerup_home",                 _("我が家を拡張する(*)", "Increase capacity of your home (*)") },
+
+/*** Easy Object Auto-Destroyer ***/
+
+       { &destroy_items,               FALSE, OPT_PAGE_AUTODESTROY, 7, 0,
+       "destroy_items",                _("アイテムの簡易自動破壊を使用する", "Use easy auto-destroyer") },
+
+       { &destroy_feeling,             FALSE, OPT_PAGE_AUTODESTROY, 7, 8,
+       "destroy_feeling",              _("簡易鑑定したとき自動破壊を適用する", "Apply auto-destroy as sense feeling") },
+
+       { &destroy_identify,            FALSE, OPT_PAGE_AUTODESTROY, 7, 9,
+       "destroy_identify",             _("鑑定したとき自動破壊を適用する", "Apply auto-destroy as identify an item") },
+
+       { &leave_worth,                 TRUE,  OPT_PAGE_AUTODESTROY, 7, 2,
+       "leave_worth",                  _("価値があるアイテムは壊さない", "Auto-destroyer leaves known worthy items") },
+
+       { &leave_equip,                 FALSE, OPT_PAGE_AUTODESTROY, 7, 3,
+       "leave_equip",                  _("武器/防具は壊さない", "Auto-destroyer leaves weapons and armour") },
+
+       { &leave_chest,                 TRUE,  OPT_PAGE_AUTODESTROY, 7, 7,
+       "leave_chest",                  _("開封されていない箱は壊さない", "Auto-destroyer leaves closed chests") },
+
+       { &leave_wanted,                TRUE,  OPT_PAGE_AUTODESTROY, 7, 4,
+       "leave_wanted",                 _("賞金首の死体/骨は壊さない", "Auto-destroyer leaves wanted corpses") },
+
+       { &leave_corpse,                FALSE, OPT_PAGE_AUTODESTROY, 7, 5,
+       "leave_corpse",                 _("死体/骨は壊さない", "Auto-destroyer leaves corpses and skeletons") },
+
+       { &leave_junk,                  FALSE, OPT_PAGE_AUTODESTROY, 7, 6,
+       "leave_junk",                   _("がらくたは壊さない", "Auto-destroyer leaves junk") },
+
+       { &leave_special,               TRUE,  OPT_PAGE_AUTODESTROY, 7, 1,
+       "leave_special",                _("種族/職業で特別に必要なアイテムは壊さない", "Auto-destroyer leaves items your race/class needs") },
+
+/*** Play-record Options ***/
+
+       { &record_fix_art,              TRUE,  OPT_PAGE_PLAYRECORD, 4, 11,
+       "record_fix_art",               _("固定アーティファクトの入手を記録する", "Record fixed artifacts") },
+
+       { &record_rand_art,             TRUE,  OPT_PAGE_PLAYRECORD, 4, 12,
+       "record_rand_art",              _("ランダムアーティファクトの入手を記録する", "Record random artifacts") },
+
+       { &record_destroy_uniq,         TRUE,  OPT_PAGE_PLAYRECORD, 4, 13,
+       "record_destroy_uniq",          _("ユニークモンスターを倒したときを記録する", "Record when destroy unique monster") },
+
+       { &record_fix_quest,            TRUE,  OPT_PAGE_PLAYRECORD, 4, 14,
+       "record_fix_quest",             _("固定クエストの達成を記録する", "Record fixed quests") },
+
+       { &record_rand_quest,           TRUE,  OPT_PAGE_PLAYRECORD, 4, 15,
+       "record_rand_quest",            _("ランダムクエストの達成を記録する", "Record random quests") },
+
+       { &record_maxdepth,             TRUE,  OPT_PAGE_PLAYRECORD, 4, 16,
+       "record_maxdepth",              _("最深階を更新したときに記録する", "Record movements to deepest level") },
+
+       { &record_stair,                TRUE,  OPT_PAGE_PLAYRECORD, 4, 17,
+       "record_stair",                 _("階の移動を記録する", "Record recall and stair movements") },
+
+       { &record_buy,                  TRUE,  OPT_PAGE_PLAYRECORD, 4, 18,
+       "record_buy",                   _("アイテムの購入を記録する", "Record purchased items") },
+
+       { &record_sell,                 FALSE, OPT_PAGE_PLAYRECORD, 4, 19,
+       "record_sell",                  _("アイテムの売却を記録する", "Record sold items") },
+
+       { &record_danger,               TRUE,  OPT_PAGE_PLAYRECORD, 4, 20,
+       "record_danger",                _("ピンチになったときを記録する", "Record hitpoint warning") },
+
+       { &record_arena,                TRUE,  OPT_PAGE_PLAYRECORD, 4, 21,
+       "record_arena",                 _("アリーナでの勝利を記録する", "Record arena victories") },
+
+       { &record_ident,                TRUE,  OPT_PAGE_PLAYRECORD, 4, 22,
+       "record_ident",                 _("未判明のアイテムの識別を記録する", "Record first identified items") },
+
+       { &record_named_pet,            FALSE, OPT_PAGE_PLAYRECORD, 4, 23,
+       "record_named_pet",             _("名前つきペットの情報を記録する", "Record informations of named pets") },
+
+/*** End of Table ***/
+
+       { NULL,                         0, 0, 0, 0,
+       NULL,                           NULL }
+};
+
+/*!
+ * チートオプションの定義テーブル / Cheating options
+ */
+const option_type cheat_info[CHEAT_MAX] =
+{
+       { &cheat_peek,          FALSE,  255,    0x01, 0x00,
+       "cheat_peek",           _("アイテムの生成をのぞき見る", "Peek into object creation")
+       },
+
+       { &cheat_hear,          FALSE,  255,    0x02, 0x00,
+       "cheat_hear",           _("モンスターの生成をのぞき見る", "Peek into monster creation")
+       },
+
+       { &cheat_room,          FALSE,  255,    0x04, 0x00,
+       "cheat_room",           _("ダンジョンの生成をのぞき見る", "Peek into dungeon creation")
+       },
+
+       { &cheat_xtra,          FALSE,  255,    0x08, 0x00,
+       "cheat_xtra",           _("その他の事をのぞき見る", "Peek into something else")
+       },
+
+       { &cheat_know,          FALSE,  255,    0x10, 0x00,
+       "cheat_know",           _("完全なモンスターの思い出を知る", "Know complete monster info")
+       },
+
+       { &cheat_live,          FALSE,  255,    0x20, 0x00,
+       "cheat_live",           _("死を回避することを可能にする", "Allow player to avoid death")
+       },
+
+       { &cheat_save,          FALSE,  255,    0x40, 0x00,
+       "cheat_save",           _("死んだ時セーブするか確認する", "Ask for saving death")
+       },
+
+       { &cheat_diary_output,  FALSE,  255,    0x80, 0x00,
+       "cheat_diary_output",   _("ウィザードログを日記に出力する", "Output wizard log to diary.")
+       },
+
+       { &cheat_turn,  FALSE,  255,    0x81, 0x00,
+       "cheat_turn",   _("ゲームメッセージにターン表示を行う", "Put turn to game message.")
+       },
+
+       { &cheat_sight, FALSE,  255,    0x82, 0x00,
+       "cheat_sight",  _("「見る」コマンドを拡張する。", "Expand \"L\"ook command.")
+       }
+};
+
+
+/*!
+* 自動セーブオプションテーブル
+*/
+const option_type autosave_info[2] =
+{
+       { &autosave_l,      FALSE, 255, 0x01, 0x00,
+       "autosave_l",    _("新しい階に入る度に自動セーブする", "Autosave when entering new levels") },
+
+       { &autosave_t,      FALSE, 255, 0x02, 0x00,
+       "autosave_t",   _("一定ターン毎に自動セーブする", "Timed autosave") },
+};
index 5e34780..3b0a928 100644 (file)
-#include "angband.h"\r
-#include "history.h"\r
-\r
-\r
-/*!\r
-* \90\82¢\97§\82¿\83e\81[\83u\83\8b\82Ì\92è\8b` / Background information (see below)\n\r
-*\n\r
-* Chart progression by race:\n\r
-*   Human         -->  1 -->  2 -->  3 --> 50 --> 51 --> 52 --> 53\n\r
-*   Half-Elf      -->  4 -->  1 -->  2 -->  3 --> 50 --> 51 --> 52 --> 53\n\r
-*   Elf/High-Elf  -->  7 -->  8 -->  9 --> 54 --> 55 --> 56\n\r
-*   Hobbit        --> 10 --> 11 -->  3 --> 50 --> 51 --> 52 --> 53\n\r
-*   Gnome         --> 13 --> 14 -->  3 --> 50 --> 51 --> 52 --> 53\n\r
-*   Dwarf         --> 16 --> 17 --> 18 --> 57 --> 58 --> 59 --> 60 --> 61\n\r
-*   Half-Orc      --> 19 --> 20 -->  2 -->  3 --> 50 --> 51 --> 52 --> 53\n\r
-*   Half-Troll    --> 22 --> 23 --> 62 --> 63 --> 64 --> 65 --> 66\n\r
-*\n\r
-* XXX XXX XXX This table *must* be correct or drastic errors may occur!\n\r
-*/\r
-hist_type bg[] =\r
-{\r
-#ifdef JP\r
-{ "\8f¨\95 \82Ì\8eq\82Å\94F\92m\82·\82ç\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ\81B",                         10, 2, 3, 25 },\r
-{ "\8f¨\95 \82Ì\8eq\82Å\82·\82ª\94F\92m\82Í\82³\82ê\82Ä\82¢\82Ü\82·\81B",                         20, 2, 3, 35 },\r
-{ "\8aô\90l\82©\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B",                     95, 2, 3, 45 },\r
-{ "\92·\8eq\82Å\82·\81B",                                                100, 2, 3, 50 },\r
-#else\r
-{ "You are the illegitimate and unacknowledged child ",   10, 1, 2, 25 },\r
-{ "You are the illegitimate but acknowledged child ",     20, 1, 2, 35 },\r
-{ "You are one of several children ",                     95, 1, 2, 45 },\r
-{ "You are the first child ",                            100, 1, 2, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\94_\93z\82Ì",                                     40, 1, 2, 65 },\r
-{ "\82 \82È\82½\82Í\8e©\8dì\94_\82Ì",                                   65, 1, 2, 80 },\r
-{ "\82 \82È\82½\82Í\92¬\90l\82Ì",                                     80, 1, 2, 90 },\r
-{ "\82 \82È\82½\82Í\90E\90l\82Ì",                                     90, 1, 2,105 },\r
-{ "\82 \82È\82½\82Í\93y\92\85\82Ì\8bR\8em\82Ì",                               96, 1, 2,120 },\r
-{ "\82 \82È\82½\82Í\8d¬\93×\82Ì\8b{\92ì\82Ì\8eÝ\88Ê\82 \82é\8bM\91°\82Ì",                                 99, 1, 2,130 },\r
-{ "\82 \82È\82½\82Í\83A\83\93\83o\81[\82Ì\89¤\89Æ\82Ì\8c\8c\82ð\88ø\82­\8eÒ\82Ì",                              100, 1, 2,140 },\r
-#else\r
-{ "of a Serf.  ",                                         40, 2, 3, 65 },\r
-{ "of a Yeoman.  ",                                       65, 2, 3, 80 },\r
-{ "of a Townsman.  ",                                     80, 2, 3, 90 },\r
-{ "of a Guildsman.  ",                                    90, 2, 3, 105 },\r
-{ "of a Landed Knight.  ",                                96, 2, 3, 120 },\r
-{ "of a Noble Family in the Courts of Chaos.  ",          99, 2, 3, 130 },\r
-{ "of the Royal Blood Line of Amber.  ",                 100, 2, 3, 140 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\88ê\89Æ\82Ì\82¨\89×\95¨\82Å\82·\81B",                                 20, 3,50, 20 },\r
-{ "\82 \82È\82½\82Í\88ê\89Æ\82Ì\8cÖ\82è\82Å\82·\81B",                           80, 3,50, 55 },\r
-{ "\82 \82È\82½\82Í\89Æ\91°\82É\91å\90Ø\82É\82³\82ê\82Ä\82¢\82Ü\82·\81B",                        100, 3,50, 60 },\r
-#else\r
-{ "You are the black sheep of the family.  ",             20, 3, 50, 20 },\r
-{ "You are a credit to the family.  ",                    80, 3, 50, 55 },\r
-{ "You are a well liked child.  ",                       100, 3, 50, 60 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Ì\95ê\82Í\83e\83\8c\83\8a\91°\82Ì\83G\83\8b\83t\82Å\82µ\82½\81B",               40, 4, 1, 50 },\r
-{ "\82 \82È\82½\82Ì\95\83\82Í\83e\83\8c\83\8a\91°\82Ì\83G\83\8b\83t\82Å\82µ\82½\81B",               75, 4, 1, 55 },\r
-{ "\82 \82È\82½\82Ì\95ê\82Í\83m\83\8b\83h\81[\83\8b\91°\82Ì\83G\83\8b\83t\82Å\82µ\82½\81B",           90, 4, 1, 55 },\r
-{ "\82 \82È\82½\82Ì\95\83\82Í\83m\83\8b\83h\81[\83\8b\91°\82Ì\83G\83\8b\83t\82Å\82µ\82½\81B",           95, 4, 1, 60 },\r
-{ "\82 \82È\82½\82Ì\95ê\82Í\83\94\83@\83\93\83\84\81[\83\8b\91°\82Ì\83G\83\8b\83t\82Å\82µ\82½\81B",                 98, 4, 1, 65 },\r
-{ "\82 \82È\82½\82Ì\95\83\82Í\83\94\83@\83\93\83\84\81[\83\8b\91°\82Ì\83G\83\8b\83t\82Å\82µ\82½\81B",                                100, 4, 1, 70 },\r
-#else\r
-{ "Your mother was of the Teleri.  ",                   40, 4, 1, 50 },\r
-{ "Your father was of the Teleri.  ",                   75, 4, 1, 55 },\r
-{ "Your mother was of the Noldor.  ",                   90, 4, 1, 55 },\r
-{ "Your father was of the Noldor.  ",                   95, 4, 1, 60 },\r
-{ "Your mother was of the Vanyar.  ",                   98, 4, 1, 65 },\r
-{ "Your father was of the Vanyar.  ",                  100, 4, 1, 70 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\8aô\90l\82©\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B",                     60, 9, 54, 50 },\r
-{ "\88ê\97±\8eí\82Å\82·\81B",                                      100, 9, 54, 55 },\r
-#else\r
-{ "You are one of several children ",                   60, 7, 8, 50 },\r
-{ "You are the only child ",                                   100, 7, 8, 55 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\83e\83\8c\83\8a\91°\82Ì\83G\83\8b\83t\82Ì",                                 75, 7, 8, 50 },\r
-{ "\82 \82È\82½\82Í\83m\83\8b\83h\81[\83\8b\91°\82Ì\83G\83\8b\83t\82Ì",                     95, 7, 8, 55 },\r
-{ "\82 \82È\82½\82Í\83\94\83@\83\93\83\84\81[\83\8b\91°\82Ì\83G\83\8b\83t\82Ì",                  100, 7, 8, 60 },\r
-#else\r
-{ "of a Teleri ",                                               75, 8, 9, 50 },\r
-{ "of a Noldor ",                                               95, 8, 9, 55 },\r
-{ "of a Vanyar ",                                              100, 8, 9, 60 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\83\8c\83\93\83W\83\83\81[\82Ì",                                       40, 8,9, 80 },\r
-{ "\83A\81[\83`\83\83\81[\82Ì",                                       70, 8,9, 90 },\r
-{ "\90í\8em\82Ì",                                             87, 8,9,110 },\r
-{ "\83\81\83C\83W\82Ì",                                           95, 8,9,125 },\r
-{ "\89¤\8eq\82Ì",                                             99, 8,9,140 },\r
-{ "\89¤\82Ì",                                              100, 8,9,145 },\r
-#else\r
-{ "Ranger.  ",                                          40, 9, 54, 80 },\r
-{ "Archer.  ",                                          70, 9, 54, 90 },\r
-{ "Warrior.  ",                                                 87, 9, 54, 110 },\r
-{ "Mage.  ",                                                    95, 9, 54, 125 },\r
-{ "Prince.  ",                                          99, 9, 54, 140 },\r
-{ "King.  ",                                                   100, 9, 54, 145 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\83z\83r\83b\83g\82Ì\89½\90l\82©\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B",           85,11,3, 45 },\r
-{ "\83z\83r\83b\83g\82Ì\88ê\97±\8eí\82Å\82·\81B",                            100,11,3, 55 },\r
-#else\r
-{ "You are one of several children of a Hobbit ",               85, 10, 11, 45 },\r
-{ "You are the only child of a Hobbit ",                       100, 10, 11, 55 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\8cî\90H\82Ì",                                                     20,10,11, 55 },\r
-{ "\82 \82È\82½\82Í\8eð\8fê\82Ì\93X\8eå\82Ì",                                               30,10,11, 80 },\r
-{ "\82 \82È\82½\82Í\95²\89®\82Ì",                                                     40,10,11, 90 },\r
-{ "\82 \82È\82½\82Í\89Æ\8eå\82Ì",                                                     50,10,11,100 },\r
-{ "\82 \82È\82½\82Í\94E\82Ñ\82Ì\8eÒ\82Ì",                                                         80,10,11,110 },\r
-{ "\82 \82È\82½\82Í\90í\8em\82Ì",                                                     95,10,11,115 },\r
-{ "\82 \82È\82½\82Í\83\81\83C\83W\82Ì",                                                   99,10,11,125 },\r
-{ "\82 \82È\82½\82Í\88ê\91°\82Ì\92·\82Ì",                                                        100,10,11,140 },\r
-#else\r
-{ "Bum.  ",                                                     20, 11, 3, 55 },\r
-{ "Tavern Owner.  ",                                            30, 11, 3, 80 },\r
-{ "Miller.  ",                                          40, 11, 3, 90 },\r
-{ "Home Owner.  ",                                              50, 11, 3, 100 },\r
-{ "Burglar.  ",                                                 80, 11, 3, 110 },\r
-{ "Warrior.  ",                                                 95, 11, 3, 115 },\r
-{ "Mage.  ",                                                    99, 11, 3, 125 },\r
-{ "Clan Elder.  ",                                             100, 11, 3, 140 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\83m\81[\83\80\82Ì\8aô\90l\82©\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B",             85,14,3, 45 },\r
-{ "\83m\81[\83\80\82Ì\88ê\97±\8eí\82Å\82·\81B",                              100,14,3, 55 },\r
-#else\r
-{ "You are one of several children of a Gnome ",                85, 13, 14, 45 },\r
-{ "You are the only child of a Gnome ",                        100, 13, 14, 55 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\95¨\8cî\82¢\82Ì",                                                   20,13,14, 55 },\r
-{ "\82 \82È\82½\82Í\83z\83\89\90\81\82«\82Ì",                                                         50,13,14, 70 },\r
-{ "\82 \82È\82½\82Í\82¨\92²\8eq\8eÒ\82Ì",                                                         75,13,14, 85 },\r
-{ "\82 \82È\82½\82Í\90í\8em\82Ì",                                                     95,13,14,100 },\r
-{ "\82 \82È\82½\82Í\83\81\83C\83W\82Ì",                                                  100,13,14,125 },\r
-#else\r
-{ "Beggar.  ",                                          20, 14, 3, 55 },\r
-{ "Braggart.  ",                                                50, 14, 3, 70 },\r
-{ "Prankster.  ",                                               75, 14, 3, 85 },\r
-{ "Warrior.  ",                                                 95, 14, 3, 100 },\r
-{ "Mage.  ",                                                   100, 14, 3, 125 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\83h\83\8f\81[\83t\82Ì\93ñ\90l\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B",             25,17,18, 40 },\r
-{ "\83h\83\8f\81[\83t\82Ì\88ê\97±\8eí\82Å\82·\81B",                            100,17,18, 50 },\r
-#else\r
-{ "You are one of two children of a Dwarven ",          25, 16, 17, 40 },\r
-{ "You are the only child of a Dwarven ",                      100, 16, 17, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\93D\96_\82Ì",                                                     10,16,17, 60 },\r
-{ "\82 \82È\82½\82Í\98S\94Ô\82Ì",                                                     25,16,17, 75 },\r
-{ "\82 \82È\82½\82Í\8dB\95v\82Ì",                                                     75,16,17, 90 },\r
-{ "\82 \82È\82½\82Í\90í\8em\82Ì",                                                     90,16,17,110 },\r
-{ "\82 \82È\82½\82Í\83v\83\8a\81[\83X\83g\82Ì",                                       99,16,17,130 },\r
-{ "\82 \82È\82½\82Í\89¤\82Ì",                                                      100,16,17,150 },\r
-#else\r
-{ "Thief.  ",                                           10, 17, 18, 60 },\r
-{ "Prison Guard.  ",                                            25, 17, 18, 75 },\r
-{ "Miner.  ",                                           75, 17, 18, 90 },\r
-{ "Warrior.  ",                                                 90, 17, 18, 110 },\r
-{ "Priest.  ",                                          99, 17, 18, 130 },\r
-{ "King.  ",                                                   100, 17, 18, 150 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\88ê\89Æ\82Ì\82¨\89×\95¨\82Å\82·\81B",                                                 15,18,57,10 },\r
-{ "\82 \82È\82½\82Í\88ê\89Æ\82Ì\8cÖ\82è\82Å\82·\81B",                                           85,18,57, 50 },\r
-{ "\82 \82È\82½\82Í\89Æ\91°\82É\91å\90Ø\82É\82³\82ê\82Ä\82¢\82Ü\82·\81B",                                100,18,57, 55 },\r
-#else\r
-{ "You are the black sheep of the family.  ",           15, 18, 57, 10 },\r
-{ "You are a credit to the family.  ",                  85, 18, 57, 50 },\r
-{ "You are a well liked child.  ",                             100, 18, 57, 55 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Ì\95ê\82Í\83I\81[\83N\82Å\82µ\82½\82ª\81A\82»\82ê\82Í\94é\96§\82É\82³\82ê\82Ä\82¢\82Ü\82·\81B",     25,19,20, 25 },\r
-{ "\82 \82È\82½\82Ì\95\83\82Í\83I\81[\83N\82Å\82µ\82½\82ª\81A\82»\82ê\82Í\94é\96§\82É\82³\82ê\82Ä\82¢\82Ü\82·\81B",    100,19,20, 25 },\r
-#else\r
-{ "Your mother was an Orc, but it is unacknowledged.  ",        25, 19, 20, 25 },\r
-{ "Your father was an Orc, but it is unacknowledged.  ",       100, 19, 20, 25 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\94_\93z\82Ì\97{\8eq\82Å\82·\81B",                                           40,20, 3, 65 },\r
-{ "\82 \82È\82½\82Í\8e©\8dì\94_\82Ì\97{\8eq\82Å\82·\81B",                                                 65,20, 3, 80 },\r
-{ "\82 \82È\82½\82Í\92¬\90l\82Ì\97{\8eq\82Å\82·\81B",                                           80,20, 3, 90 },\r
-{ "\82 \82È\82½\82Í\90E\90l\82Ì\97{\8eq\82Å\82·\81B",                                           90,20, 3,105 },\r
-{ "\82 \82È\82½\82Í\93y\92\85\82Ì\8bR\8em\82Ì\97{\8eq\82Å\82·\81B",                                     96,20, 3,120 },\r
-{ "\82 \82È\82½\82Í\8eÝ\88Ê\82 \82é\8bM\91°\82Ì\97{\8eq\82Å\82·\81B",                           99,20, 3,130 },\r
-{ "\82 \82È\82½\82Í\89¤\89Æ\82Ì\8c\8c\82ð\88ø\82­\8eÒ\82Ì\97{\8eq\82Å\82·\81B",                      100,20, 3,140 },\r
-#else\r
-{ "You are the adopted child ",                                100, 20, 2, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Ì\95ê\82Í\93´\8cA\83g\83\8d\83\8b\82Ì",                           30,22,23, 20 },\r
-{ "\82 \82È\82½\82Ì\95\83\82Í\93´\8cA\83g\83\8d\83\8b\82Ì",                           60,22,23, 25 },\r
-{ "\82 \82È\82½\82Ì\95ê\82Í\8bu\83g\83\8d\83\8b\82Ì",                                     75,22,23, 30 },\r
-{ "\82 \82È\82½\82Ì\95\83\82Í\8bu\83g\83\8d\83\8b\82Ì",                                     90,22,23, 35 },\r
-{ "\82 \82È\82½\82Ì\95ê\82Í\90\85\83g\83\8d\83\8b\82Ì",                                     95,22,23, 40 },\r
-{ "\82 \82È\82½\82Ì\95\83\82Í\90\85\83g\83\8d\83\8b\82Ì",                                    100,22,23, 45 },\r
-#else\r
-{ "Your mother was a Cave-Troll ",                              30, 22, 23, 20 },\r
-{ "Your father was a Cave-Troll ",                              60, 22, 23, 25 },\r
-{ "Your mother was a Hill-Troll ",                              75, 22, 23, 30 },\r
-{ "Your father was a Hill-Troll ",                              90, 22, 23, 35 },\r
-{ "Your mother was a Water-Troll ",                             95, 22, 23, 40 },\r
-{ "Your father was a Water-Troll ",                            100, 22, 23, 45 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\83R\83b\83N\82Å\82µ\82½\81B",                                                      5,23,62, 60 },\r
-{ "\90í\8em\82Å\82µ\82½\81B",                                                       95,23,62, 55 },\r
-{ "\8eô\8fp\8et\82Å\82µ\82½\81B",                                                     99,23,62, 65 },\r
-{ "\88ê\91°\82Ì\92·\82Å\82µ\82½\81B",                                          100,23,62, 80 },\r
-#else\r
-{ "Cook.  ",                                                     5, 23, 62, 60 },\r
-{ "Warrior.  ",                                                 95, 23, 62, 55 },\r
-{ "Shaman.  ",                                          99, 23, 62, 65 },\r
-{ "Clan Chief.  ",                                             100, 23, 62, 80 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\90[\82¢\83u\83\89\83E\83\93\82Ì\93µ\82Æ",                                 20,50,51, 50 },\r
-{ "\82 \82È\82½\82Í\83u\83\89\83E\83\93\82Ì\93µ\82Æ",                                     60,50,51, 50 },\r
-{ "\82 \82È\82½\82Í\92W\82¢\90F\82Ì\93µ\82Æ",                                       70,50,51, 50 },\r
-{ "\82 \82È\82½\82Í\83O\83\8a\81[\83\93\82Ì\93µ\82Æ",                                     80,50,51, 50 },\r
-{ "\82 \82È\82½\82Í\90Â\82¢\93µ\82Æ",                                           90,50,51, 50 },\r
-{ "\82 \82È\82½\82Í\83u\83\8b\81[\83O\83\8c\83C\82Ì\93µ\82Æ",                                100,50,51, 50 },\r
-#else\r
-{ "You have dark brown eyes, ",                                 20, 50, 51, 50 },\r
-{ "You have brown eyes, ",                                      60, 50, 51, 50 },\r
-{ "You have hazel eyes, ",                                      70, 50, 51, 50 },\r
-{ "You have green eyes, ",                                      80, 50, 51, 50 },\r
-{ "You have blue eyes, ",                                       90, 50, 51, 50 },\r
-{ "You have blue-gray eyes, ",                         100, 50, 51, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82È\82ß\82ç\82©\82È",                                                         70,51,52, 50 },\r
-{ "\94g\91Å\82Á\82½",                                                   90,51,52, 50 },\r
-{ "\83J\81[\83\8b\82µ\82½",                                                        100,51,52, 50 },\r
-#else\r
-{ "straight ",                                          70, 51, 52, 50 },\r
-{ "wavy ",                                                      90, 51, 52, 50 },\r
-{ "curly ",                                                    100, 51, 52, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\8d\95\94¯\82ð\8e\9d\82¿\81A",                                               30,52,53, 50 },\r
-{ "\92\83\94¯\82ð\8e\9d\82¿\81A",                                               70,52,53, 50 },\r
-{ "\82Æ\82Ñ\90F\82Ì\94¯\82ð\8e\9d\82¿\81A",                                         80,52,53, 50 },\r
-{ "\90Ô\82¢\94¯\82ð\8e\9d\82¿\81A",                                             90,52,53, 50 },\r
-{ "\83u\83\8d\83\93\83h\82Ì\94¯\82ð\8e\9d\82¿\81A",                              100,52,53, 50 },\r
-#else\r
-{ "black hair, ",                                               30, 52, 53, 50 },\r
-{ "brown hair, ",                                               70, 52, 53, 50 },\r
-{ "auburn hair, ",                                              80, 52, 53, 50 },\r
-{ "red hair, ",                                                 90, 52, 53, 50 },\r
-{ "blond hair, ",                                              100, 52, 53, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\8e½\8d\95\82Ì\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                                     10,53, 0, 50 },\r
-{ "\8d\95\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                                       30,53, 0, 50 },\r
-{ "\95\81\92Ê\82Ì\94§\90F\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                           80,53, 0, 50 },\r
-{ "\94\92\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                                       90,53, 0, 50 },\r
-{ "\93§\82«\92Ê\82é\82æ\82¤\82È\94\92\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                100,53, 0, 50 },\r
-#else\r
-{ "and a very dark complexion.",                                10, 53, 0, 50 },\r
-{ "and a dark complexion.",                                     30, 53, 0, 50 },\r
-{ "and an average complexion.",                                 80, 53, 0, 50 },\r
-{ "and a fair complexion.",                                     90, 53, 0, 50 },\r
-{ "and a very fair complexion.",                               100, 53, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\96¾\82é\82¢\83O\83\8c\81[\82Ì\93µ\82Æ",                                         85,54,55, 50 },\r
-{ "\82 \82È\82½\82Í\96¾\82é\82¢\83u\83\8b\81[\82Ì\93µ\82Æ",                                         95,54,55, 50 },\r
-{ "\82 \82È\82½\82Í\96¾\82é\82¢\83O\83\8a\81[\83\93\82Ì\93µ\82Æ",                                      100,54,55, 50 },\r
-#else\r
-{ "You have light grey eyes, ",                                 85, 54, 55, 50 },\r
-{ "You have light blue eyes, ",                                 95, 54, 55, 50 },\r
-{ "You have light green eyes, ",                               100, 54, 55, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82È\82ß\82ç\82©\82È",                                                         75,55,56, 50 },\r
-{ "\94g\91Å\82Á\82½",                                                  100,55,56, 50 },\r
-#else\r
-{ "straight ",                                          75, 55, 56, 50 },\r
-{ "wavy ",                                                     100, 55, 56, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\8d\95\94¯\82ð\8e\9d\82¿\81A\94\92\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                           75,56, 0, 50 },\r
-{ "\92\83\94¯\82ð\8e\9d\82¿\81A\94\92\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                           85,56, 0, 50 },\r
-{ "\83u\83\8d\83\93\83h\82Ì\94¯\82ð\8e\9d\82¿\81A\94\92\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                           95,56, 0, 50 },\r
-{ "\8bâ\94¯\82ð\8e\9d\82¿\81A\94\92\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                          100,56, 0, 50 },\r
-#else\r
-{ "black hair, and a fair complexion.",                         75, 56, 0, 50 },\r
-{ "brown hair, and a fair complexion.",                         85, 56, 0, 50 },\r
-{ "blond hair, and a fair complexion.",                         95, 56, 0, 50 },\r
-{ "silver hair, and a fair complexion.",                       100, 56, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\90[\82¢\83u\83\89\83E\83\93\82Ì\93µ\82Æ",                                         99,57,58, 50 },\r
-{ "\82 \82È\82½\82Í\8bP\82­\90Ô\82¢\93µ\82Æ",                                      100,57,58, 60 },\r
-#else\r
-{ "You have dark brown eyes, ",                                 99, 57, 58, 50 },\r
-{ "You have glowing red eyes, ",                               100, 57, 58, 60 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82È\82ß\82ç\82©\82È",                                                         90,58,59, 50 },\r
-{ "\94g\91Å\82Á\82½",                                                  100,58,59, 50 },\r
-#else\r
-{ "straight ",                                          90, 58, 59, 50 },\r
-{ "wavy ",                                                     100, 58, 59, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\8d\95\94¯\81A\82»\82µ\82Ä",                                               75,59,60, 50 },\r
-{ "\92\83\94¯\81A\82»\82µ\82Ä",                                              100,59,60, 50 },\r
-#else\r
-{ "black hair, ",                                               75, 59, 60, 50 },\r
-{ "brown hair, ",                                              100, 59, 60, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ " 30cm \82Ù\82Ç\82Ì\83q\83Q\82ð\8e\9d\82¿\81A",                                           25,60,61, 50 },\r
-{ " 60cm \82Ù\82Ç\82Ì\83q\83Q\82ð\8e\9d\82¿\81A",                                           60,60,61, 51 },\r
-{ " 90cm \82Ù\82Ç\82Ì\83q\83Q\82ð\8e\9d\82¿\81A",                                   90,60,61, 53 },\r
-{ " 1m20cm \82Ù\82Ç\82Ì\83q\83Q\82ð\8e\9d\82¿\81A ",                                               100,60,61, 55 },\r
-#else\r
-{ "a one foot beard, ",                                         25, 60, 61, 50 },\r
-{ "a two foot beard, ",                                         60, 60, 61, 51 },\r
-{ "a three foot beard, ",                                       90, 60, 61, 53 },\r
-{ "a four foot beard, ",                                       100, 60, 61, 55 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\8d\95\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                                      100,61, 0, 50 },\r
-#else\r
-{ "and a dark complexion.",                                    100, 61, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\83x\83g\82Â\82­\82æ\82¤\82È\97Î\82Ì\93µ\82Æ",                                     60,62,63, 50 },\r
-{ "\82 \82È\82½\82Í\89\98\95¨\82Ì\82æ\82¤\82È\89©\90F\82¢\93µ\82Æ",                                     85,62,63, 50 },\r
-{ "\82 \82È\82½\82Í\90Â\82­\8c\8c\91\96\82Á\82½\93µ\82Æ",                           99,62,63, 50 },\r
-{ "\82 \82È\82½\82Í\8bP\82­\90Ô\82¢\93µ\82Æ",                                      100,62,63, 55 },\r
-#else\r
-{ "You have slime green eyes, ",                                60, 62, 63, 50 },\r
-{ "You have puke yellow eyes, ",                                85, 62, 63, 50 },\r
-{ "You have blue-bloodshot eyes, ",                             99, 62, 63, 50 },\r
-{ "You have glowing red eyes, ",                               100, 62, 63, 55 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\89\98\82ç\82µ\82¢",                                                   33,63,64, 50 },\r
-{ "\95s\8c\89\82È",                                                     66,63,64, 50 },\r
-{ "\8e\89\82¬\82Á\82½",                                                  100,63,64, 50 },\r
-#else\r
-{ "dirty ",                                                     33, 63, 64, 50 },\r
-{ "mangy ",                                                     66, 63, 64, 50 },\r
-{ "oily ",                                                     100, 63, 64, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\83\8f\83J\83\81\82Ì\97l\82È\94¯\82ð\8e\9d\82¿\81A",                                     33,64,65, 50 },\r
-{ "\96¾\82é\82¢\90Ô\90F\82Ì\94¯\82ð\8e\9d\82¿\81A",                                             66,64,65, 50 },\r
-{ "\88Ã\82¢\8e\87\90F\82Ì\94¯\82ð\8e\9d\82¿\81A",                                              100,64,65, 50 },\r
-#else\r
-{ "sea-weed green hair, ",                                      33, 64, 65, 50 },\r
-{ "bright red hair, ",                                  66, 64, 65, 50 },\r
-{ "dark purple hair, ",                                        100, 64, 65, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\97Î\90F\82Ì",                                                     25,65,66, 50 },\r
-{ "\90Â\82¢",                                                       50,65,66, 50 },\r
-{ "\94\92\82¢",                                                       75,65,66, 50 },\r
-{ "\8d\95\82¢",                                                      100,65,66, 50 },\r
-#else\r
-{ "and green ",                                                 25, 65, 66, 50 },\r
-{ "and blue ",                                          50, 65, 66, 50 },\r
-{ "and white ",                                                 75, 65, 66, 50 },\r
-{ "and black ",                                                100, 65, 66, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\83u\83c\83u\83c\82µ\82½\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                                               33,66, 0, 50 },\r
-{ "\83J\83T\83u\83^\82¾\82ç\82¯\82Ì\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                                           66,66, 0, 50 },\r
-{ "\83K\83T\83K\83T\82Ì\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                                                100,66, 0, 50 },\r
-#else\r
-{ "ulcerous skin.",                                             33, 66, 0, 50 },\r
-{ "scabby skin.",                                               66, 66, 0, 50 },\r
-{ "leprous skin.",                       100, 66, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\94F\92m\82³\82ê\82Ä\82¢\82È\82¢\8eq\8b\9f\82Å\82·\81B",          50, 68, 50, 45 },\r
-{ "\8a¨\93\96\82³\82ê\82½\8eq\8b\9f\82Å\82·\81B",           80, 68, 50, 65 },\r
-{ "\91\81\82­\82µ\82Ä\90\82«\95Ê\82ê\82½\8eq\8b\9f\82Å\82·\81B",      100, 68, 50, 55 },\r
-#else\r
-{ "You are an unacknowledged child of ", 50, 67, 68, 45 },\r
-{ "You are a rebel child of ",         80, 67, 68, 65 },\r
-{ "You are a long lost child of ",     100, 67, 68, 55 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\96¼\82Ì\92m\82ê\82Ê\83A\83\93\83o\81[\82Ì\89¤\91°\82Ì",               50, 67, 68, 80 },\r
-{ "\82 \82È\82½\82Í\91æ\8eO\90¢\91ã\82Ì\83A\83\93\83o\81[\89¤\91°\82Ì", 65, 67, 68, 90 },\r
-{ "\82 \82È\82½\82Í\91æ\93ñ\90¢\91ã\82Ì\83A\83\93\83o\81[\89¤\91°\82Ì", 79, 67, 68, 100 },\r
-{ "\82 \82È\82½\82Í\83I\83x\83\8d\83\93\82Ì",       80, 67, 68, 130 },\r
-{ "\82 \82È\82½\82Í\83I\83Y\83\8a\83b\83N\82Ì",        83, 67, 68, 105 },\r
-{ "\82 \82È\82½\82Í\83t\83B\83\93\83h\81[\82Ì",       84, 67, 68, 105 },\r
-{ "\82 \82È\82½\82Í\83u\83\89\83\93\83h\82Ì",        85, 67, 68, 90 },\r
-{ "\82 \82È\82½\82Í\83t\83\8d\81[\83\89\82Ì",        87, 67, 68, 100 },\r
-{ "\82 \82È\82½\82Í\83W\83F\83\89\81[\83h\82Ì",       88, 67, 68, 125 },\r
-{ "\82 \82È\82½\82Í\83f\83B\83A\83h\83\89\82Ì",      89, 67, 68, 120 },\r
-{ "\82 \82È\82½\82Í\83\89\83\93\83_\83\80\82Ì",       90, 67, 68, 140 },\r
-{ "\82 \82È\82½\82Í\83x\83l\83f\83B\83N\83g\82Ì",     91, 67, 68, 115 },\r
-{ "\82 \82È\82½\82Í\83R\81[\83E\83B\83\93\82Ì",       92, 67, 68, 110 },\r
-{ "\82 \82È\82½\82Í\83W\83\85\83\8a\83A\83\93\82Ì",       93, 67, 68, 105 },\r
-{ "\82 \82È\82½\82Í\83P\83C\83\93\82Ì",        94, 67, 68, 95 },\r
-{ "\82 \82È\82½\82Í\83u\83\8c\83C\83Y\82Ì",        95, 67, 68, 115 },\r
-{ "\82 \82È\82½\82Í\83t\83B\83I\83i\82Ì",        96, 67, 68, 110 },\r
-{ "\82 \82È\82½\82Í\83G\83\8a\83b\83N\82Ì",         97, 67, 68, 135 },\r
-{ "\82 \82È\82½\82Í\83\8a\83i\83\8b\83h\82Ì",      98, 67, 68, 90 },\r
-{ "\82 \82È\82½\82Í\83}\81[\83\8a\83\93\82Ì",       99, 67, 68, 105 },\r
-{ "\82 \82È\82½\82Í\83}\81[\83e\83B\83\93\82Ì",       100, 67,68, 80 },\r
-#else\r
-{ "an unknown Amberite.  ",               50, 68, 50, 80 },\r
-{ "an unknown third generation Amberite.  ", 65, 68, 50, 90 },\r
-{ "an unknown second generation Amberite.  ", 79, 68, 50, 100 },\r
-{ "Oberon.  ",       80, 68, 50, 130 },\r
-{ "Osric.  ",        83, 68, 50, 105 },\r
-{ "Finndo.  ",       84, 68, 50, 105 },\r
-{ "Brand.  ",        85, 68, 50, 90 },\r
-{ "Flora.  ",        87, 68, 50, 100 },\r
-{ "Gerard.  ",       88, 68, 50, 125 },\r
-{ "Deirdre.  ",      89, 68, 50, 120 },\r
-{ "Random.  ",       90, 68, 50, 140 },\r
-{ "Benedict.  ",     91, 68, 50, 115 },\r
-{ "Corwin.  ",       92, 68, 50, 110 },\r
-{ "Julian.  ",       93, 68, 50, 105 },\r
-{ "Caine.  ",        94, 68, 50, 95 },\r
-{ "Bleys.  ",        95, 68, 50, 115 },\r
-{ "Fiona.  ",        96, 68, 50, 110 },\r
-{ "Eric.  ",         97, 68, 50, 135 },\r
-{ "Rinaldo.  ",      98, 68, 50, 90 },\r
-{ "Merlin.  ",       99, 68, 50, 105 },\r
-{ "Martin.  ",       100, 68, 50, 80 },\r
-#endif\r
-\r
-\r
-\r
-#ifdef JP\r
-{ "\89½\90l\82©\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B",      85, 70, 71, 45 },\r
-{ "\88ê\97±\8eí\82Å\82·\81B",               100, 70, 71, 55 },\r
-\r
-{ "\82 \82È\82½\82Í\83_\81[\83N\83G\83\8b\83t\82Ì\90í\8em\82Ì", 50, 69, 70, 60 },\r
-{ "\82 \82È\82½\82Í\83_\81[\83N\83G\83\8b\83t\82Ì\96\82\8fp\8em\82Ì", 80, 69, 70, 75 },\r
-{ "\82 \82È\82½\82Í\83_\81[\83N\83G\83\8b\83t\82Ì\8bM\91°\82Ì", 100,  69, 70, 95 },\r
-#else\r
-{ "You are one of several children of a Dark Elven ",      85, 69, 70, 45 },\r
-{ "You are the only child of a Dark Elven ",          100, 69, 70, 55 },\r
-\r
-{ "Warrior.  ", 50, 70, 71, 60 },\r
-{ "Warlock.  ", 80, 70, 71, 75 },\r
-{ "Noble.  ", 100, 70, 71, 95 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\8d\95\82¢\93µ\82Æ", 100, 71, 72, 50 },\r
-#else\r
-{ "You have black eyes, ", 100, 71, 72, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82È\82ß\82ç\82©\82È",                        70, 72, 73, 50 },\r
-{ "\94g\91Å\82Á\82½",                            90, 72, 73, 50 },\r
-{ "\83J\81[\83\8b\82µ\82½",                          100, 72, 73, 50 },\r
-\r
-{ "\8d\95\82¢\94¯\81A\82»\82µ\82Ä\82Æ\82Ä\82à\88Ã\82¢\90F\82Ì\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 100, 73, 0, 50 },\r
-#else\r
-{ "straight ",                        70, 72, 73, 50 },\r
-{ "wavy ",                            90, 72, 73, 50 },\r
-{ "curly ",                          100, 72, 73, 50 },\r
-\r
-{ "black hair and a very dark complexion.", 100, 73, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Ì\95ê\90e\82Í\83I\81[\83K\82Å\82µ\82½\82ª\81A\82»\82ê\82Í\94é\96§\82É\82³\82ê\82Ä\82¢\82Ü\82·\81B", 25, 74, 20, 25 },\r
-{ "\82 \82È\82½\82Ì\95\83\90e\82Í\83I\81[\83K\82Å\82µ\82½\82ª\81A\82»\82ê\82Í\94é\96§\82É\82³\82ê\82Ä\82¢\82Ü\82·\81B", 100, 74, 20, 25 },\r
-#else\r
-{ "Your mother was an Ogre, but it is unacknowledged.  ", 25, 74, 20, 25 },\r
-{ "Your father was an Ogre, but it is unacknowledged.  ", 100, 74, 20, 25 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Ì\95ê\90e\82Í\8bu\83W\83\83\83C\83A\83\93\83g\82Å\82µ\82½\81B", 10, 75, 20, 50 },\r
-{ "\82 \82È\82½\82Ì\95ê\90e\82Í\83t\83@\83C\83A\81[\81E\83W\83\83\83C\83A\83\93\83g\82Å\82µ\82½\81B", 12, 75, 20, 55 },\r
-{ "\82 \82È\82½\82Ì\95ê\90e\82Í\83t\83\8d\83X\83g\81E\83W\83\83\83C\83A\83\93\83g\82Å\82µ\82½\81B", 20, 75, 20, 60 },\r
-{ "\82 \82È\82½\82Ì\95ê\90e\82Í\83N\83\89\83E\83h\81E\83W\83\83\83C\83A\83\93\83g\82Å\82µ\82½\81B", 23, 75, 20, 65 },\r
-{ "\82 \82È\82½\82Ì\95ê\90e\82Í\83X\83g\81[\83\80\81E\83W\83\83\83C\83A\83\93\83g\82Å\82µ\82½\81B", 25, 75, 20, 70 },\r
-{ "\82 \82È\82½\82Ì\95\83\90e\82Í\8bu\83W\83\83\83C\83A\83\93\83g\82Å\82µ\82½\81B",  60, 75, 20, 50 },\r
-{ "\82 \82È\82½\82Ì\95\83\90e\82Í\83t\83@\83C\83A\81[\81E\83W\83\83\83C\83A\83\93\83g\82Å\82µ\82½\81B",  70, 75, 20, 55 },\r
-{ "\82 \82È\82½\82Ì\95\83\90e\82Í\83t\83\8d\83X\83g\81E\83W\83\83\83C\83A\83\93\83g\82Å\82µ\82½\81B",  80, 75, 20, 60 },\r
-{ "\82 \82È\82½\82Ì\95\83\90e\82Í\83N\83\89\83E\83h\81E\83W\83\83\83C\83A\83\93\83g\82Å\82µ\82½\81B",  90, 75, 20, 65 },\r
-{ "\82 \82È\82½\82Ì\95\83\90e\82Í\83X\83g\81[\83\80\81E\83W\83\83\83C\83A\83\93\83g\82Å\82µ\82½\81B", 100, 75, 20, 70 },\r
-#else\r
-{ "Your mother was a Hill Giant.  ", 10, 75, 20, 50 },\r
-{ "Your mother was a Fire Giant.  ", 12, 75, 20, 55 },\r
-{ "Your mother was a Frost Giant.  ", 20, 75, 20, 60 },\r
-{ "Your mother was a Cloud Giant.  ", 23, 75, 20, 65 },\r
-{ "Your mother was a Storm Giant.  ", 25, 75, 20, 70 },\r
-{ "Your father was a Hill Giant.  ",  60, 75, 20, 50 },\r
-{ "Your father was a Fire Giant.  ",  70, 75, 20, 55 },\r
-{ "Your father was a Frost Giant.  ",  80, 75, 20, 60 },\r
-{ "Your father was a Cloud Giant.  ",  90, 75, 20, 65 },\r
-{ "Your father was a Storm Giant.  ", 100, 75, 20, 70 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Ì\95\83\90e\82Í\96¼\82Ì\92m\82ê\82Ê\83^\83C\83^\83\93\82Å\82µ\82½\81B", 75, 76, 20, 50 },\r
-{ "\82 \82È\82½\82Ì\95ê\90e\82Í\83e\83~\83X\82Å\82µ\82½\81B",        80, 76, 20, 100 },\r
-{ "\82 \82È\82½\82Ì\95ê\90e\82Í\83\81\83m\83V\83\93\82Å\82µ\82½\81B",     85, 76, 20, 100 },\r
-{ "\82 \82È\82½\82Ì\95\83\90e\82Í\83I\83P\83A\83m\83X\82Å\82µ\82½\81B",      90, 76, 20, 100 },\r
-{ "\82 \82È\82½\82Ì\95\83\90e\82Í\83N\83\8a\83E\83X\82Å\82µ\82½\81B",         95, 76, 20, 100 },\r
-{ "\82 \82È\82½\82Ì\95\83\90e\82Í\83n\83C\83y\83\8a\83I\83\93\82Å\82µ\82½\81B",      98, 76, 20, 125 },\r
-{ "\82 \82È\82½\82Ì\95\83\90e\82Í\83N\83\8d\83m\83X\82Å\82µ\82½\81B",       100, 76, 20, 150 },\r
-#else\r
-{ "Your father was an unknown Titan.  ", 75, 76, 20, 50 },\r
-{ "Your mother was Themis.  ",        80, 76, 20, 100 },\r
-{ "Your mother was Mnemosyne.  ",     85, 76, 20, 100 },\r
-{ "Your father was Okeanoas.  ",      90, 76, 20, 100 },\r
-{ "Your father was Crius.  ",         95, 76, 20, 100 },\r
-{ "Your father was Hyperion.  ",      98, 76, 20, 125 },\r
-{ "Your father was Kronos.  ",       100, 76, 20, 150 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\96¼\82Ì\92m\82ê\82Ê\83T\83C\83N\83\8d\83v\83X\82Ì\8eq\91·\82Å\82·\81B", 90, 77, 109, 50 },\r
-{ "\82 \82È\82½\82Í\83|\83\8a\83t\83F\83\82\83X\82Ì\8eq\8b\9f\82Å\82·\81B", 98, 77, 109, 80 },\r
-{ "\82 \82È\82½\82Í\83E\83\89\83m\83X\82Ì\8eq\8b\9f\82Å\82·\81B", 100, 77, 109, 135 },\r
-#else\r
-{ "You are the offspring of an unknown Cyclops.  ", 90, 77, 109, 50 },\r
-{ "You are Polyphemos's child.  ", 98, 77, 109, 80 },\r
-{ "You are Uranos's child.  ", 100, 77, 109, 135 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\89½\90l\82©\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B", 100, 79, 80, 50 },\r
-\r
-{ "\82 \82È\82½\82Í\83u\83\89\83E\83\93\81E\83C\81[\83N\82Ì",                50, 78, 79, 50 },\r
-{ "\82 \82È\82½\82Í\83u\83\8b\81[\81E\83C\81[\83N\82Ì",          75, 78, 79, 50 },\r
-{ "\82 \82È\82½\82Í\83}\83X\83^\81[\81E\83C\81[\83N\82Ì",                95, 78, 79, 85 },\r
-{ "\82 \82È\82½\82Í\83C\81[\83N\82Ì\89¤\81w\83{\83\8b\83h\81[\83\8b\81x\82Ì", 100, 78, 79, 120 },\r
-#else\r
-{ "You are one of several children of ", 100, 78, 79, 50 },\r
-\r
-{ "a Brown Yeek. ", 50, 79, 80, 50 },\r
-{ "a Blue Yeek.  ", 75, 79, 80, 50 },\r
-{ "a Master Yeek.  ", 95, 79, 80, 85 },\r
-{ "Boldor, the King of the Yeeks.  ", 100, 79, 80, 120 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\90Â\82¢\93µ\82Æ",    25, 80, 81, 50 },\r
-{ "\82 \82È\82½\82Í\8cõ\82é\93µ\82Æ",    50, 80, 81, 50 },\r
-{ "\82 \82È\82½\82Í\8f¬\82³\82È\8d\95\82¢\93µ\82Æ",    75, 80, 81, 50 },\r
-{ "\82 \82È\82½\82Í\8d\95\82­\8bP\82­\93µ\82Æ",    100, 80, 81, 50 },\r
-\r
-{ "\94¯\82Ì\82È\82¢\93ª\81A",        20, 81, 65, 50 },\r
-{ "\8d\95\82­\92Z\82¢\94¯\81A",        40, 81, 65, 50 },\r
-{ "\8d\95\82­\92·\82¢\94¯\81A",        60, 81, 65, 50 },\r
-{ "\94R\82¦\82é\82æ\82¤\82È\90Ô\82¢\94¯\81A",        80, 81, 65, 50 },\r
-{ "\90F\82Ì\82È\82¢\94\92\82¢\94¯\81A",        100, 81, 65, 50 },\r
-#else\r
-{ "You have pale eyes, ",    25, 80, 81, 50 },\r
-{ "You have glowing eyes, ",    50, 80, 81, 50 },\r
-{ "You have tiny black eyes, ",    75, 80, 81, 50 },\r
-{ "You have shining black eyes, ",    100, 80, 81, 50 },\r
-\r
-{ "no hair at all, ",        20, 81, 65, 50 },\r
-{ "short black hair, ",        40, 81, 65, 50 },\r
-{ "long black hair, ",        60, 81, 65, 50 },\r
-{ "bright red hair, ",        80, 81, 65, 50 },\r
-{ "colourless albino hair, ",        100, 81, 65, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82Ì\89½\90l\82©\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B ", 100, 83, 80, 50 },\r
-\r
-{ "\82 \82È\82½\82Í\83X\83\82\81[\83\8b\81E\83R\83{\83\8b\83h",        40, 82, 83, 50 },\r
-{ "\82 \82È\82½\82Í\83R\83{\83\8b\83h",                  75, 82, 83, 55 },\r
-{ "\82 \82È\82½\82Í\83\89\81[\83W\81E\83R\83{\83\8b\83h",                  95, 82, 83, 65 },\r
-{ "\82 \82È\82½\82Í\83R\83{\83\8b\83h\82Ì\89¤\81w\83\80\83K\83b\83V\83\85\81x",   100, 82, 83, 100 },\r
-#else\r
-{ "You are one of several children of ", 100, 82, 83, 50 },\r
-\r
-{ "a Small Kobold.  ",   40, 83, 80, 50 },\r
-{ "a Kobold.  ",         75, 83, 80, 55 },\r
-{ "a Large Kobold.  ",   95, 83, 80, 65 },\r
-{ "Mughash, the Kobold Lord.  ",     100, 83, 80, 100 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\8f\97\89¤\83N\83\89\83b\83R\83\93\82Ì\89½\90l\82©\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B"\r
-, 100, 84, 85, 50 },\r
-\r
-{ "\82 \82È\82½\82Í\90Ô\82¢\94§\82Æ", 40, 85, 86, 50 },\r
-{ "\82 \82È\82½\82Í\8d\95\82¢\94§\82Æ", 90, 85, 86, 50 },\r
-{ "\82 \82È\82½\82Í\89©\90F\82¢\94§\82Æ", 100, 85, 86, 50 },\r
-\r
-{ "\8d\95\82¢\96Ú\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 100, 86, 0, 50 },\r
-#else\r
-{ "You are one of several children of a Klackon hive queen.  "\r
-, 100, 84, 85, 50 },\r
-\r
-{ "You have red skin, ", 40, 85, 86, 50 },\r
-{ "You have black skin, ", 90, 85, 86, 50 },\r
-{ "You have yellow skin, ", 100, 85, 86, 50 },\r
-\r
-{ "and black eyes.", 100, 86, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82Ì\89½\90l\82©\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B", 100, 88, 18, 89 },\r
-\r
-{ "\82 \82È\82½\82Í\83j\81[\83x\83\8b\83\93\83O\82Ì\93z\97ê", 30,    87, 88, 20 },\r
-{ "\82 \82È\82½\82Í\83j\81[\83x\83\8b\83\93\83O\82Ì\93\90\91¯", 50,    87, 88, 40 },\r
-{ "\82 \82È\82½\82Í\83j\81[\83x\83\8b\83\93\83O\82Ì\92b\96è\89®", 70,  87, 88, 60 },\r
-{ "\82 \82È\82½\82Í\83j\81[\83x\83\8b\83\93\83O\82Ì\8dB\95v", 90,    87, 88, 75 },\r
-{ "\82 \82È\82½\82Í\83j\81[\83x\83\8b\83\93\83O\82Ì\83V\83\83\81[\83}\83\93", 95,87, 88, 100 },\r
-{ "\82 \82È\82½\82Í\83j\81[\83x\83\8b\83\93\83O\82Ì\89¤\81w\83~\81[\83\81\81x", 100,87, 88, 100 },/*nuke me*/\r
-#else\r
-{ "You are one of several children of ", 100, 87, 88, 89 },\r
-\r
-{ "a Nibelung Slave.  ", 30, 88, 18, 20 },\r
-{ "a Nibelung Thief.  ", 50, 88, 18, 40 },\r
-{ "a Nibelung Smith.  ", 70, 88, 18, 60 },\r
-{ "a Nibelung Miner.  ", 90, 88, 18, 75 },\r
-{ "a Nibelung Shaman.  ", 95, 88, 18, 100 },\r
-{ "Mime, the Nibelung.  ", 100, 88, 18, 100 },\r
-#endif\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\83h\83\89\83R\83j\83A\83\93\82Ì", 100, 89, 90, 50 },\r
-\r
-{ "\82Ì\92·\8eq\82Å\82·\81B", 30, 135, 91, 55 },\r
-{ "\82Ì\96\96\8eq\82Å\82·\81B", 50, 135, 91, 50 },\r
-{ "\82Ì\97{\8eq\82Å\82·\81B", 55, 135, 91, 50 },\r
-{ "\82Ì\8cÇ\8e\99\82Å\82·\81B", 60, 135, 91, 45 },\r
-{ "\82Ì\8aô\90l\82©\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B", 85, 135, 91, 50 },\r
-{ "\82Ì\88ê\97±\8eí\82Å\82·\81B", 100, 135, 91, 55 },\r
-\r
-{ "\8cî\90H", 10, 90, 135, 20 },\r
-{ "\93\90\91¯", 21, 90, 135, 30 },\r
-{ "\90\85\95v", 26, 90, 135, 45 },\r
-{ "\97b\95º", 42, 90, 135, 45 },\r
-{ "\90í\8em", 73, 90, 135, 50 },\r
-{ "\8f¤\90l", 78, 90, 135, 50 },\r
-{ "\90E\90l", 85, 90, 135, 55 },\r
-{ "\8e¡\97Ã\89Æ", 89, 90, 135, 60 },\r
-{ "\91m\97µ", 94, 90, 135, 65 },\r
-{ "\96\82\8fp\8et", 97, 90, 135, 70 },\r
-{ "\8aw\8eÒ", 99, 90, 135, 80 },\r
-{ "\8bM\91°", 100, 90, 135, 100 },\r
-\r
-{ "\82 \82È\82½\82Í", 100, 91, 136, 50 },\r
-\r
-{ "\82Í\8d\95\8aD\90F\82Ì\97\83\82Æ\94§\81A\82»\82µ\82Ä\8aD\90F\82Ì\95 \82ð\82µ\82Ä\82¢\82Ü\82·\81B", 11, 136, 0, 50 },\r
-{ "\83u\83\8d\83\93\83Y\90F\82Ì\97\83\82Æ\94§\81A\82»\82µ\82Ä\93º\90F\82Ì\95 \82ð\82µ\82Ä\82¢\82Ü\82·\81B", 16, 136, 0, 50 },\r
-{ "\89©\8bà\82Ì\97\83\82ð\8e\9d\82¿\81A\89©\8bà\82Ì\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 24, 136, 0, 50 },\r
-{ "\94\92\82¢\97\83\82ð\8e\9d\82¿\81A\94\92\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 26, 136, 0, 60 },\r
-{ "\90Â\82¢\97\83\82Æ\94§\81A\82»\82µ\82Ä\90\85\90F\82Ì\95 \82ð\82µ\82Ä\82¢\82Ü\82·\81B", 32, 136, 0, 50 },\r
-{ "\96\9c\90F\82Ì\97\83\82ð\8e\9d\82¿\81A\94§\82à\96\9c\90F\82Å\82·\81B", 33, 136, 0, 70 },\r
-{ "\92\83\90F\82Ì\97\83\82ð\8e\9d\82¿\81A\92\83\90F\82Ì\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 37, 136, 0, 45 },\r
-{ "\8d\95\82¢\97\83\82Æ\94§\81A\82»\82µ\82Ä\94\92\82¢\95 \82ð\82µ\82Ä\82¢\82Ü\82·\81B", 41, 136, 0, 50 },\r
-{ "\94\96\8e\87\90F\82Ì\97\83\82Æ\94§\81A\82»\82µ\82Ä\94\92\82¢\95 \82ð\82µ\82Ä\82¢\82Ü\82·\81B", 48, 136, 0, 50 },\r
-{ "\97Î\90F\82Ì\97\83\82Æ\94§\81A\82»\82µ\82Ä\89©\90F\82¢\95 \82ð\82µ\82Ä\82¢\82Ü\82·\81B", 65, 136, 0, 50 },\r
-{ "\97Î\90F\82Ì\97\83\82ð\8e\9d\82¿\81A\97Î\90F\82Ì\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 75, 136, 0, 50 },\r
-{ "\90Ô\82¢\97\83\82ð\8e\9d\82¿\81A\90Ô\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 88, 136, 0, 50 },\r
-{ "\8d\95\82¢\97\83\82ð\8e\9d\82¿\81A\8d\95\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 94, 136, 0, 50 },\r
-{ "\82«\82ç\82ß\82­\97\83\82ð\8e\9d\82¿\81A\8bà\91®\93I\82È\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 100, 136, 0, 55 },\r
-#else\r
-{ "You are ", 100, 89, 135, 50 },\r
-\r
-{ "the oldest child of a Draconian ", 30, 135, 90, 55 },\r
-{ "the youngest child of a Draconian ", 50, 135, 90, 50 },\r
-{ "the adopted child of a Draconian ", 55, 135, 90, 50 },\r
-{ "an orphaned child of a Draconian ", 60, 135, 90, 45 },\r
-{ "one of several children of a Draconian ", 85, 135, 90, 50 },\r
-{ "the only child of a Draconian ", 100, 135, 90, 55 },\r
-\r
-{ "Beggar.  ", 10, 90, 91, 20 },\r
-{ "Thief.  ", 21, 90, 91, 30 },\r
-{ "Sailor.  ", 26, 90, 91, 45 },\r
-{ "Mercenary.  ", 42, 90, 91, 45 },\r
-{ "Warrior.  ", 73, 90, 91, 50 },\r
-{ "Merchant.  ", 78, 90, 91, 50 },\r
-{ "Artisan.  ", 85, 90, 91, 55 },\r
-{ "Healer.  ", 89, 90, 91, 60 },\r
-{ "Priest.  ", 94, 90, 91, 65 },\r
-{ "Mage.  ", 97, 90, 91, 70 },\r
-{ "Scholar.  ", 99, 90, 91, 80 },\r
-{ "Noble.  ", 100, 90, 91, 100 },\r
-\r
-{ "You have ", 100, 91, 136, 50 },\r
-\r
-{ "charcoal wings, charcoal skin and a smoke-gray belly.", 11, 136, 0, 50 },\r
-{ "bronze wings, bronze skin, and a copper belly.", 16, 136, 0, 50 },\r
-{ "golden wings, and golden skin.", 24, 136, 0, 50 },\r
-{ "white wings, and white skin.", 26, 136, 0, 60 },\r
-{ "blue wings, blue skin, and a cyan belly.", 32, 136, 0, 50 },\r
-{ "multi-hued wings, and multi-hued skin.", 33, 136, 0, 70 },\r
-{ "brown wings, and brown skin.", 37, 136, 0, 45 },\r
-{ "black wings, black skin, and a white belly.", 41, 136, 0, 50 },\r
-{ "lavender wings, lavender skin, and a white belly.", 48, 136, 0, 50 },\r
-{ "green wings, green skin and yellow belly.", 65, 136, 0, 50 },\r
-{ "green wings, and green skin.", 75, 136, 0, 50 },\r
-{ "red wings, and red skin.", 88, 136, 0, 50 },\r
-{ "black wings, and black skin.", 94, 136, 0, 50 },\r
-{ "metallic skin, and shining wings.", 100, 136, 0, 55 },\r
-#endif\r
-\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\88Ì\91å\82È\82é\92·\98V\82½\82¿\82Ì\94]\96¡\91X\82ª\95\82\82©\82ñ\82Å\82¢\82é\95ê\82È\82é\92r\82Å\83I\83^\83}\83W\83\83\83N\83V\82Æ\82µ\82Ä\90\82Ü\82ê\82Ü\82µ\82½\81B\82 \82È\82½\82Í\83k\83\8b\83k\83\8b\82µ\82½\94§\82Æ\8bP\82­\8bó\8b\95\82È\96Ú\82ð\82µ\82Ä\82¢\82Ä\81A", 100, 92, 93, 80 },\r
-{ "\8cû\82Ì\8eü\82è\82É\8eO\96{\82Ì\90G\8eè\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B", 20, 93, 0, 45 },\r
-{ "\8cû\82Ì\8eü\82è\82É\8el\96{\82Ì\90G\8eè\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B", 80, 93, 0, 50 },\r
-{ "\8cû\82Ì\8eü\82è\82É\8cÜ\96{\82Ì\90G\8eè\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B", 100, 93, 0, 55 },\r
-#else\r
-{ "You have slimy skin, empty glowing eyes, and ", 100, 92, 93, 80 },\r
-{ "three tentacles around your mouth.", 20, 93, 0, 45 },\r
-{ "four tentacles around your mouth.", 80, 93, 0, 50 },\r
-{ "five tentacles around your mouth.", 100, 93, 0, 55 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Ì\91c\90æ\82Í", 100, 94, 95, 50 },\r
-\r
-{ "\90S\82ð\8e\9d\82½\82È\82¢\92n\8d\96\82Ì\92á\8b\89\82È\90\95¨\82Å\82µ\82½\81B", 30, 95, 96, 20 },\r
-{ "\89º\8b\89\88«\96\82\82Å\82µ\82½\81B", 60, 95, 96, 50 },\r
-{ "\8fã\8b\89\88«\96\82\82Å\82µ\82½\81B", 90, 95, 96, 75 },\r
-{ "\96\82\89¤\82Å\82µ\82½\81B", 100, 95, 96, 99 },\r
-\r
-{ "\82 \82È\82½\82Í\90Ô\82¢\94§\82Æ", 50, 96, 97, 50 },\r
-{ "\82 \82È\82½\82Í\92\83\90F\82¢\94§\82Æ", 100, 96, 97, 50 },\r
-\r
-{ "\90Ô\82­\94R\82¦\82é\93µ\82ð\82µ\82Ä\82¢\82Ä\81Açê\92Ü\82Æ\89å\82Æ\8eh\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B", 40, 97, 0, 50 },\r
-{ "\90Ô\82­\94R\82¦\82é\93µ\82ð\82µ\82Ä\82¢\82Ä\81Açê\92Ü\82Æ\89å\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B", 70, 97, 0, 50 },\r
-{ "\90Ô\82­\94R\82¦\82é\93µ\82ð\82µ\82Ä\82¢\82Ä\81Açê\92Ü\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B", 100, 97, 0, 50 },\r
-#else\r
-{ "You ancestor was ", 100, 94, 95, 50 },\r
-\r
-{ "a mindless demonic spawn.  ", 30, 95, 96, 20 },\r
-{ "a minor demon.  ", 60, 95, 96, 50 },\r
-{ "a major demon.  ", 90, 95, 96, 75 },\r
-{ "a demon lord.  ", 100, 95, 96, 99 },\r
-\r
-{ "You have red skin, ", 50, 96, 97, 50 },\r
-{ "You have brown skin, ", 100, 96, 97, 50 },\r
-\r
-{ "claws, fangs, spikes, and glowing red eyes.", 40, 97, 0, 50 },\r
-{ "claws, fangs, and glowing red eyes.", 70, 97, 0, 50 },\r
-{ "claws, and glowing red eyes.", 100, 97, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\83J\83o\83\89\82Ì\94é\8fp\82É\82æ\82Á\82Ä", 40,  98, 99, 50 },\r
-{ "\82 \82È\82½\82Í\96\82\96@\8eg\82¢\82É\82æ\82Á\82Ä", 65,      98, 99, 50 },\r
-{ "\82 \82È\82½\82Í\98B\8bà\8fp\8et\82É\82æ\82Á\82Ä",       90,        98, 99, 50 },\r
-{ "\82 \82È\82½\82Í\91m\97µ\82É\82æ\82Á\82Ä", 100, 98, 99, 60 },\r
-\r
-{ "\88«\82Æ\90í\82¤\82½\82ß\82É", 10, 99, 100, 65 },\r
-{ "",           100,  99, 100, 50 },\r
-\r
-{ "\94S\93y\82©\82ç", 40, 100, 101, 50 },\r
-{ "\8aâ\90Î\82©\82ç", 80, 100, 101, 50 },\r
-{ "\96Ø\82©\82ç", 85, 100, 101, 40 },\r
-{ "\93S\82©\82ç", 99, 100, 101, 50 },\r
-{ "\8f\83\8bà\82©\82ç", 100, 100, 101, 100 },\r
-\r
-{ "\8dì\82è\8fo\82³\82ê\82Ü\82µ\82½\81B", 100,101, 0, 50 },\r
-#else\r
-{ "You were shaped from ", 100, 98, 99, 50 },\r
-\r
-{ "clay ", 40, 99, 100, 50 },\r
-{ "stone ", 80, 99, 100, 50 },\r
-{ "wood ", 85, 99, 100, 40 },\r
-{ "iron ", 99, 99, 100, 50 },\r
-{ "pure gold ", 100, 99, 100, 100 },\r
-\r
-{ "by a Kabbalist", 40, 100, 101, 50 },\r
-{ "by a Wizard", 65, 100, 101, 50 },\r
-{ "by an Alchemist", 90, 100, 101, 50 },\r
-{ "by a Priest", 100, 100, 101, 60 },\r
-\r
-{ " to fight evil.", 10, 101, 0, 65 },\r
-{ ".", 100, 101, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í", 100, 102, 103, 50 },\r
-\r
-{ "\8e\80\97ì\8fp\8em\82É\82æ\82è\8dì\82è\8fo\82³\82ê\82Ü\82µ\82½\81B", 30, 103, 104, 50 },\r
-{ "\96\82\96@\82Ì\8eÀ\8c±\82É\82æ\82è\8dì\82è\8fo\82³\82ê\82Ü\82µ\82½\81B", 50, 103, 104, 50 },\r
-{ "\8e×\88«\82È\91m\97µ\82É\82æ\82è\8dì\82è\8fo\82³\82ê\82Ü\82µ\82½\81B", 70, 103, 104, 50 },\r
-{ "\88«\96\82\82Æ\82Ì\8c_\96ñ\82É\82æ\82è\90\82Ý\8fo\82³\82ê\82Ü\82µ\82½\81B", 75, 103, 104, 50 },\r
-{ "\89\85\97ì\82©\82ç\90\82Ü\82ê\82Ü\82µ\82½\81B", 85, 103, 104, 50 },\r
-{ "\8eô\82¢\82©\82ç\90\82Ü\82ê\82Ü\82µ\82½\81B", 95, 103, 104, 30 },\r
-{ "\90_\96¼\97\94\97p\82É\82æ\82è\90\82Ý\8fo\82³\82ê\82Ü\82µ\82½\81B", 100, 103, 104, 50 },\r
-\r
-{ "\82 \82È\82½\82Í", 100, 104, 105, 50 },\r
-{ "\8cÃ\82­\89\98\82ê\82½\8d\9c\82Å\8fo\97\88\82Ä\82¢\82Ä\81A", 40, 105, 106, 50 },\r
-{ "\95\85\82Á\82½\8d\95\82¢\8d\9c\82Å\8fo\97\88\82Ä\82¢\82Ä\81A", 60, 105, 106, 50 },\r
-{ "\82¤\82·\89\98\82ê\82½\92\83\90F\82¢\8d\9c\82Å\8fo\97\88\82Ä\82¢\82Ä\81A", 80, 105, 106, 50 },\r
-{ "\94\92\82­\8bP\82­\8d\9c\82Å\8fo\97\88\82Ä\82¢\82Ä\81A", 100, 105, 106, 50 },\r
-\r
-{ "\8cõ\82é\96Ú\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 30, 106, 0, 50 },\r
-{ "\92n\8d\96\82Ì\8d\85\89Î\82ª\94R\82¦\82³\82©\82é\96Ú\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 50, 106, 0, 50 },\r
-{ "\8aáâ|\82Í\82©\82ç\82Á\82Û\82Å\82·\81B", 100, 106, 0, 50 },\r
-#else\r
-{ "You were created by ", 100, 102, 103, 50 },\r
-\r
-{ "a Necromancer.  ", 30, 103, 104, 50 },\r
-{ "a magical experiment.  ", 50, 103, 104, 50 },\r
-{ "an Evil Priest.  ", 70, 103, 104, 50 },\r
-{ "a pact with the demons.  ", 75, 103, 104, 50 },\r
-{ "a restless spirit.  ", 85, 103, 104, 50 },\r
-{ "a curse.  ", 95, 103, 104, 30 },\r
-{ "an oath.  ", 100, 103, 104, 50 },\r
-\r
-{ "You have ", 100, 104, 105, 50 },\r
-{ "dirty, dry bones, ", 40, 105, 106, 50 },\r
-{ "rotten black bones, ", 60, 105, 106, 50 },\r
-{ "filthy, brown bones, ", 80, 105, 106, 50 },\r
-{ "shining white bones, ", 100, 105, 106, 50 },\r
-\r
-{ "and glowing eyes.", 30, 106, 0, 50 },\r
-{ "and eyes which burn with hellfire.", 50, 106, 0, 50 },\r
-{ "and empty eyesockets.", 100, 106, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í", 100, 107, 108, 50 },\r
-\r
-{ "\8e\80\97ì\8fp\8em\82É\82æ\82è\90\82Ý\8fo\82³\82ê\82Ü\82µ\82½\81B", 30, 108, 62, 50 },\r
-{ "\96\82\96@\8eg\82¢\82É\82æ\82è\90\82Ý\8fo\82³\82ê\82Ü\82µ\82½\81B", 50, 108, 62, 50 },\r
-{ "\89\85\97ì\82©\82ç\90\82Ü\82ê\82Ü\82µ\82½\81B",60, 108, 62, 50 },\r
-{ "\8e×\88«\82È\91m\97µ\82É\82æ\82è\90\82Ý\8fo\82³\82ê\82Ü\82µ\82½\81B", 70, 108, 62, 50 },\r
-{ "\88«\96\82\82Æ\82Ì\8c_\96ñ\82É\82æ\82è\90\82Ý\8fo\82³\82ê\82Ü\82µ\82½\81B", 80, 108, 62, 50 },\r
-{ "\8eô\82¢\82©\82ç\90\82Ü\82ê\82Ü\82µ\82½\81B", 95, 108, 62, 30 },\r
-{ "\90_\96¼\97\94\97p\82É\82æ\82è\90\82Ý\8fo\82³\82ê\82Ü\82µ\82½\81B", 100, 108, 62, 50 },\r
-\r
-{ "\82 \82È\82½\82Í\88Ã\8a\8c\90F\82Ì\93µ\81A",               20, 109, 110, 50 },\r
-{ "\82 \82È\82½\82Í\8a\8c\90F\82Ì\93µ\81A",                    60, 109, 110, 50 },\r
-{ "\82 \82È\82½\82Í\94\96\92\83\90F\82Ì\93µ\81A",                    70, 109, 110, 50 },\r
-{ "\82 \82È\82½\82Í\97Î\90F\82Ì\93µ\81A",                    80, 109, 110, 50 },\r
-{ "\82 \82È\82½\82Í\90Â\82¢\93µ\81A",                     90, 109, 110, 50 },\r
-{ "\82 \82È\82½\82Í\92W\90Â\90F\82Ì\93µ\81A",               100, 109, 110, 50 }, /*tansei.cc.u-tokyo\82Ì\97R\97\88 */\r
-\r
-{ "\82È\82ß\82ç\82©\82È",                        70, 110, 111, 50 },\r
-{ "\94g\91Å\82Á\82½",                            90, 110, 111, 50 },\r
-{ "\83J\81[\83\8b\82µ\82½",                          100, 110, 111, 50 },\r
-\r
-{ "\8d\95\82¢\94¯\81A",                         30, 111, 112, 50 },\r
-{ "\92\83\90F\82¢\94¯\81A",                         70, 111, 112, 50 },\r
-{ "\90Ô\92\83\90F\82Ì\94¯\81A",                        80, 111, 112, 50 },\r
-{ "\90Ô\82¢\94¯\81A",                       90, 111, 112, 50 },\r
-{ "\8bà\94¯\81A",                        100, 111, 112, 50 },\r
-\r
-{ "\82»\82µ\82Ä\82Æ\82Ä\82à\88Ã\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",              10, 112, 0, 50 },\r
-{ "\82»\82µ\82Ä\88Ã\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                   30, 112, 0, 50 },\r
-{ "\82»\82µ\82Ä\95½\8bÏ\93I\82È\94§\82Ì\90F\82ð\82µ\82Ä\82¢\82Ü\82·\81B",               80, 112, 0, 50 },\r
-{ "\82»\82µ\82Ä\8c\8c\90F\82Ì\82¢\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",                   90, 112, 0, 50 },\r
-{ "\82»\82µ\82Ä\82Æ\82Ä\82à\8c\8c\90F\82Ì\82¢\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B",             100, 112, 0, 50 },\r
-#else\r
-{ "You were created by ", 100, 107, 108, 50 },\r
-\r
-{ "a Necromancer.  ", 30, 108, 62, 50 },\r
-{ "a Wizard.  ", 50, 108, 62, 50 },\r
-{ "a restless spirit.  ",60, 108, 62, 50 },\r
-{ "an Evil Priest.  ", 70, 108, 62, 50 },\r
-{ "a pact with the demons.  ", 80, 108, 62, 50 },\r
-{ "a curse.  ", 95, 108, 62, 30 },\r
-{ "an oath.  ", 100, 108, 62, 50 },\r
-\r
-{ "You have a dark brown eye, ",               20, 109, 110, 50 },\r
-{ "You have a brown eye, ",                    60, 109, 110, 50 },\r
-{ "You have a hazel eye, ",                    70, 109, 110, 50 },\r
-{ "You have a green eye, ",                    80, 109, 110, 50 },\r
-{ "You have a blue eye, ",                     90, 109, 110, 50 },\r
-{ "You have a blue-gray eye, ",               100, 109, 110, 50 },\r
-\r
-{ "straight ",                        70, 110, 111, 50 },\r
-{ "wavy ",                            90, 110, 111, 50 },\r
-{ "curly ",                          100, 110, 111, 50 },\r
-\r
-{ "black hair, ",                         30, 111, 112, 50 },\r
-{ "brown hair, ",                         70, 111, 112, 50 },\r
-{ "auburn hair, ",                        80, 111, 112, 50 },\r
-{ "red hair, ",                       90, 111, 112, 50 },\r
-{ "blond hair, ",                        100, 111, 112, 50 },\r
-\r
-{ "and a very dark complexion.",              10, 112, 0, 50 },\r
-{ "and a dark complexion.",                   30, 112, 0, 50 },\r
-{ "and an average complexion.",               80, 112, 0, 50 },\r
-{ "and a fair complexion.",                   90, 112, 0, 50 },\r
-{ "and a very fair complexion.",             100, 112, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\96Á\82Ì\82È\82¢\95æ\82Ì\92\86\82©\82çáS\82è\82Ü\82µ\82½\81B", 20, 113, 114, 50 },\r
-{ "\82 \82È\82½\82Í\90\91O\82½\82¾\82Ì\95S\90©\82Å\82µ\82½\82ª\81A\8b­\91å\82È\83o\83\93\83p\83C\83A\81E\83\8d\81[\83h\82Ì\89a\90H\82Æ\82È\82Á\82Ä\82µ\82Ü\82¢\82Ü\82µ\82½\81B", 40, 113, 114, 50 },\r
-{ "\82 \82È\82½\82Í\90\91O\82Í\83o\83\93\83p\83C\83A\81E\83n\83\93\83^\81[\82Å\82µ\82½\82ª\81A\94Þ\82ç\82Ì\89a\90H\82Æ\82È\82Á\82Ä\82µ\82Ü\82¢\82Ü\82µ\82½\81B", 60, 113, 114, 50 },\r
-{ "\82 \82È\82½\82Í\90\91O\82Í\8e\80\97ì\8fp\8em\82Å\82µ\82½\81B", 80, 113, 114, 50 },\r
-{ "\82 \82È\82½\82Í\90\91O\82Í\8b­\91å\82È\8bM\91°\82Å\82µ\82½\81B", 95, 113, 114, 50 },\r
-{ "\82 \82È\82½\82Í\90\91O\82Í\8b­\91å\82Å\8ec\94E\82È\90ê\90§\8cN\8eå\82Å\82µ\82½\81B", 100, 113, 114, 50 },\r
-#else\r
-{ "You arose from an unmarked grave.  ", 20, 113, 114, 50 },\r
-{ "In life you were a simple peasant, the victim of a powerful Vampire Lord.  ", 40, 113, 114, 50 },\r
-{ "In life you were a Vampire Hunter, but they got you.  ", 60, 113, 114, 50 },\r
-{ "In life you were a Necromancer.  ", 80, 113, 114, 50 },\r
-{ "In life you were a powerful noble.  ", 95, 113, 114, 50 },\r
-{ "In life you were a powerful and cruel tyrant.  ", 100, 113, 114, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í", 100, 114, 115, 50 },\r
-\r
-{ "\8e½\8d\95\82Ì\94¯\81A", 25, 115, 116, 50 },\r
-{ "\82à\82Â\82ê\82½\83u\83\89\83E\83\93\82Ì\94¯\81A", 50, 115, 116, 50 },\r
-{ "\94\92\82¢\94¯\81A", 75, 115, 116, 50 },\r
-{ "\94¯\82Ì\82È\82¢\93ª\81A", 100, 115, 116, 50 },\r
-#else\r
-{ "You have ", 100, 114, 115, 50 },\r
-\r
-{ "jet-black hair, ", 25, 115, 116, 50 },\r
-{ "matted brown hair, ", 50, 115, 116, 50 },\r
-{ "white hair, ", 75, 115, 116, 50 },\r
-{ "a hairless head, ", 100, 115, 116, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\94R\82¦\82é\90Î\92Y\82Ì\82æ\82¤\82È\93µ\81A", 25, 116, 117, 50 },\r
-{ "\93µ\82Ì\82È\82¢\96Ú\81A", 50, 116, 117, 50 },\r
-{ "\8b¥\96\\82È\89©\90F\82¢\93µ\81A", 75, 116, 117, 50 },\r
-{ "\8c\8c\91\96\82Á\82½\90Ô\82¢\93µ\81A", 100, 116, 117, 50 },\r
-\r
-{ "\82»\82µ\82Ä\8e\80\90l\82Ì\82æ\82¤\82É\90Â\82´\82ß\82½\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 100, 117, 0, 50 },\r
-#else\r
-{ "eyes like red coals, ", 25, 116, 117, 50 },\r
-{ "blank white eyes, ", 50, 116, 117, 50 },\r
-{ "feral yellow eyes, ", 75, 116, 117, 50 },\r
-{ "bloodshot red eyes, ", 100, 116, 117, 50 },\r
-\r
-{ "and a deathly pale complexion.", 100, 117, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í", 100, 118, 119, 50 },\r
-\r
-{ "\8e\80\97ì\8fp\8em\82É\82æ\82è\8dì\82è\8fo\82³\82ê\82Ü\82µ\82½\81B", 30, 119, 134, 50 },\r
-{ "\96\82\96@\82Ì\8eÀ\8c±\82É\82æ\82è\8dì\82è\8fo\82³\82ê\82Ü\82µ\82½\81B", 50, 119, 134, 50 },\r
-{ "\8e×\88«\82È\91m\97µ\82É\82æ\82è\8dì\82è\8fo\82³\82ê\82Ü\82µ\82½\81B", 70, 119, 134, 50 },\r
-{ "\88«\96\82\82Æ\82Ì\8c_\96ñ\82É\82æ\82è\90\82Ý\8fo\82³\82ê\82Ü\82µ\82½\81B", 75, 119, 134, 50 },\r
-{ "\89\85\97ì\82©\82ç\90\82Ü\82ê\82Ü\82µ\82½\81B", 85, 119, 134, 50 },\r
-{ "\8eô\82¢\82©\82ç\90\82Ü\82ê\82Ü\82µ\82½\81B", 95, 119, 134, 30 },\r
-{ "\90_\96¼\97\94\97p\82É\82æ\82è\90\82Ý\8fo\82³\82ê\82Ü\82µ\82½\81B", 100, 119, 134, 50 },\r
-#else\r
-{ "You were created by ", 100, 118, 119, 50 },\r
-\r
-{ "a Necromancer.  ", 30, 119, 134, 50 },\r
-{ "a magical experiment.  ", 50, 119, 134, 50 },\r
-{ "an Evil Priest.  ", 70, 119, 134, 50 },\r
-{ "a pact with the demons.  ", 75, 119, 134, 50 },\r
-{ "a restless spirit.  ", 85, 119, 134, 50 },\r
-{ "a curse.  ", 95, 119, 134, 30 },\r
-{ "an oath.  ", 100, 119, 134, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\8e½\8d\95\82Ì\94¯\81A", 25, 120, 121, 50 },\r
-{ "\82à\82Â\82ê\82½\83u\83\89\83E\83\93\82Ì\94¯\81A", 50, 120, 121, 50 },\r
-{ "\94\92\82¢\94¯\81A", 75, 120, 121, 50 },\r
-{ "\94¯\82Ì\82È\82¢\93ª\81A", 100, 120, 121, 50 },\r
-#else\r
-{ "jet-black hair, ", 25, 120, 121, 50 },\r
-{ "matted brown hair, ", 50, 120, 121, 50 },\r
-{ "white hair, ", 75, 120, 121, 50 },\r
-{ "a hairless head, ", 100, 120, 121, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\94R\82¦\82é\90Î\92Y\82Ì\82æ\82¤\82È\93µ\81A", 25, 121, 122, 50 },\r
-{ "\93µ\82Ì\82È\82¢\96Ú\81A", 50, 121, 122, 50 },\r
-{ "\8b¥\96\\82È\89©\90F\82¢\93µ\81A", 75, 121, 122, 50 },\r
-{ "\8c\8c\91\96\82Á\82½\90Ô\82¢\93µ\81A", 100, 121, 122, 50 },\r
-#else\r
-{ "eyes like red coals, ", 25, 121, 122, 50 },\r
-{ "blank white eyes, ", 50, 121, 122, 50 },\r
-{ "feral yellow eyes, ", 75, 121, 122, 50 },\r
-{ "bloodshot red eyes, ", 100, 121, 122, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82»\82µ\82Ä\8e\80\90l\82Ì\82æ\82¤\82È\93y\90F\82Ì\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 100, 122, 123, 50 },\r
-{ "\82 \82È\82½\82Ì\8eü\82è\82É\82Í\95s\8bC\96¡\82È\97Î\90F\82Ì\83I\81[\83\89\82ª\82½\82¾\82æ\82Á\82Ä\82¢\82Ü\82·\81B", 100, 123, 0, 50 },\r
-#else\r
-{ " and a deathly gray complexion. ", 100, 122, 123, 50 },\r
-{ "An eerie green aura surrounds you.", 100, 123, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Ì\97¼\90e\82Í", 100, 124, 125, 50 },\r
-\r
-{ "\83s\83N\83V\81[\82Å\82µ\82½\81B", 20, 125, 126, 35 },\r
-{ "\83j\83N\83V\81[\82Å\82µ\82½\81B", 30, 125, 126, 25 },\r
-{ "\90X\82Ì\97d\90¸\82Å\82µ\82½\81B", 75, 125, 126, 50 },\r
-{ "\90X\82Ì\90¸\97ì\82Å\82µ\82½\81B", 90, 125, 126, 75 },\r
-{ "\97d\90¸\82Ì\8bM\91°\82Å\82µ\82½\81B", 100, 125, 126, 85 }, /*nuke me \83J\83^\83J\83i\82Ì\82Ù\82¤\82ª\82¢\82¢\82©\82à */\r
-#else\r
-{ "Your parents were ", 100, 124, 125, 50 },\r
-\r
-{ "pixies.  ", 20, 125, 126, 35 },\r
-{ "nixies.  ", 30, 125, 126, 25 },\r
-{ "wood sprites.  ", 75, 125, 126, 50 },\r
-{ "wood spirits.  ", 90, 125, 126, 75 },\r
-{ "noble faerie folk.  ", 100, 125, 126, 85 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\94w\92\86\82É\83\89\83C\83g\83u\83\8b\81[\82Ì\89H\8dª\82ª\90\82¦\82Ä\82¢\82Ä\81A", 100, 126, 127, 50 },\r
-\r
-{ "\82È\82ß\82ç\82©\82È\8bà\94¯\81A",                        80, 127, 128, 50 },\r
-{ "\94g\91Å\82Á\82½\8bà\94¯\81A",                            100, 127, 128, 50 },\r
-\r
-{ "\90Â\82¢\93µ\81A\82»\82µ\82Ä\94ñ\8fí\82É\90\82«\90\82«\82Æ\82µ\82½\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 100, 128, 0, 50 },\r
-#else\r
-{ "You have light blue wings attached to your back, ", 100, 126, 127, 50 },\r
-\r
-{ "straight blond hair, ",                        80, 127, 128, 50 },\r
-{ "wavy blond hair, ",                            100, 127, 128, 50 },\r
-\r
-{ "blue eyes, and a very fair complexion.", 100, 128, 0, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\96\82\96@\82Ì\8eÀ\8c±\82É\82æ\82è\90\82Ý\8fo\82³\82ê\82Ü\82µ\82½\81B", 30, 129, 130, 40 },\r
-{ "\82 \82È\82½\82Í\8eq\8b\9f\8e\9e\91ã\81A\8bð\82©\82É\82à\8f\83\83\8d\83O\83\8b\83X\82É\93ª\82ð\93Ë\82Á\8d\9e\82ñ\82Å\82µ\82Ü\82¢\82Ü\82µ\82½\81B",\r
-50, 129, 130, 50 }, /*nuke me*/\r
-{ "\82 \82é\83J\83I\83X\82Ì\96\82\89¤\82ª\97V\82Ñ\82Å\82 \82È\82½\82ð\8dì\82è\8fã\82°\82Ü\82µ\82½\81B",\r
-60, 129, 130, 60 },\r
-{ "\82 \82È\82½\82Í\96\82\96@\82É\82æ\82è\8a|\82¯\8d\87\82í\82³\82ê\82½\93®\95¨\82Æ\90l\8aÔ\82Ì\8eq\8b\9f\82Å\82·\81B", 75, 129, 130, 50 },\r
-{ "\82 \82È\82½\82Í\8c¾\82¤\82à\82¨\82¼\82Ü\82µ\82¢\83J\83I\83X\82Ì\90\95¨\82Ì\96`\93À\93I\82È\8a|\82¯\8d\87\82í\82¹\82É\82æ\82è\90\82Ü\82ê\82Ü\82µ\82½\81B", 100, 129, 130, 30 },\r
-#else\r
-{ "You were produced by a magical experiment.  ", 30, 129, 130, 40 },\r
-{ "In your childhood, you were stupid enough to stick your head in raw Logrus.  ",\r
-50, 129, 130, 50 },\r
-{ "A Demon Lord of Chaos decided to have some fun, and so he created you.  ",\r
-60, 129, 130, 60 },\r
-{ "You are the magical crossbreed of an animal and a man.  ", 75, 129, 130, 50 },\r
-{ "You are the blasphemous crossbreed of unspeakable creatures of chaos.  ", 100, 129, 130, 30 },\r
-#endif\r
-\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\97Î\90F\82Ìà¦\92\8e\97Þ\82Ì\96Ú",              60, 130, 131, 50 },\r
-{ "\82 \82È\82½\82Í\8d\95\82¢\92¹\82Ì\96Ú",                    85, 130, 131, 50 },\r
-{ "\82 \82È\82½\82Í\83I\83\8c\83\93\83W\90F\82Ì\94L\82Ì\96Ú",            99, 130, 131, 50 },\r
-{ "\82 \82È\82½\82Í\94R\82¦\82é\82æ\82¤\82È\88«\96\82\82Ì\96Ú",          100, 130, 131, 55 },\r
-#else\r
-{ "You have green reptilian eyes, ",              60, 130, 131, 50 },\r
-{ "You have the black eyes of a bird, ",              85, 130, 131, 50 },\r
-{ "You have the orange eyes of a cat, ",               99, 130, 131, 50 },\r
-{ "You have the fiery eyes of a demon, ",             100, 130, 131, 55 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-\r
-{ "\82Æ\94¯\82Ì\82È\82¢\93ª\82ð\8e\9d\82¿\81A",                 10, 131, 133, 50 },\r
-{ "\82ð\82µ\82Ä\82¢\82Ä\81A\89\98\82¢",                     33, 131, 132, 50 },\r
-{ "\82ð\82µ\82Ä\82¢\82Ä\81A\82Ý\82·\82Ú\82ç\82µ\82¢",             66, 131, 132, 50 },\r
-{ "\82ð\82µ\82Ä\82¢\82Ä\81A\82Ä\82©\82Á\82½",                100, 131, 132, 50 },\r
-#else\r
-{ "no hair at all, ",                 10, 131, 133, 50 },\r
-{ "dirty ",                           33, 131, 132, 50 },\r
-{ "mangy ",                           66, 131, 132, 50 },\r
-{ "oily ",                           100, 131, 132, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-\r
-{ "\92\83\90F\82Ì\96Ñ\94ç\82Æ",                    33, 132, 133, 50 },\r
-{ "\8aD\90F\82Ì\96Ñ\94ç\82Æ",                    66, 132, 133, 50 },\r
-{ "\94\92\82¢\96Ñ\94ç\82Æ",                     100, 132, 133, 50 },\r
-#else\r
-{ "brown fur, ",                    33, 132, 133, 50 },\r
-{ "gray fur, ",                    66, 132, 133, 50 },\r
-{ "albino fur, ",                  100, 132, 133, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\8eR\97r\82Ì\92û\82ª\82 \82è\82Ü\82·\81B",      50, 133, 0, 50 },\r
-{ "\90l\8aÔ\82Ì\91«\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B",  75, 133, 0, 50 },\r
-{ "\92¹\82Ì\91«\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B",    85, 133, 0, 50 },\r
-{ "à¦\92\8e\97Þ\82Ì\91«\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B",90, 133, 0, 50 },\r
-{ "\8b\8d\82Ì\91«\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B",    95, 133, 0, 50 },\r
-{ "\94L\82Ì\91«\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B",    97, 133, 0, 50 },\r
-{ "\8c¢\82Ì\91«\82ª\90\82¦\82Ä\82¢\82Ü\82·\81B",   100, 133, 0, 50 },\r
-\r
-{ "\82 \82È\82½\82Í", 100, 134, 120, 50 },\r
-#else\r
-{ "and the hooves of a goat.",      50, 133, 0, 50 },\r
-{ "and human feet.",        75, 133, 0, 50 },\r
-{ "and bird's feet.",       85, 133, 0, 50 },\r
-{ "and reptilian feet.",    90, 133, 0, 50 },\r
-{ "and bovine feet.",       95, 133, 0, 50 },\r
-{ "and feline feet.",       97, 133, 0, 50 },\r
-{ "and canine feet.",       100, 133, 0, 50 },\r
-\r
-{ "You have ", 100, 134, 120, 50 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\8ds\95û\95s\96¾\82Ì\8eq\82Å\82·\81B", 25, 138, 139, 40 },\r
-{ "\82³\82Ü\82æ\82¤\8eq\82Å\82·\81B", 50, 138, 139, 50 },\r
-{ "\97B\88ê\82Ì\8eq\82Å\82·\81B", 75, 138, 139, 60 },\r
-{ "\88¤\82³\82ê\82Ä\82¢\82é\8eq\82Å\82·\81B", 100, 138, 139, 70 },\r
-#else\r
-{ "You are the lost offspring of ", 25, 137, 138, 40 },\r
-{ "You are the wandering offspring of ", 50, 137, 138, 50 },\r
-{ "You are the only offspring of ", 75, 137, 138, 60 },\r
-{ "You are the beloved offspring of ", 100, 137, 138, 70 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\96¼\82à\92m\82ê\82Ê\83G\83\93\83g\82Ì", 10, 137, 138, 35 },\r
-{ "\82 \82È\82½\82Í\8cÇ\93Æ\82È\83G\83\93\83g\82Ì", 35, 137, 138, 50 },\r
-{ "\82 \82È\82½\82Í\83G\83\93\83g\82Ì\88ê\92c\82Ì\88ê\88õ\82Ì", 55, 137, 138, 60 },\r
-{ "\82 \82È\82½\82Í\94É\89h\82µ\82Ä\82¢\82é\83G\83\93\83g\82Ì\8eÐ\89ï\82Ì\83\8a\81[\83_\81[\82Ì", 70, 137, 138, 70 },\r
-{ "\82 \82È\82½\82Í\83G\83\93\83g\82Ì\90X\82Ì\92·\82Ì", 81, 137, 138, 80 },\r
-{ "\82 \82È\82½\82Í\91¸\8ch\82³\82ê\82Ä\82¢\82é\83G\83\93\83g\82Ì\8c«\8eÒ\82Ì", 91, 137, 138, 90 },\r
-{ "\82 \82È\82½\82Í\8d¡\82Å\82Í\92Ç\89¯\82Ì\92\86\82É\82µ\82©\82¢\82È\82¢\83G\83\93\83g\8f\97\82Ì", 96, 137, 138, 100 },\r
-{ "\82 \82È\82½\82Í\83t\83@\83\93\83S\83\8b\83\93\82»\82Ì\90l\82Ì", 100, 137, 138, 110 },\r
-#else\r
-{ "an Ent whose name you have no recollection of.  ", 10, 138, 139, 35 },\r
-{ "a solitary Ent.  ", 35, 138, 139, 50 },\r
-{ "a member of a farflung Entish band.  ", 55, 138, 139, 60 },\r
-{ "a leader of a prosperous community of Ents.  ", 70, 138, 139, 70 },\r
-{ "an Entish Forestwarden.  ", 81, 138, 139, 80 },\r
-{ "a respected Entish sage.  ", 91, 138, 139, 90 },\r
-{ "an Entwife whose memory men cherish.  ", 96, 138, 139, 100 },\r
-{ "Fangorn himself.  ", 100, 138, 139, 110 },\r
-#endif\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í", 100, 139, 140, 50 },\r
-#else\r
-{ "You have ", 100, 139, 140, 50 },\r
-#endif\r
-\r
-#ifdef JP\r
-{ "\8eO\96{\82Ì\8ew\82ð\8e\9d\82¿\81A", 5, 140, 141, 50 },\r
-{ "\8el\96{\82Ì\8ew\82ð\8e\9d\82¿\81A", 20, 140, 141, 50 },\r
-{ "\8cÜ\96{\82Ì\8ew\82ð\8e\9d\82¿\81A", 40, 140, 141, 50 },\r
-{ "\98Z\96{\82Ì\8ew\82ð\8e\9d\82¿\81A", 60, 140, 141, 50 },\r
-{ "\8eµ\96{\82Ì\8ew\82ð\8e\9d\82¿\81A", 80, 140, 141, 50 },\r
-{ "\94ª\96{\82Ì\8ew\82ð\8e\9d\82¿\81A", 95, 140, 141, 50 },\r
-{ "\8bã\96{\82Ì\8ew\82ð\8e\9d\82¿\81A", 100, 140, 141, 50 },\r
-#else\r
-{ "three fingers and toes, and are covered in ", 5, 140, 141, 50 },\r
-{ "four fingers and toes, and are covered in ", 20, 140, 141, 50 },\r
-{ "five fingers and toes, and are covered in ", 40, 140, 141, 50 },\r
-{ "six fingers and toes, and are covered in ", 60, 140, 141, 50 },\r
-{ "seven fingers and toes, and are covered in ", 80, 140, 141, 50 },\r
-{ "eight fingers and toes, and are covered in ", 95, 140, 141, 50 },\r
-{ "nine fingers and toes, and are covered in ", 100, 140, 141, 50 },\r
-#endif\r
-#ifdef JP\r
-{ "\92\83\90F\82¢\97Ø\8fó\82Ì\94§\82É\95¢\82í\82ê\82Ä\82¢\82Ü\82·\81B", 10, 141, 0, 50 },\r
-{ "\92\83\90F\82Ì\8dr\82¢\94§\82É\95¢\82í\82ê\82Ä\82¢\82Ü\82·\81B", 20, 141, 0, 50 },\r
-{ "\8aD\90F\82Ì\82È\82ß\82ç\82©\82È\94§\82É\95¢\82í\82ê\82Ä\82¢\82Ü\82·\81B", 30, 141, 0, 50 },\r
-{ "\90[\82¢\83O\83\8a\81[\83\93\82Ì\94§\82É\95¢\82í\82ê\82Ä\82¢\82Ü\82·\81B", 40, 141, 0, 50 },\r
-{ "\91Û\82Å\95¢\82í\82ê\82½\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 50, 141, 0, 50 },\r
-{ "\90[\82¢\83u\83\89\83E\83\93\82Ì\94§\82É\95¢\82í\82ê\82Ä\82¢\82Ü\82·\81B", 60, 141, 0, 50 },\r
-{ "\83p\81[\83\8b\83u\83\89\83E\83\93\82Ì\83p\83T\83p\83T\82Ì\94§\82É\95¢\82í\82ê\82Ä\82¢\82Ü\82·\81B", 70, 141, 0, 50 },\r
-{ "\83`\83\87\83R\83\8c\81[\83g\90F\82Ì\96L\82©\82È\94§\82É\95¢\82í\82ê\82Ä\82¢\82Ü\82·\81B", 80, 141, 0, 50 },\r
-{ "\8d\95\82¢\8bØ\8fó\82Ì\94§\82É\95¢\82í\82ê\82Ä\82¢\82Ü\82·\81B", 90, 141, 0, 50 },\r
-{ "\82Ù\82Æ\82ñ\82Ç\82Ð\82©\82ç\82Ñ\82½\81A\8cú\82¢\94§\82É\95¢\82í\82ê\82Ä\82¢\82Ü\82·\81B", 100, 141, 0, 50 },\r
-#else\r
-{ "scaly brown skin.", 10, 141, 0, 50 },\r
-{ "rough brown skin.", 20, 141, 0, 50 },\r
-{ "smooth grey skin.", 30, 141, 0, 50 },\r
-{ "dark green skin.", 40, 141, 0, 50 },\r
-{ "mossy skin.", 50, 141, 0, 50 },\r
-{ "deep brown skin.", 60, 141, 0, 50 },\r
-{ "pale brown, flaky skin.", 70, 141, 0, 50 },\r
-{ "rich chocolate-colored skin.", 80, 141, 0, 50 },\r
-{ "ridged black skin.", 90, 141, 0, 50 },\r
-{ "thick, almost corky skin.", 100, 141, 0, 50 },\r
-#endif\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\93V\8aE\82Ì\8eå\90l\82Å\82·\81B", 100, 142, 143, 80 },\r
-{ "\82 \82È\82½\82Í\88«\82ð\96Å\82Ú\82·\82½\82ß\82É\82±\82Ì\92n\82É\91\97\82ç\82ê\82Ä\82«\82Ü\82µ\82½\81B", 100, 143, 144, 80 },\r
-{ "\82±\82Ì\96Ú\93I\82ð\90¬\82µ\90\8b\82°\82é\82Ü\82Å\82Í\8bx\82Þ\82±\82Æ\82Í\8b\96\82³\82ê\82Ü\82¹\82ñ\81B", 100, 144, 0, 80 },\r
-#else\r
-{ "You are of the blessed host of heaven.  ", 100, 142, 143, 80 },\r
-{ "You have been sent to earth to eradicate the wicked, ", 100, 143, 144, 80 },\r
-{ "and shall not rest until you have succeeded.", 100, 144, 0, 80 },\r
-#endif\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\92n\8d\96\82Ì\8eô\82í\82ê\82½\8eq\82Å\82·\81B", 100, 145, 146, 20 },\r
-{ "\82 \82È\82½\82Í\83O\83\8c\81[\83^\81[\81E\83f\81[\83\82\83\93\82Ì\8bC\82Ü\82®\82ê\82É\82æ\82Á\82Ä\90\82Ü\82ê\82Ü\82µ\82½\81B", 100, 146, 147, 20 },\r
-{ "\82 \82È\82½\82Í\95\9c\8fQ\82Ì\8b@\89ï\82ð\82¤\82©\82ª\82Á\82Ä\82¢\82Ü\82·\81B", 100, 147, 0, 20 },\r
-#else\r
-{ "You are of the cursed spawn of hell. ", 100, 145, 146, 20 },\r
-{ "You have been cast out by the whim of the greater demons, ", 100, 146, 147, 20 },\r
-{ "and now seek revenge.", 100, 147, 0, 20 },\r
-#endif\r
-\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\91f\90«\82Ì\92m\82ê\82È\82¢",  5, 148, 149, 25 },\r
-{ "\82 \82È\82½\82Í\95ß\97¸\82Ì", 20, 148, 149, 35 },\r
-{ "\82 \82È\82½\82Í\90í\8em\82Ì", 40, 148, 149, 45 },\r
-{ "\82 \82È\82½\82Í\83\8c\83\93\83W\83\83\81[\82Ì", 50, 148, 149, 50 },\r
-{ "\82 \82È\82½\82Í\8f\91\8bL\82Ì", 70, 148, 149, 65 },\r
-{ "\82 \82È\82½\82Í\96\82\8f\97\82Ì", 83, 148, 149, 75 },\r
-{ "\82 \82È\82½\82Í\98B\8bà\8fp\8et\82Ì", 93, 148, 149, 90 },\r
-{ "\82 \82È\82½\82Í\8bM\91°\82Ì\8f\97\90«\82Ì", 98, 148, 149, 110 },\r
-{ "\82 \82È\82½\82Í\8f\97\89¤\82Ì", 100, 148, 149, 140 },\r
-#else\r
-{ "whose identity you are uncertain of.",  5, 149, 8, 25 },\r
-{ "Captive.  ", 20, 149, 150, 35 },\r
-{ "Fighter.  ", 40, 149, 150, 45 },\r
-{ "Ranger.  ", 50, 149, 150, 50 },\r
-{ "Scribe.  ", 70, 149, 150, 65 },\r
-{ "Witch.  ", 83, 149, 150, 75 },\r
-{ "Alchemist.  ", 93, 149, 150, 90 },\r
-{ "Lady.  ", 98, 149, 150, 110 },\r
-{ "Queen.  ", 100, 149, 150, 140 },\r
-#endif\r
-#ifdef JP\r
-{ "\89e\83t\83F\83A\83\8a\81[\82Ì\8e\84\90\8e\99\82Å\82·\81B", 10, 149, 150, 35 },\r
-{ "\89e\83t\83F\83A\83\8a\81[\82Ì\8aô\90l\82©\82Ì\8eq\8b\9f\82Ì\82¤\82¿\82Ì\88ê\90l\82Å\82·\81B", 30, 149, 150, 45 },\r
-{ "\89e\83t\83F\83A\83\8a\81[\82Ì\91æ\93ñ\8eq\82Å\82·\81B", 55, 149, 150, 50 },\r
-{ "\89e\83t\83F\83A\83\8a\81[\82Ì\92·\8eq\82Å\82·\81B", 80, 149, 150, 55 },\r
-{ "\89e\83t\83F\83A\83\8a\81[\82Ì\88ê\97±\8eí\82Å\82·\81B", 100, 149, 150, 60 },\r
-#else\r
-{ "You are the bastard child of a Shadow-Fairy ", 10, 148, 149, 35 },\r
-{ "You are one of several children of a Shadow-Fairy ", 30, 148, 149, 45 },\r
-{ "You are the second child of a Shadow-Fairy ", 55, 148, 149, 50 },\r
-{ "You are the first child of a Shadow-Fairy ", 80, 148, 149, 55 },\r
-{ "You are the only child of a Shadow-Fairy ", 100, 148, 149, 60 },\r
-#endif\r
-\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\8d\95\82¢\93µ\82Æ", 10, 150, 151, 50 },\r
-{ "\82 \82È\82½\82Í\90[\82¢\83u\83\89\83E\83\93\82Ì\93µ\82Æ", 25, 50, 151, 50 },\r
-{ "\82 \82È\82½\82Í\83u\83\89\83E\83\93\82Ì\93µ\82Æ", 60, 150, 151, 50 },\r
-{ "\82 \82È\82½\82Í\92W\82¢\90F\82Ì\93µ\82Æ", 70, 150, 151, 50 },\r
-{ "\82 \82È\82½\82Í\83O\83\8a\81[\83\93\82Ì\93µ\82Æ", 80, 150, 151, 50 },\r
-{ "\82 \82È\82½\82Í\90Â\82¢\93µ\82Æ", 90, 150, 151, 50 },\r
-{ "\82 \82È\82½\82Í\83u\83\8b\81[\83O\83\8c\83C\82Ì\93µ\82Æ", 100, 150, 151, 50 },\r
-#else\r
-{ "You have black eyes, straight ", 10, 150, 151, 50 },\r
-{ "You have dark brown eyes, straight ", 25, 50, 151, 50 },\r
-{ "You have brown eyes, straight ", 60, 150, 151, 50 },\r
-{ "You have hazel eyes, straight ", 70, 150, 151, 50 },\r
-{ "You have green eyes, straight ", 80, 150, 151, 50 },\r
-{ "You have blue eyes, straight ", 90, 150, 151, 50 },\r
-{ "You have blue-gray eyes, straight ", 100, 150, 151, 50 },\r
-#endif\r
-\r
-#ifdef JP\r
-{ "\83O\83\8c\81[\82Ì\94¯\82ð\8e\9d\82¿\81A", 30, 152, 153, 50 },\r
-{ "\8f\83\94\92\82Ì\94¯\82ð\8e\9d\82¿\81A", 70, 152, 153, 50 },\r
-{ "\83p\81[\83\8b\83C\83G\83\8d\81[\82Ì\94¯\82ð\8e\9d\82¿\81A", 80, 152, 153, 50 },\r
-{ "\94\92\82ª\82©\82Á\82½\8aD\90F\82Ì\94¯\82ð\8e\9d\82¿\81A", 90, 152, 153, 50 },\r
-{ "\83p\81[\83\8b\83u\83\89\83E\83\93\82Ì\94¯\82ð\8e\9d\82¿\81A", 100, 152, 153, 50 },\r
-#else\r
-{ "grey hair ", 30, 151, 152, 50 },\r
-{ "pure white hair ", 70, 151, 152, 50 },\r
-{ "pale yellow hair ", 80, 151, 152, 50 },\r
-{ "grey-white hair ", 90, 151, 152, 50 },\r
-{ "pale brown hair ", 100, 151, 152, 50 },\r
-#endif\r
-\r
-#ifdef JP\r
-{ "\82í\82¸\82©\82É\8c¨\82É\82©\82©\82é\82­\82ç\82¢\82Ì\82È\82ß\82ç\82©\82È", 30, 151, 152, 50 },\r
-{ "\98r\82Ü\82Å\93Í\82­\82­\82ç\82¢\82Ì\82È\82ß\82ç\82©\82È", 60, 151, 152, 55 },\r
-{ "\8d\98\82Ü\82Å\82 \82é\82È\82ß\82ç\82©\82È", 90, 151, 152, 60 },\r
-{ "\93ª\82©\82ç\91«\82Ü\82Å\8bP\82­\91ê\82Ì\82æ\82¤\82É\82È\82ß\82ç\82©\82È", 100, 151, 152, 75 },\r
-#else\r
-{ "that barely covers your shoulders, ", 30, 152, 153, 50 },\r
-{ "that reaches to your arms, ", 60, 152, 153, 55 },\r
-{ "that flows down to your waist, ", 90, 152, 153, 60 },\r
-{ "that forms a shining waterfall from head to foot, ", 100, 152, 153, 75 },\r
-#endif\r
-\r
-#ifdef JP\r
-{ "\93§\82«\92Ê\82é\82æ\82¤\82È\94\92\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 20, 153, 0, 50 },\r
-{ "\83~\83\8b\83N\90F\82Ì\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 35, 153, 0, 50 },\r
-{ "\90^\8eì\90F\82Ì\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 50, 153, 0, 50 },\r
-{ "\90Â\94\92\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 85, 153, 0, 50 },\r
-{ "\94\92\82¢\94§\82ð\82µ\82Ä\82¢\82Ü\82·\81B", 100, 153, 0, 50 },\r
-#else\r
-{ "and an extremely fair complexion.", 20, 153, 0, 50 },\r
-{ "and a milky complexion.", 35, 153, 0, 50 },\r
-{ "and a pearly complexion.", 50, 153, 0, 50 },\r
-{ "and a pale complexion.", 85, 153, 0, 50 },\r
-{ "and an utterly white complexion.", 100, 153, 0, 50 },\r
-#endif\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\95\81\92i\83U\83N\83U\83N\83f\83U\81[\83g\82Å\97V\82ñ\82Å\82¢\82é\81A", 4, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83O\83\89\83O\83\89\83^\83\8f\81[\82Å\97V\82ñ\82Å\82¢\82é\81A", 8, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83z\83w\83z\83w\8b¬\92J\82Å\97V\82ñ\82Å\82¢\82é\81A", 12, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83h\83v\83h\83v\92r\82Å\97V\82ñ\82Å\82¢\82é\81A", 16, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83e\83N\8eG\8bZ\8fê\82Å\97V\82ñ\82Å\82¢\82é\81A", 20, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83t\83\80\83t\83\80\94¨\82Å\97V\82ñ\82Å\82¢\82é\81A", 24, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83N\83m\83N\83m\91ê\82Å\97V\82ñ\82Å\82¢\82é\81A", 28, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83N\83\8a\83N\83\8a\90ì\82Å\97V\82ñ\82Å\82¢\82é\81A", 32, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83\8a\83e\83\8a\83L\83\83\83\93\83v\8fê\82Å\97V\82ñ\82Å\82¢\82é\81A", 36, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83N\83^\81[\91\9c\91O\82Å\97V\82ñ\82Å\82¢\82é\81A", 40, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83m\93\92\82Å\97V\82ñ\82Å\82¢\82é\81A", 44, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83m\83A\83C\83\89\83\93\83h\82Å\97V\82ñ\82Å\82¢\82é\81A", 48, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83m\83}\83\8a\83\93\82Å\97V\82ñ\82Å\82¢\82é\81A", 52, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83m\83h\81[\83\80\82Å\97V\82ñ\82Å\82¢\82é\81A", 56, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83m\83z\81[\83\8b\82Å\97V\82ñ\82Å\82¢\82é\81A", 60, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83m\8d\82\8c´\82Å\97V\82ñ\82Å\82¢\82é\81A", 64, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83m\8es\96¯\89ï\8aÙ\82Å\97V\82ñ\82Å\82¢\82é\81A", 68, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83m\8cö\89\80\82Å\97V\82ñ\82Å\82¢\82é\81A", 72, 154, 159, 50 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83X\83C\83X\83C\83A\83\8b\83v\83X\82Å\97V\82ñ\82Å\82¢\82é\81A", 76, 154, 159, 65 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83q\83\\83q\83\\90X\82Å\97V\82ñ\82Å\82¢\82é\81A", 80, 154, 159, 65 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83m\90\91Ô\8c¤\8b\86\8f\8a\82Å\97V\82ñ\82Å\82¢\82é\81A", 84, 154, 159, 65 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83m\83\8d\83P\83b\83g\94­\8eË\91ä\82Å\97V\82ñ\82Å\82¢\82é\81A", 88, 154, 159, 65 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83`\83\83\83C\83i\83E\83H\81[\83\8b\82Å\97V\82ñ\82Å\82¢\82é\81A", 92, 154, 159, 65 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83X\83y\81[\83X\83E\83H\81[\83\8b\82Å\97V\82ñ\82Å\82¢\82é\81A", 96, 154, 159, 70 },\r
-{ "\82 \82È\82½\82Í\95\81\92i\83e\83N\83m\83\8a\83]\81[\83g\83z\83e\83\8b\82Å\97V\82ñ\82Å\82¢\82é\81A", 100, 154, 159, 75 },\r
-\r
-{ "\95\81\92Ê\82Ì\83N\83^\81[\82Å\82·\81B", 70, 159, 160, 50 },\r
-{ "\82Ý\82ñ\82È\82ª\97\8a\82è\82É\82µ\82Ä\82¢\82é\90e\83N\83^\81[\82Å\82·\81B", 85, 159, 160, 65 },\r
-{ "\8dù\82ª\91å\8dD\95¨\82È\83p\83\93\83_\83N\83^\81[\82Å\82·\81B", 92, 159, 161, 75 },\r
-{ "\82Æ\82Ä\82à\92¿\82µ\82¢\83g\83\89\83N\83^\81[\82Å\82·\81B", 96, 159, 162, 80 },\r
-{ "\82Æ\82Ä\82à\92¿\82µ\82¢\83s\83J\83N\83^\81[\82Å\82·\81B", 100, 159, 163, 90 },\r
-\r
-{ "\82 \82È\82½\82Í\90Ô\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 6, 160, 164, 50 },\r
-{ "\82 \82È\82½\82Í\83N\83\8a\81[\83\80\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 12, 160, 164, 50 },\r
-{ "\82 \82È\82½\82Í\89©\93y\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 18, 160, 164, 50 },\r
-{ "\82 \82È\82½\82Í\89©\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 24, 160, 164, 50 },\r
-{ "\82 \82È\82½\82Í\89©\97Î\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 30, 160, 164, 50 },\r
-{ "\82 \82È\82½\82Í\96\95\92\83\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 36, 160, 164, 50 },\r
-{ "\82 \82È\82½\82Í\94Z\82¢\97Î\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 42, 160, 164, 50 },\r
-{ "\82 \82È\82½\82Í\90Â\97Î\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 48, 160, 164, 50 },\r
-{ "\82 \82È\82½\82Í\90\85\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 54, 160, 164, 50 },\r
-{ "\82 \82È\82½\82Í\94\96\82¢\8e\87\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 60, 160, 164, 50 },\r
-{ "\82 \82È\82½\82Í\8e\87\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 65, 160, 164, 50 },\r
-{ "\82 \82È\82½\82Í\88©\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 70, 160, 164, 60 },\r
-{ "\82 \82È\82½\82Í\83s\83\93\83N\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 75, 160, 164, 60 },\r
-{ "\82 \82È\82½\82Í\94\92\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 80, 160, 164, 60 },\r
-{ "\82 \82È\82½\82Í\90Â\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 85, 160, 164, 65 },\r
-{ "\82 \82È\82½\82Í\8d\95\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 90, 160, 164, 65 },\r
-{ "\82 \82È\82½\82Í\97Î\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 95, 160, 164, 65 },\r
-{ "\82 \82È\82½\82Í\9eò\90F\82Ì\96Ñ\82ð\82à\82¿\81A", 100, 160, 164, 70 },\r
-{ "\82 \82È\82½\82Í\83p\83\93\83_\82Ì\82æ\82¤\82È\94\92\82Æ\8d\95\82Ì\94Á\96Í\97l\82Ì\96Ñ\82ð\82à\82¿\81A", 100, 161, 164, 70 },\r
-{ "\82 \82È\82½\82Í\83g\83\89\82Ì\82æ\82¤\82È\89©\82Æ\8d\95\82Ì\8eÈ\96Í\97l\82Ì\96Ñ\82ð\82à\82¿\81A", 100, 162, 164, 70 },\r
-{ "\82 \82È\82½\82Í\96¾\82é\82­\8bP\82¢\82Ä\82¢\82Ä\81A", 100, 163, 164, 70 },\r
-\r
-{ "\83}\83t\83\89\81[\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 4, 164, 0, 50 },\r
-{ "\83\89\83C\83^\81[\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 8, 164, 0, 50 },\r
-{ "\83\8a\83\82\83R\83\93\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 12, 164, 0, 50 },\r
-{ "\8eè\82Ê\82®\82¢\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 16, 164, 0, 50 },\r
-{ "\8b\8d\93û\83r\83\93\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 20, 164, 0, 50 },\r
-{ "\83r\83\93\82Ì\82Ó\82½\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 24, 164, 0, 50 },\r
-{ "\96ì\8b\85\96X\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 28, 164, 0, 50 },\r
-{ "\95\82\82«\97Ö\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 32, 164, 0, 50 },\r
-{ "\83o\83b\83g\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 36, 164, 0, 50 },\r
-{ "\91å\8dª\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 40, 164, 0, 50 },\r
-{ "\83\8a\83\85\83b\83N\83T\83b\83N\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 44, 164, 0, 50 },\r
-{ "\8f«\8aû\94Õ\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 48, 164, 0, 50 },\r
-{ "\8f«\8aû\82Ì\8bî\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 52, 164, 0, 50 },\r
-{ "\8eP\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 56, 164, 0, 50 },\r
-{ "\82â\82©\82ñ\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 60, 164, 0, 50 },\r
-{ "\82Ù\82¤\82«\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 64, 164, 0, 50 },\r
-{ "\83e\83B\83b\83V\83\85\94 \82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 68, 164, 0, 50 },\r
-{ "\83_\83\8b\83}\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 71, 164, 0, 50 },\r
-{ "\83j\83\93\83W\83\93\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 75, 164, 0, 60 },\r
-{ "\83z\83\8b\83\93\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 79, 164, 0, 60 },\r
-{ "\82Ý\82©\82ñ\94 \82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 83, 164, 0, 60 },\r
-{ "\95ó\94 \82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 86, 164, 0, 60 },\r
-{ "\83e\83\93\83K\83\8d\83\93\83n\83b\83g\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 90, 164, 0, 60 },\r
-{ "\83A\83t\83\8d\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 94, 164, 0, 65 },\r
-{ "\82µ\82á\82¯\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 97, 164, 0, 65 },\r
-{ "39\83{\83E\83\84\82ð\95ó\95¨\82É\82µ\82Ä\82¢\82Ü\82·\81B", 100, 164, 0, 70 },\r
-\r
-#else\r
-{ "You are a normal Kutar.  You have orange colored fur.", 65, 154, 0, 55 },\r
-{ "You are a father Kutar, the patriarch of many normal Kutars.  You have green colored fur.", 95, 154, 0, 65 },\r
-{ "You are a very rare type of Kutar, famed for the yellow and black stripes on your body.", 100, 154, 0, 80 },\r
-#endif\r
-\r
-#ifdef JP\r
-{ "\82 \82È\82½\82Í\82 \82é\83v\83\8d\83W\83F\83N\83g\82Ì\8e\8e\8dì\95i\82Æ\82µ\82Ä", 10, 155, 156, 50 },\r
-{ "\82 \82È\82½\82Í\8eq\8b\9f\82ð\8b³\88ç\82·\82é\82½\82ß\82É", 30, 155, 156, 60 },\r
-{ "\82 \82È\82½\82Í\90g\82Ì\89ñ\82è\82Ì\90¢\98b\82ð\82·\82é\82½\82ß\82É", 50, 155, 156, 70 },\r
-{ "\82 \82È\82½\82Í\96S\82­\82È\82Á\82½\8eq\8b\9f\82Ì\90g\91ã\82í\82è\82Æ\82µ\82Ä", 60, 155, 156, 10 },\r
-{ "\82 \82È\82½\82Í\90í\93¬\97p\83A\83\93\83h\83\8d\83C\83h\82Æ\82µ\82Ä", 90, 155, 156, 20 },\r
-{ "\82 \82È\82½\82Í\90¢\8aE\90ª\95\9e\82Ì\82½\82ß\82Ì\93¹\8bï\82Æ\82µ\82Ä", 100, 155, 156, 10 },\r
-\r
-{ "\8bC\82Ì\8b\82Á\82½\89È\8aw\8eÒ\82É\82æ\82Á\82Ä\8dì\82ç\82ê\82Ü\82µ\82½\81B", 20, 156, 157, 10 },\r
-{ "\8aé\8bÆ\82Ì\8c¤\8b\86\8f\8a\82Å\8dì\82ç\82ê\82Ü\82µ\82½\81B", 50, 156, 157, 80 },\r
-{ "\95½\98a\82ð\8aè\82¤\89È\8aw\8eÒ\82É\82æ\82Á\82Ä\8dì\82ç\82ê\82Ü\82µ\82½\81B", 85, 156, 157, 50 },\r
-{ "\88ê\90l\82Ì\93V\8dË\8f­\94N\82É\82æ\82Á\82Ä\8dì\82ç\82ê\82Ü\82µ\82½\81B", 90, 156, 157, 30 },\r
-{ "22\90¢\8bI\82©\82ç\82â\82Á\82Ä\97\88\82Ü\82µ\82½\81B", 100, 156, 157, 100 },\r
-\r
-{ "\83l\83R\82Ì\82æ\82¤\82È\8c`\82ð\82µ\82Ä", 15, 157, 158, 40 },\r
-{ "\83C\83k\82Ì\82æ\82¤\82È\8c`\82ð\82µ\82Ä", 30, 157, 158, 30 },\r
-{ "\83N\83^\81[\82Ì\82æ\82¤\82È\8c`\82ð\82µ\82Ä", 45, 157, 158, 20 },\r
-{ "\90l\8aÔ\82Ì\82æ\82¤\82È\8c`\82ð\82µ\82Ä", 70, 157, 158, 60 },\r
-{ "\83h\83\8f\81[\83t\82Ì\82æ\82¤\82È\8c`\82ð\82µ\82Ä", 80, 157, 158, 70 },\r
-{ "\83z\83r\83b\83g\82Ì\82æ\82¤\82È\8c`\82ð\82µ\82Ä", 90, 157, 158, 70 },\r
-{ "\83G\83\8b\83t\82Ì\82æ\82¤\82È\8c`\82ð\82µ\82Ä", 100, 157, 158,  80 },\r
-\r
-{ "\82¢\82Ü\82·\82ª\81A\8e¨\82Í\83l\83Y\83~\82É\82©\82\82ç\82ê\82Ä\82È\82­\82È\82Á\82Ä\82¢\82Ü\82·\81B", 5, 158, 0, 20 },\r
-{ "\82¢\82é\82Æ\8dì\8eÒ\82Í\8eå\92£\82µ\82Ä\82¢\82Ü\82·\82ª\81A\82Æ\82Ä\82à\82»\82¤\82Í\8c©\82¦\82Ü\82¹\82ñ\81B", 20, 158, 0, 30 },\r
-{ "\82¢\82Ü\82·\81B", 85, 158, 0, 50 },\r
-{ "\82¢\82Ä\81A\96{\90l\82Í\8e©\95ª\82Ì\82±\82Æ\82ð\96{\95¨\82¾\82Æ\90M\82\82Ä\82¢\82Ü\82·\81B", 95, 158, 0, 50 },\r
-{ "\82¢\82Ä\81A\94ñ\8fí\82É\82æ\82­\82Å\82«\82Ä\82¢\82é\82Ì\82Å\96{\95¨\82Æ\8c©\95ª\82¯\82ª\82Â\82«\82Ü\82¹\82ñ\81B", 100, 158, 0, 100 },\r
-#else\r
-{ "You were created by a mad scientist ", 20, 155, 156, 10 },\r
-{ "You were created in a corporate laboratory ", 50, 155, 156, 80 },\r
-{ "You were created by a peace-loving scientist ", 85, 155, 156, 50 },\r
-{ "You were created by a boy genius ", 90, 155, 156, 30 },\r
-{ "You have come from the twenty-second century ", 100, 155, 156, 100 },\r
-\r
-{ "as a project prototype. ", 10, 156, 157, 50 },\r
-{ "to educate children. ", 30, 156, 157, 60 },\r
-{ "to look after someone. ", 50, 156, 157, 70 },\r
-{ "as a substitute for a dead child. ", 60, 156, 157, 10 },\r
-{ "as a combat trooper. ", 90, 156, 157, 20 },\r
-{ "as a tool for conquest of the world. ", 100, 156, 157, 10 },\r
-\r
-\r
-{ "You have a cat-like appearance", 15, 157, 158, 40 },\r
-{ "You have a dog-like appearance", 30, 157, 158, 30 },\r
-{ "You have a Kutar-like appearance", 45, 157, 158, 20 },\r
-{ "You have a human-like appearance", 70, 157, 158, 60 },\r
-{ "You have a dwarf-like appearance", 80, 157, 158, 70 },\r
-{ "You have a hobbit-like appearance", 90, 157, 158, 70 },\r
-{ "You have a elf-like appearance", 100, 157, 158,  80 },\r
-\r
-{ ", but your ears have been eaten by mice, and no trace of them remains.", 5, 158, 0, 20 },\r
-{ "... at least your creator thinks so.  Most people disagree.", 20, 158, 0, 30 },\r
-{ ".", 85, 158, 0, 50 },\r
-{ ", and you firmly believe that you are a real one.", 95, 158, 0, 50 },\r
-{ ", and you are almost indistinguishable from a real one.", 100, 158, 0, 100 },\r
-#endif\r
-};\r
+#include "angband.h"
+#include "history.h"
+
+
+/*!
+* 生い立ちテーブルの定義 / Background information (see below)\n
+*\n
+* Chart progression by race:\n
+*   Human         -->  1 -->  2 -->  3 --> 50 --> 51 --> 52 --> 53\n
+*   Half-Elf      -->  4 -->  1 -->  2 -->  3 --> 50 --> 51 --> 52 --> 53\n
+*   Elf/High-Elf  -->  7 -->  8 -->  9 --> 54 --> 55 --> 56\n
+*   Hobbit        --> 10 --> 11 -->  3 --> 50 --> 51 --> 52 --> 53\n
+*   Gnome         --> 13 --> 14 -->  3 --> 50 --> 51 --> 52 --> 53\n
+*   Dwarf         --> 16 --> 17 --> 18 --> 57 --> 58 --> 59 --> 60 --> 61\n
+*   Half-Orc      --> 19 --> 20 -->  2 -->  3 --> 50 --> 51 --> 52 --> 53\n
+*   Half-Troll    --> 22 --> 23 --> 62 --> 63 --> 64 --> 65 --> 66\n
+*\n
+* XXX XXX XXX This table *must* be correct or drastic errors may occur!\n
+*/
+hist_type bg[] =
+{
+#ifdef JP
+{ "妾腹の子で認知すらされていません。",                        10, 2, 3, 25 },
+{ "妾腹の子ですが認知はされています。",                        20, 2, 3, 35 },
+{ "幾人かの子供のうちの一人です。",                      95, 2, 3, 45 },
+{ "長子です。",                                           100, 2, 3, 50 },
+#else
+{ "You are the illegitimate and unacknowledged child ",   10, 1, 2, 25 },
+{ "You are the illegitimate but acknowledged child ",     20, 1, 2, 35 },
+{ "You are one of several children ",                     95, 1, 2, 45 },
+{ "You are the first child ",                            100, 1, 2, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたは農奴の",                                      40, 1, 2, 65 },
+{ "あなたは自作農の",                                   65, 1, 2, 80 },
+{ "あなたは町人の",                                      80, 1, 2, 90 },
+{ "あなたは職人の",                                      90, 1, 2,105 },
+{ "あなたは土着の騎士の",                             96, 1, 2,120 },
+{ "あなたは混沌の宮廷の爵位ある貴族の",                                99, 1, 2,130 },
+{ "あなたはアンバーの王家の血を引く者の",                            100, 1, 2,140 },
+#else
+{ "of a Serf.  ",                                         40, 2, 3, 65 },
+{ "of a Yeoman.  ",                                       65, 2, 3, 80 },
+{ "of a Townsman.  ",                                     80, 2, 3, 90 },
+{ "of a Guildsman.  ",                                    90, 2, 3, 105 },
+{ "of a Landed Knight.  ",                                96, 2, 3, 120 },
+{ "of a Noble Family in the Courts of Chaos.  ",          99, 2, 3, 130 },
+{ "of the Royal Blood Line of Amber.  ",                 100, 2, 3, 140 },
+#endif
+
+
+#ifdef JP
+{ "あなたは一家のお荷物です。",                            20, 3,50, 20 },
+{ "あなたは一家の誇りです。",                               80, 3,50, 55 },
+{ "あなたは家族に大切にされています。",                       100, 3,50, 60 },
+#else
+{ "You are the black sheep of the family.  ",             20, 3, 50, 20 },
+{ "You are a credit to the family.  ",                    80, 3, 50, 55 },
+{ "You are a well liked child.  ",                       100, 3, 50, 60 },
+#endif
+
+
+#ifdef JP
+{ "あなたの母はテレリ族のエルフでした。",             40, 4, 1, 50 },
+{ "あなたの父はテレリ族のエルフでした。",             75, 4, 1, 55 },
+{ "あなたの母はノルドール族のエルフでした。",               90, 4, 1, 55 },
+{ "あなたの父はノルドール族のエルフでした。",               95, 4, 1, 60 },
+{ "あなたの母はヴァンヤール族のエルフでした。",            98, 4, 1, 65 },
+{ "あなたの父はヴァンヤール族のエルフでした。",                           100, 4, 1, 70 },
+#else
+{ "Your mother was of the Teleri.  ",                   40, 4, 1, 50 },
+{ "Your father was of the Teleri.  ",                   75, 4, 1, 55 },
+{ "Your mother was of the Noldor.  ",                   90, 4, 1, 55 },
+{ "Your father was of the Noldor.  ",                   95, 4, 1, 60 },
+{ "Your mother was of the Vanyar.  ",                   98, 4, 1, 65 },
+{ "Your father was of the Vanyar.  ",                  100, 4, 1, 70 },
+#endif
+
+
+#ifdef JP
+{ "幾人かの子供のうちの一人です。",                      60, 9, 54, 50 },
+{ "一粒種です。",                                        100, 9, 54, 55 },
+#else
+{ "You are one of several children ",                   60, 7, 8, 50 },
+{ "You are the only child ",                                   100, 7, 8, 55 },
+#endif
+
+
+#ifdef JP
+{ "あなたはテレリ族のエルフの",                            75, 7, 8, 50 },
+{ "あなたはノルドール族のエルフの",                      95, 7, 8, 55 },
+{ "あなたはヴァンヤール族のエルフの",                  100, 7, 8, 60 },
+#else
+{ "of a Teleri ",                                               75, 8, 9, 50 },
+{ "of a Noldor ",                                               95, 8, 9, 55 },
+{ "of a Vanyar ",                                              100, 8, 9, 60 },
+#endif
+
+
+#ifdef JP
+{ "レンジャーの",                                         40, 8,9, 80 },
+{ "アーチャーの",                                         70, 8,9, 90 },
+{ "戦士の",                                          87, 8,9,110 },
+{ "メイジの",                                               95, 8,9,125 },
+{ "王子の",                                          99, 8,9,140 },
+{ "王の",                                            100, 8,9,145 },
+#else
+{ "Ranger.  ",                                          40, 9, 54, 80 },
+{ "Archer.  ",                                          70, 9, 54, 90 },
+{ "Warrior.  ",                                                 87, 9, 54, 110 },
+{ "Mage.  ",                                                    95, 9, 54, 125 },
+{ "Prince.  ",                                          99, 9, 54, 140 },
+{ "King.  ",                                                   100, 9, 54, 145 },
+#endif
+
+
+#ifdef JP
+{ "ホビットの何人かの子供のうちの一人です。",               85,11,3, 45 },
+{ "ホビットの一粒種です。",                         100,11,3, 55 },
+#else
+{ "You are one of several children of a Hobbit ",               85, 10, 11, 45 },
+{ "You are the only child of a Hobbit ",                       100, 10, 11, 55 },
+#endif
+
+
+#ifdef JP
+{ "あなたは乞食の",                                                      20,10,11, 55 },
+{ "あなたは酒場の店主の",                                             30,10,11, 80 },
+{ "あなたは粉屋の",                                                      40,10,11, 90 },
+{ "あなたは家主の",                                                      50,10,11,100 },
+{ "あなたは忍びの者の",                                                        80,10,11,110 },
+{ "あなたは戦士の",                                                      95,10,11,115 },
+{ "あなたはメイジの",                                                   99,10,11,125 },
+{ "あなたは一族の長の",                                                       100,10,11,140 },
+#else
+{ "Bum.  ",                                                     20, 11, 3, 55 },
+{ "Tavern Owner.  ",                                            30, 11, 3, 80 },
+{ "Miller.  ",                                          40, 11, 3, 90 },
+{ "Home Owner.  ",                                              50, 11, 3, 100 },
+{ "Burglar.  ",                                                 80, 11, 3, 110 },
+{ "Warrior.  ",                                                 95, 11, 3, 115 },
+{ "Mage.  ",                                                    99, 11, 3, 125 },
+{ "Clan Elder.  ",                                             100, 11, 3, 140 },
+#endif
+
+
+#ifdef JP
+{ "ノームの幾人かの子供のうちの一人です。",          85,14,3, 45 },
+{ "ノームの一粒種です。",                            100,14,3, 55 },
+#else
+{ "You are one of several children of a Gnome ",                85, 13, 14, 45 },
+{ "You are the only child of a Gnome ",                        100, 13, 14, 55 },
+#endif
+
+
+#ifdef JP
+{ "あなたは物乞いの",                                                   20,13,14, 55 },
+{ "あなたはホラ吹きの",                                                        50,13,14, 70 },
+{ "あなたはお調子者の",                                                        75,13,14, 85 },
+{ "あなたは戦士の",                                                      95,13,14,100 },
+{ "あなたはメイジの",                                                  100,13,14,125 },
+#else
+{ "Beggar.  ",                                          20, 14, 3, 55 },
+{ "Braggart.  ",                                                50, 14, 3, 70 },
+{ "Prankster.  ",                                               75, 14, 3, 85 },
+{ "Warrior.  ",                                                 95, 14, 3, 100 },
+{ "Mage.  ",                                                   100, 14, 3, 125 },
+#endif
+
+
+#ifdef JP
+{ "ドワーフの二人の子供のうちの一人です。",          25,17,18, 40 },
+{ "ドワーフの一粒種です。",                         100,17,18, 50 },
+#else
+{ "You are one of two children of a Dwarven ",          25, 16, 17, 40 },
+{ "You are the only child of a Dwarven ",                      100, 16, 17, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたは泥棒の",                                                      10,16,17, 60 },
+{ "あなたは牢番の",                                                      25,16,17, 75 },
+{ "あなたは坑夫の",                                                      75,16,17, 90 },
+{ "あなたは戦士の",                                                      90,16,17,110 },
+{ "あなたはプリーストの",                                     99,16,17,130 },
+{ "あなたは王の",                                                        100,16,17,150 },
+#else
+{ "Thief.  ",                                           10, 17, 18, 60 },
+{ "Prison Guard.  ",                                            25, 17, 18, 75 },
+{ "Miner.  ",                                           75, 17, 18, 90 },
+{ "Warrior.  ",                                                 90, 17, 18, 110 },
+{ "Priest.  ",                                          99, 17, 18, 130 },
+{ "King.  ",                                                   100, 17, 18, 150 },
+#endif
+
+
+#ifdef JP
+{ "あなたは一家のお荷物です。",                                            15,18,57,10 },
+{ "あなたは一家の誇りです。",                                               85,18,57, 50 },
+{ "あなたは家族に大切にされています。",                               100,18,57, 55 },
+#else
+{ "You are the black sheep of the family.  ",           15, 18, 57, 10 },
+{ "You are a credit to the family.  ",                  85, 18, 57, 50 },
+{ "You are a well liked child.  ",                             100, 18, 57, 55 },
+#endif
+
+
+#ifdef JP
+{ "あなたの母はオークでしたが、それは秘密にされています。",  25,19,20, 25 },
+{ "あなたの父はオークでしたが、それは秘密にされています。", 100,19,20, 25 },
+#else
+{ "Your mother was an Orc, but it is unacknowledged.  ",        25, 19, 20, 25 },
+{ "Your father was an Orc, but it is unacknowledged.  ",       100, 19, 20, 25 },
+#endif
+
+
+#ifdef JP
+{ "あなたは農奴の養子です。",                                               40,20, 3, 65 },
+{ "あなたは自作農の養子です。",                                            65,20, 3, 80 },
+{ "あなたは町人の養子です。",                                               80,20, 3, 90 },
+{ "あなたは職人の養子です。",                                               90,20, 3,105 },
+{ "あなたは土着の騎士の養子です。",                                      96,20, 3,120 },
+{ "あなたは爵位ある貴族の養子です。",                           99,20, 3,130 },
+{ "あなたは王家の血を引く者の養子です。",                    100,20, 3,140 },
+#else
+{ "You are the adopted child ",                                100, 20, 2, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたの母は洞窟トロルの",                               30,22,23, 20 },
+{ "あなたの父は洞窟トロルの",                               60,22,23, 25 },
+{ "あなたの母は丘トロルの",                                  75,22,23, 30 },
+{ "あなたの父は丘トロルの",                                  90,22,23, 35 },
+{ "あなたの母は水トロルの",                                  95,22,23, 40 },
+{ "あなたの父は水トロルの",                                 100,22,23, 45 },
+#else
+{ "Your mother was a Cave-Troll ",                              30, 22, 23, 20 },
+{ "Your father was a Cave-Troll ",                              60, 22, 23, 25 },
+{ "Your mother was a Hill-Troll ",                              75, 22, 23, 30 },
+{ "Your father was a Hill-Troll ",                              90, 22, 23, 35 },
+{ "Your mother was a Water-Troll ",                             95, 22, 23, 40 },
+{ "Your father was a Water-Troll ",                            100, 22, 23, 45 },
+#endif
+
+
+#ifdef JP
+{ "コックでした。",                                                       5,23,62, 60 },
+{ "戦士でした。",                                                         95,23,62, 55 },
+{ "呪術師でした。",                                                      99,23,62, 65 },
+{ "一族の長でした。",                                          100,23,62, 80 },
+#else
+{ "Cook.  ",                                                     5, 23, 62, 60 },
+{ "Warrior.  ",                                                 95, 23, 62, 55 },
+{ "Shaman.  ",                                          99, 23, 62, 65 },
+{ "Clan Chief.  ",                                             100, 23, 62, 80 },
+#endif
+
+
+#ifdef JP
+{ "あなたは深いブラウンの瞳と",                            20,50,51, 50 },
+{ "あなたはブラウンの瞳と",                                  60,50,51, 50 },
+{ "あなたは淡い色の瞳と",                                     70,50,51, 50 },
+{ "あなたはグリーンの瞳と",                                  80,50,51, 50 },
+{ "あなたは青い瞳と",                                           90,50,51, 50 },
+{ "あなたはブルーグレイの瞳と",                           100,50,51, 50 },
+#else
+{ "You have dark brown eyes, ",                                 20, 50, 51, 50 },
+{ "You have brown eyes, ",                                      60, 50, 51, 50 },
+{ "You have hazel eyes, ",                                      70, 50, 51, 50 },
+{ "You have green eyes, ",                                      80, 50, 51, 50 },
+{ "You have blue eyes, ",                                       90, 50, 51, 50 },
+{ "You have blue-gray eyes, ",                         100, 50, 51, 50 },
+#endif
+
+
+#ifdef JP
+{ "なめらかな",                                                    70,51,52, 50 },
+{ "波打った",                                                       90,51,52, 50 },
+{ "カールした",                                                   100,51,52, 50 },
+#else
+{ "straight ",                                          70, 51, 52, 50 },
+{ "wavy ",                                                      90, 51, 52, 50 },
+{ "curly ",                                                    100, 51, 52, 50 },
+#endif
+
+
+#ifdef JP
+{ "黒髪を持ち、",                                                 30,52,53, 50 },
+{ "茶髪を持ち、",                                                 70,52,53, 50 },
+{ "とび色の髪を持ち、",                                        80,52,53, 50 },
+{ "赤い髪を持ち、",                                              90,52,53, 50 },
+{ "ブロンドの髪を持ち、",                            100,52,53, 50 },
+#else
+{ "black hair, ",                                               30, 52, 53, 50 },
+{ "brown hair, ",                                               70, 52, 53, 50 },
+{ "auburn hair, ",                                              80, 52, 53, 50 },
+{ "red hair, ",                                                 90, 52, 53, 50 },
+{ "blond hair, ",                                              100, 52, 53, 50 },
+#endif
+
+
+#ifdef JP
+{ "漆黒の肌をしています。",                                  10,53, 0, 50 },
+{ "黒い肌をしています。",                                     30,53, 0, 50 },
+{ "普通の肌色をしています。",                               80,53, 0, 50 },
+{ "白い肌をしています。",                                     90,53, 0, 50 },
+{ "透き通るような白い肌をしています。",               100,53, 0, 50 },
+#else
+{ "and a very dark complexion.",                                10, 53, 0, 50 },
+{ "and a dark complexion.",                                     30, 53, 0, 50 },
+{ "and an average complexion.",                                 80, 53, 0, 50 },
+{ "and a fair complexion.",                                     90, 53, 0, 50 },
+{ "and a very fair complexion.",                               100, 53, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたは明るいグレーの瞳と",                                    85,54,55, 50 },
+{ "あなたは明るいブルーの瞳と",                                    95,54,55, 50 },
+{ "あなたは明るいグリーンの瞳と",                                        100,54,55, 50 },
+#else
+{ "You have light grey eyes, ",                                 85, 54, 55, 50 },
+{ "You have light blue eyes, ",                                 95, 54, 55, 50 },
+{ "You have light green eyes, ",                               100, 54, 55, 50 },
+#endif
+
+
+#ifdef JP
+{ "なめらかな",                                                    75,55,56, 50 },
+{ "波打った",                                                      100,55,56, 50 },
+#else
+{ "straight ",                                          75, 55, 56, 50 },
+{ "wavy ",                                                     100, 55, 56, 50 },
+#endif
+
+
+#ifdef JP
+{ "黒髪を持ち、白い肌をしています。",                           75,56, 0, 50 },
+{ "茶髪を持ち、白い肌をしています。",                           85,56, 0, 50 },
+{ "ブロンドの髪を持ち、白い肌をしています。",                               95,56, 0, 50 },
+{ "銀髪を持ち、白い肌をしています。",                          100,56, 0, 50 },
+#else
+{ "black hair, and a fair complexion.",                         75, 56, 0, 50 },
+{ "brown hair, and a fair complexion.",                         85, 56, 0, 50 },
+{ "blond hair, and a fair complexion.",                         95, 56, 0, 50 },
+{ "silver hair, and a fair complexion.",                       100, 56, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたは深いブラウンの瞳と",                                    99,57,58, 50 },
+{ "あなたは輝く赤い瞳と",                                    100,57,58, 60 },
+#else
+{ "You have dark brown eyes, ",                                 99, 57, 58, 50 },
+{ "You have glowing red eyes, ",                               100, 57, 58, 60 },
+#endif
+
+
+#ifdef JP
+{ "なめらかな",                                                    90,58,59, 50 },
+{ "波打った",                                                      100,58,59, 50 },
+#else
+{ "straight ",                                          90, 58, 59, 50 },
+{ "wavy ",                                                     100, 58, 59, 50 },
+#endif
+
+
+#ifdef JP
+{ "黒髪、そして",                                                 75,59,60, 50 },
+{ "茶髪、そして",                                                100,59,60, 50 },
+#else
+{ "black hair, ",                                               75, 59, 60, 50 },
+{ "brown hair, ",                                              100, 59, 60, 50 },
+#endif
+
+
+#ifdef JP
+{ " 30cm ほどのヒゲを持ち、",                                          25,60,61, 50 },
+{ " 60cm ほどのヒゲを持ち、",                                          60,60,61, 51 },
+{ " 90cm ほどのヒゲを持ち、",                                  90,60,61, 53 },
+{ " 1m20cm ほどのヒゲを持ち、 ",                                              100,60,61, 55 },
+#else
+{ "a one foot beard, ",                                         25, 60, 61, 50 },
+{ "a two foot beard, ",                                         60, 60, 61, 51 },
+{ "a three foot beard, ",                                       90, 60, 61, 53 },
+{ "a four foot beard, ",                                       100, 60, 61, 55 },
+#endif
+
+
+#ifdef JP
+{ "黒い肌をしています。",                                    100,61, 0, 50 },
+#else
+{ "and a dark complexion.",                                    100, 61, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたはベトつくような緑の瞳と",                                      60,62,63, 50 },
+{ "あなたは汚物のような黄色い瞳と",                                      85,62,63, 50 },
+{ "あなたは青く血走った瞳と",                               99,62,63, 50 },
+{ "あなたは輝く赤い瞳と",                                    100,62,63, 55 },
+#else
+{ "You have slime green eyes, ",                                60, 62, 63, 50 },
+{ "You have puke yellow eyes, ",                                85, 62, 63, 50 },
+{ "You have blue-bloodshot eyes, ",                             99, 62, 63, 50 },
+{ "You have glowing red eyes, ",                               100, 62, 63, 55 },
+#endif
+
+
+#ifdef JP
+{ "汚らしい",                                                       33,63,64, 50 },
+{ "不潔な",                                                  66,63,64, 50 },
+{ "脂ぎった",                                                      100,63,64, 50 },
+#else
+{ "dirty ",                                                     33, 63, 64, 50 },
+{ "mangy ",                                                     66, 63, 64, 50 },
+{ "oily ",                                                     100, 63, 64, 50 },
+#endif
+
+
+#ifdef JP
+{ "ワカメの様な髪を持ち、",                                  33,64,65, 50 },
+{ "明るい赤色の髪を持ち、",                                          66,64,65, 50 },
+{ "暗い紫色の髪を持ち、",                                            100,64,65, 50 },
+#else
+{ "sea-weed green hair, ",                                      33, 64, 65, 50 },
+{ "bright red hair, ",                                  66, 64, 65, 50 },
+{ "dark purple hair, ",                                        100, 64, 65, 50 },
+#endif
+
+
+#ifdef JP
+{ "緑色の",                                                  25,65,66, 50 },
+{ "青い",                                                     50,65,66, 50 },
+{ "白い",                                                     75,65,66, 50 },
+{ "黒い",                                                    100,65,66, 50 },
+#else
+{ "and green ",                                                 25, 65, 66, 50 },
+{ "and blue ",                                          50, 65, 66, 50 },
+{ "and white ",                                                 75, 65, 66, 50 },
+{ "and black ",                                                100, 65, 66, 50 },
+#endif
+
+
+#ifdef JP
+{ "ブツブツした肌をしています。",                                                 33,66, 0, 50 },
+{ "カサブタだらけの肌をしています。",                                           66,66, 0, 50 },
+{ "ガサガサの肌をしています。",                                           100,66, 0, 50 },
+#else
+{ "ulcerous skin.",                                             33, 66, 0, 50 },
+{ "scabby skin.",                                               66, 66, 0, 50 },
+{ "leprous skin.",                       100, 66, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "認知されていない子供です。",          50, 68, 50, 45 },
+{ "勘当された子供です。",           80, 68, 50, 65 },
+{ "早くして生き別れた子供です。",      100, 68, 50, 55 },
+#else
+{ "You are an unacknowledged child of ", 50, 67, 68, 45 },
+{ "You are a rebel child of ",         80, 67, 68, 65 },
+{ "You are a long lost child of ",     100, 67, 68, 55 },
+#endif
+
+
+#ifdef JP
+{ "あなたは名の知れぬアンバーの王族の",               50, 67, 68, 80 },
+{ "あなたは第三世代のアンバー王族の", 65, 67, 68, 90 },
+{ "あなたは第二世代のアンバー王族の", 79, 67, 68, 100 },
+{ "あなたはオベロンの",       80, 67, 68, 130 },
+{ "あなたはオズリックの",        83, 67, 68, 105 },
+{ "あなたはフィンドーの",       84, 67, 68, 105 },
+{ "あなたはブランドの",        85, 67, 68, 90 },
+{ "あなたはフローラの",        87, 67, 68, 100 },
+{ "あなたはジェラードの",       88, 67, 68, 125 },
+{ "あなたはディアドラの",      89, 67, 68, 120 },
+{ "あなたはランダムの",       90, 67, 68, 140 },
+{ "あなたはベネディクトの",     91, 67, 68, 115 },
+{ "あなたはコーウィンの",       92, 67, 68, 110 },
+{ "あなたはジュリアンの",       93, 67, 68, 105 },
+{ "あなたはケインの",        94, 67, 68, 95 },
+{ "あなたはブレイズの",        95, 67, 68, 115 },
+{ "あなたはフィオナの",        96, 67, 68, 110 },
+{ "あなたはエリックの",         97, 67, 68, 135 },
+{ "あなたはリナルドの",      98, 67, 68, 90 },
+{ "あなたはマーリンの",       99, 67, 68, 105 },
+{ "あなたはマーティンの",       100, 67,68, 80 },
+#else
+{ "an unknown Amberite.  ",               50, 68, 50, 80 },
+{ "an unknown third generation Amberite.  ", 65, 68, 50, 90 },
+{ "an unknown second generation Amberite.  ", 79, 68, 50, 100 },
+{ "Oberon.  ",       80, 68, 50, 130 },
+{ "Osric.  ",        83, 68, 50, 105 },
+{ "Finndo.  ",       84, 68, 50, 105 },
+{ "Brand.  ",        85, 68, 50, 90 },
+{ "Flora.  ",        87, 68, 50, 100 },
+{ "Gerard.  ",       88, 68, 50, 125 },
+{ "Deirdre.  ",      89, 68, 50, 120 },
+{ "Random.  ",       90, 68, 50, 140 },
+{ "Benedict.  ",     91, 68, 50, 115 },
+{ "Corwin.  ",       92, 68, 50, 110 },
+{ "Julian.  ",       93, 68, 50, 105 },
+{ "Caine.  ",        94, 68, 50, 95 },
+{ "Bleys.  ",        95, 68, 50, 115 },
+{ "Fiona.  ",        96, 68, 50, 110 },
+{ "Eric.  ",         97, 68, 50, 135 },
+{ "Rinaldo.  ",      98, 68, 50, 90 },
+{ "Merlin.  ",       99, 68, 50, 105 },
+{ "Martin.  ",       100, 68, 50, 80 },
+#endif
+
+
+
+#ifdef JP
+{ "何人かの子供のうちの一人です。",      85, 70, 71, 45 },
+{ "一粒種です。",                 100, 70, 71, 55 },
+
+{ "あなたはダークエルフの戦士の", 50, 69, 70, 60 },
+{ "あなたはダークエルフの魔術士の", 80, 69, 70, 75 },
+{ "あなたはダークエルフの貴族の", 100,  69, 70, 95 },
+#else
+{ "You are one of several children of a Dark Elven ",      85, 69, 70, 45 },
+{ "You are the only child of a Dark Elven ",          100, 69, 70, 55 },
+
+{ "Warrior.  ", 50, 70, 71, 60 },
+{ "Warlock.  ", 80, 70, 71, 75 },
+{ "Noble.  ", 100, 70, 71, 95 },
+#endif
+
+
+#ifdef JP
+{ "あなたは黒い瞳と", 100, 71, 72, 50 },
+#else
+{ "You have black eyes, ", 100, 71, 72, 50 },
+#endif
+
+
+#ifdef JP
+{ "なめらかな",                        70, 72, 73, 50 },
+{ "波打った",                            90, 72, 73, 50 },
+{ "カールした",                          100, 72, 73, 50 },
+
+{ "黒い髪、そしてとても暗い色の肌をしています。", 100, 73, 0, 50 },
+#else
+{ "straight ",                        70, 72, 73, 50 },
+{ "wavy ",                            90, 72, 73, 50 },
+{ "curly ",                          100, 72, 73, 50 },
+
+{ "black hair and a very dark complexion.", 100, 73, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたの母親はオーガでしたが、それは秘密にされています。", 25, 74, 20, 25 },
+{ "あなたの父親はオーガでしたが、それは秘密にされています。", 100, 74, 20, 25 },
+#else
+{ "Your mother was an Ogre, but it is unacknowledged.  ", 25, 74, 20, 25 },
+{ "Your father was an Ogre, but it is unacknowledged.  ", 100, 74, 20, 25 },
+#endif
+
+
+#ifdef JP
+{ "あなたの母親は丘ジャイアントでした。", 10, 75, 20, 50 },
+{ "あなたの母親はファイアー・ジャイアントでした。", 12, 75, 20, 55 },
+{ "あなたの母親はフロスト・ジャイアントでした。", 20, 75, 20, 60 },
+{ "あなたの母親はクラウド・ジャイアントでした。", 23, 75, 20, 65 },
+{ "あなたの母親はストーム・ジャイアントでした。", 25, 75, 20, 70 },
+{ "あなたの父親は丘ジャイアントでした。",  60, 75, 20, 50 },
+{ "あなたの父親はファイアー・ジャイアントでした。",  70, 75, 20, 55 },
+{ "あなたの父親はフロスト・ジャイアントでした。",  80, 75, 20, 60 },
+{ "あなたの父親はクラウド・ジャイアントでした。",  90, 75, 20, 65 },
+{ "あなたの父親はストーム・ジャイアントでした。", 100, 75, 20, 70 },
+#else
+{ "Your mother was a Hill Giant.  ", 10, 75, 20, 50 },
+{ "Your mother was a Fire Giant.  ", 12, 75, 20, 55 },
+{ "Your mother was a Frost Giant.  ", 20, 75, 20, 60 },
+{ "Your mother was a Cloud Giant.  ", 23, 75, 20, 65 },
+{ "Your mother was a Storm Giant.  ", 25, 75, 20, 70 },
+{ "Your father was a Hill Giant.  ",  60, 75, 20, 50 },
+{ "Your father was a Fire Giant.  ",  70, 75, 20, 55 },
+{ "Your father was a Frost Giant.  ",  80, 75, 20, 60 },
+{ "Your father was a Cloud Giant.  ",  90, 75, 20, 65 },
+{ "Your father was a Storm Giant.  ", 100, 75, 20, 70 },
+#endif
+
+
+#ifdef JP
+{ "あなたの父親は名の知れぬタイタンでした。", 75, 76, 20, 50 },
+{ "あなたの母親はテミスでした。",        80, 76, 20, 100 },
+{ "あなたの母親はメノシンでした。",     85, 76, 20, 100 },
+{ "あなたの父親はオケアノスでした。",      90, 76, 20, 100 },
+{ "あなたの父親はクリウスでした。",         95, 76, 20, 100 },
+{ "あなたの父親はハイペリオンでした。",      98, 76, 20, 125 },
+{ "あなたの父親はクロノスでした。",       100, 76, 20, 150 },
+#else
+{ "Your father was an unknown Titan.  ", 75, 76, 20, 50 },
+{ "Your mother was Themis.  ",        80, 76, 20, 100 },
+{ "Your mother was Mnemosyne.  ",     85, 76, 20, 100 },
+{ "Your father was Okeanoas.  ",      90, 76, 20, 100 },
+{ "Your father was Crius.  ",         95, 76, 20, 100 },
+{ "Your father was Hyperion.  ",      98, 76, 20, 125 },
+{ "Your father was Kronos.  ",       100, 76, 20, 150 },
+#endif
+
+
+#ifdef JP
+{ "あなたは名の知れぬサイクロプスの子孫です。", 90, 77, 109, 50 },
+{ "あなたはポリフェモスの子供です。", 98, 77, 109, 80 },
+{ "あなたはウラノスの子供です。", 100, 77, 109, 135 },
+#else
+{ "You are the offspring of an unknown Cyclops.  ", 90, 77, 109, 50 },
+{ "You are Polyphemos's child.  ", 98, 77, 109, 80 },
+{ "You are Uranos's child.  ", 100, 77, 109, 135 },
+#endif
+
+
+#ifdef JP
+{ "何人かの子供のうちの一人です。", 100, 79, 80, 50 },
+
+{ "あなたはブラウン・イークの",           50, 78, 79, 50 },
+{ "あなたはブルー・イークの",              75, 78, 79, 50 },
+{ "あなたはマスター・イークの",           95, 78, 79, 85 },
+{ "あなたはイークの王『ボルドール』の", 100, 78, 79, 120 },
+#else
+{ "You are one of several children of ", 100, 78, 79, 50 },
+
+{ "a Brown Yeek. ", 50, 79, 80, 50 },
+{ "a Blue Yeek.  ", 75, 79, 80, 50 },
+{ "a Master Yeek.  ", 95, 79, 80, 85 },
+{ "Boldor, the King of the Yeeks.  ", 100, 79, 80, 120 },
+#endif
+
+
+#ifdef JP
+{ "あなたは青い瞳と",    25, 80, 81, 50 },
+{ "あなたは光る瞳と",    50, 80, 81, 50 },
+{ "あなたは小さな黒い瞳と",    75, 80, 81, 50 },
+{ "あなたは黒く輝く瞳と",    100, 80, 81, 50 },
+
+{ "髪のない頭、",        20, 81, 65, 50 },
+{ "黒く短い髪、",        40, 81, 65, 50 },
+{ "黒く長い髪、",        60, 81, 65, 50 },
+{ "燃えるような赤い髪、",        80, 81, 65, 50 },
+{ "色のない白い髪、",        100, 81, 65, 50 },
+#else
+{ "You have pale eyes, ",    25, 80, 81, 50 },
+{ "You have glowing eyes, ",    50, 80, 81, 50 },
+{ "You have tiny black eyes, ",    75, 80, 81, 50 },
+{ "You have shining black eyes, ",    100, 80, 81, 50 },
+
+{ "no hair at all, ",        20, 81, 65, 50 },
+{ "short black hair, ",        40, 81, 65, 50 },
+{ "long black hair, ",        60, 81, 65, 50 },
+{ "bright red hair, ",        80, 81, 65, 50 },
+{ "colourless albino hair, ",        100, 81, 65, 50 },
+#endif
+
+
+#ifdef JP
+{ "の何人かの子供のうちの一人です。 ", 100, 83, 80, 50 },
+
+{ "あなたはスモール・コボルド",           40, 82, 83, 50 },
+{ "あなたはコボルド",                  75, 82, 83, 55 },
+{ "あなたはラージ・コボルド",              95, 82, 83, 65 },
+{ "あなたはコボルドの王『ムガッシュ』",   100, 82, 83, 100 },
+#else
+{ "You are one of several children of ", 100, 82, 83, 50 },
+
+{ "a Small Kobold.  ",   40, 83, 80, 50 },
+{ "a Kobold.  ",         75, 83, 80, 55 },
+{ "a Large Kobold.  ",   95, 83, 80, 65 },
+{ "Mughash, the Kobold Lord.  ",     100, 83, 80, 100 },
+#endif
+
+
+#ifdef JP
+{ "あなたは女王クラッコンの何人かの子供のうちの一人です。"
+, 100, 84, 85, 50 },
+
+{ "あなたは赤い肌と", 40, 85, 86, 50 },
+{ "あなたは黒い肌と", 90, 85, 86, 50 },
+{ "あなたは黄色い肌と", 100, 85, 86, 50 },
+
+{ "黒い目をしています。", 100, 86, 0, 50 },
+#else
+{ "You are one of several children of a Klackon hive queen.  "
+, 100, 84, 85, 50 },
+
+{ "You have red skin, ", 40, 85, 86, 50 },
+{ "You have black skin, ", 90, 85, 86, 50 },
+{ "You have yellow skin, ", 100, 85, 86, 50 },
+
+{ "and black eyes.", 100, 86, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "の何人かの子供のうちの一人です。", 100, 88, 18, 89 },
+
+{ "あなたはニーベルングの奴隷", 30,       87, 88, 20 },
+{ "あなたはニーベルングの盗賊", 50,       87, 88, 40 },
+{ "あなたはニーベルングの鍛冶屋", 70,    87, 88, 60 },
+{ "あなたはニーベルングの坑夫", 90,       87, 88, 75 },
+{ "あなたはニーベルングのシャーマン", 95,87, 88, 100 },
+{ "あなたはニーベルングの王『ミーメ』", 100,87, 88, 100 },/*nuke me*/
+#else
+{ "You are one of several children of ", 100, 87, 88, 89 },
+
+{ "a Nibelung Slave.  ", 30, 88, 18, 20 },
+{ "a Nibelung Thief.  ", 50, 88, 18, 40 },
+{ "a Nibelung Smith.  ", 70, 88, 18, 60 },
+{ "a Nibelung Miner.  ", 90, 88, 18, 75 },
+{ "a Nibelung Shaman.  ", 95, 88, 18, 100 },
+{ "Mime, the Nibelung.  ", 100, 88, 18, 100 },
+#endif
+
+#ifdef JP
+{ "あなたはドラコニアンの", 100, 89, 90, 50 },
+
+{ "の長子です。", 30, 135, 91, 55 },
+{ "の末子です。", 50, 135, 91, 50 },
+{ "の養子です。", 55, 135, 91, 50 },
+{ "の孤児です。", 60, 135, 91, 45 },
+{ "の幾人かの子供のうちの一人です。", 85, 135, 91, 50 },
+{ "の一粒種です。", 100, 135, 91, 55 },
+
+{ "乞食", 10, 90, 135, 20 },
+{ "盗賊", 21, 90, 135, 30 },
+{ "水夫", 26, 90, 135, 45 },
+{ "傭兵", 42, 90, 135, 45 },
+{ "戦士", 73, 90, 135, 50 },
+{ "商人", 78, 90, 135, 50 },
+{ "職人", 85, 90, 135, 55 },
+{ "治療家", 89, 90, 135, 60 },
+{ "僧侶", 94, 90, 135, 65 },
+{ "魔術師", 97, 90, 135, 70 },
+{ "学者", 99, 90, 135, 80 },
+{ "貴族", 100, 90, 135, 100 },
+
+{ "あなたは", 100, 91, 136, 50 },
+
+{ "は黒灰色の翼と肌、そして灰色の腹をしています。", 11, 136, 0, 50 },
+{ "ブロンズ色の翼と肌、そして銅色の腹をしています。", 16, 136, 0, 50 },
+{ "黄金の翼を持ち、黄金の肌をしています。", 24, 136, 0, 50 },
+{ "白い翼を持ち、白い肌をしています。", 26, 136, 0, 60 },
+{ "青い翼と肌、そして水色の腹をしています。", 32, 136, 0, 50 },
+{ "万色の翼を持ち、肌も万色です。", 33, 136, 0, 70 },
+{ "茶色の翼を持ち、茶色の肌をしています。", 37, 136, 0, 45 },
+{ "黒い翼と肌、そして白い腹をしています。", 41, 136, 0, 50 },
+{ "薄紫色の翼と肌、そして白い腹をしています。", 48, 136, 0, 50 },
+{ "緑色の翼と肌、そして黄色い腹をしています。", 65, 136, 0, 50 },
+{ "緑色の翼を持ち、緑色の肌をしています。", 75, 136, 0, 50 },
+{ "赤い翼を持ち、赤い肌をしています。", 88, 136, 0, 50 },
+{ "黒い翼を持ち、黒い肌をしています。", 94, 136, 0, 50 },
+{ "きらめく翼を持ち、金属的な肌をしています。", 100, 136, 0, 55 },
+#else
+{ "You are ", 100, 89, 135, 50 },
+
+{ "the oldest child of a Draconian ", 30, 135, 90, 55 },
+{ "the youngest child of a Draconian ", 50, 135, 90, 50 },
+{ "the adopted child of a Draconian ", 55, 135, 90, 50 },
+{ "an orphaned child of a Draconian ", 60, 135, 90, 45 },
+{ "one of several children of a Draconian ", 85, 135, 90, 50 },
+{ "the only child of a Draconian ", 100, 135, 90, 55 },
+
+{ "Beggar.  ", 10, 90, 91, 20 },
+{ "Thief.  ", 21, 90, 91, 30 },
+{ "Sailor.  ", 26, 90, 91, 45 },
+{ "Mercenary.  ", 42, 90, 91, 45 },
+{ "Warrior.  ", 73, 90, 91, 50 },
+{ "Merchant.  ", 78, 90, 91, 50 },
+{ "Artisan.  ", 85, 90, 91, 55 },
+{ "Healer.  ", 89, 90, 91, 60 },
+{ "Priest.  ", 94, 90, 91, 65 },
+{ "Mage.  ", 97, 90, 91, 70 },
+{ "Scholar.  ", 99, 90, 91, 80 },
+{ "Noble.  ", 100, 90, 91, 100 },
+
+{ "You have ", 100, 91, 136, 50 },
+
+{ "charcoal wings, charcoal skin and a smoke-gray belly.", 11, 136, 0, 50 },
+{ "bronze wings, bronze skin, and a copper belly.", 16, 136, 0, 50 },
+{ "golden wings, and golden skin.", 24, 136, 0, 50 },
+{ "white wings, and white skin.", 26, 136, 0, 60 },
+{ "blue wings, blue skin, and a cyan belly.", 32, 136, 0, 50 },
+{ "multi-hued wings, and multi-hued skin.", 33, 136, 0, 70 },
+{ "brown wings, and brown skin.", 37, 136, 0, 45 },
+{ "black wings, black skin, and a white belly.", 41, 136, 0, 50 },
+{ "lavender wings, lavender skin, and a white belly.", 48, 136, 0, 50 },
+{ "green wings, green skin and yellow belly.", 65, 136, 0, 50 },
+{ "green wings, and green skin.", 75, 136, 0, 50 },
+{ "red wings, and red skin.", 88, 136, 0, 50 },
+{ "black wings, and black skin.", 94, 136, 0, 50 },
+{ "metallic skin, and shining wings.", 100, 136, 0, 55 },
+#endif
+
+
+
+#ifdef JP
+{ "あなたは偉大なる長老たちの脳味噌が浮かんでいる母なる池でオタマジャクシとして生まれました。あなたはヌルヌルした肌と輝く空虚な目をしていて、", 100, 92, 93, 80 },
+{ "口の周りに三本の触手が生えています。", 20, 93, 0, 45 },
+{ "口の周りに四本の触手が生えています。", 80, 93, 0, 50 },
+{ "口の周りに五本の触手が生えています。", 100, 93, 0, 55 },
+#else
+{ "You have slimy skin, empty glowing eyes, and ", 100, 92, 93, 80 },
+{ "three tentacles around your mouth.", 20, 93, 0, 45 },
+{ "four tentacles around your mouth.", 80, 93, 0, 50 },
+{ "five tentacles around your mouth.", 100, 93, 0, 55 },
+#endif
+
+
+#ifdef JP
+{ "あなたの祖先は", 100, 94, 95, 50 },
+
+{ "心を持たない地獄の低級な生物でした。", 30, 95, 96, 20 },
+{ "下級悪魔でした。", 60, 95, 96, 50 },
+{ "上級悪魔でした。", 90, 95, 96, 75 },
+{ "魔王でした。", 100, 95, 96, 99 },
+
+{ "あなたは赤い肌と", 50, 96, 97, 50 },
+{ "あなたは茶色い肌と", 100, 96, 97, 50 },
+
+{ "赤く燃える瞳をしていて、鉤爪と牙と刺が生えています。", 40, 97, 0, 50 },
+{ "赤く燃える瞳をしていて、鉤爪と牙が生えています。", 70, 97, 0, 50 },
+{ "赤く燃える瞳をしていて、鉤爪が生えています。", 100, 97, 0, 50 },
+#else
+{ "You ancestor was ", 100, 94, 95, 50 },
+
+{ "a mindless demonic spawn.  ", 30, 95, 96, 20 },
+{ "a minor demon.  ", 60, 95, 96, 50 },
+{ "a major demon.  ", 90, 95, 96, 75 },
+{ "a demon lord.  ", 100, 95, 96, 99 },
+
+{ "You have red skin, ", 50, 96, 97, 50 },
+{ "You have brown skin, ", 100, 96, 97, 50 },
+
+{ "claws, fangs, spikes, and glowing red eyes.", 40, 97, 0, 50 },
+{ "claws, fangs, and glowing red eyes.", 70, 97, 0, 50 },
+{ "claws, and glowing red eyes.", 100, 97, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたはカバラの秘術によって", 40,    98, 99, 50 },
+{ "あなたは魔法使いによって", 65,  98, 99, 50 },
+{ "あなたは錬金術師によって",           90,        98, 99, 50 },
+{ "あなたは僧侶によって", 100,       98, 99, 60 },
+
+{ "悪と戦うために", 10, 99, 100, 65 },
+{ "",           100,  99, 100, 50 },
+
+{ "粘土から", 40, 100, 101, 50 },
+{ "岩石から", 80, 100, 101, 50 },
+{ "木から", 85, 100, 101, 40 },
+{ "鉄から", 99, 100, 101, 50 },
+{ "純金から", 100, 100, 101, 100 },
+
+{ "作り出されました。", 100,101, 0, 50 },
+#else
+{ "You were shaped from ", 100, 98, 99, 50 },
+
+{ "clay ", 40, 99, 100, 50 },
+{ "stone ", 80, 99, 100, 50 },
+{ "wood ", 85, 99, 100, 40 },
+{ "iron ", 99, 99, 100, 50 },
+{ "pure gold ", 100, 99, 100, 100 },
+
+{ "by a Kabbalist", 40, 100, 101, 50 },
+{ "by a Wizard", 65, 100, 101, 50 },
+{ "by an Alchemist", 90, 100, 101, 50 },
+{ "by a Priest", 100, 100, 101, 60 },
+
+{ " to fight evil.", 10, 101, 0, 65 },
+{ ".", 100, 101, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたは", 100, 102, 103, 50 },
+
+{ "死霊術士により作り出されました。", 30, 103, 104, 50 },
+{ "魔法の実験により作り出されました。", 50, 103, 104, 50 },
+{ "邪悪な僧侶により作り出されました。", 70, 103, 104, 50 },
+{ "悪魔との契約により生み出されました。", 75, 103, 104, 50 },
+{ "怨霊から生まれました。", 85, 103, 104, 50 },
+{ "呪いから生まれました。", 95, 103, 104, 30 },
+{ "神名濫用により生み出されました。", 100, 103, 104, 50 },
+
+{ "あなたは", 100, 104, 105, 50 },
+{ "古く汚れた骨で出来ていて、", 40, 105, 106, 50 },
+{ "腐った黒い骨で出来ていて、", 60, 105, 106, 50 },
+{ "うす汚れた茶色い骨で出来ていて、", 80, 105, 106, 50 },
+{ "白く輝く骨で出来ていて、", 100, 105, 106, 50 },
+
+{ "光る目をしています。", 30, 106, 0, 50 },
+{ "地獄の劫火が燃えさかる目をしています。", 50, 106, 0, 50 },
+{ "眼窩はからっぽです。", 100, 106, 0, 50 },
+#else
+{ "You were created by ", 100, 102, 103, 50 },
+
+{ "a Necromancer.  ", 30, 103, 104, 50 },
+{ "a magical experiment.  ", 50, 103, 104, 50 },
+{ "an Evil Priest.  ", 70, 103, 104, 50 },
+{ "a pact with the demons.  ", 75, 103, 104, 50 },
+{ "a restless spirit.  ", 85, 103, 104, 50 },
+{ "a curse.  ", 95, 103, 104, 30 },
+{ "an oath.  ", 100, 103, 104, 50 },
+
+{ "You have ", 100, 104, 105, 50 },
+{ "dirty, dry bones, ", 40, 105, 106, 50 },
+{ "rotten black bones, ", 60, 105, 106, 50 },
+{ "filthy, brown bones, ", 80, 105, 106, 50 },
+{ "shining white bones, ", 100, 105, 106, 50 },
+
+{ "and glowing eyes.", 30, 106, 0, 50 },
+{ "and eyes which burn with hellfire.", 50, 106, 0, 50 },
+{ "and empty eyesockets.", 100, 106, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたは", 100, 107, 108, 50 },
+
+{ "死霊術士により生み出されました。", 30, 108, 62, 50 },
+{ "魔法使いにより生み出されました。", 50, 108, 62, 50 },
+{ "怨霊から生まれました。",60, 108, 62, 50 },
+{ "邪悪な僧侶により生み出されました。", 70, 108, 62, 50 },
+{ "悪魔との契約により生み出されました。", 80, 108, 62, 50 },
+{ "呪いから生まれました。", 95, 108, 62, 30 },
+{ "神名濫用により生み出されました。", 100, 108, 62, 50 },
+
+{ "あなたは暗褐色の瞳、",               20, 109, 110, 50 },
+{ "あなたは褐色の瞳、",                    60, 109, 110, 50 },
+{ "あなたは薄茶色の瞳、",                    70, 109, 110, 50 },
+{ "あなたは緑色の瞳、",                    80, 109, 110, 50 },
+{ "あなたは青い瞳、",                     90, 109, 110, 50 },
+{ "あなたは淡青色の瞳、",               100, 109, 110, 50 }, /*tansei.cc.u-tokyoの由来 */
+
+{ "なめらかな",                        70, 110, 111, 50 },
+{ "波打った",                            90, 110, 111, 50 },
+{ "カールした",                          100, 110, 111, 50 },
+
+{ "黒い髪、",                         30, 111, 112, 50 },
+{ "茶色い髪、",                         70, 111, 112, 50 },
+{ "赤茶色の髪、",                        80, 111, 112, 50 },
+{ "赤い髪、",                       90, 111, 112, 50 },
+{ "金髪、",                        100, 111, 112, 50 },
+
+{ "そしてとても暗い肌をしています。",              10, 112, 0, 50 },
+{ "そして暗い肌をしています。",                   30, 112, 0, 50 },
+{ "そして平均的な肌の色をしています。",               80, 112, 0, 50 },
+{ "そして血色のいい肌をしています。",                   90, 112, 0, 50 },
+{ "そしてとても血色のいい肌をしています。",             100, 112, 0, 50 },
+#else
+{ "You were created by ", 100, 107, 108, 50 },
+
+{ "a Necromancer.  ", 30, 108, 62, 50 },
+{ "a Wizard.  ", 50, 108, 62, 50 },
+{ "a restless spirit.  ",60, 108, 62, 50 },
+{ "an Evil Priest.  ", 70, 108, 62, 50 },
+{ "a pact with the demons.  ", 80, 108, 62, 50 },
+{ "a curse.  ", 95, 108, 62, 30 },
+{ "an oath.  ", 100, 108, 62, 50 },
+
+{ "You have a dark brown eye, ",               20, 109, 110, 50 },
+{ "You have a brown eye, ",                    60, 109, 110, 50 },
+{ "You have a hazel eye, ",                    70, 109, 110, 50 },
+{ "You have a green eye, ",                    80, 109, 110, 50 },
+{ "You have a blue eye, ",                     90, 109, 110, 50 },
+{ "You have a blue-gray eye, ",               100, 109, 110, 50 },
+
+{ "straight ",                        70, 110, 111, 50 },
+{ "wavy ",                            90, 110, 111, 50 },
+{ "curly ",                          100, 110, 111, 50 },
+
+{ "black hair, ",                         30, 111, 112, 50 },
+{ "brown hair, ",                         70, 111, 112, 50 },
+{ "auburn hair, ",                        80, 111, 112, 50 },
+{ "red hair, ",                       90, 111, 112, 50 },
+{ "blond hair, ",                        100, 111, 112, 50 },
+
+{ "and a very dark complexion.",              10, 112, 0, 50 },
+{ "and a dark complexion.",                   30, 112, 0, 50 },
+{ "and an average complexion.",               80, 112, 0, 50 },
+{ "and a fair complexion.",                   90, 112, 0, 50 },
+{ "and a very fair complexion.",             100, 112, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたは銘のない墓の中から甦りました。", 20, 113, 114, 50 },
+{ "あなたは生前ただの百姓でしたが、強大なバンパイア・ロードの餌食となってしまいました。", 40, 113, 114, 50 },
+{ "あなたは生前はバンパイア・ハンターでしたが、彼らの餌食となってしまいました。", 60, 113, 114, 50 },
+{ "あなたは生前は死霊術士でした。", 80, 113, 114, 50 },
+{ "あなたは生前は強大な貴族でした。", 95, 113, 114, 50 },
+{ "あなたは生前は強大で残忍な専制君主でした。", 100, 113, 114, 50 },
+#else
+{ "You arose from an unmarked grave.  ", 20, 113, 114, 50 },
+{ "In life you were a simple peasant, the victim of a powerful Vampire Lord.  ", 40, 113, 114, 50 },
+{ "In life you were a Vampire Hunter, but they got you.  ", 60, 113, 114, 50 },
+{ "In life you were a Necromancer.  ", 80, 113, 114, 50 },
+{ "In life you were a powerful noble.  ", 95, 113, 114, 50 },
+{ "In life you were a powerful and cruel tyrant.  ", 100, 113, 114, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたは", 100, 114, 115, 50 },
+
+{ "漆黒の髪、", 25, 115, 116, 50 },
+{ "もつれたブラウンの髪、", 50, 115, 116, 50 },
+{ "白い髪、", 75, 115, 116, 50 },
+{ "髪のない頭、", 100, 115, 116, 50 },
+#else
+{ "You have ", 100, 114, 115, 50 },
+
+{ "jet-black hair, ", 25, 115, 116, 50 },
+{ "matted brown hair, ", 50, 115, 116, 50 },
+{ "white hair, ", 75, 115, 116, 50 },
+{ "a hairless head, ", 100, 115, 116, 50 },
+#endif
+
+
+#ifdef JP
+{ "燃える石炭のような瞳、", 25, 116, 117, 50 },
+{ "瞳のない目、", 50, 116, 117, 50 },
+{ "凶暴な黄色い瞳、", 75, 116, 117, 50 },
+{ "血走った赤い瞳、", 100, 116, 117, 50 },
+
+{ "そして死人のように青ざめた肌をしています。", 100, 117, 0, 50 },
+#else
+{ "eyes like red coals, ", 25, 116, 117, 50 },
+{ "blank white eyes, ", 50, 116, 117, 50 },
+{ "feral yellow eyes, ", 75, 116, 117, 50 },
+{ "bloodshot red eyes, ", 100, 116, 117, 50 },
+
+{ "and a deathly pale complexion.", 100, 117, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたは", 100, 118, 119, 50 },
+
+{ "死霊術士により作り出されました。", 30, 119, 134, 50 },
+{ "魔法の実験により作り出されました。", 50, 119, 134, 50 },
+{ "邪悪な僧侶により作り出されました。", 70, 119, 134, 50 },
+{ "悪魔との契約により生み出されました。", 75, 119, 134, 50 },
+{ "怨霊から生まれました。", 85, 119, 134, 50 },
+{ "呪いから生まれました。", 95, 119, 134, 30 },
+{ "神名濫用により生み出されました。", 100, 119, 134, 50 },
+#else
+{ "You were created by ", 100, 118, 119, 50 },
+
+{ "a Necromancer.  ", 30, 119, 134, 50 },
+{ "a magical experiment.  ", 50, 119, 134, 50 },
+{ "an Evil Priest.  ", 70, 119, 134, 50 },
+{ "a pact with the demons.  ", 75, 119, 134, 50 },
+{ "a restless spirit.  ", 85, 119, 134, 50 },
+{ "a curse.  ", 95, 119, 134, 30 },
+{ "an oath.  ", 100, 119, 134, 50 },
+#endif
+
+
+#ifdef JP
+{ "漆黒の髪、", 25, 120, 121, 50 },
+{ "もつれたブラウンの髪、", 50, 120, 121, 50 },
+{ "白い髪、", 75, 120, 121, 50 },
+{ "髪のない頭、", 100, 120, 121, 50 },
+#else
+{ "jet-black hair, ", 25, 120, 121, 50 },
+{ "matted brown hair, ", 50, 120, 121, 50 },
+{ "white hair, ", 75, 120, 121, 50 },
+{ "a hairless head, ", 100, 120, 121, 50 },
+#endif
+
+
+#ifdef JP
+{ "燃える石炭のような瞳、", 25, 121, 122, 50 },
+{ "瞳のない目、", 50, 121, 122, 50 },
+{ "凶暴な黄色い瞳、", 75, 121, 122, 50 },
+{ "血走った赤い瞳、", 100, 121, 122, 50 },
+#else
+{ "eyes like red coals, ", 25, 121, 122, 50 },
+{ "blank white eyes, ", 50, 121, 122, 50 },
+{ "feral yellow eyes, ", 75, 121, 122, 50 },
+{ "bloodshot red eyes, ", 100, 121, 122, 50 },
+#endif
+
+
+#ifdef JP
+{ "そして死人のような土色の肌をしています。", 100, 122, 123, 50 },
+{ "あなたの周りには不気味な緑色のオーラがただよっています。", 100, 123, 0, 50 },
+#else
+{ " and a deathly gray complexion. ", 100, 122, 123, 50 },
+{ "An eerie green aura surrounds you.", 100, 123, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたの両親は", 100, 124, 125, 50 },
+
+{ "ピクシーでした。", 20, 125, 126, 35 },
+{ "ニクシーでした。", 30, 125, 126, 25 },
+{ "森の妖精でした。", 75, 125, 126, 50 },
+{ "森の精霊でした。", 90, 125, 126, 75 },
+{ "妖精の貴族でした。", 100, 125, 126, 85 }, /*nuke me カタカナのほうがいいかも */
+#else
+{ "Your parents were ", 100, 124, 125, 50 },
+
+{ "pixies.  ", 20, 125, 126, 35 },
+{ "nixies.  ", 30, 125, 126, 25 },
+{ "wood sprites.  ", 75, 125, 126, 50 },
+{ "wood spirits.  ", 90, 125, 126, 75 },
+{ "noble faerie folk.  ", 100, 125, 126, 85 },
+#endif
+
+
+#ifdef JP
+{ "あなたは背中にライトブルーの羽根が生えていて、", 100, 126, 127, 50 },
+
+{ "なめらかな金髪、",                        80, 127, 128, 50 },
+{ "波打った金髪、",                            100, 127, 128, 50 },
+
+{ "青い瞳、そして非常に生き生きとした肌をしています。", 100, 128, 0, 50 },
+#else
+{ "You have light blue wings attached to your back, ", 100, 126, 127, 50 },
+
+{ "straight blond hair, ",                        80, 127, 128, 50 },
+{ "wavy blond hair, ",                            100, 127, 128, 50 },
+
+{ "blue eyes, and a very fair complexion.", 100, 128, 0, 50 },
+#endif
+
+
+#ifdef JP
+{ "あなたは魔法の実験により生み出されました。", 30, 129, 130, 40 },
+{ "あなたは子供時代、愚かにも純ログルスに頭を突っ込んでしまいました。",
+50, 129, 130, 50 }, /*nuke me*/
+{ "あるカオスの魔王が遊びであなたを作り上げました。",
+60, 129, 130, 60 },
+{ "あなたは魔法により掛け合わされた動物と人間の子供です。", 75, 129, 130, 50 },
+{ "あなたは言うもおぞましいカオスの生物の冒涜的な掛け合わせにより生まれました。", 100, 129, 130, 30 },
+#else
+{ "You were produced by a magical experiment.  ", 30, 129, 130, 40 },
+{ "In your childhood, you were stupid enough to stick your head in raw Logrus.  ",
+50, 129, 130, 50 },
+{ "A Demon Lord of Chaos decided to have some fun, and so he created you.  ",
+60, 129, 130, 60 },
+{ "You are the magical crossbreed of an animal and a man.  ", 75, 129, 130, 50 },
+{ "You are the blasphemous crossbreed of unspeakable creatures of chaos.  ", 100, 129, 130, 30 },
+#endif
+
+
+
+#ifdef JP
+{ "あなたは緑色の爬虫類の目",              60, 130, 131, 50 },
+{ "あなたは黒い鳥の目",                    85, 130, 131, 50 },
+{ "あなたはオレンジ色の猫の目",            99, 130, 131, 50 },
+{ "あなたは燃えるような悪魔の目",          100, 130, 131, 55 },
+#else
+{ "You have green reptilian eyes, ",              60, 130, 131, 50 },
+{ "You have the black eyes of a bird, ",              85, 130, 131, 50 },
+{ "You have the orange eyes of a cat, ",               99, 130, 131, 50 },
+{ "You have the fiery eyes of a demon, ",             100, 130, 131, 55 },
+#endif
+
+
+#ifdef JP
+
+{ "と髪のない頭を持ち、",                 10, 131, 133, 50 },
+{ "をしていて、汚い",                     33, 131, 132, 50 },
+{ "をしていて、みすぼらしい",             66, 131, 132, 50 },
+{ "をしていて、てかった",                100, 131, 132, 50 },
+#else
+{ "no hair at all, ",                 10, 131, 133, 50 },
+{ "dirty ",                           33, 131, 132, 50 },
+{ "mangy ",                           66, 131, 132, 50 },
+{ "oily ",                           100, 131, 132, 50 },
+#endif
+
+
+#ifdef JP
+
+{ "茶色の毛皮と",                    33, 132, 133, 50 },
+{ "灰色の毛皮と",                    66, 132, 133, 50 },
+{ "白い毛皮と",                     100, 132, 133, 50 },
+#else
+{ "brown fur, ",                    33, 132, 133, 50 },
+{ "gray fur, ",                    66, 132, 133, 50 },
+{ "albino fur, ",                  100, 132, 133, 50 },
+#endif
+
+
+#ifdef JP
+{ "山羊の蹄があります。",      50, 133, 0, 50 },
+{ "人間の足が生えています。",  75, 133, 0, 50 },
+{ "鳥の足が生えています。",    85, 133, 0, 50 },
+{ "爬虫類の足が生えています。",90, 133, 0, 50 },
+{ "牛の足が生えています。",    95, 133, 0, 50 },
+{ "猫の足が生えています。",    97, 133, 0, 50 },
+{ "犬の足が生えています。",   100, 133, 0, 50 },
+
+{ "あなたは", 100, 134, 120, 50 },
+#else
+{ "and the hooves of a goat.",      50, 133, 0, 50 },
+{ "and human feet.",        75, 133, 0, 50 },
+{ "and bird's feet.",       85, 133, 0, 50 },
+{ "and reptilian feet.",    90, 133, 0, 50 },
+{ "and bovine feet.",       95, 133, 0, 50 },
+{ "and feline feet.",       97, 133, 0, 50 },
+{ "and canine feet.",       100, 133, 0, 50 },
+
+{ "You have ", 100, 134, 120, 50 },
+#endif
+
+
+#ifdef JP
+{ "行方不明の子です。", 25, 138, 139, 40 },
+{ "さまよう子です。", 50, 138, 139, 50 },
+{ "唯一の子です。", 75, 138, 139, 60 },
+{ "愛されている子です。", 100, 138, 139, 70 },
+#else
+{ "You are the lost offspring of ", 25, 137, 138, 40 },
+{ "You are the wandering offspring of ", 50, 137, 138, 50 },
+{ "You are the only offspring of ", 75, 137, 138, 60 },
+{ "You are the beloved offspring of ", 100, 137, 138, 70 },
+#endif
+
+
+#ifdef JP
+{ "あなたは名も知れぬエントの", 10, 137, 138, 35 },
+{ "あなたは孤独なエントの", 35, 137, 138, 50 },
+{ "あなたはエントの一団の一員の", 55, 137, 138, 60 },
+{ "あなたは繁栄しているエントの社会のリーダーの", 70, 137, 138, 70 },
+{ "あなたはエントの森の長の", 81, 137, 138, 80 },
+{ "あなたは尊敬されているエントの賢者の", 91, 137, 138, 90 },
+{ "あなたは今では追憶の中にしかいないエント女の", 96, 137, 138, 100 },
+{ "あなたはファンゴルンその人の", 100, 137, 138, 110 },
+#else
+{ "an Ent whose name you have no recollection of.  ", 10, 138, 139, 35 },
+{ "a solitary Ent.  ", 35, 138, 139, 50 },
+{ "a member of a farflung Entish band.  ", 55, 138, 139, 60 },
+{ "a leader of a prosperous community of Ents.  ", 70, 138, 139, 70 },
+{ "an Entish Forestwarden.  ", 81, 138, 139, 80 },
+{ "a respected Entish sage.  ", 91, 138, 139, 90 },
+{ "an Entwife whose memory men cherish.  ", 96, 138, 139, 100 },
+{ "Fangorn himself.  ", 100, 138, 139, 110 },
+#endif
+
+#ifdef JP
+{ "あなたは", 100, 139, 140, 50 },
+#else
+{ "You have ", 100, 139, 140, 50 },
+#endif
+
+#ifdef JP
+{ "三本の指を持ち、", 5, 140, 141, 50 },
+{ "四本の指を持ち、", 20, 140, 141, 50 },
+{ "五本の指を持ち、", 40, 140, 141, 50 },
+{ "六本の指を持ち、", 60, 140, 141, 50 },
+{ "七本の指を持ち、", 80, 140, 141, 50 },
+{ "八本の指を持ち、", 95, 140, 141, 50 },
+{ "九本の指を持ち、", 100, 140, 141, 50 },
+#else
+{ "three fingers and toes, and are covered in ", 5, 140, 141, 50 },
+{ "four fingers and toes, and are covered in ", 20, 140, 141, 50 },
+{ "five fingers and toes, and are covered in ", 40, 140, 141, 50 },
+{ "six fingers and toes, and are covered in ", 60, 140, 141, 50 },
+{ "seven fingers and toes, and are covered in ", 80, 140, 141, 50 },
+{ "eight fingers and toes, and are covered in ", 95, 140, 141, 50 },
+{ "nine fingers and toes, and are covered in ", 100, 140, 141, 50 },
+#endif
+#ifdef JP
+{ "茶色い鱗状の肌に覆われています。", 10, 141, 0, 50 },
+{ "茶色の荒い肌に覆われています。", 20, 141, 0, 50 },
+{ "灰色のなめらかな肌に覆われています。", 30, 141, 0, 50 },
+{ "深いグリーンの肌に覆われています。", 40, 141, 0, 50 },
+{ "苔で覆われた肌をしています。", 50, 141, 0, 50 },
+{ "深いブラウンの肌に覆われています。", 60, 141, 0, 50 },
+{ "パールブラウンのパサパサの肌に覆われています。", 70, 141, 0, 50 },
+{ "チョコレート色の豊かな肌に覆われています。", 80, 141, 0, 50 },
+{ "黒い筋状の肌に覆われています。", 90, 141, 0, 50 },
+{ "ほとんどひからびた、厚い肌に覆われています。", 100, 141, 0, 50 },
+#else
+{ "scaly brown skin.", 10, 141, 0, 50 },
+{ "rough brown skin.", 20, 141, 0, 50 },
+{ "smooth grey skin.", 30, 141, 0, 50 },
+{ "dark green skin.", 40, 141, 0, 50 },
+{ "mossy skin.", 50, 141, 0, 50 },
+{ "deep brown skin.", 60, 141, 0, 50 },
+{ "pale brown, flaky skin.", 70, 141, 0, 50 },
+{ "rich chocolate-colored skin.", 80, 141, 0, 50 },
+{ "ridged black skin.", 90, 141, 0, 50 },
+{ "thick, almost corky skin.", 100, 141, 0, 50 },
+#endif
+
+#ifdef JP
+{ "あなたは天界の主人です。", 100, 142, 143, 80 },
+{ "あなたは悪を滅ぼすためにこの地に送られてきました。", 100, 143, 144, 80 },
+{ "この目的を成し遂げるまでは休むことは許されません。", 100, 144, 0, 80 },
+#else
+{ "You are of the blessed host of heaven.  ", 100, 142, 143, 80 },
+{ "You have been sent to earth to eradicate the wicked, ", 100, 143, 144, 80 },
+{ "and shall not rest until you have succeeded.", 100, 144, 0, 80 },
+#endif
+
+#ifdef JP
+{ "あなたは地獄の呪われた子です。", 100, 145, 146, 20 },
+{ "あなたはグレーター・デーモンの気まぐれによって生まれました。", 100, 146, 147, 20 },
+{ "あなたは復讐の機会をうかがっています。", 100, 147, 0, 20 },
+#else
+{ "You are of the cursed spawn of hell. ", 100, 145, 146, 20 },
+{ "You have been cast out by the whim of the greater demons, ", 100, 146, 147, 20 },
+{ "and now seek revenge.", 100, 147, 0, 20 },
+#endif
+
+
+
+#ifdef JP
+{ "あなたは素性の知れない",  5, 148, 149, 25 },
+{ "あなたは捕虜の", 20, 148, 149, 35 },
+{ "あなたは戦士の", 40, 148, 149, 45 },
+{ "あなたはレンジャーの", 50, 148, 149, 50 },
+{ "あなたは書記の", 70, 148, 149, 65 },
+{ "あなたは魔女の", 83, 148, 149, 75 },
+{ "あなたは錬金術師の", 93, 148, 149, 90 },
+{ "あなたは貴族の女性の", 98, 148, 149, 110 },
+{ "あなたは女王の", 100, 148, 149, 140 },
+#else
+{ "whose identity you are uncertain of.",  5, 149, 8, 25 },
+{ "Captive.  ", 20, 149, 150, 35 },
+{ "Fighter.  ", 40, 149, 150, 45 },
+{ "Ranger.  ", 50, 149, 150, 50 },
+{ "Scribe.  ", 70, 149, 150, 65 },
+{ "Witch.  ", 83, 149, 150, 75 },
+{ "Alchemist.  ", 93, 149, 150, 90 },
+{ "Lady.  ", 98, 149, 150, 110 },
+{ "Queen.  ", 100, 149, 150, 140 },
+#endif
+#ifdef JP
+{ "影フェアリーの私生児です。", 10, 149, 150, 35 },
+{ "影フェアリーの幾人かの子供のうちの一人です。", 30, 149, 150, 45 },
+{ "影フェアリーの第二子です。", 55, 149, 150, 50 },
+{ "影フェアリーの長子です。", 80, 149, 150, 55 },
+{ "影フェアリーの一粒種です。", 100, 149, 150, 60 },
+#else
+{ "You are the bastard child of a Shadow-Fairy ", 10, 148, 149, 35 },
+{ "You are one of several children of a Shadow-Fairy ", 30, 148, 149, 45 },
+{ "You are the second child of a Shadow-Fairy ", 55, 148, 149, 50 },
+{ "You are the first child of a Shadow-Fairy ", 80, 148, 149, 55 },
+{ "You are the only child of a Shadow-Fairy ", 100, 148, 149, 60 },
+#endif
+
+
+#ifdef JP
+{ "あなたは黒い瞳と", 10, 150, 151, 50 },
+{ "あなたは深いブラウンの瞳と", 25, 50, 151, 50 },
+{ "あなたはブラウンの瞳と", 60, 150, 151, 50 },
+{ "あなたは淡い色の瞳と", 70, 150, 151, 50 },
+{ "あなたはグリーンの瞳と", 80, 150, 151, 50 },
+{ "あなたは青い瞳と", 90, 150, 151, 50 },
+{ "あなたはブルーグレイの瞳と", 100, 150, 151, 50 },
+#else
+{ "You have black eyes, straight ", 10, 150, 151, 50 },
+{ "You have dark brown eyes, straight ", 25, 50, 151, 50 },
+{ "You have brown eyes, straight ", 60, 150, 151, 50 },
+{ "You have hazel eyes, straight ", 70, 150, 151, 50 },
+{ "You have green eyes, straight ", 80, 150, 151, 50 },
+{ "You have blue eyes, straight ", 90, 150, 151, 50 },
+{ "You have blue-gray eyes, straight ", 100, 150, 151, 50 },
+#endif
+
+#ifdef JP
+{ "グレーの髪を持ち、", 30, 152, 153, 50 },
+{ "純白の髪を持ち、", 70, 152, 153, 50 },
+{ "パールイエローの髪を持ち、", 80, 152, 153, 50 },
+{ "白がかった灰色の髪を持ち、", 90, 152, 153, 50 },
+{ "パールブラウンの髪を持ち、", 100, 152, 153, 50 },
+#else
+{ "grey hair ", 30, 151, 152, 50 },
+{ "pure white hair ", 70, 151, 152, 50 },
+{ "pale yellow hair ", 80, 151, 152, 50 },
+{ "grey-white hair ", 90, 151, 152, 50 },
+{ "pale brown hair ", 100, 151, 152, 50 },
+#endif
+
+#ifdef JP
+{ "わずかに肩にかかるくらいのなめらかな", 30, 151, 152, 50 },
+{ "腕まで届くくらいのなめらかな", 60, 151, 152, 55 },
+{ "腰まであるなめらかな", 90, 151, 152, 60 },
+{ "頭から足まで輝く滝のようになめらかな", 100, 151, 152, 75 },
+#else
+{ "that barely covers your shoulders, ", 30, 152, 153, 50 },
+{ "that reaches to your arms, ", 60, 152, 153, 55 },
+{ "that flows down to your waist, ", 90, 152, 153, 60 },
+{ "that forms a shining waterfall from head to foot, ", 100, 152, 153, 75 },
+#endif
+
+#ifdef JP
+{ "透き通るような白い肌をしています。", 20, 153, 0, 50 },
+{ "ミルク色の肌をしています。", 35, 153, 0, 50 },
+{ "真珠色の肌をしています。", 50, 153, 0, 50 },
+{ "青白い肌をしています。", 85, 153, 0, 50 },
+{ "白い肌をしています。", 100, 153, 0, 50 },
+#else
+{ "and an extremely fair complexion.", 20, 153, 0, 50 },
+{ "and a milky complexion.", 35, 153, 0, 50 },
+{ "and a pearly complexion.", 50, 153, 0, 50 },
+{ "and a pale complexion.", 85, 153, 0, 50 },
+{ "and an utterly white complexion.", 100, 153, 0, 50 },
+#endif
+
+#ifdef JP
+{ "あなたは普段ザクザクデザートで遊んでいる、", 4, 154, 159, 50 },
+{ "あなたは普段グラグラタワーで遊んでいる、", 8, 154, 159, 50 },
+{ "あなたは普段ホヘホヘ峡谷で遊んでいる、", 12, 154, 159, 50 },
+{ "あなたは普段ドプドプ池で遊んでいる、", 16, 154, 159, 50 },
+{ "あなたは普段テクテク雑技場で遊んでいる、", 20, 154, 159, 50 },
+{ "あなたは普段フムフム畑で遊んでいる、", 24, 154, 159, 50 },
+{ "あなたは普段クノクノ滝で遊んでいる、", 28, 154, 159, 50 },
+{ "あなたは普段クリクリ川で遊んでいる、", 32, 154, 159, 50 },
+{ "あなたは普段テリテリキャンプ場で遊んでいる、", 36, 154, 159, 50 },
+{ "あなたは普段クター像前で遊んでいる、", 40, 154, 159, 50 },
+{ "あなたは普段テクノ湯で遊んでいる、", 44, 154, 159, 50 },
+{ "あなたは普段テクノアイランドで遊んでいる、", 48, 154, 159, 50 },
+{ "あなたは普段テクノマリンで遊んでいる、", 52, 154, 159, 50 },
+{ "あなたは普段テクノドームで遊んでいる、", 56, 154, 159, 50 },
+{ "あなたは普段テクノホールで遊んでいる、", 60, 154, 159, 50 },
+{ "あなたは普段テクノ高原で遊んでいる、", 64, 154, 159, 50 },
+{ "あなたは普段テクノ市民会館で遊んでいる、", 68, 154, 159, 50 },
+{ "あなたは普段テクノ公園で遊んでいる、", 72, 154, 159, 50 },
+{ "あなたは普段スイスイアルプスで遊んでいる、", 76, 154, 159, 65 },
+{ "あなたは普段ヒソヒソ森で遊んでいる、", 80, 154, 159, 65 },
+{ "あなたは普段テクノ生態研究所で遊んでいる、", 84, 154, 159, 65 },
+{ "あなたは普段テクノロケット発射台で遊んでいる、", 88, 154, 159, 65 },
+{ "あなたは普段チャイナウォールで遊んでいる、", 92, 154, 159, 65 },
+{ "あなたは普段スペースウォールで遊んでいる、", 96, 154, 159, 70 },
+{ "あなたは普段テクノリゾートホテルで遊んでいる、", 100, 154, 159, 75 },
+
+{ "普通のクターです。", 70, 159, 160, 50 },
+{ "みんなが頼りにしている親クターです。", 85, 159, 160, 65 },
+{ "笹が大好物なパンダクターです。", 92, 159, 161, 75 },
+{ "とても珍しいトラクターです。", 96, 159, 162, 80 },
+{ "とても珍しいピカクターです。", 100, 159, 163, 90 },
+
+{ "あなたは赤色の毛をもち、", 6, 160, 164, 50 },
+{ "あなたはクリーム色の毛をもち、", 12, 160, 164, 50 },
+{ "あなたは黄土色の毛をもち、", 18, 160, 164, 50 },
+{ "あなたは黄色の毛をもち、", 24, 160, 164, 50 },
+{ "あなたは黄緑色の毛をもち、", 30, 160, 164, 50 },
+{ "あなたは抹茶色の毛をもち、", 36, 160, 164, 50 },
+{ "あなたは濃い緑色の毛をもち、", 42, 160, 164, 50 },
+{ "あなたは青緑色の毛をもち、", 48, 160, 164, 50 },
+{ "あなたは水色の毛をもち、", 54, 160, 164, 50 },
+{ "あなたは薄い紫色の毛をもち、", 60, 160, 164, 50 },
+{ "あなたは紫色の毛をもち、", 65, 160, 164, 50 },
+{ "あなたは茜色の毛をもち、", 70, 160, 164, 60 },
+{ "あなたはピンク色の毛をもち、", 75, 160, 164, 60 },
+{ "あなたは白色の毛をもち、", 80, 160, 164, 60 },
+{ "あなたは青色の毛をもち、", 85, 160, 164, 65 },
+{ "あなたは黒色の毛をもち、", 90, 160, 164, 65 },
+{ "あなたは緑色の毛をもち、", 95, 160, 164, 65 },
+{ "あなたは橙色の毛をもち、", 100, 160, 164, 70 },
+{ "あなたはパンダのような白と黒の斑模様の毛をもち、", 100, 161, 164, 70 },
+{ "あなたはトラのような黄と黒の縞模様の毛をもち、", 100, 162, 164, 70 },
+{ "あなたは明るく輝いていて、", 100, 163, 164, 70 },
+
+{ "マフラーを宝物にしています。", 4, 164, 0, 50 },
+{ "ライターを宝物にしています。", 8, 164, 0, 50 },
+{ "リモコンを宝物にしています。", 12, 164, 0, 50 },
+{ "手ぬぐいを宝物にしています。", 16, 164, 0, 50 },
+{ "牛乳ビンを宝物にしています。", 20, 164, 0, 50 },
+{ "ビンのふたを宝物にしています。", 24, 164, 0, 50 },
+{ "野球帽を宝物にしています。", 28, 164, 0, 50 },
+{ "浮き輪を宝物にしています。", 32, 164, 0, 50 },
+{ "バットを宝物にしています。", 36, 164, 0, 50 },
+{ "大根を宝物にしています。", 40, 164, 0, 50 },
+{ "リュックサックを宝物にしています。", 44, 164, 0, 50 },
+{ "将棋盤を宝物にしています。", 48, 164, 0, 50 },
+{ "将棋の駒を宝物にしています。", 52, 164, 0, 50 },
+{ "傘を宝物にしています。", 56, 164, 0, 50 },
+{ "やかんを宝物にしています。", 60, 164, 0, 50 },
+{ "ほうきを宝物にしています。", 64, 164, 0, 50 },
+{ "ティッシュ箱を宝物にしています。", 68, 164, 0, 50 },
+{ "ダルマを宝物にしています。", 71, 164, 0, 50 },
+{ "ニンジンを宝物にしています。", 75, 164, 0, 60 },
+{ "ホルンを宝物にしています。", 79, 164, 0, 60 },
+{ "みかん箱を宝物にしています。", 83, 164, 0, 60 },
+{ "宝箱を宝物にしています。", 86, 164, 0, 60 },
+{ "テンガロンハットを宝物にしています。", 90, 164, 0, 60 },
+{ "アフロを宝物にしています。", 94, 164, 0, 65 },
+{ "しゃけを宝物にしています。", 97, 164, 0, 65 },
+{ "39ボウヤを宝物にしています。", 100, 164, 0, 70 },
+
+#else
+{ "You are a normal Kutar.  You have orange colored fur.", 65, 154, 0, 55 },
+{ "You are a father Kutar, the patriarch of many normal Kutars.  You have green colored fur.", 95, 154, 0, 65 },
+{ "You are a very rare type of Kutar, famed for the yellow and black stripes on your body.", 100, 154, 0, 80 },
+#endif
+
+#ifdef JP
+{ "あなたはあるプロジェクトの試作品として", 10, 155, 156, 50 },
+{ "あなたは子供を教育するために", 30, 155, 156, 60 },
+{ "あなたは身の回りの世話をするために", 50, 155, 156, 70 },
+{ "あなたは亡くなった子供の身代わりとして", 60, 155, 156, 10 },
+{ "あなたは戦闘用アンドロイドとして", 90, 155, 156, 20 },
+{ "あなたは世界征服のための道具として", 100, 155, 156, 10 },
+
+{ "気の狂った科学者によって作られました。", 20, 156, 157, 10 },
+{ "企業の研究所で作られました。", 50, 156, 157, 80 },
+{ "平和を願う科学者によって作られました。", 85, 156, 157, 50 },
+{ "一人の天才少年によって作られました。", 90, 156, 157, 30 },
+{ "22世紀からやって来ました。", 100, 156, 157, 100 },
+
+{ "ネコのような形をして", 15, 157, 158, 40 },
+{ "イヌのような形をして", 30, 157, 158, 30 },
+{ "クターのような形をして", 45, 157, 158, 20 },
+{ "人間のような形をして", 70, 157, 158, 60 },
+{ "ドワーフのような形をして", 80, 157, 158, 70 },
+{ "ホビットのような形をして", 90, 157, 158, 70 },
+{ "エルフのような形をして", 100, 157, 158,  80 },
+
+{ "いますが、耳はネズミにかじられてなくなっています。", 5, 158, 0, 20 },
+{ "いると作者は主張していますが、とてもそうは見えません。", 20, 158, 0, 30 },
+{ "います。", 85, 158, 0, 50 },
+{ "いて、本人は自分のことを本物だと信じています。", 95, 158, 0, 50 },
+{ "いて、非常によくできているので本物と見分けがつきません。", 100, 158, 0, 100 },
+#else
+{ "You were created by a mad scientist ", 20, 155, 156, 10 },
+{ "You were created in a corporate laboratory ", 50, 155, 156, 80 },
+{ "You were created by a peace-loving scientist ", 85, 155, 156, 50 },
+{ "You were created by a boy genius ", 90, 155, 156, 30 },
+{ "You have come from the twenty-second century ", 100, 155, 156, 100 },
+
+{ "as a project prototype. ", 10, 156, 157, 50 },
+{ "to educate children. ", 30, 156, 157, 60 },
+{ "to look after someone. ", 50, 156, 157, 70 },
+{ "as a substitute for a dead child. ", 60, 156, 157, 10 },
+{ "as a combat trooper. ", 90, 156, 157, 20 },
+{ "as a tool for conquest of the world. ", 100, 156, 157, 10 },
+
+
+{ "You have a cat-like appearance", 15, 157, 158, 40 },
+{ "You have a dog-like appearance", 30, 157, 158, 30 },
+{ "You have a Kutar-like appearance", 45, 157, 158, 20 },
+{ "You have a human-like appearance", 70, 157, 158, 60 },
+{ "You have a dwarf-like appearance", 80, 157, 158, 70 },
+{ "You have a hobbit-like appearance", 90, 157, 158, 70 },
+{ "You have a elf-like appearance", 100, 157, 158,  80 },
+
+{ ", but your ears have been eaten by mice, and no trace of them remains.", 5, 158, 0, 20 },
+{ "... at least your creator thinks so.  Most people disagree.", 20, 158, 0, 30 },
+{ ".", 85, 158, 0, 50 },
+{ ", and you firmly believe that you are a real one.", 95, 158, 0, 50 },
+{ ", and you are almost indistinguishable from a real one.", 100, 158, 0, 100 },
+#endif
+};
index dec42d0..ab751df 100644 (file)
-#include "angband.h"\r
-#include "monster-hook.h"\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\83N\83G\83X\83g\82Ì\93¢\94°\91Î\8fÛ\82É\90¬\82è\93¾\82é\82©\82ð\95Ô\82· / Hook function for quest monsters\r
-* @param r_idx \83\82\83\93\83X\83^\81[\82h\82c\r
-* @return \93¢\94°\91Î\8fÛ\82É\82Å\82«\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
-*/\r
-bool mon_hook_quest(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       /* Random quests are in the dungeon */\r
-       if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;\r
-\r
-       /* No random quests for aquatic monsters */\r
-       if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;\r
-\r
-       /* No random quests for multiplying monsters */\r
-       if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;\r
-\r
-       /* No quests to kill friendly monsters */\r
-       if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;\r
-\r
-       return TRUE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\83_\83\93\83W\83\87\83\93\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \83_\83\93\83W\83\87\83\93\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_dungeon(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (!(r_ptr->flags8 & RF8_WILD_ONLY))\r
-               return TRUE;\r
-       else\r
-       {\r
-               dungeon_info_type *d_ptr = &d_info[dungeon_type];\r
-               if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&\r
-                       (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;\r
-               return FALSE;\r
-       }\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\8aC\97m\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \8aC\97m\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_ocean(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (r_ptr->flags8 & RF8_WILD_OCEAN)\r
-               return TRUE;\r
-       else\r
-               return FALSE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\8aC\8aÝ\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \8aC\8aÝ\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_shore(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (r_ptr->flags8 & RF8_WILD_SHORE)\r
-               return TRUE;\r
-       else\r
-               return FALSE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\8dr\92n\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \8dr\92n\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_waste(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))\r
-               return TRUE;\r
-       else\r
-               return FALSE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\92¬\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \8dr\92n\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_town(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))\r
-               return TRUE;\r
-       else\r
-               return FALSE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\90X\97Ñ\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \90X\97Ñ\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_wood(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))\r
-               return TRUE;\r
-       else\r
-               return FALSE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\89Î\8eR\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \89Î\8eR\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_volcano(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (r_ptr->flags8 & RF8_WILD_VOLCANO)\r
-               return TRUE;\r
-       else\r
-               return FALSE;\r
-}\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\8eR\92n\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \8eR\92n\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_mountain(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)\r
-               return TRUE;\r
-       else\r
-               return FALSE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\91\90\8c´\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \90X\97Ñ\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_grass(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))\r
-               return TRUE;\r
-       else\r
-               return FALSE;\r
-}\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\90[\82¢\90\85\92n\8c`\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \90[\82¢\90\85\92n\8c`\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_deep_water(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (!mon_hook_dungeon(r_idx)) return FALSE;\r
-\r
-       if (r_ptr->flags7 & RF7_AQUATIC)\r
-               return TRUE;\r
-       else\r
-               return FALSE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\90ó\82¢\90\85\92n\8c`\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \90ó\82¢\90\85\92n\8c`\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_shallow_water(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (!mon_hook_dungeon(r_idx)) return FALSE;\r
-\r
-       if (r_ptr->flags2 & RF2_AURA_FIRE)\r
-               return FALSE;\r
-       else\r
-               return TRUE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\97n\8aâ\92n\8c`\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \97n\8aâ\92n\8c`\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_lava(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (!mon_hook_dungeon(r_idx)) return FALSE;\r
-\r
-       if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||\r
-               (r_ptr->flags7 & RF7_CAN_FLY)) &&\r
-               !(r_ptr->flags3 & RF3_AURA_COLD))\r
-               return TRUE;\r
-       else\r
-               return FALSE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82ª\92Ê\8fí\82Ì\8f°\92n\8c`\82É\8fo\8c»\82·\82é\82©\82Ç\82¤\82©\82ð\95Ô\82·\r
-* @param r_idx \94»\92è\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8eí\91°ID\r
-* @return \92Ê\8fí\82Ì\8f°\92n\8c`\82É\8fo\8c»\82·\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool mon_hook_floor(MONRACE_IDX r_idx)\r
-{\r
-       monster_race *r_ptr = &r_info[r_idx];\r
-\r
-       if (!(r_ptr->flags7 & RF7_AQUATIC) ||\r
-               (r_ptr->flags7 & RF7_CAN_FLY))\r
-               return TRUE;\r
-       else\r
-               return FALSE;\r
-}\r
+#include "angband.h"
+#include "monster-hook.h"
+
+
+/*!
+* @brief モンスターがクエストの討伐対象に成り得るかを返す / Hook function for quest monsters
+* @param r_idx モンスターID
+* @return 討伐対象にできるならTRUEを返す。
+*/
+bool mon_hook_quest(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       /* Random quests are in the dungeon */
+       if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
+
+       /* No random quests for aquatic monsters */
+       if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
+
+       /* No random quests for multiplying monsters */
+       if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
+
+       /* No quests to kill friendly monsters */
+       if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
+
+       return TRUE;
+}
+
+
+/*!
+* @brief モンスターがダンジョンに出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return ダンジョンに出現するならばTRUEを返す
+*/
+bool mon_hook_dungeon(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (!(r_ptr->flags8 & RF8_WILD_ONLY))
+               return TRUE;
+       else
+       {
+               dungeon_info_type *d_ptr = &d_info[dungeon_type];
+               if ((d_ptr->mflags8 & RF8_WILD_MOUNTAIN) &&
+                       (r_ptr->flags8 & RF8_WILD_MOUNTAIN)) return TRUE;
+               return FALSE;
+       }
+}
+
+
+/*!
+* @brief モンスターが海洋に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 海洋に出現するならばTRUEを返す
+*/
+bool mon_hook_ocean(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (r_ptr->flags8 & RF8_WILD_OCEAN)
+               return TRUE;
+       else
+               return FALSE;
+}
+
+
+/*!
+* @brief モンスターが海岸に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 海岸に出現するならばTRUEを返す
+*/
+bool mon_hook_shore(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (r_ptr->flags8 & RF8_WILD_SHORE)
+               return TRUE;
+       else
+               return FALSE;
+}
+
+
+/*!
+* @brief モンスターが荒地に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 荒地に出現するならばTRUEを返す
+*/
+bool mon_hook_waste(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (r_ptr->flags8 & (RF8_WILD_WASTE | RF8_WILD_ALL))
+               return TRUE;
+       else
+               return FALSE;
+}
+
+
+/*!
+* @brief モンスターが町に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 荒地に出現するならばTRUEを返す
+*/
+bool mon_hook_town(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (r_ptr->flags8 & (RF8_WILD_TOWN | RF8_WILD_ALL))
+               return TRUE;
+       else
+               return FALSE;
+}
+
+
+/*!
+* @brief モンスターが森林に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 森林に出現するならばTRUEを返す
+*/
+bool mon_hook_wood(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (r_ptr->flags8 & (RF8_WILD_WOOD | RF8_WILD_ALL))
+               return TRUE;
+       else
+               return FALSE;
+}
+
+
+/*!
+* @brief モンスターが火山に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 火山に出現するならばTRUEを返す
+*/
+bool mon_hook_volcano(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (r_ptr->flags8 & RF8_WILD_VOLCANO)
+               return TRUE;
+       else
+               return FALSE;
+}
+
+/*!
+* @brief モンスターが山地に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 山地に出現するならばTRUEを返す
+*/
+bool mon_hook_mountain(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (r_ptr->flags8 & RF8_WILD_MOUNTAIN)
+               return TRUE;
+       else
+               return FALSE;
+}
+
+
+/*!
+* @brief モンスターが草原に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 森林に出現するならばTRUEを返す
+*/
+bool mon_hook_grass(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (r_ptr->flags8 & (RF8_WILD_GRASS | RF8_WILD_ALL))
+               return TRUE;
+       else
+               return FALSE;
+}
+
+/*!
+* @brief モンスターが深い水地形に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 深い水地形に出現するならばTRUEを返す
+*/
+bool mon_hook_deep_water(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (!mon_hook_dungeon(r_idx)) return FALSE;
+
+       if (r_ptr->flags7 & RF7_AQUATIC)
+               return TRUE;
+       else
+               return FALSE;
+}
+
+
+/*!
+* @brief モンスターが浅い水地形に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 浅い水地形に出現するならばTRUEを返す
+*/
+bool mon_hook_shallow_water(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (!mon_hook_dungeon(r_idx)) return FALSE;
+
+       if (r_ptr->flags2 & RF2_AURA_FIRE)
+               return FALSE;
+       else
+               return TRUE;
+}
+
+
+/*!
+* @brief モンスターが溶岩地形に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 溶岩地形に出現するならばTRUEを返す
+*/
+bool mon_hook_lava(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (!mon_hook_dungeon(r_idx)) return FALSE;
+
+       if (((r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK) ||
+               (r_ptr->flags7 & RF7_CAN_FLY)) &&
+               !(r_ptr->flags3 & RF3_AURA_COLD))
+               return TRUE;
+       else
+               return FALSE;
+}
+
+
+/*!
+* @brief モンスターが通常の床地形に出現するかどうかを返す
+* @param r_idx 判定するモンスターの種族ID
+* @return 通常の床地形に出現するならばTRUEを返す
+*/
+bool mon_hook_floor(MONRACE_IDX r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (!(r_ptr->flags7 & RF7_AQUATIC) ||
+               (r_ptr->flags7 & RF7_CAN_FLY))
+               return TRUE;
+       else
+               return FALSE;
+}
index c41fab0..5f40ba9 100644 (file)
-#include "angband.h"\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\8e\9e\8cÀ\83X\83e\81[\83^\83X\82ð\8eæ\93¾\82·\82é\r
-* @return m_idx \83\82\83\93\83X\83^\81[\82Ì\8eQ\8fÆID\r
-* @return mproc_type \83\82\83\93\83X\83^\81[\82Ì\8e\9e\8cÀ\83X\83e\81[\83^\83XID\r
-* @return \8ec\82è\83^\81[\83\93\92l\r
-*/\r
-int get_mproc_idx(MONSTER_IDX m_idx, int mproc_type)\r
-{\r
-       s16b *cur_mproc_list = mproc_list[mproc_type];\r
-       int i;\r
-\r
-       for (i = mproc_max[mproc_type] - 1; i >= 0; i--)\r
-       {\r
-               if (cur_mproc_list[i] == m_idx) return i;\r
-       }\r
-\r
-       return -1;\r
-}\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\8e\9e\8cÀ\83X\83e\81[\83^\83X\83\8a\83X\83g\82ð\92Ç\89Á\82·\82é\r
-* @return m_idx \83\82\83\93\83X\83^\81[\82Ì\8eQ\8fÆID\r
-* @return mproc_type \92Ç\89Á\82µ\82½\82¢\83\82\83\93\83X\83^\81[\82Ì\8e\9e\8cÀ\83X\83e\81[\83^\83XID\r
-* @return \82È\82µ\r
-*/\r
-static void mproc_add(MONSTER_IDX m_idx, int mproc_type)\r
-{\r
-       if (mproc_max[mproc_type] < max_m_idx) mproc_list[mproc_type][mproc_max[mproc_type]++] = (s16b)m_idx;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\8e\9e\8cÀ\83X\83e\81[\83^\83X\83\8a\83X\83g\82ð\8dí\8f\9c\r
-* @return m_idx \83\82\83\93\83X\83^\81[\82Ì\8eQ\8fÆID\r
-* @return mproc_type \8dí\8f\9c\82µ\82½\82¢\83\82\83\93\83X\83^\81[\82Ì\8e\9e\8cÀ\83X\83e\81[\83^\83XID\r
-* @return \82È\82µ\r
-*/\r
-static void mproc_remove(MONSTER_IDX m_idx, int mproc_type)\r
-{\r
-       int mproc_idx = get_mproc_idx(m_idx, mproc_type);\r
-       if (mproc_idx >= 0) mproc_list[mproc_type][mproc_idx] = mproc_list[mproc_type][--mproc_max[mproc_type]];\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\8e\9e\8cÀ\83X\83e\81[\83^\83X\83\8a\83X\83g\82ð\8f\89\8aú\89»\82·\82é / Initialize monster process\r
-* @return \82È\82µ\r
-*/\r
-void mproc_init(void)\r
-{\r
-       monster_type *m_ptr;\r
-       MONSTER_IDX i;\r
-       int cmi;\r
-\r
-       /* Reset "mproc_max[]" */\r
-       for (cmi = 0; cmi < MAX_MTIMED; cmi++) mproc_max[cmi] = 0;\r
-\r
-       /* Process the monsters (backwards) */\r
-       for (i = m_max - 1; i >= 1; i--)\r
-       {\r
-               /* Access the monster */\r
-               m_ptr = &m_list[i];\r
-\r
-               /* Ignore "dead" monsters */\r
-               if (!m_ptr->r_idx) continue;\r
-\r
-               for (cmi = 0; cmi < MAX_MTIMED; cmi++)\r
-               {\r
-                       if (m_ptr->mtimed[cmi]) mproc_add(i, cmi);\r
-               }\r
-       }\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\90\87\96°\8fó\91Ô\92l\82ð\83Z\83b\83g\82·\82é /\r
-* Set "m_ptr->mtimed[MTIMED_CSLEEP]", notice observable changes\r
-* @param m_idx \83\82\83\93\83X\83^\81[\8eQ\8fÆID\r
-* @param v \83Z\83b\83g\82·\82é\92l\r
-* @return \95Ê\93r\8dX\90V\8f\88\97\9d\82ª\95K\97v\82È\8fê\8d\87TRUE\82ð\95Ô\82·\r
-*/\r
-bool set_monster_csleep(MONSTER_IDX m_idx, int v)\r
-{\r
-       monster_type *m_ptr = &m_list[m_idx];\r
-       bool notice = FALSE;\r
-\r
-       /* Hack -- Force good values */\r
-       v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;\r
-\r
-       /* Open */\r
-       if (v)\r
-       {\r
-               if (!MON_CSLEEP(m_ptr))\r
-               {\r
-                       mproc_add(m_idx, MTIMED_CSLEEP);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Shut */\r
-       else\r
-       {\r
-               if (MON_CSLEEP(m_ptr))\r
-               {\r
-                       mproc_remove(m_idx, MTIMED_CSLEEP);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Use the value */\r
-       m_ptr->mtimed[MTIMED_CSLEEP] = (s16b)v;\r
-\r
-       if (!notice) return FALSE;\r
-\r
-       if (m_ptr->ml)\r
-       {\r
-               /* Update health bar as needed */\r
-               if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);\r
-               if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);\r
-       }\r
-\r
-       if (r_info[m_ptr->r_idx].flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);\r
-\r
-       return TRUE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\89Á\91¬\8fó\91Ô\92l\82ð\83Z\83b\83g /\r
-* Set "m_ptr->mtimed[MTIMED_FAST]", notice observable changes\r
-* @param m_idx \83\82\83\93\83X\83^\81[\8eQ\8fÆID\r
-* @param v \83Z\83b\83g\82·\82é\92l\r
-* @return \95Ê\93r\8dX\90V\8f\88\97\9d\82ª\95K\97v\82È\8fê\8d\87TRUE\82ð\95Ô\82·\r
-*/\r
-bool set_monster_fast(MONSTER_IDX m_idx, int v)\r
-{\r
-       monster_type *m_ptr = &m_list[m_idx];\r
-       bool notice = FALSE;\r
-\r
-       /* Hack -- Force good values */\r
-       v = (v > 200) ? 200 : (v < 0) ? 0 : v;\r
-\r
-       /* Open */\r
-       if (v)\r
-       {\r
-               if (!MON_FAST(m_ptr))\r
-               {\r
-                       mproc_add(m_idx, MTIMED_FAST);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Shut */\r
-       else\r
-       {\r
-               if (MON_FAST(m_ptr))\r
-               {\r
-                       mproc_remove(m_idx, MTIMED_FAST);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Use the value */\r
-       m_ptr->mtimed[MTIMED_FAST] = (s16b)v;\r
-\r
-       if (!notice) return FALSE;\r
-\r
-       if ((p_ptr->riding == m_idx) && !p_ptr->leaving) p_ptr->update |= (PU_BONUS);\r
-\r
-       return TRUE;\r
-}\r
-\r
-\r
-/*\r
-* Set "m_ptr->mtimed[MTIMED_SLOW]", notice observable changes\r
-*/\r
-bool set_monster_slow(MONSTER_IDX m_idx, int v)\r
-{\r
-       monster_type *m_ptr = &m_list[m_idx];\r
-       bool notice = FALSE;\r
-\r
-       /* Hack -- Force good values */\r
-       v = (v > 200) ? 200 : (v < 0) ? 0 : v;\r
-\r
-       /* Open */\r
-       if (v)\r
-       {\r
-               if (!MON_SLOW(m_ptr))\r
-               {\r
-                       mproc_add(m_idx, MTIMED_SLOW);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Shut */\r
-       else\r
-       {\r
-               if (MON_SLOW(m_ptr))\r
-               {\r
-                       mproc_remove(m_idx, MTIMED_SLOW);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Use the value */\r
-       m_ptr->mtimed[MTIMED_SLOW] = (s16b)v;\r
-\r
-       if (!notice) return FALSE;\r
-\r
-       if ((p_ptr->riding == m_idx) && !p_ptr->leaving) p_ptr->update |= (PU_BONUS);\r
-\r
-       return TRUE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\9eN\9eO\8fó\91Ô\92l\82ð\83Z\83b\83g /\r
-* Set "m_ptr->mtimed[MTIMED_STUNNED]", notice observable changes\r
-* @param m_idx \83\82\83\93\83X\83^\81[\8eQ\8fÆID\r
-* @param v \83Z\83b\83g\82·\82é\92l\r
-* @return \95Ê\93r\8dX\90V\8f\88\97\9d\82ª\95K\97v\82È\8fê\8d\87TRUE\82ð\95Ô\82·\r
-*/\r
-bool set_monster_stunned(MONSTER_IDX m_idx, int v)\r
-{\r
-       monster_type *m_ptr = &m_list[m_idx];\r
-       bool notice = FALSE;\r
-\r
-       /* Hack -- Force good values */\r
-       v = (v > 200) ? 200 : (v < 0) ? 0 : v;\r
-\r
-       /* Open */\r
-       if (v)\r
-       {\r
-               if (!MON_STUNNED(m_ptr))\r
-               {\r
-                       mproc_add(m_idx, MTIMED_STUNNED);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Shut */\r
-       else\r
-       {\r
-               if (MON_STUNNED(m_ptr))\r
-               {\r
-                       mproc_remove(m_idx, MTIMED_STUNNED);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Use the value */\r
-       m_ptr->mtimed[MTIMED_STUNNED] = (s16b)v;\r
-\r
-       return notice;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\8d¬\97\90\8fó\91Ô\92l\82ð\83Z\83b\83g /\r
-* Set "m_ptr->mtimed[MTIMED_CONFUSED]", notice observable changes\r
-* @param m_idx \83\82\83\93\83X\83^\81[\8eQ\8fÆID\r
-* @param v \83Z\83b\83g\82·\82é\92l\r
-* @return \95Ê\93r\8dX\90V\8f\88\97\9d\82ª\95K\97v\82È\8fê\8d\87TRUE\82ð\95Ô\82·\r
-*/\r
-bool set_monster_confused(MONSTER_IDX m_idx, int v)\r
-{\r
-       monster_type *m_ptr = &m_list[m_idx];\r
-       bool notice = FALSE;\r
-\r
-       /* Hack -- Force good values */\r
-       v = (v > 200) ? 200 : (v < 0) ? 0 : v;\r
-\r
-       /* Open */\r
-       if (v)\r
-       {\r
-               if (!MON_CONFUSED(m_ptr))\r
-               {\r
-                       mproc_add(m_idx, MTIMED_CONFUSED);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Shut */\r
-       else\r
-       {\r
-               if (MON_CONFUSED(m_ptr))\r
-               {\r
-                       mproc_remove(m_idx, MTIMED_CONFUSED);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Use the value */\r
-       m_ptr->mtimed[MTIMED_CONFUSED] = (s16b)v;\r
-\r
-       return notice;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\8b°\8dQ\8fó\91Ô\92l\82ð\83Z\83b\83g /\r
-* Set "m_ptr->mtimed[MTIMED_MONFEAR]", notice observable changes\r
-* @param m_idx \83\82\83\93\83X\83^\81[\8eQ\8fÆID\r
-* @param v \83Z\83b\83g\82·\82é\92l\r
-* @return \95Ê\93r\8dX\90V\8f\88\97\9d\82ª\95K\97v\82È\8fê\8d\87TRUE\82ð\95Ô\82·\r
-*/\r
-bool set_monster_monfear(MONSTER_IDX m_idx, int v)\r
-{\r
-       monster_type *m_ptr = &m_list[m_idx];\r
-       bool notice = FALSE;\r
-\r
-       /* Hack -- Force good values */\r
-       v = (v > 200) ? 200 : (v < 0) ? 0 : v;\r
-\r
-       /* Open */\r
-       if (v)\r
-       {\r
-               if (!MON_MONFEAR(m_ptr))\r
-               {\r
-                       mproc_add(m_idx, MTIMED_MONFEAR);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Shut */\r
-       else\r
-       {\r
-               if (MON_MONFEAR(m_ptr))\r
-               {\r
-                       mproc_remove(m_idx, MTIMED_MONFEAR);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Use the value */\r
-       m_ptr->mtimed[MTIMED_MONFEAR] = (s16b)v;\r
-\r
-       if (!notice) return FALSE;\r
-\r
-       if (m_ptr->ml)\r
-       {\r
-               /* Update health bar as needed */\r
-               if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);\r
-               if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);\r
-       }\r
-\r
-       return TRUE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\96³\93G\8fó\91Ô\92l\82ð\83Z\83b\83g /\r
-* Set "m_ptr->mtimed[MTIMED_INVULNER]", notice observable changes\r
-* @param m_idx \83\82\83\93\83X\83^\81[\8eQ\8fÆID\r
-* @param v \83Z\83b\83g\82·\82é\92l\r
-* @param energy_need TRUE\82È\82ç\82Î\96³\93G\89ð\8f\9c\8e\9e\82É\8ds\93®\83^\81[\83\93\8fÁ\94ï\82ð\8ds\82¤\r
-* @return \95Ê\93r\8dX\90V\8f\88\97\9d\82ª\95K\97v\82È\8fê\8d\87TRUE\82ð\95Ô\82·\r
-*/\r
-bool set_monster_invulner(MONSTER_IDX m_idx, int v, bool energy_need)\r
-{\r
-       monster_type *m_ptr = &m_list[m_idx];\r
-       bool notice = FALSE;\r
-\r
-       /* Hack -- Force good values */\r
-       v = (v > 200) ? 200 : (v < 0) ? 0 : v;\r
-\r
-       /* Open */\r
-       if (v)\r
-       {\r
-               if (!MON_INVULNER(m_ptr))\r
-               {\r
-                       mproc_add(m_idx, MTIMED_INVULNER);\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Shut */\r
-       else\r
-       {\r
-               if (MON_INVULNER(m_ptr))\r
-               {\r
-                       mproc_remove(m_idx, MTIMED_INVULNER);\r
-                       if (energy_need && !p_ptr->wild_mode) m_ptr->energy_need += ENERGY_NEED();\r
-                       notice = TRUE;\r
-               }\r
-       }\r
-\r
-       /* Use the value */\r
-       m_ptr->mtimed[MTIMED_INVULNER] = (s16b)v;\r
-\r
-       if (!notice) return FALSE;\r
-\r
-       if (m_ptr->ml)\r
-       {\r
-               /* Update health bar as needed */\r
-               if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);\r
-               if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);\r
-       }\r
-\r
-       return TRUE;\r
-}\r
-\r
-\r
-static u32b csleep_noise;\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\8ae\8eí\8fó\91Ô\92l\82ð\8e\9e\8aÔ\8co\89ß\82É\82æ\82è\8dX\90V\82·\82é\83T\83u\83\8b\81[\83`\83\93\r
-* @param m_idx \83\82\83\93\83X\83^\81[\8eQ\8fÆID\r
-* @param mtimed_idx \8dX\90V\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8e\9e\8cÀ\83X\83e\81[\83^\83XID\r
-* @return \82È\82µ\r
-*/\r
-static void process_monsters_mtimed_aux(MONSTER_IDX m_idx, int mtimed_idx)\r
-{\r
-       monster_type *m_ptr = &m_list[m_idx];\r
-\r
-       switch (mtimed_idx)\r
-       {\r
-       case MTIMED_CSLEEP:\r
-       {\r
-               monster_race *r_ptr = &r_info[m_ptr->r_idx];\r
-\r
-               /* Assume does not wake up */\r
-               bool test = FALSE;\r
-\r
-               /* Hack -- Require proximity */\r
-               if (m_ptr->cdis < AAF_LIMIT)\r
-               {\r
-                       /* Handle "sensing radius" */\r
-                       if (m_ptr->cdis <= (is_pet(m_ptr) ? ((r_ptr->aaf > MAX_SIGHT) ? MAX_SIGHT : r_ptr->aaf) : r_ptr->aaf))\r
-                       {\r
-                               /* We may wake up */\r
-                               test = TRUE;\r
-                       }\r
-\r
-                       /* Handle "sight" and "aggravation" */\r
-                       else if ((m_ptr->cdis <= MAX_SIGHT) && (player_has_los_bold(m_ptr->fy, m_ptr->fx)))\r
-                       {\r
-                               /* We may wake up */\r
-                               test = TRUE;\r
-                       }\r
-               }\r
-\r
-               if (test)\r
-               {\r
-                       u32b notice = randint0(1024);\r
-\r
-                       /* Nightmare monsters are more alert */\r
-                       if (ironman_nightmare) notice /= 2;\r
-\r
-                       /* Hack -- See if monster "notices" player */\r
-                       if ((notice * notice * notice) <= csleep_noise)\r
-                       {\r
-                               /* Hack -- amount of "waking" */\r
-                               /* Wake up faster near the player */\r
-                               int d = (m_ptr->cdis < AAF_LIMIT / 2) ? (AAF_LIMIT / m_ptr->cdis) : 1;\r
-\r
-                               /* Hack -- amount of "waking" is affected by speed of player */\r
-                               d = (d * SPEED_TO_ENERGY(p_ptr->pspeed)) / 10;\r
-                               if (d < 0) d = 1;\r
-\r
-                               /* Monster wakes up "a little bit" */\r
-\r
-                               /* Still asleep */\r
-                               if (!set_monster_csleep(m_idx, MON_CSLEEP(m_ptr) - d))\r
-                               {\r
-                                       /* Notice the "not waking up" */\r
-                                       if (is_original_ap_and_seen(m_ptr))\r
-                                       {\r
-                                               /* Hack -- Count the ignores */\r
-                                               if (r_ptr->r_ignore < MAX_UCHAR) r_ptr->r_ignore++;\r
-                                       }\r
-                               }\r
-\r
-                               /* Just woke up */\r
-                               else\r
-                               {\r
-                                       /* Notice the "waking up" */\r
-                                       if (m_ptr->ml)\r
-                                       {\r
-                                               char m_name[80];\r
-\r
-                                               /* Acquire the monster name */\r
-                                               monster_desc(m_name, m_ptr, 0);\r
-\r
-                                               /* Dump a message */\r
-                                               msg_format(_("%^s\82ª\96Ú\82ð\8ao\82Ü\82µ\82½\81B", "%^s wakes up."), m_name);\r
-                                       }\r
-\r
-                                       if (is_original_ap_and_seen(m_ptr))\r
-                                       {\r
-                                               /* Hack -- Count the wakings */\r
-                                               if (r_ptr->r_wake < MAX_UCHAR) r_ptr->r_wake++;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       case MTIMED_FAST:\r
-               /* Reduce by one, note if expires */\r
-               if (set_monster_fast(m_idx, MON_FAST(m_ptr) - 1))\r
-               {\r
-                       if (is_seen(m_ptr))\r
-                       {\r
-                               char m_name[80];\r
-\r
-                               /* Acquire the monster name */\r
-                               monster_desc(m_name, m_ptr, 0);\r
-\r
-                               /* Dump a message */\r
-                               msg_format(_("%^s\82Í\82à\82¤\89Á\91¬\82³\82ê\82Ä\82¢\82È\82¢\81B", "%^s is no longer fast."), m_name);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case MTIMED_SLOW:\r
-               /* Reduce by one, note if expires */\r
-               if (set_monster_slow(m_idx, MON_SLOW(m_ptr) - 1))\r
-               {\r
-                       if (is_seen(m_ptr))\r
-                       {\r
-                               char m_name[80];\r
-\r
-                               /* Acquire the monster name */\r
-                               monster_desc(m_name, m_ptr, 0);\r
-\r
-                               /* Dump a message */\r
-                               msg_format(_("%^s\82Í\82à\82¤\8c¸\91¬\82³\82ê\82Ä\82¢\82È\82¢\81B", "%^s is no longer slow."), m_name);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case MTIMED_STUNNED:\r
-       {\r
-               int rlev = r_info[m_ptr->r_idx].level;\r
-\r
-               /* Recover from stun */\r
-               if (set_monster_stunned(m_idx, (randint0(10000) <= rlev * rlev) ? 0 : (MON_STUNNED(m_ptr) - 1)))\r
-               {\r
-                       /* Message if visible */\r
-                       if (is_seen(m_ptr))\r
-                       {\r
-                               char m_name[80];\r
-\r
-                               /* Acquire the monster name */\r
-                               monster_desc(m_name, m_ptr, 0);\r
-\r
-                               /* Dump a message */\r
-                               msg_format(_("%^s\82Í\9eN\9eO\8fó\91Ô\82©\82ç\97§\82¿\92¼\82Á\82½\81B", "%^s is no longer stunned."), m_name);\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       case MTIMED_CONFUSED:\r
-               /* Reduce the confusion */\r
-               if (set_monster_confused(m_idx, MON_CONFUSED(m_ptr) - randint1(r_info[m_ptr->r_idx].level / 20 + 1)))\r
-               {\r
-                       /* Message if visible */\r
-                       if (is_seen(m_ptr))\r
-                       {\r
-                               char m_name[80];\r
-\r
-                               /* Acquire the monster name */\r
-                               monster_desc(m_name, m_ptr, 0);\r
-\r
-                               /* Dump a message */\r
-                               msg_format(_("%^s\82Í\8d¬\97\90\82©\82ç\97§\82¿\92¼\82Á\82½\81B", "%^s is no longer confused."), m_name);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case MTIMED_MONFEAR:\r
-               /* Reduce the fear */\r
-               if (set_monster_monfear(m_idx, MON_MONFEAR(m_ptr) - randint1(r_info[m_ptr->r_idx].level / 20 + 1)))\r
-               {\r
-                       /* Visual note */\r
-                       if (is_seen(m_ptr))\r
-                       {\r
-                               char m_name[80];\r
-#ifndef JP\r
-                               char m_poss[80];\r
-\r
-                               /* Acquire the monster possessive */\r
-                               monster_desc(m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE);\r
-#endif\r
-\r
-                               /* Acquire the monster name */\r
-                               monster_desc(m_name, m_ptr, 0);\r
-\r
-                               /* Dump a message */\r
-#ifdef JP\r
-                               msg_format("%^s\82Í\97E\8bC\82ð\8eæ\82è\96ß\82µ\82½\81B", m_name);\r
-#else\r
-                               msg_format("%^s recovers %s courage.", m_name, m_poss);\r
-#endif\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case MTIMED_INVULNER:\r
-               /* Reduce by one, note if expires */\r
-               if (set_monster_invulner(m_idx, MON_INVULNER(m_ptr) - 1, TRUE))\r
-               {\r
-                       if (is_seen(m_ptr))\r
-                       {\r
-                               char m_name[80];\r
-\r
-                               /* Acquire the monster name */\r
-                               monster_desc(m_name, m_ptr, 0);\r
-\r
-                               /* Dump a message */\r
-                               msg_format(_("%^s\82Í\82à\82¤\96³\93G\82Å\82È\82¢\81B", "%^s is no longer invulnerable."), m_name);\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-}\r
-\r
-\r
-/*!\r
-* @brief \91S\83\82\83\93\83X\83^\81[\82Ì\8ae\8eí\8fó\91Ô\92l\82ð\8e\9e\8aÔ\8co\89ß\82É\82æ\82è\8dX\90V\82·\82é\83\81\83C\83\93\83\8b\81[\83`\83\93\r
-* @param mtimed_idx \8dX\90V\82·\82é\83\82\83\93\83X\83^\81[\82Ì\8e\9e\8cÀ\83X\83e\81[\83^\83XID\r
-* @return \82È\82µ\r
-* @details\r
-* Process the counters of monsters (once per 10 game turns)\n\r
-* These functions are to process monsters' counters same as player's.\r
-*/\r
-void process_monsters_mtimed(int mtimed_idx)\r
-{\r
-       int  i;\r
-       s16b *cur_mproc_list = mproc_list[mtimed_idx];\r
-\r
-       /* Hack -- calculate the "player noise" */\r
-       if (mtimed_idx == MTIMED_CSLEEP) csleep_noise = (1L << (30 - p_ptr->skill_stl));\r
-\r
-       /* Process the monsters (backwards) */\r
-       for (i = mproc_max[mtimed_idx] - 1; i >= 0; i--)\r
-       {\r
-               /* Access the monster */\r
-               process_monsters_mtimed_aux(cur_mproc_list[i], mtimed_idx);\r
-       }\r
-}\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ö\82Ì\96\82\97Í\8fÁ\8b\8e\8f\88\97\9d\r
-* @param m_idx \96\82\97Í\8fÁ\8b\8e\82ð\8eó\82¯\82é\83\82\83\93\83X\83^\81[\82Ì\8eQ\8fÆID\r
-* @return \82È\82µ\r
-*/\r
-void dispel_monster_status(MONSTER_IDX m_idx)\r
-{\r
-       monster_type *m_ptr = &m_list[m_idx];\r
-       char         m_name[80];\r
-\r
-       monster_desc(m_name, m_ptr, 0);\r
-       if (set_monster_invulner(m_idx, 0, TRUE))\r
-       {\r
-               if (m_ptr->ml) msg_format(_("%s\82Í\82à\82¤\96³\93G\82Å\82Í\82È\82¢\81B", "%^s is no longer invulnerable."), m_name);\r
-       }\r
-       if (set_monster_fast(m_idx, 0))\r
-       {\r
-               if (m_ptr->ml) msg_format(_("%s\82Í\82à\82¤\89Á\91¬\82³\82ê\82Ä\82¢\82È\82¢\81B", "%^s is no longer fast."), m_name);\r
-       }\r
-       if (set_monster_slow(m_idx, 0))\r
-       {\r
-               if (m_ptr->ml) msg_format(_("%s\82Í\82à\82¤\8c¸\91¬\82³\82ê\82Ä\82¢\82È\82¢\81B", "%^s is no longer slow."), m_name);\r
-       }\r
-}\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\8e\9e\8aÔ\92â\8e~\8f\88\97\9d\r
-* @param num \8e\9e\8aÔ\92â\8e~\82ð\8ds\82Á\82½\93G\82ª\8ds\93®\82Å\82«\82é\89ñ\90\94\r
-* @param who \8e\9e\8aÔ\92â\8e~\8f\88\97\9d\82Ì\8eå\91ÌID\r
-* @param vs_player TRUE\82È\82ç\82Î\8e\9e\8aÔ\92â\8e~\8aJ\8en\8f\88\97\9d\82ð\8ds\82¤\r
-* @return \8e\9e\8aÔ\92â\8e~\82ª\8ds\82í\82ê\82Ä\82¢\82é\8fó\91Ô\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool process_the_world(int num, int who, bool vs_player)\r
-{\r
-       monster_type *m_ptr = &m_list[hack_m_idx];  /* the world monster */\r
-\r
-       if (world_monster) return (FALSE);\r
-\r
-       if (vs_player)\r
-       {\r
-               char m_name[80];\r
-               monster_desc(m_name, m_ptr, 0);\r
-\r
-               if (who == 1)\r
-                       msg_format(_("\81u\81w\83U\81E\83\8f\81[\83\8b\83h\81x\81I\8e\9e\82Í\8e~\82Ü\82Á\82½\81I\81v", "%s yells 'The World! Time has stopped!'"), m_name);\r
-               else if (who == 3)\r
-                       msg_format(_("\81u\8e\9e\82æ\81I\81v", "%s yells 'Time!'"), m_name);\r
-               else msg_print("hek!");\r
-\r
-               msg_print(NULL);\r
-       }\r
-\r
-       /* This monster cast spells */\r
-       world_monster = hack_m_idx;\r
-\r
-       if (vs_player) do_cmd_redraw();\r
-\r
-       while (num--)\r
-       {\r
-               if (!m_ptr->r_idx) break;\r
-               process_monster(world_monster);\r
-\r
-               reset_target(m_ptr);\r
-\r
-               /* Notice stuff */\r
-               if (p_ptr->notice) notice_stuff();\r
-\r
-               /* Update stuff */\r
-               if (p_ptr->update) update_stuff();\r
-\r
-               /* Redraw stuff */\r
-               if (p_ptr->redraw) redraw_stuff();\r
-\r
-               /* Redraw stuff */\r
-               if (p_ptr->window) window_stuff();\r
-\r
-               /* Delay */\r
-               if (vs_player) Term_xtra(TERM_XTRA_DELAY, 500);\r
-       }\r
-\r
-       /* Redraw map */\r
-       p_ptr->redraw |= (PR_MAP);\r
-\r
-       /* Update monsters */\r
-       p_ptr->update |= (PU_MONSTERS);\r
-\r
-       /* Window stuff */\r
-       p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);\r
-\r
-       world_monster = 0;\r
-       if (vs_player || (player_has_los_bold(m_ptr->fy, m_ptr->fx) && projectable(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx)))\r
-       {\r
-               msg_print(_("\81u\8e\9e\82Í\93®\82«\82¾\82·\81c\81v", "You feel time flowing around you once more."));\r
-               msg_print(NULL);\r
-       }\r
-\r
-       handle_stuff();\r
-\r
-       return (TRUE);\r
-}\r
-\r
-/*!\r
-* @brief \83\82\83\93\83X\83^\81[\82Ì\8co\8c±\92l\8eæ\93¾\8f\88\97\9d\r
-* @param m_idx \8co\8c±\92l\82ð\93¾\82é\83\82\83\93\83X\83^\81[\82Ì\8eQ\8fÆID\r
-* @param s_idx \8c\82\94j\82³\82ê\82½\83\82\83\93\83X\83^\81[\8eí\91°\82Ì\8eQ\8fÆID\r
-* @return \82È\82µ\r
-*/\r
-void monster_gain_exp(MONSTER_IDX m_idx, IDX s_idx)\r
-{\r
-       monster_type *m_ptr;\r
-       monster_race *r_ptr;\r
-       monster_race *s_ptr;\r
-       int new_exp;\r
-\r
-       /* Paranoia */\r
-       if (m_idx <= 0 || s_idx <= 0) return;\r
-\r
-       m_ptr = &m_list[m_idx];\r
-\r
-       /* Paranoia -- Skip dead monsters */\r
-       if (!m_ptr->r_idx) return;\r
-\r
-       r_ptr = &r_info[m_ptr->r_idx];\r
-       s_ptr = &r_info[s_idx];\r
-\r
-       if (p_ptr->inside_battle) return;\r
-\r
-       if (!r_ptr->next_exp) return;\r
-\r
-       new_exp = s_ptr->mexp * s_ptr->level / (r_ptr->level + 2);\r
-       if (m_idx == p_ptr->riding) new_exp = (new_exp + 1) / 2;\r
-       if (!dun_level) new_exp /= 5;\r
-       m_ptr->exp += new_exp;\r
-       if (m_ptr->mflag2 & MFLAG2_CHAMELEON) return;\r
-\r
-       if (m_ptr->exp >= r_ptr->next_exp)\r
-       {\r
-               char m_name[80];\r
-               int old_hp = m_ptr->hp;\r
-               int old_maxhp = m_ptr->max_maxhp;\r
-               int old_r_idx = m_ptr->r_idx;\r
-               byte old_sub_align = m_ptr->sub_align;\r
-\r
-               /* Hack -- Reduce the racial counter of previous monster */\r
-               real_r_ptr(m_ptr)->cur_num--;\r
-\r
-               monster_desc(m_name, m_ptr, 0);\r
-               m_ptr->r_idx = r_ptr->next_r_idx;\r
-\r
-               /* Count the monsters on the level */\r
-               real_r_ptr(m_ptr)->cur_num++;\r
-\r
-               m_ptr->ap_r_idx = m_ptr->r_idx;\r
-               r_ptr = &r_info[m_ptr->r_idx];\r
-\r
-               if (r_ptr->flags1 & RF1_FORCE_MAXHP)\r
-               {\r
-                       m_ptr->max_maxhp = maxroll(r_ptr->hdice, r_ptr->hside);\r
-               }\r
-               else\r
-               {\r
-                       m_ptr->max_maxhp = damroll(r_ptr->hdice, r_ptr->hside);\r
-               }\r
-               if (ironman_nightmare)\r
-               {\r
-                       u32b hp = m_ptr->max_maxhp * 2L;\r
-\r
-                       m_ptr->max_maxhp = (s16b)MIN(30000, hp);\r
-               }\r
-               m_ptr->maxhp = m_ptr->max_maxhp;\r
-               m_ptr->hp = old_hp * m_ptr->maxhp / old_maxhp;\r
-\r
-               /* dealt damage is 0 at initial*/\r
-               m_ptr->dealt_damage = 0;\r
-\r
-               /* Extract the monster base speed */\r
-               m_ptr->mspeed = get_mspeed(r_ptr);\r
-\r
-               /* Sub-alignment of a monster */\r
-               if (!is_pet(m_ptr) && !(r_ptr->flags3 & (RF3_EVIL | RF3_GOOD)))\r
-                       m_ptr->sub_align = old_sub_align;\r
-               else\r
-               {\r
-                       m_ptr->sub_align = SUB_ALIGN_NEUTRAL;\r
-                       if (r_ptr->flags3 & RF3_EVIL) m_ptr->sub_align |= SUB_ALIGN_EVIL;\r
-                       if (r_ptr->flags3 & RF3_GOOD) m_ptr->sub_align |= SUB_ALIGN_GOOD;\r
-               }\r
-\r
-               m_ptr->exp = 0;\r
-\r
-               if (is_pet(m_ptr) || m_ptr->ml)\r
-               {\r
-                       if (!ignore_unview || player_can_see_bold(m_ptr->fy, m_ptr->fx))\r
-                       {\r
-                               if (p_ptr->image)\r
-                               {\r
-                                       monster_race *hallu_race;\r
-\r
-                                       do\r
-                                       {\r
-                                               hallu_race = &r_info[randint1(max_r_idx - 1)];\r
-                                       } while (!hallu_race->name || (hallu_race->flags1 & RF1_UNIQUE));\r
-                                       msg_format(_("%s\82Í%s\82É\90i\89»\82µ\82½\81B", "%^s evolved into %s."), m_name, r_name + hallu_race->name);\r
-                               }\r
-                               else\r
-                               {\r
-                                       msg_format(_("%s\82Í%s\82É\90i\89»\82µ\82½\81B", "%^s evolved into %s."), m_name, r_name + r_ptr->name);\r
-                               }\r
-                       }\r
-\r
-                       if (!p_ptr->image) r_info[old_r_idx].r_xtra1 |= MR1_SINKA;\r
-\r
-                       /* Now you feel very close to this pet. */\r
-                       m_ptr->parent_m_idx = 0;\r
-               }\r
-               update_mon(m_idx, FALSE);\r
-               lite_spot(m_ptr->fy, m_ptr->fx);\r
-       }\r
-       if (m_idx == p_ptr->riding) p_ptr->update |= PU_BONUS;\r
-}\r
+#include "angband.h"
+
+
+/*!
+* @brief モンスターの時限ステータスを取得する
+* @return m_idx モンスターの参照ID
+* @return mproc_type モンスターの時限ステータスID
+* @return 残りターン値
+*/
+int get_mproc_idx(MONSTER_IDX m_idx, int mproc_type)
+{
+       s16b *cur_mproc_list = mproc_list[mproc_type];
+       int i;
+
+       for (i = mproc_max[mproc_type] - 1; i >= 0; i--)
+       {
+               if (cur_mproc_list[i] == m_idx) return i;
+       }
+
+       return -1;
+}
+
+/*!
+* @brief モンスターの時限ステータスリストを追加する
+* @return m_idx モンスターの参照ID
+* @return mproc_type 追加したいモンスターの時限ステータスID
+* @return なし
+*/
+static void mproc_add(MONSTER_IDX m_idx, int mproc_type)
+{
+       if (mproc_max[mproc_type] < max_m_idx) mproc_list[mproc_type][mproc_max[mproc_type]++] = (s16b)m_idx;
+}
+
+
+/*!
+* @brief モンスターの時限ステータスリストを削除
+* @return m_idx モンスターの参照ID
+* @return mproc_type 削除したいモンスターの時限ステータスID
+* @return なし
+*/
+static void mproc_remove(MONSTER_IDX m_idx, int mproc_type)
+{
+       int mproc_idx = get_mproc_idx(m_idx, mproc_type);
+       if (mproc_idx >= 0) mproc_list[mproc_type][mproc_idx] = mproc_list[mproc_type][--mproc_max[mproc_type]];
+}
+
+
+/*!
+* @brief モンスターの時限ステータスリストを初期化する / Initialize monster process
+* @return なし
+*/
+void mproc_init(void)
+{
+       monster_type *m_ptr;
+       MONSTER_IDX i;
+       int cmi;
+
+       /* Reset "mproc_max[]" */
+       for (cmi = 0; cmi < MAX_MTIMED; cmi++) mproc_max[cmi] = 0;
+
+       /* Process the monsters (backwards) */
+       for (i = m_max - 1; i >= 1; i--)
+       {
+               /* Access the monster */
+               m_ptr = &m_list[i];
+
+               /* Ignore "dead" monsters */
+               if (!m_ptr->r_idx) continue;
+
+               for (cmi = 0; cmi < MAX_MTIMED; cmi++)
+               {
+                       if (m_ptr->mtimed[cmi]) mproc_add(i, cmi);
+               }
+       }
+}
+
+
+/*!
+* @brief モンスターの睡眠状態値をセットする /
+* Set "m_ptr->mtimed[MTIMED_CSLEEP]", notice observable changes
+* @param m_idx モンスター参照ID
+* @param v セットする値
+* @return 別途更新処理が必要な場合TRUEを返す
+*/
+bool set_monster_csleep(MONSTER_IDX m_idx, int v)
+{
+       monster_type *m_ptr = &m_list[m_idx];
+       bool notice = FALSE;
+
+       /* Hack -- Force good values */
+       v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
+
+       /* Open */
+       if (v)
+       {
+               if (!MON_CSLEEP(m_ptr))
+               {
+                       mproc_add(m_idx, MTIMED_CSLEEP);
+                       notice = TRUE;
+               }
+       }
+
+       /* Shut */
+       else
+       {
+               if (MON_CSLEEP(m_ptr))
+               {
+                       mproc_remove(m_idx, MTIMED_CSLEEP);
+                       notice = TRUE;
+               }
+       }
+
+       /* Use the value */
+       m_ptr->mtimed[MTIMED_CSLEEP] = (s16b)v;
+
+       if (!notice) return FALSE;
+
+       if (m_ptr->ml)
+       {
+               /* Update health bar as needed */
+               if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
+               if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
+       }
+
+       if (r_info[m_ptr->r_idx].flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);
+
+       return TRUE;
+}
+
+
+/*!
+* @brief モンスターの加速状態値をセット /
+* Set "m_ptr->mtimed[MTIMED_FAST]", notice observable changes
+* @param m_idx モンスター参照ID
+* @param v セットする値
+* @return 別途更新処理が必要な場合TRUEを返す
+*/
+bool set_monster_fast(MONSTER_IDX m_idx, int v)
+{
+       monster_type *m_ptr = &m_list[m_idx];
+       bool notice = FALSE;
+
+       /* Hack -- Force good values */
+       v = (v > 200) ? 200 : (v < 0) ? 0 : v;
+
+       /* Open */
+       if (v)
+       {
+               if (!MON_FAST(m_ptr))
+               {
+                       mproc_add(m_idx, MTIMED_FAST);
+                       notice = TRUE;
+               }
+       }
+
+       /* Shut */
+       else
+       {
+               if (MON_FAST(m_ptr))
+               {
+                       mproc_remove(m_idx, MTIMED_FAST);
+                       notice = TRUE;
+               }
+       }
+
+       /* Use the value */
+       m_ptr->mtimed[MTIMED_FAST] = (s16b)v;
+
+       if (!notice) return FALSE;
+
+       if ((p_ptr->riding == m_idx) && !p_ptr->leaving) p_ptr->update |= (PU_BONUS);
+
+       return TRUE;
+}
+
+
+/*
+* Set "m_ptr->mtimed[MTIMED_SLOW]", notice observable changes
+*/
+bool set_monster_slow(MONSTER_IDX m_idx, int v)
+{
+       monster_type *m_ptr = &m_list[m_idx];
+       bool notice = FALSE;
+
+       /* Hack -- Force good values */
+       v = (v > 200) ? 200 : (v < 0) ? 0 : v;
+
+       /* Open */
+       if (v)
+       {
+               if (!MON_SLOW(m_ptr))
+               {
+                       mproc_add(m_idx, MTIMED_SLOW);
+                       notice = TRUE;
+               }
+       }
+
+       /* Shut */
+       else
+       {
+               if (MON_SLOW(m_ptr))
+               {
+                       mproc_remove(m_idx, MTIMED_SLOW);
+                       notice = TRUE;
+               }
+       }
+
+       /* Use the value */
+       m_ptr->mtimed[MTIMED_SLOW] = (s16b)v;
+
+       if (!notice) return FALSE;
+
+       if ((p_ptr->riding == m_idx) && !p_ptr->leaving) p_ptr->update |= (PU_BONUS);
+
+       return TRUE;
+}
+
+
+/*!
+* @brief モンスターの朦朧状態値をセット /
+* Set "m_ptr->mtimed[MTIMED_STUNNED]", notice observable changes
+* @param m_idx モンスター参照ID
+* @param v セットする値
+* @return 別途更新処理が必要な場合TRUEを返す
+*/
+bool set_monster_stunned(MONSTER_IDX m_idx, int v)
+{
+       monster_type *m_ptr = &m_list[m_idx];
+       bool notice = FALSE;
+
+       /* Hack -- Force good values */
+       v = (v > 200) ? 200 : (v < 0) ? 0 : v;
+
+       /* Open */
+       if (v)
+       {
+               if (!MON_STUNNED(m_ptr))
+               {
+                       mproc_add(m_idx, MTIMED_STUNNED);
+                       notice = TRUE;
+               }
+       }
+
+       /* Shut */
+       else
+       {
+               if (MON_STUNNED(m_ptr))
+               {
+                       mproc_remove(m_idx, MTIMED_STUNNED);
+                       notice = TRUE;
+               }
+       }
+
+       /* Use the value */
+       m_ptr->mtimed[MTIMED_STUNNED] = (s16b)v;
+
+       return notice;
+}
+
+
+/*!
+* @brief モンスターの混乱状態値をセット /
+* Set "m_ptr->mtimed[MTIMED_CONFUSED]", notice observable changes
+* @param m_idx モンスター参照ID
+* @param v セットする値
+* @return 別途更新処理が必要な場合TRUEを返す
+*/
+bool set_monster_confused(MONSTER_IDX m_idx, int v)
+{
+       monster_type *m_ptr = &m_list[m_idx];
+       bool notice = FALSE;
+
+       /* Hack -- Force good values */
+       v = (v > 200) ? 200 : (v < 0) ? 0 : v;
+
+       /* Open */
+       if (v)
+       {
+               if (!MON_CONFUSED(m_ptr))
+               {
+                       mproc_add(m_idx, MTIMED_CONFUSED);
+                       notice = TRUE;
+               }
+       }
+
+       /* Shut */
+       else
+       {
+               if (MON_CONFUSED(m_ptr))
+               {
+                       mproc_remove(m_idx, MTIMED_CONFUSED);
+                       notice = TRUE;
+               }
+       }
+
+       /* Use the value */
+       m_ptr->mtimed[MTIMED_CONFUSED] = (s16b)v;
+
+       return notice;
+}
+
+
+/*!
+* @brief モンスターの恐慌状態値をセット /
+* Set "m_ptr->mtimed[MTIMED_MONFEAR]", notice observable changes
+* @param m_idx モンスター参照ID
+* @param v セットする値
+* @return 別途更新処理が必要な場合TRUEを返す
+*/
+bool set_monster_monfear(MONSTER_IDX m_idx, int v)
+{
+       monster_type *m_ptr = &m_list[m_idx];
+       bool notice = FALSE;
+
+       /* Hack -- Force good values */
+       v = (v > 200) ? 200 : (v < 0) ? 0 : v;
+
+       /* Open */
+       if (v)
+       {
+               if (!MON_MONFEAR(m_ptr))
+               {
+                       mproc_add(m_idx, MTIMED_MONFEAR);
+                       notice = TRUE;
+               }
+       }
+
+       /* Shut */
+       else
+       {
+               if (MON_MONFEAR(m_ptr))
+               {
+                       mproc_remove(m_idx, MTIMED_MONFEAR);
+                       notice = TRUE;
+               }
+       }
+
+       /* Use the value */
+       m_ptr->mtimed[MTIMED_MONFEAR] = (s16b)v;
+
+       if (!notice) return FALSE;
+
+       if (m_ptr->ml)
+       {
+               /* Update health bar as needed */
+               if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
+               if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
+       }
+
+       return TRUE;
+}
+
+
+/*!
+* @brief モンスターの無敵状態値をセット /
+* Set "m_ptr->mtimed[MTIMED_INVULNER]", notice observable changes
+* @param m_idx モンスター参照ID
+* @param v セットする値
+* @param energy_need TRUEならば無敵解除時に行動ターン消費を行う
+* @return 別途更新処理が必要な場合TRUEを返す
+*/
+bool set_monster_invulner(MONSTER_IDX m_idx, int v, bool energy_need)
+{
+       monster_type *m_ptr = &m_list[m_idx];
+       bool notice = FALSE;
+
+       /* Hack -- Force good values */
+       v = (v > 200) ? 200 : (v < 0) ? 0 : v;
+
+       /* Open */
+       if (v)
+       {
+               if (!MON_INVULNER(m_ptr))
+               {
+                       mproc_add(m_idx, MTIMED_INVULNER);
+                       notice = TRUE;
+               }
+       }
+
+       /* Shut */
+       else
+       {
+               if (MON_INVULNER(m_ptr))
+               {
+                       mproc_remove(m_idx, MTIMED_INVULNER);
+                       if (energy_need && !p_ptr->wild_mode) m_ptr->energy_need += ENERGY_NEED();
+                       notice = TRUE;
+               }
+       }
+
+       /* Use the value */
+       m_ptr->mtimed[MTIMED_INVULNER] = (s16b)v;
+
+       if (!notice) return FALSE;
+
+       if (m_ptr->ml)
+       {
+               /* Update health bar as needed */
+               if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
+               if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
+       }
+
+       return TRUE;
+}
+
+
+static u32b csleep_noise;
+
+/*!
+* @brief モンスターの各種状態値を時間経過により更新するサブルーチン
+* @param m_idx モンスター参照ID
+* @param mtimed_idx 更新するモンスターの時限ステータスID
+* @return なし
+*/
+static void process_monsters_mtimed_aux(MONSTER_IDX m_idx, int mtimed_idx)
+{
+       monster_type *m_ptr = &m_list[m_idx];
+
+       switch (mtimed_idx)
+       {
+       case MTIMED_CSLEEP:
+       {
+               monster_race *r_ptr = &r_info[m_ptr->r_idx];
+
+               /* Assume does not wake up */
+               bool test = FALSE;
+
+               /* Hack -- Require proximity */
+               if (m_ptr->cdis < AAF_LIMIT)
+               {
+                       /* Handle "sensing radius" */
+                       if (m_ptr->cdis <= (is_pet(m_ptr) ? ((r_ptr->aaf > MAX_SIGHT) ? MAX_SIGHT : r_ptr->aaf) : r_ptr->aaf))
+                       {
+                               /* We may wake up */
+                               test = TRUE;
+                       }
+
+                       /* Handle "sight" and "aggravation" */
+                       else if ((m_ptr->cdis <= MAX_SIGHT) && (player_has_los_bold(m_ptr->fy, m_ptr->fx)))
+                       {
+                               /* We may wake up */
+                               test = TRUE;
+                       }
+               }
+
+               if (test)
+               {
+                       u32b notice = randint0(1024);
+
+                       /* Nightmare monsters are more alert */
+                       if (ironman_nightmare) notice /= 2;
+
+                       /* Hack -- See if monster "notices" player */
+                       if ((notice * notice * notice) <= csleep_noise)
+                       {
+                               /* Hack -- amount of "waking" */
+                               /* Wake up faster near the player */
+                               int d = (m_ptr->cdis < AAF_LIMIT / 2) ? (AAF_LIMIT / m_ptr->cdis) : 1;
+
+                               /* Hack -- amount of "waking" is affected by speed of player */
+                               d = (d * SPEED_TO_ENERGY(p_ptr->pspeed)) / 10;
+                               if (d < 0) d = 1;
+
+                               /* Monster wakes up "a little bit" */
+
+                               /* Still asleep */
+                               if (!set_monster_csleep(m_idx, MON_CSLEEP(m_ptr) - d))
+                               {
+                                       /* Notice the "not waking up" */
+                                       if (is_original_ap_and_seen(m_ptr))
+                                       {
+                                               /* Hack -- Count the ignores */
+                                               if (r_ptr->r_ignore < MAX_UCHAR) r_ptr->r_ignore++;
+                                       }
+                               }
+
+                               /* Just woke up */
+                               else
+                               {
+                                       /* Notice the "waking up" */
+                                       if (m_ptr->ml)
+                                       {
+                                               char m_name[80];
+
+                                               /* Acquire the monster name */
+                                               monster_desc(m_name, m_ptr, 0);
+
+                                               /* Dump a message */
+                                               msg_format(_("%^sが目を覚ました。", "%^s wakes up."), m_name);
+                                       }
+
+                                       if (is_original_ap_and_seen(m_ptr))
+                                       {
+                                               /* Hack -- Count the wakings */
+                                               if (r_ptr->r_wake < MAX_UCHAR) r_ptr->r_wake++;
+                                       }
+                               }
+                       }
+               }
+               break;
+       }
+
+       case MTIMED_FAST:
+               /* Reduce by one, note if expires */
+               if (set_monster_fast(m_idx, MON_FAST(m_ptr) - 1))
+               {
+                       if (is_seen(m_ptr))
+                       {
+                               char m_name[80];
+
+                               /* Acquire the monster name */
+                               monster_desc(m_name, m_ptr, 0);
+
+                               /* Dump a message */
+                               msg_format(_("%^sはもう加速されていない。", "%^s is no longer fast."), m_name);
+                       }
+               }
+               break;
+
+       case MTIMED_SLOW:
+               /* Reduce by one, note if expires */
+               if (set_monster_slow(m_idx, MON_SLOW(m_ptr) - 1))
+               {
+                       if (is_seen(m_ptr))
+                       {
+                               char m_name[80];
+
+                               /* Acquire the monster name */
+                               monster_desc(m_name, m_ptr, 0);
+
+                               /* Dump a message */
+                               msg_format(_("%^sはもう減速されていない。", "%^s is no longer slow."), m_name);
+                       }
+               }
+               break;
+
+       case MTIMED_STUNNED:
+       {
+               int rlev = r_info[m_ptr->r_idx].level;
+
+               /* Recover from stun */
+               if (set_monster_stunned(m_idx, (randint0(10000) <= rlev * rlev) ? 0 : (MON_STUNNED(m_ptr) - 1)))
+               {
+                       /* Message if visible */
+                       if (is_seen(m_ptr))
+                       {
+                               char m_name[80];
+
+                               /* Acquire the monster name */
+                               monster_desc(m_name, m_ptr, 0);
+
+                               /* Dump a message */
+                               msg_format(_("%^sは朦朧状態から立ち直った。", "%^s is no longer stunned."), m_name);
+                       }
+               }
+               break;
+       }
+
+       case MTIMED_CONFUSED:
+               /* Reduce the confusion */
+               if (set_monster_confused(m_idx, MON_CONFUSED(m_ptr) - randint1(r_info[m_ptr->r_idx].level / 20 + 1)))
+               {
+                       /* Message if visible */
+                       if (is_seen(m_ptr))
+                       {
+                               char m_name[80];
+
+                               /* Acquire the monster name */
+                               monster_desc(m_name, m_ptr, 0);
+
+                               /* Dump a message */
+                               msg_format(_("%^sは混乱から立ち直った。", "%^s is no longer confused."), m_name);
+                       }
+               }
+               break;
+
+       case MTIMED_MONFEAR:
+               /* Reduce the fear */
+               if (set_monster_monfear(m_idx, MON_MONFEAR(m_ptr) - randint1(r_info[m_ptr->r_idx].level / 20 + 1)))
+               {
+                       /* Visual note */
+                       if (is_seen(m_ptr))
+                       {
+                               char m_name[80];
+#ifndef JP
+                               char m_poss[80];
+
+                               /* Acquire the monster possessive */
+                               monster_desc(m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE);
+#endif
+
+                               /* Acquire the monster name */
+                               monster_desc(m_name, m_ptr, 0);
+
+                               /* Dump a message */
+#ifdef JP
+                               msg_format("%^sは勇気を取り戻した。", m_name);
+#else
+                               msg_format("%^s recovers %s courage.", m_name, m_poss);
+#endif
+                       }
+               }
+               break;
+
+       case MTIMED_INVULNER:
+               /* Reduce by one, note if expires */
+               if (set_monster_invulner(m_idx, MON_INVULNER(m_ptr) - 1, TRUE))
+               {
+                       if (is_seen(m_ptr))
+                       {
+                               char m_name[80];
+
+                               /* Acquire the monster name */
+                               monster_desc(m_name, m_ptr, 0);
+
+                               /* Dump a message */
+                               msg_format(_("%^sはもう無敵でない。", "%^s is no longer invulnerable."), m_name);
+                       }
+               }
+               break;
+       }
+}
+
+
+/*!
+* @brief 全モンスターの各種状態値を時間経過により更新するメインルーチン
+* @param mtimed_idx 更新するモンスターの時限ステータスID
+* @return なし
+* @details
+* Process the counters of monsters (once per 10 game turns)\n
+* These functions are to process monsters' counters same as player's.
+*/
+void process_monsters_mtimed(int mtimed_idx)
+{
+       int  i;
+       s16b *cur_mproc_list = mproc_list[mtimed_idx];
+
+       /* Hack -- calculate the "player noise" */
+       if (mtimed_idx == MTIMED_CSLEEP) csleep_noise = (1L << (30 - p_ptr->skill_stl));
+
+       /* Process the monsters (backwards) */
+       for (i = mproc_max[mtimed_idx] - 1; i >= 0; i--)
+       {
+               /* Access the monster */
+               process_monsters_mtimed_aux(cur_mproc_list[i], mtimed_idx);
+       }
+}
+
+/*!
+* @brief モンスターへの魔力消去処理
+* @param m_idx 魔力消去を受けるモンスターの参照ID
+* @return なし
+*/
+void dispel_monster_status(MONSTER_IDX m_idx)
+{
+       monster_type *m_ptr = &m_list[m_idx];
+       char         m_name[80];
+
+       monster_desc(m_name, m_ptr, 0);
+       if (set_monster_invulner(m_idx, 0, TRUE))
+       {
+               if (m_ptr->ml) msg_format(_("%sはもう無敵ではない。", "%^s is no longer invulnerable."), m_name);
+       }
+       if (set_monster_fast(m_idx, 0))
+       {
+               if (m_ptr->ml) msg_format(_("%sはもう加速されていない。", "%^s is no longer fast."), m_name);
+       }
+       if (set_monster_slow(m_idx, 0))
+       {
+               if (m_ptr->ml) msg_format(_("%sはもう減速されていない。", "%^s is no longer slow."), m_name);
+       }
+}
+
+/*!
+* @brief モンスターの時間停止処理
+* @param num 時間停止を行った敵が行動できる回数
+* @param who 時間停止処理の主体ID
+* @param vs_player TRUEならば時間停止開始処理を行う
+* @return 時間停止が行われている状態ならばTRUEを返す
+*/
+bool process_the_world(int num, int who, bool vs_player)
+{
+       monster_type *m_ptr = &m_list[hack_m_idx];  /* the world monster */
+
+       if (world_monster) return (FALSE);
+
+       if (vs_player)
+       {
+               char m_name[80];
+               monster_desc(m_name, m_ptr, 0);
+
+               if (who == 1)
+                       msg_format(_("「『ザ・ワールド』!時は止まった!」", "%s yells 'The World! Time has stopped!'"), m_name);
+               else if (who == 3)
+                       msg_format(_("「時よ!」", "%s yells 'Time!'"), m_name);
+               else msg_print("hek!");
+
+               msg_print(NULL);
+       }
+
+       /* This monster cast spells */
+       world_monster = hack_m_idx;
+
+       if (vs_player) do_cmd_redraw();
+
+       while (num--)
+       {
+               if (!m_ptr->r_idx) break;
+               process_monster(world_monster);
+
+               reset_target(m_ptr);
+
+               /* Notice stuff */
+               if (p_ptr->notice) notice_stuff();
+
+               /* Update stuff */
+               if (p_ptr->update) update_stuff();
+
+               /* Redraw stuff */
+               if (p_ptr->redraw) redraw_stuff();
+
+               /* Redraw stuff */
+               if (p_ptr->window) window_stuff();
+
+               /* Delay */
+               if (vs_player) Term_xtra(TERM_XTRA_DELAY, 500);
+       }
+
+       /* Redraw map */
+       p_ptr->redraw |= (PR_MAP);
+
+       /* Update monsters */
+       p_ptr->update |= (PU_MONSTERS);
+
+       /* Window stuff */
+       p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
+
+       world_monster = 0;
+       if (vs_player || (player_has_los_bold(m_ptr->fy, m_ptr->fx) && projectable(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx)))
+       {
+               msg_print(_("「時は動きだす…」", "You feel time flowing around you once more."));
+               msg_print(NULL);
+       }
+
+       handle_stuff();
+
+       return (TRUE);
+}
+
+/*!
+* @brief モンスターの経験値取得処理
+* @param m_idx 経験値を得るモンスターの参照ID
+* @param s_idx 撃破されたモンスター種族の参照ID
+* @return なし
+*/
+void monster_gain_exp(MONSTER_IDX m_idx, IDX s_idx)
+{
+       monster_type *m_ptr;
+       monster_race *r_ptr;
+       monster_race *s_ptr;
+       int new_exp;
+
+       /* Paranoia */
+       if (m_idx <= 0 || s_idx <= 0) return;
+
+       m_ptr = &m_list[m_idx];
+
+       /* Paranoia -- Skip dead monsters */
+       if (!m_ptr->r_idx) return;
+
+       r_ptr = &r_info[m_ptr->r_idx];
+       s_ptr = &r_info[s_idx];
+
+       if (p_ptr->inside_battle) return;
+
+       if (!r_ptr->next_exp) return;
+
+       new_exp = s_ptr->mexp * s_ptr->level / (r_ptr->level + 2);
+       if (m_idx == p_ptr->riding) new_exp = (new_exp + 1) / 2;
+       if (!dun_level) new_exp /= 5;
+       m_ptr->exp += new_exp;
+       if (m_ptr->mflag2 & MFLAG2_CHAMELEON) return;
+
+       if (m_ptr->exp >= r_ptr->next_exp)
+       {
+               char m_name[80];
+               int old_hp = m_ptr->hp;
+               int old_maxhp = m_ptr->max_maxhp;
+               int old_r_idx = m_ptr->r_idx;
+               byte old_sub_align = m_ptr->sub_align;
+
+               /* Hack -- Reduce the racial counter of previous monster */
+               real_r_ptr(m_ptr)->cur_num--;
+
+               monster_desc(m_name, m_ptr, 0);
+               m_ptr->r_idx = r_ptr->next_r_idx;
+
+               /* Count the monsters on the level */
+               real_r_ptr(m_ptr)->cur_num++;
+
+               m_ptr->ap_r_idx = m_ptr->r_idx;
+               r_ptr = &r_info[m_ptr->r_idx];
+
+               if (r_ptr->flags1 & RF1_FORCE_MAXHP)
+               {
+                       m_ptr->max_maxhp = maxroll(r_ptr->hdice, r_ptr->hside);
+               }
+               else
+               {
+                       m_ptr->max_maxhp = damroll(r_ptr->hdice, r_ptr->hside);
+               }
+               if (ironman_nightmare)
+               {
+                       u32b hp = m_ptr->max_maxhp * 2L;
+
+                       m_ptr->max_maxhp = (s16b)MIN(30000, hp);
+               }
+               m_ptr->maxhp = m_ptr->max_maxhp;
+               m_ptr->hp = old_hp * m_ptr->maxhp / old_maxhp;
+
+               /* dealt damage is 0 at initial*/
+               m_ptr->dealt_damage = 0;
+
+               /* Extract the monster base speed */
+               m_ptr->mspeed = get_mspeed(r_ptr);
+
+               /* Sub-alignment of a monster */
+               if (!is_pet(m_ptr) && !(r_ptr->flags3 & (RF3_EVIL | RF3_GOOD)))
+                       m_ptr->sub_align = old_sub_align;
+               else
+               {
+                       m_ptr->sub_align = SUB_ALIGN_NEUTRAL;
+                       if (r_ptr->flags3 & RF3_EVIL) m_ptr->sub_align |= SUB_ALIGN_EVIL;
+                       if (r_ptr->flags3 & RF3_GOOD) m_ptr->sub_align |= SUB_ALIGN_GOOD;
+               }
+
+               m_ptr->exp = 0;
+
+               if (is_pet(m_ptr) || m_ptr->ml)
+               {
+                       if (!ignore_unview || player_can_see_bold(m_ptr->fy, m_ptr->fx))
+                       {
+                               if (p_ptr->image)
+                               {
+                                       monster_race *hallu_race;
+
+                                       do
+                                       {
+                                               hallu_race = &r_info[randint1(max_r_idx - 1)];
+                                       } while (!hallu_race->name || (hallu_race->flags1 & RF1_UNIQUE));
+                                       msg_format(_("%sは%sに進化した。", "%^s evolved into %s."), m_name, r_name + hallu_race->name);
+                               }
+                               else
+                               {
+                                       msg_format(_("%sは%sに進化した。", "%^s evolved into %s."), m_name, r_name + r_ptr->name);
+                               }
+                       }
+
+                       if (!p_ptr->image) r_info[old_r_idx].r_xtra1 |= MR1_SINKA;
+
+                       /* Now you feel very close to this pet. */
+                       m_ptr->parent_m_idx = 0;
+               }
+               update_mon(m_idx, FALSE);
+               lite_spot(m_ptr->fy, m_ptr->fx);
+       }
+       if (m_idx == p_ptr->riding) p_ptr->update |= PU_BONUS;
+}
index 5298710..6e026f0 100644 (file)
-\r
-#include "angband.h"\r
-#include "object-hook.h"\r
-\r
-/*!\r
-* @brief \91Î\8fÛ\82Ì\83A\83C\83e\83\80\82ª\96î\82â\83N\83\8d\83X\83{\83E\82Ì\96î\82Ì\8dÞ\97¿\82É\82È\82é\82©\82ð\95Ô\82·\81B/\r
-* Hook to determine if an object is contertible in an arrow/bolt\r
-* @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
-* @return \8dÞ\97¿\82É\82Å\82«\82é\82È\82çTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_convertible(object_type *o_ptr)\r
-{\r
-       if ((o_ptr->tval == TV_JUNK) || (o_ptr->tval == TV_SKELETON)) return TRUE;\r
-\r
-       if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)) return TRUE;\r
-       /* Assume not */\r
-       return (FALSE);\r
-}\r
-\r
-/*!\r
-* @brief \95\90\8aí\8f \82Ì\81u\95\90\8aí\81v\8aÓ\92è\91Î\8fÛ\82É\82È\82é\82©\82ð\94»\92è\82·\82é\81B/ Hook to specify "weapon"\r
-* @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
-* @return \91Î\8fÛ\82É\82È\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
-*/\r
-bool item_tester_hook_orthodox_melee_weapons(object_type *o_ptr)\r
-{\r
-       switch (o_ptr->tval)\r
-       {\r
-       case TV_HAFTED:\r
-       case TV_POLEARM:\r
-       case TV_DIGGING:\r
-       {\r
-               return (TRUE);\r
-       }\r
-       case TV_SWORD:\r
-       {\r
-               if (o_ptr->sval != SV_DOKUBARI) return (TRUE);\r
-       }\r
-       }\r
-\r
-       return (FALSE);\r
-}\r
-\r
-/*!\r
-* @brief \83I\83u\83W\83F\83N\83g\82ª\89E\8eè\82©\8d\8eè\82É\91\95\94õ\82Å\82«\82é\95\90\8aí\82©\82Ç\82¤\82©\82Ì\94»\92è\r
-* @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \89E\8eè\82©\8d\8eè\82Ì\95\90\8aí\82Æ\82µ\82Ä\91\95\94õ\82Å\82«\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\81B\r
-*/\r
-bool item_tester_hook_melee_weapon(object_type *o_ptr)\r
-{\r
-       /* Check for a usable slot */\r
-       if ((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) return (TRUE);\r
-\r
-       /* Assume not wearable */\r
-       return (FALSE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief \95\90\8aí\8f \82Ì\81u\96î\92e\81v\8aÓ\92è\91Î\8fÛ\82É\82È\82é\82©\82ð\94»\92è\82·\82é\81B/ Hook to specify "weapon"\r
-* @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
-* @return \91Î\8fÛ\82É\82È\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
-*/\r
-bool item_tester_hook_ammo(object_type *o_ptr)\r
-{\r
-       switch (o_ptr->tval)\r
-       {\r
-       case TV_SHOT:\r
-       case TV_ARROW:\r
-       case TV_BOLT:\r
-       {\r
-               return (TRUE);\r
-       }\r
-       }\r
-\r
-       return (FALSE);\r
-}\r
-\r
-/*!\r
-* @brief \8fC\95\9c\91Î\8fÛ\82Æ\82È\82é\89ó\82ê\82½\95\90\8aí\82©\82ð\94»\92è\82·\82é\81B / Hook to specify "broken weapon"\r
-* @param o_ptr \83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81B\r
-* @return \8fC\95\9c\91Î\8fÛ\82É\82È\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
-*/\r
-bool item_tester_hook_broken_weapon(object_type *o_ptr)\r
-{\r
-       if (o_ptr->tval != TV_SWORD) return FALSE;\r
-\r
-       switch (o_ptr->sval)\r
-       {\r
-       case SV_BROKEN_DAGGER:\r
-       case SV_BROKEN_SWORD:\r
-               return TRUE;\r
-       }\r
-\r
-       return FALSE;\r
-}\r
-\r
-/*!\r
-* @brief \83I\83u\83W\83F\83N\83g\82ª\93\8a\8eË\89Â\94\\82È\95\90\8aí\82©\82Ç\82¤\82©\82ð\95Ô\82·\81B\r
-* @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \93\8a\8eË\89Â\94\\82È\95\90\8aí\82È\82ç\82ÎTRUE\r
-*/\r
-bool item_tester_hook_boomerang(object_type *o_ptr)\r
-{\r
-       if ((o_ptr->tval == TV_DIGGING) || (o_ptr->tval == TV_SWORD) || (o_ptr->tval == TV_POLEARM) || (o_ptr->tval == TV_HAFTED)) return (TRUE);\r
-\r
-       /* Assume not */\r
-       return (FALSE);\r
-}\r
-\r
-/*!\r
-* @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\90H\82×\82é\82±\82Æ\82ª\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
-* Hook to determine if an object is eatable\r
-* @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \90H\82×\82é\82±\82Æ\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_eatable(object_type *o_ptr)\r
-{\r
-       if (o_ptr->tval == TV_FOOD) return TRUE;\r
-\r
-#if 0\r
-       if (prace_is_(RACE_SKELETON))\r
-       {\r
-               if (o_ptr->tval == TV_SKELETON ||\r
-                       (o_ptr->tval == TV_CORPSE && o_ptr->sval == SV_SKELETON))\r
-                       return TRUE;\r
-       }\r
-       else\r
-#endif\r
-\r
-               if (prace_is_(RACE_SKELETON) ||\r
-                       prace_is_(RACE_GOLEM) ||\r
-                       prace_is_(RACE_ZOMBIE) ||\r
-                       prace_is_(RACE_SPECTRE))\r
-               {\r
-                       if (o_ptr->tval == TV_STAFF || o_ptr->tval == TV_WAND)\r
-                               return TRUE;\r
-               }\r
-               else if (prace_is_(RACE_DEMON) ||\r
-                       (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON))\r
-               {\r
-                       if (o_ptr->tval == TV_CORPSE &&\r
-                               o_ptr->sval == SV_CORPSE &&\r
-                               my_strchr("pht", r_info[o_ptr->pval].d_char))\r
-                               return TRUE;\r
-               }\r
-\r
-       /* Assume not */\r
-       return (FALSE);\r
-}\r
-\r
-/*!\r
-* @brief \83I\83u\83W\83F\83N\83g\82ª\82Ç\82¿\82ç\82Ì\8eè\82É\82à\91\95\94õ\82Å\82«\82é\95\90\8aí\82©\82Ç\82¤\82©\82Ì\94»\92è\r
-* @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \8d\89E\97¼\95û\82Ì\8eè\82Å\91\95\94õ\82Å\82«\82é\82È\82ç\82ÎTRUE\82ð\95Ô\82·\81B\r
-*/\r
-bool item_tester_hook_mochikae(object_type *o_ptr)\r
-{\r
-       /* Check for a usable slot */\r
-       if (((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) ||\r
-               (o_ptr->tval == TV_SHIELD) || (o_ptr->tval == TV_CAPTURE) ||\r
-               (o_ptr->tval == TV_CARD)) return (TRUE);\r
-\r
-       /* Assume not wearable */\r
-       return (FALSE);\r
-}\r
-\r
-/*!\r
-* @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\96\82\93¹\8bï\82Æ\82µ\82Ä\94­\93®\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
-* Hook to determine if an object is activatable\r
-* @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \96\82\93¹\8bï\82Æ\82µ\82Ä\94­\93®\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_activate(object_type *o_ptr)\r
-{\r
-       u32b flgs[TR_FLAG_SIZE];\r
-\r
-       /* Not known */\r
-       if (!object_is_known(o_ptr)) return (FALSE);\r
-\r
-       /* Extract the flags */\r
-       object_flags(o_ptr, flgs);\r
-\r
-       /* Check activation flag */\r
-       if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);\r
-\r
-       /* Assume not */\r
-       return (FALSE);\r
-}\r
-\r
-/*!\r
-* @brief \83I\83u\83W\83F\83N\83g\82ð\96h\8bï\82Æ\82µ\82Ä\91\95\94õ\82Å\82«\82é\82©\82Ì\94»\92è / The "wearable" tester\r
-* @param o_ptr \94»\92è\82·\82é\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \83I\83u\83W\83F\83N\83g\82ª\96h\8bï\82Æ\82µ\82Ä\91\95\94õ\82Å\82«\82é\82È\82çTRUE\82ð\95Ô\82·\81B\r
-*/\r
-bool item_tester_hook_wear(object_type *o_ptr)\r
-{\r
-       if ((o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ABUNAI_MIZUGI))\r
-               if (p_ptr->psex == SEX_MALE) return FALSE;\r
-\r
-       /* Check for a usable slot */\r
-       if (wield_slot(o_ptr) >= INVEN_RARM) return (TRUE);\r
-\r
-       /* Assume not wearable */\r
-       return (FALSE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\8aÈ\88Õ\8eg\97p\83R\83}\83\93\83h\82Å\97\98\97p\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
-* Hook to determine if an object is useable\r
-* @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \97\98\97p\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_use(object_type *o_ptr)\r
-{\r
-       u32b flgs[TR_FLAG_SIZE];\r
-\r
-       /* Ammo */\r
-       if (o_ptr->tval == p_ptr->tval_ammo)\r
-               return (TRUE);\r
-\r
-       /* Useable object */\r
-       switch (o_ptr->tval)\r
-       {\r
-       case TV_SPIKE:\r
-       case TV_STAFF:\r
-       case TV_WAND:\r
-       case TV_ROD:\r
-       case TV_SCROLL:\r
-       case TV_POTION:\r
-       case TV_FOOD:\r
-       {\r
-               return (TRUE);\r
-       }\r
-\r
-       default:\r
-       {\r
-               int i;\r
-\r
-               /* Not known */\r
-               if (!object_is_known(o_ptr)) return (FALSE);\r
-\r
-               /* HACK - only items from the equipment can be activated */\r
-               for (i = INVEN_RARM; i < INVEN_TOTAL; i++)\r
-               {\r
-                       if (&inventory[i] == o_ptr)\r
-                       {\r
-                               /* Extract the flags */\r
-                               object_flags(o_ptr, flgs);\r
-\r
-                               /* Check activation flag */\r
-                               if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);\r
-                       }\r
-               }\r
-       }\r
-       }\r
-\r
-       /* Assume not */\r
-       return (FALSE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\88ù\82Þ\82±\82Æ\82ª\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
-* Hook to determine if an object can be quaffed\r
-* @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \88ù\82Þ\82±\82Æ\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_quaff(object_type *o_ptr)\r
-{\r
-       if (o_ptr->tval == TV_POTION) return TRUE;\r
-\r
-       if (prace_is_(RACE_ANDROID))\r
-       {\r
-               if (o_ptr->tval == TV_FLASK && o_ptr->sval == SV_FLASK_OIL)\r
-                       return TRUE;\r
-       }\r
-       return FALSE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83I\83u\83W\83F\83N\83g\82ð\83v\83\8c\83C\83\84\81[\82ª\93Ç\82Þ\82±\82Æ\82ª\82Å\82«\82é\82©\82ð\94»\92è\82·\82é /\r
-* Hook to determine if an object is readable\r
-* @param o_ptr \94»\92è\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \93Ç\82Þ\82±\82Æ\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_readable(object_type *o_ptr)\r
-{\r
-       if ((o_ptr->tval == TV_SCROLL) || (o_ptr->tval == TV_PARCHMENT) || (o_ptr->name1 == ART_GHB) || (o_ptr->name1 == ART_POWER)) return (TRUE);\r
-\r
-       /* Assume not */\r
-       return (FALSE);\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83G\83b\83Z\83\93\83X\82Ì\95t\89Á\89Â\94\\82È\95\90\8aí\82â\96î\92e\82©\82ð\95Ô\82·\r
-* @param o_ptr \83`\83F\83b\83N\82µ\82½\82¢\83I\83u\83W\83F\83N\83g\82Ì\8d\\91¢\91Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \83G\83b\83Z\83\93\83X\82Ì\95t\89Á\89Â\94\\82È\95\90\8aí\82©\96î\92e\82È\82ç\82ÎTRUE\82ð\95Ô\82·\81B\r
-*/\r
-bool item_tester_hook_melee_ammo(object_type *o_ptr)\r
-{\r
-       switch (o_ptr->tval)\r
-       {\r
-       case TV_HAFTED:\r
-       case TV_POLEARM:\r
-       case TV_DIGGING:\r
-       case TV_BOLT:\r
-       case TV_ARROW:\r
-       case TV_SHOT:\r
-       {\r
-               return (TRUE);\r
-       }\r
-       case TV_SWORD:\r
-       {\r
-               if (o_ptr->sval != SV_DOKUBARI) return (TRUE);\r
-       }\r
-       }\r
-\r
-       return (FALSE);\r
-}\r
-\r
-/*!\r
-* @brief \8eô\8fp\97Ì\88æ\82Ì\95\90\8aí\8eô\94\9b\82Ì\91Î\8fÛ\82É\82Å\82«\82é\95\90\8aí\82©\82Ç\82¤\82©\82ð\95Ô\82·\81B / An "item_tester_hook" for offer\r
-* @param o_ptr \83I\83u\83W\83F\83N\83g\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \8eô\94\9b\89Â\94\\82È\95\90\8aí\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_weapon_except_bow(object_type *o_ptr)\r
-{\r
-       switch (o_ptr->tval)\r
-       {\r
-       case TV_SWORD:\r
-       case TV_HAFTED:\r
-       case TV_POLEARM:\r
-       case TV_DIGGING:\r
-       {\r
-               return (TRUE);\r
-       }\r
-       }\r
-\r
-       return (FALSE);\r
-}\r
-\r
-/*!\r
-* @brief \8eô\8fp\97Ì\88æ\82Ì\8ae\8f\88\97\9d\82É\8eg\82¦\82é\8eô\82í\82ê\82½\91\95\94õ\82©\82Ç\82¤\82©\82ð\95Ô\82·\81B / An "item_tester_hook" for offer\r
-* @param o_ptr \83I\83u\83W\83F\83N\83g\8d\\91¢\91Ì\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \8eg\82¦\82é\91\95\94õ\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_cursed(object_type *o_ptr)\r
-{\r
-       return (bool)(object_is_cursed(o_ptr));\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83A\83C\83e\83\80\82ª\95À\82Ì\89¿\92l\82Ì\83A\83C\83e\83\80\82©\82Ç\82¤\82©\94»\92è\82·\82é /\r
-* Check if an object is nameless weapon or armour\r
-* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \95À\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_nameless_weapon_armour(object_type *o_ptr)\r
-{\r
-       /* Require weapon or armour */\r
-       if (!object_is_weapon_armour_ammo(o_ptr)) return FALSE;\r
-\r
-       /* Require nameless object if the object is well known */\r
-       if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))\r
-               return FALSE;\r
-\r
-       return TRUE;\r
-}\r
-\r
-\r
-/*!\r
-* @brief \83A\83C\83e\83\80\82ª\8aÓ\92è\8dÏ\82Ý\82©\82ð\94»\92è\82·\82é /\r
-* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_identify(object_type *o_ptr)\r
-{\r
-       return (bool)!object_is_known(o_ptr);\r
-}\r
-\r
-/*!\r
-* @brief \83A\83C\83e\83\80\82ª\8aÓ\92è\8dÏ\82Ý\82Ì\95\90\8aí\96h\8bï\82©\82ð\94»\92è\82·\82é /\r
-* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_identify_weapon_armour(object_type *o_ptr)\r
-{\r
-       if (object_is_known(o_ptr))\r
-               return FALSE;\r
-       return object_is_weapon_armour_ammo(o_ptr);\r
-}\r
-\r
-/*!\r
-* @brief \83A\83C\83e\83\80\82ª*\8aÓ\92è*\8dÏ\82Ý\82©\82ð\94»\92è\82·\82é /\r
-* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_identify_fully(object_type *o_ptr)\r
-{\r
-       return (bool)(!object_is_known(o_ptr) || !(o_ptr->ident & IDENT_MENTAL));\r
-}\r
-\r
-/*!\r
-* @brief \83A\83C\83e\83\80\82ª*\8aÓ\92è*\8dÏ\82Ý\82Ì\95\90\8aí\96h\8bï\82©\82ð\94»\92è\82·\82é /\r
-* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \8eÀ\8dÛ\82É\8aÓ\92è\8dÏ\82Ý\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_identify_fully_weapon_armour(object_type *o_ptr)\r
-{\r
-       if (!item_tester_hook_identify_fully(o_ptr))\r
-               return FALSE;\r
-       return object_is_weapon_armour_ammo(o_ptr);\r
-}\r
-\r
-\r
-/*!\r
-* @brief \96\82\97Í\8f[\93U\82ª\89Â\94\\82È\83A\83C\83e\83\80\82©\82Ç\82¤\82©\94»\92è\82·\82é /\r
-* Hook for "get_item()".  Determine if something is rechargable.\r
-* @param o_ptr \94»\92è\82·\82é\83A\83C\83e\83\80\82Ì\8fî\95ñ\8eQ\8fÆ\83|\83C\83\93\83^\r
-* @return \96\82\97Í\8f[\93U\82ª\89Â\94\\82È\82ç\82ÎTRUE\82ð\95Ô\82·\r
-*/\r
-bool item_tester_hook_recharge(object_type *o_ptr)\r
-{\r
-       /* Recharge staffs */\r
-       if (o_ptr->tval == TV_STAFF) return (TRUE);\r
-\r
-       /* Recharge wands */\r
-       if (o_ptr->tval == TV_WAND) return (TRUE);\r
-\r
-       /* Hack -- Recharge rods */\r
-       if (o_ptr->tval == TV_ROD) return (TRUE);\r
-\r
-       /* Nope */\r
-       return (FALSE);\r
-}\r
+
+#include "angband.h"
+#include "object-hook.h"
+
+/*!
+* @brief 対象のアイテムが矢やクロスボウの矢の材料になるかを返す。/
+* Hook to determine if an object is contertible in an arrow/bolt
+* @param o_ptr オブジェクトの構造体の参照ポインタ。
+* @return 材料にできるならTRUEを返す
+*/
+bool item_tester_hook_convertible(object_type *o_ptr)
+{
+       if ((o_ptr->tval == TV_JUNK) || (o_ptr->tval == TV_SKELETON)) return TRUE;
+
+       if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)) return TRUE;
+       /* Assume not */
+       return (FALSE);
+}
+
+/*!
+* @brief 武器匠の「武器」鑑定対象になるかを判定する。/ Hook to specify "weapon"
+* @param o_ptr オブジェクトの構造体の参照ポインタ。
+* @return 対象になるならTRUEを返す。
+*/
+bool item_tester_hook_orthodox_melee_weapons(object_type *o_ptr)
+{
+       switch (o_ptr->tval)
+       {
+       case TV_HAFTED:
+       case TV_POLEARM:
+       case TV_DIGGING:
+       {
+               return (TRUE);
+       }
+       case TV_SWORD:
+       {
+               if (o_ptr->sval != SV_DOKUBARI) return (TRUE);
+       }
+       }
+
+       return (FALSE);
+}
+
+/*!
+* @brief オブジェクトが右手か左手に装備できる武器かどうかの判定
+* @param o_ptr 判定するオブジェクトの構造体参照ポインタ
+* @return 右手か左手の武器として装備できるならばTRUEを返す。
+*/
+bool item_tester_hook_melee_weapon(object_type *o_ptr)
+{
+       /* Check for a usable slot */
+       if ((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) return (TRUE);
+
+       /* Assume not wearable */
+       return (FALSE);
+}
+
+
+/*!
+* @brief 武器匠の「矢弾」鑑定対象になるかを判定する。/ Hook to specify "weapon"
+* @param o_ptr オブジェクトの構造体の参照ポインタ。
+* @return 対象になるならTRUEを返す。
+*/
+bool item_tester_hook_ammo(object_type *o_ptr)
+{
+       switch (o_ptr->tval)
+       {
+       case TV_SHOT:
+       case TV_ARROW:
+       case TV_BOLT:
+       {
+               return (TRUE);
+       }
+       }
+
+       return (FALSE);
+}
+
+/*!
+* @brief 修復対象となる壊れた武器かを判定する。 / Hook to specify "broken weapon"
+* @param o_ptr オブジェクトの構造体の参照ポインタ。
+* @return 修復対象になるならTRUEを返す。
+*/
+bool item_tester_hook_broken_weapon(object_type *o_ptr)
+{
+       if (o_ptr->tval != TV_SWORD) return FALSE;
+
+       switch (o_ptr->sval)
+       {
+       case SV_BROKEN_DAGGER:
+       case SV_BROKEN_SWORD:
+               return TRUE;
+       }
+
+       return FALSE;
+}
+
+/*!
+* @brief オブジェクトが投射可能な武器かどうかを返す。
+* @param o_ptr 判定するオブジェクトの構造体参照ポインタ
+* @return 投射可能な武器ならばTRUE
+*/
+bool item_tester_hook_boomerang(object_type *o_ptr)
+{
+       if ((o_ptr->tval == TV_DIGGING) || (o_ptr->tval == TV_SWORD) || (o_ptr->tval == TV_POLEARM) || (o_ptr->tval == TV_HAFTED)) return (TRUE);
+
+       /* Assume not */
+       return (FALSE);
+}
+
+/*!
+* @brief オブジェクトをプレイヤーが食べることができるかを判定する /
+* Hook to determine if an object is eatable
+* @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
+* @return 食べることが可能ならばTRUEを返す
+*/
+bool item_tester_hook_eatable(object_type *o_ptr)
+{
+       if (o_ptr->tval == TV_FOOD) return TRUE;
+
+#if 0
+       if (prace_is_(RACE_SKELETON))
+       {
+               if (o_ptr->tval == TV_SKELETON ||
+                       (o_ptr->tval == TV_CORPSE && o_ptr->sval == SV_SKELETON))
+                       return TRUE;
+       }
+       else
+#endif
+
+               if (prace_is_(RACE_SKELETON) ||
+                       prace_is_(RACE_GOLEM) ||
+                       prace_is_(RACE_ZOMBIE) ||
+                       prace_is_(RACE_SPECTRE))
+               {
+                       if (o_ptr->tval == TV_STAFF || o_ptr->tval == TV_WAND)
+                               return TRUE;
+               }
+               else if (prace_is_(RACE_DEMON) ||
+                       (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON))
+               {
+                       if (o_ptr->tval == TV_CORPSE &&
+                               o_ptr->sval == SV_CORPSE &&
+                               my_strchr("pht", r_info[o_ptr->pval].d_char))
+                               return TRUE;
+               }
+
+       /* Assume not */
+       return (FALSE);
+}
+
+/*!
+* @brief オブジェクトがどちらの手にも装備できる武器かどうかの判定
+* @param o_ptr 判定するオブジェクトの構造体参照ポインタ
+* @return 左右両方の手で装備できるならばTRUEを返す。
+*/
+bool item_tester_hook_mochikae(object_type *o_ptr)
+{
+       /* Check for a usable slot */
+       if (((o_ptr->tval >= TV_DIGGING) && (o_ptr->tval <= TV_SWORD)) ||
+               (o_ptr->tval == TV_SHIELD) || (o_ptr->tval == TV_CAPTURE) ||
+               (o_ptr->tval == TV_CARD)) return (TRUE);
+
+       /* Assume not wearable */
+       return (FALSE);
+}
+
+/*!
+* @brief オブジェクトをプレイヤーが魔道具として発動できるかを判定する /
+* Hook to determine if an object is activatable
+* @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
+* @return 魔道具として発動可能ならばTRUEを返す
+*/
+bool item_tester_hook_activate(object_type *o_ptr)
+{
+       u32b flgs[TR_FLAG_SIZE];
+
+       /* Not known */
+       if (!object_is_known(o_ptr)) return (FALSE);
+
+       /* Extract the flags */
+       object_flags(o_ptr, flgs);
+
+       /* Check activation flag */
+       if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
+
+       /* Assume not */
+       return (FALSE);
+}
+
+/*!
+* @brief オブジェクトを防具として装備できるかの判定 / The "wearable" tester
+* @param o_ptr 判定するオブジェクトの構造体参照ポインタ
+* @return オブジェクトが防具として装備できるならTRUEを返す。
+*/
+bool item_tester_hook_wear(object_type *o_ptr)
+{
+       if ((o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ABUNAI_MIZUGI))
+               if (p_ptr->psex == SEX_MALE) return FALSE;
+
+       /* Check for a usable slot */
+       if (wield_slot(o_ptr) >= INVEN_RARM) return (TRUE);
+
+       /* Assume not wearable */
+       return (FALSE);
+}
+
+
+/*!
+* @brief オブジェクトをプレイヤーが簡易使用コマンドで利用できるかを判定する /
+* Hook to determine if an object is useable
+* @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
+* @return 利用可能ならばTRUEを返す
+*/
+bool item_tester_hook_use(object_type *o_ptr)
+{
+       u32b flgs[TR_FLAG_SIZE];
+
+       /* Ammo */
+       if (o_ptr->tval == p_ptr->tval_ammo)
+               return (TRUE);
+
+       /* Useable object */
+       switch (o_ptr->tval)
+       {
+       case TV_SPIKE:
+       case TV_STAFF:
+       case TV_WAND:
+       case TV_ROD:
+       case TV_SCROLL:
+       case TV_POTION:
+       case TV_FOOD:
+       {
+               return (TRUE);
+       }
+
+       default:
+       {
+               int i;
+
+               /* Not known */
+               if (!object_is_known(o_ptr)) return (FALSE);
+
+               /* HACK - only items from the equipment can be activated */
+               for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
+               {
+                       if (&inventory[i] == o_ptr)
+                       {
+                               /* Extract the flags */
+                               object_flags(o_ptr, flgs);
+
+                               /* Check activation flag */
+                               if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
+                       }
+               }
+       }
+       }
+
+       /* Assume not */
+       return (FALSE);
+}
+
+
+/*!
+* @brief オブジェクトをプレイヤーが飲むことができるかを判定する /
+* Hook to determine if an object can be quaffed
+* @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
+* @return 飲むことが可能ならばTRUEを返す
+*/
+bool item_tester_hook_quaff(object_type *o_ptr)
+{
+       if (o_ptr->tval == TV_POTION) return TRUE;
+
+       if (prace_is_(RACE_ANDROID))
+       {
+               if (o_ptr->tval == TV_FLASK && o_ptr->sval == SV_FLASK_OIL)
+                       return TRUE;
+       }
+       return FALSE;
+}
+
+
+/*!
+* @brief オブジェクトをプレイヤーが読むことができるかを判定する /
+* Hook to determine if an object is readable
+* @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
+* @return 読むことが可能ならばTRUEを返す
+*/
+bool item_tester_hook_readable(object_type *o_ptr)
+{
+       if ((o_ptr->tval == TV_SCROLL) || (o_ptr->tval == TV_PARCHMENT) || (o_ptr->name1 == ART_GHB) || (o_ptr->name1 == ART_POWER)) return (TRUE);
+
+       /* Assume not */
+       return (FALSE);
+}
+
+
+/*!
+* @brief エッセンスの付加可能な武器や矢弾かを返す
+* @param o_ptr チェックしたいオブジェクトの構造体参照ポインタ
+* @return エッセンスの付加可能な武器か矢弾ならばTRUEを返す。
+*/
+bool item_tester_hook_melee_ammo(object_type *o_ptr)
+{
+       switch (o_ptr->tval)
+       {
+       case TV_HAFTED:
+       case TV_POLEARM:
+       case TV_DIGGING:
+       case TV_BOLT:
+       case TV_ARROW:
+       case TV_SHOT:
+       {
+               return (TRUE);
+       }
+       case TV_SWORD:
+       {
+               if (o_ptr->sval != SV_DOKUBARI) return (TRUE);
+       }
+       }
+
+       return (FALSE);
+}
+
+/*!
+* @brief 呪術領域の武器呪縛の対象にできる武器かどうかを返す。 / An "item_tester_hook" for offer
+* @param o_ptr オブジェクト構造体の参照ポインタ
+* @return 呪縛可能な武器ならばTRUEを返す
+*/
+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);
+}
+
+/*!
+* @brief 呪術領域の各処理に使える呪われた装備かどうかを返す。 / An "item_tester_hook" for offer
+* @param o_ptr オブジェクト構造体の参照ポインタ
+* @return 使える装備ならばTRUEを返す
+*/
+bool item_tester_hook_cursed(object_type *o_ptr)
+{
+       return (bool)(object_is_cursed(o_ptr));
+}
+
+
+/*!
+* @brief アイテムが並の価値のアイテムかどうか判定する /
+* Check if an object is nameless weapon or armour
+* @param o_ptr 判定するアイテムの情報参照ポインタ
+* @return 並ならばTRUEを返す
+*/
+bool item_tester_hook_nameless_weapon_armour(object_type *o_ptr)
+{
+       /* Require weapon or armour */
+       if (!object_is_weapon_armour_ammo(o_ptr)) return FALSE;
+
+       /* Require nameless object if the object is well known */
+       if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
+               return FALSE;
+
+       return TRUE;
+}
+
+
+/*!
+* @brief アイテムが鑑定済みかを判定する /
+* @param o_ptr 判定するアイテムの情報参照ポインタ
+* @return 実際に鑑定済みならばTRUEを返す
+*/
+bool item_tester_hook_identify(object_type *o_ptr)
+{
+       return (bool)!object_is_known(o_ptr);
+}
+
+/*!
+* @brief アイテムが鑑定済みの武器防具かを判定する /
+* @param o_ptr 判定するアイテムの情報参照ポインタ
+* @return 実際に鑑定済みならばTRUEを返す
+*/
+bool item_tester_hook_identify_weapon_armour(object_type *o_ptr)
+{
+       if (object_is_known(o_ptr))
+               return FALSE;
+       return object_is_weapon_armour_ammo(o_ptr);
+}
+
+/*!
+* @brief アイテムが*鑑定*済みかを判定する /
+* @param o_ptr 判定するアイテムの情報参照ポインタ
+* @return 実際に鑑定済みならばTRUEを返す
+*/
+bool item_tester_hook_identify_fully(object_type *o_ptr)
+{
+       return (bool)(!object_is_known(o_ptr) || !(o_ptr->ident & IDENT_MENTAL));
+}
+
+/*!
+* @brief アイテムが*鑑定*済みの武器防具かを判定する /
+* @param o_ptr 判定するアイテムの情報参照ポインタ
+* @return 実際に鑑定済みならばTRUEを返す
+*/
+bool item_tester_hook_identify_fully_weapon_armour(object_type *o_ptr)
+{
+       if (!item_tester_hook_identify_fully(o_ptr))
+               return FALSE;
+       return object_is_weapon_armour_ammo(o_ptr);
+}
+
+
+/*!
+* @brief 魔力充填が可能なアイテムかどうか判定する /
+* Hook for "get_item()".  Determine if something is rechargable.
+* @param o_ptr 判定するアイテムの情報参照ポインタ
+* @return 魔力充填が可能ならばTRUEを返す
+*/
+bool item_tester_hook_recharge(object_type *o_ptr)
+{
+       /* Recharge staffs */
+       if (o_ptr->tval == TV_STAFF) return (TRUE);
+
+       /* Recharge wands */
+       if (o_ptr->tval == TV_WAND) return (TRUE);
+
+       /* Hack -- Recharge rods */
+       if (o_ptr->tval == TV_ROD) return (TRUE);
+
+       /* Nope */
+       return (FALSE);
+}
index 6a77742..2cbcf5a 100644 (file)
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-\r
-/*!\r
-* @brief \94é\8fp\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \96\82\96@ID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
-* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
-*/\r
-cptr do_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 _("\93d\8c\82", "Zap");\r
-               if (desc) return _("\93d\8c\82\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "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 _("\96\82\96@\82Ì\8e{\8fù", "Wizard Lock");\r
-               if (desc) return _("\94à\82É\8c®\82ð\82©\82¯\82é\81B", "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 _("\93§\96¾\91Ì\8a´\92m", "Detect Invisibility");\r
-               if (desc) return _("\8bß\82­\82Ì\93§\96¾\82È\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "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 _("\83\82\83\93\83X\83^\81[\8a´\92m", "Detect Monsters");\r
-               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\8c©\82¦\82é\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "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 _("\83V\83\87\81[\83g\81E\83e\83\8c\83|\81[\83g", "Blink");\r
-               if (desc) return _("\8bß\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "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 _("\83\89\83C\83g\81E\83G\83\8a\83A", "Light Area");\r
-               if (desc) return _("\8cõ\8c¹\82ª\8fÆ\82ç\82µ\82Ä\82¢\82é\94Í\88Í\82©\95\94\89®\91S\91Ì\82ð\89i\8bv\82É\96¾\82é\82­\82·\82é\81B", "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 _("ã©\82Æ\94à \94j\89ó", "Trap & Door Destruction");\r
-               if (desc) return _("\88ê\92¼\90ü\8fã\82Ì\91S\82Ä\82Ìã©\82Æ\94à\82ð\94j\89ó\82·\82é\81B", "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 _("\8cy\8f\9d\82Ì\8e¡\96ü", "Cure Light Wounds");\r
-               if (desc) return _("\89ö\89ä\82Æ\91Ì\97Í\82ð\8f­\82µ\89ñ\95\9c\82³\82¹\82é\81B", "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
-                       if (cast) (void)cure_light_wounds(dice, sides);\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("ã©\82Æ\94à \8a´\92m", "Detect Doors & Traps");\r
-               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ìã©\82Æ\94à\82Æ\8aK\92i\82ð\8a´\92m\82·\82é\81B", "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 _("\94R\91f", "Phlogiston");\r
-               if (desc) return _("\8cõ\8c¹\82É\94R\97¿\82ð\95â\8b\8b\82·\82é\81B", "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 _("\8dà\95ó\8a´\92m", "Detect Treasure");\r
-               if (desc) return _("\8bß\82­\82Ì\8dà\95ó\82ð\8a´\92m\82·\82é\81B", "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 _("\96\82\96\8a´\92m", "Detect Enchantment");\r
-               if (desc) return _("\8bß\82­\82Ì\96\82\96@\82ª\82©\82©\82Á\82½\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B", "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 _("\83A\83C\83e\83\80\8a´\92m", "Detect Objects");\r
-               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B", "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 _("\89ð\93Å", "Cure Poison");\r
-               if (desc) return _("\93Å\82ð\91Ì\93à\82©\82ç\8a®\91S\82É\8eæ\82è\8f\9c\82­\81B", "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 _("\91Ï\97â", "Resist Cold");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\97â\8bC\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B", "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 _("\91Ï\89Î", "Resist Fire");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89\8a\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to 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 _("\91Ï\93d", "Resist Lightning");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93d\8c\82\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to 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 _("\91Ï\8e_", "Resist Acid");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8e_\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to 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 _("\8fd\8f\9d\82Ì\8e¡\96ü", "Cure Medium Wounds");\r
-               if (desc) return _("\89ö\89ä\82Æ\91Ì\97Í\82ð\92\86\92ö\93x\89ñ\95\9c\82³\82¹\82é\81B", "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
-                       if (cast) (void)cure_serious_wounds(4, 8);\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("\83e\83\8c\83|\81[\83g", "Teleport");\r
-               if (desc) return _("\89\93\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "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 _("\8aÓ\92è", "Identify");\r
-               if (desc) return _("\83A\83C\83e\83\80\82ð\8e¯\95Ê\82·\82é\81B", "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 _("\8aâ\90Î\97n\89ð", "Stone to Mud");\r
-               if (desc) return _("\95Ç\82ð\97n\82©\82µ\82Ä\8f°\82É\82·\82é\81B", "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 _("\91M\8cõ", "Ray of Light");\r
-               if (desc) return _("\8cõ\90ü\82ð\95ú\82Â\81B\8cõ\82è\82ð\8c\99\82¤\83\82\83\93\83X\83^\81[\82É\8cø\89Ê\82ª\82 \82é\81B", "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(_("\8cõ\90ü\82ª\95ú\82½\82ê\82½\81B", "A line of light appears."));\r
-                               lite_line(dir, damroll(6, 8));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("\8bó\95 \8f[\91«", "Satisfy Hunger");\r
-               if (desc) return _("\96\9e\95 \82É\82·\82é\81B", "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 _("\93§\96¾\8e\8b\94F", "See Invisible");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93§\96¾\82È\82à\82Ì\82ª\8c©\82¦\82é\82æ\82¤\82É\82È\82é\81B", "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 _("\83G\83\8c\83\81\83\93\83^\83\8b\8f¢\8a«", "Conjure Elemental");\r
-               if (desc) return _("1\91Ì\82Ì\83G\83\8c\83\81\83\93\83^\83\8b\82ð\8f¢\8a«\82·\82é\81B", "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(_("\83G\83\8c\83\81\83\93\83^\83\8b\82Í\8c»\82ê\82È\82©\82Á\82½\81B", "No Elementals arrive."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("\83e\83\8c\83|\81[\83g\81E\83\8c\83x\83\8b", "Teleport Level");\r
-               if (desc) return _("\8fu\8e\9e\82É\8fã\82©\89º\82Ì\8aK\82É\83e\83\8c\83|\81[\83g\82·\82é\81B", "Teleport to up or down stairs in a moment.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_check(_("\96{\93\96\82É\91¼\82Ì\8aK\82É\83e\83\8c\83|\81[\83g\82µ\82Ü\82·\82©\81H", "Are you sure? (Teleport Level)"))) return NULL;\r
-                               teleport_level(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("\83e\83\8c\83|\81[\83g\81E\83\82\83\93\83X\83^\81[", "Teleport Away");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[\82ð\83e\83\8c\83|\81[\83g\82³\82¹\82é\83r\81[\83\80\82ð\95ú\82Â\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\8c³\91f\82Ì\8b\85", "Elemental Ball");\r
-               if (desc) return _("\89\8a\81A\93d\8c\82\81A\97â\8bC\81A\8e_\82Ì\82Ç\82ê\82©\82Ì\8b\85\82ð\95ú\82Â\81B", "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 _("\91S\8a´\92m", "Detection");\r
-               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\81Aã©\81A\94à\81A\8aK\92i\81A\8dà\95ó\81A\82»\82µ\82Ä\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B",\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 _("\8bA\8aÒ\82Ì\8eô\95¶", "Word of Recall");\r
-               if (desc) return _("\92n\8fã\82É\82¢\82é\82Æ\82«\82Í\83_\83\93\83W\83\87\83\93\82Ì\8dÅ\90[\8aK\82Ö\81A\83_\83\93\83W\83\87\83\93\82É\82¢\82é\82Æ\82«\82Í\92n\8fã\82Ö\82Æ\88Ú\93®\82·\82é\81B",\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 _("\90ç\97¢\8aá", "Clairvoyance");\r
-               if (desc) return _("\82»\82Ì\8aK\91S\91Ì\82ð\89i\8bv\82É\8fÆ\82ç\82µ\81A\83_\83\93\83W\83\87\83\93\93à\82·\82×\82Ä\82Ì\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B\82³\82ç\82É\81A\88ê\92è\8e\9e\8aÔ\83e\83\8c\83p\83V\81[\94\\97Í\82ð\93¾\82é\81B",\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
+#include "angband.h"
+#include "cmd-spell.h"
+
+/*!
+* @brief 秘術領域魔法の各処理を行う
+* @param spell 魔法ID
+* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+*/
+cptr do_arcane_spell(SPELL_IDX spell, BIT_FLAGS 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;
+
+       int dir;
+       int plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("電撃", "Zap");
+               if (desc) return _("電撃のボルトもしくはビームを放つ。", "Fires a bolt or beam of lightning.");
+
+               {
+                       int dice = 3 + (plev - 1) / 5;
+                       int sides = 3;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 1:
+               if (name) return _("魔法の施錠", "Wizard Lock");
+               if (desc) return _("扉に鍵をかける。", "Locks a door.");
+
+               {
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               wizard_lock(dir);
+                       }
+               }
+               break;
+
+       case 2:
+               if (name) return _("透明体感知", "Detect Invisibility");
+               if (desc) return _("近くの透明なモンスターを感知する。", "Detects all invisible monsters in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_monsters_invis(rad);
+                       }
+               }
+               break;
+
+       case 3:
+               if (name) return _("モンスター感知", "Detect Monsters");
+               if (desc) return _("近くの全ての見えるモンスターを感知する。", "Detects all monsters in your vicinity unless invisible.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_monsters_normal(rad);
+                       }
+               }
+               break;
+
+       case 4:
+               if (name) return _("ショート・テレポート", "Blink");
+               if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");
+
+               {
+                       POSITION range = 10;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               teleport_player(range, 0L);
+                       }
+               }
+               break;
+
+       case 5:
+               if (name) return _("ライト・エリア", "Light Area");
+               if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
+
+               {
+                       int dice = 2;
+                       int sides = plev / 2;
+                       int rad = plev / 10 + 1;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               lite_area(damroll(dice, sides), rad);
+                       }
+               }
+               break;
+
+       case 6:
+               if (name) return _("罠と扉 破壊", "Trap & Door Destruction");
+               if (desc) return _("一直線上の全ての罠と扉を破壊する。", "Fires a beam which destroy traps and doors.");
+
+               {
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               destroy_door(dir);
+                       }
+               }
+               break;
+
+       case 7:
+               if (name) return _("軽傷の治癒", "Cure Light Wounds");
+               if (desc) return _("怪我と体力を少し回復させる。", "Heals cut and HP a little.");
+
+               {
+                       int dice = 2;
+                       int sides = 8;
+
+                       if (info) return info_heal(dice, sides, 0);
+                       if (cast) (void)cure_light_wounds(dice, sides);
+               }
+               break;
+
+       case 8:
+               if (name) return _("罠と扉 感知", "Detect Doors & Traps");
+               if (desc) return _("近くの全ての罠と扉と階段を感知する。", "Detects traps, doors, and stairs in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_traps(rad, TRUE);
+                               detect_doors(rad);
+                               detect_stairs(rad);
+                       }
+               }
+               break;
+
+       case 9:
+               if (name) return _("燃素", "Phlogiston");
+               if (desc) return _("光源に燃料を補給する。", "Adds more turns of light to a lantern or torch.");
+
+               {
+                       if (cast)
+                       {
+                               phlogiston();
+                       }
+               }
+               break;
+
+       case 10:
+               if (name) return _("財宝感知", "Detect Treasure");
+               if (desc) return _("近くの財宝を感知する。", "Detects all treasures in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_treasure(rad);
+                               detect_objects_gold(rad);
+                       }
+               }
+               break;
+
+       case 11:
+               if (name) return _("魔法 感知", "Detect Enchantment");
+               if (desc) return _("近くの魔法がかかったアイテムを感知する。", "Detects all magical items in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_objects_magic(rad);
+                       }
+               }
+               break;
+
+       case 12:
+               if (name) return _("アイテム感知", "Detect Objects");
+               if (desc) return _("近くの全てのアイテムを感知する。", "Detects all items in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_objects_normal(rad);
+                       }
+               }
+               break;
+
+       case 13:
+               if (name) return _("解毒", "Cure Poison");
+               if (desc) return _("毒を体内から完全に取り除く。", "Cures poison status.");
+
+               {
+                       if (cast)
+                       {
+                               set_poisoned(0);
+                       }
+               }
+               break;
+
+       case 14:
+               if (name) return _("耐冷", "Resist Cold");
+               if (desc) return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。", "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_cold(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 15:
+               if (name) return _("耐火", "Resist Fire");
+               if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_fire(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 16:
+               if (name) return _("耐電", "Resist Lightning");
+               if (desc) return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_elec(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 17:
+               if (name) return _("耐酸", "Resist Acid");
+               if (desc) return _("一定時間、酸への耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_acid(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 18:
+               if (name) return _("重傷の治癒", "Cure Medium Wounds");
+               if (desc) return _("怪我と体力を中程度回復させる。", "Heals cut and HP more.");
+
+               {
+                       int dice = 4;
+                       int sides = 8;
+
+                       if (info) return info_heal(dice, sides, 0);
+                       if (cast) (void)cure_serious_wounds(4, 8);
+               }
+               break;
+
+       case 19:
+               if (name) return _("テレポート", "Teleport");
+               if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");
+
+               {
+                       POSITION range = plev * 5;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               teleport_player(range, 0L);
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("鑑定", "Identify");
+               if (desc) return _("アイテムを識別する。", "Identifies an item.");
+
+               {
+                       if (cast)
+                       {
+                               if (!ident_spell(FALSE)) return NULL;
+                       }
+               }
+               break;
+
+       case 21:
+               if (name) return _("岩石溶解", "Stone to Mud");
+               if (desc) return _("壁を溶かして床にする。", "Turns one rock square to mud.");
+
+               {
+                       int dice = 1;
+                       int sides = 30;
+                       int base = 20;
+
+                       if (info) return info_damage(dice, sides, base);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               wall_to_mud(dir, 20 + randint1(30));
+                       }
+               }
+               break;
+
+       case 22:
+               if (name) return _("閃光", "Ray of Light");
+               if (desc) return _("光線を放つ。光りを嫌うモンスターに効果がある。", "Fires a beam of light which damages to light-sensitive monsters.");
+
+               {
+                       int dice = 6;
+                       int sides = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               msg_print(_("光線が放たれた。", "A line of light appears."));
+                               lite_line(dir, damroll(6, 8));
+                       }
+               }
+               break;
+
+       case 23:
+               if (name) return _("空腹充足", "Satisfy Hunger");
+               if (desc) return _("満腹にする。", "Satisfies hunger.");
+
+               {
+                       if (cast)
+                       {
+                               set_food(PY_FOOD_MAX - 1);
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("透明視認", "See Invisible");
+               if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");
+
+               {
+                       int base = 24;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_tim_invis(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 25:
+               if (name) return _("エレメンタル召喚", "Conjure Elemental");
+               if (desc) return _("1体のエレメンタルを召喚する。", "Summons an elemental.");
+
+               {
+                       if (cast)
+                       {
+                               if (!summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))
+                               {
+                                       msg_print(_("エレメンタルは現れなかった。", "No Elementals arrive."));
+                               }
+                       }
+               }
+               break;
+
+       case 26:
+               if (name) return _("テレポート・レベル", "Teleport Level");
+               if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");
+
+               {
+                       if (cast)
+                       {
+                               if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;
+                               teleport_level(0);
+                       }
+               }
+               break;
+
+       case 27:
+               if (name) return _("テレポート・モンスター", "Teleport Away");
+               if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_beam(GF_AWAY_ALL, dir, power);
+                       }
+               }
+               break;
+
+       case 28:
+               if (name) return _("元素の球", "Elemental Ball");
+               if (desc) return _("炎、電撃、冷気、酸のどれかの球を放つ。", "Fires a ball of some elements.");
+
+               {
+                       HIT_POINT dam = 75 + plev;
+                       int rad = 2;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               int type;
+
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               switch (randint1(4))
+                               {
+                               case 1:  type = GF_FIRE; break;
+                               case 2:  type = GF_ELEC; break;
+                               case 3:  type = GF_COLD; break;
+                               default: type = GF_ACID; break;
+                               }
+
+                               fire_ball(type, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 29:
+               if (name) return _("全感知", "Detection");
+               if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",
+                       "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_all(rad);
+                       }
+               }
+               break;
+
+       case 30:
+               if (name) return _("帰還の呪文", "Word of Recall");
+               if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",
+                       "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
+
+               {
+                       int base = 15;
+                       int sides = 20;
+
+                       if (info) return info_delay(base, sides);
+
+                       if (cast)
+                       {
+                               if (!word_of_recall()) return NULL;
+                       }
+               }
+               break;
+
+       case 31:
+               if (name) return _("千里眼", "Clairvoyance");
+               if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。さらに、一定時間テレパシー能力を得る。",
+                       "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");
+
+               {
+                       int base = 25;
+                       int sides = 30;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               chg_virtue(V_KNOWLEDGE, 1);
+                               chg_virtue(V_ENLIGHTEN, 1);
+
+                               wiz_lite(FALSE);
+
+                               if (!p_ptr->telepathy)
+                               {
+                                       set_tim_esp(randint1(sides) + base, FALSE);
+                               }
+                       }
+               }
+               break;
+       }
+
+       return "";
+}
index 52b5789..abd3577 100644 (file)
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-\r
-/*!\r
-* @brief \83J\83I\83X\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \96\82\96@ID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
-* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
-*/\r
-cptr do_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[] = _("\91¹\8f\9d:", "dam ");\r
-       static const char s_random[] = _("\83\89\83\93\83_\83\80", "random");\r
-\r
-       int dir;\r
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("\83}\83W\83b\83N\81E\83~\83T\83C\83\8b", "Magic Missile");\r
-               if (desc) return _("\8eã\82¢\96\82\96@\82Ì\96î\82ð\95ú\82Â\81B", "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 _("\83g\83\89\83b\83v/\83h\83A\94j\89ó", "Trap / Door Destruction");\r
-               if (desc) return _("\97×\90Ú\82·\82éã©\82Æ\94à\82ð\94j\89ó\82·\82é\81B", "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 _("\91M\8cõ", "Flash of Light");\r
-               if (desc) return _("\8cõ\8c¹\82ª\8fÆ\82ç\82µ\82Ä\82¢\82é\94Í\88Í\82©\95\94\89®\91S\91Ì\82ð\89i\8bv\82É\96¾\82é\82­\82·\82é\81B", "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 _("\8d¬\97\90\82Ì\8eè", "Touch of Confusion");\r
-               if (desc) return _("\91\8a\8eè\82ð\8d¬\97\90\82³\82¹\82é\8dU\8c\82\82ð\82Å\82«\82é\82æ\82¤\82É\82·\82é\81B", "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(_("\82 \82È\82½\82Ì\8eè\82Í\8cõ\82è\8en\82ß\82½\81B", "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 _("\96\82\97Íày\97ô", "Mana Burst");\r
-               if (desc) return _("\96\82\96@\82Ì\8b\85\82ð\95ú\82Â\81B", "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 (IS_WIZARD_CLASS())\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 _("\83t\83@\83C\83A\81E\83{\83\8b\83g", "Fire Bolt");\r
-               if (desc) return _("\89\8a\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "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 _("\97Í\82Ì\8c\9d", "Fist of Force");\r
-               if (desc) return _("\82²\82­\8f¬\82³\82È\95ª\89ð\82Ì\8b\85\82ð\95ú\82Â\81B", "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 _("\83e\83\8c\83|\81[\83g", "Teleport Self");\r
-               if (desc) return _("\89\93\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "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 _("\83\8f\83\93\83_\81[", "Wonder");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[\82É\83\89\83\93\83_\83\80\82È\8cø\89Ê\82ð\97^\82¦\82é\81B", "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 _("\83J\83I\83X\81E\83{\83\8b\83g", "Chaos Bolt");\r
-               if (desc) return _("\83J\83I\83X\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "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 _("\83\\83j\83b\83N\81E\83u\81[\83\80", "Sonic Boom");\r
-               if (desc) return _("\8e©\95ª\82ð\92\86\90S\82Æ\82µ\82½\8d\8c\89¹\82Ì\8b\85\82ð\94­\90\82³\82¹\82é\81B", "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(_("\83h\81[\83\93\81I\95\94\89®\82ª\97h\82ê\82½\81I", "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 _("\94j\96Å\82Ì\96î", "Doom Bolt");\r
-               if (desc) return _("\8f\83\90\88\82È\96\82\97Í\82Ì\83r\81[\83\80\82ð\95ú\82Â\81B", "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 _("\83t\83@\83C\83A\81E\83{\81[\83\8b", "Fire Ball");\r
-               if (desc) return _("\89\8a\82Ì\8b\85\82ð\95ú\82Â\81B", "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 _("\83e\83\8c\83|\81[\83g\81E\83A\83E\83F\83C", "Teleport Other");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[\82ð\83e\83\8c\83|\81[\83g\82³\82¹\82é\83r\81[\83\80\82ð\95ú\82Â\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\94j\89ó\82Ì\8c¾\97t", "Word of Destruction");\r
-               if (desc) return _("\8eü\95Ó\82Ì\83A\83C\83e\83\80\81A\83\82\83\93\83X\83^\81[\81A\92n\8c`\82ð\94j\89ó\82·\82é\81B", "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 _("\83\8d\83O\83\8b\83X\94­\93®", "Invoke Logrus");\r
-               if (desc) return _("\8b\90\91å\82È\83J\83I\83X\82Ì\8b\85\82ð\95ú\82Â\81B", "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 _("\91¼\8eÒ\95Ï\97e", "Polymorph Other");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\95Ï\90g\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\98A\8d½\88î\8dÈ", "Chain Lightning");\r
-               if (desc) return _("\91S\95û\8cü\82É\91Î\82µ\82Ä\93d\8c\82\82Ì\83r\81[\83\80\82ð\95ú\82Â\81B", "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 _("\96\82\97Í\95\95\93ü", "Arcane Binding");\r
-               if (desc) return _("\8fñ/\96\82\96@\96_\82Ì\8f[\93U\89ñ\90\94\82ð\91\9d\82â\82·\82©\81A\8f[\93U\92\86\82Ì\83\8d\83b\83h\82Ì\8f[\93U\8e\9e\8aÔ\82ð\8c¸\82ç\82·\81B", "Recharges staffs, wands or rods.");\r
-\r
-               {\r
-                       int power = 90;\r
-\r
-                       if (info) return info_power(power);\r
-                       if (cast)\r
-                       {\r
-                               if (!recharge(power)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("\8c´\8eq\95ª\89ð", "Disintegrate");\r
-               if (desc) return _("\8b\90\91å\82È\95ª\89ð\82Ì\8b\85\82ð\95ú\82Â\81B", "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 _("\8c»\8eÀ\95Ï\97e", "Alter Reality");\r
-               if (desc) return _("\8c»\8dÝ\82Ì\8aK\82ð\8dÄ\8d\\90¬\82·\82é\81B", "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 _("\83}\83W\83b\83N\81E\83\8d\83P\83b\83g", "Magic Rocket");\r
-               if (desc) return _("\83\8d\83P\83b\83g\82ð\94­\8eË\82·\82é\81B", "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(_("\83\8d\83P\83b\83g\94­\8eË\81I", "You launch a rocket!"));\r
-                               fire_rocket(GF_ROCKET, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("\8d¬\93×\82Ì\90n", "Chaos Branding");\r
-               if (desc) return _("\95\90\8aí\82É\83J\83I\83X\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "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 _("\88«\96\82\8f¢\8a«", "Summon Demon");\r
-               if (desc) return _("\88«\96\82\82ð1\91Ì\8f¢\8a«\82·\82é\81B", "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(_("\97°\89©\82Ì\88«\8fL\82ª\8f[\96\9e\82µ\82½\81B", "The area fills with a stench of sulphur and brimstone."));\r
-                                       if (pet)\r
-                                       {\r
-                                               msg_print(_("\81u\82²\97p\82Å\82²\82´\82¢\82Ü\82·\82©\81A\82²\8eå\90l\97l\81v", "'What is thy bidding... Master?'"));\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               msg_print(_("\81u\94Ú\82µ\82«\8eÒ\82æ\81A\89ä\82Í\93ð\82Ì\89º\96l\82É\82 \82ç\82¸\81\82¨\91O\82Ì\8d°\82ð\92¸\82­\82¼\81I\81v",\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 _("\8fd\97Í\8cõ\90ü", "Beam of Gravity");\r
-               if (desc) return _("\8fd\97Í\82Ì\83r\81[\83\80\82ð\95ú\82Â\81B", "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
-                               fire_beam(GF_GRAVITY, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("\97¬\90¯\8cQ", "Meteor Swarm");\r
-               if (desc) return _("\8e©\95ª\82Ì\8eü\95Ó\82Éè¦\90Î\82ð\97\8e\82Æ\82·\81B", "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 _("\89\8b\82Ì\88ê\8c\82", "Flame Strike");\r
-               if (desc) return _("\8e©\95ª\82ð\92\86\90S\82Æ\82µ\82½\92´\8b\90\91å\82È\89\8a\82Ì\8b\85\82ð\94­\90\82³\82¹\82é\81B", "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 _("\8d¬\93×\8f¢\97\88", "Call Chaos");\r
-               if (desc) return _("\83\89\83\93\83_\83\80\82È\91®\90«\82Ì\8b\85\82â\83r\81[\83\80\82ð\94­\90\82³\82¹\82é\81B", "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 _("\8e©\8cÈ\95Ï\97e", "Polymorph Self");\r
-               if (desc) return _("\8e©\95ª\82ð\95Ï\90g\82³\82¹\82æ\82¤\82Æ\82·\82é\81B", "Polymorphs yourself.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_check(_("\95Ï\90g\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H", "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 _("\96\82\97Í\82Ì\97\92", "Mana Storm");\r
-               if (desc) return _("\94ñ\8fí\82É\8b­\97Í\82Å\8b\90\91å\82È\8f\83\90\88\82È\96\82\97Í\82Ì\8b\85\82ð\95ú\82Â\81B", "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
-                               fire_ball(GF_MANA, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("\83\8d\83O\83\8b\83X\82Ì\83u\83\8c\83X", "Breathe Logrus");\r
-               if (desc) return _("\94ñ\8fí\82É\8b­\97Í\82È\83J\83I\83X\82Ì\8b\85\82ð\95ú\82Â\81B", "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 _("\8b\95\96³\8f¢\97\88", "Call the Void");\r
-               if (desc) return _("\8e©\95ª\82Ì\8eü\88Í\82É\8cü\82©\82Á\82Ä\81A\83\8d\83P\83b\83g\81A\8f\83\90\88\82È\96\82\97Í\82Ì\8b\85\81A\95ú\8eË\90«\94p\8aü\95¨\82Ì\8b\85\82ð\95ú\82Â\81B\82½\82¾\82µ\81A\95Ç\82É\97×\90Ú\82µ\82Ä\8eg\97p\82·\82é\82Æ\8dL\94Í\88Í\82ð\94j\89ó\82·\82é\81B",\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
+#include "angband.h"
+#include "cmd-spell.h"
+
+/*!
+* @brief カオス領域魔法の各処理を行う
+* @param spell 魔法ID
+* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+*/
+cptr do_chaos_spell(SPELL_IDX spell, BIT_FLAGS 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;
+
+       static const char s_dam[] = _("損傷:", "dam ");
+       static const char s_random[] = _("ランダム", "random");
+
+       int dir;
+       int plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("マジック・ミサイル", "Magic Missile");
+               if (desc) return _("弱い魔法の矢を放つ。", "Fires a weak bolt of magic.");
+
+               {
+                       int dice = 3 + ((plev - 1) / 5);
+                       int sides = 4;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 1:
+               if (name) return _("トラップ/ドア破壊", "Trap / Door Destruction");
+               if (desc) return _("隣接する罠と扉を破壊する。", "Destroys all traps in adjacent squares.");
+
+               {
+                       int rad = 1;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               destroy_doors_touch();
+                       }
+               }
+               break;
+
+       case 2:
+               if (name) return _("閃光", "Flash of Light");
+               if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
+
+               {
+                       int dice = 2;
+                       int sides = plev / 2;
+                       int rad = (plev / 10) + 1;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               lite_area(damroll(dice, sides), rad);
+                       }
+               }
+               break;
+
+       case 3:
+               if (name) return _("混乱の手", "Touch of Confusion");
+               if (desc) return _("相手を混乱させる攻撃をできるようにする。", "Attempts to confuse the next monster that you hit.");
+
+               {
+                       if (cast)
+                       {
+                               if (!(p_ptr->special_attack & ATTACK_CONFUSE))
+                               {
+                                       msg_print(_("あなたの手は光り始めた。", "Your hands start glowing."));
+                                       p_ptr->special_attack |= ATTACK_CONFUSE;
+                                       p_ptr->redraw |= (PR_STATUS);
+                               }
+                       }
+               }
+               break;
+
+       case 4:
+               if (name) return _("魔力炸裂", "Mana Burst");
+               if (desc) return _("魔法の球を放つ。", "Fires a ball of magic.");
+
+               {
+                       int dice = 3;
+                       int sides = 5;
+                       int rad = (plev < 30) ? 2 : 3;
+                       int base;
+
+                       if (IS_WIZARD_CLASS())
+                               base = plev + plev / 2;
+                       else
+                               base = plev + plev / 4;
+
+
+                       if (info) return info_damage(dice, sides, base);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_MISSILE, dir, damroll(dice, sides) + base, rad);
+
+                               /*
+                               * Shouldn't actually use GF_MANA, as
+                               * it will destroy all items on the
+                               * floor
+                               */
+                       }
+               }
+               break;
+
+       case 5:
+               if (name) return _("ファイア・ボルト", "Fire Bolt");
+               if (desc) return _("炎のボルトもしくはビームを放つ。", "Fires a bolt or beam of fire.");
+
+               {
+                       int dice = 8 + (plev - 5) / 4;
+                       int sides = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_bolt_or_beam(beam_chance(), GF_FIRE, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 6:
+               if (name) return _("力の拳", "Fist of Force");
+               if (desc) return _("ごく小さな分解の球を放つ。", "Fires a tiny ball of disintegration.");
+
+               {
+                       int dice = 8 + ((plev - 5) / 4);
+                       int sides = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_DISINTEGRATE, dir, damroll(dice, sides), 0);
+                       }
+               }
+               break;
+
+       case 7:
+               if (name) return _("テレポート", "Teleport Self");
+               if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");
+
+               {
+                       POSITION range = plev * 5;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               teleport_player(range, 0L);
+                       }
+               }
+               break;
+
+       case 8:
+               if (name) return _("ワンダー", "Wonder");
+               if (desc) return _("モンスターにランダムな効果を与える。", "Fires something with random effects.");
+
+               {
+                       if (info) return s_random;
+
+                       if (cast)
+                       {
+
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               cast_wonder(dir);
+                       }
+               }
+               break;
+
+       case 9:
+               if (name) return _("カオス・ボルト", "Chaos Bolt");
+               if (desc) return _("カオスのボルトもしくはビームを放つ。", "Fires a bolt or ball of chaos.");
+
+               {
+                       int dice = 10 + (plev - 5) / 4;
+                       int sides = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_bolt_or_beam(beam_chance(), GF_CHAOS, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 10:
+               if (name) return _("ソニック・ブーム", "Sonic Boom");
+               if (desc) return _("自分を中心とした轟音の球を発生させる。", "Generates a ball of sound centered on you.");
+
+               {
+                       HIT_POINT dam = 60 + plev;
+                       int rad = plev / 10 + 2;
+
+                       if (info) return info_damage(0, 0, dam / 2);
+
+                       if (cast)
+                       {
+                               msg_print(_("ドーン!部屋が揺れた!", "BOOM! Shake the room!"));
+                               project(0, rad, p_ptr->y, p_ptr->x, dam, GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
+                       }
+               }
+               break;
+
+       case 11:
+               if (name) return _("破滅の矢", "Doom Bolt");
+               if (desc) return _("純粋な魔力のビームを放つ。", "Fires a beam of pure mana.");
+
+               {
+                       int dice = 11 + (plev - 5) / 4;
+                       int sides = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_beam(GF_MANA, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 12:
+               if (name) return _("ファイア・ボール", "Fire Ball");
+               if (desc) return _("炎の球を放つ。", "Fires a ball of fire.");
+
+               {
+                       HIT_POINT dam = plev + 55;
+                       int rad = 2;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_FIRE, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 13:
+               if (name) return _("テレポート・アウェイ", "Teleport Other");
+               if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_beam(GF_AWAY_ALL, dir, power);
+                       }
+               }
+               break;
+
+       case 14:
+               if (name) return _("破壊の言葉", "Word of Destruction");
+               if (desc) return _("周辺のアイテム、モンスター、地形を破壊する。", "Destroy everything in nearby area.");
+
+               {
+                       int base = 12;
+                       int sides = 4;
+
+                       if (cast)
+                       {
+                               destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE);
+                       }
+               }
+               break;
+
+       case 15:
+               if (name) return _("ログルス発動", "Invoke Logrus");
+               if (desc) return _("巨大なカオスの球を放つ。", "Fires a huge ball of chaos.");
+
+               {
+                       HIT_POINT dam = plev * 2 + 99;
+                       int rad = plev / 5;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_CHAOS, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 16:
+               if (name) return _("他者変容", "Polymorph Other");
+               if (desc) return _("モンスター1体を変身させる。抵抗されると無効。", "Attempts to polymorph a monster.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               poly_monster(dir, plev);
+                       }
+               }
+               break;
+
+       case 17:
+               if (name) return _("連鎖稲妻", "Chain Lightning");
+               if (desc) return _("全方向に対して電撃のビームを放つ。", "Fires lightning beams in all directions.");
+
+               {
+                       int dice = 5 + plev / 10;
+                       int sides = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               for (dir = 0; dir <= 9; dir++)
+                                       fire_beam(GF_ELEC, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 18:
+               if (name) return _("魔力封入", "Arcane Binding");
+               if (desc) return _("杖/魔法棒の充填回数を増やすか、充填中のロッドの充填時間を減らす。", "Recharges staffs, wands or rods.");
+
+               {
+                       int power = 90;
+
+                       if (info) return info_power(power);
+                       if (cast)
+                       {
+                               if (!recharge(power)) return NULL;
+                       }
+               }
+               break;
+
+       case 19:
+               if (name) return _("原子分解", "Disintegrate");
+               if (desc) return _("巨大な分解の球を放つ。", "Fires a huge ball of disintegration.");
+
+               {
+                       HIT_POINT dam = plev + 70;
+                       int rad = 3 + plev / 40;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_DISINTEGRATE, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("現実変容", "Alter Reality");
+               if (desc) return _("現在の階を再構成する。", "Recreates current dungeon level.");
+
+               {
+                       int base = 15;
+                       int sides = 20;
+
+                       if (info) return info_delay(base, sides);
+
+                       if (cast)
+                       {
+                               alter_reality();
+                       }
+               }
+               break;
+
+       case 21:
+               if (name) return _("マジック・ロケット", "Magic Rocket");
+               if (desc) return _("ロケットを発射する。", "Fires a magic rocket.");
+
+               {
+                       HIT_POINT dam = 120 + plev * 2;
+                       int rad = 2;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               msg_print(_("ロケット発射!", "You launch a rocket!"));
+                               fire_rocket(GF_ROCKET, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 22:
+               if (name) return _("混沌の刃", "Chaos Branding");
+               if (desc) return _("武器にカオスの属性をつける。", "Makes current weapon a Chaotic weapon.");
+
+               {
+                       if (cast)
+                       {
+                               brand_weapon(2);
+                       }
+               }
+               break;
+
+       case 23:
+               if (name) return _("悪魔召喚", "Summon Demon");
+               if (desc) return _("悪魔を1体召喚する。", "Summons a demon.");
+
+               {
+                       if (cast)
+                       {
+                               u32b flg = 0L;
+                               bool pet = !one_in_(3);
+
+                               if (pet) flg |= PM_FORCE_PET;
+                               else flg |= PM_NO_PET;
+                               if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
+
+                               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_DEMON, flg))
+                               {
+                                       msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone."));
+                                       if (pet)
+                                       {
+                                               msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
+                                       }
+                                       else
+                                       {
+                                               msg_print(_("「卑しき者よ、我は汝の下僕にあらず! お前の魂を頂くぞ!」",
+                                                       "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("重力光線", "Beam of Gravity");
+               if (desc) return _("重力のビームを放つ。", "Fires a beam of gravity.");
+
+               {
+                       int dice = 9 + (plev - 5) / 4;
+                       int sides = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+                               fire_beam(GF_GRAVITY, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 25:
+               if (name) return _("流星群", "Meteor Swarm");
+               if (desc) return _("自分の周辺に隕石を落とす。", "Makes meteor balls fall down to nearby random locations.");
+
+               {
+                       HIT_POINT dam = plev * 2;
+                       int rad = 2;
+
+                       if (info) return info_multi_damage(dam);
+
+                       if (cast)
+                       {
+                               cast_meteor(dam, rad);
+                       }
+               }
+               break;
+
+       case 26:
+               if (name) return _("焔の一撃", "Flame Strike");
+               if (desc) return _("自分を中心とした超巨大な炎の球を発生させる。", "Generate a huge ball of fire centered on you.");
+
+               {
+                       HIT_POINT dam = 300 + 3 * plev;
+                       int rad = 8;
+
+                       if (info) return info_damage(0, 0, dam / 2);
+
+                       if (cast)
+                       {
+                               fire_ball(GF_FIRE, 0, dam, rad);
+                       }
+               }
+               break;
+
+       case 27:
+               if (name) return _("混沌召来", "Call Chaos");
+               if (desc) return _("ランダムな属性の球やビームを発生させる。", "Generate random kind of balls or beams.");
+
+               {
+                       if (info) return format("%s150 / 250", s_dam);
+
+                       if (cast)
+                       {
+                               call_chaos();
+                       }
+               }
+               break;
+
+       case 28:
+               if (name) return _("自己変容", "Polymorph Self");
+               if (desc) return _("自分を変身させようとする。", "Polymorphs yourself.");
+
+               {
+                       if (cast)
+                       {
+                               if (!get_check(_("変身します。よろしいですか?", "You will polymorph yourself. Are you sure? "))) return NULL;
+                               do_poly_self();
+                       }
+               }
+               break;
+
+       case 29:
+               if (name) return _("魔力の嵐", "Mana Storm");
+               if (desc) return _("非常に強力で巨大な純粋な魔力の球を放つ。", "Fires an extremely powerful huge ball of pure mana.");
+
+               {
+                       HIT_POINT dam = 300 + plev * 4;
+                       int rad = 4;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+                               fire_ball(GF_MANA, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 30:
+               if (name) return _("ログルスのブレス", "Breathe Logrus");
+               if (desc) return _("非常に強力なカオスの球を放つ。", "Fires an extremely powerful ball of chaos.");
+
+               {
+                       HIT_POINT dam = p_ptr->chp;
+                       int rad = 2;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_CHAOS, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 31:
+               if (name) return _("虚無召来", "Call the Void");
+               if (desc) return _("自分の周囲に向かって、ロケット、純粋な魔力の球、放射性廃棄物の球を放つ。ただし、壁に隣接して使用すると広範囲を破壊する。",
+                       "Fires rockets, mana balls and nuclear waste balls in all directions each unless you are not adjacent to any walls. Otherwise *destroys* huge area.");
+
+               {
+                       if (info) return format("%s3 * 175", s_dam);
+
+                       if (cast)
+                       {
+                               call_the_();
+                       }
+               }
+               break;
+       }
+
+       return "";
 }
\ No newline at end of file
index 29aca14..c116bd2 100644 (file)
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-#include "selfinfo.h"\r
-\r
-\r
-\r
-/*!\r
-* @brief \8f \97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \96\82\96@ID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
-* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
-*/\r
-cptr do_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 _("\90Ô\8aO\90ü\8e\8b\97Í", "Infravision");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\90Ô\8aO\90ü\8e\8b\97Í\82ª\91\9d\8b­\82³\82ê\82é\81B", "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 _("\89ñ\95\9c\97Í\8b­\89»", "Regeneration");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89ñ\95\9c\97Í\82ª\91\9d\8b­\82³\82ê\82é\81B", "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 _("\8bó\95 \8f[\91«", "Satisfy Hunger");\r
-               if (desc) return _("\96\9e\95 \82É\82È\82é\81B", "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 _("\91Ï\97â\8bC", "Resist Cold");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\97â\8bC\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to 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 _("\91Ï\89Î\89\8a", "Resist Fire");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89\8a\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to 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 _("\8em\8bC\8d\82\97g", "Heroism");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83q\81[\83\8d\81[\8bC\95ª\82É\82È\82é\81B", "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
-                               (void)heroism(base);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("\91Ï\93d\8c\82", "Resist Lightning");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93d\8c\82\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to 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 _("\91Ï\8e_", "Resist Acid");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8e_\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to 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 _("\93§\96¾\8e\8b\94F", "See Invisibility");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93§\96¾\82È\82à\82Ì\82ª\8c©\82¦\82é\82æ\82¤\82É\82È\82é\81B", "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 _("\89ð\8eô", "Remove Curse");\r
-               if (desc) return _("\83A\83C\83e\83\80\82É\82©\82©\82Á\82½\8eã\82¢\8eô\82¢\82ð\89ð\8f\9c\82·\82é\81B", "Removes normal curses from equipped items.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (remove_curse())\r
-                               {\r
-                                       msg_print(_("\92N\82©\82É\8c©\8eç\82ç\82ê\82Ä\82¢\82é\82æ\82¤\82È\8bC\82ª\82·\82é\81B", "You feel as if someone is watching over you."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("\91Ï\93Å", "Resist Poison");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93Å\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");\r
-\r
-               {\r
-                       int base = 20;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_oppose_pois(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("\8b\90í\8em\89»", "Berserk");\r
-               if (desc) return _("\8b\90í\8em\89»\82µ\81A\8b°\95|\82ð\8f\9c\8b\8e\82·\82é\81B", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");\r
-\r
-               {\r
-                       int base = 25;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               (void)berserk(base + randint1(base));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("\8e©\8cÈ\95ª\90Í", "Self Knowledge");\r
-               if (desc) return _("\8c»\8dÝ\82Ì\8e©\95ª\82Ì\8fó\91Ô\82ð\8a®\91S\82É\92m\82é\81B",\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 _("\91Î\8e×\88«\8c\8b\8aE", "Protection from Evil");\r
-               if (desc) return _("\8e×\88«\82È\83\82\83\93\83X\83^\81[\82Ì\8dU\8c\82\82ð\96h\82®\83o\83\8a\83A\82ð\92£\82é\81B", "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 _("\96ü\82µ", "Cure");\r
-               if (desc) return _("\93Å\81A\9eN\9eO\8fó\91Ô\81A\95\89\8f\9d\82ð\91S\89õ\82³\82¹\81A\8c\8ao\82ð\92¼\82·\81B", "Heals poison, stun, cut and hallucination completely.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               (void)true_healing(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("\96\82\96@\8c\95", "Mana Branding");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\95\90\8aí\82É\97â\8bC\81A\89\8a\81A\93d\8c\82\81A\8e_\81A\93Å\82Ì\82¢\82¸\82ê\82©\82Ì\91®\90«\82ð\82Â\82¯\82é\81B\95\90\8aí\82ð\8e\9d\82½\82È\82¢\82Æ\8eg\82¦\82È\82¢\81B",\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 _("\83e\83\8c\83p\83V\81[", "Telepathy");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83e\83\8c\83p\83V\81[\94\\97Í\82ð\93¾\82é\81B", "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 _("\94§\90Î\89»", "Stone Skin");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81AAC\82ð\8fã\8f¸\82³\82¹\82é\81B", "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 _("\91S\91Ï\90«", "Resistance");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8e_\81A\93d\8c\82\81A\89\8a\81A\97â\8bC\81A\93Å\82É\91Î\82·\82é\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to 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 _("\83X\83s\81[\83h", "Haste Self");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89Á\91¬\82·\82é\81B", "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 _("\95Ç\94²\82¯", "Walk through Wall");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\94¼\95¨\8e¿\89»\82µ\95Ç\82ð\92Ê\82è\94²\82¯\82ç\82ê\82é\82æ\82¤\82É\82È\82é\81B", "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 _("\8f\82\96\81\82«", "Polish Shield");\r
-               if (desc) return _("\8f\82\82É\94½\8eË\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "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 _("\83S\81[\83\8c\83\80\90»\91¢", "Create Golem");\r
-               if (desc) return _("1\91Ì\82Ì\83S\81[\83\8c\83\80\82ð\90»\91¢\82·\82é\81B", "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(_("\83S\81[\83\8c\83\80\82ð\8dì\82Á\82½\81B", "You make a golem."));\r
-                               }\r
-                               else\r
-                               {\r
-                                       msg_print(_("\82¤\82Ü\82­\83S\81[\83\8c\83\80\82ð\8dì\82ê\82È\82©\82Á\82½\81B", "No Golems arrive."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("\96\82\96@\82Ì\8aZ", "Magical armor");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\96\82\96@\96h\8cä\97Í\82ÆAC\82ª\8fã\82ª\82è\81A\8d¬\97\90\82Æ\96Ó\96Ú\82Ì\91Ï\90«\81A\94½\8eË\94\\97Í\81A\96\83á\83\92m\82ç\82¸\81A\95\82\97V\82ð\93¾\82é\81B",\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 _("\91\95\94õ\96³\97Í\89»", "Remove Enchantment");\r
-               if (desc) return _("\95\90\8aí\81E\96h\8bï\82É\82©\82¯\82ç\82ê\82½\82 \82ç\82ä\82é\96\82\97Í\82ð\8a®\91S\82É\89ð\8f\9c\82·\82é\81B", "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 _("\8eô\82¢\95²\8dÓ", "Remove All Curse");\r
-               if (desc) return _("\83A\83C\83e\83\80\82É\82©\82©\82Á\82½\8b­\97Í\82È\8eô\82¢\82ð\89ð\8f\9c\82·\82é\81B", "Removes normal and heavy curse from equipped items.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (remove_all_curse())\r
-                               {\r
-                                       msg_print(_("\92N\82©\82É\8c©\8eç\82ç\82ê\82Ä\82¢\82é\82æ\82¤\82È\8bC\82ª\82·\82é\81B", "You feel as if someone is watching over you."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("\8a®\91S\82È\82é\92m\8e¯", "Knowledge True");\r
-               if (desc) return _("\83A\83C\83e\83\80\82Ì\8e\9d\82Â\94\\97Í\82ð\8a®\91S\82É\92m\82é\81B", "*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 _("\95\90\8aí\8b­\89»", "Enchant Weapon");\r
-               if (desc) return _("\95\90\8aí\82Ì\96½\92\86\97¦\8fC\90³\82Æ\83_\83\81\81[\83W\8fC\90³\82ð\8b­\89»\82·\82é\81B", "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 _("\96h\8bï\8b­\89»", "Enchant Armor");\r
-               if (desc) return _("\8aZ\82Ì\96h\8cä\8fC\90³\82ð\8b­\89»\82·\82é\81B", "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 _("\95\90\8aí\91®\90«\95t\97^", "Brand Weapon");\r
-               if (desc) return _("\95\90\8aí\82É\83\89\83\93\83_\83\80\82É\91®\90«\82ð\82Â\82¯\82é\81B", "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 _("\90l\8aÔ\83g\83\89\83\93\83v", "Living Trump");\r
-               if (desc) return _("\83\89\83\93\83_\83\80\82É\83e\83\8c\83|\81[\83g\82·\82é\93Ë\91R\95Ï\88Ù\82©\81A\8e©\95ª\82Ì\88Ó\8ev\82Å\83e\83\8c\83|\81[\83g\82·\82é\93Ë\91R\95Ï\88Ù\82ª\90g\82É\82Â\82­\81B",\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(_("\82 \82È\82½\82Í\90\82«\82Ä\82¢\82é\83J\81[\83h\82É\95Ï\82í\82Á\82½\81B", "You have turned into a Living Trump."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("\91®\90«\82Ö\82Ì\96Æ\89u", "Immunity");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\97â\8bC\81A\89\8a\81A\93d\8c\82\81A\8e_\82Ì\82¢\82¸\82ê\82©\82É\91Î\82·\82é\96Æ\89u\82ð\93¾\82é\81B",\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
+#include "angband.h"
+#include "cmd-spell.h"
+#include "selfinfo.h"
+
+
+
+/*!
+* @brief 匠領域魔法の各処理を行う
+* @param spell 魔法ID
+* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+*/
+cptr do_craft_spell(SPELL_IDX spell, BIT_FLAGS 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;
+
+       int plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("赤外線視力", "Infravision");
+               if (desc) return _("一定時間、赤外線視力が増強される。", "Gives infravision for a while.");
+
+               {
+                       int base = 100;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_tim_infra(base + randint1(base), FALSE);
+                       }
+               }
+               break;
+
+       case 1:
+               if (name) return _("回復力強化", "Regeneration");
+               if (desc) return _("一定時間、回復力が増強される。", "Gives regeneration ability for a while.");
+
+               {
+                       int base = 80;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_tim_regen(base + randint1(base), FALSE);
+                       }
+               }
+               break;
+
+       case 2:
+               if (name) return _("空腹充足", "Satisfy Hunger");
+               if (desc) return _("満腹になる。", "Satisfies hunger.");
+
+               {
+                       if (cast)
+                       {
+                               set_food(PY_FOOD_MAX - 1);
+                       }
+               }
+               break;
+
+       case 3:
+               if (name) return _("耐冷気", "Resist Cold");
+               if (desc) return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_cold(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 4:
+               if (name) return _("耐火炎", "Resist Fire");
+               if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_fire(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 5:
+               if (name) return _("士気高揚", "Heroism");
+               if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
+
+               {
+                       int base = 25;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               (void)heroism(base);
+                       }
+               }
+               break;
+
+       case 6:
+               if (name) return _("耐電撃", "Resist Lightning");
+               if (desc) return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_elec(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 7:
+               if (name) return _("耐酸", "Resist Acid");
+               if (desc) return _("一定時間、酸への耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_acid(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 8:
+               if (name) return _("透明視認", "See Invisibility");
+               if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");
+
+               {
+                       int base = 24;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_tim_invis(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 9:
+               if (name) return _("解呪", "Remove Curse");
+               if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");
+
+               {
+                       if (cast)
+                       {
+                               if (remove_curse())
+                               {
+                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
+                               }
+                       }
+               }
+               break;
+
+       case 10:
+               if (name) return _("耐毒", "Resist Poison");
+               if (desc) return _("一定時間、毒への耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_pois(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 11:
+               if (name) return _("狂戦士化", "Berserk");
+               if (desc) return _("狂戦士化し、恐怖を除去する。", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");
+
+               {
+                       int base = 25;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               (void)berserk(base + randint1(base));
+                       }
+               }
+               break;
+
+       case 12:
+               if (name) return _("自己分析", "Self Knowledge");
+               if (desc) return _("現在の自分の状態を完全に知る。",
+                       "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");
+
+               {
+                       if (cast)
+                       {
+                               self_knowledge();
+                       }
+               }
+               break;
+
+       case 13:
+               if (name) return _("対邪悪結界", "Protection from Evil");
+               if (desc) return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack.");
+
+               {
+                       int base = 3 * plev;
+                       int sides = 25;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               set_protevil(randint1(sides) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 14:
+               if (name) return _("癒し", "Cure");
+               if (desc) return _("毒、朦朧状態、負傷を全快させ、幻覚を直す。", "Heals poison, stun, cut and hallucination completely.");
+
+               {
+                       if (cast)
+                       {
+                               (void)true_healing(0);
+                       }
+               }
+               break;
+
+       case 15:
+               if (name) return _("魔法剣", "Mana Branding");
+               if (desc) return _("一定時間、武器に冷気、炎、電撃、酸、毒のいずれかの属性をつける。武器を持たないと使えない。",
+                       "Makes current weapon some elemental branded. You must wield weapons.");
+
+               {
+                       int base = plev / 2;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               if (!choose_ele_attack()) return NULL;
+                       }
+               }
+               break;
+
+       case 16:
+               if (name) return _("テレパシー", "Telepathy");
+               if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
+
+               {
+                       int base = 25;
+                       int sides = 30;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               set_tim_esp(randint1(sides) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 17:
+               if (name) return _("肌石化", "Stone Skin");
+               if (desc) return _("一定時間、ACを上昇させる。", "Gives bonus to AC for a while.");
+
+               {
+                       int base = 30;
+                       int sides = 20;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               set_shield(randint1(sides) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 18:
+               if (name) return _("全耐性", "Resistance");
+               if (desc) return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。",
+                       "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.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_acid(randint1(base) + base, FALSE);
+                               set_oppose_elec(randint1(base) + base, FALSE);
+                               set_oppose_fire(randint1(base) + base, FALSE);
+                               set_oppose_cold(randint1(base) + base, FALSE);
+                               set_oppose_pois(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 19:
+               if (name) return _("スピード", "Haste Self");
+               if (desc) return _("一定時間、加速する。", "Hastes you for a while.");
+
+               {
+                       int base = plev;
+                       int sides = 20 + plev;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               set_fast(randint1(sides) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("壁抜け", "Walk through Wall");
+               if (desc) return _("一定時間、半物質化し壁を通り抜けられるようになる。", "Gives ability to pass walls for a while.");
+
+               {
+                       int base = plev / 2;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_kabenuke(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 21:
+               if (name) return _("盾磨き", "Polish Shield");
+               if (desc) return _("盾に反射の属性をつける。", "Makes a shield a shield of reflection.");
+
+               {
+                       if (cast)
+                       {
+                               pulish_shield();
+                       }
+               }
+               break;
+
+       case 22:
+               if (name) return _("ゴーレム製造", "Create Golem");
+               if (desc) return _("1体のゴーレムを製造する。", "Creates a golem.");
+
+               {
+                       if (cast)
+                       {
+                               if (summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_GOLEM, PM_FORCE_PET))
+                               {
+                                       msg_print(_("ゴーレムを作った。", "You make a golem."));
+                               }
+                               else
+                               {
+                                       msg_print(_("うまくゴーレムを作れなかった。", "No Golems arrive."));
+                               }
+                       }
+               }
+               break;
+
+       case 23:
+               if (name) return _("魔法の鎧", "Magical armor");
+               if (desc) return _("一定時間、魔法防御力とACが上がり、混乱と盲目の耐性、反射能力、麻痺知らず、浮遊を得る。",
+                       "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_magicdef(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("装備無力化", "Remove Enchantment");
+               if (desc) return _("武器・防具にかけられたあらゆる魔力を完全に解除する。", "Removes all magics completely from any weapon or armor.");
+
+               {
+                       if (cast)
+                       {
+                               if (!mundane_spell(TRUE)) return NULL;
+                       }
+               }
+               break;
+
+       case 25:
+               if (name) return _("呪い粉砕", "Remove All Curse");
+               if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");
+
+               {
+                       if (cast)
+                       {
+                               if (remove_all_curse())
+                               {
+                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
+                               }
+                       }
+               }
+               break;
+
+       case 26:
+               if (name) return _("完全なる知識", "Knowledge True");
+               if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
+
+               {
+                       if (cast)
+                       {
+                               if (!identify_fully(FALSE)) return NULL;
+                       }
+               }
+               break;
+
+       case 27:
+               if (name) return _("武器強化", "Enchant Weapon");
+               if (desc) return _("武器の命中率修正とダメージ修正を強化する。", "Attempts to increase +to-hit, +to-dam of a weapon.");
+
+               {
+                       if (cast)
+                       {
+                               if (!enchant_spell(randint0(4) + 1, randint0(4) + 1, 0)) return NULL;
+                       }
+               }
+               break;
+
+       case 28:
+               if (name) return _("防具強化", "Enchant Armor");
+               if (desc) return _("鎧の防御修正を強化する。", "Attempts to increase +AC of an armor.");
+
+               {
+                       if (cast)
+                       {
+                               if (!enchant_spell(0, 0, randint0(3) + 2)) return NULL;
+                       }
+               }
+               break;
+
+       case 29:
+               if (name) return _("武器属性付与", "Brand Weapon");
+               if (desc) return _("武器にランダムに属性をつける。", "Makes current weapon a random ego weapon.");
+
+               {
+                       if (cast)
+                       {
+                               brand_weapon(randint0(18));
+                       }
+               }
+               break;
+
+       case 30:
+               if (name) return _("人間トランプ", "Living Trump");
+               if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。",
+                       "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");
+
+               {
+                       if (cast)
+                       {
+                               int mutation;
+
+                               if (one_in_(7))
+                                       /* Teleport control */
+                                       mutation = 12;
+                               else
+                                       /* Random teleportation (uncontrolled) */
+                                       mutation = 77;
+
+                               /* Gain the mutation */
+                               if (gain_random_mutation(mutation))
+                               {
+                                       msg_print(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));
+                               }
+                       }
+               }
+               break;
+
+       case 31:
+               if (name) return _("属性への免疫", "Immunity");
+               if (desc) return _("一定時間、冷気、炎、電撃、酸のいずれかに対する免疫を得る。",
+                       "Gives an immunity to fire, cold, electricity or acid for a while.");
+
+               {
+                       int base = 13;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               if (!choose_ele_immune(base + randint1(base))) return NULL;
+                       }
+               }
+               break;
+       }
+
+       return "";
+}
index b25d38c..3f6cae2 100644 (file)
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-\r
-\r
-\r
-/*!\r
-* @brief \94j\8e×\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \96\82\96@ID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
-* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
-*/\r
-cptr do_crusade_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 _("\92¦\94±", "Punishment");\r
-               if (desc) return _("\93d\8c\82\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or beam of lightning.");\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_ELEC, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("\8e×\88«\91\8dÝ\8a´\92m", "Detect Evil");\r
-               if (desc) return _("\8bß\82­\82Ì\8e×\88«\82È\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "Detects all evil monsters in your vicinity.");\r
-\r
-               {\r
-                       int rad = DETECT_RAD_DEFAULT;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               detect_monsters_evil(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("\8b°\95|\8f\9c\8b\8e", "Remove Fear");\r
-               if (desc) return _("\8b°\95|\82ð\8eæ\82è\8f\9c\82­\81B", "Removes fear.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               set_afraid(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("\88Ð\88³", "Scare Monster");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8b°\95|\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to scare 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
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("\90¹\88æ", "Sanctuary");\r
-               if (desc) return _("\97×\90Ú\82µ\82½\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\96°\82ç\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to sleep monsters in the adjacent squares.");\r
-\r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               sleep_monsters_touch();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("\93ü\8cû", "Portal");\r
-               if (desc) return _("\92\86\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "Teleport medium distance.");\r
-\r
-               {\r
-                       POSITION range = 25 + plev / 2;\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 _("\83X\83^\81[\83_\83X\83g", "Star Dust");\r
-               if (desc) return _("\83^\81[\83Q\83b\83g\95t\8bß\82É\91M\8cõ\82Ì\83{\83\8b\83g\82ð\98A\8eË\82·\82é\81B", "Fires many bolts of light near the target.");\r
-\r
-               {\r
-                       int dice = 3 + (plev - 1) / 9;\r
-                       int sides = 2;\r
-\r
-                       if (info) return info_multi_damage_dice(dice, sides);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-                               fire_blast(GF_LITE, dir, dice, sides, 10, 3);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("\90g\91Ì\8fò\89»", "Purify");\r
-               if (desc) return _("\8f\9d\81A\93Å\81A\9eN\9eO\82©\82ç\91S\89õ\82·\82é\81B", "Heals all cut, stun and poison status.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               set_cut(0);\r
-                               set_poisoned(0);\r
-                               set_stun(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("\8e×\88«\94ò\82Î\82µ", "Scatter Evil");\r
-               if (desc) return _("\8e×\88«\82È\83\82\83\93\83X\83^\81[1\91Ì\82ð\83e\83\8c\83|\81[\83g\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to teleport an evil monster away.");\r
-\r
-               {\r
-                       int power = MAX_SIGHT * 5;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-                               fire_ball(GF_AWAY_EVIL, dir, power, 0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("\90¹\82È\82é\8cõ\8b\85", "Holy Orb");\r
-               if (desc) return _("\90¹\82È\82é\97Í\82ð\82à\82Â\95ó\8eì\82ð\95ú\82Â\81B\8e×\88«\82È\83\82\83\93\83X\83^\81[\82É\91Î\82µ\82Ä\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\82é\82ª\81A\91P\97Ç\82È\83\82\83\93\83X\83^\81[\82É\82Í\8cø\89Ê\82ª\82È\82¢\81B",\r
-                       "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good 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_PRIEST ||\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_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("\88«\96\82\95¥\82¢", "Exorcism");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83A\83\93\83f\83b\83h\8by\82Ñ\88«\96\82\82É\83_\83\81\81[\83W\82ð\97^\82¦\81A\8e×\88«\82È\83\82\83\93\83X\83^\81[\82ð\8b°\95|\82³\82¹\82é\81B",\r
-                       "Damages all undead and demons in sight, and scares all evil monsters in sight.");\r
-\r
-               {\r
-                       int sides = plev;\r
-                       int power = plev;\r
-\r
-                       if (info) return info_damage(1, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               dispel_undead(randint1(sides));\r
-                               dispel_demons(randint1(sides));\r
-                               turn_evil(power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("\89ð\8eô", "Remove Curse");\r
-               if (desc) return _("\83A\83C\83e\83\80\82É\82©\82©\82Á\82½\8eã\82¢\8eô\82¢\82ð\89ð\8f\9c\82·\82é\81B", "Removes normal curses from equipped items.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (remove_curse())\r
-                               {\r
-                                       msg_print(_("\92N\82©\82É\8c©\8eç\82ç\82ê\82Ä\82¢\82é\82æ\82¤\82È\8bC\82ª\82·\82é\81B", "You feel as if someone is watching over you."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("\93§\96¾\8e\8b\94F", "Sense Unseen");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93§\96¾\82È\82à\82Ì\82ª\8c©\82¦\82é\82æ\82¤\82É\82È\82é\81B", "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 13:\r
-               if (name) return _("\91Î\8e×\88«\8c\8b\8aE", "Protection from Evil");\r
-               if (desc) return _("\8e×\88«\82È\83\82\83\93\83X\83^\81[\82Ì\8dU\8c\82\82ð\96h\82®\83o\83\8a\83A\82ð\92£\82é\81B", "Gives aura which protect you from evil monster's physical attack.");\r
-\r
-               {\r
-                       int base = 25;\r
-                       int sides = 3 * plev;\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 _("\8dÙ\82«\82Ì\97\8b", "Judgment Thunder");\r
-               if (desc) return _("\8b­\97Í\82È\93d\8c\82\82Ì\83{\83\8b\83g\82ð\95ú\82Â\81B", "Fires a powerful bolt of lightning.");\r
-\r
-               {\r
-                       HIT_POINT dam = 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
-                               fire_bolt(GF_ELEC, dir, dam);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("\90¹\82È\82é\8cä\8c¾\97t", "Holy Word");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\8e×\88«\82È\91\8dÝ\82É\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\81A\91Ì\97Í\82ð\89ñ\95\9c\82µ\81A\93Å\81A\8b°\95|\81A\9eN\9eO\8fó\91Ô\81A\95\89\8f\9d\82©\82ç\91S\89õ\82·\82é\81B",\r
-                       "Damages all evil monsters in sight, heals HP somewhat, and completely heals poison, fear, stun and cut status.");\r
-\r
-               {\r
-                       int dam_sides = plev * 6;\r
-                       int heal = 100;\r
-\r
-                       if (info) return format(_("\91¹:1d%d/\89ñ%d", "dam:d%d/h%d"), dam_sides, heal);\r
-                       if (cast)\r
-                       {\r
-                               dispel_evil(randint1(dam_sides));\r
-                               hp_player(heal);\r
-                               set_afraid(0);\r
-                               set_poisoned(0);\r
-                               set_stun(0);\r
-                               set_cut(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("\8aJ\82©\82ê\82½\93¹", "Unbarring Ways");\r
-               if (desc) return _("\88ê\92¼\90ü\8fã\82Ì\91S\82Ä\82Ìã©\82Æ\94à\82ð\94j\89ó\82·\82é\81B", "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 17:\r
-               if (name) return _("\95\95\96\82", "Arrest");\r
-               if (desc) return _("\8e×\88«\82È\83\82\83\93\83X\83^\81[\82Ì\93®\82«\82ð\8e~\82ß\82é\81B", "Attempts to paralyze an evil monster.");\r
-\r
-               {\r
-                       int power = plev * 2;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-                               stasis_evil(dir);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("\90¹\82È\82é\83I\81[\83\89", "Holy Aura");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8e×\88«\82È\83\82\83\93\83X\83^\81[\82ð\8f\9d\82Â\82¯\82é\90¹\82È\82é\83I\81[\83\89\82ð\93¾\82é\81B",\r
-                       "Gives aura of holy power which injures evil monsters which attacked you 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_tim_sh_holy(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("\83A\83\93\83f\83b\83h&\88«\96\82\91Þ\8eU", "Dispel Undead & Demons");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83A\83\93\83f\83b\83h\8by\82Ñ\88«\96\82\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B", "Damages all undead and demons in sight.");\r
-\r
-               {\r
-                       int sides = plev * 4;\r
-\r
-                       if (info) return info_damage(1, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               dispel_undead(randint1(sides));\r
-                               dispel_demons(randint1(sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("\8e×\88«\91Þ\8eU", "Dispel Evil");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\8e×\88«\82È\83\82\83\93\83X\83^\81[\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B", "Damages all evil monsters in sight.");\r
-\r
-               {\r
-                       int sides = plev * 4;\r
-\r
-                       if (info) return info_damage(1, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               dispel_evil(randint1(sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("\90¹\82È\82é\90n", "Holy Blade");\r
-               if (desc) return _("\92Ê\8fí\82Ì\95\90\8aí\82É\96Å\8e×\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon especially deadly against evil monsters.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               brand_weapon(13);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("\83X\83^\81[\83o\81[\83X\83g", "Star Burst");\r
-               if (desc) return _("\8b\90\91å\82È\91M\8cõ\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a huge ball of powerful light.");\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_LITE, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("\93V\8eg\8f¢\8a«", "Summon Angel");\r
-               if (desc) return _("\93V\8eg\82ð1\91Ì\8f¢\8a«\82·\82é\81B", "Summons an angel.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               bool pet = !one_in_(3);\r
-                               u32b flg = 0L;\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_ANGEL, flg))\r
-                               {\r
-                                       if (pet)\r
-                                       {\r
-                                               msg_print(_("\81u\82²\97p\82Å\82²\82´\82¢\82Ü\82·\82©\81A\82²\8eå\90l\97l\81v", "'What is thy bidding... Master?'"));\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               msg_print(_("\81u\89ä\82Í\93ð\82Ì\89º\96l\82É\82 \82ç\82¸\81\88«\8ds\8eÒ\82æ\81A\89÷\82¢\89ü\82ß\82æ\81I\81v", "Mortal! Repent of thy impiousness."));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("\8em\8bC\8d\82\97g", "Heroism");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83q\81[\83\8d\81[\8bC\95ª\82É\82È\82é\81B", "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
-                               (void)heroism(base);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("\8eô\82¢\91Þ\8eU", "Dispel Curse");\r
-               if (desc) return _("\83A\83C\83e\83\80\82É\82©\82©\82Á\82½\8b­\97Í\82È\8eô\82¢\82ð\89ð\8f\9c\82·\82é\81B", "Removes normal and heavy curse from equipped items.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (remove_all_curse())\r
-                               {\r
-                                       msg_print(_("\92N\82©\82É\8c©\8eç\82ç\82ê\82Ä\82¢\82é\82æ\82¤\82È\8bC\82ª\82·\82é\81B", "You feel as if someone is watching over you."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("\8e×\88«\92Ç\95ú", "Banish Evil");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\8e×\88«\82È\83\82\83\93\83X\83^\81[\82ð\83e\83\8c\83|\81[\83g\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B",\r
-                       "Teleports all evil monsters in sight away unless resisted.");\r
-\r
-               {\r
-                       int power = 100;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (banish_evil(power))\r
-                               {\r
-                                       msg_print(_("\90_\90¹\82È\97Í\82ª\8e×\88«\82ð\91Å\82¿\95¥\82Á\82½\81I", "The holy power banishes evil!"));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("\83n\83\8b\83}\83Q\83h\83\93", "Armageddon");\r
-               if (desc) return _("\8eü\95Ó\82Ì\83A\83C\83e\83\80\81A\83\82\83\93\83X\83^\81[\81A\92n\8c`\82ð\94j\89ó\82·\82é\81B", "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 28:\r
-               if (name) return _("\96Ú\82É\82Í\96Ú\82ð", "An Eye for an Eye");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8e©\95ª\82ª\83_\83\81\81[\83W\82ð\8eó\82¯\82½\82Æ\82«\82É\8dU\8c\82\82ð\8ds\82Á\82½\83\82\83\93\83X\83^\81[\82É\91Î\82µ\82Ä\93¯\93\99\82Ì\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
-                       "Gives special aura for a while. When you are attacked by a monster, the monster are injured with same amount of damage as you take.");\r
-\r
-               {\r
-                       int base = 10;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_tim_eyeeye(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("\90_\82Ì\93{\82è", "Wrath of the God");\r
-               if (desc) return _("\83^\81[\83Q\83b\83g\82Ì\8eü\88Í\82É\95ª\89ð\82Ì\8b\85\82ð\91½\90\94\97\8e\82Æ\82·\81B", "Drops many balls of disintegration near the target.");\r
-\r
-               {\r
-                       HIT_POINT dam = plev * 3 + 25;\r
-                       int rad = 2;\r
-\r
-                       if (info) return info_multi_damage(dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!cast_wrath_of_the_god(dam, rad)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("\90_\88Ð", "Divine Intervention");\r
-               if (desc) return _("\97×\90Ú\82·\82é\83\82\83\93\83X\83^\81[\82É\90¹\82È\82é\83_\83\81\81[\83W\82ð\97^\82¦\81A\8e\8b\8aE\93à\82Ì\83\82\83\93\83X\83^\81[\82É\83_\83\81\81[\83W\81A\8c¸\91¬\81A\9eN\9eO\81A\8d¬\97\90\81A\8b°\95|\81A\96°\82è\82ð\97^\82¦\82é\81B\82³\82ç\82É\91Ì\97Í\82ð\89ñ\95\9c\82·\82é\81B",\r
-                       "Damages all adjacent monsters with holy power. Damages and attempt to slow, stun, confuse, scare and freeze all monsters in sight. And heals HP.");\r
-\r
-               {\r
-                       int b_dam = plev * 11;\r
-                       int d_dam = plev * 4;\r
-                       int heal = 100;\r
-                       int power = plev * 4;\r
-\r
-                       if (info) return format(_("\89ñ%d/\91¹%d+%d", "h%d/dm%d+%d"), heal, d_dam, b_dam / 2);\r
-                       if (cast)\r
-                       {\r
-                               project(0, 1, p_ptr->y, p_ptr->x, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);\r
-                               dispel_monsters(d_dam);\r
-                               slow_monsters(plev);\r
-                               stun_monsters(power);\r
-                               confuse_monsters(power);\r
-                               turn_monsters(power);\r
-                               stasis_monsters(power);\r
-                               hp_player(heal);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("\90¹\90í", "Crusade");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91P\97Ç\82È\83\82\83\93\83X\83^\81[\82ð\83y\83b\83g\82É\82µ\82æ\82¤\82Æ\82µ\81A\82È\82ç\82È\82©\82Á\82½\8fê\8d\87\8by\82Ñ\91P\97Ç\82Å\82È\82¢\83\82\83\93\83X\83^\81[\82ð\8b°\95|\82³\82¹\82é\81B\82³\82ç\82É\91½\90\94\82Ì\89Á\91¬\82³\82ê\82½\8bR\8em\82ð\8f¢\8a«\82µ\81A\83q\81[\83\8d\81[\81A\8fj\95\9f\81A\89Á\91¬\81A\91Î\8e×\88«\8c\8b\8aE\82ð\93¾\82é\81B",\r
-                       "Attempts to charm all good monsters in sight, and scare all non-charmed monsters, and summons great number of knights, and gives heroism, bless, speed and protection from evil.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               int base = 25;\r
-                               int sp_sides = 20 + plev;\r
-                               int sp_base = plev;\r
-\r
-                               int i;\r
-                               crusade();\r
-                               for (i = 0; i < 12; i++)\r
-                               {\r
-                                       int attempt = 10;\r
-                                       POSITION my = 0, mx = 0;\r
-\r
-                                       while (attempt--)\r
-                                       {\r
-                                               scatter(&my, &mx, p_ptr->y, p_ptr->x, 4, 0);\r
-\r
-                                               /* Require empty grids */\r
-                                               if (cave_empty_bold2(my, mx)) break;\r
-                                       }\r
-                                       if (attempt < 0) continue;\r
-                                       summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));\r
-                               }\r
-                               set_hero(randint1(base) + base, FALSE);\r
-                               set_blessed(randint1(base) + base, FALSE);\r
-                               set_fast(randint1(sp_sides) + sp_base, FALSE);\r
-                               set_protevil(randint1(base) + base, FALSE);\r
-                               set_afraid(0);\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\r
-}\r
-\r
+#include "angband.h"
+#include "cmd-spell.h"
+
+
+
+/*!
+* @brief 破邪領域魔法の各処理を行う
+* @param spell 魔法ID
+* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+*/
+cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS 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;
+
+       int dir;
+       int plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("懲罰", "Punishment");
+               if (desc) return _("電撃のボルトもしくはビームを放つ。", "Fires a bolt or beam of lightning.");
+
+               {
+                       int dice = 3 + (plev - 1) / 5;
+                       int sides = 4;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 1:
+               if (name) return _("邪悪存在感知", "Detect Evil");
+               if (desc) return _("近くの邪悪なモンスターを感知する。", "Detects all evil monsters in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_monsters_evil(rad);
+                       }
+               }
+               break;
+
+       case 2:
+               if (name) return _("恐怖除去", "Remove Fear");
+               if (desc) return _("恐怖を取り除く。", "Removes fear.");
+
+               {
+                       if (cast)
+                       {
+                               set_afraid(0);
+                       }
+               }
+               break;
+
+       case 3:
+               if (name) return _("威圧", "Scare Monster");
+               if (desc) return _("モンスター1体を恐怖させる。抵抗されると無効。", "Attempts to scare a monster.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fear_monster(dir, power);
+                       }
+               }
+               break;
+
+       case 4:
+               if (name) return _("聖域", "Sanctuary");
+               if (desc) return _("隣接した全てのモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep monsters in the adjacent squares.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               sleep_monsters_touch();
+                       }
+               }
+               break;
+
+       case 5:
+               if (name) return _("入口", "Portal");
+               if (desc) return _("中距離のテレポートをする。", "Teleport medium distance.");
+
+               {
+                       POSITION range = 25 + plev / 2;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               teleport_player(range, 0L);
+                       }
+               }
+               break;
+
+       case 6:
+               if (name) return _("スターダスト", "Star Dust");
+               if (desc) return _("ターゲット付近に閃光のボルトを連射する。", "Fires many bolts of light near the target.");
+
+               {
+                       int dice = 3 + (plev - 1) / 9;
+                       int sides = 2;
+
+                       if (info) return info_multi_damage_dice(dice, sides);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+                               fire_blast(GF_LITE, dir, dice, sides, 10, 3);
+                       }
+               }
+               break;
+
+       case 7:
+               if (name) return _("身体浄化", "Purify");
+               if (desc) return _("傷、毒、朦朧から全快する。", "Heals all cut, stun and poison status.");
+
+               {
+                       if (cast)
+                       {
+                               set_cut(0);
+                               set_poisoned(0);
+                               set_stun(0);
+                       }
+               }
+               break;
+
+       case 8:
+               if (name) return _("邪悪飛ばし", "Scatter Evil");
+               if (desc) return _("邪悪なモンスター1体をテレポートさせる。抵抗されると無効。", "Attempts to teleport an evil monster away.");
+
+               {
+                       int power = MAX_SIGHT * 5;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+                               fire_ball(GF_AWAY_EVIL, dir, power, 0);
+                       }
+               }
+               break;
+
+       case 9:
+               if (name) return _("聖なる光球", "Holy Orb");
+               if (desc) return _("聖なる力をもつ宝珠を放つ。邪悪なモンスターに対して大きなダメージを与えるが、善良なモンスターには効果がない。",
+                       "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good monsters.");
+
+               {
+                       int dice = 3;
+                       int sides = 6;
+                       int rad = (plev < 30) ? 2 : 3;
+                       int base;
+
+                       if (p_ptr->pclass == CLASS_PRIEST ||
+                               p_ptr->pclass == CLASS_HIGH_MAGE ||
+                               p_ptr->pclass == CLASS_SORCERER)
+                               base = plev + plev / 2;
+                       else
+                               base = plev + plev / 4;
+
+
+                       if (info) return info_damage(dice, sides, base);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);
+                       }
+               }
+               break;
+
+       case 10:
+               if (name) return _("悪魔払い", "Exorcism");
+               if (desc) return _("視界内の全てのアンデッド及び悪魔にダメージを与え、邪悪なモンスターを恐怖させる。",
+                       "Damages all undead and demons in sight, and scares all evil monsters in sight.");
+
+               {
+                       int sides = plev;
+                       int power = plev;
+
+                       if (info) return info_damage(1, sides, 0);
+
+                       if (cast)
+                       {
+                               dispel_undead(randint1(sides));
+                               dispel_demons(randint1(sides));
+                               turn_evil(power);
+                       }
+               }
+               break;
+
+       case 11:
+               if (name) return _("解呪", "Remove Curse");
+               if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");
+
+               {
+                       if (cast)
+                       {
+                               if (remove_curse())
+                               {
+                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
+                               }
+                       }
+               }
+               break;
+
+       case 12:
+               if (name) return _("透明視認", "Sense Unseen");
+               if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while.");
+
+               {
+                       int base = 24;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_tim_invis(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 13:
+               if (name) return _("対邪悪結界", "Protection from Evil");
+               if (desc) return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack.");
+
+               {
+                       int base = 25;
+                       int sides = 3 * plev;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               set_protevil(randint1(sides) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 14:
+               if (name) return _("裁きの雷", "Judgment Thunder");
+               if (desc) return _("強力な電撃のボルトを放つ。", "Fires a powerful bolt of lightning.");
+
+               {
+                       HIT_POINT dam = plev * 5;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+                               fire_bolt(GF_ELEC, dir, dam);
+                       }
+               }
+               break;
+
+       case 15:
+               if (name) return _("聖なる御言葉", "Holy Word");
+               if (desc) return _("視界内の邪悪な存在に大きなダメージを与え、体力を回復し、毒、恐怖、朦朧状態、負傷から全快する。",
+                       "Damages all evil monsters in sight, heals HP somewhat, and completely heals poison, fear, stun and cut status.");
+
+               {
+                       int dam_sides = plev * 6;
+                       int heal = 100;
+
+                       if (info) return format(_("損:1d%d/回%d", "dam:d%d/h%d"), dam_sides, heal);
+                       if (cast)
+                       {
+                               dispel_evil(randint1(dam_sides));
+                               hp_player(heal);
+                               set_afraid(0);
+                               set_poisoned(0);
+                               set_stun(0);
+                               set_cut(0);
+                       }
+               }
+               break;
+
+       case 16:
+               if (name) return _("開かれた道", "Unbarring Ways");
+               if (desc) return _("一直線上の全ての罠と扉を破壊する。", "Fires a beam which destroy traps and doors.");
+
+               {
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               destroy_door(dir);
+                       }
+               }
+               break;
+
+       case 17:
+               if (name) return _("封魔", "Arrest");
+               if (desc) return _("邪悪なモンスターの動きを止める。", "Attempts to paralyze an evil monster.");
+
+               {
+                       int power = plev * 2;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+                               stasis_evil(dir);
+                       }
+               }
+               break;
+
+       case 18:
+               if (name) return _("聖なるオーラ", "Holy Aura");
+               if (desc) return _("一定時間、邪悪なモンスターを傷つける聖なるオーラを得る。",
+                       "Gives aura of holy power which injures evil monsters which attacked you for a while.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_tim_sh_holy(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 19:
+               if (name) return _("アンデッド&悪魔退散", "Dispel Undead & Demons");
+               if (desc) return _("視界内の全てのアンデッド及び悪魔にダメージを与える。", "Damages all undead and demons in sight.");
+
+               {
+                       int sides = plev * 4;
+
+                       if (info) return info_damage(1, sides, 0);
+
+                       if (cast)
+                       {
+                               dispel_undead(randint1(sides));
+                               dispel_demons(randint1(sides));
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("邪悪退散", "Dispel Evil");
+               if (desc) return _("視界内の全ての邪悪なモンスターにダメージを与える。", "Damages all evil monsters in sight.");
+
+               {
+                       int sides = plev * 4;
+
+                       if (info) return info_damage(1, sides, 0);
+
+                       if (cast)
+                       {
+                               dispel_evil(randint1(sides));
+                       }
+               }
+               break;
+
+       case 21:
+               if (name) return _("聖なる刃", "Holy Blade");
+               if (desc) return _("通常の武器に滅邪の属性をつける。", "Makes current weapon especially deadly against evil monsters.");
+
+               {
+                       if (cast)
+                       {
+                               brand_weapon(13);
+                       }
+               }
+               break;
+
+       case 22:
+               if (name) return _("スターバースト", "Star Burst");
+               if (desc) return _("巨大な閃光の球を放つ。", "Fires a huge ball of powerful light.");
+
+               {
+                       HIT_POINT dam = 100 + plev * 2;
+                       int rad = 4;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_LITE, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 23:
+               if (name) return _("天使召喚", "Summon Angel");
+               if (desc) return _("天使を1体召喚する。", "Summons an angel.");
+
+               {
+                       if (cast)
+                       {
+                               bool pet = !one_in_(3);
+                               u32b flg = 0L;
+
+                               if (pet) flg |= PM_FORCE_PET;
+                               else flg |= PM_NO_PET;
+                               if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
+
+                               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_ANGEL, flg))
+                               {
+                                       if (pet)
+                                       {
+                                               msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
+                                       }
+                                       else
+                                       {
+                                               msg_print(_("「我は汝の下僕にあらず! 悪行者よ、悔い改めよ!」", "Mortal! Repent of thy impiousness."));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("士気高揚", "Heroism");
+               if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
+
+               {
+                       int base = 25;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               (void)heroism(base);
+                       }
+               }
+               break;
+
+       case 25:
+               if (name) return _("呪い退散", "Dispel Curse");
+               if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");
+
+               {
+                       if (cast)
+                       {
+                               if (remove_all_curse())
+                               {
+                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
+                               }
+                       }
+               }
+               break;
+
+       case 26:
+               if (name) return _("邪悪追放", "Banish Evil");
+               if (desc) return _("視界内の全ての邪悪なモンスターをテレポートさせる。抵抗されると無効。",
+                       "Teleports all evil monsters in sight away unless resisted.");
+
+               {
+                       int power = 100;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (banish_evil(power))
+                               {
+                                       msg_print(_("神聖な力が邪悪を打ち払った!", "The holy power banishes evil!"));
+                               }
+                       }
+               }
+               break;
+
+       case 27:
+               if (name) return _("ハルマゲドン", "Armageddon");
+               if (desc) return _("周辺のアイテム、モンスター、地形を破壊する。", "Destroy everything in nearby area.");
+
+               {
+                       int base = 12;
+                       int sides = 4;
+
+                       if (cast)
+                       {
+                               destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE);
+                       }
+               }
+               break;
+
+       case 28:
+               if (name) return _("目には目を", "An Eye for an Eye");
+               if (desc) return _("一定時間、自分がダメージを受けたときに攻撃を行ったモンスターに対して同等のダメージを与える。",
+                       "Gives special aura for a while. When you are attacked by a monster, the monster are injured with same amount of damage as you take.");
+
+               {
+                       int base = 10;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_tim_eyeeye(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 29:
+               if (name) return _("神の怒り", "Wrath of the God");
+               if (desc) return _("ターゲットの周囲に分解の球を多数落とす。", "Drops many balls of disintegration near the target.");
+
+               {
+                       HIT_POINT dam = plev * 3 + 25;
+                       int rad = 2;
+
+                       if (info) return info_multi_damage(dam);
+
+                       if (cast)
+                       {
+                               if (!cast_wrath_of_the_god(dam, rad)) return NULL;
+                       }
+               }
+               break;
+
+       case 30:
+               if (name) return _("神威", "Divine Intervention");
+               if (desc) return _("隣接するモンスターに聖なるダメージを与え、視界内のモンスターにダメージ、減速、朦朧、混乱、恐怖、眠りを与える。さらに体力を回復する。",
+                       "Damages all adjacent monsters with holy power. Damages and attempt to slow, stun, confuse, scare and freeze all monsters in sight. And heals HP.");
+
+               {
+                       int b_dam = plev * 11;
+                       int d_dam = plev * 4;
+                       int heal = 100;
+                       int power = plev * 4;
+
+                       if (info) return format(_("回%d/損%d+%d", "h%d/dm%d+%d"), heal, d_dam, b_dam / 2);
+                       if (cast)
+                       {
+                               project(0, 1, p_ptr->y, p_ptr->x, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
+                               dispel_monsters(d_dam);
+                               slow_monsters(plev);
+                               stun_monsters(power);
+                               confuse_monsters(power);
+                               turn_monsters(power);
+                               stasis_monsters(power);
+                               hp_player(heal);
+                       }
+               }
+               break;
+
+       case 31:
+               if (name) return _("聖戦", "Crusade");
+               if (desc) return _("視界内の善良なモンスターをペットにしようとし、ならなかった場合及び善良でないモンスターを恐怖させる。さらに多数の加速された騎士を召喚し、ヒーロー、祝福、加速、対邪悪結界を得る。",
+                       "Attempts to charm all good monsters in sight, and scare all non-charmed monsters, and summons great number of knights, and gives heroism, bless, speed and protection from evil.");
+
+               {
+                       if (cast)
+                       {
+                               int base = 25;
+                               int sp_sides = 20 + plev;
+                               int sp_base = plev;
+
+                               int i;
+                               crusade();
+                               for (i = 0; i < 12; i++)
+                               {
+                                       int attempt = 10;
+                                       POSITION my = 0, mx = 0;
+
+                                       while (attempt--)
+                                       {
+                                               scatter(&my, &mx, p_ptr->y, p_ptr->x, 4, 0);
+
+                                               /* Require empty grids */
+                                               if (cave_empty_bold2(my, mx)) break;
+                                       }
+                                       if (attempt < 0) continue;
+                                       summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
+                               }
+                               set_hero(randint1(base) + base, FALSE);
+                               set_blessed(randint1(base) + base, FALSE);
+                               set_fast(randint1(sp_sides) + sp_base, FALSE);
+                               set_protevil(randint1(base) + base, FALSE);
+                               set_afraid(0);
+                       }
+               }
+               break;
+       }
+
+       return "";
+}
+
index 464c8d0..f6f49ab 100644 (file)
-\r
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-#include "spells-summon.h"\r
-\r
-/*!\r
-* @brief \88«\96\82\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \96\82\96@ID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
-* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
-*/\r
-cptr do_daemon_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
-       static const char s_dam[] = _("\91¹\8f\9d:", "dam ");\r
-\r
-       int dir;\r
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("\83}\83W\83b\83N\81E\83~\83T\83C\83\8b", "Magic Missile");\r
-               if (desc) return _("\8eã\82¢\96\82\96@\82Ì\96î\82ð\95ú\82Â\81B", "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 _("\96³\90\96½\8a´\92m", "Detect Unlife");\r
-               if (desc) return _("\8bß\82­\82Ì\90\96½\82Ì\82È\82¢\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "Detects all nonliving monsters in your vicinity.");\r
-\r
-               {\r
-                       int rad = DETECT_RAD_DEFAULT;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               detect_monsters_nonliving(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("\8e×\82È\82é\8fj\95\9f", "Evil Bless");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\96½\92\86\97¦\82ÆAC\82É\83{\81[\83i\83X\82ð\93¾\82é\81B", "Gives bonus to hit and AC for a few turns.");\r
-\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 3:\r
-               if (name) return _("\91Ï\89Î\89\8a", "Resist Fire");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89\8a\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to 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_fire(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("\8b°\8dQ", "Horrify");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8b°\95|\82³\82¹\81A\9eN\9eO\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to scare and stun a monster.");\r
-\r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fear_monster(dir, power);\r
-                               stun_monster(dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("\92n\8d\96\82Ì\96î", "Nether Bolt");\r
-               if (desc) return _("\92n\8d\96\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or beam of nether.");\r
-\r
-               {\r
-                       int dice = 6 + (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 6:\r
-               if (name) return _("\8cÃ\91ã\82Ì\8e\80\97ì\8f¢\8a«", "Summon Manes");\r
-               if (desc) return _("\8cÃ\91ã\82Ì\8e\80\97ì\82ð\8f¢\8a«\82·\82é\81B", "Summons a manes.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!summon_specific(-1, p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))\r
-                               {\r
-                                       msg_print(_("\8cÃ\91ã\82Ì\8e\80\97ì\82Í\8c»\82ê\82È\82©\82Á\82½\81B", "No Manes arrive."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("\92n\8d\96\82Ì\89\8b", "Hellish Flame");\r
-               if (desc) return _("\8e×\88«\82È\97Í\82ð\8e\9d\82Â\83{\81[\83\8b\82ð\95ú\82Â\81B\91P\97Ç\82È\83\82\83\93\83X\83^\81[\82É\82Í\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
-                       "Fires a ball of evil power. Hurts good monsters greatly.");\r
-\r
-               {\r
-                       int dice = 3;\r
-                       int sides = 6;\r
-                       int rad = (plev < 30) ? 2 : 3;\r
-                       int base;\r
-\r
-                       if (IS_WIZARD_CLASS())\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_HELL_FIRE, dir, damroll(dice, sides) + base, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("\83f\81[\83\82\83\93\8ex\94z", "Dominate Demon");\r
-               if (desc) return _("\88«\96\821\91Ì\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø", "Attempts to charm a demon.");\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_demon(dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("\83r\83W\83\87\83\93", "Vision");\r
-               if (desc) return _("\8eü\95Ó\82Ì\92n\8c`\82ð\8a´\92m\82·\82é\81B", "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 10:\r
-               if (name) return _("\91Ï\92n\8d\96", "Resist Nether");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\92n\8d\96\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B", "Gives resistance to nether 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_tim_res_nether(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("\83v\83\89\83Y\83}\81E\83{\83\8b\83g", "Plasma bolt");\r
-               if (desc) return _("\83v\83\89\83Y\83}\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or beam of plasma.");\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_bolt_or_beam(beam_chance(), GF_PLASMA, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("\83t\83@\83C\83A\81E\83{\81[\83\8b", "Fire Ball");\r
-               if (desc) return _("\89\8a\82Ì\8b\85\82ð\95ú\82Â\81B", "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 _("\89\8a\82Ì\90n", "Fire Branding");\r
-               if (desc) return _("\95\90\8aí\82É\89\8a\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon fire branded.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               brand_weapon(1);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("\92n\8d\96\8b\85", "Nether Ball");\r
-               if (desc) return _("\91å\82«\82È\92n\8d\96\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a huge ball of nether.");\r
-\r
-               {\r
-                       HIT_POINT dam = plev * 3 / 2 + 100;\r
-                       int rad = plev / 20 + 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_NETHER, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("\83f\81[\83\82\83\93\8f¢\8a«", "Summon Demon");\r
-               if (desc) return _("\88«\96\821\91Ì\82ð\8f¢\8a«\82·\82é\81B", "Summons a demon.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               bool pet = !one_in_(3);\r
-                               u32b flg = 0L;\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 * 2 / 3 + randint1(plev / 2), SUMMON_DEMON, flg))\r
-                               {\r
-                                       msg_print(_("\97°\89©\82Ì\88«\8fL\82ª\8f[\96\9e\82µ\82½\81B", "The area fills with a stench of sulphur and brimstone."));\r
-\r
-                                       if (pet)\r
-                                       {\r
-                                               msg_print(_("\81u\82²\97p\82Å\82²\82´\82¢\82Ü\82·\82©\81A\82²\8eå\90l\97l\81v", "'What is thy bidding... Master?'"));\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               msg_print(_("\81u\94Ú\82µ\82«\8eÒ\82æ\81A\89ä\82Í\93ð\82Ì\89º\96l\82É\82 \82ç\82¸\81\82¨\91O\82Ì\8d°\82ð\92¸\82­\82¼\81I\81v",\r
-                                                       "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));\r
-                                       }\r
-                               }\r
-                               else\r
-                               {\r
-                                       msg_print(_("\88«\96\82\82Í\8c»\82ê\82È\82©\82Á\82½\81B", "No demons arrive."));\r
-                               }\r
-                               break;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("\88«\96\82\82Ì\96Ú", "Devilish Eye");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83e\83\8c\83p\83V\81[\94\\97Í\82ð\93¾\82é\81B", "Gives telepathy for a while.");\r
-\r
-               {\r
-                       int base = 30;\r
-                       int sides = 25;\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 _("\88«\96\82\82Ì\83N\83\8d\81[\83N", "Devil Cloak");\r
-               if (desc) return _("\8b°\95|\82ð\8eæ\82è\8f\9c\82«\81A\88ê\92è\8e\9e\8aÔ\81A\89\8a\82Æ\97â\8bC\82Ì\91Ï\90«\81A\89\8a\82Ì\83I\81[\83\89\82ð\93¾\82é\81B\91Ï\90«\82Í\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Removes fear. Gives resistance to fire and cold, and aura of fire. These resistances can be added to which from equipment for more powerful resistances.");\r
-\r
-               {\r
-                       TIME_EFFECT base = 20;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               TIME_EFFECT dur = randint1(base) + base;\r
-\r
-                               set_oppose_fire(dur, FALSE);\r
-                               set_oppose_cold(dur, FALSE);\r
-                               set_tim_sh_fire(dur, FALSE);\r
-                               set_afraid(0);\r
-                               break;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("\97n\8aâ\97¬", "The Flow of Lava");\r
-               if (desc) return _("\8e©\95ª\82ð\92\86\90S\82Æ\82µ\82½\89\8a\82Ì\8b\85\82ð\8dì\82è\8fo\82µ\81A\8f°\82ð\97n\8aâ\82É\95Ï\82¦\82é\81B",\r
-                       "Generates a ball of fire centered on you which transforms floors to magma.");\r
-\r
-               {\r
-                       HIT_POINT dam = (55 + plev) * 2;\r
-                       int rad = 3;\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
-                               fire_ball_hide(GF_LAVA_FLOW, 0, 2 + randint1(2), rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("\83v\83\89\83Y\83}\8b\85", "Plasma Ball");\r
-               if (desc) return _("\83v\83\89\83Y\83}\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of plasma.");\r
-\r
-               {\r
-                       HIT_POINT dam = plev * 3 / 2 + 80;\r
-                       int rad = 2 + 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_PLASMA, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("\88«\96\82\95Ï\89»", "Polymorph Demon");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\88«\96\82\82É\95Ï\89»\82·\82é\81B\95Ï\89»\82µ\82Ä\82¢\82é\8aÔ\82Í\96{\97\88\82Ì\8eí\91°\82Ì\94\\97Í\82ð\8e¸\82¢\81A\91ã\82í\82è\82É\88«\96\82\82Æ\82µ\82Ä\82Ì\94\\97Í\82ð\93¾\82é\81B",\r
-                       "Mimic a demon for a while. Loses abilities of original race and gets abilities as a demon.");\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_DEMON, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("\92n\8d\96\82Ì\94g\93®", "Nather Wave");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\91P\97Ç\82È\83\82\83\93\83X\83^\81[\82É\93Á\82É\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
-                       "Damages all monsters in sight. Hurts good monsters greatly.");\r
-\r
-               {\r
-                       int sides1 = plev * 2;\r
-                       int sides2 = plev * 2;\r
-\r
-                       if (info) return format("%sd%d+d%d", s_dam, sides1, sides2);\r
-\r
-                       if (cast)\r
-                       {\r
-                               dispel_monsters(randint1(sides1));\r
-                               dispel_good(randint1(sides2));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("\83T\83L\83\85\83o\83X\82Ì\90Ú\95«", "Kiss of Succubus");\r
-               if (desc) return _("\88ö\89Ê\8d¬\97\90\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of nexus.");\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
-                               fire_ball(GF_NEXUS, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("\94j\96Å\82Ì\8eè", "Doom Hand");\r
-               if (desc) return _("\94j\96Å\82Ì\8eè\82ð\95ú\82Â\81B\90H\82ç\82Á\82½\83\82\83\93\83X\83^\81[\82Í\82»\82Ì\82Æ\82«\82ÌHP\82Ì\94¼\95ª\91O\8cã\82Ì\83_\83\81\81[\83W\82ð\8eó\82¯\82é\81B", "Attempts to make a monster's HP almost half.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir))\r
-                                       return NULL;\r
-                               else\r
-                                       msg_print(_("<\94j\96Å\82Ì\8eè>\82ð\95ú\82Á\82½\81I", "You invoke the Hand of Doom!"));\r
-\r
-                               fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("\8em\8bC\8d\82\97g", "Raise the Morale");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83q\81[\83\8d\81[\8bC\95ª\82É\82È\82é\81B", "Removes fear, and gives bonus to hit and 10 more HP for a while.");\r
-\r
-               {\r
-                       int base = 25;\r
-                       if (info) return info_duration(base, base);\r
-                       if (cast)heroism(base);\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("\95s\96Å\82Ì\93÷\91Ì", "Immortal Body");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8e\9e\8aÔ\8bt\93]\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B", "Gives resistance to time 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_tim_res_time(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("\8b\8bC\82Ì\89~\8aÂ", "Insanity Circle");\r
-               if (desc) return _("\8e©\95ª\82ð\92\86\90S\82Æ\82µ\82½\83J\83I\83X\82Ì\8b\85\81A\8d¬\97\90\82Ì\8b\85\82ð\94­\90\82³\82¹\81A\8bß\82­\82Ì\83\82\83\93\83X\83^\81[\82ð\96£\97¹\82·\82é\81B",\r
-                       "Generate balls of chaos, confusion and charm centered on you.");\r
-\r
-               {\r
-                       HIT_POINT dam = 50 + plev;\r
-                       int power = 20 + plev;\r
-                       int rad = 3 + plev / 20;\r
-\r
-                       if (info) return format("%s%d+%d", s_dam, dam / 2, dam / 2);\r
-\r
-                       if (cast)\r
-                       {\r
-                               fire_ball(GF_CHAOS, 0, dam, rad);\r
-                               fire_ball(GF_CONFUSION, 0, dam, rad);\r
-                               fire_ball(GF_CHARM, 0, power, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("\83y\83b\83g\94\9a\94j", "Explode Pets");\r
-               if (desc) return _("\91S\82Ä\82Ì\83y\83b\83g\82ð\8b­\90§\93I\82É\94\9a\94j\82³\82¹\82é\81B", "Makes all pets explode.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               discharge_minion();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("\83O\83\8c\81[\83^\81[\83f\81[\83\82\83\93\8f¢\8a«", "Summon Greater Demon");\r
-               if (desc) return _("\8fã\8b\89\83f\81[\83\82\83\93\82ð\8f¢\8a«\82·\82é\81B\8f¢\8a«\82·\82é\82É\82Í\90l\8aÔ('p','h','t'\82Å\95\\82³\82ê\82é\83\82\83\93\83X\83^\81[)\82Ì\8e\80\91Ì\82ð\95ù\82°\82È\82¯\82ê\82Î\82È\82ç\82È\82¢\81B",\r
-                       "Summons greater demon. It need to sacrifice a corpse of human ('p','h' or 't').");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!cast_summon_greater_demon()) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("\92n\8d\96\97\92", "Nether Storm");\r
-               if (desc) return _("\92´\8b\90\91å\82È\92n\8d\96\82Ì\8b\85\82ð\95ú\82Â\81B", "Generate a huge ball of nether.");\r
-\r
-               {\r
-                       HIT_POINT dam = plev * 15;\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_NETHER, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("\8c\8c\82Ì\8eô\82¢", "Bloody Curse");\r
-               if (desc) return _("\8e©\95ª\82ª\83_\83\81\81[\83W\82ð\8eó\82¯\82é\82±\82Æ\82É\82æ\82Á\82Ä\91Î\8fÛ\82É\8eô\82¢\82ð\82©\82¯\81A\83_\83\81\81[\83W\82ð\97^\82¦\97l\81X\82È\8cø\89Ê\82ð\88ø\82«\8bN\82±\82·\81B",\r
-                       "Puts blood curse which damages and causes various effects on a monster. You also take damage.");\r
-\r
-               {\r
-                       HIT_POINT dam = 600;\r
-                       int rad = 0;\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_hide(GF_BLOOD_CURSE, dir, dam, rad);\r
-                               take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("\8c\8c\82Ì\8eô\82¢", "Blood curse"), -1);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("\96\82\89¤\95Ï\89»", "Polymorph Demonlord");\r
-               if (desc) return _("\88«\96\82\82Ì\89¤\82É\95Ï\89»\82·\82é\81B\95Ï\89»\82µ\82Ä\82¢\82é\8aÔ\82Í\96{\97\88\82Ì\8eí\91°\82Ì\94\\97Í\82ð\8e¸\82¢\81A\91ã\82í\82è\82É\88«\96\82\82Ì\89¤\82Æ\82µ\82Ä\82Ì\94\\97Í\82ð\93¾\81A\95Ç\82ð\94j\89ó\82µ\82È\82ª\82ç\95à\82­\81B",\r
-                       "Mimic a demon lord for a while. Loses abilities of original race and gets great abilities as a demon lord. Even hard walls can't stop your walking.");\r
-\r
-               {\r
-                       int base = 15;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_mimic(base + randint1(base), MIMIC_DEMON_LORD, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\r
-}\r
-\r
+
+#include "angband.h"
+#include "cmd-spell.h"
+#include "spells-summon.h"
+
+/*!
+* @brief 悪魔領域魔法の各処理を行う
+* @param spell 魔法ID
+* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+*/
+cptr do_daemon_spell(SPELL_IDX spell, BIT_FLAGS 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;
+       static const char s_dam[] = _("損傷:", "dam ");
+
+       int dir;
+       int plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("マジック・ミサイル", "Magic Missile");
+               if (desc) return _("弱い魔法の矢を放つ。", "Fires a weak bolt of magic.");
+
+               {
+                       int dice = 3 + (plev - 1) / 5;
+                       int sides = 4;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 1:
+               if (name) return _("無生命感知", "Detect Unlife");
+               if (desc) return _("近くの生命のないモンスターを感知する。", "Detects all nonliving monsters in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_monsters_nonliving(rad);
+                       }
+               }
+               break;
+
+       case 2:
+               if (name) return _("邪なる祝福", "Evil Bless");
+               if (desc) return _("一定時間、命中率とACにボーナスを得る。", "Gives bonus to hit and AC for a few turns.");
+
+               {
+                       int base = 12;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_blessed(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 3:
+               if (name) return _("耐火炎", "Resist Fire");
+               if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to fire, cold and electricity for a while. These resistances can be added to which from equipment for more powerful resistances.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_fire(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 4:
+               if (name) return _("恐慌", "Horrify");
+               if (desc) return _("モンスター1体を恐怖させ、朦朧させる。抵抗されると無効。", "Attempts to scare and stun a monster.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fear_monster(dir, power);
+                               stun_monster(dir, power);
+                       }
+               }
+               break;
+
+       case 5:
+               if (name) return _("地獄の矢", "Nether Bolt");
+               if (desc) return _("地獄のボルトもしくはビームを放つ。", "Fires a bolt or beam of nether.");
+
+               {
+                       int dice = 6 + (plev - 5) / 4;
+                       int sides = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 6:
+               if (name) return _("古代の死霊召喚", "Summon Manes");
+               if (desc) return _("古代の死霊を召喚する。", "Summons a manes.");
+
+               {
+                       if (cast)
+                       {
+                               if (!summon_specific(-1, p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))
+                               {
+                                       msg_print(_("古代の死霊は現れなかった。", "No Manes arrive."));
+                               }
+                       }
+               }
+               break;
+
+       case 7:
+               if (name) return _("地獄の焔", "Hellish Flame");
+               if (desc) return _("邪悪な力を持つボールを放つ。善良なモンスターには大きなダメージを与える。",
+                       "Fires a ball of evil power. Hurts good monsters greatly.");
+
+               {
+                       int dice = 3;
+                       int sides = 6;
+                       int rad = (plev < 30) ? 2 : 3;
+                       int base;
+
+                       if (IS_WIZARD_CLASS())
+                               base = plev + plev / 2;
+                       else
+                               base = plev + plev / 4;
+
+
+                       if (info) return info_damage(dice, sides, base);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides) + base, rad);
+                       }
+               }
+               break;
+
+       case 8:
+               if (name) return _("デーモン支配", "Dominate Demon");
+               if (desc) return _("悪魔1体を魅了する。抵抗されると無効", "Attempts to charm a demon.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               control_one_demon(dir, power);
+                       }
+               }
+               break;
+
+       case 9:
+               if (name) return _("ビジョン", "Vision");
+               if (desc) return _("周辺の地形を感知する。", "Maps nearby area.");
+
+               {
+                       int rad = DETECT_RAD_MAP;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               map_area(rad);
+                       }
+               }
+               break;
+
+       case 10:
+               if (name) return _("耐地獄", "Resist Nether");
+               if (desc) return _("一定時間、地獄への耐性を得る。", "Gives resistance to nether for a while.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_tim_res_nether(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 11:
+               if (name) return _("プラズマ・ボルト", "Plasma bolt");
+               if (desc) return _("プラズマのボルトもしくはビームを放つ。", "Fires a bolt or beam of plasma.");
+
+               {
+                       int dice = 11 + (plev - 5) / 4;
+                       int sides = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_bolt_or_beam(beam_chance(), GF_PLASMA, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 12:
+               if (name) return _("ファイア・ボール", "Fire Ball");
+               if (desc) return _("炎の球を放つ。", "Fires a ball of fire.");
+
+               {
+                       HIT_POINT dam = plev + 55;
+                       int rad = 2;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_FIRE, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 13:
+               if (name) return _("炎の刃", "Fire Branding");
+               if (desc) return _("武器に炎の属性をつける。", "Makes current weapon fire branded.");
+
+               {
+                       if (cast)
+                       {
+                               brand_weapon(1);
+                       }
+               }
+               break;
+
+       case 14:
+               if (name) return _("地獄球", "Nether Ball");
+               if (desc) return _("大きな地獄の球を放つ。", "Fires a huge ball of nether.");
+
+               {
+                       HIT_POINT dam = plev * 3 / 2 + 100;
+                       int rad = plev / 20 + 2;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_NETHER, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 15:
+               if (name) return _("デーモン召喚", "Summon Demon");
+               if (desc) return _("悪魔1体を召喚する。", "Summons a demon.");
+
+               {
+                       if (cast)
+                       {
+                               bool pet = !one_in_(3);
+                               u32b flg = 0L;
+
+                               if (pet) flg |= PM_FORCE_PET;
+                               else flg |= PM_NO_PET;
+                               if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
+
+                               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, plev * 2 / 3 + randint1(plev / 2), SUMMON_DEMON, flg))
+                               {
+                                       msg_print(_("硫黄の悪臭が充満した。", "The area fills with a stench of sulphur and brimstone."));
+
+                                       if (pet)
+                                       {
+                                               msg_print(_("「ご用でございますか、ご主人様」", "'What is thy bidding... Master?'"));
+                                       }
+                                       else
+                                       {
+                                               msg_print(_("「卑しき者よ、我は汝の下僕にあらず! お前の魂を頂くぞ!」",
+                                                       "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));
+                                       }
+                               }
+                               else
+                               {
+                                       msg_print(_("悪魔は現れなかった。", "No demons arrive."));
+                               }
+                               break;
+                       }
+               }
+               break;
+
+       case 16:
+               if (name) return _("悪魔の目", "Devilish Eye");
+               if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
+
+               {
+                       int base = 30;
+                       int sides = 25;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               set_tim_esp(randint1(sides) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 17:
+               if (name) return _("悪魔のクローク", "Devil Cloak");
+               if (desc) return _("恐怖を取り除き、一定時間、炎と冷気の耐性、炎のオーラを得る。耐性は装備による耐性に累積する。",
+                       "Removes fear. Gives resistance to fire and cold, and aura of fire. These resistances can be added to which from equipment for more powerful resistances.");
+
+               {
+                       TIME_EFFECT base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               TIME_EFFECT dur = randint1(base) + base;
+
+                               set_oppose_fire(dur, FALSE);
+                               set_oppose_cold(dur, FALSE);
+                               set_tim_sh_fire(dur, FALSE);
+                               set_afraid(0);
+                               break;
+                       }
+               }
+               break;
+
+       case 18:
+               if (name) return _("溶岩流", "The Flow of Lava");
+               if (desc) return _("自分を中心とした炎の球を作り出し、床を溶岩に変える。",
+                       "Generates a ball of fire centered on you which transforms floors to magma.");
+
+               {
+                       HIT_POINT dam = (55 + plev) * 2;
+                       int rad = 3;
+
+                       if (info) return info_damage(0, 0, dam / 2);
+
+                       if (cast)
+                       {
+                               fire_ball(GF_FIRE, 0, dam, rad);
+                               fire_ball_hide(GF_LAVA_FLOW, 0, 2 + randint1(2), rad);
+                       }
+               }
+               break;
+
+       case 19:
+               if (name) return _("プラズマ球", "Plasma Ball");
+               if (desc) return _("プラズマの球を放つ。", "Fires a ball of plasma.");
+
+               {
+                       HIT_POINT dam = plev * 3 / 2 + 80;
+                       int rad = 2 + plev / 40;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_PLASMA, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("悪魔変化", "Polymorph Demon");
+               if (desc) return _("一定時間、悪魔に変化する。変化している間は本来の種族の能力を失い、代わりに悪魔としての能力を得る。",
+                       "Mimic a demon for a while. Loses abilities of original race and gets abilities as a demon.");
+
+               {
+                       int base = 10 + plev / 2;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_mimic(base + randint1(base), MIMIC_DEMON, FALSE);
+                       }
+               }
+               break;
+
+       case 21:
+               if (name) return _("地獄の波動", "Nather Wave");
+               if (desc) return _("視界内の全てのモンスターにダメージを与える。善良なモンスターに特に大きなダメージを与える。",
+                       "Damages all monsters in sight. Hurts good monsters greatly.");
+
+               {
+                       int sides1 = plev * 2;
+                       int sides2 = plev * 2;
+
+                       if (info) return format("%sd%d+d%d", s_dam, sides1, sides2);
+
+                       if (cast)
+                       {
+                               dispel_monsters(randint1(sides1));
+                               dispel_good(randint1(sides2));
+                       }
+               }
+               break;
+
+       case 22:
+               if (name) return _("サキュバスの接吻", "Kiss of Succubus");
+               if (desc) return _("因果混乱の球を放つ。", "Fires a ball of nexus.");
+
+               {
+                       HIT_POINT dam = 100 + plev * 2;
+                       int rad = 4;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+                               fire_ball(GF_NEXUS, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 23:
+               if (name) return _("破滅の手", "Doom Hand");
+               if (desc) return _("破滅の手を放つ。食らったモンスターはそのときのHPの半分前後のダメージを受ける。", "Attempts to make a monster's HP almost half.");
+
+               {
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir))
+                                       return NULL;
+                               else
+                                       msg_print(_("<破滅の手>を放った!", "You invoke the Hand of Doom!"));
+
+                               fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("士気高揚", "Raise the Morale");
+               if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
+
+               {
+                       int base = 25;
+                       if (info) return info_duration(base, base);
+                       if (cast)heroism(base);
+               }
+               break;
+
+       case 25:
+               if (name) return _("不滅の肉体", "Immortal Body");
+               if (desc) return _("一定時間、時間逆転への耐性を得る。", "Gives resistance to time for a while.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_tim_res_time(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 26:
+               if (name) return _("狂気の円環", "Insanity Circle");
+               if (desc) return _("自分を中心としたカオスの球、混乱の球を発生させ、近くのモンスターを魅了する。",
+                       "Generate balls of chaos, confusion and charm centered on you.");
+
+               {
+                       HIT_POINT dam = 50 + plev;
+                       int power = 20 + plev;
+                       int rad = 3 + plev / 20;
+
+                       if (info) return format("%s%d+%d", s_dam, dam / 2, dam / 2);
+
+                       if (cast)
+                       {
+                               fire_ball(GF_CHAOS, 0, dam, rad);
+                               fire_ball(GF_CONFUSION, 0, dam, rad);
+                               fire_ball(GF_CHARM, 0, power, rad);
+                       }
+               }
+               break;
+
+       case 27:
+               if (name) return _("ペット爆破", "Explode Pets");
+               if (desc) return _("全てのペットを強制的に爆破させる。", "Makes all pets explode.");
+
+               {
+                       if (cast)
+                       {
+                               discharge_minion();
+                       }
+               }
+               break;
+
+       case 28:
+               if (name) return _("グレーターデーモン召喚", "Summon Greater Demon");
+               if (desc) return _("上級デーモンを召喚する。召喚するには人間('p','h','t'で表されるモンスター)の死体を捧げなければならない。",
+                       "Summons greater demon. It need to sacrifice a corpse of human ('p','h' or 't').");
+
+               {
+                       if (cast)
+                       {
+                               if (!cast_summon_greater_demon()) return NULL;
+                       }
+               }
+               break;
+
+       case 29:
+               if (name) return _("地獄嵐", "Nether Storm");
+               if (desc) return _("超巨大な地獄の球を放つ。", "Generate a huge ball of nether.");
+
+               {
+                       HIT_POINT dam = plev * 15;
+                       int rad = plev / 5;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_NETHER, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 30:
+               if (name) return _("血の呪い", "Bloody Curse");
+               if (desc) return _("自分がダメージを受けることによって対象に呪いをかけ、ダメージを与え様々な効果を引き起こす。",
+                       "Puts blood curse which damages and causes various effects on a monster. You also take damage.");
+
+               {
+                       HIT_POINT dam = 600;
+                       int rad = 0;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball_hide(GF_BLOOD_CURSE, dir, dam, rad);
+                               take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("血の呪い", "Blood curse"), -1);
+                       }
+               }
+               break;
+
+       case 31:
+               if (name) return _("魔王変化", "Polymorph Demonlord");
+               if (desc) return _("悪魔の王に変化する。変化している間は本来の種族の能力を失い、代わりに悪魔の王としての能力を得、壁を破壊しながら歩く。",
+                       "Mimic a demon lord for a while. Loses abilities of original race and gets great abilities as a demon lord. Even hard walls can't stop your walking.");
+
+               {
+                       int base = 15;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_mimic(base + randint1(base), MIMIC_DEMON_LORD, FALSE);
+                       }
+               }
+               break;
+       }
+
+       return "";
+}
+
index cef8d87..d547d02 100644 (file)
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-\r
-\r
-\r
-/*!\r
-* @brief \88Ã\8d\95\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \96\82\96@ID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
-* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
-*/\r
-cptr do_death_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
-{\r
-       bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
-       bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
-       bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
-       bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
-\r
-       static const char s_dam[] = _("\91¹\8f\9d:", "dam ");\r
-       static const char s_random[] = _("\83\89\83\93\83_\83\80", "random");\r
-\r
-       int dir;\r
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("\96³\90\96½\8a´\92m", "Detect Unlife");\r
-               if (desc) return _("\8bß\82­\82Ì\90\96½\82Ì\82È\82¢\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "Detects all nonliving monsters in your vicinity.");\r
-\r
-               {\r
-                       int rad = DETECT_RAD_DEFAULT;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               detect_monsters_nonliving(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("\8eô\8eE\92e", "Malediction");\r
-               if (desc) return _("\82²\82­\8f¬\82³\82È\8e×\88«\82È\97Í\82ð\8e\9d\82Â\83{\81[\83\8b\82ð\95ú\82Â\81B\91P\97Ç\82È\83\82\83\93\83X\83^\81[\82É\82Í\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
-                       "Fires a tiny ball of evil power which hurts good monsters greatly.");\r
-\r
-               {\r
-                       int dice = 3 + (plev - 1) / 5;\r
-                       int sides = 4;\r
-                       int rad = 0;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               /*\r
-                               * A radius-0 ball may (1) be aimed at\r
-                               * objects etc., and will affect them;\r
-                               * (2) may be aimed at ANY visible\r
-                               * monster, unlike a 'bolt' which must\r
-                               * travel to the monster.\r
-                               */\r
-\r
-                               fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides), rad);\r
-\r
-                               if (one_in_(5))\r
-                               {\r
-                                       /* Special effect first */\r
-                                       int effect = randint1(1000);\r
-\r
-                                       if (effect == 666)\r
-                                               fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);\r
-                                       else if (effect < 500)\r
-                                               fire_ball_hide(GF_TURN_ALL, dir, plev, 0);\r
-                                       else if (effect < 800)\r
-                                               fire_ball_hide(GF_OLD_CONF, dir, plev, 0);\r
-                                       else\r
-                                               fire_ball_hide(GF_STUN, dir, plev, 0);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("\8e×\88«\8a´\92m", "Detect Evil");\r
-               if (desc) return _("\8bß\82­\82Ì\8e×\88«\82È\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "Detects all evil monsters in your vicinity.");\r
-\r
-               {\r
-                       int rad = DETECT_RAD_DEFAULT;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cast)\r
-                       {\r
-                               detect_monsters_evil(rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("\88«\8fL\89_", "Stinking Cloud");\r
-               if (desc) return _("\93Å\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a ball of poison.");\r
-\r
-               {\r
-                       HIT_POINT dam = 10 + plev / 2;\r
-                       int rad = 2;\r
-\r
-                       if (info) return info_damage(0, 0, dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fire_ball(GF_POIS, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("\8d\95\82¢\96°\82è", "Black Sleep");\r
-               if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82ð\96°\82ç\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to sleep a monster.");\r
-\r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               sleep_monster(dir, plev);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("\91Ï\93Å", "Resist Poison");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\93Å\82Ö\82Ì\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");\r
-\r
-               {\r
-                       int base = 20;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_oppose_pois(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("\8b°\8dQ", "Horrify");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8b°\95|\82³\82¹\81A\9eN\9eO\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to scare and stun a monster.");\r
-\r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fear_monster(dir, power);\r
-                               stun_monster(dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("\83A\83\93\83f\83b\83h\8f]\91®", "Enslave Undead");\r
-               if (desc) return _("\83A\83\93\83f\83b\83h1\91Ì\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to charm an undead monster.");\r
-\r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               control_one_undead(dir, power);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("\83G\83\93\83g\83\8d\83s\81[\82Ì\8b\85", "Orb of Entropy");\r
-               if (desc) return _("\90\96½\82Ì\82 \82é\8eÒ\82ÌHP\82Æ\8dÅ\91åHP\91o\95û\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\8cø\89Ê\82Ì\82 \82é\8b\85\82ð\95ú\82Â\81B", "Fires a ball which damages to both HP and MaxHP of living monsters.");\r
-\r
-               {\r
-                       int dice = 3;\r
-                       int sides = 6;\r
-                       int rad = (plev < 30) ? 2 : 3;\r
-                       int base;\r
-\r
-                       if (IS_WIZARD_CLASS())\r
-                               base = plev + plev / 2;\r
-                       else\r
-                               base = plev + plev / 4;\r
-\r
-\r
-                       if (info) return info_damage(dice, sides, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fire_ball(GF_HYPODYNAMIA, dir, damroll(dice, sides) + base, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("\92n\8d\96\82Ì\96î", "Nether Bolt");\r
-               if (desc) return _("\92n\8d\96\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or beam of nether.");\r
-\r
-               {\r
-                       int dice = 8 + (plev - 5) / 4;\r
-                       int sides = 8;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("\8eE\9dC\89_", "Cloud kill");\r
-               if (desc) return _("\8e©\95ª\82ð\92\86\90S\82Æ\82µ\82½\93Å\82Ì\8b\85\82ð\94­\90\82³\82¹\82é\81B", "Generate a ball of poison centered on you.");\r
-\r
-               {\r
-                       HIT_POINT dam = (30 + plev) * 2;\r
-                       int rad = plev / 10 + 2;\r
-\r
-                       if (info) return info_damage(0, 0, dam / 2);\r
-\r
-                       if (cast)\r
-                       {\r
-                               project(0, rad, p_ptr->y, p_ptr->x, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("\83\82\83\93\83X\83^\81[\8fÁ\96Å", "Genocide One");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8fÁ\82µ\8b\8e\82é\81B\8co\8c±\92l\82â\83A\83C\83e\83\80\82Í\8eè\82É\93ü\82ç\82È\82¢\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to vanish a monster.");\r
-\r
-               {\r
-                       int power = plev + 50;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fire_ball_hide(GF_GENOCIDE, dir, power, 0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("\93Å\82Ì\90n", "Poison Branding");\r
-               if (desc) return _("\95\90\8aí\82É\93Å\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon poison branded.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               brand_weapon(3);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("\8bz\8c\8c\82Ì\96î", "Vampiric Bolt");\r
-               if (desc) return _("\83{\83\8b\83g\82É\82æ\82è\83\82\83\93\83X\83^\81[1\91Ì\82©\82ç\90\96½\97Í\82ð\8bz\82¢\82Æ\82é\81B\8bz\82¢\82Æ\82Á\82½\90\96½\97Í\82É\82æ\82Á\82Ä\96\9e\95 \93x\82ª\8fã\82ª\82é\81B",\r
-                       "Absorbs some HP from a monster and gives them to you by bolt. You will also gain nutritional sustenance from this.");\r
-\r
-               {\r
-                       int dice = 1;\r
-                       int sides = plev * 2;\r
-                       int base = plev * 2;\r
-\r
-                       if (info) return info_damage(dice, sides, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               HIT_POINT dam = base + damroll(dice, sides);\r
-\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               if (hypodynamic_bolt(dir, dam))\r
-                               {\r
-                                       chg_virtue(V_SACRIFICE, -1);\r
-                                       chg_virtue(V_VITALITY, -1);\r
-\r
-                                       hp_player(dam);\r
-\r
-                                       /*\r
-                                       * Gain nutritional sustenance:\r
-                                       * 150/hp drained\r
-                                       *\r
-                                       * A Food ration gives 5000\r
-                                       * food points (by contrast)\r
-                                       * Don't ever get more than\r
-                                       * "Full" this way But if we\r
-                                       * ARE Gorged, it won't cure\r
-                                       * us\r
-                                       */\r
-                                       dam = p_ptr->food + MIN(5000, 100 * dam);\r
-\r
-                                       /* Not gorged already */\r
-                                       if (p_ptr->food < PY_FOOD_MAX)\r
-                                               set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("\94½\8d°\82Ì\8fp", "Animate dead");\r
-               if (desc) return _("\8eü\88Í\82Ì\8e\80\91Ì\82â\8d\9c\82ð\90\82«\95Ô\82·\81B", "Resurrects nearby corpse and skeletons. And makes these your pets.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               animate_dead(0, p_ptr->y, p_ptr->x);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("\96\95\8eE", "Genocide");\r
-               if (desc) return _("\8ew\92è\82µ\82½\95\8e\9a\82Ì\83\82\83\93\83X\83^\81[\82ð\8c»\8dÝ\82Ì\8aK\82©\82ç\8fÁ\82µ\8b\8e\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B",\r
-                       "Eliminates an entire class of monster, exhausting you.  Powerful or unique monsters may resist.");\r
-\r
-               {\r
-                       int power = plev + 50;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               symbol_genocide(power, TRUE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("\8b\90í\8em\89»", "Berserk");\r
-               if (desc) return _("\8b\90í\8em\89»\82µ\81A\8b°\95|\82ð\8f\9c\8b\8e\82·\82é\81B", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");\r
-\r
-               {\r
-                       int base = 25;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               (void)berserk(base + randint1(base));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("\88«\97ì\8f¢\8a«", "Invoke Spirits");\r
-               if (desc) return _("\83\89\83\93\83_\83\80\82Å\97l\81X\82È\8cø\89Ê\82ª\8bN\82±\82é\81B", "Causes random effects.");\r
-\r
-               {\r
-                       if (info) return s_random;\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               cast_invoke_spirits(dir);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("\88Ã\8d\95\82Ì\96î", "Dark Bolt");\r
-               if (desc) return _("\88Ã\8d\95\82Ì\83{\83\8b\83g\82à\82µ\82­\82Í\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a bolt or beam of darkness.");\r
-\r
-               {\r
-                       int dice = 4 + (plev - 5) / 4;\r
-                       int sides = 8;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("\8b\97\90\90í\8em", "Battle Frenzy");\r
-               if (desc) return _("\8b\90í\8em\89»\82µ\81A\8b°\95|\82ð\8f\9c\8b\8e\82µ\81A\89Á\91¬\82·\82é\81B",\r
-                       "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.");\r
-\r
-               {\r
-                       int b_base = 25;\r
-                       int sp_base = plev / 2;\r
-                       int sp_sides = 20 + plev / 2;\r
-\r
-                       if (info) return info_duration(b_base, b_base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               (void)berserk(b_base + randint1(b_base));\r
-                               set_fast(randint1(sp_sides) + sp_base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("\8bz\8c\8c\82Ì\90n", "Vampiric Branding");\r
-               if (desc) return _("\95\90\8aí\82É\8bz\8c\8c\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "Makes current weapon Vampiric.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               brand_weapon(4);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("\8bz\8c\8c\82Ì\98A\96î", "Vampiric Bolts");\r
-               if (desc) return _("3\98A\8eË\82Ì\83{\83\8b\83g\82É\82æ\82è\83\82\83\93\83X\83^\81[1\91Ì\82©\82ç\90\96½\97Í\82ð\8bz\82¢\82Æ\82é\81B\8bz\82¢\82Æ\82Á\82½\90\96½\97Í\82É\82æ\82Á\82Ä\91Ì\97Í\82ª\89ñ\95\9c\82·\82é\81B",\r
-                       "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.");\r
-               {\r
-                       HIT_POINT dam = 100;\r
-\r
-                       if (info) return format("%s3*%d", s_dam, dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               int i;\r
-\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               chg_virtue(V_SACRIFICE, -1);\r
-                               chg_virtue(V_VITALITY, -1);\r
-\r
-                               for (i = 0; i < 3; i++)\r
-                               {\r
-                                       if (hypodynamic_bolt(dir, dam))\r
-                                               hp_player(dam);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("\8e\80\82Ì\8c¾\8d°", "Nether Wave");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\90\96½\82Ì\82 \82é\83\82\83\93\83X\83^\81[\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B", "Damages all living monsters in sight.");\r
-\r
-               {\r
-                       int sides = plev * 3;\r
-\r
-                       if (info) return info_damage(1, sides, 0);\r
-\r
-                       if (cast)\r
-                       {\r
-                               dispel_living(randint1(sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("\88Ã\8d\95\82Ì\97\92", "Darkness Storm");\r
-               if (desc) return _("\8b\90\91å\82È\88Ã\8d\95\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires a huge ball of darkness.");\r
-\r
-               {\r
-                       HIT_POINT dam = 100 + plev * 2;\r
-                       int rad = 4;\r
-\r
-                       if (info) return info_damage(0, 0, dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fire_ball(GF_DARK, dir, dam, rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("\8e\80\82Ì\8cõ\90ü", "Death Ray");\r
-               if (desc) return _("\8e\80\82Ì\8cõ\90ü\82ð\95ú\82Â\81B", "Fires a beam of death.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               death_ray(dir, plev);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("\8e\80\8eÒ\8f¢\8a«", "Raise the Dead");\r
-               if (desc) return _("1\91Ì\82Ì\83A\83\93\83f\83b\83h\82ð\8f¢\8a«\82·\82é\81B", "Summons an undead monster.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               int type;\r
-                               bool pet = one_in_(3);\r
-                               u32b flg = 0L;\r
-\r
-                               type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);\r
-\r
-                               if (!pet || (pet && (plev > 24) && one_in_(3)))\r
-                                       flg |= PM_ALLOW_GROUP;\r
-\r
-                               if (pet) flg |= PM_FORCE_PET;\r
-                               else flg |= (PM_ALLOW_UNIQUE | PM_NO_PET);\r
-\r
-                               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, type, flg))\r
-                               {\r
-                                       msg_print(_("\97â\82½\82¢\95\97\82ª\82 \82È\82½\82Ì\8eü\82è\82É\90\81\82«\8en\82ß\82½\81B\82»\82ê\82Í\95\85\94s\8fL\82ð\89^\82ñ\82Å\82¢\82é...",\r
-                                               "Cold winds begin to blow around you, carrying with them the stench of decay..."));\r
-\r
-\r
-                                       if (pet)\r
-                                       {\r
-                                               msg_print(_("\8cÃ\82¦\82Ì\8e\80\82¹\82é\8eÒ\8b¤\82ª\82 \82È\82½\82É\8ed\82¦\82é\82½\82ß\93y\82©\82çáS\82Á\82½\81I",\r
-                                                       "Ancient, long-dead forms arise from the ground to serve you!"));\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               msg_print(_("\8e\80\8eÒ\82ªáS\82Á\82½\81B\96°\82è\82ð\96W\82°\82é\82 \82È\82½\82ð\94±\82·\82é\82½\82ß\82É\81I",\r
-                                                       "'The dead arise... to punish you for disturbing them!'"));\r
-                                       }\r
-\r
-                                       chg_virtue(V_UNLIFE, 1);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("\8e\80\8eÒ\82Ì\94é\93`", "Esoteria");\r
-               if (desc) return _("\83A\83C\83e\83\80\82ð1\82Â\8e¯\95Ê\82·\82é\81B\83\8c\83x\83\8b\82ª\8d\82\82¢\82Æ\83A\83C\83e\83\80\82Ì\94\\97Í\82ð\8a®\91S\82É\92m\82é\82±\82Æ\82ª\82Å\82«\82é\81B",\r
-                       "Identifies an item. Or *identifies* an item at higher level.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (randint1(50) > plev)\r
-                               {\r
-                                       if (!ident_spell(FALSE)) return NULL;\r
-                               }\r
-                               else\r
-                               {\r
-                                       if (!identify_fully(FALSE)) return NULL;\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("\8bz\8c\8c\8bS\95Ï\89»", "Polymorph Vampire");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\8bz\8c\8c\8bS\82É\95Ï\89»\82·\82é\81B\95Ï\89»\82µ\82Ä\82¢\82é\8aÔ\82Í\96{\97\88\82Ì\8eí\91°\82Ì\94\\97Í\82ð\8e¸\82¢\81A\91ã\82í\82è\82É\8bz\8c\8c\8bS\82Æ\82µ\82Ä\82Ì\94\\97Í\82ð\93¾\82é\81B",\r
-                       "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.");\r
-\r
-               {\r
-                       int base = 10 + plev / 2;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("\8co\8c±\92l\95\9c\8a\88", "Restore Life");\r
-               if (desc) return _("\8e¸\82Á\82½\8co\8c±\92l\82ð\89ñ\95\9c\82·\82é\81B", "Restore lost experience.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               restore_level();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("\8eü\95Ó\96\95\8eE", "Mass Genocide");\r
-               if (desc) return _("\8e©\95ª\82Ì\8eü\88Í\82É\82¢\82é\83\82\83\93\83X\83^\81[\82ð\8c»\8dÝ\82Ì\8aK\82©\82ç\8fÁ\82µ\8b\8e\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B",\r
-                       "Eliminates all nearby monsters, exhausting you.  Powerful or unique monsters may be able to resist.");\r
-\r
-               {\r
-                       int power = plev + 50;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               mass_genocide(power, TRUE);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("\92n\8d\96\82Ì\8d\85\89Î", "Hellfire");\r
-               if (desc) return _("\8e×\88«\82È\97Í\82ð\8e\9d\82Â\95ó\8eì\82ð\95ú\82Â\81B\91P\97Ç\82È\83\82\83\93\83X\83^\81[\82É\82Í\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
-                       "Fires a powerful ball of evil power. Hurts good monsters greatly.");\r
-\r
-               {\r
-                       HIT_POINT dam = 666;\r
-                       int rad = 3;\r
-\r
-                       if (info) return info_damage(0, 0, dam);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fire_ball(GF_HELL_FIRE, dir, dam, rad);\r
-                               take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("\92n\8d\96\82Ì\8d\85\89Î\82Ì\8eô\95\82ð\8f¥\82¦\82½\94æ\98J", "the strain of casting Hellfire"), -1);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("\97H\91Ì\89»", "Wraithform");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\95Ç\82ð\92Ê\82è\94²\82¯\82é\82±\82Æ\82ª\82Å\82«\8eó\82¯\82é\83_\83\81\81[\83W\82ª\8cy\8c¸\82³\82ê\82é\97H\91Ì\82Ì\8fó\91Ô\82É\95Ï\90g\82·\82é\81B",\r
-                       "Becomes wraith form which gives ability to pass walls and makes all damages half.");\r
-\r
-               {\r
-                       int base = plev / 2;\r
-\r
-                       if (info) return info_duration(base, base);\r
-\r
-                       if (cast)\r
-                       {\r
-                               set_wraith_form(randint1(base) + base, FALSE);\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\r
-}\r
+#include "angband.h"
+#include "cmd-spell.h"
+
+
+
+/*!
+* @brief 暗黒領域魔法の各処理を行う
+* @param spell 魔法ID
+* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+*/
+cptr do_death_spell(SPELL_IDX spell, BIT_FLAGS 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;
+
+       static const char s_dam[] = _("損傷:", "dam ");
+       static const char s_random[] = _("ランダム", "random");
+
+       int dir;
+       int plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("無生命感知", "Detect Unlife");
+               if (desc) return _("近くの生命のないモンスターを感知する。", "Detects all nonliving monsters in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_monsters_nonliving(rad);
+                       }
+               }
+               break;
+
+       case 1:
+               if (name) return _("呪殺弾", "Malediction");
+               if (desc) return _("ごく小さな邪悪な力を持つボールを放つ。善良なモンスターには大きなダメージを与える。",
+                       "Fires a tiny ball of evil power which hurts good monsters greatly.");
+
+               {
+                       int dice = 3 + (plev - 1) / 5;
+                       int sides = 4;
+                       int rad = 0;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               /*
+                               * A radius-0 ball may (1) be aimed at
+                               * objects etc., and will affect them;
+                               * (2) may be aimed at ANY visible
+                               * monster, unlike a 'bolt' which must
+                               * travel to the monster.
+                               */
+
+                               fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides), rad);
+
+                               if (one_in_(5))
+                               {
+                                       /* Special effect first */
+                                       int effect = randint1(1000);
+
+                                       if (effect == 666)
+                                               fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);
+                                       else if (effect < 500)
+                                               fire_ball_hide(GF_TURN_ALL, dir, plev, 0);
+                                       else if (effect < 800)
+                                               fire_ball_hide(GF_OLD_CONF, dir, plev, 0);
+                                       else
+                                               fire_ball_hide(GF_STUN, dir, plev, 0);
+                               }
+                       }
+               }
+               break;
+
+       case 2:
+               if (name) return _("邪悪感知", "Detect Evil");
+               if (desc) return _("近くの邪悪なモンスターを感知する。", "Detects all evil monsters in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_monsters_evil(rad);
+                       }
+               }
+               break;
+
+       case 3:
+               if (name) return _("悪臭雲", "Stinking Cloud");
+               if (desc) return _("毒の球を放つ。", "Fires a ball of poison.");
+
+               {
+                       HIT_POINT dam = 10 + plev / 2;
+                       int rad = 2;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_POIS, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 4:
+               if (name) return _("黒い眠り", "Black Sleep");
+               if (desc) return _("1体のモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep a monster.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               sleep_monster(dir, plev);
+                       }
+               }
+               break;
+
+       case 5:
+               if (name) return _("耐毒", "Resist Poison");
+               if (desc) return _("一定時間、毒への耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_pois(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 6:
+               if (name) return _("恐慌", "Horrify");
+               if (desc) return _("モンスター1体を恐怖させ、朦朧させる。抵抗されると無効。", "Attempts to scare and stun a monster.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fear_monster(dir, power);
+                               stun_monster(dir, power);
+                       }
+               }
+               break;
+
+       case 7:
+               if (name) return _("アンデッド従属", "Enslave Undead");
+               if (desc) return _("アンデッド1体を魅了する。抵抗されると無効。", "Attempts to charm an undead monster.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               control_one_undead(dir, power);
+                       }
+               }
+               break;
+
+       case 8:
+               if (name) return _("エントロピーの球", "Orb of Entropy");
+               if (desc) return _("生命のある者のHPと最大HP双方にダメージを与える効果のある球を放つ。", "Fires a ball which damages to both HP and MaxHP of living monsters.");
+
+               {
+                       int dice = 3;
+                       int sides = 6;
+                       int rad = (plev < 30) ? 2 : 3;
+                       int base;
+
+                       if (IS_WIZARD_CLASS())
+                               base = plev + plev / 2;
+                       else
+                               base = plev + plev / 4;
+
+
+                       if (info) return info_damage(dice, sides, base);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_HYPODYNAMIA, dir, damroll(dice, sides) + base, rad);
+                       }
+               }
+               break;
+
+       case 9:
+               if (name) return _("地獄の矢", "Nether Bolt");
+               if (desc) return _("地獄のボルトもしくはビームを放つ。", "Fires a bolt or beam of nether.");
+
+               {
+                       int dice = 8 + (plev - 5) / 4;
+                       int sides = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 10:
+               if (name) return _("殺戮雲", "Cloud kill");
+               if (desc) return _("自分を中心とした毒の球を発生させる。", "Generate a ball of poison centered on you.");
+
+               {
+                       HIT_POINT dam = (30 + plev) * 2;
+                       int rad = plev / 10 + 2;
+
+                       if (info) return info_damage(0, 0, dam / 2);
+
+                       if (cast)
+                       {
+                               project(0, rad, p_ptr->y, p_ptr->x, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);
+                       }
+               }
+               break;
+
+       case 11:
+               if (name) return _("モンスター消滅", "Genocide One");
+               if (desc) return _("モンスター1体を消し去る。経験値やアイテムは手に入らない。抵抗されると無効。", "Attempts to vanish a monster.");
+
+               {
+                       int power = plev + 50;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball_hide(GF_GENOCIDE, dir, power, 0);
+                       }
+               }
+               break;
+
+       case 12:
+               if (name) return _("毒の刃", "Poison Branding");
+               if (desc) return _("武器に毒の属性をつける。", "Makes current weapon poison branded.");
+
+               {
+                       if (cast)
+                       {
+                               brand_weapon(3);
+                       }
+               }
+               break;
+
+       case 13:
+               if (name) return _("吸血の矢", "Vampiric Bolt");
+               if (desc) return _("ボルトによりモンスター1体から生命力を吸いとる。吸いとった生命力によって満腹度が上がる。",
+                       "Absorbs some HP from a monster and gives them to you by bolt. You will also gain nutritional sustenance from this.");
+
+               {
+                       int dice = 1;
+                       int sides = plev * 2;
+                       int base = plev * 2;
+
+                       if (info) return info_damage(dice, sides, base);
+
+                       if (cast)
+                       {
+                               HIT_POINT dam = base + damroll(dice, sides);
+
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               if (hypodynamic_bolt(dir, dam))
+                               {
+                                       chg_virtue(V_SACRIFICE, -1);
+                                       chg_virtue(V_VITALITY, -1);
+
+                                       hp_player(dam);
+
+                                       /*
+                                       * Gain nutritional sustenance:
+                                       * 150/hp drained
+                                       *
+                                       * A Food ration gives 5000
+                                       * food points (by contrast)
+                                       * Don't ever get more than
+                                       * "Full" this way But if we
+                                       * ARE Gorged, it won't cure
+                                       * us
+                                       */
+                                       dam = p_ptr->food + MIN(5000, 100 * dam);
+
+                                       /* Not gorged already */
+                                       if (p_ptr->food < PY_FOOD_MAX)
+                                               set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);
+                               }
+                       }
+               }
+               break;
+
+       case 14:
+               if (name) return _("反魂の術", "Animate dead");
+               if (desc) return _("周囲の死体や骨を生き返す。", "Resurrects nearby corpse and skeletons. And makes these your pets.");
+
+               {
+                       if (cast)
+                       {
+                               animate_dead(0, p_ptr->y, p_ptr->x);
+                       }
+               }
+               break;
+
+       case 15:
+               if (name) return _("抹殺", "Genocide");
+               if (desc) return _("指定した文字のモンスターを現在の階から消し去る。抵抗されると無効。",
+                       "Eliminates an entire class of monster, exhausting you.  Powerful or unique monsters may resist.");
+
+               {
+                       int power = plev + 50;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               symbol_genocide(power, TRUE);
+                       }
+               }
+               break;
+
+       case 16:
+               if (name) return _("狂戦士化", "Berserk");
+               if (desc) return _("狂戦士化し、恐怖を除去する。", "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.");
+
+               {
+                       int base = 25;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               (void)berserk(base + randint1(base));
+                       }
+               }
+               break;
+
+       case 17:
+               if (name) return _("悪霊召喚", "Invoke Spirits");
+               if (desc) return _("ランダムで様々な効果が起こる。", "Causes random effects.");
+
+               {
+                       if (info) return s_random;
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               cast_invoke_spirits(dir);
+                       }
+               }
+               break;
+
+       case 18:
+               if (name) return _("暗黒の矢", "Dark Bolt");
+               if (desc) return _("暗黒のボルトもしくはビームを放つ。", "Fires a bolt or beam of darkness.");
+
+               {
+                       int dice = 4 + (plev - 5) / 4;
+                       int sides = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 19:
+               if (name) return _("狂乱戦士", "Battle Frenzy");
+               if (desc) return _("狂戦士化し、恐怖を除去し、加速する。",
+                       "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.");
+
+               {
+                       int b_base = 25;
+                       int sp_base = plev / 2;
+                       int sp_sides = 20 + plev / 2;
+
+                       if (info) return info_duration(b_base, b_base);
+
+                       if (cast)
+                       {
+                               (void)berserk(b_base + randint1(b_base));
+                               set_fast(randint1(sp_sides) + sp_base, FALSE);
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("吸血の刃", "Vampiric Branding");
+               if (desc) return _("武器に吸血の属性をつける。", "Makes current weapon Vampiric.");
+
+               {
+                       if (cast)
+                       {
+                               brand_weapon(4);
+                       }
+               }
+               break;
+
+       case 21:
+               if (name) return _("吸血の連矢", "Vampiric Bolts");
+               if (desc) return _("3連射のボルトによりモンスター1体から生命力を吸いとる。吸いとった生命力によって体力が回復する。",
+                       "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.");
+               {
+                       HIT_POINT dam = 100;
+
+                       if (info) return format("%s3*%d", s_dam, dam);
+
+                       if (cast)
+                       {
+                               int i;
+
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               chg_virtue(V_SACRIFICE, -1);
+                               chg_virtue(V_VITALITY, -1);
+
+                               for (i = 0; i < 3; i++)
+                               {
+                                       if (hypodynamic_bolt(dir, dam))
+                                               hp_player(dam);
+                               }
+                       }
+               }
+               break;
+
+       case 22:
+               if (name) return _("死の言魂", "Nether Wave");
+               if (desc) return _("視界内の生命のあるモンスターにダメージを与える。", "Damages all living monsters in sight.");
+
+               {
+                       int sides = plev * 3;
+
+                       if (info) return info_damage(1, sides, 0);
+
+                       if (cast)
+                       {
+                               dispel_living(randint1(sides));
+                       }
+               }
+               break;
+
+       case 23:
+               if (name) return _("暗黒の嵐", "Darkness Storm");
+               if (desc) return _("巨大な暗黒の球を放つ。", "Fires a huge ball of darkness.");
+
+               {
+                       HIT_POINT dam = 100 + plev * 2;
+                       int rad = 4;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_DARK, dir, dam, rad);
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("死の光線", "Death Ray");
+               if (desc) return _("死の光線を放つ。", "Fires a beam of death.");
+
+               {
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               death_ray(dir, plev);
+                       }
+               }
+               break;
+
+       case 25:
+               if (name) return _("死者召喚", "Raise the Dead");
+               if (desc) return _("1体のアンデッドを召喚する。", "Summons an undead monster.");
+
+               {
+                       if (cast)
+                       {
+                               int type;
+                               bool pet = one_in_(3);
+                               u32b flg = 0L;
+
+                               type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
+
+                               if (!pet || (pet && (plev > 24) && one_in_(3)))
+                                       flg |= PM_ALLOW_GROUP;
+
+                               if (pet) flg |= PM_FORCE_PET;
+                               else flg |= (PM_ALLOW_UNIQUE | PM_NO_PET);
+
+                               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, type, flg))
+                               {
+                                       msg_print(_("冷たい風があなたの周りに吹き始めた。それは腐敗臭を運んでいる...",
+                                               "Cold winds begin to blow around you, carrying with them the stench of decay..."));
+
+
+                                       if (pet)
+                                       {
+                                               msg_print(_("古えの死せる者共があなたに仕えるため土から甦った!",
+                                                       "Ancient, long-dead forms arise from the ground to serve you!"));
+                                       }
+                                       else
+                                       {
+                                               msg_print(_("死者が甦った。眠りを妨げるあなたを罰するために!",
+                                                       "'The dead arise... to punish you for disturbing them!'"));
+                                       }
+
+                                       chg_virtue(V_UNLIFE, 1);
+                               }
+                       }
+               }
+               break;
+
+       case 26:
+               if (name) return _("死者の秘伝", "Esoteria");
+               if (desc) return _("アイテムを1つ識別する。レベルが高いとアイテムの能力を完全に知ることができる。",
+                       "Identifies an item. Or *identifies* an item at higher level.");
+
+               {
+                       if (cast)
+                       {
+                               if (randint1(50) > plev)
+                               {
+                                       if (!ident_spell(FALSE)) return NULL;
+                               }
+                               else
+                               {
+                                       if (!identify_fully(FALSE)) return NULL;
+                               }
+                       }
+               }
+               break;
+
+       case 27:
+               if (name) return _("吸血鬼変化", "Polymorph Vampire");
+               if (desc) return _("一定時間、吸血鬼に変化する。変化している間は本来の種族の能力を失い、代わりに吸血鬼としての能力を得る。",
+                       "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.");
+
+               {
+                       int base = 10 + plev / 2;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);
+                       }
+               }
+               break;
+
+       case 28:
+               if (name) return _("経験値復活", "Restore Life");
+               if (desc) return _("失った経験値を回復する。", "Restore lost experience.");
+
+               {
+                       if (cast)
+                       {
+                               restore_level();
+                       }
+               }
+               break;
+
+       case 29:
+               if (name) return _("周辺抹殺", "Mass Genocide");
+               if (desc) return _("自分の周囲にいるモンスターを現在の階から消し去る。抵抗されると無効。",
+                       "Eliminates all nearby monsters, exhausting you.  Powerful or unique monsters may be able to resist.");
+
+               {
+                       int power = plev + 50;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               mass_genocide(power, TRUE);
+                       }
+               }
+               break;
+
+       case 30:
+               if (name) return _("地獄の劫火", "Hellfire");
+               if (desc) return _("邪悪な力を持つ宝珠を放つ。善良なモンスターには大きなダメージを与える。",
+                       "Fires a powerful ball of evil power. Hurts good monsters greatly.");
+
+               {
+                       HIT_POINT dam = 666;
+                       int rad = 3;
+
+                       if (info) return info_damage(0, 0, dam);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_HELL_FIRE, dir, dam, rad);
+                               take_hit(DAMAGE_USELIFE, 20 + randint1(30), _("地獄の劫火の呪文を唱えた疲労", "the strain of casting Hellfire"), -1);
+                       }
+               }
+               break;
+
+       case 31:
+               if (name) return _("幽体化", "Wraithform");
+               if (desc) return _("一定時間、壁を通り抜けることができ受けるダメージが軽減される幽体の状態に変身する。",
+                       "Becomes wraith form which gives ability to pass walls and makes all damages half.");
+
+               {
+                       int base = plev / 2;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_wraith_form(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+       }
+
+       return "";
+}
index b4315d3..18df0f9 100644 (file)
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-\r
-/*!\r
-* @brief \8c\95\8fp\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \8c\95\8fpID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_CAST)\r
-* @return SPELL_NAME / SPELL_DESC \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
-*/\r
-cptr do_hissatsu_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 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 _("\94ò\94Ñ\8dj", "Tobi-Izuna");\r
-               if (desc) return _("2\83}\83X\97£\82ê\82½\82Æ\82±\82ë\82É\82¢\82é\83\82\83\93\83X\83^\81[\82ð\8dU\8c\82\82·\82é\81B", "Attacks a two squares distant monster.");\r
-\r
-               if (cast)\r
-               {\r
-                       project_length = 2;\r
-                       if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                       project_hook(GF_ATTACK, dir, HISSATSU_2, PROJECT_STOP | PROJECT_KILL);\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("\8cÜ\8c\8e\89J\8ea\82è", "3-Way Attack");\r
-               if (desc) return _("3\95û\8cü\82É\91Î\82µ\82Ä\8dU\8c\82\82·\82é\81B", "Attacks in 3 directions in one time.");\r
-\r
-               if (cast)\r
-               {\r
-                       int cdir;\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       for (cdir = 0; cdir < 8; cdir++)\r
-                       {\r
-                               if (cdd[cdir] == dir) break;\r
-                       }\r
-\r
-                       if (cdir == 8) return NULL;\r
-\r
-                       y = p_ptr->y + ddy_cdd[cdir];\r
-                       x = p_ptr->x + ddx_cdd[cdir];\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, 0);\r
-                       else\r
-                               msg_print(_("\8dU\8c\82\82Í\8bó\82ð\90Ø\82Á\82½\81B", "You attack the empty air."));\r
-\r
-                       y = p_ptr->y + ddy_cdd[(cdir + 7) % 8];\r
-                       x = p_ptr->x + ddx_cdd[(cdir + 7) % 8];\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, 0);\r
-                       else\r
-                               msg_print(_("\8dU\8c\82\82Í\8bó\82ð\90Ø\82Á\82½\81B", "You attack the empty air."));\r
-\r
-                       y = p_ptr->y + ddy_cdd[(cdir + 1) % 8];\r
-                       x = p_ptr->x + ddx_cdd[(cdir + 1) % 8];\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, 0);\r
-                       else\r
-                               msg_print(_("\8dU\8c\82\82Í\8bó\82ð\90Ø\82Á\82½\81B", "You attack the empty air."));\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("\83u\81[\83\81\83\89\83\93", "Boomerang");\r
-               if (desc) return _("\95\90\8aí\82ð\8eè\8c³\82É\96ß\82Á\82Ä\82­\82é\82æ\82¤\82É\93\8a\82°\82é\81B\96ß\82Á\82Ä\82±\82È\82¢\82±\82Æ\82à\82 \82é\81B",\r
-                       "Throws current weapon. And it'll return to your hand unless failed.");\r
-\r
-               if (cast)\r
-               {\r
-                       if (!do_cmd_throw(1, TRUE, -1)) return NULL;\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("\89\8b\97ì", "Burning Strike");\r
-               if (desc) return _("\89Î\89\8a\91Ï\90«\82Ì\82È\82¢\83\82\83\93\83X\83^\81[\82É\91å\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B", "Attacks a monster with more damage unless it has resistance to fire.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_FIRE);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("\8eE\8bC\8a´\92m", "Detect Ferocity");\r
-               if (desc) return _("\8bß\82­\82Ì\8ev\8dl\82·\82é\82±\82Æ\82ª\82Å\82«\82é\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "Detects all monsters except mindless in your vicinity.");\r
-\r
-               if (cast)\r
-               {\r
-                       detect_monsters_mind(DETECT_RAD_DEFAULT);\r
-               }\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("\82Ý\82Ë\91Å\82¿", "Strike to Stun");\r
-               if (desc) return _("\91\8a\8eè\82É\83_\83\81\81[\83W\82ð\97^\82¦\82È\82¢\82ª\81A\9eN\9eO\82Æ\82³\82¹\82é\81B", "Attempts to stun a monster in the adjacent.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_MINEUCHI);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("\83J\83E\83\93\83^\81[", "Counter");\r
-               if (desc) return _("\91\8a\8eè\82É\8dU\8c\82\82³\82ê\82½\82Æ\82«\82É\94½\8c\82\82·\82é\81B\94½\8c\82\82·\82é\82½\82Ñ\82ÉMP\82ð\8fÁ\94ï\81B",\r
-                       "Prepares to counterattack. When attack by a monster, strikes back using SP each time.");\r
-\r
-               if (cast)\r
-               {\r
-                       if (p_ptr->riding)\r
-                       {\r
-                               msg_print(_("\8fæ\94n\92\86\82É\82Í\96³\97\9d\82¾\81B", "You cannot do it when riding."));\r
-                               return NULL;\r
-                       }\r
-                       msg_print(_("\91\8a\8eè\82Ì\8dU\8c\82\82É\91Î\82µ\82Ä\90g\8d\\82¦\82½\81B", "You prepare to counter blow."));\r
-                       p_ptr->counter = TRUE;\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("\95¥\82¢\94²\82¯", "Harainuke");\r
-               if (desc) return _("\8dU\8c\82\82µ\82½\8cã\81A\94½\91Î\91¤\82É\94²\82¯\82é\81B",\r
-                       "Attacks monster with your weapons normally, then move through counter side of the monster.");\r
-\r
-               if (cast)\r
-               {\r
-                       POSITION y, x;\r
-\r
-                       if (p_ptr->riding)\r
-                       {\r
-                               msg_print(_("\8fæ\94n\92\86\82É\82Í\96³\97\9d\82¾\81B", "You cannot do it when riding."));\r
-                               return NULL;\r
-                       }\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-\r
-                       if (dir == 5) return NULL;\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (!cave[y][x].m_idx)\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-\r
-                       py_attack(y, x, 0);\r
-\r
-                       if (!player_can_enter(cave[y][x].feat, 0) || is_trap(cave[y][x].feat))\r
-                               break;\r
-\r
-                       y += ddy[dir];\r
-                       x += ddx[dir];\r
-\r
-                       if (player_can_enter(cave[y][x].feat, 0) && !is_trap(cave[y][x].feat) && !cave[y][x].m_idx)\r
-                       {\r
-                               msg_print(NULL);\r
-\r
-                               /* Move the player */\r
-                               (void)move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("\83T\81[\83y\83\93\83c\83^\83\93", "Serpent's Tongue");\r
-               if (desc) return _("\93Å\91Ï\90«\82Ì\82È\82¢\83\82\83\93\83X\83^\81[\82É\91å\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B", "Attacks a monster with more damage unless it has resistance to poison.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_POISON);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("\8ea\96\82\8c\95\93ó\82Ì\91¾\93\81", "Zammaken");\r
-               if (desc) return _("\90\96½\82Ì\82È\82¢\8e×\88«\82È\83\82\83\93\83X\83^\81[\82É\91å\83_\83\81\81[\83W\82ð\97^\82¦\82é\82ª\81A\91¼\82Ì\83\82\83\93\83X\83^\81[\82É\82Í\91S\82­\8cø\89Ê\82ª\82È\82¢\81B",\r
-                       "Attacks an evil unliving monster with great damage. No effect to other  monsters.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_ZANMA);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("\97ô\95\97\8c\95", "Wind Blast");\r
-               if (desc) return _("\8dU\8c\82\82µ\82½\91\8a\8eè\82ð\8cã\95û\82Ö\90\81\82«\94ò\82Î\82·\81B", "Attacks an adjacent monster, and blow it away.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, 0);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-                       if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)\r
-                       {\r
-                               return "";\r
-                       }\r
-                       if (cave[y][x].m_idx)\r
-                       {\r
-                               int i;\r
-                               POSITION ty = y, tx = x;\r
-                               POSITION oy = y, ox = x;\r
-                               MONSTER_IDX m_idx = cave[y][x].m_idx;\r
-                               monster_type *m_ptr = &m_list[m_idx];\r
-                               char m_name[80];\r
-\r
-                               monster_desc(m_name, m_ptr, 0);\r
-\r
-                               for (i = 0; i < 5; i++)\r
-                               {\r
-                                       y += ddy[dir];\r
-                                       x += ddx[dir];\r
-                                       if (cave_empty_bold(y, x))\r
-                                       {\r
-                                               ty = y;\r
-                                               tx = x;\r
-                                       }\r
-                                       else break;\r
-                               }\r
-                               if ((ty != oy) || (tx != ox))\r
-                               {\r
-                                       msg_format(_("%s\82ð\90\81\82«\94ò\82Î\82µ\82½\81I", "You blow %s away!"), m_name);\r
-                                       cave[oy][ox].m_idx = 0;\r
-                                       cave[ty][tx].m_idx = m_idx;\r
-                                       m_ptr->fy = ty;\r
-                                       m_ptr->fx = tx;\r
-\r
-                                       update_mon(m_idx, TRUE);\r
-                                       lite_spot(oy, ox);\r
-                                       lite_spot(ty, tx);\r
-\r
-                                       if (r_info[m_ptr->r_idx].flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))\r
-                                               p_ptr->update |= (PU_MON_LITE);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("\93\81\8f \82Ì\96Ú\97\98\82«", "Judge");\r
-               if (desc) return _("\95\90\8aí\81E\96h\8bï\82ð1\82Â\8e¯\95Ê\82·\82é\81B\83\8c\83x\83\8b45\88È\8fã\82Å\95\90\8aí\81E\96h\8bï\82Ì\94\\97Í\82ð\8a®\91S\82É\92m\82é\82±\82Æ\82ª\82Å\82«\82é\81B",\r
-                       "Identifies a weapon or armor. Or *identifies* these at level 45.");\r
-\r
-               if (cast)\r
-               {\r
-                       if (plev > 44)\r
-                       {\r
-                               if (!identify_fully(TRUE)) return NULL;\r
-                       }\r
-                       else\r
-                       {\r
-                               if (!ident_spell(TRUE)) return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("\94j\8aâ\8ea", "Rock Smash");\r
-               if (desc) return _("\8aâ\82ð\89ó\82µ\81A\8aâ\90Î\8cn\82Ì\83\82\83\93\83X\83^\81[\82É\91å\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B", "Breaks rock. Or greatly damage a monster made by rocks.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_HAGAN);\r
-\r
-                       if (!cave_have_flag_bold(y, x, FF_HURT_ROCK)) break;\r
-\r
-                       /* Destroy the feature */\r
-                       cave_alter_feat(y, x, FF_HURT_ROCK);\r
-\r
-                       /* Update some things */\r
-                       p_ptr->update |= (PU_FLOW);\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("\97\90\82ê\90á\8c\8e\89Ô", "Midare-Setsugekka");\r
-               if (desc) return _("\8dU\8c\82\89ñ\90\94\82ª\91\9d\82¦\81A\97â\8bC\91Ï\90«\82Ì\82È\82¢\83\82\83\93\83X\83^\81[\82É\91å\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
-                       "Attacks a monster with increased number of attacks and more damage unless it has resistance to cold.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_COLD);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("\8b}\8f\8a\93Ë\82«", "Spot Aiming");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[\82ð\88ê\8c\82\82Å\93|\82·\8dU\8c\82\82ð\8cJ\82è\8fo\82·\81B\8e¸\94s\82·\82é\82Æ1\93_\82µ\82©\83_\83\81\81[\83W\82ð\97^\82¦\82ç\82ê\82È\82¢\81B",\r
-                       "Attempts to kill a monster instantly. If failed cause only 1HP of damage.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_KYUSHO);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("\96\82\90_\8ea\82è", "Majingiri");\r
-               if (desc) return _("\89ï\90S\82Ì\88ê\8c\82\82Å\8dU\8c\82\82·\82é\81B\8dU\8c\82\82ª\82©\82í\82³\82ê\82â\82·\82¢\81B",\r
-                       "Attempts to attack with critical hit. But this attack is easy to evade for a monster.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_MAJIN);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("\8eÌ\82Ä\90g", "Desperate Attack");\r
-               if (desc) return _("\8b­\97Í\82È\8dU\8c\82\82ð\8cJ\82è\8fo\82·\81B\8e\9f\82Ì\83^\81[\83\93\82Ü\82Å\82Ì\8aÔ\81A\90H\82ç\82¤\83_\83\81\81[\83W\82ª\91\9d\82¦\82é\81B",\r
-                       "Attacks with all of your power. But all damages you take will be doubled for one turn.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_SUTEMI);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-                       p_ptr->sutemi = TRUE;\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("\97\8b\8c\82\98h\92Ü\8ea", "Lightning Eagle");\r
-               if (desc) return _("\93d\8c\82\91Ï\90«\82Ì\82È\82¢\83\82\83\93\83X\83^\81[\82É\94ñ\8fí\82É\91å\82«\82¢\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
-                       "Attacks a monster with more damage unless it has resistance to electricity.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_ELEC);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("\93ü\90g", "Rush Attack");\r
-               if (desc) return _("\91f\91\81\82­\91\8a\8eè\82É\8bß\8añ\82è\8dU\8c\82\82·\82é\81B", "Steps close to a monster and attacks at a time.");\r
-\r
-               if (cast)\r
-               {\r
-                       if (!rush_attack(NULL)) return NULL;\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("\90Ô\97¬\89Q", "Bloody Maelstrom");\r
-               if (desc) return _("\8e©\95ª\8e©\90g\82à\8f\9d\82ð\8dì\82è\82Â\82Â\81A\82»\82Ì\8f\9d\82ª\90[\82¢\82Ù\82Ç\91å\82«\82¢\88Ð\97Í\82Å\91S\95û\8cü\82Ì\93G\82ð\8dU\8c\82\82Å\82«\82é\81B\90\82«\82Ä\82¢\82È\82¢\83\82\83\93\83X\83^\81[\82É\82Í\8cø\89Ê\82ª\82È\82¢\81B",\r
-                       "Attacks all adjacent monsters with power corresponding to your cut status. Then increases your cut status. No effect to unliving monsters.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y = 0, x = 0;\r
-\r
-                       cave_type       *c_ptr;\r
-                       monster_type    *m_ptr;\r
-\r
-                       if (p_ptr->cut < 300)\r
-                               set_cut(p_ptr->cut + 300);\r
-                       else\r
-                               set_cut(p_ptr->cut * 2);\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
-                               {\r
-                                       if (!monster_living(&r_info[m_ptr->r_idx]))\r
-                                       {\r
-                                               char m_name[80];\r
-\r
-                                               monster_desc(m_name, m_ptr, 0);\r
-                                               msg_format(_("%s\82É\82Í\8cø\89Ê\82ª\82È\82¢\81I", "%s is unharmed!"), m_name);\r
-                                       }\r
-                                       else py_attack(y, x, HISSATSU_SEKIRYUKA);\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("\8c\83\90k\8c\82", "Earthquake Blow");\r
-               if (desc) return _("\92n\90k\82ð\8bN\82±\82·\81B", "Shakes dungeon structure, and results in random swapping of floors and walls.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_QUAKE);\r
-                       else\r
-                               earthquake(p_ptr->y, p_ptr->x, 10);\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("\92n\91\96\82è", "Crack");\r
-               if (desc) return _("\8fÕ\8c\82\94g\82Ì\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a beam of shock wave.");\r
-\r
-               if (cast)\r
-               {\r
-                       int total_damage = 0, basedam, i;\r
-                       u32b flgs[TR_FLAG_SIZE];\r
-                       object_type *o_ptr;\r
-                       if (!get_aim_dir(&dir)) return NULL;\r
-                       msg_print(_("\95\90\8aí\82ð\91å\82«\82­\90U\82è\89º\82ë\82µ\82½\81B", "You swing your weapon downward."));\r
-                       for (i = 0; i < 2; i++)\r
-                       {\r
-                               int damage;\r
-\r
-                               if (!buki_motteruka(INVEN_RARM + i)) break;\r
-                               o_ptr = &inventory[INVEN_RARM + i];\r
-                               basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;\r
-                               damage = o_ptr->to_d * 100;\r
-                               object_flags(o_ptr, flgs);\r
-                               if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))\r
-                               {\r
-                                       /* vorpal blade */\r
-                                       basedam *= 5;\r
-                                       basedam /= 3;\r
-                               }\r
-                               else if (have_flag(flgs, TR_VORPAL))\r
-                               {\r
-                                       /* vorpal flag only */\r
-                                       basedam *= 11;\r
-                                       basedam /= 9;\r
-                               }\r
-                               damage += basedam;\r
-                               damage *= p_ptr->num_blow[i];\r
-                               total_damage += damage / 200;\r
-                               if (i) total_damage = total_damage * 7 / 10;\r
-                       }\r
-                       fire_beam(GF_FORCE, dir, total_damage);\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("\8bC\94\97\82Ì\97Y\8b©\82Ñ", "War Cry");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\83\82\83\93\83X\83^\81[\82É\91Î\82µ\82Ä\8d\8c\89¹\82Ì\8dU\8c\82\82ð\8ds\82¤\81B\82³\82ç\82É\81A\8bß\82­\82É\82¢\82é\83\82\83\93\83X\83^\81[\82ð\93{\82ç\82¹\82é\81B",\r
-                       "Damages all monsters in sight with sound. Aggravate nearby monsters.");\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\97Y\8b©\82Ñ\82ð\82 \82°\82½\81I", "You roar out!"));\r
-                       project_hack(GF_SOUND, randint1(plev * 3));\r
-                       aggravate_monsters(0);\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("\96³\91o\8eO\92i", "Musou-Sandan");\r
-               if (desc) return _("\8b­\97Í\82È3\92i\8dU\8c\82\82ð\8cJ\82è\8fo\82·\81B", "Attacks with powerful 3 strikes.");\r
-\r
-               if (cast)\r
-               {\r
-                       int i;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       for (i = 0; i < 3; i++)\r
-                       {\r
-                               POSITION y, x;\r
-                               POSITION ny, nx;\r
-                               MONSTER_IDX m_idx;\r
-                               cave_type *c_ptr;\r
-                               monster_type *m_ptr;\r
-\r
-                               y = p_ptr->y + ddy[dir];\r
-                               x = p_ptr->x + ddx[dir];\r
-                               c_ptr = &cave[y][x];\r
-\r
-                               if (c_ptr->m_idx)\r
-                                       py_attack(y, x, HISSATSU_3DAN);\r
-                               else\r
-                               {\r
-                                       msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                                       return NULL;\r
-                               }\r
-\r
-                               if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)\r
-                               {\r
-                                       return "";\r
-                               }\r
-\r
-                               /* Monster is dead? */\r
-                               if (!c_ptr->m_idx) break;\r
-\r
-                               ny = y + ddy[dir];\r
-                               nx = x + ddx[dir];\r
-                               m_idx = c_ptr->m_idx;\r
-                               m_ptr = &m_list[m_idx];\r
-\r
-                               /* Monster cannot move back? */\r
-                               if (!monster_can_enter(ny, nx, &r_info[m_ptr->r_idx], 0))\r
-                               {\r
-                                       /* -more- */\r
-                                       if (i < 2) msg_print(NULL);\r
-                                       continue;\r
-                               }\r
-\r
-                               c_ptr->m_idx = 0;\r
-                               cave[ny][nx].m_idx = m_idx;\r
-                               m_ptr->fy = ny;\r
-                               m_ptr->fx = nx;\r
-\r
-                               update_mon(m_idx, TRUE);\r
-\r
-                               /* Redraw the old spot */\r
-                               lite_spot(y, x);\r
-\r
-                               /* Redraw the new spot */\r
-                               lite_spot(ny, nx);\r
-\r
-                               /* Player can move forward? */\r
-                               if (player_can_enter(c_ptr->feat, 0))\r
-                               {\r
-                                       /* Move the player */\r
-                                       if (!move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP)) break;\r
-                               }\r
-                               else\r
-                               {\r
-                                       break;\r
-                               }\r
-\r
-                               /* -more- */\r
-                               if (i < 2) msg_print(NULL);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("\8bz\8c\8c\8bS\82Ì\89å", "Vampire's Fang");\r
-               if (desc) return _("\8dU\8c\82\82µ\82½\91\8a\8eè\82Ì\91Ì\97Í\82ð\8bz\82¢\82Æ\82è\81A\8e©\95ª\82Ì\91Ì\97Í\82ð\89ñ\95\9c\82³\82¹\82é\81B\90\96½\82ð\8e\9d\82½\82È\82¢\83\82\83\93\83X\83^\81[\82É\82Í\92Ê\82\82È\82¢\81B",\r
-                       "Attacks with vampiric strikes which absorbs HP from a monster and gives them to you. No effect to unliving monsters.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_DRAIN);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 25:\r
-               if (name) return _("\8c\98f", "Moon Dazzling");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\8bN\82«\82Ä\82¢\82é\91S\83\82\83\93\83X\83^\81[\82É\9eN\9eO\81A\8d¬\97\90\81A\96°\82è\82ð\97^\82¦\82æ\82¤\82Æ\82·\82é\81B", "Attempts to stun, confuse and sleep all waking monsters.");\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\95\90\8aí\82ð\95s\8bK\91¥\82É\97h\82ç\82µ\82½\81D\81D\81D", "You irregularly wave your weapon..."));\r
-                       project_hack(GF_ENGETSU, plev * 4);\r
-                       project_hack(GF_ENGETSU, plev * 4);\r
-                       project_hack(GF_ENGETSU, plev * 4);\r
-               }\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("\95S\90l\8ea\82è", "Hundred Slaughter");\r
-               if (desc) return _("\98A\91±\82µ\82Ä\93ü\90g\82Å\83\82\83\93\83X\83^\81[\82ð\8dU\8c\82\82·\82é\81B\8dU\8c\82\82·\82é\82½\82Ñ\82ÉMP\82ð\8fÁ\94ï\81BMP\82ª\82È\82­\82È\82é\82©\81A\83\82\83\93\83X\83^\81[\82ð\93|\82¹\82È\82©\82Á\82½\82ç\95S\90l\8ea\82è\82Í\8fI\97¹\82·\82é\81B",\r
-                       "Performs a series of rush attacks. The series continues while killing each monster in a time and SP remains.");\r
-\r
-               if (cast)\r
-               {\r
-                       const int mana_cost_per_monster = 8;\r
-                       bool is_new = TRUE;\r
-                       bool mdeath;\r
-\r
-                       do\r
-                       {\r
-                               if (!rush_attack(&mdeath)) break;\r
-                               if (is_new)\r
-                               {\r
-                                       /* Reserve needed mana point */\r
-                                       p_ptr->csp -= technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;\r
-                                       is_new = FALSE;\r
-                               }\r
-                               else\r
-                                       p_ptr->csp -= mana_cost_per_monster;\r
-\r
-                               if (!mdeath) break;\r
-                               command_dir = 0;\r
-\r
-                               p_ptr->redraw |= PR_MANA;\r
-                               handle_stuff();\r
-                       } while (p_ptr->csp > mana_cost_per_monster);\r
-\r
-                       if (is_new) return NULL;\r
-\r
-                       /* Restore reserved mana */\r
-                       p_ptr->csp += technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("\93VãÄ\97´\91M", "Dragonic Flash");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\8fê\8f\8a\82ð\8ew\92è\82µ\82Ä\81A\82»\82Ì\8fê\8f\8a\82Æ\8e©\95ª\82Ì\8aÔ\82É\82¢\82é\91S\83\82\83\93\83X\83^\81[\82ð\8dU\8c\82\82µ\81A\82»\82Ì\8fê\8f\8a\82É\88Ú\93®\82·\82é\81B",\r
-                       "Runs toward given location while attacking all monsters on the path.");\r
-\r
-               if (cast)\r
-               {\r
-                       POSITION y, x;\r
-\r
-                       if (!tgt_pt(&x, &y)) return NULL;\r
-\r
-                       if (!cave_player_teleportable_bold(y, x, 0L) ||\r
-                               (distance(y, x, p_ptr->y, p_ptr->x) > MAX_SIGHT / 2) ||\r
-                               !projectable(p_ptr->y, p_ptr->x, y, x))\r
-                       {\r
-                               msg_print(_("\8e¸\94s\81I", "You cannot move to that place!"));\r
-                               break;\r
-                       }\r
-                       if (p_ptr->anti_tele)\r
-                       {\r
-                               msg_print(_("\95s\8ev\8bc\82È\97Í\82ª\83e\83\8c\83|\81[\83g\82ð\96h\82¢\82¾\81I", "A mysterious force prevents you from teleporting!"));\r
-                               break;\r
-                       }\r
-                       project(0, 0, y, x, HISSATSU_ISSEN, GF_ATTACK, PROJECT_BEAM | PROJECT_KILL, -1);\r
-                       teleport_player_to(y, x, 0L);\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("\93ñ\8fd\82Ì\8c\95\8c\82", "Twin Slash");\r
-               if (desc) return _("1\83^\81[\83\93\82Å2\93x\8dU\8c\82\82ð\8ds\82¤\81B", "double attacks at a time.");\r
-\r
-               if (cast)\r
-               {\r
-                       int x, y;\r
-\r
-                       if (!get_rep_dir(&dir, FALSE)) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                       {\r
-                               py_attack(y, x, 0);\r
-                               if (cave[y][x].m_idx)\r
-                               {\r
-                                       handle_stuff();\r
-                                       py_attack(y, x, 0);\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "You don't see any monster in this direction"));\r
-                               return NULL;\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("\8cÕ\95\9a\90â\93\81\90¨", "Kofuku-Zettousei");\r
-               if (desc) return _("\8b­\97Í\82È\8dU\8c\82\82ð\8ds\82¢\81A\8bß\82­\82Ì\8fê\8f\8a\82É\82à\8cø\89Ê\82ª\8by\82Ô\81B", "Performs a powerful attack which even effect nearby monsters.");\r
-\r
-               if (cast)\r
-               {\r
-                       int total_damage = 0, basedam, i;\r
-                       int y, x;\r
-                       u32b flgs[TR_FLAG_SIZE];\r
-                       object_type *o_ptr;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)\r
-                       {\r
-                               msg_print(_("\82È\82º\82©\8dU\8c\82\82·\82é\82±\82Æ\82ª\82Å\82«\82È\82¢\81B", "Something prevent you from attacking."));\r
-                               return "";\r
-                       }\r
-                       msg_print(_("\95\90\8aí\82ð\91å\82«\82­\90U\82è\89º\82ë\82µ\82½\81B", "You swing your weapon downward."));\r
-                       for (i = 0; i < 2; i++)\r
-                       {\r
-                               int damage;\r
-                               if (!buki_motteruka(INVEN_RARM + i)) break;\r
-                               o_ptr = &inventory[INVEN_RARM + i];\r
-                               basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;\r
-                               damage = o_ptr->to_d * 100;\r
-                               object_flags(o_ptr, flgs);\r
-                               if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))\r
-                               {\r
-                                       /* vorpal blade */\r
-                                       basedam *= 5;\r
-                                       basedam /= 3;\r
-                               }\r
-                               else if (have_flag(flgs, TR_VORPAL))\r
-                               {\r
-                                       /* vorpal flag only */\r
-                                       basedam *= 11;\r
-                                       basedam /= 9;\r
-                               }\r
-                               damage += basedam;\r
-                               damage += p_ptr->to_d[i] * 100;\r
-                               damage *= p_ptr->num_blow[i];\r
-                               total_damage += (damage / 100);\r
-                       }\r
-                       project(0, (cave_have_flag_bold(y, x, FF_PROJECT) ? 5 : 0), y, x, total_damage * 3 / 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("\8cc\89_\8bS\94E\8c\95", "Keiun-Kininken");\r
-               if (desc) return _("\8e©\95ª\82à\83_\83\81\81[\83W\82ð\82­\82ç\82¤\82ª\81A\91\8a\8eè\82É\94ñ\8fí\82É\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\83A\83\93\83f\83b\83h\82É\82Í\93Á\82É\8cø\89Ê\82ª\82 \82é\81B",\r
-                       "Attacks a monster with extremely powerful damage. But you also takes some damages. Hurts a undead monster greatly.");\r
-\r
-               if (cast)\r
-               {\r
-                       int y, x;\r
-\r
-                       if (!get_rep_dir2(&dir)) return NULL;\r
-                       if (dir == 5) return NULL;\r
-\r
-                       y = p_ptr->y + ddy[dir];\r
-                       x = p_ptr->x + ddx[dir];\r
-\r
-                       if (cave[y][x].m_idx)\r
-                               py_attack(y, x, HISSATSU_UNDEAD);\r
-                       else\r
-                       {\r
-                               msg_print(_("\82»\82Ì\95û\8cü\82É\82Í\83\82\83\93\83X\83^\81[\82Í\82¢\82Ü\82¹\82ñ\81B", "There is no monster."));\r
-                               return NULL;\r
-                       }\r
-                       take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), _("\8cc\89_\8bS\94E\8c\95\82ð\8eg\82Á\82½\8fÕ\8c\82", "exhaustion on using Keiun-Kininken"), -1);\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("\90Ø\95 ", "Harakiri");\r
-               if (desc) return _("\81u\95\90\8em\93¹\82Æ\82Í\81A\8e\80\82Ê\82±\82Æ\82Æ\8c©\82Â\82¯\82½\82è\81B\81v", "'Busido is found in death'");\r
-\r
-               if (cast)\r
-               {\r
-                       int i;\r
-                       if (!get_check(_("\96{\93\96\82É\8e©\8eE\82µ\82Ü\82·\82©\81H", "Do you really want to commit suicide? "))) return NULL;\r
-                       /* Special Verification for suicide */\r
-                       prt(_("\8am\94F\82Ì\82½\82ß '@' \82ð\89\9f\82µ\82Ä\89º\82³\82¢\81B", "Please verify SUICIDE by typing the '@' sign: "), 0, 0);\r
-\r
-                       flush();\r
-                       i = inkey();\r
-                       prt("", 0, 0);\r
-                       if (i != '@') return NULL;\r
-                       if (p_ptr->total_winner)\r
-                       {\r
-                               take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);\r
-                               p_ptr->total_winner = TRUE;\r
-                       }\r
-                       else\r
-                       {\r
-                               msg_print(_("\95\90\8em\93¹\82Æ\82Í\81A\8e\80\82Ê\82±\82Æ\82Æ\8c©\82Â\82¯\82½\82è\81B", "Meaning of Bushi-do is found in the death."));\r
-                               take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\r
-}\r
+#include "angband.h"
+#include "cmd-spell.h"
+
+/*!
+* @brief 剣術の各処理を行う
+* @param spell 剣術ID
+* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_CAST)
+* @return SPELL_NAME / SPELL_DESC 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+*/
+cptr do_hissatsu_spell(SPELL_IDX spell, BIT_FLAGS mode)
+{
+       bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
+       bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
+       bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
+
+       int dir;
+       int plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("飛飯綱", "Tobi-Izuna");
+               if (desc) return _("2マス離れたところにいるモンスターを攻撃する。", "Attacks a two squares distant monster.");
+
+               if (cast)
+               {
+                       project_length = 2;
+                       if (!get_aim_dir(&dir)) return NULL;
+
+                       project_hook(GF_ATTACK, dir, HISSATSU_2, PROJECT_STOP | PROJECT_KILL);
+               }
+               break;
+
+       case 1:
+               if (name) return _("五月雨斬り", "3-Way Attack");
+               if (desc) return _("3方向に対して攻撃する。", "Attacks in 3 directions in one time.");
+
+               if (cast)
+               {
+                       int cdir;
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       for (cdir = 0; cdir < 8; cdir++)
+                       {
+                               if (cdd[cdir] == dir) break;
+                       }
+
+                       if (cdir == 8) return NULL;
+
+                       y = p_ptr->y + ddy_cdd[cdir];
+                       x = p_ptr->x + ddx_cdd[cdir];
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, 0);
+                       else
+                               msg_print(_("攻撃は空を切った。", "You attack the empty air."));
+
+                       y = p_ptr->y + ddy_cdd[(cdir + 7) % 8];
+                       x = p_ptr->x + ddx_cdd[(cdir + 7) % 8];
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, 0);
+                       else
+                               msg_print(_("攻撃は空を切った。", "You attack the empty air."));
+
+                       y = p_ptr->y + ddy_cdd[(cdir + 1) % 8];
+                       x = p_ptr->x + ddx_cdd[(cdir + 1) % 8];
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, 0);
+                       else
+                               msg_print(_("攻撃は空を切った。", "You attack the empty air."));
+               }
+               break;
+
+       case 2:
+               if (name) return _("ブーメラン", "Boomerang");
+               if (desc) return _("武器を手元に戻ってくるように投げる。戻ってこないこともある。",
+                       "Throws current weapon. And it'll return to your hand unless failed.");
+
+               if (cast)
+               {
+                       if (!do_cmd_throw(1, TRUE, -1)) return NULL;
+               }
+               break;
+
+       case 3:
+               if (name) return _("焔霊", "Burning Strike");
+               if (desc) return _("火炎耐性のないモンスターに大ダメージを与える。", "Attacks a monster with more damage unless it has resistance to fire.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_FIRE);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+               }
+               break;
+
+       case 4:
+               if (name) return _("殺気感知", "Detect Ferocity");
+               if (desc) return _("近くの思考することができるモンスターを感知する。", "Detects all monsters except mindless in your vicinity.");
+
+               if (cast)
+               {
+                       detect_monsters_mind(DETECT_RAD_DEFAULT);
+               }
+               break;
+
+       case 5:
+               if (name) return _("みね打ち", "Strike to Stun");
+               if (desc) return _("相手にダメージを与えないが、朦朧とさせる。", "Attempts to stun a monster in the adjacent.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_MINEUCHI);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+               }
+               break;
+
+       case 6:
+               if (name) return _("カウンター", "Counter");
+               if (desc) return _("相手に攻撃されたときに反撃する。反撃するたびにMPを消費。",
+                       "Prepares to counterattack. When attack by a monster, strikes back using SP each time.");
+
+               if (cast)
+               {
+                       if (p_ptr->riding)
+                       {
+                               msg_print(_("乗馬中には無理だ。", "You cannot do it when riding."));
+                               return NULL;
+                       }
+                       msg_print(_("相手の攻撃に対して身構えた。", "You prepare to counter blow."));
+                       p_ptr->counter = TRUE;
+               }
+               break;
+
+       case 7:
+               if (name) return _("払い抜け", "Harainuke");
+               if (desc) return _("攻撃した後、反対側に抜ける。",
+                       "Attacks monster with your weapons normally, then move through counter side of the monster.");
+
+               if (cast)
+               {
+                       POSITION y, x;
+
+                       if (p_ptr->riding)
+                       {
+                               msg_print(_("乗馬中には無理だ。", "You cannot do it when riding."));
+                               return NULL;
+                       }
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+
+                       if (dir == 5) return NULL;
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (!cave[y][x].m_idx)
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+
+                       py_attack(y, x, 0);
+
+                       if (!player_can_enter(cave[y][x].feat, 0) || is_trap(cave[y][x].feat))
+                               break;
+
+                       y += ddy[dir];
+                       x += ddx[dir];
+
+                       if (player_can_enter(cave[y][x].feat, 0) && !is_trap(cave[y][x].feat) && !cave[y][x].m_idx)
+                       {
+                               msg_print(NULL);
+
+                               /* Move the player */
+                               (void)move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
+                       }
+               }
+               break;
+
+       case 8:
+               if (name) return _("サーペンツタン", "Serpent's Tongue");
+               if (desc) return _("毒耐性のないモンスターに大ダメージを与える。", "Attacks a monster with more damage unless it has resistance to poison.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_POISON);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+               }
+               break;
+
+       case 9:
+               if (name) return _("斬魔剣弐の太刀", "Zammaken");
+               if (desc) return _("生命のない邪悪なモンスターに大ダメージを与えるが、他のモンスターには全く効果がない。",
+                       "Attacks an evil unliving monster with great damage. No effect to other  monsters.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_ZANMA);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+               }
+               break;
+
+       case 10:
+               if (name) return _("裂風剣", "Wind Blast");
+               if (desc) return _("攻撃した相手を後方へ吹き飛ばす。", "Attacks an adjacent monster, and blow it away.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, 0);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+                       if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
+                       {
+                               return "";
+                       }
+                       if (cave[y][x].m_idx)
+                       {
+                               int i;
+                               POSITION ty = y, tx = x;
+                               POSITION oy = y, ox = x;
+                               MONSTER_IDX m_idx = cave[y][x].m_idx;
+                               monster_type *m_ptr = &m_list[m_idx];
+                               char m_name[80];
+
+                               monster_desc(m_name, m_ptr, 0);
+
+                               for (i = 0; i < 5; i++)
+                               {
+                                       y += ddy[dir];
+                                       x += ddx[dir];
+                                       if (cave_empty_bold(y, x))
+                                       {
+                                               ty = y;
+                                               tx = x;
+                                       }
+                                       else break;
+                               }
+                               if ((ty != oy) || (tx != ox))
+                               {
+                                       msg_format(_("%sを吹き飛ばした!", "You blow %s away!"), m_name);
+                                       cave[oy][ox].m_idx = 0;
+                                       cave[ty][tx].m_idx = m_idx;
+                                       m_ptr->fy = ty;
+                                       m_ptr->fx = tx;
+
+                                       update_mon(m_idx, TRUE);
+                                       lite_spot(oy, ox);
+                                       lite_spot(ty, tx);
+
+                                       if (r_info[m_ptr->r_idx].flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
+                                               p_ptr->update |= (PU_MON_LITE);
+                               }
+                       }
+               }
+               break;
+
+       case 11:
+               if (name) return _("刀匠の目利き", "Judge");
+               if (desc) return _("武器・防具を1つ識別する。レベル45以上で武器・防具の能力を完全に知ることができる。",
+                       "Identifies a weapon or armor. Or *identifies* these at level 45.");
+
+               if (cast)
+               {
+                       if (plev > 44)
+                       {
+                               if (!identify_fully(TRUE)) return NULL;
+                       }
+                       else
+                       {
+                               if (!ident_spell(TRUE)) return NULL;
+                       }
+               }
+               break;
+
+       case 12:
+               if (name) return _("破岩斬", "Rock Smash");
+               if (desc) return _("岩を壊し、岩石系のモンスターに大ダメージを与える。", "Breaks rock. Or greatly damage a monster made by rocks.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_HAGAN);
+
+                       if (!cave_have_flag_bold(y, x, FF_HURT_ROCK)) break;
+
+                       /* Destroy the feature */
+                       cave_alter_feat(y, x, FF_HURT_ROCK);
+
+                       /* Update some things */
+                       p_ptr->update |= (PU_FLOW);
+               }
+               break;
+
+       case 13:
+               if (name) return _("乱れ雪月花", "Midare-Setsugekka");
+               if (desc) return _("攻撃回数が増え、冷気耐性のないモンスターに大ダメージを与える。",
+                       "Attacks a monster with increased number of attacks and more damage unless it has resistance to cold.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_COLD);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+               }
+               break;
+
+       case 14:
+               if (name) return _("急所突き", "Spot Aiming");
+               if (desc) return _("モンスターを一撃で倒す攻撃を繰り出す。失敗すると1点しかダメージを与えられない。",
+                       "Attempts to kill a monster instantly. If failed cause only 1HP of damage.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_KYUSHO);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+               }
+               break;
+
+       case 15:
+               if (name) return _("魔神斬り", "Majingiri");
+               if (desc) return _("会心の一撃で攻撃する。攻撃がかわされやすい。",
+                       "Attempts to attack with critical hit. But this attack is easy to evade for a monster.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_MAJIN);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+               }
+               break;
+
+       case 16:
+               if (name) return _("捨て身", "Desperate Attack");
+               if (desc) return _("強力な攻撃を繰り出す。次のターンまでの間、食らうダメージが増える。",
+                       "Attacks with all of your power. But all damages you take will be doubled for one turn.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_SUTEMI);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+                       p_ptr->sutemi = TRUE;
+               }
+               break;
+
+       case 17:
+               if (name) return _("雷撃鷲爪斬", "Lightning Eagle");
+               if (desc) return _("電撃耐性のないモンスターに非常に大きいダメージを与える。",
+                       "Attacks a monster with more damage unless it has resistance to electricity.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_ELEC);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+               }
+               break;
+
+       case 18:
+               if (name) return _("入身", "Rush Attack");
+               if (desc) return _("素早く相手に近寄り攻撃する。", "Steps close to a monster and attacks at a time.");
+
+               if (cast)
+               {
+                       if (!rush_attack(NULL)) return NULL;
+               }
+               break;
+
+       case 19:
+               if (name) return _("赤流渦", "Bloody Maelstrom");
+               if (desc) return _("自分自身も傷を作りつつ、その傷が深いほど大きい威力で全方向の敵を攻撃できる。生きていないモンスターには効果がない。",
+                       "Attacks all adjacent monsters with power corresponding to your cut status. Then increases your cut status. No effect to unliving monsters.");
+
+               if (cast)
+               {
+                       int y = 0, x = 0;
+
+                       cave_type       *c_ptr;
+                       monster_type    *m_ptr;
+
+                       if (p_ptr->cut < 300)
+                               set_cut(p_ptr->cut + 300);
+                       else
+                               set_cut(p_ptr->cut * 2);
+
+                       for (dir = 0; dir < 8; dir++)
+                       {
+                               y = p_ptr->y + ddy_ddd[dir];
+                               x = p_ptr->x + ddx_ddd[dir];
+                               c_ptr = &cave[y][x];
+
+                               /* Get the monster */
+                               m_ptr = &m_list[c_ptr->m_idx];
+
+                               /* Hack -- attack monsters */
+                               if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
+                               {
+                                       if (!monster_living(&r_info[m_ptr->r_idx]))
+                                       {
+                                               char m_name[80];
+
+                                               monster_desc(m_name, m_ptr, 0);
+                                               msg_format(_("%sには効果がない!", "%s is unharmed!"), m_name);
+                                       }
+                                       else py_attack(y, x, HISSATSU_SEKIRYUKA);
+                               }
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("激震撃", "Earthquake Blow");
+               if (desc) return _("地震を起こす。", "Shakes dungeon structure, and results in random swapping of floors and walls.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_QUAKE);
+                       else
+                               earthquake(p_ptr->y, p_ptr->x, 10);
+               }
+               break;
+
+       case 21:
+               if (name) return _("地走り", "Crack");
+               if (desc) return _("衝撃波のビームを放つ。", "Fires a beam of shock wave.");
+
+               if (cast)
+               {
+                       int total_damage = 0, basedam, i;
+                       u32b flgs[TR_FLAG_SIZE];
+                       object_type *o_ptr;
+                       if (!get_aim_dir(&dir)) return NULL;
+                       msg_print(_("武器を大きく振り下ろした。", "You swing your weapon downward."));
+                       for (i = 0; i < 2; i++)
+                       {
+                               int damage;
+
+                               if (!buki_motteruka(INVEN_RARM + i)) break;
+                               o_ptr = &inventory[INVEN_RARM + i];
+                               basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
+                               damage = o_ptr->to_d * 100;
+                               object_flags(o_ptr, flgs);
+                               if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
+                               {
+                                       /* vorpal blade */
+                                       basedam *= 5;
+                                       basedam /= 3;
+                               }
+                               else if (have_flag(flgs, TR_VORPAL))
+                               {
+                                       /* vorpal flag only */
+                                       basedam *= 11;
+                                       basedam /= 9;
+                               }
+                               damage += basedam;
+                               damage *= p_ptr->num_blow[i];
+                               total_damage += damage / 200;
+                               if (i) total_damage = total_damage * 7 / 10;
+                       }
+                       fire_beam(GF_FORCE, dir, total_damage);
+               }
+               break;
+
+       case 22:
+               if (name) return _("気迫の雄叫び", "War Cry");
+               if (desc) return _("視界内の全モンスターに対して轟音の攻撃を行う。さらに、近くにいるモンスターを怒らせる。",
+                       "Damages all monsters in sight with sound. Aggravate nearby monsters.");
+
+               if (cast)
+               {
+                       msg_print(_("雄叫びをあげた!", "You roar out!"));
+                       project_hack(GF_SOUND, randint1(plev * 3));
+                       aggravate_monsters(0);
+               }
+               break;
+
+       case 23:
+               if (name) return _("無双三段", "Musou-Sandan");
+               if (desc) return _("強力な3段攻撃を繰り出す。", "Attacks with powerful 3 strikes.");
+
+               if (cast)
+               {
+                       int i;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       for (i = 0; i < 3; i++)
+                       {
+                               POSITION y, x;
+                               POSITION ny, nx;
+                               MONSTER_IDX m_idx;
+                               cave_type *c_ptr;
+                               monster_type *m_ptr;
+
+                               y = p_ptr->y + ddy[dir];
+                               x = p_ptr->x + ddx[dir];
+                               c_ptr = &cave[y][x];
+
+                               if (c_ptr->m_idx)
+                                       py_attack(y, x, HISSATSU_3DAN);
+                               else
+                               {
+                                       msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                                       return NULL;
+                               }
+
+                               if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
+                               {
+                                       return "";
+                               }
+
+                               /* Monster is dead? */
+                               if (!c_ptr->m_idx) break;
+
+                               ny = y + ddy[dir];
+                               nx = x + ddx[dir];
+                               m_idx = c_ptr->m_idx;
+                               m_ptr = &m_list[m_idx];
+
+                               /* Monster cannot move back? */
+                               if (!monster_can_enter(ny, nx, &r_info[m_ptr->r_idx], 0))
+                               {
+                                       /* -more- */
+                                       if (i < 2) msg_print(NULL);
+                                       continue;
+                               }
+
+                               c_ptr->m_idx = 0;
+                               cave[ny][nx].m_idx = m_idx;
+                               m_ptr->fy = ny;
+                               m_ptr->fx = nx;
+
+                               update_mon(m_idx, TRUE);
+
+                               /* Redraw the old spot */
+                               lite_spot(y, x);
+
+                               /* Redraw the new spot */
+                               lite_spot(ny, nx);
+
+                               /* Player can move forward? */
+                               if (player_can_enter(c_ptr->feat, 0))
+                               {
+                                       /* 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);
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("吸血鬼の牙", "Vampire's Fang");
+               if (desc) return _("攻撃した相手の体力を吸いとり、自分の体力を回復させる。生命を持たないモンスターには通じない。",
+                       "Attacks with vampiric strikes which absorbs HP from a monster and gives them to you. No effect to unliving monsters.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_DRAIN);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+               }
+               break;
+
+       case 25:
+               if (name) return _("幻惑", "Moon Dazzling");
+               if (desc) return _("視界内の起きている全モンスターに朦朧、混乱、眠りを与えようとする。", "Attempts to stun, confuse and sleep all waking monsters.");
+
+               if (cast)
+               {
+                       msg_print(_("武器を不規則に揺らした...", "You irregularly wave your weapon..."));
+                       project_hack(GF_ENGETSU, plev * 4);
+                       project_hack(GF_ENGETSU, plev * 4);
+                       project_hack(GF_ENGETSU, plev * 4);
+               }
+               break;
+
+       case 26:
+               if (name) return _("百人斬り", "Hundred Slaughter");
+               if (desc) return _("連続して入身でモンスターを攻撃する。攻撃するたびにMPを消費。MPがなくなるか、モンスターを倒せなかったら百人斬りは終了する。",
+                       "Performs a series of rush attacks. The series continues while killing each monster in a time and SP remains.");
+
+               if (cast)
+               {
+                       const int mana_cost_per_monster = 8;
+                       bool is_new = TRUE;
+                       bool mdeath;
+
+                       do
+                       {
+                               if (!rush_attack(&mdeath)) break;
+                               if (is_new)
+                               {
+                                       /* Reserve needed mana point */
+                                       p_ptr->csp -= technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
+                                       is_new = FALSE;
+                               }
+                               else
+                                       p_ptr->csp -= mana_cost_per_monster;
+
+                               if (!mdeath) break;
+                               command_dir = 0;
+
+                               p_ptr->redraw |= PR_MANA;
+                               handle_stuff();
+                       } while (p_ptr->csp > mana_cost_per_monster);
+
+                       if (is_new) return NULL;
+
+                       /* Restore reserved mana */
+                       p_ptr->csp += technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
+               }
+               break;
+
+       case 27:
+               if (name) return _("天翔龍閃", "Dragonic Flash");
+               if (desc) return _("視界内の場所を指定して、その場所と自分の間にいる全モンスターを攻撃し、その場所に移動する。",
+                       "Runs toward given location while attacking all monsters on the path.");
+
+               if (cast)
+               {
+                       POSITION y, x;
+
+                       if (!tgt_pt(&x, &y)) return NULL;
+
+                       if (!cave_player_teleportable_bold(y, x, 0L) ||
+                               (distance(y, x, p_ptr->y, p_ptr->x) > MAX_SIGHT / 2) ||
+                               !projectable(p_ptr->y, p_ptr->x, y, x))
+                       {
+                               msg_print(_("失敗!", "You cannot move to that place!"));
+                               break;
+                       }
+                       if (p_ptr->anti_tele)
+                       {
+                               msg_print(_("不思議な力がテレポートを防いだ!", "A mysterious force prevents you from teleporting!"));
+                               break;
+                       }
+                       project(0, 0, y, x, HISSATSU_ISSEN, GF_ATTACK, PROJECT_BEAM | PROJECT_KILL, -1);
+                       teleport_player_to(y, x, 0L);
+               }
+               break;
+
+       case 28:
+               if (name) return _("二重の剣撃", "Twin Slash");
+               if (desc) return _("1ターンで2度攻撃を行う。", "double attacks at a time.");
+
+               if (cast)
+               {
+                       int x, y;
+
+                       if (!get_rep_dir(&dir, FALSE)) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                       {
+                               py_attack(y, x, 0);
+                               if (cave[y][x].m_idx)
+                               {
+                                       handle_stuff();
+                                       py_attack(y, x, 0);
+                               }
+                       }
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "You don't see any monster in this direction"));
+                               return NULL;
+                       }
+               }
+               break;
+
+       case 29:
+               if (name) return _("虎伏絶刀勢", "Kofuku-Zettousei");
+               if (desc) return _("強力な攻撃を行い、近くの場所にも効果が及ぶ。", "Performs a powerful attack which even effect nearby monsters.");
+
+               if (cast)
+               {
+                       int total_damage = 0, basedam, i;
+                       int y, x;
+                       u32b flgs[TR_FLAG_SIZE];
+                       object_type *o_ptr;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
+                       {
+                               msg_print(_("なぜか攻撃することができない。", "Something prevent you from attacking."));
+                               return "";
+                       }
+                       msg_print(_("武器を大きく振り下ろした。", "You swing your weapon downward."));
+                       for (i = 0; i < 2; i++)
+                       {
+                               int damage;
+                               if (!buki_motteruka(INVEN_RARM + i)) break;
+                               o_ptr = &inventory[INVEN_RARM + i];
+                               basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
+                               damage = o_ptr->to_d * 100;
+                               object_flags(o_ptr, flgs);
+                               if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
+                               {
+                                       /* vorpal blade */
+                                       basedam *= 5;
+                                       basedam /= 3;
+                               }
+                               else if (have_flag(flgs, TR_VORPAL))
+                               {
+                                       /* vorpal flag only */
+                                       basedam *= 11;
+                                       basedam /= 9;
+                               }
+                               damage += basedam;
+                               damage += p_ptr->to_d[i] * 100;
+                               damage *= p_ptr->num_blow[i];
+                               total_damage += (damage / 100);
+                       }
+                       project(0, (cave_have_flag_bold(y, x, FF_PROJECT) ? 5 : 0), y, x, total_damage * 3 / 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
+               }
+               break;
+
+       case 30:
+               if (name) return _("慶雲鬼忍剣", "Keiun-Kininken");
+               if (desc) return _("自分もダメージをくらうが、相手に非常に大きなダメージを与える。アンデッドには特に効果がある。",
+                       "Attacks a monster with extremely powerful damage. But you also takes some damages. Hurts a undead monster greatly.");
+
+               if (cast)
+               {
+                       int y, x;
+
+                       if (!get_rep_dir2(&dir)) return NULL;
+                       if (dir == 5) return NULL;
+
+                       y = p_ptr->y + ddy[dir];
+                       x = p_ptr->x + ddx[dir];
+
+                       if (cave[y][x].m_idx)
+                               py_attack(y, x, HISSATSU_UNDEAD);
+                       else
+                       {
+                               msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
+                               return NULL;
+                       }
+                       take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), _("慶雲鬼忍剣を使った衝撃", "exhaustion on using Keiun-Kininken"), -1);
+               }
+               break;
+
+       case 31:
+               if (name) return _("切腹", "Harakiri");
+               if (desc) return _("「武士道とは、死ぬことと見つけたり。」", "'Busido is found in death'");
+
+               if (cast)
+               {
+                       int i;
+                       if (!get_check(_("本当に自殺しますか?", "Do you really want to commit suicide? "))) return NULL;
+                       /* Special Verification for suicide */
+                       prt(_("確認のため '@' を押して下さい。", "Please verify SUICIDE by typing the '@' sign: "), 0, 0);
+
+                       flush();
+                       i = inkey();
+                       prt("", 0, 0);
+                       if (i != '@') return NULL;
+                       if (p_ptr->total_winner)
+                       {
+                               take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
+                               p_ptr->total_winner = TRUE;
+                       }
+                       else
+                       {
+                               msg_print(_("武士道とは、死ぬことと見つけたり。", "Meaning of Bushi-do is found in the death."));
+                               take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
+                       }
+               }
+               break;
+       }
+
+       return "";
+}
index 78cbfea..8e3f730 100644 (file)
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-\r
-/*!\r
-* @brief \90\96½\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \96\82\96@ID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
-* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
-*/\r
-cptr do_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 _("\8cy\8f\9d\82Ì\8e¡\96ü", "Cure Light Wounds");\r
-               if (desc) return _("\89ö\89ä\82Æ\91Ì\97Í\82ð\8f­\82µ\89ñ\95\9c\82³\82¹\82é\81B", "Heals cut and HP a little.");\r
-               {\r
-                       int dice = 2;\r
-                       int sides = 10;\r
-                       if (info) return info_heal(dice, sides, 0);\r
-                       if (cast) (void)cure_light_wounds(dice, sides);                 \r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("\8fj\95\9f", "Bless");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\96½\92\86\97¦\82ÆAC\82É\83{\81[\83i\83X\82ð\93¾\82é\81B", "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 _("\8cy\8f\9d", "Cause Light Wounds");\r
-               if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82É\8f¬\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\8cõ\82Ì\8f¢\8a«", "Call Light");\r
-               if (desc) return _("\8cõ\8c¹\82ª\8fÆ\82ç\82µ\82Ä\82¢\82é\94Í\88Í\82©\95\94\89®\91S\91Ì\82ð\89i\8bv\82É\96¾\82é\82­\82·\82é\81B", "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 _("ã© & \89B\82µ\94à\8a´\92m", "Detect Doors & Traps");\r
-               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ìã©\82Æ\94à\82Æ\8aK\92i\82ð\8a´\92m\82·\82é\81B", "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 _("\8fd\8f\9d\82Ì\8e¡\96ü", "Cure Medium Wounds");\r
-               if (desc) return _("\89ö\89ä\82Æ\91Ì\97Í\82ð\92\86\92ö\93x\89ñ\95\9c\82³\82¹\82é\81B", "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
-                       if (cast) (void)cure_serious_wounds(dice, sides);\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("\89ð\93Å", "Cure Poison");\r
-               if (desc) return _("\91Ì\93à\82Ì\93Å\82ð\8eæ\82è\8f\9c\82­\81B", "Cure poison status.");\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               set_poisoned(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("\8bó\95 \8f[\91«", "Satisfy Hunger");\r
-               if (desc) return _("\96\9e\95 \82É\82·\82é\81B", "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 _("\89ð\8eô", "Remove Curse");\r
-               if (desc) return _("\83A\83C\83e\83\80\82É\82©\82©\82Á\82½\8eã\82¢\8eô\82¢\82ð\89ð\8f\9c\82·\82é\81B", "Removes normal curses from equipped items.");\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (remove_curse())\r
-                               {\r
-                                       msg_print(_("\92N\82©\82É\8c©\8eç\82ç\82ê\82Ä\82¢\82é\82æ\82¤\82È\8bC\82ª\82·\82é\81B", "You feel as if someone is watching over you."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("\8fd\8f\9d", "Cause Medium Wounds");\r
-               if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82É\92\86\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\92v\96½\8f\9d\82Ì\8e¡\96ü", "Cure Critical Wounds");\r
-               if (desc) return _("\91Ì\97Í\82ð\91å\95\9d\82É\89ñ\95\9c\82³\82¹\81A\95\89\8f\9d\82Æ\9eN\9eO\8fó\91Ô\82à\91S\89õ\82·\82é\81B", "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
-                       if (cast) (void)cure_critical_wounds(damroll(dice, sides));\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("\91Ï\94M\91Ï\8a¦", "Resist Heat and Cold");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89Î\89\8a\82Æ\97â\8bC\82É\91Î\82·\82é\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to 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 _("\8eü\95Ó\8a´\92m", "Sense Surroundings");\r
-               if (desc) return _("\8eü\95Ó\82Ì\92n\8c`\82ð\8a´\92m\82·\82é\81B", "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 _("\83p\83j\83b\83N\81E\83A\83\93\83f\83b\83h", "Turn Undead");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\83A\83\93\83f\83b\83h\82ð\8b°\95|\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\91Ì\97Í\89ñ\95\9c", "Healing");\r
-               if (desc) return _("\8bÉ\82ß\82Ä\8b­\97Í\82È\89ñ\95\9c\8eô\95\82Å\81A\95\89\8f\9d\82Æ\9eN\9eO\8fó\91Ô\82à\91S\89õ\82·\82é\81B", "Much powerful healing magic, and heals cut and stun completely.");\r
-\r
-               {\r
-                       int heal = 300;\r
-                       if (info) return info_heal(0, 0, heal);\r
-                       if (cast) (void)cure_critical_wounds(heal);\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("\8c\8b\8aE\82Ì\96ä\8fÍ", "Glyph of Warding");\r
-               if (desc) return _("\8e©\95ª\82Ì\82¢\82é\8f°\82Ì\8fã\82É\81A\83\82\83\93\83X\83^\81[\82ª\92Ê\82è\94²\82¯\82½\82è\8f¢\8a«\82³\82ê\82½\82è\82·\82é\82±\82Æ\82ª\82Å\82«\82È\82­\82È\82é\83\8b\81[\83\93\82ð\95`\82­\81B",\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 _("*\89ð\8eô*", "Dispel Curse");\r
-               if (desc) return _("\83A\83C\83e\83\80\82É\82©\82©\82Á\82½\8b­\97Í\82È\8eô\82¢\82ð\89ð\8f\9c\82·\82é\81B", "Removes normal and heavy curse from equipped items.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (remove_all_curse())\r
-                               {\r
-                                       msg_print(_("\92N\82©\82É\8c©\8eç\82ç\82ê\82Ä\82¢\82é\82æ\82¤\82È\8bC\82ª\82·\82é\81B", "You feel as if someone is watching over you."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("\8aÓ\8e¯", "Perception");\r
-               if (desc) return _("\83A\83C\83e\83\80\82ð\8e¯\95Ê\82·\82é\81B", "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 _("\83A\83\93\83f\83b\83h\91Þ\8eU", "Dispel Undead");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83A\83\93\83f\83b\83h\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B", "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 _("\93â\82Ì\8d\8f", "Day of the Dove");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\92v\96½\8f\9d", "Cause Critical Wounds");\r
-               if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82É\91å\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\8bA\8aÒ\82Ì\8fÙ", "Word of Recall");\r
-               if (desc) return _("\92n\8fã\82É\82¢\82é\82Æ\82«\82Í\83_\83\93\83W\83\87\83\93\82Ì\8dÅ\90[\8aK\82Ö\81A\83_\83\93\83W\83\87\83\93\82É\82¢\82é\82Æ\82«\82Í\92n\8fã\82Ö\82Æ\88Ú\93®\82·\82é\81B", "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 _("\90^\8eÀ\82Ì\8dÕ\92d", "Alter Reality");\r
-               if (desc) return _("\8c»\8dÝ\82Ì\8aK\82ð\8dÄ\8d\\90¬\82·\82é\81B", "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 _("\90^\81E\8c\8b\8aE", "Warding True");\r
-               if (desc) return _("\8e©\95ª\82Ì\82¢\82é\8f°\82Æ\8eü\88Í8\83}\83X\82Ì\8f°\82Ì\8fã\82É\81A\83\82\83\93\83X\83^\81[\82ª\92Ê\82è\94²\82¯\82½\82è\8f¢\8a«\82³\82ê\82½\82è\82·\82é\82±\82Æ\82ª\82Å\82«\82È\82­\82È\82é\83\8b\81[\83\93\82ð\95`\82­\81B", "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 _("\95s\96Ñ\89»", "Sterilization");\r
-               if (desc) return _("\82±\82Ì\8aK\82Ì\91\9d\90B\82·\82é\83\82\83\93\83X\83^\81[\82ª\91\9d\90B\82Å\82«\82È\82­\82È\82é\81B", "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 _("\91S\8a´\92m", "Detection");\r
-               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\81Aã©\81A\94à\81A\8aK\92i\81A\8dà\95ó\81A\82»\82µ\82Ä\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B", "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 _("\83A\83\93\83f\83b\83h\8fÁ\96Å", "Annihilate Undead");\r
-               if (desc) return _("\8e©\95ª\82Ì\8eü\88Í\82É\82¢\82é\83A\83\93\83f\83b\83h\82ð\8c»\8dÝ\82Ì\8aK\82©\82ç\8fÁ\82µ\8b\8e\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B",\r
-                       "Eliminates all nearby 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 _("\90ç\97¢\8aá", "Clairvoyance");\r
-               if (desc) return _("\82»\82Ì\8aK\91S\91Ì\82ð\89i\8bv\82É\8fÆ\82ç\82µ\81A\83_\83\93\83W\83\87\83\93\93à\82·\82×\82Ä\82Ì\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B", "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 _("\91S\95\9c\8a\88", "Restoration");\r
-               if (desc) return _("\82·\82×\82Ä\82Ì\83X\83e\81[\83^\83X\82Æ\8co\8c±\92l\82ð\89ñ\95\9c\82·\82é\81B", "Restores all stats and experience.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               (void)restore_all_status();\r
-                               restore_level();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("*\91Ì\97Í\89ñ\95\9c*", "Healing True");\r
-               if (desc) return _("\8dÅ\8b­\82Ì\8e¡\96ü\82Ì\96\82\96@\82Å\81A\95\89\8f\9d\82Æ\9eN\9eO\8fó\91Ô\82à\91S\89õ\82·\82é\81B", "The greatest healing magic. Heals all HP, cut and stun.");\r
-\r
-               {\r
-                       int heal = 2000;\r
-                       if (info) return info_heal(0, 0, heal);\r
-                       if (cast) (void)cure_critical_wounds(heal);\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("\90¹\82È\82é\83r\83W\83\87\83\93", "Holy Vision");\r
-               if (desc) return _("\83A\83C\83e\83\80\82Ì\8e\9d\82Â\94\\97Í\82ð\8a®\91S\82É\92m\82é\81B", "*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 _("\8b\86\8bÉ\82Ì\91Ï\90«", "Ultimate Resistance");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\82 \82ç\82ä\82é\91Ï\90«\82ð\95t\82¯\81AAC\82Æ\96\82\96@\96h\8cä\94\\97Í\82ð\8fã\8f¸\82³\82¹\82é\81B", "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
+#include "angband.h"
+#include "cmd-spell.h"
+
+/*!
+* @brief 生命領域魔法の各処理を行う
+* @param spell 魔法ID
+* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+*/
+cptr do_life_spell(SPELL_IDX spell, BIT_FLAGS 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;
+
+       int dir;
+       int plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("軽傷の治癒", "Cure Light Wounds");
+               if (desc) return _("怪我と体力を少し回復させる。", "Heals cut and HP a little.");
+               {
+                       int dice = 2;
+                       int sides = 10;
+                       if (info) return info_heal(dice, sides, 0);
+                       if (cast) (void)cure_light_wounds(dice, sides);                 
+               }
+               break;
+
+       case 1:
+               if (name) return _("祝福", "Bless");
+               if (desc) return _("一定時間、命中率とACにボーナスを得る。", "Gives bonus to hit and AC for a few turns.");
+               {
+                       int base = 12;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_blessed(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 2:
+               if (name) return _("軽傷", "Cause Light Wounds");
+               if (desc) return _("1体のモンスターに小ダメージを与える。抵抗されると無効。", "Wounds a monster a little unless resisted.");
+               {
+                       int dice = 3 + (plev - 1) / 5;
+                       int sides = 4;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+                               fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
+                       }
+               }
+               break;
+
+       case 3:
+               if (name) return _("光の召喚", "Call Light");
+               if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
+               {
+                       int dice = 2;
+                       int sides = plev / 2;
+                       int rad = plev / 10 + 1;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               lite_area(damroll(dice, sides), rad);
+                       }
+               }
+               break;
+
+       case 4:
+               if (name) return _("罠 & 隠し扉感知", "Detect Doors & Traps");
+               if (desc) return _("近くの全ての罠と扉と階段を感知する。", "Detects traps, doors, and stairs in your vicinity.");
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_traps(rad, TRUE);
+                               detect_doors(rad);
+                               detect_stairs(rad);
+                       }
+               }
+               break;
+
+       case 5:
+               if (name) return _("重傷の治癒", "Cure Medium Wounds");
+               if (desc) return _("怪我と体力を中程度回復させる。", "Heals cut and HP more.");
+               {
+                       int dice = 4;
+                       int sides = 10;
+
+                       if (info) return info_heal(dice, sides, 0);
+                       if (cast) (void)cure_serious_wounds(dice, sides);
+               }
+               break;
+
+       case 6:
+               if (name) return _("解毒", "Cure Poison");
+               if (desc) return _("体内の毒を取り除く。", "Cure poison status.");
+               {
+                       if (cast)
+                       {
+                               set_poisoned(0);
+                       }
+               }
+               break;
+
+       case 7:
+               if (name) return _("空腹充足", "Satisfy Hunger");
+               if (desc) return _("満腹にする。", "Satisfies hunger.");
+               {
+                       if (cast)
+                       {
+                               set_food(PY_FOOD_MAX - 1);
+                       }
+               }
+               break;
+
+       case 8:
+               if (name) return _("解呪", "Remove Curse");
+               if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");
+               {
+                       if (cast)
+                       {
+                               if (remove_curse())
+                               {
+                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
+                               }
+                       }
+               }
+               break;
+
+       case 9:
+               if (name) return _("重傷", "Cause Medium Wounds");
+               if (desc) return _("1体のモンスターに中ダメージを与える。抵抗されると無効。", "Wounds a monster unless resisted.");
+               {
+                       int sides = 8 + (plev - 5) / 4;
+                       int dice = 8;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+                               fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
+                       }
+               }
+               break;
+
+       case 10:
+               if (name) return _("致命傷の治癒", "Cure Critical Wounds");
+               if (desc) return _("体力を大幅に回復させ、負傷と朦朧状態も全快する。", "Heals cut, stun and HP greatly.");
+               {
+                       int dice = 8;
+                       int sides = 10;
+
+                       if (info) return info_heal(dice, sides, 0);
+                       if (cast) (void)cure_critical_wounds(damroll(dice, sides));
+               }
+               break;
+
+       case 11:
+               if (name) return _("耐熱耐寒", "Resist Heat and Cold");
+               if (desc) return _("一定時間、火炎と冷気に対する耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to fire and cold. These resistances can be added to which from equipment for more powerful resistances.");
+
+               {
+                       int base = 20;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_oppose_cold(randint1(base) + base, FALSE);
+                               set_oppose_fire(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 12:
+               if (name) return _("周辺感知", "Sense Surroundings");
+               if (desc) return _("周辺の地形を感知する。", "Maps nearby area.");
+
+               {
+                       int rad = DETECT_RAD_MAP;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               map_area(rad);
+                       }
+               }
+               break;
+
+       case 13:
+               if (name) return _("パニック・アンデッド", "Turn Undead");
+               if (desc) return _("視界内のアンデッドを恐怖させる。抵抗されると無効。", "Attempts to scare undead monsters in sight.");
+
+               {
+                       if (cast)
+                       {
+                               turn_undead();
+                       }
+               }
+               break;
+
+       case 14:
+               if (name) return _("体力回復", "Healing");
+               if (desc) return _("極めて強力な回復呪文で、負傷と朦朧状態も全快する。", "Much powerful healing magic, and heals cut and stun completely.");
+
+               {
+                       int heal = 300;
+                       if (info) return info_heal(0, 0, heal);
+                       if (cast) (void)cure_critical_wounds(heal);
+               }
+               break;
+
+       case 15:
+               if (name) return _("結界の紋章", "Glyph of Warding");
+               if (desc) return _("自分のいる床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。",
+                       "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph.");
+
+               {
+                       if (cast)
+                       {
+                               warding_glyph();
+                       }
+               }
+               break;
+
+       case 16:
+               if (name) return _("*解呪*", "Dispel Curse");
+               if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");
+
+               {
+                       if (cast)
+                       {
+                               if (remove_all_curse())
+                               {
+                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
+                               }
+                       }
+               }
+               break;
+
+       case 17:
+               if (name) return _("鑑識", "Perception");
+               if (desc) return _("アイテムを識別する。", "Identifies an item.");
+
+               {
+                       if (cast)
+                       {
+                               if (!ident_spell(FALSE)) return NULL;
+                       }
+               }
+               break;
+
+       case 18:
+               if (name) return _("アンデッド退散", "Dispel Undead");
+               if (desc) return _("視界内の全てのアンデッドにダメージを与える。", "Damages all undead monsters in sight.");
+
+               {
+                       int dice = 1;
+                       int sides = plev * 5;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               dispel_undead(damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 19:
+               if (name) return _("凪の刻", "Day of the Dove");
+               if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");
+
+               {
+                       int power = plev * 2;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               charm_monsters(power);
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("致命傷", "Cause Critical Wounds");
+               if (desc) return _("1体のモンスターに大ダメージを与える。抵抗されると無効。", "Wounds a monster critically unless resisted.");
+
+               {
+                       int dice = 5 + (plev - 5) / 3;
+                       int sides = 15;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+                               fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
+                       }
+               }
+               break;
+
+       case 21:
+               if (name) return _("帰還の詔", "Word of Recall");
+               if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。", "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
+
+               {
+                       int base = 15;
+                       int sides = 20;
+
+                       if (info) return info_delay(base, sides);
+
+                       if (cast)
+                       {
+                               if (!word_of_recall()) return NULL;
+                       }
+               }
+               break;
+
+       case 22:
+               if (name) return _("真実の祭壇", "Alter Reality");
+               if (desc) return _("現在の階を再構成する。", "Recreates current dungeon level.");
+
+               {
+                       int base = 15;
+                       int sides = 20;
+
+                       if (info) return info_delay(base, sides);
+
+                       if (cast)
+                       {
+                               alter_reality();
+                       }
+               }
+               break;
+
+       case 23:
+               if (name) return _("真・結界", "Warding True");
+               if (desc) return _("自分のいる床と周囲8マスの床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。", "Creates glyphs in all adjacent squares and under you.");
+
+               {
+                       int rad = 1;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               warding_glyph();
+                               glyph_creation();
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("不毛化", "Sterilization");
+               if (desc) return _("この階の増殖するモンスターが増殖できなくなる。", "Prevents any breeders on current level from breeding.");
+
+               {
+                       if (cast)
+                       {
+                               num_repro += MAX_REPRO;
+                       }
+               }
+               break;
+
+       case 25:
+               if (name) return _("全感知", "Detection");
+               if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。", "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_all(rad);
+                       }
+               }
+               break;
+
+       case 26:
+               if (name) return _("アンデッド消滅", "Annihilate Undead");
+               if (desc) return _("自分の周囲にいるアンデッドを現在の階から消し去る。抵抗されると無効。",
+                       "Eliminates all nearby undead monsters, exhausting you.  Powerful or unique monsters may be able to resist.");
+
+               {
+                       int power = plev + 50;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               mass_genocide_undead(power, TRUE);
+                       }
+               }
+               break;
+
+       case 27:
+               if (name) return _("千里眼", "Clairvoyance");
+               if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。", "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");
+
+               {
+                       if (cast)
+                       {
+                               wiz_lite(FALSE);
+                       }
+               }
+               break;
+
+       case 28:
+               if (name) return _("全復活", "Restoration");
+               if (desc) return _("すべてのステータスと経験値を回復する。", "Restores all stats and experience.");
+
+               {
+                       if (cast)
+                       {
+                               (void)restore_all_status();
+                               restore_level();
+                       }
+               }
+               break;
+
+       case 29:
+               if (name) return _("*体力回復*", "Healing True");
+               if (desc) return _("最強の治癒の魔法で、負傷と朦朧状態も全快する。", "The greatest healing magic. Heals all HP, cut and stun.");
+
+               {
+                       int heal = 2000;
+                       if (info) return info_heal(0, 0, heal);
+                       if (cast) (void)cure_critical_wounds(heal);
+               }
+               break;
+
+       case 30:
+               if (name) return _("聖なるビジョン", "Holy Vision");
+               if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
+
+               {
+                       if (cast)
+                       {
+                               if (!identify_fully(FALSE)) return NULL;
+                       }
+               }
+               break;
+
+       case 31:
+               if (name) return _("究極の耐性", "Ultimate Resistance");
+               if (desc) return _("一定時間、あらゆる耐性を付け、ACと魔法防御能力を上昇させる。", "Gives ultimate resistance, bonus to AC and speed.");
+
+               {
+                       TIME_EFFECT base = (TIME_EFFECT)plev / 2;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               TIME_EFFECT v = randint1(base) + base;
+                               set_fast(v, FALSE);
+                               set_oppose_acid(v, FALSE);
+                               set_oppose_elec(v, FALSE);
+                               set_oppose_fire(v, FALSE);
+                               set_oppose_cold(v, FALSE);
+                               set_oppose_pois(v, FALSE);
+                               set_ultimate_res(v, FALSE);
+                       }
+               }
+               break;
+       }
+
+       return "";
+}
index 29c4e69..204e7fc 100644 (file)
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-\r
-/*!\r
-* @brief \89Ì\82Ì\8aJ\8en\82ð\8f\88\97\9d\82·\82é / Start singing if the player is a Bard\r
-* @param spell \97Ì\88æ\96\82\96@\82Æ\82µ\82Ä\82ÌID\r
-* @param song \96\82\96@\8cø\89Ê\82ÌID\r
-* @return \82È\82µ\r
-*/\r
-static void start_singing(SPELL_IDX spell, MAGIC_NUM1 song)\r
-{\r
-       /* Remember the song index */\r
-       SINGING_SONG_EFFECT(p_ptr) = (MAGIC_NUM1)song;\r
-\r
-       /* Remember the index of the spell which activated the song */\r
-       SINGING_SONG_ID(p_ptr) = (MAGIC_NUM2)spell;\r
-\r
-\r
-       /* Now the player is singing */\r
-       set_action(ACTION_SING);\r
-\r
-\r
-       /* Recalculate bonuses */\r
-       p_ptr->update |= (PU_BONUS);\r
-\r
-       /* Redraw status bar */\r
-       p_ptr->redraw |= (PR_STATUS);\r
-}\r
-\r
-/*!\r
-* @brief \89Ì\82Ì\92â\8e~\82ð\8f\88\97\9d\82·\82é / Stop singing if the player is a Bard\r
-* @return \82È\82µ\r
-*/\r
-void stop_singing(void)\r
-{\r
-       if (p_ptr->pclass != CLASS_BARD) return;\r
-\r
-       /* Are there interupted song? */\r
-       if (INTERUPTING_SONG_EFFECT(p_ptr))\r
-       {\r
-               /* Forget interupted song */\r
-               INTERUPTING_SONG_EFFECT(p_ptr) = MUSIC_NONE;\r
-               return;\r
-       }\r
-\r
-       /* The player is singing? */\r
-       if (!SINGING_SONG_EFFECT(p_ptr)) return;\r
-\r
-       /* Hack -- if called from set_action(), avoid recursive loop */\r
-       if (p_ptr->action == ACTION_SING) set_action(ACTION_NONE);\r
-\r
-       /* Message text of each song or etc. */\r
-       do_spell(REALM_MUSIC, SINGING_SONG_ID(p_ptr), SPELL_STOP);\r
-\r
-       SINGING_SONG_EFFECT(p_ptr) = MUSIC_NONE;\r
-       SINGING_SONG_ID(p_ptr) = 0;\r
-\r
-       /* Recalculate bonuses */\r
-       p_ptr->update |= (PU_BONUS);\r
-\r
-       /* Redraw status bar */\r
-       p_ptr->redraw |= (PR_STATUS);\r
-}\r
-\r
-/*!\r
-* @brief \89Ì\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \89ÌID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP)\r
-* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP \8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
-*/\r
-cptr do_music_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
-       bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;\r
-       bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;\r
-       static const char s_dam[] = _("\91¹\8f\9d:", "dam ");\r
-\r
-       int dir;\r
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("\92x\93Ý\82Ì\89Ì", "Song of Holding");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\8c¸\91¬\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to slow all monsters in sight.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\82ä\82Á\82­\82è\82Æ\82µ\82½\83\81\83\8d\83f\83B\82ð\8cû\82¸\82³\82Ý\8en\82ß\82½\81D\81D\81D", "You start humming a slow, steady melody..."));\r
-                       start_singing(spell, MUSIC_SLOW);\r
-               }\r
-\r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cont)\r
-                       {\r
-                               slow_monsters(plev);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 1:\r
-               if (name) return _("\8fj\95\9f\82Ì\89Ì", "Song of Blessing");\r
-               if (desc) return _("\96½\92\86\97¦\82ÆAC\82Ì\83{\81[\83i\83X\82ð\93¾\82é\81B", "Gives bonus to hit and AC for a few turns.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\8cµ\82©\82È\83\81\83\8d\83f\83B\82ð\91t\82Å\8en\82ß\82½\81D\81D\81D", "The holy power of the Music of the Ainur enters you..."));\r
-                       start_singing(spell, MUSIC_BLESS);\r
-               }\r
-\r
-               if (stop)\r
-               {\r
-                       if (!p_ptr->blessed)\r
-                       {\r
-                               msg_print(_("\8d\82\8c\89\82È\8bC\95ª\82ª\8fÁ\82¦\8e¸\82¹\82½\81B", "The prayer has expired."));\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("\95ö\89ó\82Ì\89¹\90F", "Wrecking Note");\r
-               if (desc) return _("\8d\8c\89¹\82Ì\83{\83\8b\83g\82ð\95ú\82Â\81B", "Fires a bolt of sound.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               {\r
-                       int dice = 4 + (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(GF_SOUND, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 3:\r
-               if (name) return _("\9eN\9eO\82Ì\90ù\97¥", "Stun Pattern");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\9eN\9eO\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to stun all monsters in sight.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("á¿\98f\82³\82¹\82é\83\81\83\8d\83f\83B\82ð\91t\82Å\8en\82ß\82½\81D\81D\81D", "You weave a pattern of sounds to bewilder and daze..."));\r
-                       start_singing(spell, MUSIC_STUN);\r
-               }\r
-\r
-               {\r
-                       int dice = plev / 10;\r
-                       int sides = 2;\r
-\r
-                       if (info) return info_power_dice(dice, sides);\r
-\r
-                       if (cont)\r
-                       {\r
-                               stun_monsters(damroll(dice, sides));\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 4:\r
-               if (name) return _("\90\96½\82Ì\97¬\82ê", "Flow of Life");\r
-               if (desc) return _("\91Ì\97Í\82ð\8f­\82µ\89ñ\95\9c\82³\82¹\82é\81B", "Heals HP a little.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\89Ì\82ð\92Ê\82µ\82Ä\91Ì\82É\8a\88\8bC\82ª\96ß\82Á\82Ä\82«\82½\81D\81D\81D", "Life flows through you as you sing a song of healing..."));\r
-                       start_singing(spell, MUSIC_L_LIFE);\r
-               }\r
-\r
-               {\r
-                       int dice = 2;\r
-                       int sides = 6;\r
-\r
-                       if (info) return info_heal(dice, sides, 0);\r
-\r
-                       if (cont)\r
-                       {\r
-                               hp_player(damroll(dice, sides));\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 5:\r
-               if (name) return _("\91¾\97z\82Ì\89Ì", "Song of the Sun");\r
-               if (desc) return _("\8cõ\8c¹\82ª\8fÆ\82ç\82µ\82Ä\82¢\82é\94Í\88Í\82©\95\94\89®\91S\91Ì\82ð\89i\8bv\82É\96¾\82é\82­\82·\82é\81B", "Lights up nearby area and the inside of a room permanently.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\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
-                               msg_print(_("\8cõ\82è\8bP\82­\89Ì\82ª\95Ó\82è\82ð\8fÆ\82ç\82µ\82½\81B", "Your uplifting song brings brightness to dark places..."));\r
-                               lite_area(damroll(dice, sides), rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 6:\r
-               if (name) return _("\8b°\95|\82Ì\89Ì", "Song of Fear");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\8b°\95|\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to scare all monsters in sight.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\82¨\82Ç\82ë\82¨\82Ç\82ë\82µ\82¢\83\81\83\8d\83f\83B\82ð\91t\82Å\8en\82ß\82½\81D\81D\81D", "You start weaving a fearful pattern..."));\r
-                       start_singing(spell, MUSIC_FEAR);\r
-               }\r
-\r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cont)\r
-                       {\r
-                               project_hack(GF_TURN_ALL, power);\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("\90í\82¢\82Ì\89Ì", "Heroic Ballad");\r
-               if (desc) return _("\83q\81[\83\8d\81[\8bC\95ª\82É\82È\82é\81B", "Removes fear, and gives bonus to hit and 10 more HP for a while.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\8c\83\82µ\82¢\90í\82¢\82Ì\89Ì\82ð\89Ì\82Á\82½\81D\81D\81D", "You start singing a song of intense fighting..."));\r
-\r
-                       (void)hp_player(10);\r
-                       (void)set_afraid(0);\r
-\r
-                       /* Recalculate hitpoints */\r
-                       p_ptr->update |= (PU_HP);\r
-\r
-                       start_singing(spell, MUSIC_HERO);\r
-               }\r
-\r
-               if (stop)\r
-               {\r
-                       if (!p_ptr->hero)\r
-                       {\r
-                               msg_print(_("\83q\81[\83\8d\81[\82Ì\8bC\95ª\82ª\8fÁ\82¦\8e¸\82¹\82½\81B", "The heroism wears off."));\r
-                               /* Recalculate hitpoints */\r
-                               p_ptr->update |= (PU_HP);\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("\97ì\93I\92m\8ao", "Clairaudience");\r
-               if (desc) return _("\8bß\82­\82Ìã©/\94à/\8aK\92i\82ð\8a´\92m\82·\82é\81B\83\8c\83x\83\8b15\82Å\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\81A20\82Å\8dà\95ó\82Æ\83A\83C\83e\83\80\82ð\8a´\92m\82Å\82«\82é\82æ\82¤\82É\82È\82é\81B\83\8c\83x\83\8b25\82Å\8eü\95Ó\82Ì\92n\8c`\82ð\8a´\92m\82µ\81A40\82Å\82»\82Ì\8aK\91S\91Ì\82ð\89i\8bv\82É\8fÆ\82ç\82µ\81A\83_\83\93\83W\83\87\83\93\93à\82Ì\82·\82×\82Ä\82Ì\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B\82±\82Ì\8cø\89Ê\82Í\89Ì\82¢\91±\82¯\82é\82±\82Æ\82Å\8f\87\82É\8bN\82±\82é\81B",\r
-                       "Detects traps, doors and stairs in your vicinity. And detects all monsters at level 15, treasures and items at level 20. Maps nearby area at level 25. Lights and know the whole level at level 40. These effects occurs by turns while this song continues.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\90Ã\82©\82È\89¹\8ay\82ª\8a´\8ao\82ð\8c¤\82¬\90\9f\82Ü\82³\82¹\82½\81D\81D\81D", "Your quiet music sharpens your sense of hearing..."));\r
-                       /* Hack -- Initialize the turn count */\r
-                       SINGING_COUNT(p_ptr) = 0;\r
-                       start_singing(spell, MUSIC_DETECT);\r
-               }\r
-\r
-               {\r
-                       int rad = DETECT_RAD_DEFAULT;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cont)\r
-                       {\r
-                               int count = SINGING_COUNT(p_ptr);\r
-\r
-                               if (count >= 19) wiz_lite(FALSE);\r
-                               if (count >= 11)\r
-                               {\r
-                                       map_area(rad);\r
-                                       if (plev > 39 && count < 19)\r
-                                               SINGING_COUNT(p_ptr) = count + 1;\r
-                               }\r
-                               if (count >= 6)\r
-                               {\r
-                                       /* There are too many hidden treasure.  So... */\r
-                                       /* detect_treasure(rad); */\r
-                                       detect_objects_gold(rad);\r
-                                       detect_objects_normal(rad);\r
-\r
-                                       if (plev > 24 && count < 11)\r
-                                               SINGING_COUNT(p_ptr) = count + 1;\r
-                               }\r
-                               if (count >= 3)\r
-                               {\r
-                                       detect_monsters_invis(rad);\r
-                                       detect_monsters_normal(rad);\r
-\r
-                                       if (plev > 19 && count < 6)\r
-                                               SINGING_COUNT(p_ptr) = count + 1;\r
-                               }\r
-                               detect_traps(rad, TRUE);\r
-                               detect_doors(rad);\r
-                               detect_stairs(rad);\r
-\r
-                               if (plev > 14 && count < 3)\r
-                                       SINGING_COUNT(p_ptr) = count + 1;\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 9:\r
-               if (name) return _("\8d°\82Ì\89Ì", "Soul Shriek");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82É\91Î\82µ\82Ä\90¸\90_\8dU\8c\82\82ð\8ds\82¤\81B", "Damages all monsters in sight with PSI damages.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\90¸\90_\82ð\94P\82\8bÈ\82°\82é\89Ì\82ð\89Ì\82Á\82½\81D\81D\81D", "You start singing a song of soul in pain..."));\r
-                       start_singing(spell, MUSIC_PSI);\r
-               }\r
-\r
-               {\r
-                       int dice = 1;\r
-                       int sides = plev * 3 / 2;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cont)\r
-                       {\r
-                               project_hack(GF_PSI, damroll(dice, sides));\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("\92m\8e¯\82Ì\89Ì", "Song of Lore");\r
-               if (desc) return _("\8e©\95ª\82Ì\82¢\82é\83}\83X\82Æ\97×\82è\82Ì\83}\83X\82É\97\8e\82¿\82Ä\82¢\82é\83A\83C\83e\83\80\82ð\8aÓ\92è\82·\82é\81B", "Identifies all items which are in the adjacent squares.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\82±\82Ì\90¢\8aE\82Ì\92m\8e¯\82ª\97¬\82ê\8d\9e\82ñ\82Å\82«\82½\81D\81D\81D", "You recall the rich lore of the world..."));\r
-                       start_singing(spell, MUSIC_ID);\r
-               }\r
-\r
-               {\r
-                       int rad = 1;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       /*\r
-                       * \89Ì\82Ì\8aJ\8en\8e\9e\82É\82à\8cø\89Ê\94­\93®\81F\r
-                       * MP\95s\91«\82Å\8aÓ\92è\82ª\94­\93®\82³\82ê\82é\91O\82É\89Ì\82ª\92\86\92f\82µ\82Ä\82µ\82Ü\82¤\82Ì\82ð\96h\8e~\81B\r
-                       */\r
-                       if (cont || cast)\r
-                       {\r
-                               project(0, rad, p_ptr->y, p_ptr->x, 0, GF_IDENTIFY, PROJECT_ITEM, -1);\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("\89B\93Ù\82Ì\89Ì", "Hiding Tune");\r
-               if (desc) return _("\89B\96§\8ds\93®\94\\97Í\82ð\8fã\8f¸\82³\82¹\82é\81B", "Gives improved stealth.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\82 \82È\82½\82Ì\8ep\82ª\8ci\90F\82É\82Æ\82¯\82±\82ñ\82Å\82¢\82Á\82½\81D\81D\81D", "Your song carries you beyond the sight of mortal eyes..."));\r
-                       start_singing(spell, MUSIC_STEALTH);\r
-               }\r
-\r
-               if (stop)\r
-               {\r
-                       if (!p_ptr->tim_stealth)\r
-                       {\r
-                               msg_print(_("\8ep\82ª\82Í\82Á\82«\82è\82Æ\8c©\82¦\82é\82æ\82¤\82É\82È\82Á\82½\81B", "You are no longer hided."));\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 12:\r
-               if (name) return _("\8c\89e\82Ì\90ù\97¥", "Illusion Pattern");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\8d¬\97\90\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to confuse all monsters in sight.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\95Ó\82è\88ê\96Ê\82É\8c\89e\82ª\8c»\82ê\82½\81D\81D\81D", "You weave a pattern of sounds to beguile and confuse..."));\r
-                       start_singing(spell, MUSIC_CONF);\r
-               }\r
-\r
-               {\r
-                       int power = plev * 2;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cont)\r
-                       {\r
-                               confuse_monsters(power);\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("\94j\96Å\82Ì\8b©\82Ñ", "Doomcall");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82É\91Î\82µ\82Ä\8d\8c\89¹\8dU\8c\82\82ð\8ds\82¤\81B", "Damages all monsters in sight with booming sound.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\8d\8c\89¹\82ª\8b¿\82¢\82½\81D\81D\81D", "The fury of the Downfall of Numenor lashes out..."));\r
-                       start_singing(spell, MUSIC_SOUND);\r
-               }\r
-\r
-               {\r
-                       int dice = 10 + plev / 5;\r
-                       int sides = 7;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cont)\r
-                       {\r
-                               project_hack(GF_SOUND, damroll(dice, sides));\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 14:\r
-               if (name) return _("\83t\83B\83\8a\83G\83\8b\82Ì\89Ì", "Firiel's Song");\r
-               if (desc) return _("\8eü\88Í\82Ì\8e\80\91Ì\82â\8d\9c\82ð\90\82«\95Ô\82·\81B", "Resurrects nearby corpse and skeletons. And makes these your pets.");\r
-\r
-               {\r
-                       /* Stop singing before start another */\r
-                       if (cast || fail) stop_singing();\r
-\r
-                       if (cast)\r
-                       {\r
-                               msg_print(_("\90\96½\82Æ\95\9c\8a\88\82Ì\83e\81[\83}\82ð\91t\82Å\8en\82ß\82½\81D\81D\81D", "The themes of life and revival are woven into your song..."));\r
-                               animate_dead(0, p_ptr->y, p_ptr->x);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 15:\r
-               if (name) return _("\97·\82Ì\92\87\8aÔ", "Fellowship Chant");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to charm all monsters in sight.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\88À\82ç\82©\82È\83\81\83\8d\83f\83B\82ð\91t\82Å\8en\82ß\82½\81D\81D\81D", "You weave a slow, soothing melody of imploration..."));\r
-                       start_singing(spell, MUSIC_CHARM);\r
-               }\r
-\r
-               {\r
-                       int dice = 10 + plev / 15;\r
-                       int sides = 6;\r
-\r
-                       if (info) return info_power_dice(dice, sides);\r
-\r
-                       if (cont)\r
-                       {\r
-                               charm_monsters(damroll(dice, sides));\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 16:\r
-               if (name) return _("\95ª\89ð\89¹\94g", "Sound of disintegration");\r
-               if (desc) return _("\95Ç\82ð\8c@\82è\90i\82Þ\81B\8e©\95ª\82Ì\91«\8c³\82Ì\83A\83C\83e\83\80\82Í\8fö\94­\82·\82é\81B", "Makes you be able to burrow into walls. Objects under your feet evaporate.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\95²\8dÓ\82·\82é\83\81\83\8d\83f\83B\82ð\91t\82Å\8en\82ß\82½\81D\81D\81D", "You weave a violent pattern of sounds to break wall."));\r
-                       start_singing(spell, MUSIC_WALL);\r
-               }\r
-\r
-               {\r
-                       /*\r
-                       * \89Ì\82Ì\8aJ\8en\8e\9e\82É\82à\8cø\89Ê\94­\93®\81F\r
-                       * MP\95s\91«\82Å\8cø\89Ê\82ª\94­\93®\82³\82ê\82é\91O\82É\89Ì\82ª\92\86\92f\82µ\82Ä\82µ\82Ü\82¤\82Ì\82ð\96h\8e~\81B\r
-                       */\r
-                       if (cont || cast)\r
-                       {\r
-                               project(0, 0, p_ptr->y, p_ptr->x,\r
-                                       0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 17:\r
-               if (name) return _("\8c³\91f\91Ï\90«", "Finrod's Resistance");\r
-               if (desc) return _("\8e_\81A\93d\8c\82\81A\89\8a\81A\97â\8bC\81A\93Å\82É\91Î\82·\82é\91Ï\90«\82ð\93¾\82é\81B\91\95\94õ\82É\82æ\82é\91Ï\90«\82É\97Ý\90Ï\82·\82é\81B",\r
-                       "Gives resistance to fire, cold, electricity, acid and poison. These resistances can be added to which from equipment for more powerful resistances.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\8c³\91f\82Ì\97Í\82É\91Î\82·\82é\94E\91Ï\82Ì\89Ì\82ð\89Ì\82Á\82½\81B", "You sing a song of perseverance against powers..."));\r
-                       start_singing(spell, MUSIC_RESIST);\r
-               }\r
-\r
-               if (stop)\r
-               {\r
-                       if (!p_ptr->oppose_acid)\r
-                       {\r
-                               msg_print(_("\8e_\82Ö\82Ì\91Ï\90«\82ª\94\96\82ê\82½\8bC\82ª\82·\82é\81B", "You feel less resistant to acid."));\r
-                       }\r
-\r
-                       if (!p_ptr->oppose_elec)\r
-                       {\r
-                               msg_print(_("\93d\8c\82\82Ö\82Ì\91Ï\90«\82ª\94\96\82ê\82½\8bC\82ª\82·\82é\81B", "You feel less resistant to elec."));\r
-                       }\r
-\r
-                       if (!p_ptr->oppose_fire)\r
-                       {\r
-                               msg_print(_("\89Î\82Ö\82Ì\91Ï\90«\82ª\94\96\82ê\82½\8bC\82ª\82·\82é\81B", "You feel less resistant to fire."));\r
-                       }\r
-\r
-                       if (!p_ptr->oppose_cold)\r
-                       {\r
-                               msg_print(_("\97â\8bC\82Ö\82Ì\91Ï\90«\82ª\94\96\82ê\82½\8bC\82ª\82·\82é\81B", "You feel less resistant to cold."));\r
-                       }\r
-\r
-                       if (!p_ptr->oppose_pois)\r
-                       {\r
-                               msg_print(_("\93Å\82Ö\82Ì\91Ï\90«\82ª\94\96\82ê\82½\8bC\82ª\82·\82é\81B", "You feel less resistant to pois."));\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("\83z\83r\83b\83g\82Ì\83\81\83\8d\83f\83B", "Hobbit Melodies");\r
-               if (desc) return _("\89Á\91¬\82·\82é\81B", "Hastes you.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\8cy\89õ\82È\89Ì\82ð\8cû\82¸\82³\82Ý\8en\82ß\82½\81D\81D\81D", "You start singing joyful pop song..."));\r
-                       start_singing(spell, MUSIC_SPEED);\r
-               }\r
-\r
-               if (stop)\r
-               {\r
-                       if (!p_ptr->fast)\r
-                       {\r
-                               msg_print(_("\93®\82«\82Ì\91f\91\81\82³\82ª\82È\82­\82È\82Á\82½\82æ\82¤\82¾\81B", "You feel yourself slow down."));\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("\98c\82ñ\82¾\90¢\8aE", "World Contortion");\r
-               if (desc) return _("\8bß\82­\82Ì\83\82\83\93\83X\83^\81[\82ð\83e\83\8c\83|\81[\83g\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Teleports all nearby monsters away unless resisted.");\r
-\r
-               {\r
-                       int rad = plev / 15 + 1;\r
-                       int power = plev * 3 + 1;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       /* Stop singing before start another */\r
-                       if (cast || fail) stop_singing();\r
-\r
-                       if (cast)\r
-                       {\r
-                               msg_print(_("\89Ì\82ª\8bó\8aÔ\82ð\98c\82ß\82½\81D\81D\81D", "Reality whirls wildly as you sing a dizzying melody..."));\r
-                               project(0, rad, p_ptr->y, p_ptr->x, power, GF_AWAY_ALL, PROJECT_KILL, -1);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("\91Þ\8eU\82Ì\89Ì", "Dispelling chant");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B\8e×\88«\82È\83\82\83\93\83X\83^\81[\82É\93Á\82É\91å\82«\82È\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
-                       "Damages all monsters in sight. Hurts evil monsters greatly.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\91Ï\82¦\82ç\82ê\82È\82¢\95s\8b¦\98a\89¹\82ª\93G\82ð\90Ó\82ß\97§\82Ä\82½\81D\81D\81D", "You cry out in an ear-wracking voice..."));\r
-                       start_singing(spell, MUSIC_DISPEL);\r
-               }\r
-\r
-               {\r
-                       int m_sides = plev * 3;\r
-                       int e_sides = plev * 3;\r
-\r
-                       if (info) return format("%s1d%d+1d%d", s_dam, m_sides, e_sides);\r
-\r
-                       if (cont)\r
-                       {\r
-                               dispel_monsters(randint1(m_sides));\r
-                               dispel_evil(randint1(e_sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("\83T\83\8b\83}\83\93\82Ì\8aÃ\8c¾", "The Voice of Saruman");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\8c¸\91¬\82³\82¹\81A\96°\82ç\82¹\82æ\82¤\82Æ\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to slow and sleep all monsters in sight.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\97D\82µ\82­\81A\96£\97Í\93I\82È\89Ì\82ð\8cû\82¸\82³\82Ý\8en\82ß\82½\81D\81D\81D", "You start humming a gentle and attractive song..."));\r
-                       start_singing(spell, MUSIC_SARUMAN);\r
-               }\r
-\r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cont)\r
-                       {\r
-                               slow_monsters(plev);\r
-                               sleep_monsters(plev);\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("\97\92\82Ì\89¹\90F", "Song of the Tempest");\r
-               if (desc) return _("\8d\8c\89¹\82Ì\83r\81[\83\80\82ð\95ú\82Â\81B", "Fires a beam of sound.");\r
-\r
-               {\r
-                       int dice = 15 + (plev - 1) / 2;\r
-                       int sides = 10;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       /* Stop singing before start another */\r
-                       if (cast || fail) stop_singing();\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fire_beam(GF_SOUND, dir, damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("\82à\82¤\88ê\82Â\82Ì\90¢\8aE", "Ambarkanta");\r
-               if (desc) return _("\8c»\8dÝ\82Ì\8aK\82ð\8dÄ\8d\\90¬\82·\82é\81B", "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
-                       /* Stop singing before start another */\r
-                       if (cast || fail) stop_singing();\r
-\r
-                       if (cast)\r
-                       {\r
-                               msg_print(_("\8eü\88Í\82ª\95Ï\89»\82µ\8en\82ß\82½\81D\81D\81D", "You sing of the primeval shaping of Middle-earth..."));\r
-                               alter_reality();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("\94j\89ó\82Ì\90ù\97¥", "Wrecking Pattern");\r
-               if (desc) return _("\8eü\88Í\82Ì\83_\83\93\83W\83\87\83\93\82ð\97h\82ç\82µ\81A\95Ç\82Æ\8f°\82ð\83\89\83\93\83_\83\80\82É\93ü\82ê\95Ï\82¦\82é\81B",\r
-                       "Shakes dungeon structure, and results in random swapping of floors and walls.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\94j\89ó\93I\82È\89Ì\82ª\8b¿\82«\82í\82½\82Á\82½\81D\81D\81D", "You weave a pattern of sounds to contort and shatter..."));\r
-                       start_singing(spell, MUSIC_QUAKE);\r
-               }\r
-\r
-               {\r
-                       int rad = 10;\r
-\r
-                       if (info) return info_radius(rad);\r
-\r
-                       if (cont)\r
-                       {\r
-                               earthquake(p_ptr->y, p_ptr->x, 10);\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-\r
-       case 25:\r
-               if (name) return _("\92â\91Ø\82Ì\89Ì", "Stationary Shriek");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\96\83á\83\82³\82¹\82æ\82¤\82Æ\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to freeze all monsters in sight.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\82ä\82Á\82­\82è\82Æ\82µ\82½\83\81\83\8d\83f\83B\82ð\91t\82Å\8en\82ß\82½\81D\81D\81D", "You weave a very slow pattern which is almost likely to stop..."));\r
-                       start_singing(spell, MUSIC_STASIS);\r
-               }\r
-\r
-               {\r
-                       int power = plev * 4;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cont)\r
-                       {\r
-                               stasis_monsters(power);\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 26:\r
-               if (name) return _("\8eç\82è\82Ì\89Ì", "Endurance");\r
-               if (desc) return _("\8e©\95ª\82Ì\82¢\82é\8f°\82Ì\8fã\82É\81A\83\82\83\93\83X\83^\81[\82ª\92Ê\82è\94²\82¯\82½\82è\8f¢\8a«\82³\82ê\82½\82è\82·\82é\82±\82Æ\82ª\82Å\82«\82È\82­\82È\82é\83\8b\81[\83\93\82ð\95`\82­\81B",\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
-                       /* Stop singing before start another */\r
-                       if (cast || fail) stop_singing();\r
-\r
-                       if (cast)\r
-                       {\r
-                               msg_print(_("\89Ì\82ª\90_\90¹\82È\8fê\82ð\8dì\82è\8fo\82µ\82½\81D\81D\81D", "The holy power of the Music is creating sacred field..."));\r
-                               warding_glyph();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 27:\r
-               if (name) return _("\89p\97Y\82Ì\8e\8d", "The Hero's Poem");\r
-               if (desc) return _("\89Á\91¬\82µ\81A\83q\81[\83\8d\81[\8bC\95ª\82É\82È\82è\81A\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82É\83_\83\81\81[\83W\82ð\97^\82¦\82é\81B",\r
-                       "Hastes you. Gives heroism. Damages all monsters in sight.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\89p\97Y\82Ì\89Ì\82ð\8cû\82¸\82³\82ñ\82¾\81D\81D\81D", "You chant a powerful, heroic call to arms..."));\r
-                       (void)hp_player(10);\r
-                       (void)set_afraid(0);\r
-\r
-                       /* Recalculate hitpoints */\r
-                       p_ptr->update |= (PU_HP);\r
-\r
-                       start_singing(spell, MUSIC_SHERO);\r
-               }\r
-\r
-               if (stop)\r
-               {\r
-                       if (!p_ptr->hero)\r
-                       {\r
-                               msg_print(_("\83q\81[\83\8d\81[\82Ì\8bC\95ª\82ª\8fÁ\82¦\8e¸\82¹\82½\81B", "The heroism wears off."));\r
-                               /* Recalculate hitpoints */\r
-                               p_ptr->update |= (PU_HP);\r
-                       }\r
-\r
-                       if (!p_ptr->fast)\r
-                       {\r
-                               msg_print(_("\93®\82«\82Ì\91f\91\81\82³\82ª\82È\82­\82È\82Á\82½\82æ\82¤\82¾\81B", "You feel yourself slow down."));\r
-                       }\r
-               }\r
-\r
-               {\r
-                       int dice = 1;\r
-                       int sides = plev * 3;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       if (cont)\r
-                       {\r
-                               dispel_monsters(damroll(dice, sides));\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("\83\84\83\94\83@\83\93\83i\82Ì\8f\95\82¯", "Relief of Yavanna");\r
-               if (desc) return _("\8b­\97Í\82È\89ñ\95\9c\82Ì\89Ì\82Å\81A\95\89\8f\9d\82Æ\9eN\9eO\8fó\91Ô\82à\91S\89õ\82·\82é\81B", "Powerful healing song. Also heals cut and stun completely.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\89Ì\82ð\92Ê\82µ\82Ä\91Ì\82É\8a\88\8bC\82ª\96ß\82Á\82Ä\82«\82½\81D\81D\81D", "Life flows through you as you sing the song..."));\r
-                       start_singing(spell, MUSIC_H_LIFE);\r
-               }\r
-\r
-               {\r
-                       int dice = 15;\r
-                       int sides = 10;\r
-\r
-                       if (info) return info_heal(dice, sides, 0);\r
-\r
-                       if (cont)\r
-                       {\r
-                               hp_player(damroll(dice, sides));\r
-                               set_stun(0);\r
-                               set_cut(0);\r
-                       }\r
-               }\r
-\r
-               break;\r
-\r
-       case 29:\r
-               if (name) return _("\8dÄ\90\82Ì\89Ì", "Goddess' rebirth");\r
-               if (desc) return _("\82·\82×\82Ä\82Ì\83X\83e\81[\83^\83X\82Æ\8co\8c±\92l\82ð\89ñ\95\9c\82·\82é\81B", "Restores all stats and experience.");\r
-\r
-               {\r
-                       /* Stop singing before start another */\r
-                       if (cast || fail) stop_singing();\r
-\r
-                       if (cast)\r
-                       {\r
-                               msg_print(_("\88Ã\8d\95\82Ì\92\86\82É\8cõ\82Æ\94ü\82ð\82Ó\82è\82Ü\82¢\82½\81B\91Ì\82ª\8c³\82Ì\8a\88\97Í\82ð\8eæ\82è\96ß\82µ\82½\81B",\r
-                                       "You strewed light and beauty in the dark as you sing. You feel refreshed."));\r
-                               (void)restore_all_status();\r
-                               (void)restore_level();\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("\83T\83E\83\8d\83\93\82Ì\96\82\8fp", "Wizardry of Sauron");\r
-               if (desc) return _("\94ñ\8fí\82É\8b­\97Í\82Å\82²\82­\8f¬\82³\82¢\8d\8c\89¹\82Ì\8b\85\82ð\95ú\82Â\81B", "Fires an extremely powerful tiny ball of sound.");\r
-\r
-               {\r
-                       int dice = 50 + plev;\r
-                       int sides = 10;\r
-                       int rad = 0;\r
-\r
-                       if (info) return info_damage(dice, sides, 0);\r
-\r
-                       /* Stop singing before start another */\r
-                       if (cast || fail) stop_singing();\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               fire_ball(GF_SOUND, dir, damroll(dice, sides), rad);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("\83t\83B\83\93\83S\83\8b\83t\83B\83\93\82Ì\92§\90í", "Fingolfin's Challenge");\r
-               if (desc) return _("\83_\83\81\81[\83W\82ð\8eó\82¯\82È\82­\82È\82é\83o\83\8a\83A\82ð\92£\82é\81B",\r
-                       "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks.");\r
-\r
-               /* Stop singing before start another */\r
-               if (cast || fail) stop_singing();\r
-\r
-               if (cast)\r
-               {\r
-                       msg_print(_("\83t\83B\83\93\83S\83\8b\83t\83B\83\93\82Ì\96»\89¤\82Ö\82Ì\92§\90í\82ð\89Ì\82Á\82½\81D\81D\81D",\r
-                               "You recall the valor of Fingolfin's challenge to the Dark Lord..."));\r
-\r
-                       /* Redraw map */\r
-                       p_ptr->redraw |= (PR_MAP);\r
-\r
-                       /* Update monsters */\r
-                       p_ptr->update |= (PU_MONSTERS);\r
-\r
-                       /* Window stuff */\r
-                       p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);\r
-\r
-                       start_singing(spell, MUSIC_INVULN);\r
-               }\r
-\r
-               if (stop)\r
-               {\r
-                       if (!p_ptr->invuln)\r
-                       {\r
-                               msg_print(_("\96³\93G\82Å\82Í\82È\82­\82È\82Á\82½\81B", "The invulnerability wears off."));\r
-                               /* Redraw map */\r
-                               p_ptr->redraw |= (PR_MAP);\r
-\r
-                               /* Update monsters */\r
-                               p_ptr->update |= (PU_MONSTERS);\r
-\r
-                               /* Window stuff */\r
-                               p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);\r
-                       }\r
-               }\r
-\r
-               break;\r
-       }\r
-\r
-       return "";\r
-}\r
-\r
+#include "angband.h"
+#include "cmd-spell.h"
+
+/*!
+* @brief 歌の開始を処理する / Start singing if the player is a Bard
+* @param spell 領域魔法としてのID
+* @param song 魔法効果のID
+* @return なし
+*/
+static void start_singing(SPELL_IDX spell, MAGIC_NUM1 song)
+{
+       /* Remember the song index */
+       SINGING_SONG_EFFECT(p_ptr) = (MAGIC_NUM1)song;
+
+       /* Remember the index of the spell which activated the song */
+       SINGING_SONG_ID(p_ptr) = (MAGIC_NUM2)spell;
+
+
+       /* Now the player is singing */
+       set_action(ACTION_SING);
+
+
+       /* Recalculate bonuses */
+       p_ptr->update |= (PU_BONUS);
+
+       /* Redraw status bar */
+       p_ptr->redraw |= (PR_STATUS);
+}
+
+/*!
+* @brief 歌の停止を処理する / Stop singing if the player is a Bard
+* @return なし
+*/
+void stop_singing(void)
+{
+       if (p_ptr->pclass != CLASS_BARD) return;
+
+       /* Are there interupted song? */
+       if (INTERUPTING_SONG_EFFECT(p_ptr))
+       {
+               /* Forget interupted song */
+               INTERUPTING_SONG_EFFECT(p_ptr) = MUSIC_NONE;
+               return;
+       }
+
+       /* The player is singing? */
+       if (!SINGING_SONG_EFFECT(p_ptr)) return;
+
+       /* Hack -- if called from set_action(), avoid recursive loop */
+       if (p_ptr->action == ACTION_SING) set_action(ACTION_NONE);
+
+       /* Message text of each song or etc. */
+       do_spell(REALM_MUSIC, SINGING_SONG_ID(p_ptr), SPELL_STOP);
+
+       SINGING_SONG_EFFECT(p_ptr) = MUSIC_NONE;
+       SINGING_SONG_ID(p_ptr) = 0;
+
+       /* Recalculate bonuses */
+       p_ptr->update |= (PU_BONUS);
+
+       /* Redraw status bar */
+       p_ptr->redraw |= (PR_STATUS);
+}
+
+/*!
+* @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文字列を返す。
+*/
+cptr do_music_spell(SPELL_IDX spell, BIT_FLAGS 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 fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
+       bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
+       bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
+       static const char s_dam[] = _("損傷:", "dam ");
+
+       int dir;
+       int plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("遅鈍の歌", "Song of Holding");
+               if (desc) return _("視界内の全てのモンスターを減速させる。抵抗されると無効。", "Attempts to slow all monsters in sight.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("ゆっくりとしたメロディを口ずさみ始めた...", "You start humming a slow, steady melody..."));
+                       start_singing(spell, MUSIC_SLOW);
+               }
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cont)
+                       {
+                               slow_monsters(plev);
+                       }
+               }
+               break;
+
+       case 1:
+               if (name) return _("祝福の歌", "Song of Blessing");
+               if (desc) return _("命中率とACのボーナスを得る。", "Gives bonus to hit and AC for a few turns.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("厳かなメロディを奏で始めた...", "The holy power of the Music of the Ainur enters you..."));
+                       start_singing(spell, MUSIC_BLESS);
+               }
+
+               if (stop)
+               {
+                       if (!p_ptr->blessed)
+                       {
+                               msg_print(_("高潔な気分が消え失せた。", "The prayer has expired."));
+                       }
+               }
+
+               break;
+
+       case 2:
+               if (name) return _("崩壊の音色", "Wrecking Note");
+               if (desc) return _("轟音のボルトを放つ。", "Fires a bolt of sound.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               {
+                       int dice = 4 + (plev - 1) / 5;
+                       int sides = 4;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_bolt(GF_SOUND, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 3:
+               if (name) return _("朦朧の旋律", "Stun Pattern");
+               if (desc) return _("視界内の全てのモンスターを朦朧させる。抵抗されると無効。", "Attempts to stun all monsters in sight.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("眩惑させるメロディを奏で始めた...", "You weave a pattern of sounds to bewilder and daze..."));
+                       start_singing(spell, MUSIC_STUN);
+               }
+
+               {
+                       int dice = plev / 10;
+                       int sides = 2;
+
+                       if (info) return info_power_dice(dice, sides);
+
+                       if (cont)
+                       {
+                               stun_monsters(damroll(dice, sides));
+                       }
+               }
+
+               break;
+
+       case 4:
+               if (name) return _("生命の流れ", "Flow of Life");
+               if (desc) return _("体力を少し回復させる。", "Heals HP a little.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("歌を通して体に活気が戻ってきた...", "Life flows through you as you sing a song of healing..."));
+                       start_singing(spell, MUSIC_L_LIFE);
+               }
+
+               {
+                       int dice = 2;
+                       int sides = 6;
+
+                       if (info) return info_heal(dice, sides, 0);
+
+                       if (cont)
+                       {
+                               hp_player(damroll(dice, sides));
+                       }
+               }
+
+               break;
+
+       case 5:
+               if (name) return _("太陽の歌", "Song of the Sun");
+               if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               {
+                       int dice = 2;
+                       int sides = plev / 2;
+                       int rad = plev / 10 + 1;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               msg_print(_("光り輝く歌が辺りを照らした。", "Your uplifting song brings brightness to dark places..."));
+                               lite_area(damroll(dice, sides), rad);
+                       }
+               }
+               break;
+
+       case 6:
+               if (name) return _("恐怖の歌", "Song of Fear");
+               if (desc) return _("視界内の全てのモンスターを恐怖させる。抵抗されると無効。", "Attempts to scare all monsters in sight.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("おどろおどろしいメロディを奏で始めた...", "You start weaving a fearful pattern..."));
+                       start_singing(spell, MUSIC_FEAR);
+               }
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cont)
+                       {
+                               project_hack(GF_TURN_ALL, power);
+                       }
+               }
+
+               break;
+
+       case 7:
+               if (name) return _("戦いの歌", "Heroic Ballad");
+               if (desc) return _("ヒーロー気分になる。", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("激しい戦いの歌を歌った...", "You start singing a song of intense fighting..."));
+
+                       (void)hp_player(10);
+                       (void)set_afraid(0);
+
+                       /* Recalculate hitpoints */
+                       p_ptr->update |= (PU_HP);
+
+                       start_singing(spell, MUSIC_HERO);
+               }
+
+               if (stop)
+               {
+                       if (!p_ptr->hero)
+                       {
+                               msg_print(_("ヒーローの気分が消え失せた。", "The heroism wears off."));
+                               /* Recalculate hitpoints */
+                               p_ptr->update |= (PU_HP);
+                       }
+               }
+
+               break;
+
+       case 8:
+               if (name) return _("霊的知覚", "Clairaudience");
+               if (desc) return _("近くの罠/扉/階段を感知する。レベル15で全てのモンスター、20で財宝とアイテムを感知できるようになる。レベル25で周辺の地形を感知し、40でその階全体を永久に照らし、ダンジョン内のすべてのアイテムを感知する。この効果は歌い続けることで順に起こる。",
+                       "Detects traps, doors and stairs in your vicinity. And detects all monsters at level 15, treasures and items at level 20. Maps nearby area at level 25. Lights and know the whole level at level 40. These effects occurs by turns while this song continues.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("静かな音楽が感覚を研ぎ澄まさせた...", "Your quiet music sharpens your sense of hearing..."));
+                       /* Hack -- Initialize the turn count */
+                       SINGING_COUNT(p_ptr) = 0;
+                       start_singing(spell, MUSIC_DETECT);
+               }
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cont)
+                       {
+                               int count = SINGING_COUNT(p_ptr);
+
+                               if (count >= 19) wiz_lite(FALSE);
+                               if (count >= 11)
+                               {
+                                       map_area(rad);
+                                       if (plev > 39 && count < 19)
+                                               SINGING_COUNT(p_ptr) = count + 1;
+                               }
+                               if (count >= 6)
+                               {
+                                       /* There are too many hidden treasure.  So... */
+                                       /* detect_treasure(rad); */
+                                       detect_objects_gold(rad);
+                                       detect_objects_normal(rad);
+
+                                       if (plev > 24 && count < 11)
+                                               SINGING_COUNT(p_ptr) = count + 1;
+                               }
+                               if (count >= 3)
+                               {
+                                       detect_monsters_invis(rad);
+                                       detect_monsters_normal(rad);
+
+                                       if (plev > 19 && count < 6)
+                                               SINGING_COUNT(p_ptr) = count + 1;
+                               }
+                               detect_traps(rad, TRUE);
+                               detect_doors(rad);
+                               detect_stairs(rad);
+
+                               if (plev > 14 && count < 3)
+                                       SINGING_COUNT(p_ptr) = count + 1;
+                       }
+               }
+
+               break;
+
+       case 9:
+               if (name) return _("魂の歌", "Soul Shriek");
+               if (desc) return _("視界内の全てのモンスターに対して精神攻撃を行う。", "Damages all monsters in sight with PSI damages.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("精神を捻じ曲げる歌を歌った...", "You start singing a song of soul in pain..."));
+                       start_singing(spell, MUSIC_PSI);
+               }
+
+               {
+                       int dice = 1;
+                       int sides = plev * 3 / 2;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cont)
+                       {
+                               project_hack(GF_PSI, damroll(dice, sides));
+                       }
+               }
+
+               break;
+
+       case 10:
+               if (name) return _("知識の歌", "Song of Lore");
+               if (desc) return _("自分のいるマスと隣りのマスに落ちているアイテムを鑑定する。", "Identifies all items which are in the adjacent squares.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("この世界の知識が流れ込んできた...", "You recall the rich lore of the world..."));
+                       start_singing(spell, MUSIC_ID);
+               }
+
+               {
+                       int rad = 1;
+
+                       if (info) return info_radius(rad);
+
+                       /*
+                       * 歌の開始時にも効果発動:
+                       * MP不足で鑑定が発動される前に歌が中断してしまうのを防止。
+                       */
+                       if (cont || cast)
+                       {
+                               project(0, rad, p_ptr->y, p_ptr->x, 0, GF_IDENTIFY, PROJECT_ITEM, -1);
+                       }
+               }
+
+               break;
+
+       case 11:
+               if (name) return _("隠遁の歌", "Hiding Tune");
+               if (desc) return _("隠密行動能力を上昇させる。", "Gives improved stealth.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("あなたの姿が景色にとけこんでいった...", "Your song carries you beyond the sight of mortal eyes..."));
+                       start_singing(spell, MUSIC_STEALTH);
+               }
+
+               if (stop)
+               {
+                       if (!p_ptr->tim_stealth)
+                       {
+                               msg_print(_("姿がはっきりと見えるようになった。", "You are no longer hided."));
+                       }
+               }
+
+               break;
+
+       case 12:
+               if (name) return _("幻影の旋律", "Illusion Pattern");
+               if (desc) return _("視界内の全てのモンスターを混乱させる。抵抗されると無効。", "Attempts to confuse all monsters in sight.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("辺り一面に幻影が現れた...", "You weave a pattern of sounds to beguile and confuse..."));
+                       start_singing(spell, MUSIC_CONF);
+               }
+
+               {
+                       int power = plev * 2;
+
+                       if (info) return info_power(power);
+
+                       if (cont)
+                       {
+                               confuse_monsters(power);
+                       }
+               }
+
+               break;
+
+       case 13:
+               if (name) return _("破滅の叫び", "Doomcall");
+               if (desc) return _("視界内の全てのモンスターに対して轟音攻撃を行う。", "Damages all monsters in sight with booming sound.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("轟音が響いた...", "The fury of the Downfall of Numenor lashes out..."));
+                       start_singing(spell, MUSIC_SOUND);
+               }
+
+               {
+                       int dice = 10 + plev / 5;
+                       int sides = 7;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cont)
+                       {
+                               project_hack(GF_SOUND, damroll(dice, sides));
+                       }
+               }
+
+               break;
+
+       case 14:
+               if (name) return _("フィリエルの歌", "Firiel's Song");
+               if (desc) return _("周囲の死体や骨を生き返す。", "Resurrects nearby corpse and skeletons. And makes these your pets.");
+
+               {
+                       /* Stop singing before start another */
+                       if (cast || fail) stop_singing();
+
+                       if (cast)
+                       {
+                               msg_print(_("生命と復活のテーマを奏で始めた...", "The themes of life and revival are woven into your song..."));
+                               animate_dead(0, p_ptr->y, p_ptr->x);
+                       }
+               }
+               break;
+
+       case 15:
+               if (name) return _("旅の仲間", "Fellowship Chant");
+               if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("安らかなメロディを奏で始めた...", "You weave a slow, soothing melody of imploration..."));
+                       start_singing(spell, MUSIC_CHARM);
+               }
+
+               {
+                       int dice = 10 + plev / 15;
+                       int sides = 6;
+
+                       if (info) return info_power_dice(dice, sides);
+
+                       if (cont)
+                       {
+                               charm_monsters(damroll(dice, sides));
+                       }
+               }
+
+               break;
+
+       case 16:
+               if (name) return _("分解音波", "Sound of disintegration");
+               if (desc) return _("壁を掘り進む。自分の足元のアイテムは蒸発する。", "Makes you be able to burrow into walls. Objects under your feet evaporate.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("粉砕するメロディを奏で始めた...", "You weave a violent pattern of sounds to break wall."));
+                       start_singing(spell, MUSIC_WALL);
+               }
+
+               {
+                       /*
+                       * 歌の開始時にも効果発動:
+                       * MP不足で効果が発動される前に歌が中断してしまうのを防止。
+                       */
+                       if (cont || cast)
+                       {
+                               project(0, 0, p_ptr->y, p_ptr->x,
+                                       0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
+                       }
+               }
+               break;
+
+       case 17:
+               if (name) return _("元素耐性", "Finrod's Resistance");
+               if (desc) return _("酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。",
+                       "Gives resistance to fire, cold, electricity, acid and poison. These resistances can be added to which from equipment for more powerful resistances.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("元素の力に対する忍耐の歌を歌った。", "You sing a song of perseverance against powers..."));
+                       start_singing(spell, MUSIC_RESIST);
+               }
+
+               if (stop)
+               {
+                       if (!p_ptr->oppose_acid)
+                       {
+                               msg_print(_("酸への耐性が薄れた気がする。", "You feel less resistant to acid."));
+                       }
+
+                       if (!p_ptr->oppose_elec)
+                       {
+                               msg_print(_("電撃への耐性が薄れた気がする。", "You feel less resistant to elec."));
+                       }
+
+                       if (!p_ptr->oppose_fire)
+                       {
+                               msg_print(_("火への耐性が薄れた気がする。", "You feel less resistant to fire."));
+                       }
+
+                       if (!p_ptr->oppose_cold)
+                       {
+                               msg_print(_("冷気への耐性が薄れた気がする。", "You feel less resistant to cold."));
+                       }
+
+                       if (!p_ptr->oppose_pois)
+                       {
+                               msg_print(_("毒への耐性が薄れた気がする。", "You feel less resistant to pois."));
+                       }
+               }
+
+               break;
+
+       case 18:
+               if (name) return _("ホビットのメロディ", "Hobbit Melodies");
+               if (desc) return _("加速する。", "Hastes you.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("軽快な歌を口ずさみ始めた...", "You start singing joyful pop song..."));
+                       start_singing(spell, MUSIC_SPEED);
+               }
+
+               if (stop)
+               {
+                       if (!p_ptr->fast)
+                       {
+                               msg_print(_("動きの素早さがなくなったようだ。", "You feel yourself slow down."));
+                       }
+               }
+
+               break;
+
+       case 19:
+               if (name) return _("歪んだ世界", "World Contortion");
+               if (desc) return _("近くのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all nearby monsters away unless resisted.");
+
+               {
+                       int rad = plev / 15 + 1;
+                       int power = plev * 3 + 1;
+
+                       if (info) return info_radius(rad);
+
+                       /* Stop singing before start another */
+                       if (cast || fail) stop_singing();
+
+                       if (cast)
+                       {
+                               msg_print(_("歌が空間を歪めた...", "Reality whirls wildly as you sing a dizzying melody..."));
+                               project(0, rad, p_ptr->y, p_ptr->x, power, GF_AWAY_ALL, PROJECT_KILL, -1);
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("退散の歌", "Dispelling chant");
+               if (desc) return _("視界内の全てのモンスターにダメージを与える。邪悪なモンスターに特に大きなダメージを与える。",
+                       "Damages all monsters in sight. Hurts evil monsters greatly.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("耐えられない不協和音が敵を責め立てた...", "You cry out in an ear-wracking voice..."));
+                       start_singing(spell, MUSIC_DISPEL);
+               }
+
+               {
+                       int m_sides = plev * 3;
+                       int e_sides = plev * 3;
+
+                       if (info) return format("%s1d%d+1d%d", s_dam, m_sides, e_sides);
+
+                       if (cont)
+                       {
+                               dispel_monsters(randint1(m_sides));
+                               dispel_evil(randint1(e_sides));
+                       }
+               }
+               break;
+
+       case 21:
+               if (name) return _("サルマンの甘言", "The Voice of Saruman");
+               if (desc) return _("視界内の全てのモンスターを減速させ、眠らせようとする。抵抗されると無効。", "Attempts to slow and sleep all monsters in sight.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("優しく、魅力的な歌を口ずさみ始めた...", "You start humming a gentle and attractive song..."));
+                       start_singing(spell, MUSIC_SARUMAN);
+               }
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cont)
+                       {
+                               slow_monsters(plev);
+                               sleep_monsters(plev);
+                       }
+               }
+
+               break;
+
+       case 22:
+               if (name) return _("嵐の音色", "Song of the Tempest");
+               if (desc) return _("轟音のビームを放つ。", "Fires a beam of sound.");
+
+               {
+                       int dice = 15 + (plev - 1) / 2;
+                       int sides = 10;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       /* Stop singing before start another */
+                       if (cast || fail) stop_singing();
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_beam(GF_SOUND, dir, damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 23:
+               if (name) return _("もう一つの世界", "Ambarkanta");
+               if (desc) return _("現在の階を再構成する。", "Recreates current dungeon level.");
+
+               {
+                       int base = 15;
+                       int sides = 20;
+
+                       if (info) return info_delay(base, sides);
+
+                       /* Stop singing before start another */
+                       if (cast || fail) stop_singing();
+
+                       if (cast)
+                       {
+                               msg_print(_("周囲が変化し始めた...", "You sing of the primeval shaping of Middle-earth..."));
+                               alter_reality();
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("破壊の旋律", "Wrecking Pattern");
+               if (desc) return _("周囲のダンジョンを揺らし、壁と床をランダムに入れ変える。",
+                       "Shakes dungeon structure, and results in random swapping of floors and walls.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("破壊的な歌が響きわたった...", "You weave a pattern of sounds to contort and shatter..."));
+                       start_singing(spell, MUSIC_QUAKE);
+               }
+
+               {
+                       int rad = 10;
+
+                       if (info) return info_radius(rad);
+
+                       if (cont)
+                       {
+                               earthquake(p_ptr->y, p_ptr->x, 10);
+                       }
+               }
+
+               break;
+
+
+       case 25:
+               if (name) return _("停滞の歌", "Stationary Shriek");
+               if (desc) return _("視界内の全てのモンスターを麻痺させようとする。抵抗されると無効。", "Attempts to freeze all monsters in sight.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("ゆっくりとしたメロディを奏で始めた...", "You weave a very slow pattern which is almost likely to stop..."));
+                       start_singing(spell, MUSIC_STASIS);
+               }
+
+               {
+                       int power = plev * 4;
+
+                       if (info) return info_power(power);
+
+                       if (cont)
+                       {
+                               stasis_monsters(power);
+                       }
+               }
+
+               break;
+
+       case 26:
+               if (name) return _("守りの歌", "Endurance");
+               if (desc) return _("自分のいる床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。",
+                       "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph.");
+
+               {
+                       /* Stop singing before start another */
+                       if (cast || fail) stop_singing();
+
+                       if (cast)
+                       {
+                               msg_print(_("歌が神聖な場を作り出した...", "The holy power of the Music is creating sacred field..."));
+                               warding_glyph();
+                       }
+               }
+               break;
+
+       case 27:
+               if (name) return _("英雄の詩", "The Hero's Poem");
+               if (desc) return _("加速し、ヒーロー気分になり、視界内の全てのモンスターにダメージを与える。",
+                       "Hastes you. Gives heroism. Damages all monsters in sight.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("英雄の歌を口ずさんだ...", "You chant a powerful, heroic call to arms..."));
+                       (void)hp_player(10);
+                       (void)set_afraid(0);
+
+                       /* Recalculate hitpoints */
+                       p_ptr->update |= (PU_HP);
+
+                       start_singing(spell, MUSIC_SHERO);
+               }
+
+               if (stop)
+               {
+                       if (!p_ptr->hero)
+                       {
+                               msg_print(_("ヒーローの気分が消え失せた。", "The heroism wears off."));
+                               /* Recalculate hitpoints */
+                               p_ptr->update |= (PU_HP);
+                       }
+
+                       if (!p_ptr->fast)
+                       {
+                               msg_print(_("動きの素早さがなくなったようだ。", "You feel yourself slow down."));
+                       }
+               }
+
+               {
+                       int dice = 1;
+                       int sides = plev * 3;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cont)
+                       {
+                               dispel_monsters(damroll(dice, sides));
+                       }
+               }
+               break;
+
+       case 28:
+               if (name) return _("ヤヴァンナの助け", "Relief of Yavanna");
+               if (desc) return _("強力な回復の歌で、負傷と朦朧状態も全快する。", "Powerful healing song. Also heals cut and stun completely.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("歌を通して体に活気が戻ってきた...", "Life flows through you as you sing the song..."));
+                       start_singing(spell, MUSIC_H_LIFE);
+               }
+
+               {
+                       int dice = 15;
+                       int sides = 10;
+
+                       if (info) return info_heal(dice, sides, 0);
+
+                       if (cont)
+                       {
+                               hp_player(damroll(dice, sides));
+                               set_stun(0);
+                               set_cut(0);
+                       }
+               }
+
+               break;
+
+       case 29:
+               if (name) return _("再生の歌", "Goddess' rebirth");
+               if (desc) return _("すべてのステータスと経験値を回復する。", "Restores all stats and experience.");
+
+               {
+                       /* Stop singing before start another */
+                       if (cast || fail) stop_singing();
+
+                       if (cast)
+                       {
+                               msg_print(_("暗黒の中に光と美をふりまいた。体が元の活力を取り戻した。",
+                                       "You strewed light and beauty in the dark as you sing. You feel refreshed."));
+                               (void)restore_all_status();
+                               (void)restore_level();
+                       }
+               }
+               break;
+
+       case 30:
+               if (name) return _("サウロンの魔術", "Wizardry of Sauron");
+               if (desc) return _("非常に強力でごく小さい轟音の球を放つ。", "Fires an extremely powerful tiny ball of sound.");
+
+               {
+                       int dice = 50 + plev;
+                       int sides = 10;
+                       int rad = 0;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       /* Stop singing before start another */
+                       if (cast || fail) stop_singing();
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_ball(GF_SOUND, dir, damroll(dice, sides), rad);
+                       }
+               }
+               break;
+
+       case 31:
+               if (name) return _("フィンゴルフィンの挑戦", "Fingolfin's Challenge");
+               if (desc) return _("ダメージを受けなくなるバリアを張る。",
+                       "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks.");
+
+               /* Stop singing before start another */
+               if (cast || fail) stop_singing();
+
+               if (cast)
+               {
+                       msg_print(_("フィンゴルフィンの冥王への挑戦を歌った...",
+                               "You recall the valor of Fingolfin's challenge to the Dark Lord..."));
+
+                       /* Redraw map */
+                       p_ptr->redraw |= (PR_MAP);
+
+                       /* Update monsters */
+                       p_ptr->update |= (PU_MONSTERS);
+
+                       /* Window stuff */
+                       p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
+
+                       start_singing(spell, MUSIC_INVULN);
+               }
+
+               if (stop)
+               {
+                       if (!p_ptr->invuln)
+                       {
+                               msg_print(_("無敵ではなくなった。", "The invulnerability wears off."));
+                               /* Redraw map */
+                               p_ptr->redraw |= (PR_MAP);
+
+                               /* Update monsters */
+                               p_ptr->update |= (PU_MONSTERS);
+
+                               /* Window stuff */
+                               p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
+                       }
+               }
+
+               break;
+       }
+
+       return "";
+}
+
index fc12399..22ad00f 100644 (file)
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-#include "selfinfo.h"\r
-\r
-/*!\r
-* @brief \90å\8fp\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \96\82\96@ID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
-* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
-*/\r
-cptr do_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 _("\83\82\83\93\83X\83^\81[\8a´\92m", "Detect Monsters");\r
-               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\8c©\82¦\82é\83\82\83\93\83X\83^\81[\82ð\8a´\92m\82·\82é\81B", "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 _("\83V\83\87\81[\83g\81E\83e\83\8c\83|\81[\83g", "Phase Door");\r
-               if (desc) return _("\8bß\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "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 _("ã©\82Æ\94à\8a´\92m", "Detect Doors and Traps");\r
-               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\94à\82Æã©\82ð\8a´\92m\82·\82é\81B", "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 _("\83\89\83C\83g\81E\83G\83\8a\83A", "Light Area");\r
-               if (desc) return _("\8cõ\8c¹\82ª\8fÆ\82ç\82µ\82Ä\82¢\82é\94Í\88Í\82©\95\94\89®\91S\91Ì\82ð\89i\8bv\82É\96¾\82é\82­\82·\82é\81B", "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 _("\83p\83j\83b\83N\81E\83\82\83\93\83X\83^\81[", "Confuse Monster");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8d¬\97\90\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\83e\83\8c\83|\81[\83g", "Teleport");\r
-               if (desc) return _("\89\93\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "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 _("\83X\83\8a\81[\83v\81E\83\82\83\93\83X\83^\81[", "Sleep Monster");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\96°\82ç\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to sleep a monster.");\r
-\r
-               {\r
-                       int power = plev;\r
-\r
-                       if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               if (!get_aim_dir(&dir)) return NULL;\r
-\r
-                               sleep_monster(dir, plev);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 7:\r
-               if (name) return _("\96\82\97Í\8f[\93U", "Recharging");\r
-               if (desc) return _("\8fñ/\96\82\96@\96_\82Ì\8f[\93U\89ñ\90\94\82ð\91\9d\82â\82·\82©\81A\8f[\93U\92\86\82Ì\83\8d\83b\83h\82Ì\8f[\93U\8e\9e\8aÔ\82ð\8c¸\82ç\82·\81B", "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 _("\96\82\96@\82Ì\92n\90}", "Magic Mapping");\r
-               if (desc) return _("\8eü\95Ó\82Ì\92n\8c`\82ð\8a´\92m\82·\82é\81B", "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 _("\8aÓ\92è", "Identify");\r
-               if (desc) return _("\83A\83C\83e\83\80\82ð\8e¯\95Ê\82·\82é\81B", "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 _("\83X\83\8d\83E\81E\83\82\83\93\83X\83^\81[", "Slow Monster");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\8c¸\91¬\82³\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\8eü\95Ó\83X\83\8a\81[\83v", "Mass Sleep");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\96°\82ç\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "Attempts to sleep 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 _("\83e\83\8c\83|\81[\83g\81E\83\82\83\93\83X\83^\81[", "Teleport Away");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[\82ð\83e\83\8c\83|\81[\83g\82³\82¹\82é\83r\81[\83\80\82ð\95ú\82Â\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\83X\83s\81[\83h", "Haste Self");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\89Á\91¬\82·\82é\81B", "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 _("\90^\81E\8a´\92m", "Detection True");\r
-               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\81Aã©\81A\94à\81A\8aK\92i\81A\8dà\95ó\81A\82»\82µ\82Ä\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B",\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 _("\90^\81E\8aÓ\92è", "Identify True");\r
-               if (desc) return _("\83A\83C\83e\83\80\82Ì\8e\9d\82Â\94\\97Í\82ð\8a®\91S\82É\92m\82é\81B", "*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 _("\95¨\91Ì\82Æ\8dà\95ó\8a´\92m", "Detect items and Treasure");\r
-               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\83A\83C\83e\83\80\82Æ\8dà\95ó\82ð\8a´\92m\82·\82é\81B", "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 _("\83`\83\83\81[\83\80\81E\83\82\83\93\83X\83^\81[", "Charm Monster");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\90¸\90_\8a´\92m", "Sense Minds");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83e\83\8c\83p\83V\81[\94\\97Í\82ð\93¾\82é\81B", "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 _("\8aX\88Ú\93®", "Teleport to town");\r
-               if (desc) return _("\8aX\82Ö\88Ú\93®\82·\82é\81B\92n\8fã\82É\82¢\82é\82Æ\82«\82µ\82©\8eg\82¦\82È\82¢\81B", "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 _("\8e©\8cÈ\95ª\90Í", "Self Knowledge");\r
-               if (desc) return _("\8c»\8dÝ\82Ì\8e©\95ª\82Ì\8fó\91Ô\82ð\8a®\91S\82É\92m\82é\81B",\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 _("\83e\83\8c\83|\81[\83g\81E\83\8c\83x\83\8b", "Teleport Level");\r
-               if (desc) return _("\8fu\8e\9e\82É\8fã\82©\89º\82Ì\8aK\82É\83e\83\8c\83|\81[\83g\82·\82é\81B", "Teleport to up or down stairs in a moment.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_check(_("\96{\93\96\82É\91¼\82Ì\8aK\82É\83e\83\8c\83|\81[\83g\82µ\82Ü\82·\82©\81H", "Are you sure? (Teleport Level)"))) return NULL;\r
-                               teleport_level(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 22:\r
-               if (name) return _("\8bA\8aÒ\82Ì\8eô\95¶", "Word of Recall");\r
-               if (desc) return _("\92n\8fã\82É\82¢\82é\82Æ\82«\82Í\83_\83\93\83W\83\87\83\93\82Ì\8dÅ\90[\8aK\82Ö\81A\83_\83\93\83W\83\87\83\93\82É\82¢\82é\82Æ\82«\82Í\92n\8fã\82Ö\82Æ\88Ú\93®\82·\82é\81B",\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 _("\8e\9f\8c³\82Ì\94à", "Dimension Door");\r
-               if (desc) return _("\92Z\8b\97\97£\93à\82Ì\8ew\92è\82µ\82½\8fê\8f\8a\82É\83e\83\8c\83|\81[\83g\82·\82é\81B", "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(_("\8e\9f\8c³\82Ì\94à\82ª\8aJ\82¢\82½\81B\96Ú\93I\92n\82ð\91I\82ñ\82Å\89º\82³\82¢\81B", "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 _("\92²\8d¸", "Probing");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[\82Ì\91®\90«\81A\8ec\82è\91Ì\97Í\81A\8dÅ\91å\91Ì\97Í\81A\83X\83s\81[\83h\81A\90³\91Ì\82ð\92m\82é\81B",\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 _("\94\9a\94­\82Ì\83\8b\81[\83\93", "Explosive Rune");\r
-               if (desc) return _("\8e©\95ª\82Ì\82¢\82é\8f°\82Ì\8fã\82É\81A\83\82\83\93\83X\83^\81[\82ª\92Ê\82é\82Æ\94\9a\94­\82µ\82Ä\83_\83\81\81[\83W\82ð\97^\82¦\82é\83\8b\81[\83\93\82ð\95`\82­\81B",\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 _("\94O\93®\97Í", "Telekinesis");\r
-               if (desc) return _("\83A\83C\83e\83\80\82ð\8e©\95ª\82Ì\91«\8c³\82Ö\88Ú\93®\82³\82¹\82é\81B", "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 _("\90ç\97¢\8aá", "Clairvoyance");\r
-               if (desc) return _("\82»\82Ì\8aK\91S\91Ì\82ð\89i\8bv\82É\8fÆ\82ç\82µ\81A\83_\83\93\83W\83\87\83\93\93à\82·\82×\82Ä\82Ì\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B\82³\82ç\82É\81A\88ê\92è\8e\9e\8aÔ\83e\83\8c\83p\83V\81[\94\\97Í\82ð\93¾\82é\81B",\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 _("\96£\97¹\82Ì\8e\8b\90ü", "Charm monsters");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\96£\97¹\82·\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\98B\8bà\8fp", "Alchemy");\r
-               if (desc) return _("\83A\83C\83e\83\801\82Â\82ð\82¨\8bà\82É\95Ï\82¦\82é\81B", "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 _("\89ö\95¨\92Ç\95ú", "Banishment");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\83e\83\8c\83|\81[\83g\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\96³\8f\9d\82Ì\8b\85", "Globe of Invulnerability");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83_\83\81\81[\83W\82ð\8eó\82¯\82È\82­\82È\82é\83o\83\8a\83A\82ð\92£\82é\81B\90Ø\82ê\82½\8fu\8aÔ\82É\8f­\82µ\83^\81[\83\93\82ð\8fÁ\94ï\82·\82é\82Ì\82Å\92\8d\88Ó\81B",\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
+#include "angband.h"
+#include "cmd-spell.h"
+#include "selfinfo.h"
+
+/*!
+* @brief 仙術領域魔法の各処理を行う
+* @param spell 魔法ID
+* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+*/
+cptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS 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;
+
+       int dir;
+       int plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("モンスター感知", "Detect Monsters");
+               if (desc) return _("近くの全ての見えるモンスターを感知する。", "Detects all monsters in your vicinity unless invisible.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_monsters_normal(rad);
+                       }
+               }
+               break;
+
+       case 1:
+               if (name) return _("ショート・テレポート", "Phase Door");
+               if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");
+
+               {
+                       POSITION range = 10;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               teleport_player(range, 0L);
+                       }
+               }
+               break;
+
+       case 2:
+               if (name) return _("罠と扉感知", "Detect Doors and Traps");
+               if (desc) return _("近くの全ての扉と罠を感知する。", "Detects traps, doors, and stairs in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_traps(rad, TRUE);
+                               detect_doors(rad);
+                               detect_stairs(rad);
+                       }
+               }
+               break;
+
+       case 3:
+               if (name) return _("ライト・エリア", "Light Area");
+               if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
+
+               {
+                       int dice = 2;
+                       int sides = plev / 2;
+                       int rad = plev / 10 + 1;
+
+                       if (info) return info_damage(dice, sides, 0);
+
+                       if (cast)
+                       {
+                               lite_area(damroll(dice, sides), rad);
+                       }
+               }
+               break;
+
+       case 4:
+               if (name) return _("パニック・モンスター", "Confuse Monster");
+               if (desc) return _("モンスター1体を混乱させる。抵抗されると無効。", "Attempts to confuse a monster.");
+
+               {
+                       int power = (plev * 3) / 2;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               confuse_monster(dir, power);
+                       }
+               }
+               break;
+
+       case 5:
+               if (name) return _("テレポート", "Teleport");
+               if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");
+
+               {
+                       POSITION range = plev * 5;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               teleport_player(range, 0L);
+                       }
+               }
+               break;
+
+       case 6:
+               if (name) return _("スリープ・モンスター", "Sleep Monster");
+               if (desc) return _("モンスター1体を眠らせる。抵抗されると無効。", "Attempts to sleep a monster.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               sleep_monster(dir, plev);
+                       }
+               }
+               break;
+
+       case 7:
+               if (name) return _("魔力充填", "Recharging");
+               if (desc) return _("杖/魔法棒の充填回数を増やすか、充填中のロッドの充填時間を減らす。", "Recharges staffs, wands or rods.");
+
+               {
+                       int power = plev * 4;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!recharge(power)) return NULL;
+                       }
+               }
+               break;
+
+       case 8:
+               if (name) return _("魔法の地図", "Magic Mapping");
+               if (desc) return _("周辺の地形を感知する。", "Maps nearby area.");
+
+               {
+                       int rad = DETECT_RAD_MAP;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               map_area(rad);
+                       }
+               }
+               break;
+
+       case 9:
+               if (name) return _("鑑定", "Identify");
+               if (desc) return _("アイテムを識別する。", "Identifies an item.");
+
+               {
+                       if (cast)
+                       {
+                               if (!ident_spell(FALSE)) return NULL;
+                       }
+               }
+               break;
+
+       case 10:
+               if (name) return _("スロウ・モンスター", "Slow Monster");
+               if (desc) return _("モンスター1体を減速さる。抵抗されると無効。", "Attempts to slow a monster.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               slow_monster(dir, plev);
+                       }
+               }
+               break;
+
+       case 11:
+               if (name) return _("周辺スリープ", "Mass Sleep");
+               if (desc) return _("視界内の全てのモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep all monsters in sight.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               sleep_monsters(plev);
+                       }
+               }
+               break;
+
+       case 12:
+               if (name) return _("テレポート・モンスター", "Teleport Away");
+               if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_beam(GF_AWAY_ALL, dir, power);
+                       }
+               }
+               break;
+
+       case 13:
+               if (name) return _("スピード", "Haste Self");
+               if (desc) return _("一定時間、加速する。", "Hastes you for a while.");
+
+               {
+                       int base = plev;
+                       int sides = 20 + plev;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               set_fast(randint1(sides) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 14:
+               if (name) return _("真・感知", "Detection True");
+               if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",
+                       "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_all(rad);
+                       }
+               }
+               break;
+
+       case 15:
+               if (name) return _("真・鑑定", "Identify True");
+               if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
+
+               {
+                       if (cast)
+                       {
+                               if (!identify_fully(FALSE)) return NULL;
+                       }
+               }
+               break;
+
+       case 16:
+               if (name) return _("物体と財宝感知", "Detect items and Treasure");
+               if (desc) return _("近くの全てのアイテムと財宝を感知する。", "Detects all treasures and items in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_objects_normal(rad);
+                               detect_treasure(rad);
+                               detect_objects_gold(rad);
+                       }
+               }
+               break;
+
+       case 17:
+               if (name) return _("チャーム・モンスター", "Charm Monster");
+               if (desc) return _("モンスター1体を魅了する。抵抗されると無効。", "Attempts to charm a monster.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               charm_monster(dir, power);
+                       }
+               }
+               break;
+
+       case 18:
+               if (name) return _("精神感知", "Sense Minds");
+               if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
+
+               {
+                       int base = 25;
+                       int sides = 30;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               set_tim_esp(randint1(sides) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 19:
+               if (name) return _("街移動", "Teleport to town");
+               if (desc) return _("街へ移動する。地上にいるときしか使えない。", "Teleport to a town which you choose in a moment. Can only be used outdoors.");
+
+               {
+                       if (cast)
+                       {
+                               if (!tele_town()) return NULL;
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("自己分析", "Self Knowledge");
+               if (desc) return _("現在の自分の状態を完全に知る。",
+                       "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");
+
+               {
+                       if (cast)
+                       {
+                               self_knowledge();
+                       }
+               }
+               break;
+
+       case 21:
+               if (name) return _("テレポート・レベル", "Teleport Level");
+               if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");
+
+               {
+                       if (cast)
+                       {
+                               if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;
+                               teleport_level(0);
+                       }
+               }
+               break;
+
+       case 22:
+               if (name) return _("帰還の呪文", "Word of Recall");
+               if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",
+                       "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
+
+               {
+                       int base = 15;
+                       int sides = 20;
+
+                       if (info) return info_delay(base, sides);
+
+                       if (cast)
+                       {
+                               if (!word_of_recall()) return NULL;
+                       }
+               }
+               break;
+
+       case 23:
+               if (name) return _("次元の扉", "Dimension Door");
+               if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleport to given location.");
+
+               {
+                       POSITION range = plev / 2 + 10;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               msg_print(_("次元の扉が開いた。目的地を選んで下さい。", "You open a dimensional gate. Choose a destination."));
+                               if (!dimension_door()) return NULL;
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("調査", "Probing");
+               if (desc) return _("モンスターの属性、残り体力、最大体力、スピード、正体を知る。",
+                       "Proves all monsters' alignment, HP, speed and their true character.");
+
+               {
+                       if (cast)
+                       {
+                               probing();
+                       }
+               }
+               break;
+
+       case 25:
+               if (name) return _("爆発のルーン", "Explosive Rune");
+               if (desc) return _("自分のいる床の上に、モンスターが通ると爆発してダメージを与えるルーンを描く。",
+                       "Sets a glyph under you. The glyph will explode when a monster moves on it.");
+
+               {
+                       int dice = 7;
+                       int sides = 7;
+                       int base = plev;
+
+                       if (info) return info_damage(dice, sides, base);
+
+                       if (cast)
+                       {
+                               explosive_rune();
+                       }
+               }
+               break;
+
+       case 26:
+               if (name) return _("念動力", "Telekinesis");
+               if (desc) return _("アイテムを自分の足元へ移動させる。", "Pulls a distant item close to you.");
+
+               {
+                       int weight = plev * 15;
+
+                       if (info) return info_weight(weight);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fetch(dir, weight, FALSE);
+                       }
+               }
+               break;
+
+       case 27:
+               if (name) return _("千里眼", "Clairvoyance");
+               if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。さらに、一定時間テレパシー能力を得る。",
+                       "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");
+
+               {
+                       int base = 25;
+                       int sides = 30;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               chg_virtue(V_KNOWLEDGE, 1);
+                               chg_virtue(V_ENLIGHTEN, 1);
+
+                               wiz_lite(FALSE);
+
+                               if (!p_ptr->telepathy)
+                               {
+                                       set_tim_esp(randint1(sides) + base, FALSE);
+                               }
+                       }
+               }
+               break;
+
+       case 28:
+               if (name) return _("魅了の視線", "Charm monsters");
+               if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");
+
+               {
+                       int power = plev * 2;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               charm_monsters(power);
+                       }
+               }
+               break;
+
+       case 29:
+               if (name) return _("錬金術", "Alchemy");
+               if (desc) return _("アイテム1つをお金に変える。", "Turns an item into 1/3 of its value in gold.");
+
+               {
+                       if (cast)
+                       {
+                               if (!alchemy()) return NULL;
+                       }
+               }
+               break;
+
+       case 30:
+               if (name) return _("怪物追放", "Banishment");
+               if (desc) return _("視界内の全てのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all monsters in sight away unless resisted.");
+
+               {
+                       int power = plev * 4;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               banish_monsters(power);
+                       }
+               }
+               break;
+
+       case 31:
+               if (name) return _("無傷の球", "Globe of Invulnerability");
+               if (desc) return _("一定時間、ダメージを受けなくなるバリアを張る。切れた瞬間に少しターンを消費するので注意。",
+                       "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks or duration time is exceeded.");
+
+               {
+                       int base = 4;
+
+                       if (info) return info_duration(base, base);
+
+                       if (cast)
+                       {
+                               set_invuln(randint1(base) + base, FALSE);
+                       }
+               }
+               break;
+       }
+
+       return "";
+}
index 8046b4b..303e3d2 100644 (file)
-#include "angband.h"\r
-#include "cmd-spell.h"\r
-\r
-\r
-/*!\r
-* @brief \83g\83\89\83\93\83v\97Ì\88æ\96\82\96@\82Ì\8ae\8f\88\97\9d\82ð\8ds\82¤\r
-* @param spell \96\82\96@ID\r
-* @param mode \8f\88\97\9d\93à\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
-* @return SPELL_NAME / SPELL_DESC / SPELL_INFO \8e\9e\82É\82Í\95\8e\9a\97ñ\83|\83C\83\93\83^\82ð\95Ô\82·\81BSPELL_CAST\8e\9e\82ÍNULL\95\8e\9a\97ñ\82ð\95Ô\82·\81B\r
-*/\r
-cptr do_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[] = _("\83\89\83\93\83_\83\80", "random");\r
-\r
-       int dir;\r
-       int plev = p_ptr->lev;\r
-\r
-       switch (spell)\r
-       {\r
-       case 0:\r
-               if (name) return _("\83V\83\87\81[\83g\81E\83e\83\8c\83|\81[\83g", "Phase Door");\r
-               if (desc) return _("\8bß\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "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 _("\92\81\82Ì\83J\81[\83h", "Trump Spiders");\r
-               if (desc) return _("\92\81\82ð\8f¢\8a«\82·\82é\81B", "Summons spiders.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("\82 \82È\82½\82Í\92\81\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½\92\81\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned spiders get angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 2:\r
-               if (name) return _("\83V\83\83\83b\83t\83\8b", "Shuffle");\r
-               if (desc) return _("\83J\81[\83h\82Ì\90è\82¢\82ð\82·\82é\81B", "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 _("\83t\83\8d\83A\81E\83\8a\83Z\83b\83g", "Reset Recall");\r
-               if (desc) return _("\8dÅ\90[\8aK\82ð\95Ï\8dX\82·\82é\81B", "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 _("\83e\83\8c\83|\81[\83g", "Teleport");\r
-               if (desc) return _("\89\93\8b\97\97£\82Ì\83e\83\8c\83|\81[\83g\82ð\82·\82é\81B", "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 _("\8a´\92m\82Ì\83J\81[\83h", "Trump Spying");\r
-               if (desc) return _("\88ê\92è\8e\9e\8aÔ\81A\83e\83\8c\83p\83V\81[\94\\97Í\82ð\93¾\82é\81B", "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 _("\83e\83\8c\83|\81[\83g\81E\83\82\83\93\83X\83^\81[", "Teleport Away");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[\82ð\83e\83\8c\83|\81[\83g\82³\82¹\82é\83r\81[\83\80\82ð\95ú\82Â\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\93®\95¨\82Ì\83J\81[\83h", "Trump Animals");\r
-               if (desc) return _("1\91Ì\82Ì\93®\95¨\82ð\8f¢\8a«\82·\82é\81B", "Summons an animal.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);\r
-                               msg_print(_("\82 \82È\82½\82Í\93®\95¨\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½\93®\95¨\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned animal gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 8:\r
-               if (name) return _("\88Ú\93®\82Ì\83J\81[\83h", "Trump Reach");\r
-               if (desc) return _("\83A\83C\83e\83\80\82ð\8e©\95ª\82Ì\91«\8c³\82Ö\88Ú\93®\82³\82¹\82é\81B", "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 _("\83J\83~\83J\83[\82Ì\83J\81[\83h", "Trump Kamikaze");\r
-               if (desc) return _("\95¡\90\94\82Ì\94\9a\94­\82·\82é\83\82\83\93\83X\83^\81[\82ð\8f¢\8a«\82·\82é\81B", "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(_("\82 \82È\82½\82Í\83J\83~\83J\83[\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½\83\82\83\93\83X\83^\81[\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned creatures get angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 10:\r
-               if (name) return _("\8c\97ì\8f¢\8a«", "Phantasmal Servant");\r
-               if (desc) return _("1\91Ì\82Ì\97H\97ì\82ð\8f¢\8a«\82·\82é\81B", "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(_("\8cä\97p\82Å\82²\82´\82¢\82Ü\82·\82©\81A\8cä\8eå\90l\97l\81H", "'Your wish, master?'"));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 11:\r
-               if (name) return _("\83X\83s\81[\83h\81E\83\82\83\93\83X\83^\81[", "Haste Monster");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82ð\89Á\91¬\82³\82¹\82é\81B", "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 _("\83e\83\8c\83|\81[\83g\81E\83\8c\83x\83\8b", "Teleport Level");\r
-               if (desc) return _("\8fu\8e\9e\82É\8fã\82©\89º\82Ì\8aK\82É\83e\83\8c\83|\81[\83g\82·\82é\81B", "Teleport to up or down stairs in a moment.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               if (!get_check(_("\96{\93\96\82É\91¼\82Ì\8aK\82É\83e\83\8c\83|\81[\83g\82µ\82Ü\82·\82©\81H", "Are you sure? (Teleport Level)"))) return NULL;\r
-                               teleport_level(0);\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 13:\r
-               if (name) return _("\8e\9f\8c³\82Ì\94à", "Dimension Door");\r
-               if (desc) return _("\92Z\8b\97\97£\93à\82Ì\8ew\92è\82µ\82½\8fê\8f\8a\82É\83e\83\8c\83|\81[\83g\82·\82é\81B", "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(_("\8e\9f\8c³\82Ì\94à\82ª\8aJ\82¢\82½\81B\96Ú\93I\92n\82ð\91I\82ñ\82Å\89º\82³\82¢\81B", "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 _("\8bA\8aÒ\82Ì\8eô\95¶", "Word of Recall");\r
-               if (desc) return _("\92n\8fã\82É\82¢\82é\82Æ\82«\82Í\83_\83\93\83W\83\87\83\93\82Ì\8dÅ\90[\8aK\82Ö\81A\83_\83\93\83W\83\87\83\93\82É\82¢\82é\82Æ\82«\82Í\92n\8fã\82Ö\82Æ\88Ú\93®\82·\82é\81B",\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 _("\89ö\95¨\92Ç\95ú", "Banish");\r
-               if (desc) return _("\8e\8b\8aE\93à\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\82ð\83e\83\8c\83|\81[\83g\82³\82¹\82é\81B\92ï\8dR\82³\82ê\82é\82Æ\96³\8cø\81B", "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 _("\88Ê\92u\8cð\8a·\82Ì\83J\81[\83h", "Swap Position");\r
-               if (desc) return _("1\91Ì\82Ì\83\82\83\93\83X\83^\81[\82Æ\88Ê\92u\82ð\8cð\8a·\82·\82é\81B", "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 _("\83A\83\93\83f\83b\83h\82Ì\83J\81[\83h", "Trump Undead");\r
-               if (desc) return _("1\91Ì\82Ì\83A\83\93\83f\83b\83h\82ð\8f¢\8a«\82·\82é\81B", "Summons an undead monster.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("\82 \82È\82½\82Í\83A\83\93\83f\83b\83h\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½\83A\83\93\83f\83b\83h\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned undead creature gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 18:\r
-               if (name) return _("à¦\92\8e\97Þ\82Ì\83J\81[\83h", "Trump Reptiles");\r
-               if (desc) return _("1\91Ì\82Ì\83q\83h\83\89\82ð\8f¢\8a«\82·\82é\81B", "Summons a hydra.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("\82 \82È\82½\82Íà¦\92\8e\97Þ\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½à¦\92\8e\97Þ\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned reptile gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 19:\r
-               if (name) return _("\83\82\83\93\83X\83^\81[\82Ì\83J\81[\83h", "Trump Monsters");\r
-               if (desc) return _("\95¡\90\94\82Ì\83\82\83\93\83X\83^\81[\82ð\8f¢\8a«\82·\82é\81B", "Summons some monsters.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               int type;\r
-                               msg_print(_("\82 \82È\82½\82Í\83\82\83\93\83X\83^\81[\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½\83\82\83\93\83X\83^\81[\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned creatures get angry!"));\r
-                                       }\r
-                               }\r
-\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 20:\r
-               if (name) return _("\83n\83E\83\93\83h\82Ì\83J\81[\83h", "Trump Hounds");\r
-               if (desc) return _("1\83O\83\8b\81[\83v\82Ì\83n\83E\83\93\83h\82ð\8f¢\8a«\82·\82é\81B", "Summons a group of hounds.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("\82 \82È\82½\82Í\83n\83E\83\93\83h\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½\83n\83E\83\93\83h\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned hounds get angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 21:\r
-               if (name) return _("\83g\83\89\83\93\83v\82Ì\90n", "Trump Branding");\r
-               if (desc) return _("\95\90\8aí\82É\83g\83\89\83\93\83v\82Ì\91®\90«\82ð\82Â\82¯\82é\81B", "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 _("\90l\8aÔ\83g\83\89\83\93\83v", "Living Trump");\r
-               if (desc) return _("\83\89\83\93\83_\83\80\82É\83e\83\8c\83|\81[\83g\82·\82é\93Ë\91R\95Ï\88Ù\82©\81A\8e©\95ª\82Ì\88Ó\8ev\82Å\83e\83\8c\83|\81[\83g\82·\82é\93Ë\91R\95Ï\88Ù\82ª\90g\82É\82Â\82­\81B",\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(_("\82 \82È\82½\82Í\90\82«\82Ä\82¢\82é\83J\81[\83h\82É\95Ï\82í\82Á\82½\81B", "You have turned into a Living Trump."));\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 23:\r
-               if (name) return _("\83T\83C\83o\81[\83f\81[\83\82\83\93\82Ì\83J\81[\83h", "Trump Cyberdemon");\r
-               if (desc) return _("1\91Ì\82Ì\83T\83C\83o\81[\83f\81[\83\82\83\93\82ð\8f¢\8a«\82·\82é\81B", "Summons a cyber demon.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("\82 \82È\82½\82Í\83T\83C\83o\81[\83f\81[\83\82\83\93\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½\83T\83C\83o\81[\83f\81[\83\82\83\93\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned Cyberdemon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 24:\r
-               if (name) return _("\97\\8c©\82Ì\83J\81[\83h", "Trump Divination");\r
-               if (desc) return _("\8bß\82­\82Ì\91S\82Ä\82Ì\83\82\83\93\83X\83^\81[\81Aã©\81A\94à\81A\8aK\92i\81A\8dà\95ó\81A\82»\82µ\82Ä\83A\83C\83e\83\80\82ð\8a´\92m\82·\82é\81B",\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 _("\92m\8e¯\82Ì\83J\81[\83h", "Trump Lore");\r
-               if (desc) return _("\83A\83C\83e\83\80\82Ì\8e\9d\82Â\94\\97Í\82ð\8a®\91S\82É\92m\82é\81B", "*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 _("\89ñ\95\9c\83\82\83\93\83X\83^\81[", "Heal Monster");\r
-               if (desc) return _("\83\82\83\93\83X\83^\81[1\91Ì\82Ì\91Ì\97Í\82ð\89ñ\95\9c\82³\82¹\82é\81B", "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 _("\83h\83\89\83S\83\93\82Ì\83J\81[\83h", "Trump Dragon");\r
-               if (desc) return _("1\91Ì\82Ì\83h\83\89\83S\83\93\82ð\8f¢\8a«\82·\82é\81B", "Summons a dragon.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("\82 \82È\82½\82Í\83h\83\89\83S\83\93\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½\83h\83\89\83S\83\93\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned dragon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 28:\r
-               if (name) return _("è¦\90Î\82Ì\83J\81[\83h", "Trump Meteor");\r
-               if (desc) return _("\8e©\95ª\82Ì\8eü\95Ó\82Éè¦\90Î\82ð\97\8e\82Æ\82·\81B", "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 _("\83f\81[\83\82\83\93\82Ì\83J\81[\83h", "Trump Demon");\r
-               if (desc) return _("1\91Ì\82Ì\88«\96\82\82ð\8f¢\8a«\82·\82é\81B", "Summons a demon.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("\82 \82È\82½\82Í\83f\81[\83\82\83\93\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½\83f\81[\83\82\83\93\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned demon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 30:\r
-               if (name) return _("\92n\8d\96\82Ì\83J\81[\83h", "Trump Greater Undead");\r
-               if (desc) return _("1\91Ì\82Ì\8fã\8b\89\83A\83\93\83f\83b\83h\82ð\8f¢\8a«\82·\82é\81B", "Summons a greater undead.");\r
-\r
-               {\r
-                       if (cast || fail)\r
-                       {\r
-                               msg_print(_("\82 \82È\82½\82Í\8b­\97Í\82È\83A\83\93\83f\83b\83h\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½\8fã\8b\89\83A\83\93\83f\83b\83h\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned greater undead creature gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-\r
-       case 31:\r
-               if (name) return _("\8cÃ\91ã\83h\83\89\83S\83\93\82Ì\83J\81[\83h", "Trump Ancient Dragon");\r
-               if (desc) return _("1\91Ì\82Ì\8cÃ\91ã\83h\83\89\83S\83\93\82ð\8f¢\8a«\82·\82é\81B", "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(_("\82 \82È\82½\82Í\8cÃ\91ã\83h\83\89\83S\83\93\82Ì\83J\81[\83h\82É\8fW\92\86\82·\82é...", "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(_("\8f¢\8a«\82³\82ê\82½\8cÃ\91ã\83h\83\89\83S\83\93\82Í\93{\82Á\82Ä\82¢\82é\81I", "The summoned ancient dragon gets angry!"));\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               break;\r
-       }\r
-\r
-       return "";\r
-}\r
+#include "angband.h"
+#include "cmd-spell.h"
+
+
+/*!
+* @brief トランプ領域魔法の各処理を行う
+* @param spell 魔法ID
+* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
+* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+*/
+cptr do_trump_spell(SPELL_IDX spell, BIT_FLAGS 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 fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
+       static const char s_random[] = _("ランダム", "random");
+
+       int dir;
+       int plev = p_ptr->lev;
+
+       switch (spell)
+       {
+       case 0:
+               if (name) return _("ショート・テレポート", "Phase Door");
+               if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");
+
+               {
+                       POSITION range = 10;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               teleport_player(range, 0L);
+                       }
+               }
+               break;
+
+       case 1:
+               if (name) return _("蜘蛛のカード", "Trump Spiders");
+               if (desc) return _("蜘蛛を召喚する。", "Summons spiders.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたは蜘蛛のカードに集中する...", "You concentrate on the trump of an spider..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚された蜘蛛は怒っている!", "The summoned spiders get angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 2:
+               if (name) return _("シャッフル", "Shuffle");
+               if (desc) return _("カードの占いをする。", "Causes random effects.");
+
+               {
+                       if (info) return s_random;
+
+                       if (cast)
+                       {
+                               cast_shuffle();
+                       }
+               }
+               break;
+
+       case 3:
+               if (name) return _("フロア・リセット", "Reset Recall");
+               if (desc) return _("最深階を変更する。", "Resets the 'deepest' level for recall spell.");
+
+               {
+                       if (cast)
+                       {
+                               if (!reset_recall()) return NULL;
+                       }
+               }
+               break;
+
+       case 4:
+               if (name) return _("テレポート", "Teleport");
+               if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");
+
+               {
+                       POSITION range = plev * 4;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               teleport_player(range, 0L);
+                       }
+               }
+               break;
+
+       case 5:
+               if (name) return _("感知のカード", "Trump Spying");
+               if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while.");
+
+               {
+                       int base = 25;
+                       int sides = 30;
+
+                       if (info) return info_duration(base, sides);
+
+                       if (cast)
+                       {
+                               set_tim_esp(randint1(sides) + base, FALSE);
+                       }
+               }
+               break;
+
+       case 6:
+               if (name) return _("テレポート・モンスター", "Teleport Away");
+               if (desc) return _("モンスターをテレポートさせるビームを放つ。抵抗されると無効。", "Teleports all monsters on the line away unless resisted.");
+
+               {
+                       int power = plev;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fire_beam(GF_AWAY_ALL, dir, power);
+                       }
+               }
+               break;
+
+       case 7:
+               if (name) return _("動物のカード", "Trump Animals");
+               if (desc) return _("1体の動物を召喚する。", "Summons an animal.");
+
+               {
+                       if (cast || fail)
+                       {
+                               int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
+                               msg_print(_("あなたは動物のカードに集中する...", "You concentrate on the trump of an animal..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚された動物は怒っている!", "The summoned animal gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 8:
+               if (name) return _("移動のカード", "Trump Reach");
+               if (desc) return _("アイテムを自分の足元へ移動させる。", "Pulls a distant item close to you.");
+
+               {
+                       int weight = plev * 15;
+
+                       if (info) return info_weight(weight);
+
+                       if (cast)
+                       {
+                               if (!get_aim_dir(&dir)) return NULL;
+
+                               fetch(dir, weight, FALSE);
+                       }
+               }
+               break;
+
+       case 9:
+               if (name) return _("カミカゼのカード", "Trump Kamikaze");
+               if (desc) return _("複数の爆発するモンスターを召喚する。", "Summons monsters which explode by itself.");
+
+               {
+                       if (cast || fail)
+                       {
+                               int x, y;
+                               int type;
+
+                               if (cast)
+                               {
+                                       if (!target_set(TARGET_KILL)) return NULL;
+                                       x = target_col;
+                                       y = target_row;
+                               }
+                               else
+                               {
+                                       /* Summons near player when failed */
+                                       x = p_ptr->x;
+                                       y = p_ptr->y;
+                               }
+
+                               if (p_ptr->pclass == CLASS_BEASTMASTER)
+                                       type = SUMMON_KAMIKAZE_LIVING;
+                               else
+                                       type = SUMMON_KAMIKAZE;
+
+                               msg_print(_("あなたはカミカゼのカードに集中する...", "You concentrate on several trumps at once..."));
+                               if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 10:
+               if (name) return _("幻霊召喚", "Phantasmal Servant");
+               if (desc) return _("1体の幽霊を召喚する。", "Summons a ghost.");
+
+               {
+                       /* Phantasmal Servant is not summoned as enemy when failed */
+                       if (cast)
+                       {
+                               int summon_lev = plev * 2 / 3 + randint1(plev / 2);
+
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))
+                               {
+                                       msg_print(_("御用でございますか、御主人様?", "'Your wish, master?'"));
+                               }
+                       }
+               }
+               break;
+
+       case 11:
+               if (name) return _("スピード・モンスター", "Haste Monster");
+               if (desc) return _("モンスター1体を加速させる。", "Hastes a monster.");
+
+               {
+                       if (cast)
+                       {
+                               bool result;
+
+                               /* Temporary enable target_pet option */
+                               bool old_target_pet = target_pet;
+                               target_pet = TRUE;
+
+                               result = get_aim_dir(&dir);
+
+                               /* Restore target_pet option */
+                               target_pet = old_target_pet;
+
+                               if (!result) return NULL;
+
+                               speed_monster(dir, plev);
+                       }
+               }
+               break;
+
+       case 12:
+               if (name) return _("テレポート・レベル", "Teleport Level");
+               if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");
+
+               {
+                       if (cast)
+                       {
+                               if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;
+                               teleport_level(0);
+                       }
+               }
+               break;
+
+       case 13:
+               if (name) return _("次元の扉", "Dimension Door");
+               if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleport to given location.");
+
+               {
+                       POSITION range = plev / 2 + 10;
+
+                       if (info) return info_range(range);
+
+                       if (cast)
+                       {
+                               msg_print(_("次元の扉が開いた。目的地を選んで下さい。", "You open a dimensional gate. Choose a destination."));
+                               if (!dimension_door()) return NULL;
+                       }
+               }
+               break;
+
+       case 14:
+               if (name) return _("帰還の呪文", "Word of Recall");
+               if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",
+                       "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
+
+               {
+                       int base = 15;
+                       int sides = 20;
+
+                       if (info) return info_delay(base, sides);
+
+                       if (cast)
+                       {
+                               if (!word_of_recall()) return NULL;
+                       }
+               }
+               break;
+
+       case 15:
+               if (name) return _("怪物追放", "Banish");
+               if (desc) return _("視界内の全てのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all monsters in sight away unless resisted.");
+
+               {
+                       int power = plev * 4;
+
+                       if (info) return info_power(power);
+
+                       if (cast)
+                       {
+                               banish_monsters(power);
+                       }
+               }
+               break;
+
+       case 16:
+               if (name) return _("位置交換のカード", "Swap Position");
+               if (desc) return _("1体のモンスターと位置を交換する。", "Swap positions of you and a monster.");
+
+               {
+                       if (cast)
+                       {
+                               bool result;
+
+                               /* HACK -- No range limit */
+                               project_length = -1;
+
+                               result = get_aim_dir(&dir);
+
+                               /* Restore range to default */
+                               project_length = 0;
+
+                               if (!result) return NULL;
+
+                               teleport_swap(dir);
+                       }
+               }
+               break;
+
+       case 17:
+               if (name) return _("アンデッドのカード", "Trump Undead");
+               if (desc) return _("1体のアンデッドを召喚する。", "Summons an undead monster.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたはアンデッドのカードに集中する...", "You concentrate on the trump of an undead creature..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_UNDEAD, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたアンデッドは怒っている!", "The summoned undead creature gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 18:
+               if (name) return _("爬虫類のカード", "Trump Reptiles");
+               if (desc) return _("1体のヒドラを召喚する。", "Summons a hydra.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたは爬虫類のカードに集中する...", "You concentrate on the trump of a reptile..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HYDRA, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚された爬虫類は怒っている!", "The summoned reptile gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 19:
+               if (name) return _("モンスターのカード", "Trump Monsters");
+               if (desc) return _("複数のモンスターを召喚する。", "Summons some monsters.");
+
+               {
+                       if (cast || fail)
+                       {
+                               int type;
+                               msg_print(_("あなたはモンスターのカードに集中する...", "You concentrate on several trumps at once..."));
+                               if (p_ptr->pclass == CLASS_BEASTMASTER)
+                                       type = SUMMON_LIVING;
+                               else
+                                       type = 0;
+
+                               if (trump_summoning((1 + (plev - 15) / 10), !fail, p_ptr->y, p_ptr->x, 0, type, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたモンスターは怒っている!", "The summoned creatures get angry!"));
+                                       }
+                               }
+
+                       }
+               }
+               break;
+
+       case 20:
+               if (name) return _("ハウンドのカード", "Trump Hounds");
+               if (desc) return _("1グループのハウンドを召喚する。", "Summons a group of hounds.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたはハウンドのカードに集中する...", "You concentrate on the trump of a hound..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HOUND, PM_ALLOW_GROUP))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたハウンドは怒っている!", "The summoned hounds get angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 21:
+               if (name) return _("トランプの刃", "Trump Branding");
+               if (desc) return _("武器にトランプの属性をつける。", "Makes current weapon a Trump weapon.");
+
+               {
+                       if (cast)
+                       {
+                               brand_weapon(5);
+                       }
+               }
+               break;
+
+       case 22:
+               if (name) return _("人間トランプ", "Living Trump");
+               if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。",
+                       "Gives mutation which makes you teleport randomly or makes you able to teleport at will.");
+
+               {
+                       if (cast)
+                       {
+                               int mutation;
+
+                               if (one_in_(7))
+                                       /* Teleport control */
+                                       mutation = 12;
+                               else
+                                       /* Random teleportation (uncontrolled) */
+                                       mutation = 77;
+
+                               /* Gain the mutation */
+                               if (gain_random_mutation(mutation))
+                               {
+                                       msg_print(_("あなたは生きているカードに変わった。", "You have turned into a Living Trump."));
+                               }
+                       }
+               }
+               break;
+
+       case 23:
+               if (name) return _("サイバーデーモンのカード", "Trump Cyberdemon");
+               if (desc) return _("1体のサイバーデーモンを召喚する。", "Summons a cyber demon.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたはサイバーデーモンのカードに集中する...", "You concentrate on the trump of a Cyberdemon..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_CYBER, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 24:
+               if (name) return _("予見のカード", "Trump Divination");
+               if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。",
+                       "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
+
+               {
+                       int rad = DETECT_RAD_DEFAULT;
+
+                       if (info) return info_radius(rad);
+
+                       if (cast)
+                       {
+                               detect_all(rad);
+                       }
+               }
+               break;
+
+       case 25:
+               if (name) return _("知識のカード", "Trump Lore");
+               if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item.");
+
+               {
+                       if (cast)
+                       {
+                               if (!identify_fully(FALSE)) return NULL;
+                       }
+               }
+               break;
+
+       case 26:
+               if (name) return _("回復モンスター", "Heal Monster");
+               if (desc) return _("モンスター1体の体力を回復させる。", "Heal a monster.");
+
+               {
+                       int heal = plev * 10 + 200;
+
+                       if (info) return info_heal(0, 0, heal);
+
+                       if (cast)
+                       {
+                               bool result;
+
+                               /* Temporary enable target_pet option */
+                               bool old_target_pet = target_pet;
+                               target_pet = TRUE;
+
+                               result = get_aim_dir(&dir);
+
+                               /* Restore target_pet option */
+                               target_pet = old_target_pet;
+
+                               if (!result) return NULL;
+
+                               heal_monster(dir, heal);
+                       }
+               }
+               break;
+
+       case 27:
+               if (name) return _("ドラゴンのカード", "Trump Dragon");
+               if (desc) return _("1体のドラゴンを召喚する。", "Summons a dragon.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたはドラゴンのカードに集中する...", "You concentrate on the trump of a dragon..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DRAGON, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたドラゴンは怒っている!", "The summoned dragon gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 28:
+               if (name) return _("隕石のカード", "Trump Meteor");
+               if (desc) return _("自分の周辺に隕石を落とす。", "Makes meteor balls fall down to nearby random locations.");
+
+               {
+                       HIT_POINT dam = plev * 2;
+                       int rad = 2;
+
+                       if (info) return info_multi_damage(dam);
+
+                       if (cast)
+                       {
+                               cast_meteor(dam, rad);
+                       }
+               }
+               break;
+
+       case 29:
+               if (name) return _("デーモンのカード", "Trump Demon");
+               if (desc) return _("1体の悪魔を召喚する。", "Summons a demon.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたはデーモンのカードに集中する...", "You concentrate on the trump of a demon..."));
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_DEMON, 0L))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚されたデーモンは怒っている!", "The summoned demon gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 30:
+               if (name) return _("地獄のカード", "Trump Greater Undead");
+               if (desc) return _("1体の上級アンデッドを召喚する。", "Summons a greater undead.");
+
+               {
+                       if (cast || fail)
+                       {
+                               msg_print(_("あなたは強力なアンデッドのカードに集中する...", "You concentrate on the trump of a greater undead being..."));
+                               /* May allow unique depend on level and dice roll */
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead creature gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+
+       case 31:
+               if (name) return _("古代ドラゴンのカード", "Trump Ancient Dragon");
+               if (desc) return _("1体の古代ドラゴンを召喚する。", "Summons an ancient dragon.");
+
+               {
+                       if (cast)
+                       {
+                               int type;
+
+                               if (p_ptr->pclass == CLASS_BEASTMASTER)
+                                       type = SUMMON_HI_DRAGON_LIVING;
+                               else
+                                       type = SUMMON_HI_DRAGON;
+
+                               msg_print(_("あなたは古代ドラゴンのカードに集中する...", "You concentrate on the trump of an ancient dragon..."));
+                               /* May allow unique depend on level and dice roll */
+                               if (trump_summoning(1, !fail, p_ptr->y, p_ptr->x, 0, type, PM_ALLOW_UNIQUE))
+                               {
+                                       if (fail)
+                                       {
+                                               msg_print(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon gets angry!"));
+                                       }
+                               }
+                       }
+               }
+               break;
+       }
+
+       return "";
+}