OSDN Git Service

ceff14c53d0c313196bb4939e6c72b54f32f794b
[hengbandforosx/hengbandosx.git] / src / object-activation / activation-bolt-ball.cpp
1 #include "object-activation/activation-bolt-ball.h"
2 #include "effect/effect-characteristics.h"
3 #include "effect/effect-processor.h"
4 #include "floor/cave.h"
5 #include "floor/floor-util.h"
6 #include "grid/feature-flag-types.h"
7 #include "hpmp/hp-mp-processor.h"
8 #include "spell-kind/spells-launcher.h"
9 #include "spell-kind/spells-specific-bolt.h"
10 #include "effect/attribute-types.h"
11 #include "system/player-type-definition.h"
12 #include "target/target-getter.h"
13 #include "view/display-messages.h"
14
15 bool activate_missile_1(PlayerType *player_ptr)
16 {
17     DIRECTION dir;
18     msg_print(_("それは眩しいくらいに明るく輝いている...", "It glows extremely brightly..."));
19     if (!get_aim_dir(player_ptr, &dir))
20         return false;
21
22     (void)fire_bolt(player_ptr, AttributeType::MISSILE, dir, damroll(2, 6));
23     return true;
24 }
25
26 bool activate_missile_2(PlayerType *player_ptr)
27 {
28     DIRECTION dir;
29     msg_print(_("魔法のトゲが現れた...", "It grows magical spikes..."));
30     if (!get_aim_dir(player_ptr, &dir))
31         return false;
32
33     (void)fire_bolt(player_ptr, AttributeType::MISSILE, dir, 150);
34     return true;
35 }
36
37 bool activate_missile_3(PlayerType *player_ptr)
38 {
39     DIRECTION dir;
40     if (!get_aim_dir(player_ptr, &dir))
41         return false;
42
43     msg_print(_("あなたはエレメントのブレスを吐いた。", "You breathe the elements."));
44     fire_breath(player_ptr, AttributeType::MISSILE, dir, 300, 4);
45     return true;
46 }
47
48 bool activate_bolt_acid_1(PlayerType *player_ptr)
49 {
50     DIRECTION dir;
51     msg_print(_("それは酸に覆われた...", "It is covered in acid..."));
52     if (!get_aim_dir(player_ptr, &dir))
53         return false;
54
55     (void)fire_bolt(player_ptr, AttributeType::ACID, dir, damroll(5, 8));
56     return true;
57 }
58
59 bool activate_bolt_elec_1(PlayerType *player_ptr)
60 {
61     DIRECTION dir;
62     msg_print(_("それは火花に覆われた...", "It is covered in sparks..."));
63     if (!get_aim_dir(player_ptr, &dir))
64         return false;
65
66     (void)fire_bolt(player_ptr, AttributeType::ELEC, dir, damroll(4, 8));
67     return true;
68 }
69
70 bool activate_bolt_fire_1(PlayerType *player_ptr)
71 {
72     DIRECTION dir;
73     msg_print(_("それは炎に覆われた...", "It is covered in fire..."));
74     if (!get_aim_dir(player_ptr, &dir))
75         return false;
76
77     (void)fire_bolt(player_ptr, AttributeType::FIRE, dir, damroll(9, 8));
78     return true;
79 }
80
81 bool activate_bolt_cold_1(PlayerType *player_ptr)
82 {
83     DIRECTION dir;
84     msg_print(_("それは霜に覆われた...", "It is covered in frost..."));
85     if (!get_aim_dir(player_ptr, &dir))
86         return false;
87
88     (void)fire_bolt(player_ptr, AttributeType::COLD, dir, damroll(6, 8));
89     return true;
90 }
91
92 bool activate_bolt_hypodynamia_1(PlayerType *player_ptr, concptr name)
93 {
94     DIRECTION dir;
95     msg_format(_("あなたは%sに敵を締め殺すよう命じた。", "You order the %s to strangle your opponent."), name);
96     if (!get_aim_dir(player_ptr, &dir))
97         return false;
98
99     hypodynamic_bolt(player_ptr, dir, 100);
100     return true;
101 }
102
103 bool activate_bolt_hypodynamia_2(PlayerType *player_ptr)
104 {
105     DIRECTION dir;
106     msg_print(_("黒く輝いている...", "It glows black..."));
107     if (!get_aim_dir(player_ptr, &dir))
108         return false;
109
110     hypodynamic_bolt(player_ptr, dir, 120);
111     return true;
112 }
113
114 bool activate_bolt_drain_1(PlayerType *player_ptr)
115 {
116     DIRECTION dir;
117     if (!get_aim_dir(player_ptr, &dir))
118         return false;
119
120     for (int dummy = 0; dummy < 3; dummy++)
121         if (hypodynamic_bolt(player_ptr, dir, 50))
122             hp_player(player_ptr, 50);
123
124     return true;
125 }
126
127 bool activate_bolt_drain_2(PlayerType *player_ptr)
128 {
129     DIRECTION dir;
130     if (!get_aim_dir(player_ptr, &dir))
131         return false;
132
133     for (int dummy = 0; dummy < 3; dummy++)
134         if (hypodynamic_bolt(player_ptr, dir, 100))
135             hp_player(player_ptr, 100);
136
137     return true;
138 }
139
140 bool activate_bolt_mana(PlayerType *player_ptr, concptr name)
141 {
142     DIRECTION dir;
143     msg_format(_("%sに魔法のトゲが現れた...", "The %s grows magical spikes..."), name);
144     if (!get_aim_dir(player_ptr, &dir))
145         return false;
146
147     (void)fire_bolt(player_ptr, AttributeType::MISSILE, dir, 150);
148     return true;
149 }
150
151 bool activate_ball_pois_1(PlayerType *player_ptr)
152 {
153     DIRECTION dir;
154     msg_print(_("それは濃緑色に脈動している...", "It throbs deep green..."));
155     if (!get_aim_dir(player_ptr, &dir))
156         return false;
157
158     (void)fire_ball(player_ptr, AttributeType::POIS, dir, 12, 3);
159     return true;
160 }
161
162 bool activate_ball_cold_1(PlayerType *player_ptr)
163 {
164     DIRECTION dir;
165     msg_print(_("それは霜に覆われた...", "It is covered in frost..."));
166     if (!get_aim_dir(player_ptr, &dir))
167         return false;
168
169     (void)fire_ball(player_ptr, AttributeType::COLD, dir, 48, 2);
170     return true;
171 }
172
173 bool activate_ball_cold_2(PlayerType *player_ptr)
174 {
175     DIRECTION dir;
176     msg_print(_("それは青く激しく輝いた...", "It glows an intense blue..."));
177     if (!get_aim_dir(player_ptr, &dir))
178         return false;
179
180     (void)fire_ball(player_ptr, AttributeType::COLD, dir, 100, 2);
181     return true;
182 }
183
184 bool activate_ball_cold_3(PlayerType *player_ptr)
185 {
186     DIRECTION dir;
187     msg_print(_("明るく白色に輝いている...", "It glows bright white..."));
188     if (!get_aim_dir(player_ptr, &dir))
189         return false;
190
191     (void)fire_ball(player_ptr, AttributeType::COLD, dir, 400, 3);
192     return true;
193 }
194
195 bool activate_ball_fire_1(PlayerType *player_ptr)
196 {
197     DIRECTION dir;
198     msg_print(_("それは赤く激しく輝いた...", "It glows an intense red..."));
199     if (!get_aim_dir(player_ptr, &dir))
200         return false;
201
202     (void)fire_ball(player_ptr, AttributeType::FIRE, dir, 72, 2);
203     return true;
204 }
205
206 bool activate_ball_fire_2(PlayerType *player_ptr, concptr name)
207 {
208     DIRECTION dir;
209     msg_format(_("%sから炎が吹き出した...", "The %s rages in fire..."), name);
210     if (!get_aim_dir(player_ptr, &dir))
211         return false;
212
213     (void)fire_ball(player_ptr, AttributeType::FIRE, dir, 120, 3);
214     return true;
215 }
216
217 bool activate_ball_fire_3(PlayerType *player_ptr)
218 {
219     DIRECTION dir;
220     msg_print(_("深赤色に輝いている...", "It glows deep red..."));
221     if (!get_aim_dir(player_ptr, &dir))
222         return false;
223
224     (void)fire_ball(player_ptr, AttributeType::FIRE, dir, 300, 3);
225     return true;
226 }
227
228 bool activate_ball_fire_4(PlayerType *player_ptr)
229 {
230     DIRECTION dir;
231     msg_print(_("それは赤く激しく輝いた...", "It glows an intense red..."));
232     if (!get_aim_dir(player_ptr, &dir))
233         return false;
234
235     (void)fire_ball(player_ptr, AttributeType::FIRE, dir, 100, 2);
236     return true;
237 }
238
239 bool activate_ball_elec_2(PlayerType *player_ptr)
240 {
241     DIRECTION dir;
242     msg_print(_("電気がパチパチ音を立てた...", "It crackles with electricity..."));
243     if (!get_aim_dir(player_ptr, &dir))
244         return false;
245
246     (void)fire_ball(player_ptr, AttributeType::ELEC, dir, 100, 3);
247     return true;
248 }
249
250 bool activate_ball_elec_3(PlayerType *player_ptr)
251 {
252     DIRECTION dir;
253     msg_print(_("深青色に輝いている...", "It glows deep blue..."));
254     if (!get_aim_dir(player_ptr, &dir))
255         return false;
256
257     (void)fire_ball(player_ptr, AttributeType::ELEC, dir, 500, 3);
258     return true;
259 }
260
261 bool activate_ball_acid_1(PlayerType *player_ptr)
262 {
263     DIRECTION dir;
264     msg_print(_("それは黒く激しく輝いた...", "It glows an intense black..."));
265     if (!get_aim_dir(player_ptr, &dir))
266         return false;
267
268     (void)fire_ball(player_ptr, AttributeType::ACID, dir, 100, 2);
269     return true;
270 }
271
272 bool activate_ball_nuke_1(PlayerType *player_ptr)
273 {
274     DIRECTION dir;
275     msg_print(_("それは緑に激しく輝いた...", "It glows an intense green..."));
276     if (!get_aim_dir(player_ptr, &dir))
277         return false;
278
279     (void)fire_ball(player_ptr, AttributeType::NUKE, dir, 100, 2);
280     return true;
281 }
282
283 bool activate_rocket(PlayerType *player_ptr)
284 {
285     DIRECTION dir;
286     if (!get_aim_dir(player_ptr, &dir))
287         return false;
288
289     msg_print(_("ロケットを発射した!", "You launch a rocket!"));
290     (void)fire_ball(player_ptr, AttributeType::ROCKET, dir, 250 + player_ptr->lev * 3, 2);
291     return true;
292 }
293
294 bool activate_ball_water(PlayerType *player_ptr, concptr name)
295 {
296     DIRECTION dir;
297     msg_format(_("%sが深い青色に鼓動している...", "The %s throbs deep blue..."), name);
298     if (!get_aim_dir(player_ptr, &dir))
299         return false;
300
301     (void)fire_ball(player_ptr, AttributeType::WATER, dir, 200, 3);
302     return true;
303 }
304
305 bool activate_ball_lite(PlayerType *player_ptr, concptr name)
306 {
307     HIT_POINT num = damroll(5, 3);
308     POSITION y = 0, x = 0;
309     msg_format(_("%sが稲妻で覆われた...", "The %s is surrounded by lightning..."), name);
310     for (int k = 0; k < num; k++) {
311         int attempts = 1000;
312         while (attempts--) {
313             scatter(player_ptr, &y, &x, player_ptr->y, player_ptr->x, 4, PROJECT_NONE);
314             if (!cave_has_flag_bold(player_ptr->current_floor_ptr, y, x, FloorFeatureType::PROJECT))
315                 continue;
316
317             if (!player_bold(player_ptr, y, x))
318                 break;
319         }
320
321         project(player_ptr, 0, 3, y, x, 150, AttributeType::ELEC, PROJECT_THRU | PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL);
322     }
323
324     return true;
325 }
326
327 bool activate_ball_dark(PlayerType *player_ptr, concptr name)
328 {
329     DIRECTION dir;
330     msg_format(_("%sが深い闇に覆われた...", "The %s is covered in pitch-darkness..."), name);
331     if (!get_aim_dir(player_ptr, &dir))
332         return false;
333
334     (void)fire_ball(player_ptr, AttributeType::DARK, dir, 250, 4);
335     return true;
336 }
337
338 bool activate_ball_mana(PlayerType *player_ptr, concptr name)
339 {
340     DIRECTION dir;
341     msg_format(_("%sが青白く光った...", "The %s becomes pale..."), name);
342     if (!get_aim_dir(player_ptr, &dir))
343         return false;
344
345     (void)fire_ball(player_ptr, AttributeType::MANA, dir, 250, 4);
346     return true;
347 }