2 * @brief monster-processのための構造体群初期化処理と共通性の極めて高い処理
6 * 概ね、player_type 構造体が引数でない場合はここへ移動させることを検討しても良い
7 * 引数に入っていたらここには移動させないこと
11 #include "monster-util.h"
14 * @brief ターン経過フラグ構造体の初期化
15 * @param riding_idx 乗馬中のモンスターID
16 * @param m_idx モンスターID
17 * @return 初期化済のターン経過フラグ
19 turn_flags *init_turn_flags(MONSTER_IDX riding_idx, MONSTER_IDX m_idx, turn_flags *turn_flags_ptr)
21 turn_flags_ptr->is_riding_mon = (m_idx == riding_idx);
22 turn_flags_ptr->do_turn = FALSE;
23 turn_flags_ptr->do_move = FALSE;
24 turn_flags_ptr->do_view = FALSE;
25 turn_flags_ptr->must_alter_to_move = FALSE;
26 turn_flags_ptr->did_open_door = FALSE;
27 turn_flags_ptr->did_bash_door = FALSE;
28 turn_flags_ptr->did_take_item = FALSE;
29 turn_flags_ptr->did_kill_item = FALSE;
30 turn_flags_ptr->did_move_body = FALSE;
31 turn_flags_ptr->did_pass_wall = FALSE;
32 turn_flags_ptr->did_kill_wall = FALSE;
33 return turn_flags_ptr;
38 * @brief old_race_flags_ptr の初期化
40 old_race_flags *init_old_race_flags(old_race_flags *old_race_flags_ptr)
42 old_race_flags_ptr->old_r_flags1 = 0L;
43 old_race_flags_ptr->old_r_flags2 = 0L;
44 old_race_flags_ptr->old_r_flags3 = 0L;
45 old_race_flags_ptr->old_r_flags4 = 0L;
46 old_race_flags_ptr->old_r_flags5 = 0L;
47 old_race_flags_ptr->old_r_flags6 = 0L;
48 old_race_flags_ptr->old_r_flagsr = 0L;
50 old_race_flags_ptr->old_r_blows0 = 0;
51 old_race_flags_ptr->old_r_blows1 = 0;
52 old_race_flags_ptr->old_r_blows2 = 0;
53 old_race_flags_ptr->old_r_blows3 = 0;
55 old_race_flags_ptr->old_r_cast_spell = 0;
56 return old_race_flags_ptr;
61 * @brief coordinate_candidate の初期化
65 coordinate_candidate init_coordinate_candidate(void)
67 coordinate_candidate candidate;
76 * @brief モンスターの移動方向を保存する
81 void store_enemy_approch_direction(int *mm, POSITION y, POSITION x)
83 /* North, South, East, West, North-West, North-East, South-West, South-East */
84 if ((y < 0) && (x == 0))
90 else if ((y > 0) && (x == 0))
96 else if ((x > 0) && (y == 0))
102 else if ((x < 0) && (y == 0))
108 else if ((y < 0) && (x < 0))
114 else if ((y < 0) && (x > 0))
120 else if ((y > 0) && (x < 0))
126 else if ((y > 0) && (x > 0))
136 * @brief get_moves() における移動の方向を保存する
142 void store_moves_val(int *mm, int y, int x)
144 POSITION ax = ABS(x);
145 POSITION ay = ABS(y);
148 if (y < 0) move_val += 8;
149 if (x > 0) move_val += 4;
151 if (ay > (ax << 1)) move_val += 2;
152 else if (ax > (ay << 1)) move_val++;
325 * @brief 古いモンスター情報の保存
326 * @param monster_race_idx モンスターID
327 * @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_flags4 = r_ptr->r_flags4;
341 old_race_flags_ptr->old_r_flags5 = r_ptr->r_flags5;
342 old_race_flags_ptr->old_r_flags6 = r_ptr->r_flags6;
343 old_race_flags_ptr->old_r_flagsr = r_ptr->r_flagsr;
345 old_race_flags_ptr->old_r_blows0 = r_ptr->r_blows[0];
346 old_race_flags_ptr->old_r_blows1 = r_ptr->r_blows[1];
347 old_race_flags_ptr->old_r_blows2 = r_ptr->r_blows[2];
348 old_race_flags_ptr->old_r_blows3 = r_ptr->r_blows[3];
350 old_race_flags_ptr->old_r_cast_spell = r_ptr->r_cast_spell;
355 * @brief モンスターの加速値を決定する
356 * @param m_ptr モンスターへの参照ポインタ
359 SPEED decide_monster_speed(monster_type *m_ptr)
361 SPEED speed = m_ptr->mspeed;
362 if (ironman_nightmare) speed += 5;
364 if (MON_FAST(m_ptr)) speed += 10;
365 if (MON_SLOW(m_ptr)) speed -= 10;