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-race/monster-race.h"
13 #include "monster/monster-status.h"
16 * @brief ターン経過フラグ構造体の初期化
17 * @param riding_idx 乗馬中のモンスターID
18 * @param m_idx モンスターID
19 * @return 初期化済のターン経過フラグ
21 turn_flags *init_turn_flags(MONSTER_IDX riding_idx, MONSTER_IDX m_idx, turn_flags *turn_flags_ptr)
23 turn_flags_ptr->is_riding_mon = (m_idx == riding_idx);
24 turn_flags_ptr->do_turn = FALSE;
25 turn_flags_ptr->do_move = FALSE;
26 turn_flags_ptr->do_view = FALSE;
27 turn_flags_ptr->must_alter_to_move = FALSE;
28 turn_flags_ptr->did_open_door = FALSE;
29 turn_flags_ptr->did_bash_door = FALSE;
30 turn_flags_ptr->did_take_item = FALSE;
31 turn_flags_ptr->did_kill_item = FALSE;
32 turn_flags_ptr->did_move_body = FALSE;
33 turn_flags_ptr->did_pass_wall = FALSE;
34 turn_flags_ptr->did_kill_wall = FALSE;
35 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_flags4 = 0L;
48 old_race_flags_ptr->old_r_flags5 = 0L;
49 old_race_flags_ptr->old_r_flags6 = 0L;
50 old_race_flags_ptr->old_r_flagsr = 0L;
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() における移動の方向を保存する
144 void store_moves_val(int *mm, int y, int x)
146 POSITION ax = ABS(x);
147 POSITION ay = ABS(y);
150 if (y < 0) move_val += 8;
151 if (x > 0) move_val += 4;
153 if (ay > (ax << 1)) move_val += 2;
154 else if (ax > (ay << 1)) move_val++;
327 * @brief 古いモンスター情報の保存
328 * @param monster_race_idx モンスターID
329 * @param old_race_flags_ptr モンスターフラグへの参照ポインタ
332 void save_old_race_flags(MONRACE_IDX monster_race_idx, old_race_flags *old_race_flags_ptr)
334 if (monster_race_idx == 0) return;
337 r_ptr = &r_info[monster_race_idx];
339 old_race_flags_ptr->old_r_flags1 = r_ptr->r_flags1;
340 old_race_flags_ptr->old_r_flags2 = r_ptr->r_flags2;
341 old_race_flags_ptr->old_r_flags3 = r_ptr->r_flags3;
342 old_race_flags_ptr->old_r_flags4 = r_ptr->r_flags4;
343 old_race_flags_ptr->old_r_flags5 = r_ptr->r_flags5;
344 old_race_flags_ptr->old_r_flags6 = r_ptr->r_flags6;
345 old_race_flags_ptr->old_r_flagsr = r_ptr->r_flagsr;
347 old_race_flags_ptr->old_r_blows0 = r_ptr->r_blows[0];
348 old_race_flags_ptr->old_r_blows1 = r_ptr->r_blows[1];
349 old_race_flags_ptr->old_r_blows2 = r_ptr->r_blows[2];
350 old_race_flags_ptr->old_r_blows3 = r_ptr->r_blows[3];
352 old_race_flags_ptr->old_r_cast_spell = r_ptr->r_cast_spell;
357 * @brief モンスターの加速値を決定する
358 * @param m_ptr モンスターへの参照ポインタ
361 SPEED decide_monster_speed(monster_type *m_ptr)
363 SPEED speed = m_ptr->mspeed;
364 if (ironman_nightmare) speed += 5;
366 if (monster_fast_remaining(m_ptr)) speed += 10;
367 if (monster_slow_remaining(m_ptr)) speed -= 10;