OSDN Git Service

#37287 #37353 (2.2.0.89) 型の置換を継続中。 / Ongoing type replacement.
[hengband/hengband.git] / src / melee1.c
index c8c2858..fc0f17c 100644 (file)
@@ -1,24 +1,30 @@
-/* File: melee1.c */
-
-/* Purpose: Monster attacks */
-
-/*
- * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
- *
- * This software may be copied and distributed for educational, research,
- * and not for profit purposes provided that this copyright and statement
- * are included in all such copies.  Other copyrights may also apply.
+/*!
+ * @file melee1.c
+ * @brief モンスターの打撃処理 / Monster attacks
+ * @date 2014/01/17
+ * @author
+ * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n
+ * This software may be copied and distributed for educational, research,\n
+ * and not for profit purposes provided that this copyright and statement\n
+ * are included in all such copies.  Other copyrights may also apply.\n
+ * 2014 Deskull rearranged comment for Doxygen.\n
+ * @details
  */
 
 #include "angband.h"
 
 
-/*
- * Critical blow.  All hits that do 95% of total possible damage,
+/*!
+ * @brief モンスター打撃のクリティカルランクを返す /
+ * Critical blow. All hits that do 95% of total possible damage,
+ * @param dice モンスター打撃のダイス数
+ * @param sides モンスター打撃の最大ダイス目
+ * @param dam プレイヤーに与えたダメージ
+ * @details
  * and which also do at least 20 damage, or, sometimes, N damage.
  * This is used only to determine "cuts" and "stuns".
  */
-static int monster_critical(int dice, int sides, int dam)
+static int monster_critical(int dice, int sides, HIT_POINT dam)
 {
        int max = 0;
        int total = dice * sides;
@@ -47,12 +53,14 @@ static int monster_critical(int dice, int sides, int dam)
        return (1 + max);
 }
 
-
-
-
-
-/*
+/*!
+ * @brief モンスター打撃の命中を判定する /
  * Determine if a monster attack against the player succeeds.
+ * @param power 打撃属性毎の基本命中値
+ * @param level モンスターのレベル
+ * @param stun モンスターの朦朧値
+ * @return TRUEならば命中判定
+ * @details
  * Always miss 5% of the time, Always hit 5% of the time.
  * Otherwise, match monster power against player armor.
  */
@@ -84,22 +92,20 @@ static int check_hit(int power, int level, int stun)
 
 
 
-/*
- * Hack -- possible "insult" messages
- */
+/*! モンスターの侮辱行為メッセージテーブル / Hack -- possible "insult" messages */
 static cptr desc_insult[] =
 {
 #ifdef JP
-       "¤¬¤¢¤Ê¤¿¤òÉî¿«¤·¤¿¡ª",
-       "¤¬¤¢¤Ê¤¿¤ÎÊì¤òÉî¿«¤·¤¿¡ª",
-       "¤¬¤¢¤Ê¤¿¤ò·ÚÊΤ·¤¿¡ª",
-       "¤¬¤¢¤Ê¤¿¤ò¿«¤á¤¿¡ª",
-       "¤¬¤¢¤Ê¤¿¤ò±ø¤·¤¿¡ª",
-       "¤¬¤¢¤Ê¤¿¤Î²ó¤ê¤ÇÍ٤ä¿¡ª",
-       "¤¬àÐêø¤Ê¿È¤Ö¤ê¤ò¤·¤¿¡ª",
-       "¤¬¤¢¤Ê¤¿¤ò¤Ü¤ó¤ä¤ê¤È¸«¤¿¡ª¡ª¡ª",
-       "¤¬¤¢¤Ê¤¿¤ò¥Ñ¥é¥µ¥¤¥È¸Æ¤Ð¤ï¤ê¤·¤¿¡ª",
-       "¤¬¤¢¤Ê¤¿¤ò¥µ¥¤¥Ü¡¼¥°°·¤¤¤·¤¿¡ª"
+       "があなたを侮辱した!",
+       "があなたの母を侮辱した!",
+       "があなたを軽蔑した!",
+       "があなたを辱めた!",
+       "があなたを汚した!",
+       "があなたの回りで踊った!",
+       "が猥褻な身ぶりをした!",
+       "があなたをぼんやりと見た!!!",
+       "があなたをパラサイト呼ばわりした!",
+       "があなたをサイボーグ扱いした!"
 #else
        "insults you!",
        "insults your mother!",
@@ -116,17 +122,14 @@ static cptr desc_insult[] =
 };
 
 
-
-/*
- * Hack -- possible "insult" messages
- */
+/*! マゴットのぼやきメッセージテーブル / Hack -- possible "insult" messages */
 static cptr desc_moan[] =
 {
 #ifdef JP
-       "¤Ï²¿¤«¤òÈᤷ¤ó¤Ç¤¤¤ë¤è¤¦¤À¡£",
-       "¤¬Èà¤Î»ô¤¤¸¤¤ò¸«¤Ê¤«¤Ã¤¿¤«¤È¿Ò¤Í¤Æ¤¤¤ë¡£",
-       "¤¬ÆìÄ¥¤ê¤«¤é½Ð¤Æ¹Ô¤±¤È¸À¤Ã¤Æ¤¤¤ë¡£",
-       "¤Ï¥­¥Î¥³¤¬¤É¤¦¤È¤«Ò줤¤Æ¤¤¤ë¡£"
+       "は何かを悲しんでいるようだ。",
+       "が彼の飼い犬を見なかったかと尋ねている。",
+       "が縄張りから出て行けと言っている。",
+       "はキノコがどうとか呟いている。"
 #else
        "seems sad about something.",
        "asks if you have seen his dogs.",
@@ -137,13 +140,14 @@ static cptr desc_moan[] =
 };
 
 
-/*
- * Attack the player via physical attacks.
+/*!
+ * @brief モンスターからプレイヤーへの打撃処理 / Attack the player via physical attacks.
+ * @param m_idx 打撃を行うモンスターのID
+ * @return 実際に攻撃処理を行った場合TRUEを返す
  */
