OSDN Git Service

[Implement] 一週間以上前のデバッグログの自動削除
[hengband/hengband.git] / src / blue-magic / blue-magic-breath.c
1 #include "blue-magic/blue-magic-breath.h"
2 #include "blue-magic/blue-magic-util.h"
3 #include "mind/mind-blue-mage.h"
4 #include "mspell/mspell-damage-calculator.h"
5 #include "mspell/mspell-type.h"
6 #include "spell-kind/spells-launcher.h"
7 #include "spell/spell-types.h"
8 #include "target/target-getter.h"
9 #include "view/display-messages.h"
10
11 bool cast_blue_breath_acid(player_type *caster_ptr, bmc_type *bmc_ptr)
12 {
13     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
14         return FALSE;
15
16     msg_print(_("酸のブレスを吐いた。", "You breathe acid."));
17     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_ACID, bmc_ptr->plev, DAM_ROLL);
18     fire_breath(caster_ptr, GF_ACID, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
19     return TRUE;
20 }
21
22 bool cast_blue_breath_elec(player_type *caster_ptr, bmc_type *bmc_ptr)
23 {
24     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
25         return FALSE;
26
27     msg_print(_("稲妻のブレスを吐いた。", "You breathe lightning."));
28     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_ELEC, bmc_ptr->plev, DAM_ROLL);
29     fire_breath(caster_ptr, GF_ELEC, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
30     return TRUE;
31 }
32
33 bool cast_blue_breath_fire(player_type *caster_ptr, bmc_type *bmc_ptr)
34 {
35     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
36         return FALSE;
37
38     msg_print(_("火炎のブレスを吐いた。", "You breathe fire."));
39     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_FIRE, bmc_ptr->plev, DAM_ROLL);
40     fire_breath(caster_ptr, GF_FIRE, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
41     return TRUE;
42 }
43
44 bool cast_blue_breath_cold(player_type *caster_ptr, bmc_type *bmc_ptr)
45 {
46     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
47         return FALSE;
48
49     msg_print(_("冷気のブレスを吐いた。", "You breathe frost."));
50     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_COLD, bmc_ptr->plev, DAM_ROLL);
51     fire_breath(caster_ptr, GF_COLD, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
52     return TRUE;
53 }
54
55 bool cast_blue_breath_pois(player_type *caster_ptr, bmc_type *bmc_ptr)
56 {
57     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
58         return FALSE;
59
60     msg_print(_("ガスのブレスを吐いた。", "You breathe gas."));
61     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_POIS, bmc_ptr->plev, DAM_ROLL);
62     fire_breath(caster_ptr, GF_POIS, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
63     return TRUE;
64 }
65
66 bool cast_blue_breath_nether(player_type *caster_ptr, bmc_type *bmc_ptr)
67 {
68     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
69         return FALSE;
70
71     msg_print(_("地獄のブレスを吐いた。", "You breathe nether."));
72     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_NETHER, bmc_ptr->plev, DAM_ROLL);
73     fire_breath(caster_ptr, GF_NETHER, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
74     return TRUE;
75 }
76
77 bool cast_blue_breath_lite(player_type *caster_ptr, bmc_type *bmc_ptr)
78 {
79     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
80         return FALSE;
81
82     msg_print(_("閃光のブレスを吐いた。", "You breathe light."));
83     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_LITE, bmc_ptr->plev, DAM_ROLL);
84     fire_breath(caster_ptr, GF_LITE, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
85     return TRUE;
86 }
87
88 bool cast_blue_breath_dark(player_type *caster_ptr, bmc_type *bmc_ptr)
89 {
90     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
91         return FALSE;
92
93     msg_print(_("暗黒のブレスを吐いた。", "You breathe darkness."));
94     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_DARK, bmc_ptr->plev, DAM_ROLL);
95     fire_breath(caster_ptr, GF_DARK, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
96     return TRUE;
97 }
98
99 bool cast_blue_breath_conf(player_type *caster_ptr, bmc_type *bmc_ptr)
100 {
101     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
102         return FALSE;
103
104     msg_print(_("混乱のブレスを吐いた。", "You breathe confusion."));
105     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_CONF, bmc_ptr->plev, DAM_ROLL);
106     fire_breath(caster_ptr, GF_CONFUSION, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
107     return TRUE;
108 }
109
110 bool cast_blue_breath_sound(player_type *caster_ptr, bmc_type *bmc_ptr)
111 {
112     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
113         return FALSE;
114
115     msg_print(_("轟音のブレスを吐いた。", "You breathe sound."));
116     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_SOUND, bmc_ptr->plev, DAM_ROLL);
117     fire_breath(caster_ptr, GF_SOUND, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
118     return TRUE;
119 }
120
121 bool cast_blue_breath_chaos(player_type *caster_ptr, bmc_type *bmc_ptr)
122 {
123     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
124         return FALSE;
125
126     msg_print(_("カオスのブレスを吐いた。", "You breathe chaos."));
127     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_CHAOS, bmc_ptr->plev, DAM_ROLL);
128     fire_breath(caster_ptr, GF_CHAOS, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
129     return TRUE;
130 }
131
132 bool cast_blue_breath_disenchant(player_type *caster_ptr, bmc_type *bmc_ptr)
133 {
134     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
135         return FALSE;
136
137     msg_print(_("劣化のブレスを吐いた。", "You breathe disenchantment."));
138     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_DISEN, bmc_ptr->plev, DAM_ROLL);
139     fire_breath(caster_ptr, GF_DISENCHANT, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
140     return TRUE;
141 }
142
143 bool cast_blue_breath_nexus(player_type *caster_ptr, bmc_type *bmc_ptr)
144 {
145     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
146         return FALSE;
147
148     msg_print(_("因果混乱のブレスを吐いた。", "You breathe nexus."));
149     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_NEXUS, bmc_ptr->plev, DAM_ROLL);
150     fire_breath(caster_ptr, GF_NEXUS, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
151     return TRUE;
152 }
153
154 bool cast_blue_breath_time(player_type *caster_ptr, bmc_type *bmc_ptr)
155 {
156     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
157         return FALSE;
158
159     msg_print(_("時間逆転のブレスを吐いた。", "You breathe time."));
160     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_TIME, bmc_ptr->plev, DAM_ROLL);
161     fire_breath(caster_ptr, GF_TIME, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
162     return TRUE;
163 }
164
165 bool cast_blue_breath_inertia(player_type *caster_ptr, bmc_type *bmc_ptr)
166 {
167     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
168         return FALSE;
169
170     msg_print(_("遅鈍のブレスを吐いた。", "You breathe inertia."));
171     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_INERTIA, bmc_ptr->plev, DAM_ROLL);
172     fire_breath(caster_ptr, GF_INERTIAL, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
173     return TRUE;
174 }
175
176 bool cast_blue_breath_gravity(player_type *caster_ptr, bmc_type *bmc_ptr)
177 {
178     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
179         return FALSE;
180
181     msg_print(_("重力のブレスを吐いた。", "You breathe gravity."));
182     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_GRAVITY, bmc_ptr->plev, DAM_ROLL);
183     fire_breath(caster_ptr, GF_GRAVITY, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
184     return TRUE;
185 }
186
187 bool cast_blue_breath_shards(player_type *caster_ptr, bmc_type *bmc_ptr)
188 {
189     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
190         return FALSE;
191
192     msg_print(_("破片のブレスを吐いた。", "You breathe shards."));
193     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_SHARDS, bmc_ptr->plev, DAM_ROLL);
194     fire_breath(caster_ptr, GF_SHARDS, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
195     return TRUE;
196 }
197
198 bool cast_blue_breath_plasma(player_type *caster_ptr, bmc_type *bmc_ptr)
199 {
200     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
201         return FALSE;
202
203     msg_print(_("プラズマのブレスを吐いた。", "You breathe plasma."));
204     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_PLASMA, bmc_ptr->plev, DAM_ROLL);
205     fire_breath(caster_ptr, GF_PLASMA, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
206     return TRUE;
207 }
208
209 bool cast_blue_breath_force(player_type *caster_ptr, bmc_type *bmc_ptr)
210 {
211     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
212         return FALSE;
213
214     msg_print(_("フォースのブレスを吐いた。", "You breathe force."));
215     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_FORCE, bmc_ptr->plev, DAM_ROLL);
216     fire_breath(caster_ptr, GF_FORCE, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
217     return TRUE;
218 }
219
220 bool cast_blue_breath_mana(player_type *caster_ptr, bmc_type *bmc_ptr)
221 {
222     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
223         return FALSE;
224
225     msg_print(_("魔力のブレスを吐いた。", "You breathe mana."));
226     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_MANA, bmc_ptr->plev, DAM_ROLL);
227     fire_breath(caster_ptr, GF_MANA, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
228     return TRUE;
229 }
230
231 bool cast_blue_breath_nuke(player_type *caster_ptr, bmc_type *bmc_ptr)
232 {
233     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
234         return FALSE;
235
236     msg_print(_("放射性廃棄物のブレスを吐いた。", "You breathe toxic waste."));
237     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_NUKE, bmc_ptr->plev, DAM_ROLL);
238     fire_breath(caster_ptr, GF_NUKE, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
239     return TRUE;
240 }
241
242 /*!
243  * @brief 分解のブレスの青魔法
244  * @param caster_ptr プレーヤーへの参照ポインタ
245  * @param bmc_ptr 青魔法詠唱への参照ポインタ
246  * @details 永久の刻は過ぎ去れリ.
247  */
248 bool cast_blue_breath_disintegration(player_type *caster_ptr, bmc_type *bmc_ptr)
249 {
250     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
251         return FALSE;
252
253     msg_print(_("分解のブレスを吐いた。", "You breathe disintegration."));
254     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BR_DISI, bmc_ptr->plev, DAM_ROLL);
255     fire_breath(caster_ptr, GF_DISINTEGRATE, bmc_ptr->dir, bmc_ptr->damage, (bmc_ptr->plev > 40 ? 3 : 2));
256     return TRUE;
257 }