OSDN Git Service

[Refactor] #37353 コメント整理 / Refactor comments.
[hengband/hengband.git] / src / xtra2.c
index ba27981..616ceeb 100644 (file)
@@ -14,6 +14,8 @@
 #include "angband.h"
 #include "cmd-pet.h"
 #include "object-curse.h"
+#include "monsterrace-hook.h"
+#include "objectkind-hook.h"
 
 #define REWARD_CHANCE 10
 
@@ -49,8 +51,6 @@ void check_experience(void)
 
        /* Redraw experience */
        p_ptr->redraw |= (PR_EXP);
-
-       /* Handle stuff */
        handle_stuff();
 
 
@@ -60,16 +60,9 @@ void check_experience(void)
        {
                /* Lose a level */
                p_ptr->lev--;
-
-               /* Update some stuff */
                p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
-
-               /* Redraw some stuff */
                p_ptr->redraw |= (PR_LEV | PR_TITLE);
-
                p_ptr->window |= (PW_PLAYER);
-
-               /* Handle stuff */
                handle_stuff();
        }
 
@@ -104,18 +97,12 @@ void check_experience(void)
 
                msg_format(_("レベル %d にようこそ。", "Welcome to level %d."), p_ptr->lev);
 
-               /* Update some stuff */
                p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
-
-               /* Redraw some stuff */
                p_ptr->redraw |= (PR_LEV | PR_TITLE | PR_EXP);
-
                p_ptr->window |= (PW_PLAYER | PW_SPELL | PW_INVEN);
 
                /* HPとMPの上昇量を表示 */
                level_up = 1;
-
-               /* Handle stuff */
                handle_stuff();
 
                level_up = 0;
@@ -131,37 +118,22 @@ void check_experience(void)
                                        int n;
                                        char tmp[32];
 
-#ifdef JP
                                        cnv_stat(p_ptr->stat_max[0], tmp);
-                                       prt(format("        a) 腕力 (現在値 %s)", tmp), 2, 14);
+                                       prt(format(_("        a) 腕力 (現在値 %s)", "        a) Str (cur %s)"), tmp), 2, 14);
                                        cnv_stat(p_ptr->stat_max[1], tmp);
-                                       prt(format("        b) 知能 (現在値 %s)", tmp), 3, 14);
+                                       prt(format(_("        b) 知能 (現在値 %s)", "        a) Int (cur %s)"), tmp), 3, 14);
                                        cnv_stat(p_ptr->stat_max[2], tmp);
-                                       prt(format("        c) 賢さ (現在値 %s)", tmp), 4, 14);
+                                       prt(format(_("        c) 賢さ (現在値 %s)", "        a) Wis (cur %s)"), tmp), 4, 14);
                                        cnv_stat(p_ptr->stat_max[3], tmp);
-                                       prt(format("        d) 器用 (現在値 %s)", tmp), 5, 14);
+                                       prt(format(_("        d) 器用 (現在値 %s)", "        a) Dex (cur %s)"), tmp), 5, 14);
                                        cnv_stat(p_ptr->stat_max[4], tmp);
-                                       prt(format("        e) 耐久 (現在値 %s)", tmp), 6, 14);
+                                       prt(format(_("        e) 耐久 (現在値 %s)", "        a) Con (cur %s)"), tmp), 6, 14);
                                        cnv_stat(p_ptr->stat_max[5], tmp);
-                                       prt(format("        f) 魅力 (現在値 %s)", tmp), 7, 14);
-                                       prt("", 8, 14);
-                                       prt("        どの能力値を上げますか?", 1, 14);
-#else
-                                       cnv_stat(p_ptr->stat_max[0], tmp);
-                                       prt(format("        a) Str (cur %s)", tmp), 2, 14);
-                                       cnv_stat(p_ptr->stat_max[1], tmp);
-                                       prt(format("        b) Int (cur %s)", tmp), 3, 14);
-                                       cnv_stat(p_ptr->stat_max[2], tmp);
-                                       prt(format("        c) Wis (cur %s)", tmp), 4, 14);
-                                       cnv_stat(p_ptr->stat_max[3], tmp);
-                                       prt(format("        d) Dex (cur %s)", tmp), 5, 14);
-                                       cnv_stat(p_ptr->stat_max[4], tmp);
-                                       prt(format("        e) Con (cur %s)", tmp), 6, 14);
-                                       cnv_stat(p_ptr->stat_max[5], tmp);
-                                       prt(format("        f) Chr (cur %s)", tmp), 7, 14);
+                                       prt(format(_("        f) 魅力 (現在値 %s)", "        a) Chr (cur %s)"), tmp), 7, 14);
+
                                        prt("", 8, 14);
-                                       prt("        Which stat do you want to raise?", 1, 14);
-#endif
+                                       prt(_("        どの能力値を上げますか?", "        Which stat do you want to raise?"), 1, 14);
+
                                        while(1)
                                        {
                                                choice = inkey();
@@ -196,15 +168,9 @@ void check_experience(void)
                        level_reward = FALSE;
                }
 
-               /* Update some stuff */
                p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
-
-               /* Redraw some stuff */
                p_ptr->redraw |= (PR_LEV | PR_TITLE);
-
                p_ptr->window |= (PW_PLAYER | PW_SPELL);
-
-               /* Handle stuff */
                handle_stuff();
        }
 
@@ -240,151 +206,6 @@ static int get_coin_type(MONRACE_IDX r_idx)
 }
 
 
