2 * @brief monster-processのための構造体群初期化処理と共通性の極めて高い処理
6 * 概ね、player_type 構造体が引数でない場合はここへ移動させることを検討しても良い
7 * 引数に入っていたらここには移動させないこと
10 #include "monster/monster-processor-util.h"
11 #include "game-option/birth-options.h"
12 #include "monster/monster-status.h"
15 * @brief ターン経過フラグ構造体の初期化
16 * @param riding_idx 乗馬中のモンスターID
17 * @param m_idx モンスターID
18 * @return 初期化済のターン経過フラグ
20 turn_flags *init_turn_flags(MONSTER_IDX riding_idx, MONSTER_IDX m_idx, turn_flags *turn_flags_ptr)
22 turn_flags_ptr->is_riding_mon = (m_idx == riding_idx);
23 turn_flags_ptr->do_turn = FALSE;
24 turn_flags_ptr->do_move = FALSE;
25 turn_flags_ptr->do_view = FALSE;
26 turn_flags_ptr->must_alter_to_move = FALSE;
27 turn_flags_ptr->did_open_door = FALSE;
28 turn_flags_ptr->did_bash_door = FALSE;
29 turn_flags_ptr->did_take_item = FALSE;
30 turn_flags_ptr->did_kill_item = FALSE;
31 turn_flags_ptr->did_move_body = FALSE;
32 turn_flags_ptr->did_pass_wall = FALSE;
33 turn_flags_ptr->did_kill_wall = FALSE;
34 return turn_flags_ptr;
39 * @brief old_race_flags_ptr の初期化
41 old_race_flags *init_old_race_flags(old_race_flags *old_race_flags_ptr)
43 old_race_flags_ptr->old_r_flags1 = 0L;
44 old_race_flags_ptr->old_r_flags2 = 0L;
45 old_race_flags_ptr->old_r_flags3 = 0L;
46 old_race_flags_ptr->old_r_flags4 = 0L;
47 old_race_flags_ptr->old_r_flags5 = 0L;
48 old_race_flags_ptr->old_r_flags6 = 0L;
49 old_race_flags_ptr->old_r_flagsr = 0L;
51 old_race_flags_ptr->old_r_blows0 = 0;
52 old_race_flags_ptr->old_r_blows1 = 0;
53 old_race_flags_ptr->old_r_blows2 = 0;
54 old_race_flags_ptr->old_r_blows3 = 0;
56 old_race_flags_ptr->old_r_cast_spell = 0;
57 return old_race_flags_ptr;
62 * @brief coordinate_candidate の初期化
66 coordinate_candidate init_coordinate_candidate(void)
68 coordinate_candidate candidate;
77 * @brief モンスターの移動方向を保存する
82 void store_enemy_approch_direction(int *mm, POSITION y, POSITION x)
84 /* North, South, East, West, North-West, North-East, South-West, South-East */
85 if ((y < 0) && (x == 0))
91 else if ((y > 0) && (x == 0))
97 else if ((x > 0) && (y == 0))
103 else if ((x < 0) && (y == 0))
109 else if ((y < 0) && (x < 0))
115 else if ((y < 0) && (x > 0))
121 else if ((y > 0) && (x < 0))
127 else if ((y > 0) && (x > 0))
137 * @brief get_movable_grid() における移動の方向を保存する
143 void store_moves_val(int *mm, int y, int x)
145 POSITION ax = ABS(x);
146 POSITION ay = 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 モンスターフラグへの参照ポインタ
331 void save_old_race_flags(MONRACE_IDX monster_race_idx, old_race_flags *old_race_flags_ptr)
333 if (monster_race_idx == 0) return;
336 r_ptr = &r_info[monster_race_idx];
338 old_race_flags_ptr->old_r_flags1 = r_ptr->r_flags1;
339 old_race_flags_ptr->old_r_flags2 = r_ptr->r_flags2;
340 old_race_flags_ptr->old_r_flags3 = r_ptr->r_flags3;
341 old_race_flags_ptr->old_r_flags4 = r_ptr->r_flags4;
342 old_race_flags_ptr->old_r_flags5 = r_ptr->r_flags5;
343 old_race_flags_ptr->old_r_flags6 = r_ptr->r_flags6;
344 old_race_flags_ptr->old_r_flagsr = r_ptr->r_flagsr;
346 old_race_flags_ptr->old_r_blows0 = r_ptr->r_blows[0];
347 old_race_flags_ptr->old_r_blows1 = r_ptr->r_blows[1];
348 old_race_flags_ptr->old_r_blows2 = r_ptr->r_blows[2];
349 old_race_flags_ptr->old_r_blows3 = r_ptr->r_blows[3];
351 old_race_flags_ptr->old_r_cast_spell = r_ptr->r_cast_spell;
356 * @brief モンスターの加速値を決定する
357 * @param m_ptr モンスターへの参照ポインタ
360 SPEED decide_monster_speed(monster_type *m_ptr)
362 SPEED speed = m_ptr->mspeed;
363 if (ironman_nightmare) speed += 5;
365 if (monster_fast_remaining(m_ptr)) speed += 10;
366 if (monster_slow_remaining(m_ptr)) speed -= 10;