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 "mind/mind-elementalist.h"
10 #include "system/object-type-definition.h"
11 #include "system/player-type-definition.h"
12 #include "util/bit-flags-calculator.h"
15 * @brief プレイヤーの職業/種族による免疫フラグを返す
16 * @param creature_ptr プレーヤーへの参照ポインタ
17 * @param flags フラグを保管する配列
19 * xtra1.c周りと多重実装になっているのを何とかする
21 void player_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
23 for (int i = 0; i < TR_FLAG_SIZE; i++) {
27 if (player_race_has_flag(creature_ptr, TR_IM_ACID))
28 add_flag(flags, TR_RES_ACID);
29 if (player_race_has_flag(creature_ptr, TR_IM_COLD))
30 add_flag(flags, TR_RES_COLD);
31 if (player_race_has_flag(creature_ptr, TR_IM_ELEC))
32 add_flag(flags, TR_RES_ELEC);
33 if (player_race_has_flag(creature_ptr, TR_IM_FIRE))
34 add_flag(flags, TR_RES_FIRE);
36 if (is_specific_player_race(creature_ptr, RACE_SPECTRE))
37 add_flag(flags, TR_RES_NETHER);
38 if (player_race_has_flag(creature_ptr, TR_IM_DARK))
39 add_flag(flags, TR_RES_DARK);
41 if (creature_ptr->pclass == CLASS_ELEMENTALIST) {
42 if (has_element_resist(creature_ptr, ElementRealm::FIRE, 30))
43 add_flag(flags, TR_RES_FIRE);
44 if (has_element_resist(creature_ptr, ElementRealm::SKY, 30))
45 add_flag(flags, TR_RES_ELEC);
46 if (has_element_resist(creature_ptr, ElementRealm::SEA, 30))
47 add_flag(flags, TR_RES_ACID);
48 if (has_element_resist(creature_ptr, ElementRealm::ICE, 30))
49 add_flag(flags, TR_RES_COLD);
55 * @brief プレイヤーの一時的魔法効果による免疫フラグを返す
56 * @param creature_ptr プレーヤーへの参照ポインタ
57 * @param flags フラグを保管する配列
59 * xtra1.c周りと多重実装になっているのを何とかする
61 void tim_player_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
63 for (int i = 0; i < TR_FLAG_SIZE; i++)
66 if (creature_ptr->special_defense & DEFENSE_ACID)
67 add_flag(flags, TR_RES_ACID);
68 if (creature_ptr->special_defense & DEFENSE_ELEC)
69 add_flag(flags, TR_RES_ELEC);
70 if (creature_ptr->special_defense & DEFENSE_FIRE)
71 add_flag(flags, TR_RES_FIRE);
72 if (creature_ptr->special_defense & DEFENSE_COLD)
73 add_flag(flags, TR_RES_COLD);
74 if (creature_ptr->wraith_form)
75 add_flag(flags, TR_RES_DARK);
80 * @brief プレイヤーの装備による免疫フラグを返す
81 * @param creature_ptr プレーヤーへの参照ポインタ
82 * @param flags フラグを保管する配列
84 * xtra1.c周りと多重実装になっているのを何とかする
86 void known_obj_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
88 for (int i = 0; i < TR_FLAG_SIZE; i++)
91 for (int i = INVEN_MAIN_HAND; i < INVEN_TOTAL; i++)
93 u32b o_flags[TR_FLAG_SIZE];
95 o_ptr = &creature_ptr->inventory_list[i];
96 if (!o_ptr->k_idx) continue;
98 object_flags_known(creature_ptr, o_ptr, o_flags);
99 if (has_flag(o_flags, TR_IM_ACID)) add_flag(flags, TR_RES_ACID);
100 if (has_flag(o_flags, TR_IM_ELEC)) add_flag(flags, TR_RES_ELEC);
101 if (has_flag(o_flags, TR_IM_FIRE)) add_flag(flags, TR_RES_FIRE);
102 if (has_flag(o_flags, TR_IM_COLD)) add_flag(flags, TR_RES_COLD);
108 * @brief プレイヤーの種族による弱点フラグを返す
109 * @param creature_ptr プレーヤーへの参照ポインタ
110 * @param flags フラグを保管する配列
112 * xtra1.c周りと多重実装になっているのを何とかする
114 void player_vulnerability_flags(player_type *creature_ptr, BIT_FLAGS *flags)
116 for (int i = 0; i < TR_FLAG_SIZE; i++)
119 if (creature_ptr->muta.has(MUTA::VULN_ELEM) || (creature_ptr->special_defense & KATA_KOUKIJIN))
121 add_flag(flags, TR_RES_ACID);
122 add_flag(flags, TR_RES_ELEC);
123 add_flag(flags, TR_RES_FIRE);
124 add_flag(flags, TR_RES_COLD);
127 if (player_race_has_flag(creature_ptr, TR_VUL_ACID))
128 add_flag(flags, TR_RES_ACID);
129 if (player_race_has_flag(creature_ptr, TR_VUL_COLD))
130 add_flag(flags, TR_RES_COLD);
131 if (player_race_has_flag(creature_ptr, TR_VUL_ELEC))
132 add_flag(flags, TR_RES_ELEC);
133 if (player_race_has_flag(creature_ptr, TR_VUL_FIRE))
134 add_flag(flags, TR_RES_FIRE);
135 if (player_race_has_flag(creature_ptr, TR_VUL_LITE))
136 add_flag(flags, TR_RES_LITE);