-/*!
- * @brief オブジェクトがクロークかどうかを判定する /
- * Hack -- determine if a template is Cloak
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトがクロークならばTRUEを返す
- */
-static bool kind_is_cloak(KIND_OBJECT_IDX k_idx)
-{
-       object_kind *k_ptr = &k_info[k_idx];
-
-       /* Analyze the item type */
-       if (k_ptr->tval == TV_CLOAK)
-       {
-               return (TRUE);
-       }
-
-       /* Assume not good */
-       return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトが竿状武器かどうかを判定する /
- * Hack -- determine if a template is Polearm
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトが竿状武器ならばTRUEを返す
- */
-static bool kind_is_polearm(KIND_OBJECT_IDX k_idx)
-{
-       object_kind *k_ptr = &k_info[k_idx];
-
-       /* Analyze the item type */
-       if (k_ptr->tval == TV_POLEARM)
-       {
-               return (TRUE);
-       }
-
-       /* Assume not good */
-       return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトが剣かどうかを判定する /
- * Hack -- determine if a template is Sword
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトが剣ならばTRUEを返す
- */
-static bool kind_is_sword(KIND_OBJECT_IDX k_idx)
-{
-       object_kind *k_ptr = &k_info[k_idx];
-
-       /* Analyze the item type */
-       if ((k_ptr->tval == TV_SWORD) && (k_ptr->sval > 2))
-       {
-               return (TRUE);
-       }
-
-       /* Assume not good */
-       return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトが魔法書かどうかを判定する /
- * Hack -- determine if a template is Book
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトが魔法書ならばTRUEを返す
- */
-static bool kind_is_book(KIND_OBJECT_IDX k_idx)
-{
-       object_kind *k_ptr = &k_info[k_idx];
-
-       /* Analyze the item type */
-       if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK))
-       {
-               return (TRUE);
-       }
-
-       /* Assume not good */
-       return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトがベースアイテム時点でGOODかどうかを判定する /
- * Hack -- determine if a template is Good book
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトがベースアイテム時点でGOODなアイテムならばTRUEを返す
- */
-static bool kind_is_good_book(KIND_OBJECT_IDX k_idx)
-{
-       object_kind *k_ptr = &k_info[k_idx];
-
-       /* Analyze the item type */
-       if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK) && (k_ptr->tval != TV_ARCANE_BOOK) && (k_ptr->sval > 1))
-       {
-               return (TRUE);
-       }
-
-       /* Assume not good */
-       return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトが鎧かどうかを判定する /
- * Hack -- determine if a template is Armor
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトが鎧ならばTRUEを返す
- */
-static bool kind_is_armor(KIND_OBJECT_IDX k_idx)
-{
-       object_kind *k_ptr = &k_info[k_idx];
-
-       /* Analyze the item type */
-       if (k_ptr->tval == TV_HARD_ARMOR)
-       {
-               return (TRUE);
-       }
-
-       /* Assume not good */
-       return (FALSE);
-}
-
-
-/*!
- * @brief オブジェクトが打撃武器かどうかを判定する /
- * Hack -- determine if a template is hafted weapon
- * @param k_idx 判定したいオブジェクトのベースアイテムID
- * @return オブジェクトが打撃武器ならばTRUEを返す
- */
-static bool kind_is_hafted(KIND_OBJECT_IDX k_idx)
-{
-       object_kind *k_ptr = &k_info[k_idx];
-
-       /* Analyze the item type */
-       if (k_ptr->tval == TV_HAFTED)
-       {
-               return (TRUE);
-       }
-
-       /* Assume not good */
-       return (FALSE);
-}
 
 /*!
  * @brief クエストを達成状態にする /
@@ -460,7 +281,6 @@ void check_quest_completion(monster_type *m_ptr)
        object_type forge;
        object_type *o_ptr;
 
-       /* Get the location */
        y = m_ptr->fy;
        x = m_ptr->fx;
 
@@ -646,10 +466,7 @@ void check_quest_completion(monster_type *m_ptr)
 
                for (i = 0; i < (dun_level / 15)+1; i++)
                {
-                       /* Get local object */
                        o_ptr = &forge;
-
-                       /* Wipe the object */
                        object_wipe(o_ptr);
 
                        /* Make a great object */
@@ -689,10 +506,11 @@ void check_find_art_quest_completion(object_type *o_ptr)
  * @param r_ptr 撃破されたモンスターの種族情報を持つ構造体の参照ポインタ
  * @return 撃破されたモンスターの述語
  */
-cptr extract_note_dies(monster_race *r_ptr)
+cptr extract_note_dies(MONRACE_IDX r_idx)
 {
+       monster_race *r_ptr = &r_info[r_idx];
        /* Some monsters get "destroyed" */
-       if (!monster_living(r_ptr))
+       if (!monster_living(r_idx))
        {
                int i;
 
@@ -730,15 +548,14 @@ cptr extract_note_dies(monster_race *r_ptr)
  */
 void monster_death(MONSTER_IDX m_idx, bool drop_item)
 {
-       int i, j, y, x;
+       int i, j;
+       POSITION y, x;
 
        int dump_item = 0;
        int dump_gold = 0;
-
        int number = 0;
 
        monster_type *m_ptr = &m_list[m_idx];
-
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
        bool visible = ((m_ptr->ml && !p_ptr->image) || (r_ptr->flags1 & RF1_UNIQUE));
@@ -766,7 +583,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
                p_ptr->update |= (PU_MON_LITE);
        }
 
-       /* Get the location */
        y = m_ptr->fy;
        x = m_ptr->fx;
 
@@ -819,12 +635,10 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
 
                if (arena_info[p_ptr->arena_number].tval)
                {
-                       /* Get local object */
                        q_ptr = &forge;
 
                        /* Prepare to make a prize */
                        object_prep(q_ptr, lookup_kind(arena_info[p_ptr->arena_number].tval, arena_info[p_ptr->arena_number].sval));
-
                        apply_magic(q_ptr, object_level, AM_NO_FIXED_ART);
 
                        /* Drop it in the dungeon */
@@ -882,8 +696,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
                                if (!one_in_(5)) corpse = TRUE;
                        }
                }
-
-               /* Get local object */
                q_ptr = &forge;
 
                /* Prepare to make an object */
@@ -913,7 +725,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
 
                        for (i = 0; i < 2; i++)
                        {
-                               int wy = y, wx = x;
+                               POSITION wy = y, wx = x;
                                bool pet = is_pet(m_ptr);
                                BIT_FLAGS mode = 0L;
 
@@ -921,13 +733,11 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
 
                                if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_BLUE_HORROR, mode))
                                {
-                                       if (player_can_see_bold(wy, wx))
-                                               notice = TRUE;
+                                       if (player_can_see_bold(wy, wx)) notice = TRUE;
                                }
                        }
 
-                       if (notice)
-                               msg_print(_("ピンク・ホラーは分裂した!", "The Pink horror divides!"));
+                       if (notice) msg_print(_("ピンク・ホラーは分裂した!", "The Pink horror divides!"));
                }
                break;
 
