OSDN Git Service

[Refactor] #37353 鏡使いのレイシャル「静水」を mirror_concentration() に分離。 / Separate Mirror master...
[hengband/hengband.git] / src / cmd1.c
index 5ab57b9..7db62c0 100644 (file)
  */
 
 #include "angband.h"
+#include "melee.h"
 #include "trap.h"
+#include "projection.h"
+#include "quest.h"
+#include "artifact.h"
+#include "player-status.h"
 
 
 
@@ -284,8 +289,6 @@ HIT_POINT tot_dam_aux(object_type *o_ptr, HIT_POINT tdam, monster_type *m_ptr, B
        MULTIPLY mult = 10;
 
        BIT_FLAGS flgs[TR_FLAG_SIZE];
-
-       /* Extract the flags */
        object_flags(o_ptr, flgs);
        torch_flags(o_ptr, flgs); /* torches has secret flags */
 
@@ -386,8 +389,6 @@ static void discover_hidden_things(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 */
@@ -460,12 +461,12 @@ void py_pickup_aux(OBJECT_IDX o_idx)
        INVENTORY_IDX slot;
 
 #ifdef JP
-       char o_name[MAX_NLEN];
-       char old_name[MAX_NLEN];
+       GAME_TEXT o_name[MAX_NLEN];
+       GAME_TEXT old_name[MAX_NLEN];
        char kazu_str[80];
        int hirottakazu;
 #else
-       char o_name[MAX_NLEN];
+       GAME_TEXT o_name[MAX_NLEN];
 #endif
 
        object_type *o_ptr;
@@ -548,19 +549,16 @@ void carry(bool pickup)
 
        OBJECT_IDX this_o_idx, next_o_idx = 0;
 
-       char    o_name[MAX_NLEN];
+       GAME_TEXT o_name[MAX_NLEN];
 
        /* Recenter the map around the player */
        verify_panel();
 
        p_ptr->update |= (PU_MONSTERS);
 
-       /* Redraw map */
        p_ptr->redraw |= (PR_MAP);
 
        p_ptr->window |= (PW_OVERHEAD);
-
-       /* Handle stuff */
        handle_stuff();
 
        /* Automatically pickup/destroy/inscribe items */
@@ -576,8 +574,6 @@ void carry(bool pickup)
        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];
 
 #ifdef ALLOW_EASY_SENSE /* TNB */
@@ -801,19 +797,17 @@ bool pattern_seq(POSITION c_y, POSITION c_x, POSITION n_y, POSITION n_x)
  * @param mode 移動に関するオプションフラグ
  * @return 移動可能ならばTRUEを返す
  */
-bool player_can_enter(s16b feature, u16b mode)
+bool player_can_enter(FEAT_IDX feature, BIT_FLAGS16 mode)
 {
        feature_type *f_ptr = &f_info[feature];
 
        if (p_ptr->riding) return monster_can_cross_terrain(feature, &r_info[m_list[p_ptr->riding].r_idx], mode | CEM_RIDING);
 
-       /* Pattern */
        if (have_flag(f_ptr->flags, FF_PATTERN))
        {
                if (!(mode & CEM_P_CAN_ENTER_PATTERN)) return FALSE;
        }
 
-       /* "CAN" flags */
        if (have_flag(f_ptr->flags, FF_CAN_FLY) && p_ptr->levitation) return TRUE;
        if (have_flag(f_ptr->flags, FF_CAN_SWIM) && p_ptr->can_swim) return TRUE;
        if (have_flag(f_ptr->flags, FF_CAN_PASS) && p_ptr->pass_wall) return TRUE;
@@ -833,16 +827,17 @@ bool player_can_enter(s16b feature, u16b mode)
  */
 bool move_player_effect(POSITION ny, POSITION nx, BIT_FLAGS mpe_mode)
 {
+       POSITION oy = p_ptr->y;
+       POSITION ox = p_ptr->x;
        cave_type *c_ptr = &cave[ny][nx];
+       cave_type *oc_ptr = &cave[oy][ox];
        feature_type *f_ptr = &f_info[c_ptr->feat];
+       feature_type *of_ptr = &f_info[oc_ptr->feat];
 
        if (!(mpe_mode & MPE_STAYING))
        {
-               POSITION oy = p_ptr->y;
-               POSITION ox = p_ptr->x;
-               cave_type *oc_ptr = &cave[oy][ox];
-               IDX om_idx = oc_ptr->m_idx;
-               IDX nm_idx = c_ptr->m_idx;
+               MONSTER_IDX om_idx = oc_ptr->m_idx;
+               MONSTER_IDX nm_idx = c_ptr->m_idx;
 
                /* Move the player */
                p_ptr->y = ny;
@@ -860,7 +855,7 @@ bool move_player_effect(POSITION ny, POSITION nx, BIT_FLAGS mpe_mode)
                                monster_type *om_ptr = &m_list[om_idx];
                                om_ptr->fy = ny;
                                om_ptr->fx = nx;
-                               update_mon(om_idx, TRUE);
+                               update_monster(om_idx, TRUE);
                        }
 
                        if (nm_idx > 0) /* Monster on new spot */
@@ -868,14 +863,11 @@ bool move_player_effect(POSITION ny, POSITION nx, BIT_FLAGS mpe_mode)
                                monster_type *nm_ptr = &m_list[nm_idx];
                                nm_ptr->fy = oy;
                                nm_ptr->fx = ox;
-                               update_mon(nm_idx, TRUE);
+                               update_monster(nm_idx, TRUE);
                        }
                }
 
-               /* Redraw old spot */
                lite_spot(oy, ox);
-
-               /* Redraw new spot */
                lite_spot(ny, nx);
 
                /* Check for new panel (redraw map) */
@@ -885,15 +877,11 @@ bool move_player_effect(POSITION ny, POSITION nx, BIT_FLAGS mpe_mode)
                {
                        forget_flow();
 
-                       /* Mega-Hack -- Forget the view */
                        p_ptr->update |= (PU_UN_VIEW);
-
-                       /* Redraw map */
                        p_ptr->redraw |= (PR_MAP);
                }
 
                p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE | PU_DISTANCE);
