OSDN Git Service

[Refactor] #37353 混乱時のコマンド制限処理を cmd_limit_confused() に統合。 / Integrate command limitat...
[hengband/hengband.git] / src / cmd-pet.c
index 908bae5..945827e 100644 (file)
@@ -1,4 +1,7 @@
 #include "angband.h"
+#include "melee.h"
+#include "sort.h"
+#include "player-status.h"
 
 /*!
 * @brief プレイヤーの騎乗/下馬処理判定
@@ -26,7 +29,8 @@ bool player_can_ride_aux(cave_type *c_ptr, bool now_riding)
                p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
        }
 
-       calc_bonuses();
+       p_ptr->update |= PU_BONUS;
+       handle_stuff();
 
        p_can_enter = player_can_enter(c_ptr->feat, CEM_P_CAN_ENTER_PATTERN);
 
@@ -36,7 +40,8 @@ bool player_can_ride_aux(cave_type *c_ptr, bool now_riding)
        p_ptr->riding_ryoute = old_riding_ryoute;
        p_ptr->old_riding_ryoute = old_old_riding_ryoute;
 
-       calc_bonuses();
+       p_ptr->update |= PU_BONUS;
+       handle_stuff();
 
        character_xtra = old_character_xtra;
 
@@ -193,7 +198,7 @@ void do_cmd_pet_dismiss(void)
        for (i = 0; i < max_pet; i++)
        {
                bool delete_this;
-               char friend_name[80];
+               GAME_TEXT friend_name[MAX_NLEN];
                bool kakunin;
 
                /* Access the monster */
