OSDN Git Service

952c690fa62a03f91a7760e6dba8c280fb1dfbba
[hengband/hengband.git] / src / player / temporary-resistances.c
1 #include "temporary-resistances.h"
2 #include "realm-hex.h"
3 #include "realm-song.h"
4
5 /*!
6  * @brief プレイヤーの一時的魔法効果による耐性を返す
7  * Prints ratings on certain abilities
8  * @param creature_ptr プレーヤーへの参照ポインタ
9  * @param flgs フラグを保管する配列
10  * @return なし
11  * @todo
12  * xtra1.c周りと多重実装になっているのを何とかする
13  */
14 void tim_player_flags(player_type *creature_ptr, BIT_FLAGS flgs[TR_FLAG_SIZE])
15 {
16         for (int i = 0; i < TR_FLAG_SIZE; i++)
17                 flgs[i] = 0L;
18
19         if (IS_HERO(creature_ptr) || creature_ptr->shero)
20                 add_flag(flgs, TR_RES_FEAR);
21         if (creature_ptr->tim_invis)
22                 add_flag(flgs, TR_SEE_INVIS);
23         if (creature_ptr->tim_regen)
24                 add_flag(flgs, TR_REGEN);
25         if (is_time_limit_esp(creature_ptr))
26                 add_flag(flgs, TR_TELEPATHY);
27         if (IS_FAST(creature_ptr) || creature_ptr->slow)
28                 add_flag(flgs, TR_SPEED);
29
30         if (is_oppose_acid(creature_ptr) && !(creature_ptr->special_defense & DEFENSE_ACID) && !(PRACE_IS_(creature_ptr, RACE_YEEK) && (creature_ptr->lev > 19)))
31                 add_flag(flgs, TR_RES_ACID);
32         if (is_oppose_elec(creature_ptr) && !(creature_ptr->special_defense & DEFENSE_ELEC))
33                 add_flag(flgs, TR_RES_ELEC);
34         if (is_oppose_fire(creature_ptr) && !(creature_ptr->special_defense & DEFENSE_FIRE))
35                 add_flag(flgs, TR_RES_FIRE);
36         if (is_oppose_cold(creature_ptr) && !(creature_ptr->special_defense & DEFENSE_COLD))
37                 add_flag(flgs, TR_RES_COLD);
38         if (is_oppose_pois(creature_ptr))
39                 add_flag(flgs, TR_RES_POIS);
40
41         if (creature_ptr->special_attack & ATTACK_ACID)
42                 add_flag(flgs, TR_BRAND_ACID);
43         if (creature_ptr->special_attack & ATTACK_ELEC)
44                 add_flag(flgs, TR_BRAND_ELEC);
45         if (creature_ptr->special_attack & ATTACK_FIRE)
46                 add_flag(flgs, TR_BRAND_FIRE);
47         if (creature_ptr->special_attack & ATTACK_COLD)
48                 add_flag(flgs, TR_BRAND_COLD);
49         if (creature_ptr->special_attack & ATTACK_POIS)
50                 add_flag(flgs, TR_BRAND_POIS);
51         if (creature_ptr->special_defense & DEFENSE_ACID)
52                 add_flag(flgs, TR_IM_ACID);
53         if (creature_ptr->special_defense & DEFENSE_ELEC)
54                 add_flag(flgs, TR_IM_ELEC);
55         if (creature_ptr->special_defense & DEFENSE_FIRE)
56                 add_flag(flgs, TR_IM_FIRE);
57         if (creature_ptr->special_defense & DEFENSE_COLD)
58                 add_flag(flgs, TR_IM_COLD);
59         if (creature_ptr->wraith_form)
60                 add_flag(flgs, TR_REFLECT);
61         if (creature_ptr->tim_reflect)
62                 add_flag(flgs, TR_REFLECT);
63
64         if (creature_ptr->magicdef)
65         {
66                 add_flag(flgs, TR_RES_BLIND);
67                 add_flag(flgs, TR_RES_CONF);
68                 add_flag(flgs, TR_REFLECT);
69                 add_flag(flgs, TR_FREE_ACT);
70                 add_flag(flgs, TR_LEVITATION);
71         }
72
73         if (creature_ptr->tim_res_nether) add_flag(flgs, TR_RES_NETHER);
74
75         if (creature_ptr->tim_sh_fire) add_flag(flgs, TR_SH_FIRE);
76
77         if (creature_ptr->ult_res)
78         {
79                 add_flag(flgs, TR_RES_FEAR);
80                 add_flag(flgs, TR_RES_LITE);
81                 add_flag(flgs, TR_RES_DARK);
82                 add_flag(flgs, TR_RES_BLIND);
83                 add_flag(flgs, TR_RES_CONF);
84                 add_flag(flgs, TR_RES_SOUND);
85                 add_flag(flgs, TR_RES_SHARDS);
86                 add_flag(flgs, TR_RES_NETHER);
87                 add_flag(flgs, TR_RES_NEXUS);
88                 add_flag(flgs, TR_RES_CHAOS);
89                 add_flag(flgs, TR_RES_DISEN);
90                 add_flag(flgs, TR_REFLECT);
91                 add_flag(flgs, TR_HOLD_EXP);
92                 add_flag(flgs, TR_FREE_ACT);
93                 add_flag(flgs, TR_SH_FIRE);
94                 add_flag(flgs, TR_SH_ELEC);
95                 add_flag(flgs, TR_SH_COLD);
96                 add_flag(flgs, TR_LEVITATION);
97                 add_flag(flgs, TR_LITE_1);
98                 add_flag(flgs, TR_SEE_INVIS);
99                 add_flag(flgs, TR_TELEPATHY);
100                 add_flag(flgs, TR_SLOW_DIGEST);
101                 add_flag(flgs, TR_REGEN);
102                 add_flag(flgs, TR_SUST_STR);
103                 add_flag(flgs, TR_SUST_INT);
104                 add_flag(flgs, TR_SUST_WIS);
105                 add_flag(flgs, TR_SUST_DEX);
106                 add_flag(flgs, TR_SUST_CON);
107                 add_flag(flgs, TR_SUST_CHR);
108         }
109
110         if (creature_ptr->realm1 != REALM_HEX) return;
111
112         if (hex_spelling(creature_ptr, HEX_DEMON_AURA))
113         {
114                 add_flag(flgs, TR_SH_FIRE);
115                 add_flag(flgs, TR_REGEN);
116         }
117
118         if (hex_spelling(creature_ptr, HEX_ICE_ARMOR)) add_flag(flgs, TR_SH_COLD);
119         if (hex_spelling(creature_ptr, HEX_SHOCK_CLOAK)) add_flag(flgs, TR_SH_ELEC);
120 }