1 #include "race-resistances.h"
4 * @brief プレイヤーの種族による免疫フラグを返す
5 * @param creature_ptr プレーヤーへの参照ポインタ
6 * @param flags フラグを保管する配列
9 * xtra1.c周りと多重実装になっているのを何とかする
11 void player_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
13 for (int i = 0; i < TR_FLAG_SIZE; i++)
16 if (PRACE_IS_(creature_ptr, RACE_SPECTRE))
17 add_flag(flags, TR_RES_NETHER);
18 if (creature_ptr->mimic_form == MIMIC_VAMPIRE || PRACE_IS_(creature_ptr, RACE_VAMPIRE))
19 add_flag(flags, TR_RES_DARK);
20 if (creature_ptr->mimic_form == MIMIC_DEMON_LORD)
21 add_flag(flags, TR_RES_FIRE);
22 else if (PRACE_IS_(creature_ptr, RACE_YEEK) && creature_ptr->lev > 19)
23 add_flag(flags, TR_RES_ACID);
28 * @brief プレイヤーの一時的魔法効果による免疫フラグを返す
29 * @param creature_ptr プレーヤーへの参照ポインタ
30 * @param flags フラグを保管する配列
33 * xtra1.c周りと多重実装になっているのを何とかする
35 void tim_player_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
37 for (int i = 0; i < TR_FLAG_SIZE; i++)
40 if (creature_ptr->special_defense & DEFENSE_ACID)
41 add_flag(flags, TR_RES_ACID);
42 if (creature_ptr->special_defense & DEFENSE_ELEC)
43 add_flag(flags, TR_RES_ELEC);
44 if (creature_ptr->special_defense & DEFENSE_FIRE)
45 add_flag(flags, TR_RES_FIRE);
46 if (creature_ptr->special_defense & DEFENSE_COLD)
47 add_flag(flags, TR_RES_COLD);
48 if (creature_ptr->wraith_form)
49 add_flag(flags, TR_RES_DARK);
54 * @brief プレイヤーの装備による免疫フラグを返す
55 * @param creature_ptr プレーヤーへの参照ポインタ
56 * @param flags フラグを保管する配列
59 * xtra1.c周りと多重実装になっているのを何とかする
61 void known_obj_immunity(player_type *creature_ptr, BIT_FLAGS *flags)
63 for (int i = 0; i < TR_FLAG_SIZE; i++)
66 for (int i = INVEN_RARM; i < INVEN_TOTAL; i++)
68 u32b o_flags[TR_FLAG_SIZE];
70 o_ptr = &creature_ptr->inventory_list[i];
71 if (!o_ptr->k_idx) continue;
73 object_flags_known(o_ptr, o_flags);
74 if (have_flag(o_flags, TR_IM_ACID)) add_flag(flags, TR_RES_ACID);
75 if (have_flag(o_flags, TR_IM_ELEC)) add_flag(flags, TR_RES_ELEC);
76 if (have_flag(o_flags, TR_IM_FIRE)) add_flag(flags, TR_RES_FIRE);
77 if (have_flag(o_flags, TR_IM_COLD)) add_flag(flags, TR_RES_COLD);
83 * @brief プレイヤーの種族による弱点フラグを返す
84 * @param creature_ptr プレーヤーへの参照ポインタ
85 * @param flags フラグを保管する配列
88 * xtra1.c周りと多重実装になっているのを何とかする
90 void player_vulnerability_flags(player_type *creature_ptr, BIT_FLAGS *flags)
92 for (int i = 0; i < TR_FLAG_SIZE; i++)
95 if ((creature_ptr->muta3 & MUT3_VULN_ELEM) || (creature_ptr->special_defense & KATA_KOUKIJIN))
97 add_flag(flags, TR_RES_ACID);
98 add_flag(flags, TR_RES_ELEC);
99 add_flag(flags, TR_RES_FIRE);
100 add_flag(flags, TR_RES_COLD);
103 if (PRACE_IS_(creature_ptr, RACE_ANDROID))
104 add_flag(flags, TR_RES_ELEC);
105 if (PRACE_IS_(creature_ptr, RACE_ENT))
106 add_flag(flags, TR_RES_FIRE);
107 if (PRACE_IS_(creature_ptr, RACE_VAMPIRE) || PRACE_IS_(creature_ptr, RACE_S_FAIRY) ||
108 (creature_ptr->mimic_form == MIMIC_VAMPIRE))
109 add_flag(flags, TR_RES_LITE);