OSDN Git Service

[Refactor] #38862 Moved feature.c/h, grid.c/h and trap.c/h to grid/
[hengband/hengband.git] / src / cmd / cmd-pet.c
index 905b2ee..e6ed4d0 100644 (file)
@@ -1,26 +1,28 @@
-#include "angband.h"
-#include "core.h"
+#include "system/angband.h"
+#include "core/stuff-handler.h"
 #include "util.h"
 
-#include "cmd-dump.h"
-#include "floor.h"
-#include "grid.h"
+#include "io/write-diary.h"
+#include "cmd/cmd-dump.h"
+#include "floor/floor.h"
+#include "grid/grid.h"
 #include "melee.h"
 #include "sort.h"
-#include "player-move.h"
-#include "player-status.h"
-#include "player-effects.h"
-#include "player-skill.h"
-#include "player-class.h"
-#include "player-damage.h"
-#include "object-hook.h"
-#include "monster.h"
-#include "monster-status.h"
+#include "player/player-move.h"
+#include "player/player-status.h"
+#include "player/player-effects.h"
+#include "player/player-skill.h"
+#include "player/player-class.h"
+#include "player/player-damage.h"
+#include "object/object-hook.h"
+#include "monster/monster.h"
+#include "monster/monster-status.h"
 #include "cmd-pet.h"
 #include "cmd-basic.h"
-#include "view-mainwindow.h"
+#include "view/display-main-window.h"
 #include "targeting.h"
-#include "world.h"
+#include "world/world.h"
+#include "effect/spells-effect-util.h"
 
 int total_friends = 0;
 