@@ -935,7 +745,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
                /* Bloodletters of Khorne may drop a blade of chaos */
                if (drop_chosen_item && (randint1(100) < 15))
                {
-                       /* Get local object */
                        q_ptr = &forge;
 
                        /* Prepare to make a Blade of Chaos */
@@ -951,10 +760,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
        case MON_RAAL:
                if (drop_chosen_item && (dun_level > 9))
                {
-                       /* Get local object */
                        q_ptr = &forge;
-
-                       /* Wipe the object */
                        object_wipe(q_ptr);
 
                        /* Activate restriction */
@@ -1057,8 +863,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
 
        case MON_SERPENT:
                if (!drop_chosen_item) break;
-
-               /* Get local object */
                q_ptr = &forge;
 
                /* Mega-Hack -- Prepare to make "Grond" */
@@ -1072,8 +876,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
 
                /* Drop it in the dungeon */
                (void)drop_near(q_ptr, -1, y, x);
-
-               /* Get local object */
                q_ptr = &forge;
 
                /* Mega-Hack -- Prepare to make "Chaos" */
@@ -1092,7 +894,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
        case MON_B_DEATH_SWORD:
                if (drop_chosen_item)
                {
-                       /* Get local object */
                        q_ptr = &forge;
 
                        /* Prepare to make a broken sword */
@@ -1108,7 +909,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
                if (drop_chosen_item && ((m_ptr->r_idx == MON_A_GOLD) ||
                     ((m_ptr->r_idx == MON_A_SILVER) && (r_ptr->r_akills % 5 == 0))))
                {
-                       /* Get local object */
                        q_ptr = &forge;
 
                        /* Prepare to make a Can of Toys */
@@ -1136,10 +936,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
                case '(':
                        if (dun_level > 0)
                        {
-                               /* Get local object */
                                q_ptr = &forge;
-
-                               /* Wipe the object */
                                object_wipe(q_ptr);
 
                                /* Activate restriction */
@@ -1156,10 +953,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
                case '/':
                        if (dun_level > 4)
                        {
-                               /* Get local object */
                                q_ptr = &forge;
-
-                               /* Wipe the object */
                                object_wipe(q_ptr);
 
                                /* Activate restriction */
@@ -1176,10 +970,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
                case '[':
                        if (dun_level > 19)
                        {
-                               /* Get local object */
                                q_ptr = &forge;
-
-                               /* Wipe the object */
                                object_wipe(q_ptr);
 
                                /* Activate restriction */
@@ -1196,10 +987,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
                case '\\':
                        if (dun_level > 4)
                        {
-                               /* Get local object */
                                q_ptr = &forge;
-
-                               /* Wipe the object */
                                object_wipe(q_ptr);
 
                                /* Activate restriction */
@@ -1216,10 +1004,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
                case '|':
                        if (m_ptr->r_idx != MON_STORMBRINGER)
                        {
-                               /* Get local object */
                                q_ptr = &forge;
-
-                               /* Wipe the object */
                                object_wipe(q_ptr);
 
                                /* Activate restriction */
@@ -1296,7 +1081,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
 
                        if (k_idx)
                        {
-                               /* Get local object */
                                q_ptr = &forge;
 
                                /* Prepare to make a reward */
@@ -1338,10 +1122,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item)
        /* Drop some objects */
        for (j = 0; j < number; j++)
        {
-               /* Get local object */
                q_ptr = &forge;
-
-               /* Wipe the object */
                object_wipe(q_ptr);
 
                /* Make Gold */
@@ -1568,15 +1349,14 @@ static void get_exp_from_mon(HIT_POINT dam, monster_type *m_ptr)
  */
 bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
 {
-       monster_type    *m_ptr = &m_list[m_idx];
-       monster_race    *r_ptr = &r_info[m_ptr->r_idx];
-
-       monster_type    exp_mon;
+       monster_type *m_ptr = &m_list[m_idx];
+       monster_race *r_ptr = &r_info[m_ptr->r_idx];
+       monster_type exp_mon;
 
        /* Innocent until proven otherwise */
-       bool        innocent = TRUE, thief = FALSE;
-       int         i;
-       int         expdam;
+       bool innocent = TRUE, thief = FALSE;
+       int i;
+       HIT_POINT expdam;
 
        (void)COPY(&exp_mon, m_ptr, monster_type);
        
@@ -1591,7 +1371,6 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
        if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
        if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
 
-       /* Wake it up */
        (void)set_monster_csleep(m_idx, 0);
 
        /* Hack - Cancel any special player stealth magics. -LM- */
@@ -1603,15 +1382,14 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
        /* Genocided by chaos patron */
        if (!m_idx) return TRUE;
        
-       /* Hurt it */
        m_ptr->hp -= dam;
-       
        m_ptr->dealt_damage += dam;
+
        if(m_ptr->dealt_damage > m_ptr->max_maxhp * 100) m_ptr->dealt_damage = m_ptr->max_maxhp * 100;
+
        if (p_ptr->wizard)
        {
-               msg_format( _("合計%d/%dのダメージを与えた。","You do %d (out of %d) damage."),
-                                       m_ptr->dealt_damage, m_ptr->maxhp);
+               msg_format( _("合計%d/%dのダメージを与えた。","You do %d (out of %d) damage."), m_ptr->dealt_damage, m_ptr->maxhp);
        }
 
        /* It is dead now */
@@ -1710,13 +1488,13 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
 
                        /* Dump a message */
                        if (!get_rnd_line(_("mondeath_j.txt", "mondeath.txt"), m_ptr->r_idx, line_got))
-
+                       {
                                msg_format("%^s %s", m_name, line_got);
+                       }
 
 #ifdef WORLD_SCORE
                        if (m_ptr->r_idx == MON_SERPENT)
                        {
-                               /* Make screen dump */
                                screen_dump = make_screen_dump();
                        }
 #endif
@@ -1759,8 +1537,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
                        chg_virtue(V_COMPASSION, -1);
                }
 
-               if ((r_ptr->flags3 & RF3_GOOD) &&
-                       ((r_ptr->level) / 10 + (3 * dun_level) >= randint1(100)))
+               if ((r_ptr->flags3 & RF3_GOOD) && ((r_ptr->level) / 10 + (3 * dun_level) >= randint1(100)))
                        chg_virtue(V_UNLIFE, 1);
 
                if (r_ptr->d_char == 'A')
@@ -1817,8 +1594,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
                {
                        if (r_ptr->flags1 & RF1_UNIQUE)
                                chg_virtue(V_JUSTICE, 3);
-                       else if (1+((r_ptr->level) / 10 + (2 * dun_level))
-                               >= randint1(100))
+                       else if (1+((r_ptr->level) / 10 + (2 * dun_level)) >= randint1(100))
                                chg_virtue(V_JUSTICE, 1);
                }
                else if (innocent)
@@ -1834,11 +1610,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
                if ((r_ptr->flags1 & RF1_UNIQUE) && record_destroy_uniq)
                {
                        char note_buf[160];
-#ifdef JP
-                       sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? "(クローン)" : "");
-#else
-                       sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? "(Clone)" : "");
-#endif
+                       sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? _("(クローン)", "(Clone)") : "");
                        do_cmd_write_nikki(NIKKI_UNIQUE, 0, note_buf);
                }
 
@@ -1866,7 +1638,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
                }
 
                /* Death by Physical attack -- non-living monster */
-               else if (!monster_living(r_ptr))
+               else if (!monster_living(m_ptr->r_idx))
                {
                        bool explode = FALSE;
 
@@ -1884,7 +1656,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
                                if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
                                        msg_format("せっかくだから%sを倒した。", m_name);
                                else
-msg_format("%sを倒した。", m_name);
+                               msg_format("%sを倒した。", m_name);
 #else
                                msg_format("You have destroyed %s.", m_name);
 #endif
@@ -1898,7 +1670,7 @@ msg_format("%sを倒した。", m_name);
                        if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON))
                                msg_format("せっかくだから%sを葬り去った。", m_name);
                        else
-msg_format("%sを葬り去った。", m_name);
+                               msg_format("%sを葬り去った。", m_name);
 #else
                                msg_format("You have slain %s.", m_name);
 #endif
@@ -1920,18 +1692,13 @@ msg_format("%sを葬り去った。", m_name);
                monster_death(m_idx, TRUE);
 
                /* Mega hack : replace IKETA to BIKETAL */
-               if ((m_ptr->r_idx == MON_IKETA) &&
-                   !(p_ptr->inside_arena || p_ptr->inside_battle))
+               if ((m_ptr->r_idx == MON_IKETA) && !(p_ptr->inside_arena || p_ptr->inside_battle))
                {
-                       int dummy_y = m_ptr->fy;
-                       int dummy_x = m_ptr->fx;
+                       POSITION dummy_y = m_ptr->fy;
+                       POSITION dummy_x = m_ptr->fx;
                        BIT_FLAGS mode = 0L;
-
                        if (is_pet(m_ptr)) mode |= PM_FORCE_PET;
-
-                       /* Delete the monster */
                        delete_monster_idx(m_idx);
-
                        if (summon_named_creature(0, dummy_y, dummy_x, MON_BIKETAL, mode))
                        {
                                msg_print(_("「ハァッハッハッハ!!私がバイケタルだ!!」", "Uwa-hahaha!  *I* am Biketal!"));
@@ -1939,7 +1706,6 @@ msg_format("%sを葬り去った。", m_name);
                }
                else
                {
-                       /* Delete the monster */
                        delete_monster_idx(m_idx);
                }
 
@@ -1976,8 +1742,7 @@ msg_format("%sを葬り去った。", m_name);
                 * Run (sometimes) if at 10% or less of max hit points,
                 * or (usually) when hit for half its current hit points
                 */
-               if ((randint1(10) >= percentage) ||
-                   ((dam >= m_ptr->hp) && (randint0(100) < 80)))
+               if ((randint1(10) >= percentage) || ((dam >= m_ptr->hp) && (randint0(100) < 80)))
                {
                        /* Hack -- note fear */
                        (*fear) = TRUE;
@@ -1991,22 +1756,6 @@ msg_format("%sを葬り去った。", m_name);
 
 #endif
 
-#if 0
-       if (p_ptr->riding && (p_ptr->riding == m_idx) && (dam > 0))
-       {
-               char m_name[80];
-
-               /* Extract monster name */
-               monster_desc(m_name, m_ptr, 0);
-
-               if (m_ptr->hp > m_ptr->maxhp/3) dam = (dam + 1) / 2;
-               if (rakuba((dam > 200) ? 200 : dam, FALSE))
-               {
-               msg_format(_("%^sに振り落とされた!", "%^s has thrown you off!"), m_name);
-               }
-       }
-#endif
-
        /* Not dead yet */
        return (FALSE);
 }
@@ -2037,7 +1786,6 @@ void panel_bounds_center(void)
 {
        int wid, hgt;
 
-       /* Get size */
        get_screen_size(&wid, &hgt);
 
        panel_row_max = panel_row_min + hgt - 1;
@@ -2083,8 +1831,6 @@ void resize_map(void)
 
        /* Hack -- update */
        handle_stuff();
-       
-       /* Redraw */
        Term_redraw();
 
        /*
@@ -2108,13 +1854,10 @@ void redraw_window(void)
        if (!character_dungeon) return;
 
        p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER);
-
        p_ptr->window |= (PW_MESSAGE | PW_OVERHEAD | PW_DUNGEON | PW_MONSTER | PW_OBJECT);
 
        /* Hack -- update */
        handle_stuff();
-
-       /* Redraw */
        Term_redraw();
 }
 
@@ -2133,7 +1876,6 @@ bool change_panel(POSITION dy, POSITION dx)
        POSITION y, x;
        TERM_LEN wid, hgt;
 
-       /* Get size */
        get_screen_size(&wid, &hgt);
 
        /* Apply the motion */
@@ -2160,10 +1902,7 @@ bool change_panel(POSITION dy, POSITION dx)
 
                p_ptr->update |= (PU_MONSTERS);
 
-               /* Redraw map */
                p_ptr->redraw |= (PR_MAP);
-
-               /* Handle stuff */
                handle_stuff();
 
                /* Success */
@@ -2189,7 +1928,6 @@ static bool change_panel_xy(POSITION y, POSITION x)
        POSITION dy = 0, dx = 0;
        TERM_LEN wid, hgt;
 
-       /* Get size */
        get_screen_size(&wid, &hgt);
 
        if (y < panel_row_min) dy = -1;
@@ -2223,7 +1961,6 @@ void verify_panel(void)
        int max_prow_min;
        int max_pcol_min;
 
-       /* Get size */
        get_screen_size(&wid, &hgt);
 
        max_prow_min = cur_hgt - hgt;
@@ -2300,16 +2037,13 @@ void verify_panel(void)
        panel_col_min = pcol_min;
 
        /* Hack -- optional disturb on "panel change" */
-       if (disturb_panel && !center_player) disturb(0, 0);
+       if (disturb_panel && !center_player) disturb(FALSE, FALSE);
 
        /* Recalculate the boundaries */
        panel_bounds_center();
 
        p_ptr->update |= (PU_MONSTERS);
-
-       /* Redraw map */
        p_ptr->redraw |= (PR_MAP);
-
        p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
 }
 
@@ -2320,14 +2054,14 @@ void verify_panel(void)
 cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode)
 {
        monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx];
-       bool         living;
-       int          perc;
+       bool living;
+       int perc;
        cptr desc;
        cptr attitude;
        cptr clone;
 
        /* Determine if the monster is "living" */
-       living = monster_living(ap_r_ptr);
+       living = monster_living(m_ptr->ap_r_idx);
 
        /* Calculate a health "percentage" */
        perc = 100L * m_ptr->hp / m_ptr->maxhp;
@@ -2335,55 +2069,29 @@ cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode)
        /* Healthy monsters */
        if (m_ptr->hp >= m_ptr->maxhp)
        {
-               /* No damage */
-#ifdef JP
-               desc = living ? "無傷" : "無ダメージ";
-#else
-               desc = living ? "unhurt" : "undamaged";
-#endif
-
+               desc = living ? _("無傷", "unhurt") : _("無ダメージ", "undamaged");
        }
 
        else if (perc >= 60)
        {
-#ifdef JP
-               desc = living ? "軽傷" : "小ダメージ";
-#else
-               desc = living ? "somewhat wounded" : "somewhat damaged";
-#endif
-
+               desc = living ? _("軽傷", "somewhat wounded") : _("小ダメージ", "somewhat damaged");
        }
 
        else if (perc >= 25)
        {
-#ifdef JP
-               desc = living ? "負傷" : "中ダメージ";
-#else
-               desc = living ? "wounded" : "damaged";
-#endif
-
+               desc = living ? _("負傷", "wounded") : _("中ダメージ", "damaged");
        }
 
        else if (perc >= 10)
        {
-#ifdef JP
-               desc = living ? "重傷" : "大ダメージ";
-#else
-               desc = living ? "badly wounded" : "badly damaged";
-#endif
-
+               desc = living ? _("重傷", "badly wounded") : _("大ダメージ", "badly damaged");
        }
 
        else 
        {
-#ifdef JP
-               desc = living ? "半死半生" : "倒れかけ";
-#else
-               desc = living ? "almost dead" : "almost destroyed";
-#endif
+               desc = living ? _("半死半生", "almost dead") : _("倒れかけ", "almost destroyed");
        }
 
-
        /* Need attitude information? */
        if (!(mode & 0x01))
        {
@@ -2403,7 +2111,6 @@ cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode)
                attitude = _("", "");
        }
 
-
        /* Clone monster? */
        if (m_ptr->smart & SM_CLONED)
        {
@@ -2423,6 +2130,7 @@ cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode)
        {
                return format(_("レベル???, %s%s%s", "Level ???, %s%s%s"), desc, attitude, clone);
        }
+
 }
 
 
@@ -2740,8 +2448,6 @@ static POSITION_IDX target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION
                /* Track best */
                b_i = i; b_v = v;
        }
