1 #include "blue-magic/blue-magic-caster.h"
2 #include "blue-magic/blue-magic-util.h"
3 #include "blue-magic/learnt-info.h"
4 #include "core/hp-mp-processor.h"
5 #include "floor/floor.h"
7 #include "io/targeting.h"
8 #include "monster-floor/monster-summon.h"
9 #include "monster-floor/place-monster-types.h"
10 #include "monster-race/monster-race.h"
11 #include "monster-race/race-flags-resistance.h"
12 #include "monster-race/race-flags1.h"
13 #include "monster/monster-describer.h"
14 #include "monster/monster-info.h"
15 #include "monster/monster-status.h"
16 #include "mspell/mspell-damage-calculator.h"
17 #include "mspell/mspell-type.h"
18 #include "spell-kind/spells-launcher.h"
19 #include "spell-kind/spells-lite.h"
20 #include "spell-kind/spells-neighbor.h"
21 #include "spell-kind/spells-sight.h"
22 #include "spell-kind/spells-world.h"
23 #include "spell/spells-status.h"
24 #include "spell/spells-summon.h"
25 #include "spell/spell-types.h"
26 #include "status/bad-status-setter.h"
27 #include "status/body-improvement.h"
28 #include "status/buff-setter.h"
29 #include "spell-kind/spells-teleport.h"
30 #include "system/floor-type-definition.h"
31 #include "view/display-messages.h"
35 * do_cmd_cast calls this function if the player's class is 'blue-mage'.
36 * @param spell 発動するモンスター攻撃のID
37 * @param success TRUEは成功時、FALSEは失敗時の処理を行う
38 * @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
40 bool cast_learned_spell(player_type *caster_ptr, int spell, const bool success)
42 blue_magic_type tmp_bm;
43 blue_magic_type *bm_ptr = initialize_blue_magic_type(caster_ptr, &tmp_bm, success, get_pseudo_monstetr_level);
44 floor_type *floor_ptr = caster_ptr->current_floor_ptr;
47 msg_print(_("かん高い金切り声をあげた。", "You make a high pitched shriek."));
48 aggravate_monsters(caster_ptr, 0);
53 if (!target_set(caster_ptr, TARGET_KILL))
56 MONSTER_IDX m_idx = floor_ptr->grid_array[target_row][target_col].m_idx;
60 if (!player_has_los_bold(caster_ptr, target_row, target_col))
63 if (!projectable(caster_ptr, caster_ptr->y, caster_ptr->x, target_row, target_col))
66 dispel_monster_status(caster_ptr, m_idx);
70 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
73 msg_print(_("ロケットを発射した。", "You fire a rocket."));
74 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_ROCKET), bm_ptr->plev, DAM_ROLL);
75 fire_rocket(caster_ptr, GF_ROCKET, bm_ptr->dir, bm_ptr->damage, 2);
78 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
81 msg_print(_("矢を放った。", "You fire an arrow."));
82 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_SHOOT), bm_ptr->plev, DAM_ROLL);
83 fire_bolt(caster_ptr, GF_ARROW, bm_ptr->dir, bm_ptr->damage);
93 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
96 msg_print(_("酸のブレスを吐いた。", "You breathe acid."));
97 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_ACID), bm_ptr->plev, DAM_ROLL);
98 fire_breath(caster_ptr, GF_ACID, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
101 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
104 msg_print(_("稲妻のブレスを吐いた。", "You breathe lightning."));
105 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_ELEC), bm_ptr->plev, DAM_ROLL);
106 fire_breath(caster_ptr, GF_ELEC, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
109 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
112 msg_print(_("火炎のブレスを吐いた。", "You breathe fire."));
113 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_FIRE), bm_ptr->plev, DAM_ROLL);
114 fire_breath(caster_ptr, GF_FIRE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
117 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
120 msg_print(_("冷気のブレスを吐いた。", "You breathe frost."));
121 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_COLD), bm_ptr->plev, DAM_ROLL);
122 fire_breath(caster_ptr, GF_COLD, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
125 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
128 msg_print(_("ガスのブレスを吐いた。", "You breathe gas."));
129 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_POIS), bm_ptr->plev, DAM_ROLL);
130 fire_breath(caster_ptr, GF_POIS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
133 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
136 msg_print(_("地獄のブレスを吐いた。", "You breathe nether."));
137 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_NETHER), bm_ptr->plev, DAM_ROLL);
138 fire_breath(caster_ptr, GF_NETHER, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
141 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
144 msg_print(_("閃光のブレスを吐いた。", "You breathe light."));
145 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_LITE), bm_ptr->plev, DAM_ROLL);
146 fire_breath(caster_ptr, GF_LITE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
149 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
152 msg_print(_("暗黒のブレスを吐いた。", "You breathe darkness."));
153 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_DARK), bm_ptr->plev, DAM_ROLL);
154 fire_breath(caster_ptr, GF_DARK, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
157 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
160 msg_print(_("混乱のブレスを吐いた。", "You breathe confusion."));
161 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_CONF), bm_ptr->plev, DAM_ROLL);
162 fire_breath(caster_ptr, GF_CONFUSION, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
165 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
168 msg_print(_("轟音のブレスを吐いた。", "You breathe sound."));
169 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_SOUND), bm_ptr->plev, DAM_ROLL);
170 fire_breath(caster_ptr, GF_SOUND, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
173 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
176 msg_print(_("カオスのブレスを吐いた。", "You breathe chaos."));
177 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_CHAOS), bm_ptr->plev, DAM_ROLL);
178 fire_breath(caster_ptr, GF_CHAOS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
181 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
184 msg_print(_("劣化のブレスを吐いた。", "You breathe disenchantment."));
185 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_DISEN), bm_ptr->plev, DAM_ROLL);
186 fire_breath(caster_ptr, GF_DISENCHANT, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
189 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
192 msg_print(_("因果混乱のブレスを吐いた。", "You breathe nexus."));
193 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_NEXUS), bm_ptr->plev, DAM_ROLL);
194 fire_breath(caster_ptr, GF_NEXUS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
197 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
200 msg_print(_("時間逆転のブレスを吐いた。", "You breathe time."));
201 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_TIME), bm_ptr->plev, DAM_ROLL);
202 fire_breath(caster_ptr, GF_TIME, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
205 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
208 msg_print(_("遅鈍のブレスを吐いた。", "You breathe inertia."));
209 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_INERTIA), bm_ptr->plev, DAM_ROLL);
210 fire_breath(caster_ptr, GF_INERTIAL, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
213 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
216 msg_print(_("重力のブレスを吐いた。", "You breathe gravity."));
217 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_GRAVITY), bm_ptr->plev, DAM_ROLL);
218 fire_breath(caster_ptr, GF_GRAVITY, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
221 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
224 msg_print(_("破片のブレスを吐いた。", "You breathe shards."));
225 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_SHARDS), bm_ptr->plev, DAM_ROLL);
226 fire_breath(caster_ptr, GF_SHARDS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
229 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
232 msg_print(_("プラズマのブレスを吐いた。", "You breathe plasma."));
233 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_PLASMA), bm_ptr->plev, DAM_ROLL);
234 fire_breath(caster_ptr, GF_PLASMA, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
237 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
240 msg_print(_("フォースのブレスを吐いた。", "You breathe force."));
241 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_FORCE), bm_ptr->plev, DAM_ROLL);
242 fire_breath(caster_ptr, GF_FORCE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
245 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
248 msg_print(_("魔力のブレスを吐いた。", "You breathe mana."));
249 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_MANA), bm_ptr->plev, DAM_ROLL);
250 fire_breath(caster_ptr, GF_MANA, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
253 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
256 msg_print(_("放射能球を放った。", "You cast a ball of radiation."));
257 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_NUKE), bm_ptr->plev, DAM_ROLL);
258 fire_ball(caster_ptr, GF_NUKE, bm_ptr->dir, bm_ptr->damage, 2);
261 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
264 msg_print(_("放射性廃棄物のブレスを吐いた。", "You breathe toxic waste."));
265 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_NUKE), bm_ptr->plev, DAM_ROLL);
266 fire_breath(caster_ptr, GF_NUKE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
269 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
272 msg_print(_("純ログルスを放った。", "You invoke a raw Logrus."));
273 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_CHAOS), bm_ptr->plev, DAM_ROLL);
274 fire_ball(caster_ptr, GF_CHAOS, bm_ptr->dir, bm_ptr->damage, 4);
277 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
280 msg_print(_("分解のブレスを吐いた。", "You breathe disintegration."));
281 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_DISI), bm_ptr->plev, DAM_ROLL);
282 fire_breath(caster_ptr, GF_DISINTEGRATE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
285 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
288 msg_print(_("アシッド・ボールの呪文を唱えた。", "You cast an acid ball."));
289 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_ACID), bm_ptr->plev, DAM_ROLL);
290 fire_ball(caster_ptr, GF_ACID, bm_ptr->dir, bm_ptr->damage, 2);
293 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
296 msg_print(_("サンダー・ボールの呪文を唱えた。", "You cast a lightning ball."));
297 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_ELEC), bm_ptr->plev, DAM_ROLL);
298 fire_ball(caster_ptr, GF_ELEC, bm_ptr->dir, bm_ptr->damage, 2);
301 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
304 msg_print(_("ファイア・ボールの呪文を唱えた。", "You cast a fire ball."));
305 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_FIRE), bm_ptr->plev, DAM_ROLL);
306 fire_ball(caster_ptr, GF_FIRE, bm_ptr->dir, bm_ptr->damage, 2);
309 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
312 msg_print(_("アイス・ボールの呪文を唱えた。", "You cast a frost ball."));
313 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_COLD), bm_ptr->plev, DAM_ROLL);
314 fire_ball(caster_ptr, GF_COLD, bm_ptr->dir, bm_ptr->damage, 2);
317 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
320 msg_print(_("悪臭雲の呪文を唱えた。", "You cast a stinking cloud."));
321 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_POIS), bm_ptr->plev, DAM_ROLL);
322 fire_ball(caster_ptr, GF_POIS, bm_ptr->dir, bm_ptr->damage, 2);
325 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
328 msg_print(_("地獄球の呪文を唱えた。", "You cast a nether ball."));
329 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_NETHER), bm_ptr->plev, DAM_ROLL);
330 fire_ball(caster_ptr, GF_NETHER, bm_ptr->dir, bm_ptr->damage, 2);
333 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
336 msg_print(_("流れるような身振りをした。", "You gesture fluidly."));
337 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_WATER), bm_ptr->plev, DAM_ROLL);
338 fire_ball(caster_ptr, GF_WATER, bm_ptr->dir, bm_ptr->damage, 4);
341 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
344 msg_print(_("魔力の嵐の呪文を念じた。", "You invoke a mana storm."));
345 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_MANA), bm_ptr->plev, DAM_ROLL);
346 fire_ball(caster_ptr, GF_MANA, bm_ptr->dir, bm_ptr->damage, 4);
349 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
352 msg_print(_("暗黒の嵐の呪文を念じた。", "You invoke a darkness storm."));
353 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_DARK), bm_ptr->plev, DAM_ROLL);
354 fire_ball(caster_ptr, GF_DARK, bm_ptr->dir, bm_ptr->damage, 4);
357 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
360 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_DRAIN_MANA), bm_ptr->plev, DAM_ROLL);
361 fire_ball_hide(caster_ptr, GF_DRAIN_MANA, bm_ptr->dir, bm_ptr->damage, 0);
364 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
367 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_MIND_BLAST), bm_ptr->plev, DAM_ROLL);
368 fire_ball_hide(caster_ptr, GF_MIND_BLAST, bm_ptr->dir, bm_ptr->damage, 0);
371 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
374 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BRAIN_SMASH), bm_ptr->plev, DAM_ROLL);
375 fire_ball_hide(caster_ptr, GF_BRAIN_SMASH, bm_ptr->dir, bm_ptr->damage, 0);
378 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
381 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_1), bm_ptr->plev, DAM_ROLL);
382 fire_ball_hide(caster_ptr, GF_CAUSE_1, bm_ptr->dir, bm_ptr->damage, 0);
385 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
388 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_2), bm_ptr->plev, DAM_ROLL);
389 fire_ball_hide(caster_ptr, GF_CAUSE_2, bm_ptr->dir, bm_ptr->damage, 0);
392 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
395 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_3), bm_ptr->plev, DAM_ROLL);
396 fire_ball_hide(caster_ptr, GF_CAUSE_3, bm_ptr->dir, bm_ptr->damage, 0);
399 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
402 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_4), bm_ptr->plev, DAM_ROLL);
403 fire_ball_hide(caster_ptr, GF_CAUSE_4, bm_ptr->dir, bm_ptr->damage, 0);
406 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
409 msg_print(_("アシッド・ボルトの呪文を唱えた。", "You cast an acid bolt."));
410 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_ACID), bm_ptr->plev, DAM_ROLL);
411 fire_bolt(caster_ptr, GF_ACID, bm_ptr->dir, bm_ptr->damage);
414 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
417 msg_print(_("サンダー・ボルトの呪文を唱えた。", "You cast a lightning bolt."));
418 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_ELEC), bm_ptr->plev, DAM_ROLL);
419 fire_bolt(caster_ptr, GF_ELEC, bm_ptr->dir, bm_ptr->damage);
422 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
425 msg_print(_("ファイア・ボルトの呪文を唱えた。", "You cast a fire bolt."));
426 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_FIRE), bm_ptr->plev, DAM_ROLL);
427 fire_bolt(caster_ptr, GF_FIRE, bm_ptr->dir, bm_ptr->damage);
430 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
433 msg_print(_("アイス・ボルトの呪文を唱えた。", "You cast a frost bolt."));
434 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_COLD), bm_ptr->plev, DAM_ROLL);
435 fire_bolt(caster_ptr, GF_COLD, bm_ptr->dir, bm_ptr->damage);
438 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
441 msg_print(_("スターバーストの呪文を念じた。", "You invoke a starburst."));
442 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_STARBURST), bm_ptr->plev, DAM_ROLL);
443 fire_ball(caster_ptr, GF_LITE, bm_ptr->dir, bm_ptr->damage, 4);
446 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
449 msg_print(_("地獄の矢の呪文を唱えた。", "You cast a nether bolt."));
450 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_NETHER), bm_ptr->plev, DAM_ROLL);
451 fire_bolt(caster_ptr, GF_NETHER, bm_ptr->dir, bm_ptr->damage);
454 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
457 msg_print(_("ウォーター・ボルトの呪文を唱えた。", "You cast a water bolt."));
458 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_WATER), bm_ptr->plev, DAM_ROLL);
459 fire_bolt(caster_ptr, GF_WATER, bm_ptr->dir, bm_ptr->damage);
462 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
465 msg_print(_("魔力の矢の呪文を唱えた。", "You cast a mana bolt."));
466 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_MANA), bm_ptr->plev, DAM_ROLL);
467 fire_bolt(caster_ptr, GF_MANA, bm_ptr->dir, bm_ptr->damage);
470 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
473 msg_print(_("プラズマ・ボルトの呪文を唱えた。", "You cast a plasma bolt."));
474 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_PLASMA), bm_ptr->plev, DAM_ROLL);
475 fire_bolt(caster_ptr, GF_PLASMA, bm_ptr->dir, bm_ptr->damage);
478 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
481 msg_print(_("極寒の矢の呪文を唱えた。", "You cast a ice bolt."));
482 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_ICE), bm_ptr->plev, DAM_ROLL);
483 fire_bolt(caster_ptr, GF_ICE, bm_ptr->dir, bm_ptr->damage);
485 case MS_MAGIC_MISSILE:
486 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
489 msg_print(_("マジック・ミサイルの呪文を唱えた。", "You cast a magic missile."));
490 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_MAGIC_MISSILE), bm_ptr->plev, DAM_ROLL);
491 fire_bolt(caster_ptr, GF_MISSILE, bm_ptr->dir, bm_ptr->damage);
494 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
497 msg_print(_("恐ろしげな幻覚を作り出した。", "You cast a fearful illusion."));
498 fear_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev + 10);
501 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
503 confuse_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev * 2);
506 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
509 msg_print(_("誘惑的な幻覚をつくり出した。", "You cast a mesmerizing illusion."));
510 confuse_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev * 2);
513 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
515 slow_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev);
518 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
520 sleep_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev);
523 (void)set_fast(caster_ptr, randint1(20 + bm_ptr->plev) + bm_ptr->plev, FALSE);
526 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
529 msg_print(_("<破滅の手>を放った!", "You invoke the Hand of Doom!"));
530 fire_ball_hide(caster_ptr, GF_HAND_DOOM, bm_ptr->dir, bm_ptr->plev * 3, 0);
534 msg_print(_("自分の傷に念を集中した。", "You concentrate on your wounds!"));
535 (void)hp_player(caster_ptr, bm_ptr->plev * 4);
536 (void)set_stun(caster_ptr, 0);
537 (void)set_cut(caster_ptr, 0);
540 msg_print(_("無傷の球の呪文を唱えた。", "You cast a Globe of Invulnerability."));
541 (void)set_invuln(caster_ptr, randint1(4) + 4, FALSE);
544 teleport_player(caster_ptr, 10, TELEPORT_SPONTANEOUS);
547 teleport_player(caster_ptr, bm_ptr->plev * 5, TELEPORT_SPONTANEOUS);
550 (void)time_walk(caster_ptr);
557 GAME_TEXT m_name[MAX_NLEN];
559 if (!target_set(caster_ptr, TARGET_KILL))
562 if (!floor_ptr->grid_array[target_row][target_col].m_idx)
565 if (!player_has_los_bold(caster_ptr, target_row, target_col))
568 if (!projectable(caster_ptr, caster_ptr->y, caster_ptr->x, target_row, target_col))
571 m_ptr = &floor_ptr->m_list[floor_ptr->grid_array[target_row][target_col].m_idx];
572 r_ptr = &r_info[m_ptr->r_idx];
573 monster_desc(caster_ptr, m_name, m_ptr, 0);
574 if (r_ptr->flagsr & RFR_RES_TELE) {
575 if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flagsr & RFR_RES_ALL)) {
576 if (is_original_ap_and_seen(caster_ptr, m_ptr))
577 r_ptr->r_flagsr |= RFR_RES_TELE;
578 msg_format(_("%sには効果がなかった!", "%s is unaffected!"), m_name);
580 } else if (r_ptr->level > randint1(100)) {
581 if (is_original_ap_and_seen(caster_ptr, m_ptr))
582 r_ptr->r_flagsr |= RFR_RES_TELE;
583 msg_format(_("%sには耐性がある!", "%s resists!"), m_name);
588 msg_format(_("%sを引き戻した。", "You command %s to return."), m_name);
589 teleport_monster_to(caster_ptr, floor_ptr->grid_array[target_row][target_col].m_idx, caster_ptr->y, caster_ptr->x, 100, TELEPORT_PASSIVE);
593 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
596 (void)fire_beam(caster_ptr, GF_AWAY_ALL, bm_ptr->dir, 100);
599 return teleport_level_other(caster_ptr);
602 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
605 msg_print(_("光の剣を放った。", "You throw a psycho-spear."));
606 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_PSY_SPEAR), bm_ptr->plev, DAM_ROLL);
607 (void)fire_beam(caster_ptr, GF_PSY_SPEAR, bm_ptr->dir, bm_ptr->damage);
611 msg_print(_("暗闇の中で手を振った。", "You gesture in shadow."));
612 (void)unlite_area(caster_ptr, 10, 3);
615 if (!target_set(caster_ptr, TARGET_KILL))
618 msg_print(_("呪文を唱えて邪悪に微笑んだ。", "You cast a spell and cackle evilly."));
619 trap_creation(caster_ptr, target_row, target_col);
622 msg_print(_("しかし何も起きなかった。", "Nothing happen."));
625 msg_print(_("死者復活の呪文を唱えた。", "You animate the dead."));
626 (void)animate_dead(caster_ptr, 0, caster_ptr->y, caster_ptr->x);
629 msg_print(_("援軍を召喚した。", "You summon one of your kin."));
630 for (int k = 0; k < 1; k++) {
631 if (summon_kin_player(caster_ptr, bm_ptr->summon_lev, caster_ptr->y, caster_ptr->x, (bm_ptr->pet ? PM_FORCE_PET : 0L))) {
633 msg_print(_("召喚された仲間は怒っている!", "The summoned companion is angry!"));
635 bm_ptr->no_trump = TRUE;
642 msg_print(_("サイバーデーモンを召喚した!", "You summon a Cyberdemon!"));
643 for (int k = 0; k < 1; k++) {
644 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_CYBER, bm_ptr->p_mode)) {
646 msg_print(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon are angry!"));
648 bm_ptr->no_trump = TRUE;
654 msg_print(_("仲間を召喚した。", "You summon help."));
655 for (int k = 0; k < 1; k++) {
656 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, 0, bm_ptr->p_mode)) {
658 msg_print(_("召喚されたモンスターは怒っている!", "The summoned monster is angry!"));
660 bm_ptr->no_trump = TRUE;
666 case MS_S_MONSTERS: {
667 msg_print(_("モンスターを召喚した!", "You summon monsters!"));
668 for (int k = 0; k < bm_ptr->plev / 15 + 2; k++) {
669 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, 0, (bm_ptr->p_mode | bm_ptr->u_mode))) {
671 msg_print(_("召喚されたモンスターは怒っている!", "The summoned monsters are angry!"));
673 bm_ptr->no_trump = TRUE;
680 msg_print(_("アリを召喚した。", "You summon ants."));
681 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_ANT, (PM_ALLOW_GROUP | bm_ptr->p_mode))) {
683 msg_print(_("召喚されたアリは怒っている!", "The summoned ants are angry!"));
685 bm_ptr->no_trump = TRUE;
691 msg_print(_("蜘蛛を召喚した。", "You summon spiders."));
692 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_SPIDER, (PM_ALLOW_GROUP | bm_ptr->p_mode))) {
694 msg_print(_("召喚された蜘蛛は怒っている!", "Summoned spiders are angry!"));
696 bm_ptr->no_trump = TRUE;
702 msg_print(_("ハウンドを召喚した。", "You summon hounds."));
703 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_HOUND, (PM_ALLOW_GROUP | bm_ptr->p_mode))) {
705 msg_print(_("召喚されたハウンドは怒っている!", "Summoned hounds are angry!"));
707 bm_ptr->no_trump = TRUE;
713 msg_print(_("ヒドラを召喚した。", "You summon a hydras."));
714 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_HYDRA, (bm_ptr->g_mode | bm_ptr->p_mode))) {
716 msg_print(_("召喚されたヒドラは怒っている!", "Summoned hydras are angry!"));
718 bm_ptr->no_trump = TRUE;
724 msg_print(_("天使を召喚した!", "You summon an angel!"));
725 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_ANGEL, (bm_ptr->g_mode | bm_ptr->p_mode))) {
727 msg_print(_("召喚された天使は怒っている!", "The summoned angel is angry!"));
729 bm_ptr->no_trump = TRUE;
735 msg_print(_("混沌の宮廷から悪魔を召喚した!", "You summon a demon from the Courts of Chaos!"));
736 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_DEMON, (bm_ptr->g_mode | bm_ptr->p_mode))) {
738 msg_print(_("召喚されたデーモンは怒っている!", "The summoned demon is angry!"));
740 bm_ptr->no_trump = TRUE;
746 msg_print(_("アンデッドの強敵を召喚した!", "You summon an undead adversary!"));
747 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_UNDEAD, (bm_ptr->g_mode | bm_ptr->p_mode))) {
749 msg_print(_("召喚されたアンデッドは怒っている!", "The summoned undead is angry!"));
751 bm_ptr->no_trump = TRUE;
757 msg_print(_("ドラゴンを召喚した!", "You summon a dragon!"));
758 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_DRAGON, (bm_ptr->g_mode | bm_ptr->p_mode))) {
760 msg_print(_("召喚されたドラゴンは怒っている!", "The summoned dragon is angry!"));
762 bm_ptr->no_trump = TRUE;
767 case MS_S_HI_UNDEAD: {
768 msg_print(_("強力なアンデッドを召喚した!", "You summon a greater undead!"));
769 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_HI_UNDEAD, (bm_ptr->g_mode | bm_ptr->p_mode | bm_ptr->u_mode))) {
771 msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead is angry!"));
773 bm_ptr->no_trump = TRUE;
778 case MS_S_HI_DRAGON: {
779 msg_print(_("古代ドラゴンを召喚した!", "You summon an ancient dragon!"));
780 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_HI_DRAGON, (bm_ptr->g_mode | bm_ptr->p_mode | bm_ptr->u_mode))) {
782 msg_print(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon is angry!"));
784 bm_ptr->no_trump = TRUE;
789 case MS_S_AMBERITE: {
790 msg_print(_("アンバーの王族を召喚した!", "You summon a Lord of Amber!"));
791 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_AMBERITES, (bm_ptr->g_mode | bm_ptr->p_mode | bm_ptr->u_mode))) {
793 msg_print(_("召喚されたアンバーの王族は怒っている!", "The summoned Lord of Amber is angry!"));
795 bm_ptr->no_trump = TRUE;
802 msg_print(_("特別な強敵を召喚した!", "You summon a special opponent!"));
803 for (k = 0; k < 1; k++) {
804 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_UNIQUE, (bm_ptr->g_mode | bm_ptr->p_mode | PM_ALLOW_UNIQUE))) {
807 msg_print(_("召喚されたユニーク・モンスターは怒っている!", "The summoned special opponent is angry!"));
811 for (k = count; k < 1; k++) {
812 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_HI_UNDEAD, (bm_ptr->g_mode | bm_ptr->p_mode | PM_ALLOW_UNIQUE))) {
815 msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead is angry!"));
820 bm_ptr->no_trump = TRUE;
828 if (bm_ptr->no_trump)
829 msg_print(_("何も現れなかった。", "No one appeared."));