@@ -37,7 +39,7 @@ bool player_can_ride_aux(player_type *creature_ptr, grid_type *g_ptr, bool now_r
        MONSTER_IDX old_riding = creature_ptr->riding;
        bool old_riding_ryoute = creature_ptr->riding_ryoute;
        bool old_old_riding_ryoute = creature_ptr->old_riding_ryoute;
-       bool old_pf_ryoute = (creature_ptr->pet_extra_flags & PF_RYOUTE) ? TRUE : FALSE;
+       bool old_pf_ryoute = (creature_ptr->pet_extra_flags & PF_TWO_HANDS) ? TRUE : FALSE;
 
        /* Hack -- prevent "icky" message */
        current_world_ptr->character_xtra = TRUE;
@@ -46,87 +48,29 @@ bool player_can_ride_aux(player_type *creature_ptr, grid_type *g_ptr, bool now_r
        else
        {
                creature_ptr->riding = 0;
-               creature_ptr->pet_extra_flags &= ~(PF_RYOUTE);
+               creature_ptr->pet_extra_flags &= ~(PF_TWO_HANDS);
                creature_ptr->riding_ryoute = creature_ptr->old_riding_ryoute = FALSE;
        }
 
        creature_ptr->update |= PU_BONUS;
-       handle_stuff();
+       handle_stuff(creature_ptr);
 
-       p_can_enter = player_can_enter(g_ptr->feat, CEM_P_CAN_ENTER_PATTERN);
+       p_can_enter = player_can_enter(creature_ptr, g_ptr->feat, CEM_P_CAN_ENTER_PATTERN);
 
        creature_ptr->riding = old_riding;
-       if (old_pf_ryoute) creature_ptr->pet_extra_flags |= (PF_RYOUTE);
-       else creature_ptr->pet_extra_flags &= ~(PF_RYOUTE);
+       if (old_pf_ryoute) creature_ptr->pet_extra_flags |= (PF_TWO_HANDS);
+       else creature_ptr->pet_extra_flags &= ~(PF_TWO_HANDS);
        creature_ptr->riding_ryoute = old_riding_ryoute;
        creature_ptr->old_riding_ryoute = old_old_riding_ryoute;
 
        creature_ptr->update |= PU_BONUS;
-       handle_stuff();
+       handle_stuff(creature_ptr);
 
        current_world_ptr->character_xtra = old_character_xtra;
 
        return p_can_enter;
 }
 
-
-/*!
-* @brief ペットの維持コスト計算
-* @return 維持コスト(%)
-*/
-PERCENTAGE calculate_upkeep(player_type *creature_ptr)
-{
-       MONSTER_IDX m_idx;
-       bool have_a_unique = FALSE;
-       DEPTH total_friend_levels = 0;
-
-       total_friends = 0;
-
-       for (m_idx = p_ptr->current_floor_ptr->m_max - 1; m_idx >= 1; m_idx--)
-       {
-               monster_type *m_ptr;
-               monster_race *r_ptr;
-
-               m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
-               if (!monster_is_valid(m_ptr)) continue;
-               r_ptr = &r_info[m_ptr->r_idx];
-
-               if (is_pet(m_ptr))
-               {
-                       total_friends++;
-                       if (r_ptr->flags1 & RF1_UNIQUE)
-                       {
-                               if (creature_ptr->pclass == CLASS_CAVALRY)
-                               {
-                                       if (creature_ptr->riding == m_idx)
-                                               total_friend_levels += (r_ptr->level + 5) * 2;
-                                       else if (!have_a_unique && (r_info[m_ptr->r_idx].flags7 & RF7_RIDING))
-                                               total_friend_levels += (r_ptr->level + 5) * 7 / 2;
-                                       else
-                                               total_friend_levels += (r_ptr->level + 5) * 10;
-                                       have_a_unique = TRUE;
-                               }
-                               else
-                                       total_friend_levels += (r_ptr->level + 5) * 10;
-                       }
-                       else
-                               total_friend_levels += r_ptr->level;
-
-               }
-       }
-
-       if (total_friends)
-       {
-               int upkeep_factor;
-               upkeep_factor = (total_friend_levels - (creature_ptr->lev * 80 / (cp_ptr->pet_upkeep_div)));
-               if (upkeep_factor < 0) upkeep_factor = 0;
-               if (upkeep_factor > 1000) upkeep_factor = 1000;
-               return upkeep_factor;
-       }
-       else
-               return 0;
-}
-
 /*!
 * @brief ペットを開放するコマンドのメインルーチン
 * @return なし
@@ -173,13 +117,13 @@ void do_cmd_pet_dismiss(player_type *creature_ptr)
 
                delete_this = FALSE;
                kakunin = ((pet_ctr == creature_ptr->riding) || (m_ptr->nickname));
-               monster_desc(friend_name, m_ptr, MD_ASSUME_VISIBLE);
+               monster_desc(creature_ptr, friend_name, m_ptr, MD_ASSUME_VISIBLE);
 
                if (!all_pets)
                {
                        /* Hack -- health bar for this monster */
-                       health_track(pet_ctr);
-                       handle_stuff();
+                       health_track(creature_ptr, pet_ctr);
+                       handle_stuff(creature_ptr);
 
                        msg_format(_("%sを放しますか? [Yes/No/Unnamed (%d体)]", "Dismiss %s? [Yes/No/Unnamed (%d remain)]"), friend_name, max_pet - i);
 
@@ -223,8 +167,8 @@ void do_cmd_pet_dismiss(player_type *creature_ptr)
                        {
                                GAME_TEXT m_name[MAX_NLEN];
 
-                               monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
-                               exe_write_diary(creature_ptr, NIKKI_NAMED_PET, RECORD_NAMED_PET_DISMISS, m_name);
+                               monster_desc(creature_ptr, m_name, m_ptr, MD_INDEF_VISIBLE);
+                               exe_write_diary(creature_ptr, DIARY_NAMED_PET, RECORD_NAMED_PET_DISMISS, m_name);
                        }
 
                        if (pet_ctr == creature_ptr->riding)
@@ -242,7 +186,7 @@ void do_cmd_pet_dismiss(player_type *creature_ptr)
                        creature_ptr->update |= (PU_BONUS);
                        creature_ptr->window |= (PW_MESSAGE);
 
-                       delete_monster_idx(pet_ctr);
+                       delete_monster_idx(creature_ptr, pet_ctr);
                        Dismissed++;
                }
        }
