2 * @brief monster-processのための構造体群初期化処理と共通性の極めて高い処理
6 * 概ね、PlayerType 構造体が引数でない場合はここへ移動させることを検討しても良い
7 * 引数に入っていたらここには移動させないこと
10 #include "monster/monster-processor-util.h"
11 #include "monster-race/monster-race.h"
12 #include "monster/monster-status.h"
13 #include "system/monster-entity.h"
14 #include "system/monster-race-info.h"
17 * @brief ターン経過フラグ構造体の初期化
18 * @param riding_idx 乗馬中のモンスターID
19 * @param m_idx モンスターID
20 * @return 初期化済のターン経過フラグ
22 turn_flags *init_turn_flags(MONSTER_IDX riding_idx, MONSTER_IDX m_idx, turn_flags *turn_flags_ptr)
24 turn_flags_ptr->is_riding_mon = (m_idx == riding_idx);
25 turn_flags_ptr->do_turn = false;
26 turn_flags_ptr->do_move = false;
27 turn_flags_ptr->do_view = false;
28 turn_flags_ptr->must_alter_to_move = false;
29 turn_flags_ptr->did_open_door = false;
30 turn_flags_ptr->did_bash_door = false;
31 turn_flags_ptr->did_take_item = false;
32 turn_flags_ptr->did_kill_item = false;
33 turn_flags_ptr->did_move_body = false;
34 turn_flags_ptr->did_pass_wall = false;
35 turn_flags_ptr->did_kill_wall = false;
36 return turn_flags_ptr;
40 * @brief old_race_flags_ptr の初期化
42 old_race_flags *init_old_race_flags(old_race_flags *old_race_flags_ptr)
44 old_race_flags_ptr->old_r_flags1 = 0L;
45 old_race_flags_ptr->old_r_flags2 = 0L;
46 old_race_flags_ptr->old_r_flags3 = 0L;
47 old_race_flags_ptr->old_r_resistance_flags.clear();
48 old_race_flags_ptr->old_r_ability_flags.clear();
49 old_race_flags_ptr->old_r_behavior_flags.clear();
50 old_race_flags_ptr->old_r_kind_flags.clear();
51 old_race_flags_ptr->old_r_drop_flags.clear();
52 old_race_flags_ptr->old_r_feature_flags.clear();
54 old_race_flags_ptr->old_r_blows0 = 0;
55 old_race_flags_ptr->old_r_blows1 = 0;
56 old_race_flags_ptr->old_r_blows2 = 0;
57 old_race_flags_ptr->old_r_blows3 = 0;
59 old_race_flags_ptr->old_r_cast_spell = 0;
60 return old_race_flags_ptr;
64 * @brief coordinate_candidate の初期化
68 coordinate_candidate init_coordinate_candidate(void)
70 coordinate_candidate candidate;
78 * @brief モンスターの移動方向を保存する
83 void store_enemy_approch_direction(int *mm, POSITION y, POSITION x)
85 /* North, South, East, West, North-West, North-East, South-West, South-East */
86 if ((y < 0) && (x == 0)) {
90 } else if ((y > 0) && (x == 0)) {
94 } else if ((x > 0) && (y == 0)) {
98 } else if ((x < 0) && (y == 0)) {
102 } else if ((y < 0) && (x < 0)) {
106 } else if ((y < 0) && (x > 0)) {
110 } else if ((y > 0) && (x < 0)) {
114 } else if ((y > 0) && (x > 0)) {
122 * @brief get_movable_grid() における移動の方向を保存する
127 void store_moves_val(int *mm, int y, int x)
129 POSITION ax = std::abs(x);
130 POSITION ay = std::abs(y);
140 if (ay > (ax << 1)) {
142 } else if (ax > (ay << 1)) {
283 * @brief 古いモンスター情報の保存
284 * @param monster_race_idx モンスターID
285 * @param old_race_flags_ptr モンスターフラグへの参照ポインタ
287 void save_old_race_flags(MonsterRaceId monster_race_idx, old_race_flags *old_race_flags_ptr)
289 if (!MonsterRace(monster_race_idx).is_valid()) {
293 MonsterRaceInfo *r_ptr;
294 r_ptr = &monraces_info[monster_race_idx];
296 old_race_flags_ptr->old_r_flags1 = r_ptr->r_flags1;
297 old_race_flags_ptr->old_r_flags2 = r_ptr->r_flags2;
298 old_race_flags_ptr->old_r_flags3 = r_ptr->r_flags3;
299 old_race_flags_ptr->old_r_resistance_flags = r_ptr->r_resistance_flags;
300 old_race_flags_ptr->old_r_ability_flags = r_ptr->r_ability_flags;
301 old_race_flags_ptr->old_r_behavior_flags = r_ptr->r_behavior_flags;
302 old_race_flags_ptr->old_r_kind_flags = r_ptr->r_kind_flags;
303 old_race_flags_ptr->old_r_drop_flags = r_ptr->r_drop_flags;
304 old_race_flags_ptr->old_r_feature_flags = r_ptr->r_feature_flags;
306 old_race_flags_ptr->old_r_blows0 = r_ptr->r_blows[0];
307 old_race_flags_ptr->old_r_blows1 = r_ptr->r_blows[1];
308 old_race_flags_ptr->old_r_blows2 = r_ptr->r_blows[2];
309 old_race_flags_ptr->old_r_blows3 = r_ptr->r_blows[3];
311 old_race_flags_ptr->old_r_cast_spell = r_ptr->r_cast_spell;