2 * @brief monster-processのための構造体群初期化処理と共通性の極めて高い処理
6 * 概ね、PlayerType 構造体が引数でない場合はここへ移動させることを検討しても良い
7 * 引数に入っていたらここには移動させないこと
10 #include "monster/monster-processor-util.h"
11 #include "game-option/birth-options.h"
12 #include "monster-race/monster-race.h"
13 #include "monster/monster-status.h"
14 #include "system/monster-race-definition.h"
15 #include "system/monster-type-definition.h"
18 * @brief ターン経過フラグ構造体の初期化
19 * @param riding_idx 乗馬中のモンスターID
20 * @param m_idx モンスターID
21 * @return 初期化済のターン経過フラグ
23 turn_flags *init_turn_flags(MONSTER_IDX riding_idx, MONSTER_IDX m_idx, turn_flags *turn_flags_ptr)
25 turn_flags_ptr->is_riding_mon = (m_idx == riding_idx);
26 turn_flags_ptr->do_turn = false;
27 turn_flags_ptr->do_move = false;
28 turn_flags_ptr->do_view = false;
29 turn_flags_ptr->must_alter_to_move = false;
30 turn_flags_ptr->did_open_door = false;
31 turn_flags_ptr->did_bash_door = false;
32 turn_flags_ptr->did_take_item = false;
33 turn_flags_ptr->did_kill_item = false;
34 turn_flags_ptr->did_move_body = false;
35 turn_flags_ptr->did_pass_wall = false;
36 turn_flags_ptr->did_kill_wall = false;
37 return turn_flags_ptr;
42 * @brief old_race_flags_ptr の初期化
44 old_race_flags *init_old_race_flags(old_race_flags *old_race_flags_ptr)
46 old_race_flags_ptr->old_r_flags1 = 0L;
47 old_race_flags_ptr->old_r_flags2 = 0L;
48 old_race_flags_ptr->old_r_flags3 = 0L;
49 old_race_flags_ptr->old_r_flagsr = 0L;
50 old_race_flags_ptr->old_r_ability_flags.clear();
52 old_race_flags_ptr->old_r_blows0 = 0;
53 old_race_flags_ptr->old_r_blows1 = 0;
54 old_race_flags_ptr->old_r_blows2 = 0;
55 old_race_flags_ptr->old_r_blows3 = 0;
57 old_race_flags_ptr->old_r_cast_spell = 0;
58 return old_race_flags_ptr;
63 * @brief coordinate_candidate の初期化
67 coordinate_candidate init_coordinate_candidate(void)
69 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))
92 else if ((y > 0) && (x == 0))
98 else if ((x > 0) && (y == 0))
104 else if ((x < 0) && (y == 0))
110 else if ((y < 0) && (x < 0))
116 else if ((y < 0) && (x > 0))
122 else if ((y > 0) && (x < 0))
128 else if ((y > 0) && (x > 0))
138 * @brief get_movable_grid() における移動の方向を保存する
143 void store_moves_val(int *mm, int y, int x)
145 POSITION ax = std::abs(x);
146 POSITION ay = std::abs(y);
149 if (y < 0) move_val += 8;
150 if (x > 0) move_val += 4;
152 if (ay > (ax << 1)) move_val += 2;
153 else if (ax > (ay << 1)) move_val++;
326 * @brief 古いモンスター情報の保存
327 * @param monster_race_idx モンスターID
328 * @param old_race_flags_ptr モンスターフラグへの参照ポインタ
330 void save_old_race_flags(MONRACE_IDX monster_race_idx, old_race_flags *old_race_flags_ptr)
332 if (monster_race_idx == 0) return;
335 r_ptr = &r_info[monster_race_idx];
337 old_race_flags_ptr->old_r_flags1 = r_ptr->r_flags1;
338 old_race_flags_ptr->old_r_flags2 = r_ptr->r_flags2;
339 old_race_flags_ptr->old_r_flags3 = r_ptr->r_flags3;
340 old_race_flags_ptr->old_r_flagsr = r_ptr->r_flagsr;
341 old_race_flags_ptr->old_r_ability_flags = r_ptr->r_ability_flags;
343 old_race_flags_ptr->old_r_blows0 = r_ptr->r_blows[0];
344 old_race_flags_ptr->old_r_blows1 = r_ptr->r_blows[1];
345 old_race_flags_ptr->old_r_blows2 = r_ptr->r_blows[2];
346 old_race_flags_ptr->old_r_blows3 = r_ptr->r_blows[3];
348 old_race_flags_ptr->old_r_cast_spell = r_ptr->r_cast_spell;
353 * @brief モンスターの加速値を決定する
354 * @param m_ptr モンスターへの参照ポインタ
357 SPEED decide_monster_speed(monster_type *m_ptr)
359 SPEED speed = m_ptr->mspeed;
360 if (ironman_nightmare) speed += 5;
362 if (monster_fast_remaining(m_ptr)) speed += 10;
363 if (monster_slow_remaining(m_ptr)) speed -= 10;