@@ -262,7 +206,7 @@ void do_cmd_pet_dismiss(player_type *creature_ptr)
        if (Dismissed == 0 && all_pets)
                msg_print(_("'U'nnamed は、乗馬以外の名前のないペットだけを全て解放します。", "'U'nnamed means all your pets except named pets and your mount."));
 
-       handle_stuff();
+       handle_stuff(creature_ptr);
 }
 
 
@@ -279,10 +223,10 @@ bool do_cmd_riding(player_type *creature_ptr, bool force)
        grid_type *g_ptr;
        monster_type *m_ptr;
 
-       if (!get_direction(&dir, FALSE, FALSE)) return FALSE;
+       if (!get_direction(creature_ptr, &dir, FALSE, FALSE)) return FALSE;
        y = creature_ptr->y + ddy[dir];
        x = creature_ptr->x + ddx[dir];
-       g_ptr = &p_ptr->current_floor_ptr->grid_array[y][x];
+       g_ptr = &creature_ptr->current_floor_ptr->grid_array[y][x];
 
        if (creature_ptr->special_defense & KATA_MUSOU) set_action(creature_ptr, ACTION_NONE);
 
@@ -291,7 +235,7 @@ bool do_cmd_riding(player_type *creature_ptr, bool force)
                /* Skip non-empty grids */
                if (!player_can_ride_aux(creature_ptr, g_ptr, FALSE))
                {
-                       msg_print(_("そちらには降りられません。", "You cannot go to that direction."));
+                       msg_print(_("そちらには降りられません。", "You cannot go that direction."));
                        return FALSE;
                }
 
@@ -303,23 +247,23 @@ bool do_cmd_riding(player_type *creature_ptr, bool force)
 
                        msg_print(_("モンスターが立ちふさがっている!", "There is a monster in the way!"));
 
-                       py_attack(p_ptr, y, x, 0);
+                       py_attack(creature_ptr, y, x, 0);
                        return FALSE;
                }
 
                creature_ptr->riding = 0;
-               creature_ptr->pet_extra_flags &= ~(PF_RYOUTE);
+               creature_ptr->pet_extra_flags &= ~(PF_TWO_HANDS);
                creature_ptr->riding_ryoute = creature_ptr->old_riding_ryoute = FALSE;
        }
        else
        {
                if (cmd_limit_confused(creature_ptr)) return FALSE;
 
-               m_ptr = &p_ptr->current_floor_ptr->m_list[g_ptr->m_idx];
+               m_ptr = &creature_ptr->current_floor_ptr->m_list[g_ptr->m_idx];
 
                if (!g_ptr->m_idx || !m_ptr->ml)
                {
-                       msg_print(_("その場所にはモンスターはいません。", "Here is no monster."));
+                       msg_print(_("その場所にはモンスターはいません。", "There is no monster here."));
                        return FALSE;
                }
                if (!is_pet(m_ptr) && !force)
@@ -342,12 +286,12 @@ bool do_cmd_riding(player_type *creature_ptr, bool force)
 #ifdef JP
                        msg_format("そのモンスターは%sの%sにいる。", f_name + f_ptr->name,
                                ((!have_flag(f_ptr->flags, FF_MOVE) && !have_flag(f_ptr->flags, FF_CAN_FLY)) ||
-                                       (!have_flag(f_ptr->flags, FF_LOS) && !have_flag(f_ptr->flags, FF_TREE))) ?
+                               (!have_flag(f_ptr->flags, FF_LOS) && !have_flag(f_ptr->flags, FF_TREE))) ?
                                "中" : "上");
 #else
                        msg_format("This monster is %s the %s.",
                                ((!have_flag(f_ptr->flags, FF_MOVE) && !have_flag(f_ptr->flags, FF_CAN_FLY)) ||
-                                       (!have_flag(f_ptr->flags, FF_LOS) && !have_flag(f_ptr->flags, FF_TREE))) ?
+                               (!have_flag(f_ptr->flags, FF_LOS) && !have_flag(f_ptr->flags, FF_TREE))) ?
                                "in" : "on", f_name + f_ptr->name);
 #endif
 
