OSDN Git Service

cbe598478e5b76db956a6aeea77429e088374de7
[hengbandforosx/hengbandosx.git] / src / status / temporary-resistance.cpp
1 #include "status/temporary-resistance.h"
2 #include "core/disturbance.h"
3 #include "core/player-redraw-types.h"
4 #include "core/player-update-types.h"
5 #include "core/stuff-handler.h"
6 #include "game-option/disturbance-options.h"
7 #include "system/player-type-definition.h"
8 #include "view/display-messages.h"
9
10 /*!
11  * @brief 一時的浮遊の継続時間をセットする / Set "tim_levitation", notice observable changes
12  * @param v 継続時間
13  * @param do_dec 現在の継続時間より長い値のみ上書きする
14  * @return ステータスに影響を及ぼす変化があった場合TRUEを返す。
15  */
16 bool set_tim_levitation(player_type *player_ptr, TIME_EFFECT v, bool do_dec)
17 {
18     bool notice = false;
19     v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
20
21     if (player_ptr->is_dead)
22         return false;
23
24     if (v) {
25         if (player_ptr->tim_levitation && !do_dec) {
26             if (player_ptr->tim_levitation > v)
27                 return false;
28         } else if (!player_ptr->tim_levitation) {
29             msg_print(_("体が宙に浮き始めた。", "You begin to fly!"));
30             notice = true;
31         }
32     } else {
33         if (player_ptr->tim_levitation) {
34             msg_print(_("もう宙に浮かべなくなった。", "You stop flying."));
35             notice = true;
36         }
37     }
38
39     player_ptr->tim_levitation = v;
40     player_ptr->redraw |= (PR_STATUS);
41
42     if (!notice)
43         return false;
44
45     if (disturb_state)
46         disturb(player_ptr, false, false);
47     player_ptr->update |= (PU_BONUS);
48     handle_stuff(player_ptr);
49     return true;
50 }
51
52 bool set_ultimate_res(player_type *player_ptr, TIME_EFFECT v, bool do_dec)
53 {
54     bool notice = false;
55     v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
56
57     if (player_ptr->is_dead)
58         return false;
59
60     if (v) {
61         if (player_ptr->ult_res && !do_dec) {
62             if (player_ptr->ult_res > v)
63                 return false;
64         } else if (!player_ptr->ult_res) {
65             msg_print(_("あらゆることに対して耐性がついた気がする!", "You feel resistant!"));
66             notice = true;
67         }
68     }
69
70     else {
71         if (player_ptr->ult_res) {
72             msg_print(_("あらゆることに対する耐性が薄れた気がする。", "You feel less resistant"));
73             notice = true;
74         }
75     }
76
77     player_ptr->ult_res = v;
78     player_ptr->redraw |= (PR_STATUS);
79
80     if (!notice)
81         return false;
82
83     if (disturb_state)
84         disturb(player_ptr, false, false);
85     player_ptr->update |= (PU_BONUS);
86     handle_stuff(player_ptr);
87
88     return true;
89 }
90
91 bool set_tim_res_nether(player_type *player_ptr, TIME_EFFECT v, bool do_dec)
92 {
93     bool notice = false;
94     v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
95
96     if (player_ptr->is_dead)
97         return false;
98
99     if (v) {
100         if (player_ptr->tim_res_nether && !do_dec) {
101             if (player_ptr->tim_res_nether > v)
102                 return false;
103         } else if (!player_ptr->tim_res_nether) {
104             msg_print(_("地獄の力に対して耐性がついた気がする!", "You feel nether-resistant!"));
105             notice = true;
106         }
107     }
108
109     else {
110         if (player_ptr->tim_res_nether) {
111             msg_print(_("地獄の力に対する耐性が薄れた気がする。", "You feel less nether-resistant"));
112             notice = true;
113         }
114     }
115
116     player_ptr->tim_res_nether = v;
117     player_ptr->redraw |= (PR_STATUS);
118
119     if (!notice)
120         return false;
121
122     if (disturb_state)
123         disturb(player_ptr, false, false);
124     player_ptr->update |= (PU_BONUS);
125     handle_stuff(player_ptr);
126     return true;
127 }
128
129 bool set_tim_res_time(player_type *player_ptr, TIME_EFFECT v, bool do_dec)
130 {
131     bool notice = false;
132     v = (v > 10000) ? 10000 : (v < 0) ? 0 : v;
133     if (player_ptr->is_dead)
134         return false;
135
136     if (v) {
137         if (player_ptr->tim_res_time && !do_dec) {
138             if (player_ptr->tim_res_time > v)
139                 return false;
140         } else if (!player_ptr->tim_res_time) {
141             msg_print(_("時間逆転の力に対して耐性がついた気がする!", "You feel time-resistant!"));
142             notice = true;
143         }
144     } else {
145         if (player_ptr->tim_res_time) {
146             msg_print(_("時間逆転の力に対する耐性が薄れた気がする。", "You feel less time-resistant"));
147             notice = true;
148         }
149     }
150
151     player_ptr->tim_res_time = v;
152     player_ptr->redraw |= (PR_STATUS);
153     if (!notice)
154         return false;
155
156     if (disturb_state)
157         disturb(player_ptr, false, false);
158     player_ptr->update |= (PU_BONUS);
159     handle_stuff(player_ptr);
160     return true;
161 }