@@ -208,8 +213,6 @@ void do_cmd_pet_dismiss(void)
                {
                        /* Hack -- health bar for this monster */
                        health_track(pet_ctr);
-
-                       /* Hack -- handle stuff */
                        handle_stuff();
 
                        msg_format(_("%sを放しますか? [Yes/No/Unnamed (%d体)]", "Dismiss %s? [Yes/No/Unnamed (%d remain)]"), friend_name, max_pet - i);
@@ -252,7 +255,7 @@ void do_cmd_pet_dismiss(void)
                {
                        if (record_named_pet && m_ptr->nickname)
                        {
-                               char m_name[80];
+                               GAME_TEXT m_name[MAX_NLEN];
 
                                monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
                                do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_DISMISS, m_name);
@@ -264,7 +267,6 @@ void do_cmd_pet_dismiss(void)
 
                                p_ptr->riding = 0;
 
-                               /* Update the monsters */
                                p_ptr->update |= (PU_BONUS | PU_MONSTERS);
                                p_ptr->redraw |= (PR_EXTRA | PR_UHEALTH);
                        }
@@ -272,7 +274,7 @@ void do_cmd_pet_dismiss(void)
                        /* HACK : Add the line to message buffer */
                        msg_format(_("%s を放した。", "Dismissed %s."), friend_name);
                        p_ptr->window |= (PW_MESSAGE);
-                       window_stuff();
+                       handle_stuff();
 
                        delete_monster_idx(pet_ctr);
                        Dismissed++;
@@ -309,7 +311,7 @@ bool do_riding(bool force)
        cave_type *c_ptr;
        monster_type *m_ptr;
 
-       if (!get_rep_dir2(&dir)) return FALSE;
+       if (!get_direction(&dir, FALSE, FALSE)) return FALSE;
        y = p_ptr->y + ddy[dir];
        x = p_ptr->x + ddx[dir];
        c_ptr = &cave[y][x];
@@ -343,11 +345,7 @@ bool do_riding(bool force)
        }
        else
        {
-               if (p_ptr->confused)
-               {
-                       msg_print(_("混乱していて乗れない!", "You are too confused!"));
-                       return FALSE;
-               }
+               if (cmd_limit_confused(p_ptr)) return FALSE;
 
                m_ptr = &m_list[c_ptr->m_idx];
 
@@ -396,7 +394,7 @@ bool do_riding(bool force)
 
                if (MON_CSLEEP(m_ptr))
                {
-                       char m_name[80];
+                       GAME_TEXT m_name[MAX_NLEN];
                        monster_desc(m_name, m_ptr, 0);
                        (void)set_monster_csleep(c_ptr->m_idx, 0);
                        msg_format(_("%sを起こした。", "You have waked %s up."), m_name);
@@ -414,16 +412,10 @@ bool do_riding(bool force)
 
        /* Mega-Hack -- Forget the view and lite */
        p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE);
-
-       /* Update the monsters */
        p_ptr->update |= (PU_BONUS);
-
-       /* Redraw map */
        p_ptr->redraw |= (PR_MAP | PR_EXTRA);
-
        p_ptr->redraw |= (PR_UHEALTH);
 
-       /* Move the player */
        (void)move_player_effect(y, x, MPE_HANDLE_STUFF | MPE_ENERGY_USE | MPE_DONT_PICKUP | MPE_DONT_SWAP_MON);
 
        return TRUE;
@@ -437,7 +429,7 @@ static void do_name_pet(void)
 {
        monster_type *m_ptr;
        char out_val[20];
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
        bool old_name = FALSE;
        bool old_target_pet = target_pet;
 
@@ -516,7 +508,7 @@ void do_cmd_pet(void)
        COMMAND_CODE i = 0;
        int                     num;
        int                     powers[36];
-       cptr                    power_desc[36];
+       concptr                 power_desc[36];
        bool                    flag, redraw;
        char                    choice;
        char                    out_val[160];
@@ -532,6 +524,8 @@ void do_cmd_pet(void)
 
        num = 0;
 
+       if(p_ptr->wild_mode) return;
+
        power_desc[num] = _("ペットを放す", "dismiss pets");
        powers[num++] = PET_DISMISS;
 
@@ -675,7 +669,7 @@ void do_cmd_pet(void)
 
                                        powers[num++] = PET_RYOUTE;
                                }
-                               else if ((empty_hands(FALSE) != EMPTY_HAND_NONE) && !buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
+                               else if ((empty_hands(FALSE) != EMPTY_HAND_NONE) && !has_melee_weapon(INVEN_RARM) && !has_melee_weapon(INVEN_LARM))
                                {
                                        if (p_ptr->pet_extra_flags & PF_RYOUTE)
                                        {
@@ -693,11 +687,8 @@ void do_cmd_pet(void)
                }
        }
 
-#ifdef ALLOW_REPEAT
        if (!(repeat_pull(&i) && (i >= 0) && (i < num)))
        {
-#endif /* ALLOW_REPEAT */
-
                /* Nothing chosen yet */
                flag = FALSE;
 
@@ -706,7 +697,6 @@ void do_cmd_pet(void)
 
                if (use_menu)
                {
-                       /* Save the screen */
                        screen_save();
 
                        /* Build a prompt */
@@ -784,8 +774,6 @@ void do_cmd_pet(void)
 
                                        /* Show list */
                                        redraw = TRUE;
-
-                                       /* Save the screen */
                                        if (!use_menu) screen_save();
 
                                        prt("", y++, x);
@@ -812,8 +800,6 @@ void do_cmd_pet(void)
                                {
                                        /* Hide list */
                                        redraw = FALSE;
-
-                                       /* Restore the screen */
                                        screen_load();
                                }
 
@@ -853,8 +839,6 @@ void do_cmd_pet(void)
                        /* Stop the loop */
                        flag = TRUE;
                }
-
-               /* Restore the screen */
                if (redraw) screen_load();
 
                /* Abort if needed */
@@ -864,11 +848,8 @@ void do_cmd_pet(void)
                        return;
                }
 
-#ifdef ALLOW_REPEAT
                repeat_push(i);
        }
-#endif /* ALLOW_REPEAT */
-
        switch (powers[i])
        {
        case PET_DISMISS: /* Dismiss pets */
@@ -1059,7 +1040,7 @@ bool rakuba(HIT_POINT dam, bool force)
 {
        int i, y, x, oy, ox;
        int sn = 0, sy = 0, sx = 0;
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
        monster_type *m_ptr = &m_list[p_ptr->riding];
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
        bool fall_dam = FALSE;
@@ -1135,13 +1116,8 @@ bool rakuba(HIT_POINT dam, bool force)
                if (!sn)
                {
                        monster_desc(m_name, m_ptr, 0);
-#ifdef JP
-                       msg_format("%sから振り落とされそうになって、壁にぶつかった。", m_name);
-                       take_hit(DAMAGE_NOESCAPE, r_ptr->level + 3, "壁への衝突", -1);
-#else
-                       msg_format("You have nearly fallen from %s, but bumped into wall.", m_name);
-                       take_hit(DAMAGE_NOESCAPE, r_ptr->level + 3, "bumping into wall", -1);
-#endif
+                       msg_format(_("%sから振り落とされそうになって、壁にぶつかった。", "You have nearly fallen from %s, but bumped into wall."), m_name);
+                       take_hit(DAMAGE_NOESCAPE, r_ptr->level + 3, _("壁への衝突", "bumping into wall"), -1);
                        return FALSE;
                }
 
@@ -1165,15 +1141,11 @@ bool rakuba(HIT_POINT dam, bool force)
        p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
        p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
 
-       calc_bonuses();
+       p_ptr->update |= (PU_BONUS | PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE | PU_MONSTERS);
+       handle_stuff();
 
-       p_ptr->update |= (PU_BONUS);
 
-       p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE | PU_MONSTERS);
-
-       /* Window stuff */
        p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
-
        p_ptr->redraw |= (PR_EXTRA);
 
        /* Update health track of mount */
@@ -1190,7 +1162,6 @@ bool rakuba(HIT_POINT dam, bool force)
                fall_dam = TRUE;
        }
 
-       /* Move the player */
        if (sy && !p_ptr->is_dead)
                (void)move_player_effect(p_ptr->y, p_ptr->x, MPE_DONT_PICKUP | MPE_DONT_SWAP_MON);