@@ -363,9 +307,9 @@ bool do_cmd_riding(player_type *creature_ptr, bool force)
                if (MON_CSLEEP(m_ptr))
                {
                        GAME_TEXT m_name[MAX_NLEN];
-                       monster_desc(m_name, m_ptr, 0);
-                       (void)set_monster_csleep(g_ptr->m_idx, 0);
-                       msg_format(_("%sを起こした。", "You have waked %s up."), m_name);
+                       monster_desc(creature_ptr, m_name, m_ptr, 0);
+                       (void)set_monster_csleep(creature_ptr, g_ptr->m_idx, 0);
+                       msg_format(_("%sを起こした。", "You have woken %s up."), m_name);
                }
 
                if (creature_ptr->action == ACTION_KAMAE) set_action(creature_ptr, ACTION_NONE);
@@ -373,7 +317,7 @@ bool do_cmd_riding(player_type *creature_ptr, bool force)
                creature_ptr->riding = g_ptr->m_idx;
 
                /* Hack -- remove tracked monster */
-               if (creature_ptr->riding == creature_ptr->health_who) health_track(0);
+               if (creature_ptr->riding == creature_ptr->health_who) health_track(creature_ptr, 0);
        }
 
        take_turn(creature_ptr, 100);
@@ -402,11 +346,12 @@ static void do_name_pet(player_type *creature_ptr)
        bool old_target_pet = target_pet;
 
        target_pet = TRUE;
-       if (!target_set(TARGET_KILL))
+       if (!target_set(creature_ptr, TARGET_KILL))
        {
                target_pet = old_target_pet;
                return;
        }
+
        target_pet = old_target_pet;
 
        if (creature_ptr->current_floor_ptr->grid_array[target_row][target_col].m_idx)
@@ -423,7 +368,7 @@ static void do_name_pet(player_type *creature_ptr)
                        msg_print(_("そのモンスターの名前は変えられない!", "You cannot change name of this monster!"));
                        return;
                }
-               monster_desc(m_name, m_ptr, 0);
+               monster_desc(creature_ptr, m_name, m_ptr, 0);
 
                msg_format(_("%sに名前をつける。", "Name %s."), m_name);
                msg_print(NULL);
@@ -448,16 +393,16 @@ static void do_name_pet(player_type *creature_ptr)
                                m_ptr->nickname = quark_add(out_val);
                                if (record_named_pet)
                                {
-                                       monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
-                                       exe_write_diary(creature_ptr, NIKKI_NAMED_PET, RECORD_NAMED_PET_NAME, m_name);
+                                       monster_desc(creature_ptr, m_name, m_ptr, MD_INDEF_VISIBLE);
+                                       exe_write_diary(creature_ptr, DIARY_NAMED_PET, RECORD_NAMED_PET_NAME, m_name);
                                }
                        }
                        else
                        {
                                if (record_named_pet && old_name)
                                {
-                                       monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
-                                       exe_write_diary(creature_ptr, NIKKI_NAMED_PET, RECORD_NAMED_PET_UNNAME, m_name);
+                                       monster_desc(creature_ptr, m_name, m_ptr, MD_INDEF_VISIBLE);
+                                       exe_write_diary(creature_ptr, DIARY_NAMED_PET, RECORD_NAMED_PET_UNNAME, m_name);
                                }
                                m_ptr->nickname = 0;
                        }
@@ -492,7 +437,7 @@ void do_cmd_pet(player_type *creature_ptr)
 
        num = 0;
 