-bool make_attack_normal(int m_idx)
+bool make_attack_normal(MONSTER_IDX m_idx)
 {
        monster_type *m_ptr = &m_list[m_idx];
-
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
        int ap_cnt;
@@ -165,10 +169,8 @@ bool make_attack_normal(int m_idx)
        bool touched = FALSE, fear = FALSE, alive = TRUE;
        bool explode = FALSE;
        bool do_silly_attack = (one_in_(2) && p_ptr->image);
-       int get_damage = 0;
-#ifdef JP
+       HIT_POINT get_damage = 0;
        int abbreviate = 0;
-#endif
 
        /* Not allowed to attack */
        if (r_ptr->flags1 & (RF1_NEVER_BLOW)) return (FALSE);
@@ -190,18 +192,13 @@ bool make_attack_normal(int m_idx)
 
        if (p_ptr->special_defense & KATA_IAI)
        {
-#ifdef JP
-               msg_print("Áê¼ê¤¬½±¤¤¤«¤«¤ëÁ°¤ËÁÇÁ᤯Éð´ï¤ò¿¶¤ë¤Ã¤¿¡£");
-#else
-               msg_format("You took sen, draw and cut in one motion before %s move.", m_name);
-#endif
+               msg_format(_("相手が襲いかかる前に素早く武器を振るった。", "You took sen, draw and cut in one motion before %s move."), m_name);
                if (py_attack(m_ptr->fy, m_ptr->fx, HISSATSU_IAI)) return TRUE;
        }
 
        if ((p_ptr->special_defense & NINJA_KAWARIMI) && (randint0(55) < (p_ptr->lev*3/5+20)))
        {
-               kawarimi(TRUE);
-               return TRUE;
+               if (kawarimi(TRUE)) return TRUE;
        }
 
        /* Assume no blink */
@@ -212,8 +209,8 @@ bool make_attack_normal(int m_idx)
        {
                bool obvious = FALSE;
 
-               int power = 0;
-               int damage = 0;
+               HIT_POINT power = 0;
+               HIT_POINT damage = 0;
 
                cptr act = NULL;
 
@@ -237,7 +234,7 @@ bool make_attack_normal(int m_idx)
 
                /* Stop if player is dead or gone */
                if (!p_ptr->playing || p_ptr->is_dead) break;
-               if (distance(py, px, m_ptr->fy, m_ptr->fx) > 1) break;
+               if (distance(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx) > 1) break;
 
                /* Handle "leaving" */
                if (p_ptr->leaving) break;
@@ -254,7 +251,7 @@ bool make_attack_normal(int m_idx)
                if (!effect || check_hit(power, rlev, MON_STUNNED(m_ptr)))
                {
                        /* Always disturbing */
-                       disturb(1, 0);
+                       disturb(1, 1);
 
 
                        /* Hack -- Apply "protection from evil" */
@@ -269,10 +266,10 @@ bool make_attack_normal(int m_idx)
                                /* Message */
 #ifdef JP
                                if (abbreviate)
-                                   msg_format("·âÂष¤¿¡£");
+                                   msg_format("撃退した。");
                                else
-                                   msg_format("%^s¤Ï·âÂव¤ì¤¿¡£", m_name);
-                               abbreviate = 1;/*£²²óÌܰʹߤϾÊά */
+                                   msg_format("%^sは撃退された。", m_name);
+                               abbreviate = 1;/*2回目以降は省略 */
 #else
                                msg_format("%^s is repelled.", m_name);
 #endif
@@ -291,12 +288,7 @@ bool make_attack_normal(int m_idx)
                        {
                                case RBM_HIT:
                                {
-#ifdef JP
-                                       act = "²¥¤é¤ì¤¿¡£";
-#else
-                                       act = "hits you.";
-#endif
-
+                                       act = _("殴られた。", "hits you.");
                                        do_cut = do_stun = 1;
                                        touched = TRUE;
                                        sound(SOUND_HIT);
@@ -305,12 +297,7 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_TOUCH:
                                {
-#ifdef JP
-                                       act = "¿¨¤é¤ì¤¿¡£";
-#else
-                                       act = "touches you.";
-#endif
-
+                                       act = _("触られた。", "touches you.");
                                        touched = TRUE;
                                        sound(SOUND_TOUCH);
                                        break;
@@ -318,12 +305,7 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_PUNCH:
                                {
-#ifdef JP
-                                       act = "¥Ñ¥ó¥Á¤µ¤ì¤¿¡£";
-#else
-                                       act = "punches you.";
-#endif
-
+                                       act = _("パンチされた。", "punches you.");
                                        touched = TRUE;
                                        do_stun = 1;
                                        sound(SOUND_HIT);
@@ -332,12 +314,7 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_KICK:
                                {
-#ifdef JP
-                                       act = "½³¤é¤ì¤¿¡£";
-#else
-                                       act = "kicks you.";
-#endif
-
+                                       act = _("蹴られた。", "kicks you.");
                                        touched = TRUE;
                                        do_stun = 1;
                                        sound(SOUND_HIT);
@@ -346,12 +323,7 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_CLAW:
                                {
-#ifdef JP
-                                       act = "¤Ò¤Ã¤«¤«¤ì¤¿¡£";
-#else
-                                       act = "claws you.";
-#endif
-
+                                       act = _("ひっかかれた。", "claws you.");
                                        touched = TRUE;
                                        do_cut = 1;
                                        sound(SOUND_CLAW);
@@ -360,12 +332,7 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_BITE:
                                {
-#ifdef JP
-                                       act = "³ú¤Þ¤ì¤¿¡£";
-#else
-                                       act = "bites you.";
-#endif
-
+                                       act = _("噛まれた。", "bites you.");
                                        do_cut = 1;
                                        touched = TRUE;
                                        sound(SOUND_BITE);
@@ -374,12 +341,7 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_STING:
                                {
-#ifdef JP
-                                       act = "»É¤µ¤ì¤¿¡£";
-#else
-                                       act = "stings you.";
-#endif
-
+                                       act = _("刺された。", "stings you.");
                                        touched = TRUE;
                                        sound(SOUND_STING);
                                        break;
@@ -387,12 +349,7 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_SLASH:
                                {
-#ifdef JP
-                                       act = "»Â¤é¤ì¤¿¡£";
-#else
-                                       act = "slashes you.";
-#endif
-
+                                       act = _("斬られた。", "slashes you.");
                                        touched = TRUE;
                                        do_cut = 1;
                                        sound(SOUND_CLAW);
@@ -401,12 +358,7 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_BUTT:
                                {
-#ifdef JP
-                                       act = "³Ñ¤ÇÆͤ«¤ì¤¿¡£";
-#else
-                                       act = "butts you.";
-#endif
-
+                                       act = _("角で突かれた。", "butts you.");
                                        do_stun = 1;
                                        touched = TRUE;
                                        sound(SOUND_HIT);
@@ -415,12 +367,7 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_CRUSH:
                                {
-#ifdef JP
-                                       act = "ÂÎÅö¤¿¤ê¤µ¤ì¤¿¡£";
-#else
-                                       act = "crushes you.";
-#endif
-
+                                       act = _("体当たりされた。", "crushes you.");
                                        do_stun = 1;
                                        touched = TRUE;
                                        sound(SOUND_CRUSH);
@@ -429,12 +376,7 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_ENGULF:
                                {
-#ifdef JP
-                                       act = "°û¤ß¹þ¤Þ¤ì¤¿¡£";
-#else
-                                       act = "engulfs you.";
-#endif
-
+                                       act = _("飲み込まれた。", "engulfs you.");
                                        touched = TRUE;
                                        sound(SOUND_CRUSH);
                                        break;
@@ -442,13 +384,8 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_CHARGE:
                                {
-#ifdef JP
                                        abbreviate = -1;
-                                       act = "¤ÏÀÁµá½ñ¤ò¤è¤³¤·¤¿¡£";
-#else
-                                       act = "charges you.";
-#endif
-
+                                       act = _("は請求書をよこした。", "charges you.");
                                        touched = TRUE;
                                        sound(SOUND_BUY); /* Note! This is "charges", not "charges at". */
                                        break;
@@ -456,13 +393,8 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_CRAWL:
                                {
-#ifdef JP
                                        abbreviate = -1;
-                                       act = "¤¬ÂΤξå¤òÇ礤²ó¤Ã¤¿¡£";
-#else
-                                       act = "crawls on you.";
-#endif
-
+                                       act = _("が体の上を這い回った。", "crawls on you.");
                                        touched = TRUE;
                                        sound(SOUND_SLIME);
                                        break;
@@ -470,96 +402,56 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_DROOL:
                                {
-#ifdef JP
-                                       act = "¤è¤À¤ì¤ò¤¿¤é¤µ¤ì¤¿¡£";
-#else
-                                       act = "drools on you.";
-#endif
-
+                                       act = _("よだれをたらされた。", "drools on you.");
                                        sound(SOUND_SLIME);
                                        break;
                                }
 
                                case RBM_SPIT:
                                {
-#ifdef JP
-                                       act = "ÂäòÅǤ«¤ì¤¿¡£";
-#else
-                                       act = "spits on you.";
-#endif
-
+                                       act = _("唾を吐かれた。", "spits on you.");
                                        sound(SOUND_SLIME);
                                        break;
                                }
 
                                case RBM_EXPLODE:
                                {
-#ifdef JP
                                        abbreviate = -1;
-                                       act = "¤ÏÇúȯ¤·¤¿¡£";
-#else
-                                       act = "explodes.";
-#endif
-
+                                       act = _("は爆発した。", "explodes.");
                                        explode = TRUE;
                                        break;
                                }
 
                                case RBM_GAZE:
                                {
-#ifdef JP
-                                       act = "¤Ë¤é¤Þ¤ì¤¿¡£";
-#else
-                                       act = "gazes at you.";
-#endif
-
+                                       act = _("にらまれた。", "gazes at you.");
                                        break;
                                }
 
                                case RBM_WAIL:
                                {
-#ifdef JP
-                                       act = "µã¤­¶«¤Ð¤ì¤¿¡£";
-#else
-                                       act = "wails at you.";
-#endif
-
+                                       act = _("泣き叫ばれた。", "wails at you.");
                                        sound(SOUND_WAIL);
                                        break;
                                }
 
                                case RBM_SPORE:
                                {
-#ifdef JP
-                                       act = "˦»Ò¤òÈô¤Ð¤µ¤ì¤¿¡£";
-#else
-                                       act = "releases spores at you.";
-#endif
-
+                                       act = _("胞子を飛ばされた。", "releases spores at you.");
                                        sound(SOUND_SLIME);
                                        break;
                                }
 
                                case RBM_XXX4:
                                {
-#ifdef JP
                                        abbreviate = -1;
-                                       act = "¤¬ XXX4 ¤òȯ¼Í¤·¤¿¡£";
-#else
-                                       act = "projects XXX4's at you.";
-#endif
-
+                                       act = _("が XXX4 を発射した。", "projects XXX4's at you.");
                                        break;
                                }
 
                                case RBM_BEG:
                                {
-#ifdef JP
-                                       act = "¶â¤ò¤»¤¬¤Þ¤ì¤¿¡£";
-#else
-                                       act = "begs you for money.";
-#endif
-
+                                       act = _("金をせがまれた。", "begs you for money.");
                                        sound(SOUND_MOAN);
                                        break;
                                }
@@ -597,43 +489,43 @@ bool make_attack_normal(int m_idx)
                                                  case 1:
                                                  case 6:
                                                  case 11:
-                                                       act = "¡Ö¢ö¤ª¡Á¤ì¤Ï¥¸¥ã¥¤¥¢¥ó¡Á¡Á¥¬¡Á¥­¤À¤¤¤·¤ç¤¦¡Á¡×";
+                                                       act = "「♪お~れはジャイアン~~ガ~キだいしょう~」";
                                                        break;
                                                  case 2:
-                                                       act = "¡Ö¢ö¤Æ¡Á¤ó¤«¤à¡Á¤Æ¤­¤Î¤ª¡Á¤È¤³¤À¤¼¡Á¡Á¡×";
+                                                       act = "「♪て~んかむ~てきのお~とこだぜ~~」";
                                                        break;
                                                  case 3:
-                                                       act = "¡Ö¢ö¤Î¡Á¤ÓÂÀ¥¹¥ÍÉפϥᤸ¤ã¤Ê¤¤¤è¡Á¡Á¡×";
+                                                       act = "「♪の~び太スネ夫はメじゃないよ~~」";
                                                        break;
                                                  case 4:
-                                                       act = "¡Ö¢ö¤±¡Á¤ó¤«¥¹¥Ý¡Á¥Ä¡Á¤É¤ó¤È¤³¤¤¡Á¡×";
+                                                       act = "「♪け~んかスポ~ツ~どんとこい~」";
                                                        break;
                                                  case 5:
-                                                       act = "¡Ö¢ö¤¦¤¿¡Á¤â¡Á¡Á¤¦¡Á¤Þ¤¤¤¼¡Á¤Þ¤«¤·¤È¤±¡Á¡×";
+                                                       act = "「♪うた~も~~う~まいぜ~まかしとけ~」";
                                                        break;
                                                  case 7:
-                                                       act = "¡Ö¢ö¤Þ¡Á¤Á¤¤¤Á¤Ð¡Á¤ó¤Î¤Ë¡Á¤ó¤­¤â¤Î¡Á¡Á¡×";
+                                                       act = "「♪ま~ちいちば~んのに~んきもの~~」";
                                                        break;
                                                  case 8:
-                                                       act = "¡Ö¢ö¤Ù¤ó¤­¤ç¤¦¤·¤å¤¯¤À¤¤¥á¤¸¤ã¤Ê¤¤¤è¡Á¡Á¡×";
+                                                       act = "「♪べんきょうしゅくだいメじゃないよ~~」";
                                                        break;
                                                  case 9:
-                                                       act = "¡Ö¢ö¤­¤Ï¤ä¤µ¤·¡Á¤¯¤Æ¡Á¤Á¡Á¤«¤é¤â¤Á¡Á¡×";
+                                                       act = "「♪きはやさし~くて~ち~からもち~」";
                                                        break;
                                                  case 10:
-                                                       act = "¡Ö¢ö¤«¤ª¡Á¤â¡Á¡Á¥¹¥¿¥¤¥ë¤â¡Á¥Ð¥Ä¥°¥ó¤µ¡Á¡×";
+                                                       act = "「♪かお~も~~スタイルも~バツグンさ~」";
                                                        break;
                                                  case 12:
-                                                       act = "¡Ö¢ö¤¬¤Ã¤³¤¦¤¤¡Á¤Á¤Î¡Á¤¢¡Á¤Ð¤ì¤ó¤Ü¤¦¡Á¡Á¡×";
+                                                       act = "「♪がっこうい~ちの~あ~ばれんぼう~~」";
                                                        break;
                                                  case 13:
-                                                       act = "¡Ö¢ö¥É¡Á¥é¤â¥É¥é¥ß¤â¥á¤¸¤ã¤Ê¤¤¤è¡Á¡Á¡×";
+                                                       act = "「♪ド~ラもドラミもメじゃないよ~~」";
                                                        break;
                                                  case 14:
-                                                       act = "¡Ö¢ö¤è¤¸¤²¤ó¤Ý¤±¤Ã¤È¡Á¤Ê¡Á¤¯¤¿¤Ã¤Æ¡Á¡×";
+                                                       act = "「♪よじげんぽけっと~な~くたって~」";
                                                        break;
                                                  case 15:
-                                                       act = "¡Ö¢ö¤¢¤·¡Á¤Î¡Á¡Á¤Ê¤¬¤µ¡Á¤Ï¡Á¤Þ¤±¤Ê¤¤¤¼¡Á¡×";
+                                                       act = "「♪あし~の~~ながさ~は~まけないぜ~」";
                                                        break;
                                                }
 #else
@@ -644,9 +536,9 @@ bool make_attack_normal(int m_idx)
                                        {
                                                if (one_in_(3))
 #ifdef JP
-                                                       act = "¤Ï¢öËͤé¤Ï³Ú¤·¤¤²È²¢ö¤È²Î¤Ã¤Æ¤¤¤ë¡£";
+                                                       act = "は♪僕らは楽しい家族♪と歌っている。";
                                                else
-                                                       act = "¤Ï¢ö¥¢¥¤ ¥é¥Ö ¥æ¡¼¡¢¥æ¡¼ ¥é¥Ö ¥ß¡¼¢ö¤È²Î¤Ã¤Æ¤¤¤ë¡£";
+                                                       act = "は♪アイ ラブ ユー、ユー ラブ ミー♪と歌っている。";
 #else
                                                        act = "sings 'We are a happy family.'";
                                                else
@@ -671,12 +563,12 @@ bool make_attack_normal(int m_idx)
                                }
 #ifdef JP
                                if (abbreviate == 0)
-                                   msg_format("%^s¤Ë%s", m_name, act);
+                                   msg_format("%^s%s", m_name, act);
                                else if (abbreviate == 1)
                                    msg_format("%s", act);
                                else /* if (abbreviate == -1) */
                                    msg_format("%^s%s", m_name, act);
-                               abbreviate = 1;/*£²²óÌܰʹߤϾÊά */
+                               abbreviate = 1;/*2回目以降は省略 */
 #else
                                msg_format("%^s %s%s", m_name, act, do_silly_attack ? " you." : "");
 #endif
@@ -710,14 +602,10 @@ bool make_attack_normal(int m_idx)
 
                                case RBE_SUPERHURT:
                                {
-                                       if ((randint1(rlev*2+300) > (ac+200)) || one_in_(13)) {
-                                               int tmp_damage = damage-(damage*((ac < 150) ? ac : 150)/250);
-#ifdef JP
-                                               msg_print("Ä˺¨¤Î°ì·â¡ª");
-#else
-                                               msg_print("It was a critical hit!");
-#endif
-
+                                       if (((randint1(rlev*2+300) > (ac+200)) || one_in_(13)) && !CHECK_MULTISHADOW())
+                                       {
+                                               int tmp_damage = damage - (damage * ((ac < 150) ? ac : 150) / 250);
+                                               msg_print(_("痛恨の一撃!", "It was a critical hit!"));
                                                tmp_damage = MAX(damage, tmp_damage*2);
 
                                                /* Take damage */
@@ -744,7 +632,7 @@ bool make_attack_normal(int m_idx)
                                        if (explode) break;
 
                                        /* Take "poison" effect */
-                                       if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()))
+                                       if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()) && !CHECK_MULTISHADOW())
                                        {
                                                if (set_poisoned(p_ptr->poisoned + randint1(rlev) + 5))
                                                {
@@ -766,7 +654,7 @@ bool make_attack_normal(int m_idx)
                                        if (explode) break;
 
                                        /* Allow complete resist */
-                                       if (!p_ptr->resist_disen)
+                                       if (!p_ptr->resist_disen && !CHECK_MULTISHADOW())
                                        {
                                                /* Apply disenchantment */
                                                if (apply_disenchant(0))
@@ -791,7 +679,7 @@ bool make_attack_normal(int m_idx)
                                        /* Take some damage */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Find an item */
                                        for (k = 0; k < 10; k++)
@@ -819,18 +707,13 @@ bool make_attack_normal(int m_idx)
                                                        heal = MIN(heal, m_ptr->maxhp - m_ptr->hp);
 
                                                        /* Message */
-#ifdef JP
-                                                       msg_print("¥¶¥Ã¥¯¤«¤é¥¨¥Í¥ë¥®¡¼¤¬µÛ¤¤¼è¤é¤ì¤¿¡ª");
-#else
-                                                       msg_print("Energy drains from your pack!");
-#endif
-
+                                                       msg_print(_("ザックからエネルギーが吸い取られた!", "Energy drains from your pack!"));
 
                                                        /* Obvious */
                                                        obvious = TRUE;
 
                                                        /* Heal the monster */
-                                                       m_ptr->hp += heal;
+                                                       m_ptr->hp += (HIT_POINT)heal;
 
                                                        /* Redraw (later) if needed */
                                                        if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
@@ -861,7 +744,7 @@ bool make_attack_normal(int m_idx)
                                        /* Confused monsters cannot steal successfully. -LM-*/
                                        if (MON_CONFUSED(m_ptr)) break;
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Obvious */
                                        obvious = TRUE;
@@ -872,12 +755,7 @@ bool make_attack_normal(int m_idx)
                                                              p_ptr->lev)))
                                        {
                                                /* Saving throw message */
-#ifdef JP
-                                               msg_print("¤·¤«¤·ÁÇÁ᤯ºâÉÛ¤ò¼é¤Ã¤¿¡ª");
-#else
-                                               msg_print("You quickly protect your money pouch!");
-#endif
-
+                                               msg_print(_("しかし素早く財布を守った!", "You quickly protect your money pouch!"));
 
                                                /* Occasional blink anyway */
                                                if (randint0(3)) blinked = TRUE;
@@ -893,34 +771,18 @@ bool make_attack_normal(int m_idx)
                                                p_ptr->au -= gold;
                                                if (gold <= 0)
                                                {
-#ifdef JP
-                                                       msg_print("¤·¤«¤·²¿¤âÅð¤Þ¤ì¤Ê¤«¤Ã¤¿¡£");
-#else
-                                                       msg_print("Nothing was stolen.");
-#endif
-
+                                                       msg_print(_("しかし何も盗まれなかった。", "Nothing was stolen."));
                                                }
                                                else if (p_ptr->au)
                                                {
-#ifdef JP
-                                                       msg_print("ºâÉÛ¤¬·Ú¤¯¤Ê¤Ã¤¿µ¤¤¬¤¹¤ë¡£");
-                                                       msg_format("$%ld ¤Î¤ª¶â¤¬Åð¤Þ¤ì¤¿¡ª", (long)gold);
-#else
-                                                       msg_print("Your purse feels lighter.");
-                                                       msg_format("%ld coins were stolen!", (long)gold);
-#endif
+                                                       msg_print(_("財布が軽くなった気がする。", "Your purse feels lighter."));
+                                                       msg_format(_("$%ld のお金が盗まれた!", "%ld coins were stolen!"), (long)gold);
                                                        chg_virtue(V_SACRIFICE, 1);
                                                }
                                                else
                                                {
-#ifdef JP
-                                                       msg_print("ºâÉÛ¤¬·Ú¤¯¤Ê¤Ã¤¿µ¤¤¬¤¹¤ë¡£");
-                                                       msg_print("¤ª¶â¤¬Á´ÉôÅð¤Þ¤ì¤¿¡ª");
-#else
-                                                       msg_print("Your purse feels lighter.");
-                                                       msg_print("All of your coins were stolen!");
-#endif
-
+                                                       msg_print(_("財布が軽くなった気がする。", "Your purse feels lighter."));
+                                                       msg_print(_("お金が全部盗まれた!", "All of your coins were stolen!"));
                                                        chg_virtue(V_SACRIFICE, 2);
                                                }
 
@@ -945,7 +807,7 @@ bool make_attack_normal(int m_idx)
                                        /* Confused monsters cannot steal successfully. -LM-*/
                                        if (MON_CONFUSED(m_ptr)) break;
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Saving throw (unless paralyzed) based on dex and level */
                                        if (!p_ptr->paralyzed &&
@@ -953,12 +815,7 @@ bool make_attack_normal(int m_idx)
                                                              p_ptr->lev)))
                                        {
                                                /* Saving throw message */
-#ifdef JP
-                                               msg_print("¤·¤«¤·¤¢¤ï¤Æ¤Æ¥¶¥Ã¥¯¤ò¼è¤êÊÖ¤·¤¿¡ª");
-#else
-                                               msg_print("You grab hold of your backpack!");
-#endif
-
+                                               msg_print(_("しかしあわててザックを取り返した!", "You grab hold of your backpack!"));
 
                                                /* Occasional "blink" anyway */
                                                blinked = TRUE;
@@ -992,9 +849,9 @@ bool make_attack_normal(int m_idx)
 
                                                /* Message */
 #ifdef JP
-                                               msg_format("%s(%c)¤ò%sÅð¤Þ¤ì¤¿¡ª",
+                                               msg_format("%s(%c)を%s盗まれた!",
                                                           o_name, index_to_label(i),
-                                                          ((o_ptr->number > 1) ? "°ì¤Ä" : ""));
+                                                          ((o_ptr->number > 1) ? "一つ" : ""));
 #else
                                                msg_format("%sour %s (%c) was stolen!",
                                                           ((o_ptr->number > 1) ? "One of y" : "Y"),
@@ -1032,7 +889,7 @@ bool make_attack_normal(int m_idx)
                                                        }
 
                                                        /* Forget mark */
-                                                       j_ptr->marked = 0;
+                                                       j_ptr->marked = OM_TOUCHED;
 
                                                        /* Memorize monster */
                                                        j_ptr->held_m_idx = m_idx;
@@ -1066,7 +923,7 @@ bool make_attack_normal(int m_idx)
                                        /* Take some damage */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Steal some food */
                                        for (k = 0; k < 10; k++)
@@ -1088,9 +945,9 @@ bool make_attack_normal(int m_idx)
 
                                                /* Message */
 #ifdef JP
-                                               msg_format("%s(%c)¤ò%s¿©¤Ù¤é¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª",
+                                               msg_format("%s(%c)を%s食べられてしまった!",
                                                          o_name, index_to_label(i),
-                                                         ((o_ptr->number > 1) ? "°ì¤Ä" : ""));
+                                                         ((o_ptr->number > 1) ? "一つ" : ""));
 #else
                                                msg_format("%sour %s (%c) was eaten!",
                                                           ((o_ptr->number > 1) ? "One of y" : "Y"),
@@ -1120,24 +977,19 @@ bool make_attack_normal(int m_idx)
                                        /* Take some damage */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Drain fuel */
                                        if ((o_ptr->xtra4 > 0) && (!object_is_fixed_artifact(o_ptr)))
                                        {
                                                /* Reduce fuel */
-                                               o_ptr->xtra4 -= (250 + randint1(250));
+                                               o_ptr->xtra4 -= (s16b)(250 + randint1(250));
                                                if (o_ptr->xtra4 < 1) o_ptr->xtra4 = 1;
 
                                                /* Notice */
                                                if (!p_ptr->blind)
                                                {
-#ifdef JP
-                                                       msg_print("ÌÀ¤«¤ê¤¬°Å¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿¡£");
-#else
-                                                       msg_print("Your light dims.");
-#endif
-
+                                                       msg_print(_("明かりが暗くなってしまった。", "Your light dims."));
                                                        obvious = TRUE;
                                                }
 
@@ -1155,15 +1007,10 @@ bool make_attack_normal(int m_idx)
                                        obvious = TRUE;
 
                                        /* Message */
-#ifdef JP
-                                       msg_print("»À¤òÍá¤Ó¤»¤é¤ì¤¿¡ª");
-#else
-                                       msg_print("You are covered in acid!");
-#endif
-
+                                       msg_print(_("酸を浴びせられた!", "You are covered in acid!"));
 
                                        /* Special damage */
-                                       get_damage += acid_dam(damage, ddesc, -1);
+                                       get_damage += acid_dam(damage, ddesc, -1, FALSE);
 
                                        /* Hack -- Update AC */
                                        update_stuff();
@@ -1181,15 +1028,10 @@ bool make_attack_normal(int m_idx)
                                        obvious = TRUE;
 
                                        /* Message */
-#ifdef JP
-                                       msg_print("ÅÅ·â¤òÍá¤Ó¤»¤é¤ì¤¿¡ª");
-#else
-                                       msg_print("You are struck by electricity!");
-#endif
-
+                                       msg_print(_("電撃を浴びせられた!", "You are struck by electricity!"));
 
                                        /* Special damage */
-                                       get_damage += elec_dam(damage, ddesc, -1);
+                                       get_damage += elec_dam(damage, ddesc, -1, FALSE);
 
                                        /* Learn about the player */
                                        update_smart_learn(m_idx, DRS_ELEC);
@@ -1204,15 +1046,10 @@ bool make_attack_normal(int m_idx)
                                        obvious = TRUE;
 
                                        /* Message */
-#ifdef JP
-                                       msg_print("Á´¿È¤¬±ê¤ËÊñ¤Þ¤ì¤¿¡ª");
-#else
-                                       msg_print("You are enveloped in flames!");
-#endif
-
+                                       msg_print(_("全身が炎に包まれた!", "You are enveloped in flames!"));
 
                                        /* Special damage */
-                                       get_damage += fire_dam(damage, ddesc, -1);
+                                       get_damage += fire_dam(damage, ddesc, -1, FALSE);
 
                                        /* Learn about the player */
                                        update_smart_learn(m_idx, DRS_FIRE);
@@ -1227,15 +1064,10 @@ bool make_attack_normal(int m_idx)
                                        obvious = TRUE;
 
                                        /* Message */
-#ifdef JP
-                                       msg_print("Á´¿È¤¬Î䵤¤Çʤ¤ï¤ì¤¿¡ª");
-#else
-                                       msg_print("You are covered with frost!");
-#endif
-
+                                       msg_print(_("全身が冷気で覆われた!", "You are covered with frost!"));
 
                                        /* Special damage */
-                                       get_damage += cold_dam(damage, ddesc, -1);
+                                       get_damage += cold_dam(damage, ddesc, -1, FALSE);
 
                                        /* Learn about the player */
                                        update_smart_learn(m_idx, DRS_COLD);
@@ -1251,12 +1083,12 @@ bool make_attack_normal(int m_idx)
                                        if (p_ptr->is_dead) break;
 
                                        /* Increase "blind" */
-                                       if (!p_ptr->resist_blind)
+                                       if (!p_ptr->resist_blind && !CHECK_MULTISHADOW())
                                        {
                                                if (set_blind(p_ptr->blind + 10 + randint1(rlev)))
                                                {
 #ifdef JP
-                                                       if(m_ptr->r_idx == MON_DIO) msg_print("¤É¤¦¤À¥Ã¡ª¤³¤Î·ì¤ÎÌÜÄÙ¤·¤Ï¥Ã¡ª");
+                                                       if (m_ptr->r_idx == MON_DIO) msg_print("どうだッ!この血の目潰しはッ!");
 #else
                                                        /* nanka */
 #endif
@@ -1279,7 +1111,7 @@ bool make_attack_normal(int m_idx)
                                        if (p_ptr->is_dead) break;
 
                                        /* Increase "confused" */
-                                       if (!p_ptr->resist_conf)
+                                       if (!p_ptr->resist_conf && !CHECK_MULTISHADOW())
                                        {
                                                if (set_confused(p_ptr->confused + 3 + randint1(rlev)))
                                                {
@@ -1301,24 +1133,18 @@ bool make_attack_normal(int m_idx)
                                        if (p_ptr->is_dead) break;
 
                                        /* Increase "afraid" */
-                                       if (p_ptr->resist_fear)
+                                       if (CHECK_MULTISHADOW())
                                        {
-#ifdef JP
-                                               msg_print("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡ª");
-#else
-                                               msg_print("You stand your ground!");
-#endif
-
+                                               /* Do nothing */
+                                       }
+                                       else if (p_ptr->resist_fear)
+                                       {
+                                               msg_print(_("しかし恐怖に侵されなかった!", "You stand your ground!"));
                                                obvious = TRUE;
                                        }
                                        else if (randint0(100 + r_ptr->level/2) < p_ptr->skill_sav)
                                        {
-#ifdef JP
-                                               msg_print("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡ª");
-#else
-                                               msg_print("You stand your ground!");
-#endif
-
+                                               msg_print(_("しかし恐怖に侵されなかった!", "You stand your ground!"));
                                                obvious = TRUE;
                                        }
                                        else
@@ -1343,24 +1169,18 @@ bool make_attack_normal(int m_idx)
                                        if (p_ptr->is_dead) break;
 
                                        /* Increase "paralyzed" */
-                                       if (p_ptr->free_act)
+                                       if (CHECK_MULTISHADOW())
                                        {
-#ifdef JP
-                                               msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
-#else
-                                               msg_print("You are unaffected!");
-#endif
-
+                                               /* Do nothing */
+                                       }
+                                       else if (p_ptr->free_act)
+                                       {
+                                               msg_print(_("しかし効果がなかった!", "You are unaffected!"));
                                                obvious = TRUE;
                                        }
                                        else if (randint0(100 + r_ptr->level/2) < p_ptr->skill_sav)
                                        {
-#ifdef JP
-                                               msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
-#else
-                                               msg_print("You resist the effects!");
-#endif
-
+                                               msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
                                                obvious = TRUE;
                                        }
                                        else
@@ -1385,7 +1205,7 @@ bool make_attack_normal(int m_idx)
                                        /* Damage (physical) */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Damage (stat) */
                                        if (do_dec_stat(A_STR)) obvious = TRUE;
@@ -1398,7 +1218,7 @@ bool make_attack_normal(int m_idx)
                                        /* Damage (physical) */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Damage (stat) */
                                        if (do_dec_stat(A_INT)) obvious = TRUE;
@@ -1411,7 +1231,7 @@ bool make_attack_normal(int m_idx)
                                        /* Damage (physical) */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Damage (stat) */
                                        if (do_dec_stat(A_WIS)) obvious = TRUE;
@@ -1424,7 +1244,7 @@ bool make_attack_normal(int m_idx)
                                        /* Damage (physical) */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Damage (stat) */
                                        if (do_dec_stat(A_DEX)) obvious = TRUE;
@@ -1437,7 +1257,7 @@ bool make_attack_normal(int m_idx)
                                        /* Damage (physical) */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Damage (stat) */
                                        if (do_dec_stat(A_CON)) obvious = TRUE;
@@ -1450,7 +1270,7 @@ bool make_attack_normal(int m_idx)
                                        /* Damage (physical) */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Damage (stat) */
                                        if (do_dec_stat(A_CHR)) obvious = TRUE;
@@ -1463,7 +1283,7 @@ bool make_attack_normal(int m_idx)
                                        /* Damage (physical) */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Damage (stats) */
                                        if (do_dec_stat(A_STR)) obvious = TRUE;
@@ -1490,7 +1310,7 @@ bool make_attack_normal(int m_idx)
                                        /* Radius 8 earthquake centered at the monster */
                                        if (damage > 23 || explode)
                                        {
-                                               earthquake(m_ptr->fy, m_ptr->fx, 8);
+                                               earthquake_aux(m_ptr->fy, m_ptr->fx, 8, m_idx);
                                        }
 
                                        break;
@@ -1506,7 +1326,7 @@ bool make_attack_normal(int m_idx)
                                        /* Take damage */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        (void)drain_exp(d, d / 10, 95);
                                        break;
@@ -1522,7 +1342,7 @@ bool make_attack_normal(int m_idx)
                                        /* Take damage */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        (void)drain_exp(d, d / 10, 90);
                                        break;
@@ -1538,7 +1358,7 @@ bool make_attack_normal(int m_idx)
                                        /* Take damage */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        (void)drain_exp(d, d / 10, 75);
                                        break;
@@ -1554,7 +1374,7 @@ bool make_attack_normal(int m_idx)
                                        /* Take damage */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        (void)drain_exp(d, d / 10, 50);
                                        break;
@@ -1565,7 +1385,7 @@ bool make_attack_normal(int m_idx)
                                        /* Take some damage */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        /* Take "poison" effect */
                                        if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()))
@@ -1583,12 +1403,7 @@ bool make_attack_normal(int m_idx)
                                                bool perm = one_in_(10);
                                                if (dec_stat(A_CON, randint1(10), perm))
                                                {
-#ifdef JP
-                                                       msg_print("ɤ¬¤¢¤Ê¤¿¤ò¿ª¤ó¤Ç¤¤¤ëµ¤¤¬¤¹¤ë¡£");
-#else
-                                                       msg_print("You feel strange sickness.");
-#endif
-
+                                                       msg_print(_("病があなたを蝕んでいる気がする。", "You feel strange sickness."));
                                                        obvious = TRUE;
                                                }
                                        }
@@ -1598,19 +1413,14 @@ bool make_attack_normal(int m_idx)
                                case RBE_TIME:
                                {
                                        if (explode) break;
-                                       if (!p_ptr->resist_time)
+                                       if (!p_ptr->resist_time && !CHECK_MULTISHADOW())
                                        {
                                                switch (randint1(10))
                                                {
                                                        case 1: case 2: case 3: case 4: case 5:
                                                        {
                                                                if (p_ptr->prace == RACE_ANDROID) break;
-#ifdef JP
-                                                               msg_print("¿ÍÀ¸¤¬µÕÌá¤ê¤·¤¿µ¤¤¬¤¹¤ë¡£");
-#else
-                                                               msg_print("You feel life has clocked back.");
-#endif
-
+                                                               msg_print(_("人生が逆戻りした気がする。", "You feel life has clocked back."));
                                                                lose_exp(100 + (p_ptr->exp / 100) * MON_DRAIN_LIFE);
                                                                break;
                                                        }
@@ -1622,12 +1432,12 @@ bool make_attack_normal(int m_idx)
                                                                switch (stat)
                                                                {
 #ifdef JP
-                                                                       case A_STR: act = "¶¯¤¯"; break;
-                                                                       case A_INT: act = "ÁïÌÀ¤Ç"; break;
-                                                                       case A_WIS: act = "¸­ÌÀ¤Ç"; break;
-                                                                       case A_DEX: act = "´ïÍѤÇ"; break;
-                                                                       case A_CON: act = "·ò¹¯¤Ç"; break;
-                                                                       case A_CHR: act = "Èþ¤·¤¯"; break;
+                                                                       case A_STR: act = "強く"; break;
+                                                                       case A_INT: act = "聡明で"; break;
+                                                                       case A_WIS: act = "賢明で"; break;
+                                                                       case A_DEX: act = "器用で"; break;
+                                                                       case A_CON: act = "健康で"; break;
+                                                                       case A_CHR: act = "美しく"; break;
 #else
                                                                        case A_STR: act = "strong"; break;
                                                                        case A_INT: act = "bright"; break;
@@ -1639,13 +1449,7 @@ bool make_attack_normal(int m_idx)
 
                                                                }
 
-#ifdef JP
-                                                               msg_format("¤¢¤Ê¤¿¤Ï°ÊÁ°¤Û¤É%s¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿...¡£", act);
-#else
-                                                               msg_format("You're not as %s as you used to be...", act);
-#endif
-
-
+                                                               msg_format(_("あなたは以前ほど%sなくなってしまった...。", "You're not as %s as you used to be..."), act);
                                                                p_ptr->stat_cur[stat] = (p_ptr->stat_cur[stat] * 3) / 4;
                                                                if (p_ptr->stat_cur[stat] < 3) p_ptr->stat_cur[stat] = 3;
                                                                p_ptr->update |= (PU_BONUS);
@@ -1654,12 +1458,7 @@ bool make_attack_normal(int m_idx)
 
                                                        case 10:
                                                        {
-#ifdef JP
-                                               msg_print("¤¢¤Ê¤¿¤Ï°ÊÁ°¤Û¤ÉÎ϶¯¤¯¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿...¡£");
-#else
-                                                               msg_print("You're not as powerful as you used to be...");
-#endif
-
+                                                               msg_print(_("あなたは以前ほど力強くなくなってしまった...。", "You're not as powerful as you used to be..."));
 
                                                                for (k = 0; k < 6; k++)
                                                                {
@@ -1675,7 +1474,7 @@ bool make_attack_normal(int m_idx)
 
                                        break;
                                }
-                               case RBE_EXP_VAMP:
+                               case RBE_DR_LIFE:
                                {
                                        s32b d = damroll(60, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
                                        bool resist_drain;
@@ -1686,7 +1485,7 @@ bool make_attack_normal(int m_idx)
                                        /* Take damage */
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
-                                       if (p_ptr->is_dead) break;
+                                       if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
 
                                        resist_drain = !drain_exp(d, d / 10, 50);
 
@@ -1729,12 +1528,7 @@ bool make_attack_normal(int m_idx)
                                                /* Special message */
                                                if (m_ptr->ml && did_heal)
                                                {
-#ifdef JP
-msg_format("%s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", m_name);
-#else
-                                                       msg_format("%^s appears healthier.", m_name);
-#endif
-
+                                                       msg_format(_("%sは体力を回復したようだ。", "%^s appears healthier."), m_name);
                                                }
                                        }
 
@@ -1745,17 +1539,71 @@ msg_format("%s
                                        /* Obvious */
                                        obvious = TRUE;
 
-                                       do_cut = 0;
+                                       if (CHECK_MULTISHADOW())
+                                       {
+                                               msg_print(_("攻撃は幻影に命中し、あなたには届かなかった。", "The attack hits Shadow, you are unharmed!"));
+                                       }
+                                       else
+                                       {
+                                               do_cut = 0;
+
+                                               /* Take damage */
+                                               p_ptr->csp -= damage;
+                                               if (p_ptr->csp < 0)
+                                               {
+                                                       p_ptr->csp = 0;
+                                                       p_ptr->csp_frac = 0;
+                                               }
 
+                                               p_ptr->redraw |= (PR_MANA);
+                                       }
+
+                                       /* Learn about the player */
+                                       update_smart_learn(m_idx, DRS_MANA);
+
+                                       break;
+                               }
+                               case RBE_INERTIA:
+                               {
                                        /* Take damage */
-                                       p_ptr->csp -= damage;
-                                       if (p_ptr->csp < 0)
+                                       get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+
+                                       if (p_ptr->is_dead) break;
+
+                                       /* Decrease speed */
+                                       if (CHECK_MULTISHADOW())
+                                       {
+                                               /* Do nothing */
+                                       }
+                                       else
                                        {
-                                               p_ptr->csp = 0;
-                                               p_ptr->csp_frac = 0;
+                                               if (set_slow((p_ptr->slow + 4 + randint0(rlev / 10)), FALSE))
+                                               {
+                                                       obvious = TRUE;
+                                               }
                                        }
 
-                                       p_ptr->redraw |= (PR_MANA);
+                                       break;
+                               }
+                               case RBE_STUN:
+                               {
+                                       /* Take damage */
+                                       get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+
+                                       if (p_ptr->is_dead) break;
+
+                                       /* Decrease speed */
+                                       if (p_ptr->resist_sound || CHECK_MULTISHADOW())
+                                       {
+                                               /* Do nothing */
+                                       }
+                                       else
+                                       {
+                                               if (set_stun(p_ptr->stun + 10 + randint1(r_ptr->level / 4)))
+                                               {
+                                                       obvious = TRUE;
+                                               }
+                                       }
 
                                        break;
                                }
@@ -1780,7 +1628,7 @@ msg_format("%s
                        /* Handle cut */
                        if (do_cut)
                        {
-                               int k = 0;
+                               int cut_plus = 0;
 
                                /* Critical hit (zero if non-critical) */
                                tmp = monster_critical(d_dice, d_side, damage);
@@ -1788,24 +1636,24 @@ msg_format("%s
                                /* Roll for damage */
                                switch (tmp)
                                {
-                                       case 0: k = 0; break;
-                                       case 1: k = randint1(5); break;
-                                       case 2: k = randint1(5) + 5; break;
-                                       case 3: k = randint1(20) + 20; break;
-                                       case 4: k = randint1(50) + 50; break;
-                                       case 5: k = randint1(100) + 100; break;
-                                       case 6: k = 300; break;
-                                       default: k = 500; break;
+                                       case 0: cut_plus = 0; break;
+                                       case 1: cut_plus = randint1(5); break;
+                                       case 2: cut_plus = randint1(5) + 5; break;
+                                       case 3: cut_plus = randint1(20) + 20; break;
+                                       case 4: cut_plus = randint1(50) + 50; break;
+                                       case 5: cut_plus = randint1(100) + 100; break;
+                                       case 6: cut_plus = 300; break;
+                                       default: cut_plus = 500; break;
                                }
 
                                /* Apply the cut */
-                               if (k) (void)set_cut(p_ptr->cut + k);
+                               if (cut_plus) (void)set_cut(p_ptr->cut + cut_plus);
                        }
 
                        /* Handle stun */
                        if (do_stun)
                        {
-                               int k = 0;
+                               int stun_plus = 0;
 
                                /* Critical hit (zero if non-critical) */
                                tmp = monster_critical(d_dice, d_side, damage);
@@ -1813,18 +1661,18 @@ msg_format("%s
                                /* Roll for damage */
                                switch (tmp)
                                {
-                                       case 0: k = 0; break;
-                                       case 1: k = randint1(5); break;
-                                       case 2: k = randint1(5) + 10; break;
-                                       case 3: k = randint1(10) + 20; break;
-                                       case 4: k = randint1(15) + 30; break;
-                                       case 5: k = randint1(20) + 40; break;
-                                       case 6: k = 80; break;
-                                       default: k = 150; break;
+                                       case 0: stun_plus = 0; break;
+                                       case 1: stun_plus = randint1(5); break;
+                                       case 2: stun_plus = randint1(5) + 10; break;
+                                       case 3: stun_plus = randint1(10) + 20; break;
+                                       case 4: stun_plus = randint1(15) + 30; break;
+                                       case 5: stun_plus = randint1(20) + 40; break;
+                                       case 6: stun_plus = 80; break;
+                                       default: stun_plus = 150; break;
                                }
 
                                /* Apply the stun */
-                               if (k) (void)set_stun(p_ptr->stun + k);
+                               if (stun_plus) (void)set_stun(p_ptr->stun + stun_plus);
                        }
 
                        if (explode)
@@ -1844,15 +1692,15 @@ msg_format("%s
                                {
                                        if (!(r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK))
                                        {
-                                               int dam = damroll(2, 6);
+                                               HIT_POINT dam = damroll(2, 6);
 
                                                /* Modify the damage */
                                                dam = mon_damage_mod(m_ptr, dam, FALSE);
 
 #ifdef JP
-                                               msg_format("%^s¤ÏÆÍÁ³Ç®¤¯¤Ê¤Ã¤¿¡ª", m_name);
+                                               msg_format("%^sは突然熱くなった!", m_name);
                                                if (mon_take_hit(m_idx, dam, &fear,
-                                                   "¤Ï³¥¤Î»³¤Ë¤Ê¤Ã¤¿¡£"))
+                                                   "は灰の山になった。"))
 #else
                                                msg_format("%^s is suddenly very hot!", m_name);
 
@@ -1876,15 +1724,15 @@ msg_format("%s
                                {
                                        if (!(r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK))
                                        {
-                                               int dam = damroll(2, 6);
+                                               HIT_POINT dam = damroll(2, 6);
 
                                                /* Modify the damage */
                                                dam = mon_damage_mod(m_ptr, dam, FALSE);
 
 #ifdef JP
-                                               msg_format("%^s¤ÏÅÅ·â¤ò¤¯¤é¤Ã¤¿¡ª", m_name);
+                                               msg_format("%^sは電撃をくらった!", m_name);
                                                if (mon_take_hit(m_idx, dam, &fear,
-                                                   "¤Ïdz¤¨³Ì¤Î»³¤Ë¤Ê¤Ã¤¿¡£"))
+                                                   "は燃え殻の山になった。"))
 #else
                                                msg_format("%^s gets zapped!", m_name);
 
@@ -1908,15 +1756,15 @@ msg_format("%s
                                {
                                        if (!(r_ptr->flagsr & RFR_EFF_IM_COLD_MASK))
                                        {
-                                               int dam = damroll(2, 6);
+                                               HIT_POINT dam = damroll(2, 6);
 
                                                /* Modify the damage */
                                                dam = mon_damage_mod(m_ptr, dam, FALSE);
 
 #ifdef JP
-                                               msg_format("%^s¤ÏÎ䵤¤ò¤¯¤é¤Ã¤¿¡ª", m_name);
+                                               msg_format("%^sは冷気をくらった!", m_name);
                                                if (mon_take_hit(m_idx, dam, &fear,
-                                                   "¤ÏÅà¤ê¤Ä¤¤¤¿¡£"))
+                                                   "は凍りついた。"))
 #else
                                                msg_format("%^s is very cold!", m_name);
 
@@ -1941,15 +1789,15 @@ msg_format("%s
                                {
                                        if (!(r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK))
                                        {
-                                               int dam = damroll(2, 6);
+                                               HIT_POINT dam = damroll(2, 6);
 
                                                /* Modify the damage */
                                                dam = mon_damage_mod(m_ptr, dam, FALSE);
 
 #ifdef JP
-                                               msg_format("%^s¤Ï¶À¤ÎÇËÊÒ¤ò¤¯¤é¤Ã¤¿¡ª", m_name);
+                                               msg_format("%^sは鏡の破片をくらった!", m_name);
                                                if (mon_take_hit(m_idx, dam, &fear,
-                                                   "¤Ï¥º¥¿¥º¥¿¤Ë¤Ê¤Ã¤¿¡£"))
+                                                   "はズタズタになった。"))
 #else
                                                msg_format("%^s gets zapped!", m_name);
 
@@ -1967,7 +1815,7 @@ msg_format("%s
                                                        r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK);
                                        }
 
-                                       if (is_mirror_grid(&cave[py][px]))
+                                       if (is_mirror_grid(&cave[p_ptr->y][p_ptr->x]))
                                        {
                                                teleport_player(10, 0L);
                                        }
@@ -1979,15 +1827,15 @@ msg_format("%s
                                        {
                                                if (!(r_ptr->flagsr & RFR_RES_ALL))
                                                {
-                                                       int dam = damroll(2, 6);
+                                                       HIT_POINT dam = damroll(2, 6);
 
                                                        /* Modify the damage */
                                                        dam = mon_damage_mod(m_ptr, dam, FALSE);
 
 #ifdef JP
-                                                       msg_format("%^s¤ÏÀ»¤Ê¤ë¥ª¡¼¥é¤Ç½ý¤Ä¤¤¤¿¡ª", m_name);
+                                                       msg_format("%^sは聖なるオーラで傷ついた!", m_name);
                                                        if (mon_take_hit(m_idx, dam, &fear,
-                                                           "¤ÏÅݤ줿¡£"))
+                                                           "は倒れた。"))
 #else
                                                        msg_format("%^s is injured by holy power!", m_name);
 
@@ -2013,15 +1861,15 @@ msg_format("%s
                                {
                                        if (!(r_ptr->flagsr & RFR_RES_ALL))
                                        {
-                                               int dam = damroll(2, 6);
+                                               HIT_POINT dam = damroll(2, 6);
 
                                                /* Modify the damage */
                                                dam = mon_damage_mod(m_ptr, dam, FALSE);
 
 #ifdef JP
-                                               msg_format("%^s¤¬±Ô¤¤Æ®µ¤¤Î¥ª¡¼¥é¤Ç½ý¤Ä¤¤¤¿¡ª", m_name);
+                                               msg_format("%^sが鋭い闘気のオーラで傷ついた!", m_name);
                                                if (mon_take_hit(m_idx, dam, &fear,
-                                                   "¤ÏÅݤ줿¡£"))
+                                                   "は倒れた。"))
 #else
                                                msg_format("%^s is injured by the Force", m_name);
 
@@ -2040,6 +1888,65 @@ msg_format("%s
                                                        r_ptr->r_flagsr |= RFR_RES_ALL;
                                        }
                                }
+
+                               if (hex_spelling(HEX_SHADOW_CLOAK) && alive && !p_ptr->is_dead)
+                               {
+                                       HIT_POINT dam = 1;
+                                       object_type *o_armed_ptr = &inventory[INVEN_RARM];
+
+                                       if (!(r_ptr->flagsr & RFR_RES_ALL || r_ptr->flagsr & RFR_RES_DARK))
+                                       {
+                                               if (o_armed_ptr->k_idx)
+                                               {
+                                                       int basedam = ((o_armed_ptr->dd + p_ptr->to_dd[0]) * (o_armed_ptr->ds + p_ptr->to_ds[0] + 1));
+                                                       dam = basedam / 2 + o_armed_ptr->to_d + p_ptr->to_d[0];
+                                               }
+
+                                               /* Cursed armor makes damages doubled */
+                                               o_armed_ptr = &inventory[INVEN_BODY];
+                                               if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr)) dam *= 2;
+
+                                               /* Modify the damage */
+                                               dam = mon_damage_mod(m_ptr, dam, FALSE);
+
+#ifdef JP
+                                               msg_format("影のオーラが%^sに反撃した!", m_name);
+                                               if (mon_take_hit(m_idx, dam, &fear, "は倒れた。"))
+#else
+                                               msg_format("Enveloped shadows attack %^s.", m_name);
+
+                                               if (mon_take_hit(m_idx, dam, &fear, " is destroyed."))
+#endif
+                                               {
+                                                       blinked = FALSE;
+                                                       alive = FALSE;
+                                               }
+                                               else /* monster does not dead */
+                                               {
+                                                       int j;
+                                                       int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
+                                                       int typ[4][2] = {
+                                                               { INVEN_HEAD, GF_OLD_CONF },
+                                                               { INVEN_LARM,  GF_OLD_SLEEP },
+                                                               { INVEN_HANDS, GF_TURN_ALL },
+                                                               { INVEN_FEET, GF_OLD_SLOW }
+                                                       };
+
+                                                       /* Some cursed armours gives an extra effect */
+                                                       for (j = 0; j < 4; j++)
+                                                       {
+                                                               o_armed_ptr = &inventory[typ[j][0]];
+                                                               if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr) && object_is_armour(o_armed_ptr))
+                                                                       project(0, 0, m_ptr->fy, m_ptr->fx, (p_ptr->lev * 2), typ[j][1], flg, -1);
+                                                       }
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if (is_original_ap_and_seen(m_ptr))
+                                                       r_ptr->r_flagsr |= (RFR_RES_ALL | RFR_RES_DARK);
+                                       }
+                               }
                        }
                }
 
@@ -2066,15 +1973,15 @@ msg_format("%s
                                if (m_ptr->ml)
                                {
                                        /* Disturbing */
-                                       disturb(1, 0);
+                                       disturb(1, 1);
 
                                        /* Message */
 #ifdef JP
                                        if (abbreviate)
-                                           msg_format("%s¤«¤ï¤·¤¿¡£", (p_ptr->special_attack & ATTACK_SUIKEN) ? "´ñ̯¤ÊÆ°¤­¤Ç" : "");
+                                           msg_format("%sかわした。", (p_ptr->special_attack & ATTACK_SUIKEN) ? "奇妙な動きで" : "");
                                        else
-                                           msg_format("%s%^s¤Î¹¶·â¤ò¤«¤ï¤·¤¿¡£", (p_ptr->special_attack & ATTACK_SUIKEN) ? "´ñ̯¤ÊÆ°¤­¤Ç" : "", m_name);
-                                       abbreviate = 1;/*£²²óÌܰʹߤϾÊά */
+                                           msg_format("%s%^sの攻撃をかわした。", (p_ptr->special_attack & ATTACK_SUIKEN) ? "奇妙な動きで" : "", m_name);
+                                       abbreviate = 1;/*2回目以降は省略 */
 #else
                                        msg_format("%^s misses you.", m_name);
 #endif
@@ -2103,28 +2010,28 @@ msg_format("%s
 
                if (p_ptr->riding && damage)
                {
-                       char m_name[80];
-                       monster_desc(m_name, &m_list[p_ptr->riding], 0);
+                       char m_steed_name[80];
+                       monster_desc(m_steed_name, &m_list[p_ptr->riding], 0);
                        if (rakuba((damage > 200) ? 200 : damage, FALSE))
                        {
-#ifdef JP
-msg_format("%^s¤«¤éÍî¤Á¤Æ¤·¤Þ¤Ã¤¿¡ª", m_name);
-#else
-                               msg_format("You have fallen from %s.", m_name);
-#endif
+                               msg_format(_("%^sから落ちてしまった!", "You have fallen from %s."), m_steed_name);
                        }
                }
+
                if (p_ptr->special_defense & NINJA_KAWARIMI)
                {
-                       kawarimi(FALSE);
-                       return TRUE;
+                       if (kawarimi(FALSE)) return TRUE;
                }
        }
 
-       if (p_ptr->tim_eyeeye && get_damage > 0 && !p_ptr->is_dead)
+       /* Hex - revenge damage stored */
+       revenge_store(get_damage);
+
+       if ((p_ptr->tim_eyeeye || hex_spelling(HEX_EYE_FOR_EYE))
+               && get_damage > 0 && !p_ptr->is_dead)
        {
 #ifdef JP
-               msg_format("¹¶·â¤¬%s¼«¿È¤ò½ý¤Ä¤±¤¿¡ª", m_name);
+               msg_format("攻撃が%s自身を傷つけた!", m_name);
 #else
                char m_name_self[80];
 
@@ -2134,21 +2041,16 @@ msg_format("%^s
                msg_format("The attack of %s has wounded %s!", m_name, m_name_self);
 #endif
                project(0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL, -1);
-               set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE);
+               if (p_ptr->tim_eyeeye) set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE);
        }
 
-
        if ((p_ptr->counter || (p_ptr->special_defense & KATA_MUSOU)) && alive && !p_ptr->is_dead && m_ptr->ml && (p_ptr->csp > 7))
        {
-               char m_name[80];
+               char m_target_name[80];
                monster_desc(m_name, m_ptr, 0);
 
                p_ptr->csp -= 7;
-#ifdef JP
-               msg_format("%^s¤ËÈ¿·â¤·¤¿¡ª", m_name);
-#else
-               msg_format("Your counterattack to %s!", m_name);
-#endif
+               msg_format(_("%^sに反撃した!", "Your counterattack to %s!"), m_target_name);
                py_attack(m_ptr->fy, m_ptr->fx, HISSATSU_COUNTER);
                fear = FALSE;
 
@@ -2159,13 +2061,15 @@ msg_format("%^s
        /* Blink away */
        if (blinked && alive && !p_ptr->is_dead)
        {
-#ifdef JP
-               msg_print("Å¥ËÀ¤Ï¾Ð¤Ã¤Æƨ¤²¤¿¡ª");
-#else
-               msg_print("The thief flees laughing!");
-#endif
-
-               teleport_away(m_idx, MAX_SIGHT * 2 + 5, 0L);
+               if (teleport_barrier(m_idx))
+               {
+                       msg_print(_("泥棒は笑って逃げ...ようとしたがバリアに防がれた。", "The thief flees laughing...? But magic barrier obstructs it."));
+               }
+               else
+               {
+                       msg_print(_("泥棒は笑って逃げた!", "The thief flees laughing!"));
+                       teleport_away(m_idx, MAX_SIGHT * 2 + 5, 0L);
+               }
        }
 
 
@@ -2178,12 +2082,7 @@ msg_format("%^s
        if (m_ptr->ml && fear && alive && !p_ptr->is_dead)
        {
                sound(SOUND_FLEE);
-#ifdef JP
-               msg_format("%^s¤Ï¶²ÉݤÇƨ¤²½Ð¤·¤¿¡ª", m_name);
-#else
-               msg_format("%^s flees in terror!", m_name);
-#endif
-
+               msg_format(_("%^sは恐怖で逃げ出した!", "%^s flees in terror!"), m_name);
        }
 
        if (p_ptr->special_defense & KATA_IAI)