-
-       /* Result */
        return (b_i);
 }
 
@@ -2779,8 +2485,6 @@ static bool target_set_accept(POSITION y, POSITION x)
        for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
        {
                object_type *o_ptr;
-
-               /* Acquire object */
                o_ptr = &o_list[this_o_idx];
 
                /* Acquire next object */
@@ -2800,7 +2504,6 @@ static bool target_set_accept(POSITION y, POSITION x)
                if (have_flag(f_info[get_feat_mimic(c_ptr)].flags, FF_NOTICE)) return TRUE;
        }
 
-       /* Nope */
        return (FALSE);
 }
 
@@ -2982,8 +2685,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
        feature_type *f_ptr;
        char query = '\001';
        char out_val[MAX_NLEN+80];
-
-#ifdef ALLOW_EASY_FLOOR
        OBJECT_IDX floor_list[23];
        ITEM_NUMBER floor_num = 0;
 
@@ -2998,8 +2699,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
                }
        }
 
-#endif /* ALLOW_EASY_FLOOR */
-
        /* Hack -- under the player */
        if (player_bold(y, x))
        {
@@ -3063,8 +2762,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
 
                /* Hack -- health bar for this monster */
                health_track(c_ptr->m_idx);
-
-               /* Hack -- handle stuff */
                handle_stuff();
 
                /* Interact */
@@ -3154,8 +2851,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
                        char o_name[MAX_NLEN];
 
                        object_type *o_ptr;
-
-                       /* Acquire object */
                        o_ptr = &o_list[this_o_idx];
 
                        /* Acquire next object */
@@ -3164,7 +2859,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
                        /* Obtain an object description */
                        object_desc(o_name, o_ptr, 0);
 
-                       /* Describe the object */
 #ifdef JP
                        sprintf(out_val, "%s%s%s%s[%s]", s1, o_name, s2, s3, info);
 #else
@@ -3194,8 +2888,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
 #endif
        }
 
