1 #include "race-resistances.h"
2 #include "inventory/inventory-slot-types.h"
3 #include "mutation/mutation-flag-types.h"
4 #include "player/player-race-types.h"
5 #include "object/object-flags.h"
6 #include "object-enchant/tr-types.h"
7 #include "player/player-race.h"
8 #include "player/special-defense-types.h"
9 #include "util/bit-flags-calculator.h"
12 * @brief プレイヤーの種族による免疫フラグを返す
13 * @param creature_ptr プレーヤーへの参照ポインタ
14 * @param flags フラグを保管する配列
17 * xtra1.c周りと多重実装になっているのを何とかする
19 void player_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
21 for (int i = 0; i < TR_FLAG_SIZE; i++)
24 if (is_specific_player_race(creature_ptr, RACE_SPECTRE))
25 add_flag(flags, TR_RES_NETHER);
26 if (creature_ptr->mimic_form == MIMIC_VAMPIRE || is_specific_player_race(creature_ptr, RACE_VAMPIRE))
27 add_flag(flags, TR_RES_DARK);
28 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD)
29 add_flag(flags, TR_RES_FIRE);
30 else if (is_specific_player_race(creature_ptr, RACE_YEEK) && creature_ptr->lev > 19)
31 add_flag(flags, TR_RES_ACID);
36 * @brief プレイヤーの一時的魔法効果による免疫フラグを返す
37 * @param creature_ptr プレーヤーへの参照ポインタ
38 * @param flags フラグを保管する配列
41 * xtra1.c周りと多重実装になっているのを何とかする
43 void tim_player_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
45 for (int i = 0; i < TR_FLAG_SIZE; i++)
48 if (creature_ptr->special_defense & DEFENSE_ACID)
49 add_flag(flags, TR_RES_ACID);
50 if (creature_ptr->special_defense & DEFENSE_ELEC)
51 add_flag(flags, TR_RES_ELEC);
52 if (creature_ptr->special_defense & DEFENSE_FIRE)
53 add_flag(flags, TR_RES_FIRE);
54 if (creature_ptr->special_defense & DEFENSE_COLD)
55 add_flag(flags, TR_RES_COLD);
56 if (creature_ptr->wraith_form)
57 add_flag(flags, TR_RES_DARK);
62 * @brief プレイヤーの装備による免疫フラグを返す
63 * @param creature_ptr プレーヤーへの参照ポインタ
64 * @param flags フラグを保管する配列
67 * xtra1.c周りと多重実装になっているのを何とかする
69 void known_obj_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
71 for (int i = 0; i < TR_FLAG_SIZE; i++)
74 for (inventory_slot_type i = INVEN_RARM; i < INVEN_TOTAL; i++)
76 u32b o_flags[TR_FLAG_SIZE];
78 o_ptr = &creature_ptr->inventory_list[i];
79 if (!o_ptr->k_idx) continue;
81 object_flags_known(creature_ptr, o_ptr, o_flags);
82 if (has_flag(o_flags, TR_IM_ACID)) add_flag(flags, TR_RES_ACID);
83 if (has_flag(o_flags, TR_IM_ELEC)) add_flag(flags, TR_RES_ELEC);
84 if (has_flag(o_flags, TR_IM_FIRE)) add_flag(flags, TR_RES_FIRE);
85 if (has_flag(o_flags, TR_IM_COLD)) add_flag(flags, TR_RES_COLD);
91 * @brief プレイヤーの種族による弱点フラグを返す
92 * @param creature_ptr プレーヤーへの参照ポインタ
93 * @param flags フラグを保管する配列
96 * xtra1.c周りと多重実装になっているのを何とかする
98 void player_vulnerability_flags(player_type *creature_ptr, BIT_FLAGS *flags)
100 for (int i = 0; i < TR_FLAG_SIZE; i++)
103 if ((creature_ptr->muta3 & MUT3_VULN_ELEM) || (creature_ptr->special_defense & KATA_KOUKIJIN))
105 add_flag(flags, TR_RES_ACID);
106 add_flag(flags, TR_RES_ELEC);
107 add_flag(flags, TR_RES_FIRE);
108 add_flag(flags, TR_RES_COLD);
111 if (is_specific_player_race(creature_ptr, RACE_ANDROID))
112 add_flag(flags, TR_RES_ELEC);
113 if (is_specific_player_race(creature_ptr, RACE_ENT))
114 add_flag(flags, TR_RES_FIRE);
115 if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || is_specific_player_race(creature_ptr, RACE_S_FAIRY) ||
116 (creature_ptr->mimic_form == MIMIC_VAMPIRE))
117 add_flag(flags, TR_RES_LITE);