-       if(creature_ptr->wild_mode) return;
+       if (creature_ptr->wild_mode) return;
 
        power_desc[num] = _("ペットを放す", "dismiss pets");
        powers[num++] = PET_DISMISS;
@@ -606,16 +551,16 @@ void do_cmd_pet(player_type *creature_ptr)
                        (creature_ptr->hidarite && (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_RARM) &&
                                object_allow_two_hands_wielding(&creature_ptr->inventory_list[INVEN_LARM])))
                {
-                       if (creature_ptr->pet_extra_flags & PF_RYOUTE)
+                       if (creature_ptr->pet_extra_flags & PF_TWO_HANDS)
                        {
-                               power_desc[num] = _("武器を片手で持つ", "use one hand to control a riding pet");
+                               power_desc[num] = _("武器を片手で持つ", "use one hand to control the pet you are riding");
                        }
                        else
                        {
                                power_desc[num] = _("武器を両手で持つ", "use both hands for a weapon");
                        }
 
-                       powers[num++] = PET_RYOUTE;
+                       powers[num++] = PET_TWO_HANDS;
                }
                else
                {
@@ -626,29 +571,29 @@ void do_cmd_pet(player_type *creature_ptr)
                        case CLASS_BERSERKER:
                                if (empty_hands(creature_ptr, FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))
                                {
-                                       if (creature_ptr->pet_extra_flags & PF_RYOUTE)
+                                       if (creature_ptr->pet_extra_flags & PF_TWO_HANDS)
                                        {
-                                               power_desc[num] = _("片手で格闘する", "use one hand to control a riding pet");
+                                               power_desc[num] = _("片手で格闘する", "use one hand to control the pet you are riding");
                                        }
                                        else
                                        {
                                                power_desc[num] = _("両手で格闘する", "use both hands for melee");
                                        }
 
-                                       powers[num++] = PET_RYOUTE;
+                                       powers[num++] = PET_TWO_HANDS;
                                }
                                else if ((empty_hands(creature_ptr, FALSE) != EMPTY_HAND_NONE) && !has_melee_weapon(creature_ptr, INVEN_RARM) && !has_melee_weapon(creature_ptr, INVEN_LARM))
                                {
-                                       if (creature_ptr->pet_extra_flags & PF_RYOUTE)
+                                       if (creature_ptr->pet_extra_flags & PF_TWO_HANDS)
                                        {
-                                               power_desc[num] = _("格闘を行わない", "use one hand to control a riding pet");
+                                               power_desc[num] = _("格闘を行わない", "use one hand to control the pet you are riding");
                                        }
                                        else
                                        {
                                                power_desc[num] = _("格闘を行う", "use one hand for melee");
                                        }
 
-                                       powers[num++] = PET_RYOUTE;
+                                       powers[num++] = PET_TWO_HANDS;
                                }
                                break;
                        }
@@ -833,7 +778,7 @@ void do_cmd_pet(player_type *creature_ptr)
        case PET_TARGET:
        {
                project_length = -1;
-               if (!target_set(TARGET_KILL)) creature_ptr->pet_t_m_idx = 0;
+               if (!target_set(creature_ptr, TARGET_KILL)) creature_ptr->pet_t_m_idx = 0;
                else
                {
                        grid_type *g_ptr = &creature_ptr->current_floor_ptr->grid_array[target_row][target_col];
@@ -899,7 +844,7 @@ void do_cmd_pet(player_type *creature_ptr)
 
                                if (is_pet(m_ptr))
                                {
-                                       monster_drop_carried_objects(m_ptr);
+                                       monster_drop_carried_objects(creature_ptr, m_ptr);
                                }
                        }
                }
@@ -948,12 +893,12 @@ void do_cmd_pet(player_type *creature_ptr)
                break;
        }
 