-
-#ifdef ALLOW_EASY_FLOOR
        if (floor_num)
        {
                int min_width = 0;
@@ -3207,19 +2899,14 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
                                char o_name[MAX_NLEN];
 
                                object_type *o_ptr;
-
-                               /* Acquire object */
                                o_ptr = &o_list[floor_list[0]];
 
-                               /* Describe the object */
                                object_desc(o_name, o_ptr, 0);
 
 #ifdef JP
-                               sprintf(out_val, "%s%s%s%s[%s]",
-                                       s1, o_name, s2, s3, info);
+                               sprintf(out_val, "%s%s%s%s[%s]", s1, o_name, s2, s3, info);
 #else
-                               sprintf(out_val, "%s%s%s%s [%s]",
-                                       s1, s2, s3, o_name, info);
+                               sprintf(out_val, "%s%s%s%s [%s]", s1, s2, s3, o_name, info);
 #endif
 
                                prt(out_val, 0, 0);
@@ -3237,11 +2924,9 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
                        {
                                /* Display rough information about items */
 #ifdef JP
-                               sprintf(out_val, "%s %d個のアイテム%s%s ['x'で一覧, %s]",
-                                       s1, (int)floor_num, s2, s3, info);
+                               sprintf(out_val, "%s %d個のアイテム%s%s ['x'で一覧, %s]", s1, (int)floor_num, s2, s3, info);
 #else
-                               sprintf(out_val, "%s%s%sa pile of %d items [x,%s]",
-                                       s1, s2, s3, (int)floor_num, info);
+                               sprintf(out_val, "%s%s%sa pile of %d items [x,%s]", s1, s2, s3, (int)floor_num, info);
 #endif
 
                                prt(out_val, 0, 0);
@@ -3262,8 +2947,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
                        {
                                int i;
                                OBJECT_IDX o_idx;
-
-                               /* Save screen */
                                screen_save();
 
                                /* Display */
@@ -3273,19 +2956,13 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
 
                                /* Prompt */
 #ifdef JP
-                               sprintf(out_val, "%s %d個のアイテム%s%s [Enterで次へ, %s]",
-                                       s1, (int)floor_num, s2, s3, info);
+                               sprintf(out_val, "%s %d個のアイテム%s%s [Enterで次へ, %s]", s1, (int)floor_num, s2, s3, info);
 #else
-                               sprintf(out_val, "%s%s%sa pile of %d items [Enter,%s]",
-                                       s1, s2, s3, (int)floor_num, info);
+                               sprintf(out_val, "%s%s%sa pile of %d items [Enter,%s]", s1, s2, s3, (int)floor_num, info);
 #endif
                                prt(out_val, 0, 0);
 
-
-                               /* Wait */
                                query = inkey();
-
-                               /* Load screen */
                                screen_load();
 
                                /* Exit unless 'Enter' */
@@ -3317,15 +2994,11 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
 
                /* NOTREACHED */
        }
-#endif /* ALLOW_EASY_FLOOR */
-
 
        /* Scan all objects in the grid */
        for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
        {
                object_type *o_ptr;
-
-               /* Acquire object */
                o_ptr = &o_list[this_o_idx];
 
                /* Acquire next object */
@@ -3342,7 +3015,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
                        /* Obtain an object description */
                        object_desc(o_name, o_ptr, 0);
 
-                       /* Describe the object */
 #ifdef JP
                        sprintf(out_val, "%s%s%s%s[%s]", s1, o_name, s2, s3, info);
 #else
@@ -3523,7 +3195,7 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info)
  * some form of "scrolling" the map around the cursor.  
  * That is, consider the possibility of "auto-scrolling" the screen
  * while the cursor moves around.  This may require changes in the
- * "update_mon()" code to allow "visibility" even if off panel, and
+ * "update_monster()" code to allow "visibility" even if off panel, and
  * may require dynamic recalculation of the "temp" grid set.
  *
  * Hack -- targeting/observing an "outer border grid" may induce
@@ -3570,7 +3242,6 @@ bool target_set(BIT_FLAGS mode)
 
        int wid, hgt;
        
-       /* Get size */
        get_screen_size(&wid, &hgt);
 
        /* Cancel target */
@@ -3709,12 +3380,9 @@ bool target_set(BIT_FLAGS mode)
 
                                        p_ptr->update |= (PU_MONSTERS);
 
-                                       /* Redraw map */
                                        p_ptr->redraw |= (PR_MAP);
 
                                        p_ptr->window |= (PW_OVERHEAD);
-
-                                       /* Handle stuff */
                                        handle_stuff();
 
                                        /* Recalculate interesting grids */
@@ -3800,12 +3468,9 @@ bool target_set(BIT_FLAGS mode)
 
                                                p_ptr->update |= (PU_MONSTERS);
 
-                                               /* Redraw map */
                                                p_ptr->redraw |= (PR_MAP);
 
                                                p_ptr->window |= (PW_OVERHEAD);
-
-                                               /* Handle stuff */
                                                handle_stuff();
 
                                                /* Recalculate interesting grids */
@@ -3919,12 +3584,9 @@ bool target_set(BIT_FLAGS mode)
 
                                        p_ptr->update |= (PU_MONSTERS);
 
-                                       /* Redraw map */
                                        p_ptr->redraw |= (PR_MAP);
 
                                        p_ptr->window |= (PW_OVERHEAD);
-
-                                       /* Handle stuff */
                                        handle_stuff();
 
                                        /* Recalculate interesting grids */
@@ -4044,12 +3706,9 @@ bool target_set(BIT_FLAGS mode)
 
        p_ptr->update |= (PU_MONSTERS);
 
-       /* Redraw map */
        p_ptr->redraw |= (PR_MAP);
 
        p_ptr->window |= (PW_OVERHEAD);
-
-       /* Handle stuff */
        handle_stuff();
 
        /* Failure to set target */
@@ -4078,7 +3737,6 @@ bool get_aim_dir(DIRECTION *dp)
        cptr    p;
        COMMAND_CODE code;
 
-       /* Initialize */
        (*dp) = 0;
 
        /* Global direction */
@@ -4087,8 +3745,6 @@ bool get_aim_dir(DIRECTION *dp)
        /* Hack -- auto-target if requested */
        if (use_old_target && target_okay()) dir = 5;
 
-#ifdef ALLOW_REPEAT /* TNB */
-
        if (repeat_pull(&code))
        {
                /* Confusion? */
@@ -4102,8 +3758,6 @@ bool get_aim_dir(DIRECTION *dp)
        }
        *dp = (DIRECTION)code;
 
-#endif /* ALLOW_REPEAT -- TNB */
-
        /* Ask until satisfied */
        while (!dir)
        {
@@ -4191,59 +3845,33 @@ bool get_aim_dir(DIRECTION *dp)
        /* Save direction */
        (*dp) = dir;
 
-#ifdef ALLOW_REPEAT /* TNB */
-
 /*     repeat_push(dir); */
        repeat_push((COMMAND_CODE)command_dir);
 
-#endif /* ALLOW_REPEAT -- TNB */
-
        /* A "valid" direction was entered */
        return (TRUE);
 }
 
 
-
-/*
- * Request a "movement" direction (1,2,3,4,6,7,8,9) from the user,
- * and place it into "command_dir", unless we already have one.
- *
- * This function should be used for all "repeatable" commands, such as
- * run, walk, open, close, bash, disarm, spike, tunnel, etc, as well
- * as all commands which must reference a grid adjacent to the player,
- * and which may not reference the grid under the player.  Note that,
- * for example, it is no longer possible to "disarm" or "open" chests
- * in the same grid as the player.
- *
- * Direction "5" is illegal and will (cleanly) abort the command.
- *
- * This function tracks and uses the "global direction", and uses
- * that as the "desired direction", to which "confusion" is applied.
- */
-bool get_rep_dir(DIRECTION *dp, bool under)
+bool get_direction(DIRECTION *dp, bool allow_under, bool with_steed)
 {
        DIRECTION dir;
        cptr prompt;
        COMMAND_CODE code;
 
-       /* Initialize */
        (*dp) = 0;
 
        /* Global direction */
        dir = command_dir;
 
-#ifdef ALLOW_REPEAT /* TNB */
-
        if (repeat_pull(&code))
        {
                dir = (DIRECTION)code;
-/*             return (TRUE); */
+               /*              return (TRUE); */
        }
        *dp = (DIRECTION)code;
 
-#endif /* ALLOW_REPEAT -- TNB */
-
-       if (under)
+       if (allow_under)
        {
                prompt = _("方向 ('.'足元, ESCで中断)? ", "Direction ('.' at feet, Escape to cancel)? ");
        }
@@ -4251,7 +3879,7 @@ bool get_rep_dir(DIRECTION *dp, bool under)
        {
                prompt = _("方向 (ESCで中断)? ", "Direction (Escape to cancel)? ");
        }
-       
+
        /* Get a direction */
        while (!dir)
        {
@@ -4261,7 +3889,7 @@ bool get_rep_dir(DIRECTION *dp, bool under)
                if (!get_com(prompt, &ch, TRUE)) break;
 
                /* Look down */
-               if ((under) && ((ch == '5') || (ch == '-') || (ch == '.')))
+               if ((allow_under) && ((ch == '5') || (ch == '-') || (ch == '.')))
                {
                        dir = 5;
                }
@@ -4275,7 +3903,7 @@ bool get_rep_dir(DIRECTION *dp, bool under)
        }
 
        /* Prevent weirdness */
-       if ((dir == 5) && (!under)) dir = 0;
+       if ((dir == 5) && (!allow_under)) dir = 0;
 
        /* Aborted */
        if (!dir) return (FALSE);
@@ -4293,7 +3921,7 @@ bool get_rep_dir(DIRECTION *dp, bool under)
                        dir = ddd[randint0(8)];
                }
        }
-       else if (p_ptr->riding)
+       else if (p_ptr->riding && with_steed)
        {
                monster_type *m_ptr = &m_list[p_ptr->riding];
                monster_race *r_ptr = &r_info[m_ptr->r_idx];
@@ -4347,31 +3975,40 @@ bool get_rep_dir(DIRECTION *dp, bool under)
        /* Save direction */
        (*dp) = dir;
 
-#ifdef ALLOW_REPEAT /* TNB */
-
-/*     repeat_push(dir); */
+       /*      repeat_push(dir); */
        repeat_push((COMMAND_CODE)command_dir);
 
-#endif /* ALLOW_REPEAT -- TNB */
-
        /* Success */
        return (TRUE);
 }
 
-
-bool get_rep_dir2(DIRECTION *dp)
+/*
+ * @brief 進行方向を指定する(騎乗対象の混乱の影響を受ける) / Request a "movement" direction (1,2,3,4,6,7,8,9) from the user,
+ * and place it into "command_dir", unless we already have one.
+ *
+ * This function should be used for all "repeatable" commands, such as
+ * run, walk, open, close, bash, disarm, spike, tunnel, etc, as well
+ * as all commands which must reference a grid adjacent to the player,
+ * and which may not reference the grid under the player.  Note that,
+ * for example, it is no longer possible to "disarm" or "open" chests
+ * in the same grid as the player.
+ *
+ * Direction "5" is illegal and will (cleanly) abort the command.
+ *
+ * This function tracks and uses the "global direction", and uses
+ * that as the "desired direction", to which "confusion" is applied.
+ */
+bool get_rep_dir(DIRECTION *dp, bool under)
 {
        DIRECTION dir;
+       cptr prompt;
        COMMAND_CODE code;
 
-       /* Initialize */
        (*dp) = 0;
 
        /* Global direction */
        dir = command_dir;
 
-#ifdef ALLOW_REPEAT /* TNB */
-
        if (repeat_pull(&code))
        {
                dir = (DIRECTION)code;
@@ -4379,24 +4016,39 @@ bool get_rep_dir2(DIRECTION *dp)
        }
        *dp = (DIRECTION)code;
 
-#endif /* ALLOW_REPEAT -- TNB */
-
+       if (under)
+       {
+               prompt = _("方向 ('.'足元, ESCで中断)? ", "Direction ('.' at feet, Escape to cancel)? ");
+       }
+       else
+       {
+               prompt = _("方向 (ESCで中断)? ", "Direction (Escape to cancel)? ");
+       }
+       
        /* Get a direction */
        while (!dir)
        {
                char ch;
 
                /* Get a command (or Cancel) */
-               if (!get_com(_("方向 (ESCで中断)? ", "Direction (Escape to cancel)? "), &ch, TRUE)) break;
+               if (!get_com(prompt, &ch, TRUE)) break;
 
-               /* Look up the direction */
-               dir = get_keymap_dir(ch);
+               /* Look down */
+               if ((under) && ((ch == '5') || (ch == '-') || (ch == '.')))
+               {
+                       dir = 5;
+               }
+               else
+               {
+                       /* Look up the direction */
+                       dir = get_keymap_dir(ch);
 
-               if (!dir) bell();
+                       if (!dir) bell();
+               }
        }
 
        /* Prevent weirdness */
-       if (dir == 5) dir = 0;
+       if ((dir == 5) && (!under)) dir = 0;
 
        /* Aborted */
        if (!dir) return (FALSE);
@@ -4414,24 +4066,63 @@ bool get_rep_dir2(DIRECTION *dp)
                        dir = ddd[randint0(8)];
                }
        }
