OSDN Git Service

[fix] #41503 超能力者でゲームを開始しようとするとクラッシュ
[hengband/hengband.git] / src / blue-magic / blue-magic-ball-bolt.c
1 #include "blue-magic/blue-magic-ball-bolt.h"
2 #include "blue-magic/blue-magic-util.h"
3 #include "mspell/mspell-damage-calculator.h"
4 #include "mspell/mspell-type.h"
5 #include "spell-kind/spells-launcher.h"
6 #include "spell/spell-types.h"
7 #include "target/target-getter.h"
8 #include "view/display-messages.h"
9
10 bool cast_blue_ball_acid(player_type *caster_ptr, bmc_type *bmc_ptr)
11 {
12     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
13         return FALSE;
14
15     msg_print(_("アシッド・ボールの呪文を唱えた。", "You cast an acid ball."));
16     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BALL_ACID, bmc_ptr->plev, DAM_ROLL);
17     fire_ball(caster_ptr, GF_ACID, bmc_ptr->dir, bmc_ptr->damage, 2);
18     return TRUE;
19 }
20
21 bool cast_blue_ball_elec(player_type *caster_ptr, bmc_type *bmc_ptr)
22 {
23     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
24         return FALSE;
25
26     msg_print(_("サンダー・ボールの呪文を唱えた。", "You cast a lightning ball."));
27     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BALL_ELEC, bmc_ptr->plev, DAM_ROLL);
28     fire_ball(caster_ptr, GF_ELEC, bmc_ptr->dir, bmc_ptr->damage, 2);
29     return TRUE;
30 }
31
32 bool cast_blue_ball_fire(player_type *caster_ptr, bmc_type *bmc_ptr)
33 {
34     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
35         return FALSE;
36
37     msg_print(_("ファイア・ボールの呪文を唱えた。", "You cast a fire ball."));
38     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BALL_FIRE, bmc_ptr->plev, DAM_ROLL);
39     fire_ball(caster_ptr, GF_FIRE, bmc_ptr->dir, bmc_ptr->damage, 2);
40     return TRUE;
41 }
42
43 bool cast_blue_ball_cold(player_type *caster_ptr, bmc_type *bmc_ptr)
44 {
45     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
46         return FALSE;
47
48     msg_print(_("アイス・ボールの呪文を唱えた。", "You cast a frost ball."));
49     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BALL_COLD, bmc_ptr->plev, DAM_ROLL);
50     fire_ball(caster_ptr, GF_COLD, bmc_ptr->dir, bmc_ptr->damage, 2);
51     return TRUE;
52 }
53
54 bool cast_blue_ball_pois(player_type *caster_ptr, bmc_type *bmc_ptr)
55 {
56     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
57         return FALSE;
58
59     msg_print(_("悪臭雲の呪文を唱えた。", "You cast a stinking cloud."));
60     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BALL_POIS, bmc_ptr->plev, DAM_ROLL);
61     fire_ball(caster_ptr, GF_POIS, bmc_ptr->dir, bmc_ptr->damage, 2);
62     return TRUE;
63 }
64
65 bool cast_blue_ball_nuke(player_type *caster_ptr, bmc_type *bmc_ptr)
66 {
67     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
68         return FALSE;
69
70     msg_print(_("放射能球を放った。", "You cast a ball of radiation."));
71     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BALL_NUKE, bmc_ptr->plev, DAM_ROLL);
72     fire_ball(caster_ptr, GF_NUKE, bmc_ptr->dir, bmc_ptr->damage, 2);
73     return TRUE;
74 }
75
76 bool cast_blue_ball_nether(player_type *caster_ptr, bmc_type *bmc_ptr)
77 {
78     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
79         return FALSE;
80
81     msg_print(_("地獄球の呪文を唱えた。", "You cast a nether ball."));
82     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BALL_NETHER, bmc_ptr->plev, DAM_ROLL);
83     fire_ball(caster_ptr, GF_NETHER, bmc_ptr->dir, bmc_ptr->damage, 2);
84     return TRUE;
85 }
86
87 bool cast_blue_ball_chaos(player_type *caster_ptr, bmc_type *bmc_ptr)
88 {
89     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
90         return FALSE;
91
92     msg_print(_("純ログルスを放った。", "You invoke a raw Logrus."));
93     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BALL_CHAOS, bmc_ptr->plev, DAM_ROLL);
94     fire_ball(caster_ptr, GF_CHAOS, bmc_ptr->dir, bmc_ptr->damage, 4);
95     return TRUE;
96 }
97
98 /*!
99  * @brief ウォーター・ボールの青魔法
100  * @brief 分解のブレスの青魔法
101  * @param caster_ptr プレーヤーへの参照ポインタ
102  * @param bmc_ptr 青魔法詠唱への参照ポインタ
103  * @details All my worries are blown away.
104  */
105 bool cast_blue_ball_water(player_type *caster_ptr, bmc_type *bmc_ptr)
106 {
107     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
108         return FALSE;
109
110     msg_print(_("流れるような身振りをした。", "You gesture fluidly."));
111     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BALL_WATER, bmc_ptr->plev, DAM_ROLL);
112     fire_ball(caster_ptr, GF_WATER, bmc_ptr->dir, bmc_ptr->damage, 4);
113     return TRUE;
114 }
115
116 bool cast_blue_ball_star_burst(player_type *caster_ptr, bmc_type *bmc_ptr)
117 {
118     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
119         return FALSE;
120
121     msg_print(_("スターバーストの呪文を念じた。", "You invoke a starburst."));
122     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_STARBURST, bmc_ptr->plev, DAM_ROLL);
123     fire_ball(caster_ptr, GF_LITE, bmc_ptr->dir, bmc_ptr->damage, 4);
124     return TRUE;
125 }
126
127 bool cast_blue_ball_dark_storm(player_type *caster_ptr, bmc_type *bmc_ptr)
128 {
129     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
130         return FALSE;
131
132     msg_print(_("暗黒の嵐の呪文を念じた。", "You invoke a darkness storm."));
133     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BALL_DARK, bmc_ptr->plev, DAM_ROLL);
134     fire_ball(caster_ptr, GF_DARK, bmc_ptr->dir, bmc_ptr->damage, 4);
135     return TRUE;
136 }
137
138 bool cast_blue_ball_mana_storm(player_type *caster_ptr, bmc_type *bmc_ptr)
139 {
140     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
141         return FALSE;
142
143     msg_print(_("魔力の嵐の呪文を念じた。", "You invoke a mana storm."));
144     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BALL_MANA, bmc_ptr->plev, DAM_ROLL);
145     fire_ball(caster_ptr, GF_MANA, bmc_ptr->dir, bmc_ptr->damage, 4);
146     return TRUE;
147 }
148
149 bool cast_blue_bolt_acid(player_type *caster_ptr, bmc_type *bmc_ptr)
150 {
151     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
152         return FALSE;
153
154     msg_print(_("アシッド・ボルトの呪文を唱えた。", "You cast an acid bolt."));
155     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BOLT_ACID, bmc_ptr->plev, DAM_ROLL);
156     fire_bolt(caster_ptr, GF_ACID, bmc_ptr->dir, bmc_ptr->damage);
157     return TRUE;
158 }
159
160 bool cast_blue_bolt_elec(player_type *caster_ptr, bmc_type *bmc_ptr)
161 {
162     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
163         return FALSE;
164
165     msg_print(_("サンダー・ボルトの呪文を唱えた。", "You cast a lightning bolt."));
166     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BOLT_ELEC, bmc_ptr->plev, DAM_ROLL);
167     fire_bolt(caster_ptr, GF_ELEC, bmc_ptr->dir, bmc_ptr->damage);
168     return TRUE;
169 }
170
171 bool cast_blue_bolt_fire(player_type *caster_ptr, bmc_type *bmc_ptr)
172 {
173     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
174         return FALSE;
175
176     msg_print(_("ファイア・ボルトの呪文を唱えた。", "You cast a fire bolt."));
177     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BOLT_FIRE, bmc_ptr->plev, DAM_ROLL);
178     fire_bolt(caster_ptr, GF_FIRE, bmc_ptr->dir, bmc_ptr->damage);
179     return TRUE;
180 }
181
182 bool cast_blue_bolt_cold(player_type *caster_ptr, bmc_type *bmc_ptr)
183 {
184     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
185         return FALSE;
186
187     msg_print(_("アイス・ボルトの呪文を唱えた。", "You cast a frost bolt."));
188     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BOLT_COLD, bmc_ptr->plev, DAM_ROLL);
189     fire_bolt(caster_ptr, GF_COLD, bmc_ptr->dir, bmc_ptr->damage);
190     return TRUE;
191 }
192
193 bool cast_blue_bolt_nether(player_type *caster_ptr, bmc_type *bmc_ptr)
194 {
195     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
196         return FALSE;
197
198     msg_print(_("地獄の矢の呪文を唱えた。", "You cast a nether bolt."));
199     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BOLT_NETHER, bmc_ptr->plev, DAM_ROLL);
200     fire_bolt(caster_ptr, GF_NETHER, bmc_ptr->dir, bmc_ptr->damage);
201     return TRUE;
202 }
203
204 bool cast_blue_bolt_water(player_type *caster_ptr, bmc_type *bmc_ptr)
205 {
206     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
207         return FALSE;
208
209     msg_print(_("ウォーター・ボルトの呪文を唱えた。", "You cast a water bolt."));
210     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BOLT_WATER, bmc_ptr->plev, DAM_ROLL);
211     fire_bolt(caster_ptr, GF_WATER, bmc_ptr->dir, bmc_ptr->damage);
212     return TRUE;
213 }
214
215 bool cast_blue_bolt_mana(player_type *caster_ptr, bmc_type *bmc_ptr)
216 {
217     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
218         return FALSE;
219
220     msg_print(_("魔力の矢の呪文を唱えた。", "You cast a mana bolt."));
221     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BOLT_MANA, bmc_ptr->plev, DAM_ROLL);
222     fire_bolt(caster_ptr, GF_MANA, bmc_ptr->dir, bmc_ptr->damage);
223     return TRUE;
224 }
225
226 bool cast_blue_bolt_plasma(player_type *caster_ptr, bmc_type *bmc_ptr)
227 {
228     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
229         return FALSE;
230
231     msg_print(_("プラズマ・ボルトの呪文を唱えた。", "You cast a plasma bolt."));
232     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BOLT_PLASMA, bmc_ptr->plev, DAM_ROLL);
233     fire_bolt(caster_ptr, GF_PLASMA, bmc_ptr->dir, bmc_ptr->damage);
234     return TRUE;
235 }
236
237 bool cast_blue_bolt_icee(player_type *caster_ptr, bmc_type *bmc_ptr)
238 {
239     if (!get_aim_dir(caster_ptr, &bmc_ptr->dir))
240         return FALSE;
241
242     msg_print(_("極寒の矢の呪文を唱えた。", "You cast a ice bolt."));
243     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_BOLT_ICE, bmc_ptr->plev, DAM_ROLL);
244     fire_bolt(caster_ptr, GF_ICE, bmc_ptr->dir, bmc_ptr->damage);
245     return TRUE;
246 }
247
248 bool cast_blue_bolt_missile(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 cast a magic missile."));
254     bmc_ptr->damage = monspell_bluemage_damage(caster_ptr, MS_MAGIC_MISSILE, bmc_ptr->plev, DAM_ROLL);
255     fire_bolt(caster_ptr, GF_MISSILE, bmc_ptr->dir, bmc_ptr->damage);
256     return TRUE;
257 }