1 #include "race-resistances.h"
2 #include "player/player-races-types.h"
3 #include "object/object-flags.h"
4 #include "object-enchant/tr-types.h"
7 * @brief プレイヤーの種族による免疫フラグを返す
8 * @param creature_ptr プレーヤーへの参照ポインタ
9 * @param flags フラグを保管する配列
12 * xtra1.c周りと多重実装になっているのを何とかする
14 void player_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
16 for (int i = 0; i < TR_FLAG_SIZE; i++)
19 if (is_specific_player_race(creature_ptr, RACE_SPECTRE))
20 add_flag(flags, TR_RES_NETHER);
21 if (creature_ptr->mimic_form == MIMIC_VAMPIRE || is_specific_player_race(creature_ptr, RACE_VAMPIRE))
22 add_flag(flags, TR_RES_DARK);
23 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD)
24 add_flag(flags, TR_RES_FIRE);
25 else if (is_specific_player_race(creature_ptr, RACE_YEEK) && creature_ptr->lev > 19)
26 add_flag(flags, TR_RES_ACID);
31 * @brief プレイヤーの一時的魔法効果による免疫フラグを返す
32 * @param creature_ptr プレーヤーへの参照ポインタ
33 * @param flags フラグを保管する配列
36 * xtra1.c周りと多重実装になっているのを何とかする
38 void tim_player_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
40 for (int i = 0; i < TR_FLAG_SIZE; i++)
43 if (creature_ptr->special_defense & DEFENSE_ACID)
44 add_flag(flags, TR_RES_ACID);
45 if (creature_ptr->special_defense & DEFENSE_ELEC)
46 add_flag(flags, TR_RES_ELEC);
47 if (creature_ptr->special_defense & DEFENSE_FIRE)
48 add_flag(flags, TR_RES_FIRE);
49 if (creature_ptr->special_defense & DEFENSE_COLD)
50 add_flag(flags, TR_RES_COLD);
51 if (creature_ptr->wraith_form)
52 add_flag(flags, TR_RES_DARK);
57 * @brief プレイヤーの装備による免疫フラグを返す
58 * @param creature_ptr プレーヤーへの参照ポインタ
59 * @param flags フラグを保管する配列
62 * xtra1.c周りと多重実装になっているのを何とかする
64 void known_obj_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
66 for (int i = 0; i < TR_FLAG_SIZE; i++)
69 for (int i = INVEN_RARM; i < INVEN_TOTAL; i++)
71 u32b o_flags[TR_FLAG_SIZE];
73 o_ptr = &creature_ptr->inventory_list[i];
74 if (!o_ptr->k_idx) continue;
76 object_flags_known(o_ptr, o_flags);
77 if (have_flag(o_flags, TR_IM_ACID)) add_flag(flags, TR_RES_ACID);
78 if (have_flag(o_flags, TR_IM_ELEC)) add_flag(flags, TR_RES_ELEC);
79 if (have_flag(o_flags, TR_IM_FIRE)) add_flag(flags, TR_RES_FIRE);
80 if (have_flag(o_flags, TR_IM_COLD)) add_flag(flags, TR_RES_COLD);
86 * @brief プレイヤーの種族による弱点フラグを返す
87 * @param creature_ptr プレーヤーへの参照ポインタ
88 * @param flags フラグを保管する配列
91 * xtra1.c周りと多重実装になっているのを何とかする
93 void player_vulnerability_flags(player_type *creature_ptr, BIT_FLAGS *flags)
95 for (int i = 0; i < TR_FLAG_SIZE; i++)
98 if ((creature_ptr->muta3 & MUT3_VULN_ELEM) || (creature_ptr->special_defense & KATA_KOUKIJIN))
100 add_flag(flags, TR_RES_ACID);
101 add_flag(flags, TR_RES_ELEC);
102 add_flag(flags, TR_RES_FIRE);
103 add_flag(flags, TR_RES_COLD);
106 if (is_specific_player_race(creature_ptr, RACE_ANDROID))
107 add_flag(flags, TR_RES_ELEC);
108 if (is_specific_player_race(creature_ptr, RACE_ENT))
109 add_flag(flags, TR_RES_FIRE);
110 if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || is_specific_player_race(creature_ptr, RACE_S_FAIRY) ||
111 (creature_ptr->mimic_form == MIMIC_VAMPIRE))
112 add_flag(flags, TR_RES_LITE);