+       else if (p_ptr->riding)
+       {
+               monster_type *m_ptr = &m_list[p_ptr->riding];
+               monster_race *r_ptr = &r_info[m_ptr->r_idx];
+
+               if (MON_CONFUSED(m_ptr))
+               {
+                       /* Standard confusion */
+                       if (randint0(100) < 75)
+                       {
+                               /* Random direction */
+                               dir = ddd[randint0(8)];
+                       }
+               }
+               else if ((r_ptr->flags1 & RF1_RAND_50) && (r_ptr->flags1 & RF1_RAND_25) && (randint0(100) < 50))
+               {
+                       /* Random direction */
+                       dir = ddd[randint0(8)];
+               }
+               else if ((r_ptr->flags1 & RF1_RAND_50) && (randint0(100) < 25))
+               {
+                       /* Random direction */
+                       dir = ddd[randint0(8)];
+               }
+       }
 
        /* Notice confusion */
        if (command_dir != dir)
        {
-               /* Warn the user */
-               msg_print(_("あなたは混乱している。", "You are confused."));
+               if (p_ptr->confused)
+               {
+                       /* Warn the user */
+                       msg_print(_("あなたは混乱している。", "You are confused."));
+               }
+               else
+               {
+                       char m_name[80];
+                       monster_type *m_ptr = &m_list[p_ptr->riding];
+
+                       monster_desc(m_name, m_ptr, 0);
+                       if (MON_CONFUSED(m_ptr))
+                       {
+                               msg_format(_("%sは混乱している。", "%^s is confusing."), m_name);
+                       }
+                       else
+                       {
+                               msg_format(_("%sは思い通りに動いてくれない。", "You cannot control %s."), m_name);
+                       }
+               }
        }
 
        /* Save direction */
        (*dp) = dir;
 
