OSDN Git Service

Merge pull request #2122 from sikabane-works/release/3.0.0Alpha52
[hengbandforosx/hengbandosx.git] / src / blue-magic / blue-magic-ball-bolt.cpp
1 /*!
2  * @file blue-magic-ball-bolt.cpp
3  * @brief 青魔法のボール/ボルト系呪文定義
4  */
5
6 #include "blue-magic/blue-magic-ball-bolt.h"
7 #include "blue-magic/blue-magic-util.h"
8 #include "effect/attribute-types.h"
9 #include "monster-race/race-ability-flags.h"
10 #include "mspell/mspell-damage-calculator.h"
11 #include "spell-kind/spells-launcher.h"
12 #include "system/player-type-definition.h"
13 #include "target/target-getter.h"
14 #include "view/display-messages.h"
15
16 bool cast_blue_ball_acid(PlayerType *player_ptr, bmc_type *bmc_ptr)
17 {
18     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
19         return false;
20     }
21
22     msg_print(_("アシッド・ボールの呪文を唱えた。", "You cast an acid ball."));
23     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_ACID, bmc_ptr->plev, DAM_ROLL);
24     fire_ball(player_ptr, AttributeType::ACID, bmc_ptr->dir, bmc_ptr->damage, 2);
25     return true;
26 }
27
28 bool cast_blue_ball_elec(PlayerType *player_ptr, bmc_type *bmc_ptr)
29 {
30     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
31         return false;
32     }
33
34     msg_print(_("サンダー・ボールの呪文を唱えた。", "You cast a lightning ball."));
35     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_ELEC, bmc_ptr->plev, DAM_ROLL);
36     fire_ball(player_ptr, AttributeType::ELEC, bmc_ptr->dir, bmc_ptr->damage, 2);
37     return true;
38 }
39
40 bool cast_blue_ball_fire(PlayerType *player_ptr, bmc_type *bmc_ptr)
41 {
42     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
43         return false;
44     }
45
46     msg_print(_("ファイア・ボールの呪文を唱えた。", "You cast a fire ball."));
47     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_FIRE, bmc_ptr->plev, DAM_ROLL);
48     fire_ball(player_ptr, AttributeType::FIRE, bmc_ptr->dir, bmc_ptr->damage, 2);
49     return true;
50 }
51
52 bool cast_blue_ball_cold(PlayerType *player_ptr, bmc_type *bmc_ptr)
53 {
54     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
55         return false;
56     }
57
58     msg_print(_("アイス・ボールの呪文を唱えた。", "You cast a frost ball."));
59     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_COLD, bmc_ptr->plev, DAM_ROLL);
60     fire_ball(player_ptr, AttributeType::COLD, bmc_ptr->dir, bmc_ptr->damage, 2);
61     return true;
62 }
63
64 bool cast_blue_ball_pois(PlayerType *player_ptr, bmc_type *bmc_ptr)
65 {
66     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
67         return false;
68     }
69
70     msg_print(_("悪臭雲の呪文を唱えた。", "You cast a stinking cloud."));
71     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_POIS, bmc_ptr->plev, DAM_ROLL);
72     fire_ball(player_ptr, AttributeType::POIS, bmc_ptr->dir, bmc_ptr->damage, 2);
73     return true;
74 }
75
76 bool cast_blue_ball_nuke(PlayerType *player_ptr, bmc_type *bmc_ptr)
77 {
78     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
79         return false;
80     }
81
82     msg_print(_("放射能球を放った。", "You cast a ball of radiation."));
83     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_NUKE, bmc_ptr->plev, DAM_ROLL);
84     fire_ball(player_ptr, AttributeType::NUKE, bmc_ptr->dir, bmc_ptr->damage, 2);
85     return true;
86 }
87
88 bool cast_blue_ball_nether(PlayerType *player_ptr, bmc_type *bmc_ptr)
89 {
90     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
91         return false;
92     }
93
94     msg_print(_("地獄球の呪文を唱えた。", "You cast a nether ball."));
95     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_NETH, bmc_ptr->plev, DAM_ROLL);
96     fire_ball(player_ptr, AttributeType::NETHER, bmc_ptr->dir, bmc_ptr->damage, 2);
97     return true;
98 }
99
100 bool cast_blue_ball_chaos(PlayerType *player_ptr, bmc_type *bmc_ptr)
101 {
102     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
103         return false;
104     }
105
106     msg_print(_("純ログルスを放った。", "You invoke a raw Logrus."));
107     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_CHAO, bmc_ptr->plev, DAM_ROLL);
108     fire_ball(player_ptr, AttributeType::CHAOS, bmc_ptr->dir, bmc_ptr->damage, 4);
109     return true;
110 }
111
112 /*!
113  * @brief ウォーター・ボールの青魔法
114  * @brief 分解のブレスの青魔法
115  * @param player_ptr プレイヤーへの参照ポインタ
116  * @param bmc_ptr 青魔法詠唱への参照ポインタ
117  * @details All my worries are blown away.
118  */
119 bool cast_blue_ball_water(PlayerType *player_ptr, bmc_type *bmc_ptr)
120 {
121     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
122         return false;
123     }
124
125     msg_print(_("流れるような身振りをした。", "You gesture fluidly."));
126     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_WATE, bmc_ptr->plev, DAM_ROLL);
127     fire_ball(player_ptr, AttributeType::WATER, bmc_ptr->dir, bmc_ptr->damage, 4);
128     return true;
129 }
130
131 bool cast_blue_ball_star_burst(PlayerType *player_ptr, bmc_type *bmc_ptr)
132 {
133     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
134         return false;
135     }
136
137     msg_print(_("スターバーストの呪文を念じた。", "You invoke a starburst."));
138     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_LITE, bmc_ptr->plev, DAM_ROLL);
139     fire_ball(player_ptr, AttributeType::LITE, bmc_ptr->dir, bmc_ptr->damage, 4);
140     return true;
141 }
142
143 bool cast_blue_ball_dark_storm(PlayerType *player_ptr, bmc_type *bmc_ptr)
144 {
145     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
146         return false;
147     }
148
149     msg_print(_("暗黒の嵐の呪文を念じた。", "You invoke a darkness storm."));
150     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_DARK, bmc_ptr->plev, DAM_ROLL);
151     fire_ball(player_ptr, AttributeType::DARK, bmc_ptr->dir, bmc_ptr->damage, 4);
152     return true;
153 }
154
155 bool cast_blue_ball_mana_storm(PlayerType *player_ptr, bmc_type *bmc_ptr)
156 {
157     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
158         return false;
159     }
160
161     msg_print(_("魔力の嵐の呪文を念じた。", "You invoke a mana storm."));
162     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_MANA, bmc_ptr->plev, DAM_ROLL);
163     fire_ball(player_ptr, AttributeType::MANA, bmc_ptr->dir, bmc_ptr->damage, 4);
164     return true;
165 }
166
167 bool cast_blue_ball_void(PlayerType *player_ptr, bmc_type *bmc_ptr)
168 {
169     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
170         return false;
171     }
172
173     msg_print(_("虚無の嵐の呪文を念じた。", "You invoke a void storm."));
174     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_VOID, bmc_ptr->plev, DAM_ROLL);
175     fire_ball(player_ptr, AttributeType::VOID_MAGIC, bmc_ptr->dir, bmc_ptr->damage, 4);
176     return true;
177 }
178
179 bool cast_blue_ball_abyss(PlayerType *player_ptr, bmc_type *bmc_ptr)
180 {
181     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
182         return false;
183     }
184
185     msg_print(_("深淵の嵐の呪文を念じた。", "You invoke a abyss storm."));
186     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BA_ABYSS, bmc_ptr->plev, DAM_ROLL);
187     fire_ball(player_ptr, AttributeType::ABYSS, bmc_ptr->dir, bmc_ptr->damage, 4);
188     return true;
189 }
190
191 bool cast_blue_bolt_acid(PlayerType *player_ptr, bmc_type *bmc_ptr)
192 {
193     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
194         return false;
195     }
196
197     msg_print(_("アシッド・ボルトの呪文を唱えた。", "You cast an acid bolt."));
198     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_ACID, bmc_ptr->plev, DAM_ROLL);
199     fire_bolt(player_ptr, AttributeType::ACID, bmc_ptr->dir, bmc_ptr->damage);
200     return true;
201 }
202
203 bool cast_blue_bolt_elec(PlayerType *player_ptr, bmc_type *bmc_ptr)
204 {
205     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
206         return false;
207     }
208
209     msg_print(_("サンダー・ボルトの呪文を唱えた。", "You cast a lightning bolt."));
210     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_ELEC, bmc_ptr->plev, DAM_ROLL);
211     fire_bolt(player_ptr, AttributeType::ELEC, bmc_ptr->dir, bmc_ptr->damage);
212     return true;
213 }
214
215 bool cast_blue_bolt_fire(PlayerType *player_ptr, bmc_type *bmc_ptr)
216 {
217     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
218         return false;
219     }
220
221     msg_print(_("ファイア・ボルトの呪文を唱えた。", "You cast a fire bolt."));
222     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_FIRE, bmc_ptr->plev, DAM_ROLL);
223     fire_bolt(player_ptr, AttributeType::FIRE, bmc_ptr->dir, bmc_ptr->damage);
224     return true;
225 }
226
227 bool cast_blue_bolt_cold(PlayerType *player_ptr, bmc_type *bmc_ptr)
228 {
229     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
230         return false;
231     }
232
233     msg_print(_("アイス・ボルトの呪文を唱えた。", "You cast a frost bolt."));
234     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_COLD, bmc_ptr->plev, DAM_ROLL);
235     fire_bolt(player_ptr, AttributeType::COLD, bmc_ptr->dir, bmc_ptr->damage);
236     return true;
237 }
238
239 bool cast_blue_bolt_nether(PlayerType *player_ptr, bmc_type *bmc_ptr)
240 {
241     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
242         return false;
243     }
244
245     msg_print(_("地獄の矢の呪文を唱えた。", "You cast a nether bolt."));
246     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_NETH, bmc_ptr->plev, DAM_ROLL);
247     fire_bolt(player_ptr, AttributeType::NETHER, bmc_ptr->dir, bmc_ptr->damage);
248     return true;
249 }
250
251 bool cast_blue_bolt_water(PlayerType *player_ptr, bmc_type *bmc_ptr)
252 {
253     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
254         return false;
255     }
256
257     msg_print(_("ウォーター・ボルトの呪文を唱えた。", "You cast a water bolt."));
258     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_WATE, bmc_ptr->plev, DAM_ROLL);
259     fire_bolt(player_ptr, AttributeType::WATER, bmc_ptr->dir, bmc_ptr->damage);
260     return true;
261 }
262
263 bool cast_blue_bolt_mana(PlayerType *player_ptr, bmc_type *bmc_ptr)
264 {
265     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
266         return false;
267     }
268
269     msg_print(_("魔力の矢の呪文を唱えた。", "You cast a mana bolt."));
270     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_MANA, bmc_ptr->plev, DAM_ROLL);
271     fire_bolt(player_ptr, AttributeType::MANA, bmc_ptr->dir, bmc_ptr->damage);
272     return true;
273 }
274
275 bool cast_blue_bolt_plasma(PlayerType *player_ptr, bmc_type *bmc_ptr)
276 {
277     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
278         return false;
279     }
280
281     msg_print(_("プラズマ・ボルトの呪文を唱えた。", "You cast a plasma bolt."));
282     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_PLAS, bmc_ptr->plev, DAM_ROLL);
283     fire_bolt(player_ptr, AttributeType::PLASMA, bmc_ptr->dir, bmc_ptr->damage);
284     return true;
285 }
286
287 bool cast_blue_bolt_icee(PlayerType *player_ptr, bmc_type *bmc_ptr)
288 {
289     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
290         return false;
291     }
292
293     msg_print(_("極寒の矢の呪文を唱えた。", "You cast a ice bolt."));
294     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_ICEE, bmc_ptr->plev, DAM_ROLL);
295     fire_bolt(player_ptr, AttributeType::ICE, bmc_ptr->dir, bmc_ptr->damage);
296     return true;
297 }
298
299 bool cast_blue_bolt_missile(PlayerType *player_ptr, bmc_type *bmc_ptr)
300 {
301     if (!get_aim_dir(player_ptr, &bmc_ptr->dir)) {
302         return false;
303     }
304
305     msg_print(_("マジック・ミサイルの呪文を唱えた。", "You cast a magic missile."));
306     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::MISSILE, bmc_ptr->plev, DAM_ROLL);
307     fire_bolt(player_ptr, AttributeType::MISSILE, bmc_ptr->dir, bmc_ptr->damage);
308     return true;
309 }
310
311 bool cast_blue_bolt_abyss(PlayerType *player_ptr, bmc_type *bmc_ptr)
312 {
313     if (!get_aim_dir(player_ptr, &bmc_ptr->dir))
314         return false;
315
316     msg_print(_("アビス・ボルトの呪文を唱えた。", "You cast a abyss bolt."));
317     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_ABYSS, bmc_ptr->plev, DAM_ROLL);
318     fire_bolt(player_ptr, AttributeType::ABYSS, bmc_ptr->dir, bmc_ptr->damage);
319     return true;
320 }
321
322 bool cast_blue_bolt_void(PlayerType *player_ptr, bmc_type *bmc_ptr)
323 {
324     if (!get_aim_dir(player_ptr, &bmc_ptr->dir))
325         return false;
326
327     msg_print(_("ヴォイド・ボルトの呪文を唱えた。", "You cast a void bolt."));
328     bmc_ptr->damage = monspell_bluemage_damage(player_ptr, MonsterAbilityType::BO_VOID, bmc_ptr->plev, DAM_ROLL);
329     fire_bolt(player_ptr, AttributeType::VOID_MAGIC, bmc_ptr->dir, bmc_ptr->damage);
330     return true;
331 }