-
                p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
 
                /* Remove "unsafe" flag */
@@ -901,8 +889,6 @@ bool move_player_effect(POSITION ny, POSITION nx, BIT_FLAGS mpe_mode)
 
                /* For get everything when requested hehe I'm *NASTY* */
                if (dun_level && (d_info[dungeon_type].flags1 & DF1_FORGET)) wiz_dark();
-
-               /* Handle stuff */
                if (mpe_mode & MPE_HANDLE_STUFF) handle_stuff();
 
                if (p_ptr->pclass == CLASS_NINJA)
@@ -918,6 +904,14 @@ bool move_player_effect(POSITION ny, POSITION nx, BIT_FLAGS mpe_mode)
                        msg_print(_("ここでは素早く動けない。", "You cannot run in here."));
                        set_action(ACTION_NONE);
                }
+               if (p_ptr->prace == RACE_MERFOLK)
+               {
+                       if(have_flag(f_ptr->flags, FF_WATER) ^ have_flag(of_ptr->flags, FF_WATER))
+                       {
+                               p_ptr->update |= PU_BONUS;
+                               update_creature(p_ptr);
+                       }
+               }
        }
 
        if (mpe_mode & MPE_ENERGY_USE)
@@ -1124,7 +1118,7 @@ void move_player(DIRECTION dir, bool do_pickup, bool break_trap)
        monster_type *riding_m_ptr = &m_list[p_ptr->riding];
        monster_race *riding_r_ptr = &r_info[p_ptr->riding ? riding_m_ptr->r_idx : 0]; /* Paranoia */
 
-       char m_name[80];
+       GAME_TEXT m_name[MAX_NLEN];
 
        bool p_can_enter = player_can_enter(c_ptr->feat, CEM_P_CAN_ENTER_PATTERN);
        bool p_can_kill_walls = FALSE;
@@ -1297,12 +1291,8 @@ void move_player(DIRECTION dir, bool do_pickup, bool break_trap)
                }
                else if (MON_MONFEAR(riding_m_ptr))
                {
-                       char steed_name[80];
-
-                       /* Acquire the monster name */
+                       GAME_TEXT steed_name[MAX_NLEN];
                        monster_desc(steed_name, riding_m_ptr, 0);
-
-                       /* Dump a message */
                        msg_format(_("%sが恐怖していて制御できない。", "%^s is too scared to control."), steed_name);
                        oktomove = FALSE;
                        disturb(FALSE, TRUE);
@@ -1346,7 +1336,7 @@ void move_player(DIRECTION dir, bool do_pickup, bool break_trap)
 
                if (oktomove && MON_STUNNED(riding_m_ptr) && one_in_(2))
                {
-                       char steed_name[80];
+                       GAME_TEXT steed_name[MAX_NLEN];
                        monster_desc(steed_name, riding_m_ptr, 0);
                        msg_format(_("%sが朦朧としていてうまく動けない!", "You cannot control stunned %s!"), steed_name);
                        oktomove = FALSE;
@@ -1394,7 +1384,7 @@ void move_player(DIRECTION dir, bool do_pickup, bool break_trap)
                /* Feature code (applying "mimic" field) */
                FEAT_IDX feat = get_feat_mimic(c_ptr);
                feature_type *mimic_f_ptr = &f_info[feat];
-               cptr name = f_name + mimic_f_ptr->name;
+               concptr name = f_name + mimic_f_ptr->name;
 
                oktomove = FALSE;
 
@@ -1817,8 +1807,6 @@ static bool run_test(void)
                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 */