-#ifdef ALLOW_REPEAT /* TNB */
-
 /*     repeat_push(dir); */
        repeat_push((COMMAND_CODE)command_dir);
 
-#endif /* ALLOW_REPEAT -- TNB */
-
        /* Success */
        return (TRUE);
 }
@@ -4559,8 +4250,6 @@ void gain_level_reward(int chosen_reward)
 
                        msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]);
                        msg_print(_("「汝の行いは貴き剣に値せり。」", "'Thy deed hath earned thee a worthy blade.'"));
-
-                       /* Get local object */
                        q_ptr = &forge;
                        dummy = TV_SWORD;
                        switch (randint1(p_ptr->lev))
@@ -5046,7 +4735,6 @@ static bool tgt_pt_accept(POSITION y, POSITION x)
                if (cave_have_flag_grid(c_ptr, FF_QUEST_EXIT)) return (TRUE);
        }
 
-       /* Nope */
        return (FALSE);
 }
 
@@ -5099,7 +4787,6 @@ bool tgt_pt(POSITION *x_ptr, POSITION *y_ptr)
 
        int wid, hgt;
 
-       /* Get size */
        get_screen_size(&wid, &hgt);
 
        x = p_ptr->x;
@@ -5169,12 +4856,9 @@ bool tgt_pt(POSITION *x_ptr, POSITION *y_ptr)
 
                                        p_ptr->update |= (PU_MONSTERS);
 
-                                       /* Redraw map */
                                        p_ptr->redraw |= (PR_MAP);
 
                                        p_ptr->window |= (PW_OVERHEAD);
-
-                                       /* Handle stuff */
                                        handle_stuff();
                                }
                                else    /* move cursor to next stair and change panel */
@@ -5258,12 +4942,9 @@ bool tgt_pt(POSITION *x_ptr, POSITION *y_ptr)
 
        p_ptr->update |= (PU_MONSTERS);
 
-       /* Redraw map */
        p_ptr->redraw |= (PR_MAP);
 
        p_ptr->window |= (PW_OVERHEAD);
-
-       /* Handle stuff */
        handle_stuff();
 
        *x_ptr = x;
@@ -5278,7 +4959,6 @@ bool get_hack_dir(DIRECTION *dp)
        cptr    p;
        char    command;
 
-       /* Initialize */
        (*dp) = 0;
 
        /* Global direction */