-       case PET_RYOUTE:
+       case PET_TWO_HANDS:
        {
-               if (creature_ptr->pet_extra_flags & PF_RYOUTE) creature_ptr->pet_extra_flags &= ~(PF_RYOUTE);
-               else creature_ptr->pet_extra_flags |= (PF_RYOUTE);
+               if (creature_ptr->pet_extra_flags & PF_TWO_HANDS) creature_ptr->pet_extra_flags &= ~(PF_TWO_HANDS);
+               else creature_ptr->pet_extra_flags |= (PF_TWO_HANDS);
                creature_ptr->update |= (PU_BONUS);
-               handle_stuff();
+               handle_stuff(creature_ptr);
                break;
        }
        }
@@ -972,7 +917,7 @@ bool rakuba(player_type *creature_ptr, HIT_POINT dam, bool force)
        POSITION y, x, oy, ox, sy = 0, sx = 0;
        int sn = 0;
        GAME_TEXT m_name[MAX_NLEN];
-       monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[creature_ptr->riding];
+       monster_type *m_ptr = &creature_ptr->current_floor_ptr->m_list[creature_ptr->riding];
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
        bool fall_dam = FALSE;
 
@@ -1022,7 +967,7 @@ bool rakuba(player_type *creature_ptr, HIT_POINT dam, bool force)
                        y = creature_ptr->y + ddy_ddd[i];
                        x = creature_ptr->x + ddx_ddd[i];
 
-                       g_ptr = &p_ptr->current_floor_ptr->grid_array[y][x];
+                       g_ptr = &creature_ptr->current_floor_ptr->grid_array[y][x];
 
                        if (g_ptr->m_idx) continue;
 
@@ -1045,7 +990,7 @@ bool rakuba(player_type *creature_ptr, HIT_POINT dam, bool force)
                }
                if (!sn)
                {
-                       monster_desc(m_name, m_ptr, 0);
+                       monster_desc(creature_ptr, m_name, m_ptr, 0);
                        msg_format(_("%sから振り落とされそうになって、壁にぶつかった。", "You have nearly fallen from %s, but bumped into wall."), m_name);
                        take_hit(creature_ptr, DAMAGE_NOESCAPE, r_ptr->level + 3, _("壁への衝突", "bumping into wall"), -1);
                        return FALSE;
@@ -1058,21 +1003,21 @@ bool rakuba(player_type *creature_ptr, HIT_POINT dam, bool force)
                creature_ptr->x = sx;
 
                /* Redraw the old spot */
-               lite_spot(oy, ox);
+               lite_spot(creature_ptr, oy, ox);
 
                /* Redraw the new spot */
-               lite_spot(creature_ptr->y, creature_ptr->x);
+               lite_spot(creature_ptr, creature_ptr->y, creature_ptr->x);
 
                /* Check for new panel */
-               verify_panel();
+               verify_panel(creature_ptr);
        }
 
        creature_ptr->riding = 0;
-       creature_ptr->pet_extra_flags &= ~(PF_RYOUTE);
+       creature_ptr->pet_extra_flags &= ~(PF_TWO_HANDS);
        creature_ptr->riding_ryoute = creature_ptr->old_riding_ryoute = FALSE;
 
        creature_ptr->update |= (PU_BONUS | PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE | PU_MONSTERS);
-       handle_stuff();
+       handle_stuff(creature_ptr);
 
 
        creature_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
@@ -1083,7 +1028,7 @@ bool rakuba(player_type *creature_ptr, HIT_POINT dam, bool force)
 
        if (creature_ptr->levitation && !force)
        {
-               monster_desc(m_name, m_ptr, 0);
+               monster_desc(creature_ptr, m_name, m_ptr, 0);
                msg_format(_("%sから落ちたが、空中でうまく体勢を立て直して着地した。", "You are thrown from %s, but make a good landing."), m_name);
        }
        else
@@ -1097,4 +1042,3 @@ bool rakuba(player_type *creature_ptr, HIT_POINT dam, bool force)
 
        return fall_dam;
 }
-