OSDN Git Service

[Refactor] #38862 Moved player-*.c/h to player/ except for player-inventory.c/h
[hengband/hengband.git] / src / monster / monster-update.c
1 /*!
2  * @brief モンスター情報のアップデート処理
3  * @date 2020/03/08
4  * @author Hourier
5  */
6
7 #include "monster/monster-update.h"
8 #include "player/player-move.h"
9
10 /*!
11  * @brief 騎乗中のモンスター情報を更新する
12  * @param target_ptr プレーヤーへの参照ポインタ
13  * @param turn_flags_ptr ターン経過処理フラグへの参照ポインタ
14  * @param m_idx モンスターID
15  * @param oy 移動前の、モンスターのY座標
16  * @param ox 移動前の、モンスターのX座標
17  * @param ny 移動後の、モンスターのY座標
18  * @param ox 移動後の、モンスターのX座標
19  * @return アイテム等に影響を及ぼしたらTRUE
20  */
21 bool update_riding_monster(player_type *target_ptr, turn_flags *turn_flags_ptr, MONSTER_IDX m_idx, POSITION oy, POSITION ox, POSITION ny, POSITION nx)
22 {
23         monster_type *m_ptr = &target_ptr->current_floor_ptr->m_list[m_idx];
24         grid_type *g_ptr;
25         g_ptr = &target_ptr->current_floor_ptr->grid_array[ny][nx];
26         monster_type *y_ptr;
27         y_ptr = &target_ptr->current_floor_ptr->m_list[g_ptr->m_idx];
28         if (turn_flags_ptr->is_riding_mon)
29                 return move_player_effect(target_ptr, ny, nx, MPE_DONT_PICKUP);
30
31         target_ptr->current_floor_ptr->grid_array[oy][ox].m_idx = g_ptr->m_idx;
32         if (g_ptr->m_idx)
33         {
34                 y_ptr->fy = oy;
35                 y_ptr->fx = ox;
36                 update_monster(target_ptr, g_ptr->m_idx, TRUE);
37         }
38
39         g_ptr->m_idx = m_idx;
40         m_ptr->fy = ny;
41         m_ptr->fx = nx;
42         update_monster(target_ptr, m_idx, TRUE);
43
44         lite_spot(target_ptr, oy, ox);
45         lite_spot(target_ptr, ny, nx);
46         return TRUE;
47 }
48
49
50 /*!
51  * @brief updateフィールドを更新する
52  * @param target_ptr プレーヤーへの参照ポインタ
53  * @param turn_flags_ptr ターン経過処理フラグへの参照ポインタ
54  * @return なし
55  */
56 void update_player_type(player_type *target_ptr, turn_flags *turn_flags_ptr, monster_race *r_ptr)
57 {
58         if (turn_flags_ptr->do_view)
59         {
60                 target_ptr->update |= (PU_FLOW);
61                 target_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
62         }
63
64         if (turn_flags_ptr->do_move && ((r_ptr->flags7 & (RF7_SELF_LD_MASK | RF7_HAS_DARK_1 | RF7_HAS_DARK_2))
65                 || ((r_ptr->flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) && !target_ptr->phase_out)))
66         {
67                 target_ptr->update |= (PU_MON_LITE);
68         }
69 }
70
71
72 /*!
73  * @brief モンスターのフラグを更新する
74  * @param target_ptr プレーヤーへの参照ポインタ
75  * @param turn_flags_ptr ターン経過処理フラグへの参照ポインタ
76  * @param m_ptr モンスターへの参照ポインタ
77  * @return なし
78  */
79 void update_monster_race_flags(player_type *target_ptr, turn_flags *turn_flags_ptr, monster_type *m_ptr)
80 {
81         monster_race *r_ptr = &r_info[m_ptr->r_idx];
82         if (!is_original_ap_and_seen(target_ptr, m_ptr)) return;
83
84         if (turn_flags_ptr->did_open_door) r_ptr->r_flags2 |= (RF2_OPEN_DOOR);
85         if (turn_flags_ptr->did_bash_door) r_ptr->r_flags2 |= (RF2_BASH_DOOR);
86         if (turn_flags_ptr->did_take_item) r_ptr->r_flags2 |= (RF2_TAKE_ITEM);
87         if (turn_flags_ptr->did_kill_item) r_ptr->r_flags2 |= (RF2_KILL_ITEM);
88         if (turn_flags_ptr->did_move_body) r_ptr->r_flags2 |= (RF2_MOVE_BODY);
89         if (turn_flags_ptr->did_pass_wall) r_ptr->r_flags2 |= (RF2_PASS_WALL);
90         if (turn_flags_ptr->did_kill_wall) r_ptr->r_flags2 |= (RF2_KILL_WALL);
91 }
92
93
94 /*!
95  * @brief モンスターフラグの更新に基づき、モンスター表示を更新する
96  * @param monster_race_idx モンスターID
97  * @param window ウィンドウフラグ
98  * @param old_race_flags_ptr モンスターフラグへの参照ポインタ
99  * @return なし
100  */
101 void update_player_window(player_type *target_ptr, old_race_flags *old_race_flags_ptr)
102 {
103         monster_race *r_ptr;
104         r_ptr = &r_info[target_ptr->monster_race_idx];
105         if ((old_race_flags_ptr->old_r_flags1 != r_ptr->r_flags1) ||
106                 (old_race_flags_ptr->old_r_flags2 != r_ptr->r_flags2) ||
107                 (old_race_flags_ptr->old_r_flags3 != r_ptr->r_flags3) ||
108                 (old_race_flags_ptr->old_r_flags4 != r_ptr->r_flags4) ||
109                 (old_race_flags_ptr->old_r_flags5 != r_ptr->r_flags5) ||
110                 (old_race_flags_ptr->old_r_flags6 != r_ptr->r_flags6) ||
111                 (old_race_flags_ptr->old_r_flagsr != r_ptr->r_flagsr) ||
112                 (old_race_flags_ptr->old_r_blows0 != r_ptr->r_blows[0]) ||
113                 (old_race_flags_ptr->old_r_blows1 != r_ptr->r_blows[1]) ||
114                 (old_race_flags_ptr->old_r_blows2 != r_ptr->r_blows[2]) ||
115                 (old_race_flags_ptr->old_r_blows3 != r_ptr->r_blows[3]) ||
116                 (old_race_flags_ptr->old_r_cast_spell != r_ptr->r_cast_spell))
117         {
118                 target_ptr->window |= (PW_MONSTER);
119         }
120 }