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-teleport.h"
23 #include "spell-kind/spells-world.h"
24 #include "spell/spell-types.h"
25 #include "spell/spells-status.h"
26 #include "spell/spells-summon.h"
27 #include "status/bad-status-setter.h"
28 #include "status/body-improvement.h"
29 #include "status/buff-setter.h"
30 #include "system/floor-type-definition.h"
31 #include "view/display-messages.h"
35 * @param caster_ptr プレーヤーへの参照ポインタ
38 static bool cast_blue_shriek(player_type *caster_ptr)
40 msg_print(_("かん高い金切り声をあげた。", "You make a high pitched shriek."));
41 aggravate_monsters(caster_ptr, 0);
45 static bool cast_blue_dispel(player_type *caster_ptr)
47 if (!target_set(caster_ptr, TARGET_KILL))
50 MONSTER_IDX m_idx = caster_ptr->current_floor_ptr->grid_array[target_row][target_col].m_idx;
51 if ((m_idx == 0) || !player_has_los_bold(caster_ptr, target_row, target_col)
52 || !projectable(caster_ptr, caster_ptr->y, caster_ptr->x, target_row, target_col))
55 dispel_monster_status(caster_ptr, m_idx);
59 static bool cast_blue_rocket(player_type *caster_ptr, blue_magic_type *bm_ptr)
61 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
64 msg_print(_("ロケットを発射した。", "You fire a rocket."));
65 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_ROCKET), bm_ptr->plev, DAM_ROLL);
66 fire_rocket(caster_ptr, GF_ROCKET, bm_ptr->dir, bm_ptr->damage, 2);
72 * do_cmd_cast calls this function if the player's class is 'blue-mage'.
73 * @param spell 発動するモンスター攻撃のID
74 * @param success TRUEは成功時、FALSEは失敗時の処理を行う
75 * @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
77 bool cast_learned_spell(player_type *caster_ptr, int spell, const bool success)
79 blue_magic_type tmp_bm;
80 blue_magic_type *bm_ptr = initialize_blue_magic_type(caster_ptr, &tmp_bm, success, get_pseudo_monstetr_level);
81 floor_type *floor_ptr = caster_ptr->current_floor_ptr;
84 (void)cast_blue_shriek(caster_ptr);
92 if (!cast_blue_dispel(caster_ptr))
97 if (!cast_blue_rocket(caster_ptr, bm_ptr))
102 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
105 msg_print(_("矢を放った。", "You fire an arrow."));
106 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_SHOOT), bm_ptr->plev, DAM_ROLL);
107 fire_bolt(caster_ptr, GF_ARROW, bm_ptr->dir, bm_ptr->damage);
111 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
114 msg_print(_("酸のブレスを吐いた。", "You breathe acid."));
115 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_ACID), bm_ptr->plev, DAM_ROLL);
116 fire_breath(caster_ptr, GF_ACID, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
119 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
122 msg_print(_("稲妻のブレスを吐いた。", "You breathe lightning."));
123 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_ELEC), bm_ptr->plev, DAM_ROLL);
124 fire_breath(caster_ptr, GF_ELEC, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
127 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
130 msg_print(_("火炎のブレスを吐いた。", "You breathe fire."));
131 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_FIRE), bm_ptr->plev, DAM_ROLL);
132 fire_breath(caster_ptr, GF_FIRE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
135 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
138 msg_print(_("冷気のブレスを吐いた。", "You breathe frost."));
139 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_COLD), bm_ptr->plev, DAM_ROLL);
140 fire_breath(caster_ptr, GF_COLD, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
143 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
146 msg_print(_("ガスのブレスを吐いた。", "You breathe gas."));
147 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_POIS), bm_ptr->plev, DAM_ROLL);
148 fire_breath(caster_ptr, GF_POIS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
151 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
154 msg_print(_("地獄のブレスを吐いた。", "You breathe nether."));
155 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_NETHER), bm_ptr->plev, DAM_ROLL);
156 fire_breath(caster_ptr, GF_NETHER, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
159 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
162 msg_print(_("閃光のブレスを吐いた。", "You breathe light."));
163 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_LITE), bm_ptr->plev, DAM_ROLL);
164 fire_breath(caster_ptr, GF_LITE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
167 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
170 msg_print(_("暗黒のブレスを吐いた。", "You breathe darkness."));
171 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_DARK), bm_ptr->plev, DAM_ROLL);
172 fire_breath(caster_ptr, GF_DARK, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
175 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
178 msg_print(_("混乱のブレスを吐いた。", "You breathe confusion."));
179 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_CONF), bm_ptr->plev, DAM_ROLL);
180 fire_breath(caster_ptr, GF_CONFUSION, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
183 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
186 msg_print(_("轟音のブレスを吐いた。", "You breathe sound."));
187 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_SOUND), bm_ptr->plev, DAM_ROLL);
188 fire_breath(caster_ptr, GF_SOUND, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
191 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
194 msg_print(_("カオスのブレスを吐いた。", "You breathe chaos."));
195 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_CHAOS), bm_ptr->plev, DAM_ROLL);
196 fire_breath(caster_ptr, GF_CHAOS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
199 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
202 msg_print(_("劣化のブレスを吐いた。", "You breathe disenchantment."));
203 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_DISEN), bm_ptr->plev, DAM_ROLL);
204 fire_breath(caster_ptr, GF_DISENCHANT, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
207 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
210 msg_print(_("因果混乱のブレスを吐いた。", "You breathe nexus."));
211 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_NEXUS), bm_ptr->plev, DAM_ROLL);
212 fire_breath(caster_ptr, GF_NEXUS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
215 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
218 msg_print(_("時間逆転のブレスを吐いた。", "You breathe time."));
219 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_TIME), bm_ptr->plev, DAM_ROLL);
220 fire_breath(caster_ptr, GF_TIME, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
223 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
226 msg_print(_("遅鈍のブレスを吐いた。", "You breathe inertia."));
227 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_INERTIA), bm_ptr->plev, DAM_ROLL);
228 fire_breath(caster_ptr, GF_INERTIAL, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
231 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
234 msg_print(_("重力のブレスを吐いた。", "You breathe gravity."));
235 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_GRAVITY), bm_ptr->plev, DAM_ROLL);
236 fire_breath(caster_ptr, GF_GRAVITY, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
239 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
242 msg_print(_("破片のブレスを吐いた。", "You breathe shards."));
243 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_SHARDS), bm_ptr->plev, DAM_ROLL);
244 fire_breath(caster_ptr, GF_SHARDS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
247 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
250 msg_print(_("プラズマのブレスを吐いた。", "You breathe plasma."));
251 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_PLASMA), bm_ptr->plev, DAM_ROLL);
252 fire_breath(caster_ptr, GF_PLASMA, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
255 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
258 msg_print(_("フォースのブレスを吐いた。", "You breathe force."));
259 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_FORCE), bm_ptr->plev, DAM_ROLL);
260 fire_breath(caster_ptr, GF_FORCE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
263 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
266 msg_print(_("魔力のブレスを吐いた。", "You breathe mana."));
267 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_MANA), bm_ptr->plev, DAM_ROLL);
268 fire_breath(caster_ptr, GF_MANA, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
271 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
274 msg_print(_("放射能球を放った。", "You cast a ball of radiation."));
275 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_NUKE), bm_ptr->plev, DAM_ROLL);
276 fire_ball(caster_ptr, GF_NUKE, bm_ptr->dir, bm_ptr->damage, 2);
279 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
282 msg_print(_("放射性廃棄物のブレスを吐いた。", "You breathe toxic waste."));
283 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_NUKE), bm_ptr->plev, DAM_ROLL);
284 fire_breath(caster_ptr, GF_NUKE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
287 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
290 msg_print(_("純ログルスを放った。", "You invoke a raw Logrus."));
291 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_CHAOS), bm_ptr->plev, DAM_ROLL);
292 fire_ball(caster_ptr, GF_CHAOS, bm_ptr->dir, bm_ptr->damage, 4);
295 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
298 msg_print(_("分解のブレスを吐いた。", "You breathe disintegration."));
299 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_DISI), bm_ptr->plev, DAM_ROLL);
300 fire_breath(caster_ptr, GF_DISINTEGRATE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
303 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
306 msg_print(_("アシッド・ボールの呪文を唱えた。", "You cast an acid ball."));
307 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_ACID), bm_ptr->plev, DAM_ROLL);
308 fire_ball(caster_ptr, GF_ACID, bm_ptr->dir, bm_ptr->damage, 2);
311 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
314 msg_print(_("サンダー・ボールの呪文を唱えた。", "You cast a lightning ball."));
315 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_ELEC), bm_ptr->plev, DAM_ROLL);
316 fire_ball(caster_ptr, GF_ELEC, bm_ptr->dir, bm_ptr->damage, 2);
319 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
322 msg_print(_("ファイア・ボールの呪文を唱えた。", "You cast a fire ball."));
323 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_FIRE), bm_ptr->plev, DAM_ROLL);
324 fire_ball(caster_ptr, GF_FIRE, bm_ptr->dir, bm_ptr->damage, 2);
327 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
330 msg_print(_("アイス・ボールの呪文を唱えた。", "You cast a frost ball."));
331 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_COLD), bm_ptr->plev, DAM_ROLL);
332 fire_ball(caster_ptr, GF_COLD, bm_ptr->dir, bm_ptr->damage, 2);
335 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
338 msg_print(_("悪臭雲の呪文を唱えた。", "You cast a stinking cloud."));
339 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_POIS), bm_ptr->plev, DAM_ROLL);
340 fire_ball(caster_ptr, GF_POIS, bm_ptr->dir, bm_ptr->damage, 2);
343 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
346 msg_print(_("地獄球の呪文を唱えた。", "You cast a nether ball."));
347 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_NETHER), bm_ptr->plev, DAM_ROLL);
348 fire_ball(caster_ptr, GF_NETHER, bm_ptr->dir, bm_ptr->damage, 2);
351 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
354 msg_print(_("流れるような身振りをした。", "You gesture fluidly."));
355 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_WATER), bm_ptr->plev, DAM_ROLL);
356 fire_ball(caster_ptr, GF_WATER, bm_ptr->dir, bm_ptr->damage, 4);
359 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
362 msg_print(_("魔力の嵐の呪文を念じた。", "You invoke a mana storm."));
363 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_MANA), bm_ptr->plev, DAM_ROLL);
364 fire_ball(caster_ptr, GF_MANA, bm_ptr->dir, bm_ptr->damage, 4);
367 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
370 msg_print(_("暗黒の嵐の呪文を念じた。", "You invoke a darkness storm."));
371 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_DARK), bm_ptr->plev, DAM_ROLL);
372 fire_ball(caster_ptr, GF_DARK, bm_ptr->dir, bm_ptr->damage, 4);
375 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
378 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_DRAIN_MANA), bm_ptr->plev, DAM_ROLL);
379 fire_ball_hide(caster_ptr, GF_DRAIN_MANA, bm_ptr->dir, bm_ptr->damage, 0);
382 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
385 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_MIND_BLAST), bm_ptr->plev, DAM_ROLL);
386 fire_ball_hide(caster_ptr, GF_MIND_BLAST, bm_ptr->dir, bm_ptr->damage, 0);
389 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
392 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BRAIN_SMASH), bm_ptr->plev, DAM_ROLL);
393 fire_ball_hide(caster_ptr, GF_BRAIN_SMASH, bm_ptr->dir, bm_ptr->damage, 0);
396 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
399 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_1), bm_ptr->plev, DAM_ROLL);
400 fire_ball_hide(caster_ptr, GF_CAUSE_1, bm_ptr->dir, bm_ptr->damage, 0);
403 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
406 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_2), bm_ptr->plev, DAM_ROLL);
407 fire_ball_hide(caster_ptr, GF_CAUSE_2, bm_ptr->dir, bm_ptr->damage, 0);
410 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
413 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_3), bm_ptr->plev, DAM_ROLL);
414 fire_ball_hide(caster_ptr, GF_CAUSE_3, bm_ptr->dir, bm_ptr->damage, 0);
417 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
420 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_4), bm_ptr->plev, DAM_ROLL);
421 fire_ball_hide(caster_ptr, GF_CAUSE_4, bm_ptr->dir, bm_ptr->damage, 0);
424 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
427 msg_print(_("アシッド・ボルトの呪文を唱えた。", "You cast an acid bolt."));
428 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_ACID), bm_ptr->plev, DAM_ROLL);
429 fire_bolt(caster_ptr, GF_ACID, bm_ptr->dir, bm_ptr->damage);
432 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
435 msg_print(_("サンダー・ボルトの呪文を唱えた。", "You cast a lightning bolt."));
436 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_ELEC), bm_ptr->plev, DAM_ROLL);
437 fire_bolt(caster_ptr, GF_ELEC, bm_ptr->dir, bm_ptr->damage);
440 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
443 msg_print(_("ファイア・ボルトの呪文を唱えた。", "You cast a fire bolt."));
444 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_FIRE), bm_ptr->plev, DAM_ROLL);
445 fire_bolt(caster_ptr, GF_FIRE, bm_ptr->dir, bm_ptr->damage);
448 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
451 msg_print(_("アイス・ボルトの呪文を唱えた。", "You cast a frost bolt."));
452 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_COLD), bm_ptr->plev, DAM_ROLL);
453 fire_bolt(caster_ptr, GF_COLD, bm_ptr->dir, bm_ptr->damage);
456 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
459 msg_print(_("スターバーストの呪文を念じた。", "You invoke a starburst."));
460 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_STARBURST), bm_ptr->plev, DAM_ROLL);
461 fire_ball(caster_ptr, GF_LITE, bm_ptr->dir, bm_ptr->damage, 4);
464 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
467 msg_print(_("地獄の矢の呪文を唱えた。", "You cast a nether bolt."));
468 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_NETHER), bm_ptr->plev, DAM_ROLL);
469 fire_bolt(caster_ptr, GF_NETHER, bm_ptr->dir, bm_ptr->damage);
472 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
475 msg_print(_("ウォーター・ボルトの呪文を唱えた。", "You cast a water bolt."));
476 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_WATER), bm_ptr->plev, DAM_ROLL);
477 fire_bolt(caster_ptr, GF_WATER, bm_ptr->dir, bm_ptr->damage);
480 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
483 msg_print(_("魔力の矢の呪文を唱えた。", "You cast a mana bolt."));
484 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_MANA), bm_ptr->plev, DAM_ROLL);
485 fire_bolt(caster_ptr, GF_MANA, bm_ptr->dir, bm_ptr->damage);
488 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
491 msg_print(_("プラズマ・ボルトの呪文を唱えた。", "You cast a plasma bolt."));
492 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_PLASMA), bm_ptr->plev, DAM_ROLL);
493 fire_bolt(caster_ptr, GF_PLASMA, bm_ptr->dir, bm_ptr->damage);
496 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
499 msg_print(_("極寒の矢の呪文を唱えた。", "You cast a ice bolt."));
500 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_ICE), bm_ptr->plev, DAM_ROLL);
501 fire_bolt(caster_ptr, GF_ICE, bm_ptr->dir, bm_ptr->damage);
503 case MS_MAGIC_MISSILE:
504 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
507 msg_print(_("マジック・ミサイルの呪文を唱えた。", "You cast a magic missile."));
508 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_MAGIC_MISSILE), bm_ptr->plev, DAM_ROLL);
509 fire_bolt(caster_ptr, GF_MISSILE, bm_ptr->dir, bm_ptr->damage);
512 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
515 msg_print(_("恐ろしげな幻覚を作り出した。", "You cast a fearful illusion."));
516 fear_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev + 10);
519 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
521 confuse_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev * 2);
524 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
527 msg_print(_("誘惑的な幻覚をつくり出した。", "You cast a mesmerizing illusion."));
528 confuse_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev * 2);
531 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
533 slow_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev);
536 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
538 sleep_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev);
541 (void)set_fast(caster_ptr, randint1(20 + bm_ptr->plev) + bm_ptr->plev, FALSE);
544 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
547 msg_print(_("<破滅の手>を放った!", "You invoke the Hand of Doom!"));
548 fire_ball_hide(caster_ptr, GF_HAND_DOOM, bm_ptr->dir, bm_ptr->plev * 3, 0);
552 msg_print(_("自分の傷に念を集中した。", "You concentrate on your wounds!"));
553 (void)hp_player(caster_ptr, bm_ptr->plev * 4);
554 (void)set_stun(caster_ptr, 0);
555 (void)set_cut(caster_ptr, 0);
558 msg_print(_("無傷の球の呪文を唱えた。", "You cast a Globe of Invulnerability."));
559 (void)set_invuln(caster_ptr, randint1(4) + 4, FALSE);
562 teleport_player(caster_ptr, 10, TELEPORT_SPONTANEOUS);
565 teleport_player(caster_ptr, bm_ptr->plev * 5, TELEPORT_SPONTANEOUS);
568 (void)time_walk(caster_ptr);
575 GAME_TEXT m_name[MAX_NLEN];
577 if (!target_set(caster_ptr, TARGET_KILL))
580 if (!floor_ptr->grid_array[target_row][target_col].m_idx)
583 if (!player_has_los_bold(caster_ptr, target_row, target_col))
586 if (!projectable(caster_ptr, caster_ptr->y, caster_ptr->x, target_row, target_col))
589 m_ptr = &floor_ptr->m_list[floor_ptr->grid_array[target_row][target_col].m_idx];
590 r_ptr = &r_info[m_ptr->r_idx];
591 monster_desc(caster_ptr, m_name, m_ptr, 0);
592 if (r_ptr->flagsr & RFR_RES_TELE) {
593 if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flagsr & RFR_RES_ALL)) {
594 if (is_original_ap_and_seen(caster_ptr, m_ptr))
595 r_ptr->r_flagsr |= RFR_RES_TELE;
596 msg_format(_("%sには効果がなかった!", "%s is unaffected!"), m_name);
598 } else if (r_ptr->level > randint1(100)) {
599 if (is_original_ap_and_seen(caster_ptr, m_ptr))
600 r_ptr->r_flagsr |= RFR_RES_TELE;
601 msg_format(_("%sには耐性がある!", "%s resists!"), m_name);
606 msg_format(_("%sを引き戻した。", "You command %s to return."), m_name);
607 teleport_monster_to(caster_ptr, floor_ptr->grid_array[target_row][target_col].m_idx, caster_ptr->y, caster_ptr->x, 100, TELEPORT_PASSIVE);
611 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
614 (void)fire_beam(caster_ptr, GF_AWAY_ALL, bm_ptr->dir, 100);
617 return teleport_level_other(caster_ptr);
620 if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
623 msg_print(_("光の剣を放った。", "You throw a psycho-spear."));
624 bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_PSY_SPEAR), bm_ptr->plev, DAM_ROLL);
625 (void)fire_beam(caster_ptr, GF_PSY_SPEAR, bm_ptr->dir, bm_ptr->damage);
629 msg_print(_("暗闇の中で手を振った。", "You gesture in shadow."));
630 (void)unlite_area(caster_ptr, 10, 3);
633 if (!target_set(caster_ptr, TARGET_KILL))
636 msg_print(_("呪文を唱えて邪悪に微笑んだ。", "You cast a spell and cackle evilly."));
637 trap_creation(caster_ptr, target_row, target_col);
640 msg_print(_("しかし何も起きなかった。", "Nothing happen."));
643 msg_print(_("死者復活の呪文を唱えた。", "You animate the dead."));
644 (void)animate_dead(caster_ptr, 0, caster_ptr->y, caster_ptr->x);
647 msg_print(_("援軍を召喚した。", "You summon one of your kin."));
648 for (int k = 0; k < 1; k++) {
649 if (summon_kin_player(caster_ptr, bm_ptr->summon_lev, caster_ptr->y, caster_ptr->x, (bm_ptr->pet ? PM_FORCE_PET : 0L))) {
651 msg_print(_("召喚された仲間は怒っている!", "The summoned companion is angry!"));
653 bm_ptr->no_trump = TRUE;
660 msg_print(_("サイバーデーモンを召喚した!", "You summon a Cyberdemon!"));
661 for (int k = 0; k < 1; k++) {
662 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)) {
664 msg_print(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon are angry!"));
666 bm_ptr->no_trump = TRUE;
672 msg_print(_("仲間を召喚した。", "You summon help."));
673 for (int k = 0; k < 1; k++) {
674 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)) {
676 msg_print(_("召喚されたモンスターは怒っている!", "The summoned monster is angry!"));
678 bm_ptr->no_trump = TRUE;
684 case MS_S_MONSTERS: {
685 msg_print(_("モンスターを召喚した!", "You summon monsters!"));
686 for (int k = 0; k < bm_ptr->plev / 15 + 2; k++) {
687 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))) {
689 msg_print(_("召喚されたモンスターは怒っている!", "The summoned monsters are angry!"));
691 bm_ptr->no_trump = TRUE;
698 msg_print(_("アリを召喚した。", "You summon ants."));
700 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))) {
702 msg_print(_("召喚されたアリは怒っている!", "The summoned ants are angry!"));
704 bm_ptr->no_trump = TRUE;
710 msg_print(_("蜘蛛を召喚した。", "You summon spiders."));
712 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))) {
714 msg_print(_("召喚された蜘蛛は怒っている!", "Summoned spiders are angry!"));
716 bm_ptr->no_trump = TRUE;
722 msg_print(_("ハウンドを召喚した。", "You summon hounds."));
724 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))) {
726 msg_print(_("召喚されたハウンドは怒っている!", "Summoned hounds are angry!"));
728 bm_ptr->no_trump = TRUE;
734 msg_print(_("ヒドラを召喚した。", "You summon a hydras."));
736 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))) {
738 msg_print(_("召喚されたヒドラは怒っている!", "Summoned hydras are angry!"));
740 bm_ptr->no_trump = TRUE;
746 msg_print(_("天使を召喚した!", "You summon an angel!"));
748 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))) {
750 msg_print(_("召喚された天使は怒っている!", "The summoned angel is angry!"));
752 bm_ptr->no_trump = TRUE;
758 msg_print(_("混沌の宮廷から悪魔を召喚した!", "You summon a demon from the Courts of Chaos!"));
760 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))) {
762 msg_print(_("召喚されたデーモンは怒っている!", "The summoned demon is angry!"));
764 bm_ptr->no_trump = TRUE;
770 msg_print(_("アンデッドの強敵を召喚した!", "You summon an undead adversary!"));
772 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))) {
774 msg_print(_("召喚されたアンデッドは怒っている!", "The summoned undead is angry!"));
776 bm_ptr->no_trump = TRUE;
782 msg_print(_("ドラゴンを召喚した!", "You summon a dragon!"));
784 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))) {
786 msg_print(_("召喚されたドラゴンは怒っている!", "The summoned dragon is angry!"));
788 bm_ptr->no_trump = TRUE;
793 case MS_S_HI_UNDEAD: {
794 msg_print(_("強力なアンデッドを召喚した!", "You summon a greater undead!"));
795 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_HI_UNDEAD,
796 (bm_ptr->g_mode | bm_ptr->p_mode | bm_ptr->u_mode))) {
798 msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead is angry!"));
800 bm_ptr->no_trump = TRUE;
805 case MS_S_HI_DRAGON: {
806 msg_print(_("古代ドラゴンを召喚した!", "You summon an ancient dragon!"));
807 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_HI_DRAGON,
808 (bm_ptr->g_mode | bm_ptr->p_mode | bm_ptr->u_mode))) {
810 msg_print(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon is angry!"));
812 bm_ptr->no_trump = TRUE;
817 case MS_S_AMBERITE: {
818 msg_print(_("アンバーの王族を召喚した!", "You summon a Lord of Amber!"));
819 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_AMBERITES,
820 (bm_ptr->g_mode | bm_ptr->p_mode | bm_ptr->u_mode))) {
822 msg_print(_("召喚されたアンバーの王族は怒っている!", "The summoned Lord of Amber is angry!"));
824 bm_ptr->no_trump = TRUE;
831 msg_print(_("特別な強敵を召喚した!", "You summon a special opponent!"));
832 for (k = 0; k < 1; k++) {
833 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_UNIQUE,
834 (bm_ptr->g_mode | bm_ptr->p_mode | PM_ALLOW_UNIQUE))) {
837 msg_print(_("召喚されたユニーク・モンスターは怒っている!", "The summoned special opponent is angry!"));
841 for (k = count; k < 1; k++) {
842 if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_HI_UNDEAD,
843 (bm_ptr->g_mode | bm_ptr->p_mode | PM_ALLOW_UNIQUE))) {
846 msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead is angry!"));
851 bm_ptr->no_trump = TRUE;
859 if (bm_ptr->no_trump)
860 msg_print(_("何も現れなかった。", "No one appeared."));