OSDN Git Service

[Refactor] #40481 Separated cast_blue_breath_nexus() from cast_learned_spell()
[hengband/hengband.git] / src / blue-magic / blue-magic-caster.c
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/cave.h"
6 #include "floor/floor.h"
7 #include "grid/grid.h"
8 #include "io/targeting.h"
9 #include "monster-floor/monster-summon.h"
10 #include "monster-floor/place-monster-types.h"
11 #include "monster-race/monster-race.h"
12 #include "monster-race/race-flags-resistance.h"
13 #include "monster-race/race-flags1.h"
14 #include "monster/monster-describer.h"
15 #include "monster/monster-info.h"
16 #include "monster/monster-status.h"
17 #include "mspell/mspell-damage-calculator.h"
18 #include "mspell/mspell-type.h"
19 #include "spell-kind/spells-launcher.h"
20 #include "spell-kind/spells-lite.h"
21 #include "spell-kind/spells-neighbor.h"
22 #include "spell-kind/spells-sight.h"
23 #include "spell-kind/spells-teleport.h"
24 #include "spell-kind/spells-world.h"
25 #include "spell/spell-types.h"
26 #include "spell/spells-status.h"
27 #include "spell/spells-summon.h"
28 #include "status/bad-status-setter.h"
29 #include "status/body-improvement.h"
30 #include "status/buff-setter.h"
31 #include "system/floor-type-definition.h"
32 #include "view/display-messages.h"
33
34 static bool cast_blue_dispel(player_type *caster_ptr)
35 {
36     if (!target_set(caster_ptr, TARGET_KILL))
37         return FALSE;
38
39     MONSTER_IDX m_idx = caster_ptr->current_floor_ptr->grid_array[target_row][target_col].m_idx;
40     if ((m_idx == 0) || !player_has_los_bold(caster_ptr, target_row, target_col)
41         || !projectable(caster_ptr, caster_ptr->y, caster_ptr->x, target_row, target_col))
42         return TRUE;
43
44     dispel_monster_status(caster_ptr, m_idx);
45     return TRUE;
46 }
47
48 static bool cast_blue_rocket(player_type *caster_ptr, blue_magic_type *bm_ptr)
49 {
50     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
51         return FALSE;
52
53     msg_print(_("ロケットを発射した。", "You fire a rocket."));
54     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_ROCKET), bm_ptr->plev, DAM_ROLL);
55     fire_rocket(caster_ptr, GF_ROCKET, bm_ptr->dir, bm_ptr->damage, 2);
56     return TRUE;
57 }
58
59 static bool cast_blue_shoot(player_type *caster_ptr, blue_magic_type *bm_ptr)
60 {
61     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
62         return FALSE;
63
64     msg_print(_("矢を放った。", "You fire an arrow."));
65     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_SHOOT), bm_ptr->plev, DAM_ROLL);
66     fire_bolt(caster_ptr, GF_ARROW, bm_ptr->dir, bm_ptr->damage);
67     return TRUE;
68 }
69
70 static bool cast_blue_breath_acid(player_type *caster_ptr, blue_magic_type *bm_ptr)
71 {
72     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
73         return FALSE;
74
75     msg_print(_("酸のブレスを吐いた。", "You breathe acid."));
76     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_ACID), bm_ptr->plev, DAM_ROLL);
77     fire_breath(caster_ptr, GF_ACID, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
78     return TRUE;
79 }
80
81 static bool cast_blue_breath_elec(player_type *caster_ptr, blue_magic_type *bm_ptr)
82 {
83     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
84         return FALSE;
85
86     msg_print(_("稲妻のブレスを吐いた。", "You breathe lightning."));
87     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_ELEC), bm_ptr->plev, DAM_ROLL);
88     fire_breath(caster_ptr, GF_ELEC, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
89     return TRUE;
90 }
91
92 static bool cast_blue_breath_fire(player_type *caster_ptr, blue_magic_type *bm_ptr)
93 {
94     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
95         return FALSE;
96
97     msg_print(_("火炎のブレスを吐いた。", "You breathe fire."));
98     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_FIRE), bm_ptr->plev, DAM_ROLL);
99     fire_breath(caster_ptr, GF_FIRE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
100     return TRUE;
101 }
102
103 static bool cast_blue_breath_cold(player_type *caster_ptr, blue_magic_type *bm_ptr)
104 {
105     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
106         return FALSE;
107
108     msg_print(_("冷気のブレスを吐いた。", "You breathe frost."));
109     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_COLD), bm_ptr->plev, DAM_ROLL);
110     fire_breath(caster_ptr, GF_COLD, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
111     return TRUE;
112 }
113
114 static bool cast_blue_breath_pois(player_type *caster_ptr, blue_magic_type *bm_ptr)
115 {
116     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
117         return FALSE;
118
119     msg_print(_("ガスのブレスを吐いた。", "You breathe gas."));
120     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_POIS), bm_ptr->plev, DAM_ROLL);
121     fire_breath(caster_ptr, GF_POIS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
122     return TRUE;
123 }
124
125 static bool cast_blue_breath_nether(player_type *caster_ptr, blue_magic_type *bm_ptr)
126 {
127     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
128         return FALSE;
129
130     msg_print(_("地獄のブレスを吐いた。", "You breathe nether."));
131     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_NETHER), bm_ptr->plev, DAM_ROLL);
132     fire_breath(caster_ptr, GF_NETHER, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
133     return TRUE;
134 }
135
136 static bool cast_blue_breath_lite(player_type *caster_ptr, blue_magic_type *bm_ptr)
137 {
138     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
139         return FALSE;
140
141     msg_print(_("閃光のブレスを吐いた。", "You breathe light."));
142     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_LITE), bm_ptr->plev, DAM_ROLL);
143     fire_breath(caster_ptr, GF_LITE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
144     return TRUE;
145 }
146
147 static bool cast_blue_breath_dark(player_type *caster_ptr, blue_magic_type *bm_ptr)
148 {
149     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
150         return FALSE;
151
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));
155     return TRUE;
156 }
157
158 static bool cast_blue_breath_conf(player_type *caster_ptr, blue_magic_type *bm_ptr)
159 {
160     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
161         return FALSE;
162
163     msg_print(_("混乱のブレスを吐いた。", "You breathe confusion."));
164     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_CONF), bm_ptr->plev, DAM_ROLL);
165     fire_breath(caster_ptr, GF_CONFUSION, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
166     return TRUE;
167 }
168
169 static bool cast_blue_breath_sound(player_type *caster_ptr, blue_magic_type *bm_ptr)
170 {
171     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
172         return FALSE;
173
174     msg_print(_("轟音のブレスを吐いた。", "You breathe sound."));
175     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_SOUND), bm_ptr->plev, DAM_ROLL);
176     fire_breath(caster_ptr, GF_SOUND, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
177     return TRUE;
178 }
179
180 static bool cast_blue_breath_chaos(player_type *caster_ptr, blue_magic_type *bm_ptr)
181 {
182     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
183         return FALSE;
184
185     msg_print(_("カオスのブレスを吐いた。", "You breathe chaos."));
186     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_CHAOS), bm_ptr->plev, DAM_ROLL);
187     fire_breath(caster_ptr, GF_CHAOS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
188     return TRUE;
189 }
190
191 static bool cast_blue_breath_disenchant(player_type *caster_ptr, blue_magic_type *bm_ptr)
192 {
193     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
194         return FALSE;
195
196     msg_print(_("劣化のブレスを吐いた。", "You breathe disenchantment."));
197     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_DISEN), bm_ptr->plev, DAM_ROLL);
198     fire_breath(caster_ptr, GF_DISENCHANT, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
199     return TRUE;
200 }
201
202 static bool cast_blue_breath_nexus(player_type *caster_ptr, blue_magic_type *bm_ptr)
203 {
204     if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
205         return FALSE;
206
207     msg_print(_("因果混乱のブレスを吐いた。", "You breathe nexus."));
208     bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_NEXUS), bm_ptr->plev, DAM_ROLL);
209     fire_breath(caster_ptr, GF_NEXUS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
210     return TRUE;
211 }
212
213 /*!
214  * @brief 青魔法の発動 /
215  * do_cmd_cast calls this function if the player's class is 'blue-mage'.
216  * @param spell 発動するモンスター攻撃のID
217  * @param success TRUEは成功時、FALSEは失敗時の処理を行う
218  * @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
219  */
220 bool cast_learned_spell(player_type *caster_ptr, int spell, const bool success)
221 {
222     blue_magic_type tmp_bm;
223     blue_magic_type *bm_ptr = initialize_blue_magic_type(caster_ptr, &tmp_bm, success, get_pseudo_monstetr_level);
224     floor_type *floor_ptr = caster_ptr->current_floor_ptr;
225     switch (spell) {
226     case MS_SHRIEK:
227         msg_print(_("かん高い金切り声をあげた。", "You make a high pitched shriek."));
228         aggravate_monsters(caster_ptr, 0);
229         break; // 関数分割後に'return TRUE;' に差し替え
230     case MS_XXX1:
231     case MS_XXX2:
232     case MS_XXX3:
233     case MS_XXX4:
234         break;
235     case MS_DISPEL:
236         if (!cast_blue_dispel(caster_ptr))
237             return FALSE;
238
239         break;
240     case MS_ROCKET:
241         if (!cast_blue_rocket(caster_ptr, bm_ptr))
242             return FALSE;
243
244         break;
245     case MS_SHOOT:
246         if (!cast_blue_shoot(caster_ptr, bm_ptr))
247             return FALSE;
248
249         break;
250     case MS_BR_ACID:
251         if (!cast_blue_breath_acid(caster_ptr, bm_ptr))
252             return FALSE;
253
254         break;
255     case MS_BR_ELEC:
256         if (!cast_blue_breath_elec(caster_ptr, bm_ptr))
257             return FALSE;
258
259         break;
260     case MS_BR_FIRE:
261         if (!cast_blue_breath_fire(caster_ptr, bm_ptr))
262             return FALSE;
263
264         break;
265     case MS_BR_COLD:
266         if (!cast_blue_breath_cold(caster_ptr, bm_ptr))
267             return FALSE;
268
269         break;
270     case MS_BR_POIS:
271         if (!cast_blue_breath_pois(caster_ptr, bm_ptr))
272             return FALSE;
273
274         break;
275     case MS_BR_NETHER:
276         if (!cast_blue_breath_nether(caster_ptr, bm_ptr))
277             return FALSE;
278
279         break;
280     case MS_BR_LITE:
281         if (!cast_blue_breath_lite(caster_ptr, bm_ptr))
282             return FALSE;
283
284         break;
285     case MS_BR_DARK:
286         if (!cast_blue_breath_dark(caster_ptr, bm_ptr))
287             return FALSE;
288
289         break;
290     case MS_BR_CONF:
291         if (!cast_blue_breath_conf(caster_ptr, bm_ptr))
292             return FALSE;
293
294         break;
295     case MS_BR_SOUND:
296         if (!cast_blue_breath_sound(caster_ptr, bm_ptr))
297             return FALSE;
298
299         break;
300     case MS_BR_CHAOS:
301         if (!cast_blue_breath_chaos(caster_ptr, bm_ptr))
302             return FALSE;
303
304         break;
305     case MS_BR_DISEN:
306         if (!cast_blue_breath_disenchant(caster_ptr, bm_ptr))
307             return FALSE;
308
309         break;
310     case MS_BR_NEXUS:
311         if (!cast_blue_breath_nexus(caster_ptr, bm_ptr))
312             return FALSE;
313
314         break;
315     case MS_BR_TIME:
316         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
317             return FALSE;
318
319         msg_print(_("時間逆転のブレスを吐いた。", "You breathe time."));
320         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_TIME), bm_ptr->plev, DAM_ROLL);
321         fire_breath(caster_ptr, GF_TIME, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
322         break;
323     case MS_BR_INERTIA:
324         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
325             return FALSE;
326
327         msg_print(_("遅鈍のブレスを吐いた。", "You breathe inertia."));
328         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_INERTIA), bm_ptr->plev, DAM_ROLL);
329         fire_breath(caster_ptr, GF_INERTIAL, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
330         break;
331     case MS_BR_GRAVITY:
332         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
333             return FALSE;
334
335         msg_print(_("重力のブレスを吐いた。", "You breathe gravity."));
336         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_GRAVITY), bm_ptr->plev, DAM_ROLL);
337         fire_breath(caster_ptr, GF_GRAVITY, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
338         break;
339     case MS_BR_SHARDS:
340         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
341             return FALSE;
342
343         msg_print(_("破片のブレスを吐いた。", "You breathe shards."));
344         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_SHARDS), bm_ptr->plev, DAM_ROLL);
345         fire_breath(caster_ptr, GF_SHARDS, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
346         break;
347     case MS_BR_PLASMA:
348         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
349             return FALSE;
350
351         msg_print(_("プラズマのブレスを吐いた。", "You breathe plasma."));
352         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_PLASMA), bm_ptr->plev, DAM_ROLL);
353         fire_breath(caster_ptr, GF_PLASMA, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
354         break;
355     case MS_BR_FORCE:
356         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
357             return FALSE;
358
359         msg_print(_("フォースのブレスを吐いた。", "You breathe force."));
360         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_FORCE), bm_ptr->plev, DAM_ROLL);
361         fire_breath(caster_ptr, GF_FORCE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
362         break;
363     case MS_BR_MANA:
364         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
365             return FALSE;
366
367         msg_print(_("魔力のブレスを吐いた。", "You breathe mana."));
368         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_MANA), bm_ptr->plev, DAM_ROLL);
369         fire_breath(caster_ptr, GF_MANA, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
370         break;
371     case MS_BALL_NUKE:
372         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
373             return FALSE;
374
375         msg_print(_("放射能球を放った。", "You cast a ball of radiation."));
376         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_NUKE), bm_ptr->plev, DAM_ROLL);
377         fire_ball(caster_ptr, GF_NUKE, bm_ptr->dir, bm_ptr->damage, 2);
378         break;
379     case MS_BR_NUKE:
380         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
381             return FALSE;
382
383         msg_print(_("放射性廃棄物のブレスを吐いた。", "You breathe toxic waste."));
384         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_NUKE), bm_ptr->plev, DAM_ROLL);
385         fire_breath(caster_ptr, GF_NUKE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
386         break;
387     case MS_BALL_CHAOS:
388         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
389             return FALSE;
390
391         msg_print(_("純ログルスを放った。", "You invoke a raw Logrus."));
392         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_CHAOS), bm_ptr->plev, DAM_ROLL);
393         fire_ball(caster_ptr, GF_CHAOS, bm_ptr->dir, bm_ptr->damage, 4);
394         break;
395     case MS_BR_DISI:
396         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
397             return FALSE;
398
399         msg_print(_("分解のブレスを吐いた。", "You breathe disintegration."));
400         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BR_DISI), bm_ptr->plev, DAM_ROLL);
401         fire_breath(caster_ptr, GF_DISINTEGRATE, bm_ptr->dir, bm_ptr->damage, (bm_ptr->plev > 40 ? 3 : 2));
402         break;
403     case MS_BALL_ACID:
404         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
405             return FALSE;
406
407         msg_print(_("アシッド・ボールの呪文を唱えた。", "You cast an acid ball."));
408         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_ACID), bm_ptr->plev, DAM_ROLL);
409         fire_ball(caster_ptr, GF_ACID, bm_ptr->dir, bm_ptr->damage, 2);
410         break;
411     case MS_BALL_ELEC:
412         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
413             return FALSE;
414
415         msg_print(_("サンダー・ボールの呪文を唱えた。", "You cast a lightning ball."));
416         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_ELEC), bm_ptr->plev, DAM_ROLL);
417         fire_ball(caster_ptr, GF_ELEC, bm_ptr->dir, bm_ptr->damage, 2);
418         break;
419     case MS_BALL_FIRE:
420         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
421             return FALSE;
422
423         msg_print(_("ファイア・ボールの呪文を唱えた。", "You cast a fire ball."));
424         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_FIRE), bm_ptr->plev, DAM_ROLL);
425         fire_ball(caster_ptr, GF_FIRE, bm_ptr->dir, bm_ptr->damage, 2);
426         break;
427     case MS_BALL_COLD:
428         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
429             return FALSE;
430
431         msg_print(_("アイス・ボールの呪文を唱えた。", "You cast a frost ball."));
432         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_COLD), bm_ptr->plev, DAM_ROLL);
433         fire_ball(caster_ptr, GF_COLD, bm_ptr->dir, bm_ptr->damage, 2);
434         break;
435     case MS_BALL_POIS:
436         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
437             return FALSE;
438
439         msg_print(_("悪臭雲の呪文を唱えた。", "You cast a stinking cloud."));
440         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_POIS), bm_ptr->plev, DAM_ROLL);
441         fire_ball(caster_ptr, GF_POIS, bm_ptr->dir, bm_ptr->damage, 2);
442         break;
443     case MS_BALL_NETHER:
444         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
445             return FALSE;
446
447         msg_print(_("地獄球の呪文を唱えた。", "You cast a nether ball."));
448         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_NETHER), bm_ptr->plev, DAM_ROLL);
449         fire_ball(caster_ptr, GF_NETHER, bm_ptr->dir, bm_ptr->damage, 2);
450         break;
451     case MS_BALL_WATER:
452         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
453             return FALSE;
454
455         msg_print(_("流れるような身振りをした。", "You gesture fluidly."));
456         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_WATER), bm_ptr->plev, DAM_ROLL);
457         fire_ball(caster_ptr, GF_WATER, bm_ptr->dir, bm_ptr->damage, 4);
458         break;
459     case MS_BALL_MANA:
460         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
461             return FALSE;
462
463         msg_print(_("魔力の嵐の呪文を念じた。", "You invoke a mana storm."));
464         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_MANA), bm_ptr->plev, DAM_ROLL);
465         fire_ball(caster_ptr, GF_MANA, bm_ptr->dir, bm_ptr->damage, 4);
466         break;
467     case MS_BALL_DARK:
468         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
469             return FALSE;
470
471         msg_print(_("暗黒の嵐の呪文を念じた。", "You invoke a darkness storm."));
472         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BALL_DARK), bm_ptr->plev, DAM_ROLL);
473         fire_ball(caster_ptr, GF_DARK, bm_ptr->dir, bm_ptr->damage, 4);
474         break;
475     case MS_DRAIN_MANA:
476         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
477             return FALSE;
478
479         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_DRAIN_MANA), bm_ptr->plev, DAM_ROLL);
480         fire_ball_hide(caster_ptr, GF_DRAIN_MANA, bm_ptr->dir, bm_ptr->damage, 0);
481         break;
482     case MS_MIND_BLAST:
483         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
484             return FALSE;
485
486         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_MIND_BLAST), bm_ptr->plev, DAM_ROLL);
487         fire_ball_hide(caster_ptr, GF_MIND_BLAST, bm_ptr->dir, bm_ptr->damage, 0);
488         break;
489     case MS_BRAIN_SMASH:
490         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
491             return FALSE;
492
493         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BRAIN_SMASH), bm_ptr->plev, DAM_ROLL);
494         fire_ball_hide(caster_ptr, GF_BRAIN_SMASH, bm_ptr->dir, bm_ptr->damage, 0);
495         break;
496     case MS_CAUSE_1:
497         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
498             return FALSE;
499
500         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_1), bm_ptr->plev, DAM_ROLL);
501         fire_ball_hide(caster_ptr, GF_CAUSE_1, bm_ptr->dir, bm_ptr->damage, 0);
502         break;
503     case MS_CAUSE_2:
504         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
505             return FALSE;
506
507         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_2), bm_ptr->plev, DAM_ROLL);
508         fire_ball_hide(caster_ptr, GF_CAUSE_2, bm_ptr->dir, bm_ptr->damage, 0);
509         break;
510     case MS_CAUSE_3:
511         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
512             return FALSE;
513
514         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_3), bm_ptr->plev, DAM_ROLL);
515         fire_ball_hide(caster_ptr, GF_CAUSE_3, bm_ptr->dir, bm_ptr->damage, 0);
516         break;
517     case MS_CAUSE_4:
518         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
519             return FALSE;
520
521         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_CAUSE_4), bm_ptr->plev, DAM_ROLL);
522         fire_ball_hide(caster_ptr, GF_CAUSE_4, bm_ptr->dir, bm_ptr->damage, 0);
523         break;
524     case MS_BOLT_ACID:
525         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
526             return FALSE;
527
528         msg_print(_("アシッド・ボルトの呪文を唱えた。", "You cast an acid bolt."));
529         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_ACID), bm_ptr->plev, DAM_ROLL);
530         fire_bolt(caster_ptr, GF_ACID, bm_ptr->dir, bm_ptr->damage);
531         break;
532     case MS_BOLT_ELEC:
533         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
534             return FALSE;
535
536         msg_print(_("サンダー・ボルトの呪文を唱えた。", "You cast a lightning bolt."));
537         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_ELEC), bm_ptr->plev, DAM_ROLL);
538         fire_bolt(caster_ptr, GF_ELEC, bm_ptr->dir, bm_ptr->damage);
539         break;
540     case MS_BOLT_FIRE:
541         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
542             return FALSE;
543
544         msg_print(_("ファイア・ボルトの呪文を唱えた。", "You cast a fire bolt."));
545         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_FIRE), bm_ptr->plev, DAM_ROLL);
546         fire_bolt(caster_ptr, GF_FIRE, bm_ptr->dir, bm_ptr->damage);
547         break;
548     case MS_BOLT_COLD:
549         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
550             return FALSE;
551
552         msg_print(_("アイス・ボルトの呪文を唱えた。", "You cast a frost bolt."));
553         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_COLD), bm_ptr->plev, DAM_ROLL);
554         fire_bolt(caster_ptr, GF_COLD, bm_ptr->dir, bm_ptr->damage);
555         break;
556     case MS_STARBURST:
557         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
558             return FALSE;
559
560         msg_print(_("スターバーストの呪文を念じた。", "You invoke a starburst."));
561         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_STARBURST), bm_ptr->plev, DAM_ROLL);
562         fire_ball(caster_ptr, GF_LITE, bm_ptr->dir, bm_ptr->damage, 4);
563         break;
564     case MS_BOLT_NETHER:
565         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
566             return FALSE;
567
568         msg_print(_("地獄の矢の呪文を唱えた。", "You cast a nether bolt."));
569         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_NETHER), bm_ptr->plev, DAM_ROLL);
570         fire_bolt(caster_ptr, GF_NETHER, bm_ptr->dir, bm_ptr->damage);
571         break;
572     case MS_BOLT_WATER:
573         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
574             return FALSE;
575
576         msg_print(_("ウォーター・ボルトの呪文を唱えた。", "You cast a water bolt."));
577         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_WATER), bm_ptr->plev, DAM_ROLL);
578         fire_bolt(caster_ptr, GF_WATER, bm_ptr->dir, bm_ptr->damage);
579         break;
580     case MS_BOLT_MANA:
581         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
582             return FALSE;
583
584         msg_print(_("魔力の矢の呪文を唱えた。", "You cast a mana bolt."));
585         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_MANA), bm_ptr->plev, DAM_ROLL);
586         fire_bolt(caster_ptr, GF_MANA, bm_ptr->dir, bm_ptr->damage);
587         break;
588     case MS_BOLT_PLASMA:
589         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
590             return FALSE;
591
592         msg_print(_("プラズマ・ボルトの呪文を唱えた。", "You cast a plasma bolt."));
593         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_PLASMA), bm_ptr->plev, DAM_ROLL);
594         fire_bolt(caster_ptr, GF_PLASMA, bm_ptr->dir, bm_ptr->damage);
595         break;
596     case MS_BOLT_ICE:
597         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
598             return FALSE;
599
600         msg_print(_("極寒の矢の呪文を唱えた。", "You cast a ice bolt."));
601         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_BOLT_ICE), bm_ptr->plev, DAM_ROLL);
602         fire_bolt(caster_ptr, GF_ICE, bm_ptr->dir, bm_ptr->damage);
603         break;
604     case MS_MAGIC_MISSILE:
605         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
606             return FALSE;
607
608         msg_print(_("マジック・ミサイルの呪文を唱えた。", "You cast a magic missile."));
609         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_MAGIC_MISSILE), bm_ptr->plev, DAM_ROLL);
610         fire_bolt(caster_ptr, GF_MISSILE, bm_ptr->dir, bm_ptr->damage);
611         break;
612     case MS_SCARE:
613         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
614             return FALSE;
615
616         msg_print(_("恐ろしげな幻覚を作り出した。", "You cast a fearful illusion."));
617         fear_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev + 10);
618         break;
619     case MS_BLIND:
620         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
621             return FALSE;
622
623         confuse_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev * 2);
624         break;
625     case MS_CONF:
626         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
627             return FALSE;
628
629         msg_print(_("誘惑的な幻覚をつくり出した。", "You cast a mesmerizing illusion."));
630         confuse_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev * 2);
631         break;
632     case MS_SLOW:
633         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
634             return FALSE;
635
636         slow_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev);
637         break;
638     case MS_SLEEP:
639         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
640             return FALSE;
641
642         sleep_monster(caster_ptr, bm_ptr->dir, bm_ptr->plev);
643         break;
644     case MS_SPEED:
645         (void)set_fast(caster_ptr, randint1(20 + bm_ptr->plev) + bm_ptr->plev, FALSE);
646         break;
647     case MS_HAND_DOOM: {
648         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
649             return FALSE;
650
651         msg_print(_("<破滅の手>を放った!", "You invoke the Hand of Doom!"));
652         fire_ball_hide(caster_ptr, GF_HAND_DOOM, bm_ptr->dir, bm_ptr->plev * 3, 0);
653         break;
654     }
655     case MS_HEAL:
656         msg_print(_("自分の傷に念を集中した。", "You concentrate on your wounds!"));
657         (void)hp_player(caster_ptr, bm_ptr->plev * 4);
658         (void)set_stun(caster_ptr, 0);
659         (void)set_cut(caster_ptr, 0);
660         break;
661     case MS_INVULNER:
662         msg_print(_("無傷の球の呪文を唱えた。", "You cast a Globe of Invulnerability."));
663         (void)set_invuln(caster_ptr, randint1(4) + 4, FALSE);
664         break;
665     case MS_BLINK:
666         teleport_player(caster_ptr, 10, TELEPORT_SPONTANEOUS);
667         break;
668     case MS_TELEPORT:
669         teleport_player(caster_ptr, bm_ptr->plev * 5, TELEPORT_SPONTANEOUS);
670         break;
671     case MS_WORLD:
672         (void)time_walk(caster_ptr);
673         break;
674     case MS_SPECIAL:
675         break;
676     case MS_TELE_TO: {
677         monster_type *m_ptr;
678         monster_race *r_ptr;
679         GAME_TEXT m_name[MAX_NLEN];
680
681         if (!target_set(caster_ptr, TARGET_KILL))
682             return FALSE;
683
684         if (!floor_ptr->grid_array[target_row][target_col].m_idx)
685             break;
686
687         if (!player_has_los_bold(caster_ptr, target_row, target_col))
688             break;
689
690         if (!projectable(caster_ptr, caster_ptr->y, caster_ptr->x, target_row, target_col))
691             break;
692
693         m_ptr = &floor_ptr->m_list[floor_ptr->grid_array[target_row][target_col].m_idx];
694         r_ptr = &r_info[m_ptr->r_idx];
695         monster_desc(caster_ptr, m_name, m_ptr, 0);
696         if (r_ptr->flagsr & RFR_RES_TELE) {
697             if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flagsr & RFR_RES_ALL)) {
698                 if (is_original_ap_and_seen(caster_ptr, m_ptr))
699                     r_ptr->r_flagsr |= RFR_RES_TELE;
700                 msg_format(_("%sには効果がなかった!", "%s is unaffected!"), m_name);
701                 break;
702             } else if (r_ptr->level > randint1(100)) {
703                 if (is_original_ap_and_seen(caster_ptr, m_ptr))
704                     r_ptr->r_flagsr |= RFR_RES_TELE;
705                 msg_format(_("%sには耐性がある!", "%s resists!"), m_name);
706                 break;
707             }
708         }
709
710         msg_format(_("%sを引き戻した。", "You command %s to return."), m_name);
711         teleport_monster_to(caster_ptr, floor_ptr->grid_array[target_row][target_col].m_idx, caster_ptr->y, caster_ptr->x, 100, TELEPORT_PASSIVE);
712         break;
713     }
714     case MS_TELE_AWAY:
715         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
716             return FALSE;
717
718         (void)fire_beam(caster_ptr, GF_AWAY_ALL, bm_ptr->dir, 100);
719         break;
720     case MS_TELE_LEVEL:
721         return teleport_level_other(caster_ptr);
722         break;
723     case MS_PSY_SPEAR:
724         if (!get_aim_dir(caster_ptr, &bm_ptr->dir))
725             return FALSE;
726
727         msg_print(_("光の剣を放った。", "You throw a psycho-spear."));
728         bm_ptr->damage = monspell_bluemage_damage(caster_ptr, (MS_PSY_SPEAR), bm_ptr->plev, DAM_ROLL);
729         (void)fire_beam(caster_ptr, GF_PSY_SPEAR, bm_ptr->dir, bm_ptr->damage);
730         break;
731     case MS_DARKNESS:
732
733         msg_print(_("暗闇の中で手を振った。", "You gesture in shadow."));
734         (void)unlite_area(caster_ptr, 10, 3);
735         break;
736     case MS_MAKE_TRAP:
737         if (!target_set(caster_ptr, TARGET_KILL))
738             return FALSE;
739
740         msg_print(_("呪文を唱えて邪悪に微笑んだ。", "You cast a spell and cackle evilly."));
741         trap_creation(caster_ptr, target_row, target_col);
742         break;
743     case MS_FORGET:
744         msg_print(_("しかし何も起きなかった。", "Nothing happen."));
745         break;
746     case MS_RAISE_DEAD:
747         msg_print(_("死者復活の呪文を唱えた。", "You animate the dead."));
748         (void)animate_dead(caster_ptr, 0, caster_ptr->y, caster_ptr->x);
749         break;
750     case MS_S_KIN: {
751         msg_print(_("援軍を召喚した。", "You summon one of your kin."));
752         for (int k = 0; k < 1; k++) {
753             if (summon_kin_player(caster_ptr, bm_ptr->summon_lev, caster_ptr->y, caster_ptr->x, (bm_ptr->pet ? PM_FORCE_PET : 0L))) {
754                 if (!bm_ptr->pet)
755                     msg_print(_("召喚された仲間は怒っている!", "The summoned companion is angry!"));
756             } else {
757                 bm_ptr->no_trump = TRUE;
758             }
759         }
760
761         break;
762     }
763     case MS_S_CYBER: {
764         msg_print(_("サイバーデーモンを召喚した!", "You summon a Cyberdemon!"));
765         for (int k = 0; k < 1; k++) {
766             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)) {
767                 if (!bm_ptr->pet)
768                     msg_print(_("召喚されたサイバーデーモンは怒っている!", "The summoned Cyberdemon are angry!"));
769             } else {
770                 bm_ptr->no_trump = TRUE;
771             }
772         }
773
774         break;
775     }
776     case MS_S_MONSTER: {
777         msg_print(_("仲間を召喚した。", "You summon help."));
778         for (int k = 0; k < 1; k++) {
779             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)) {
780                 if (!bm_ptr->pet)
781                     msg_print(_("召喚されたモンスターは怒っている!", "The summoned monster is angry!"));
782             } else {
783                 bm_ptr->no_trump = TRUE;
784             }
785         }
786
787         break;
788     }
789     case MS_S_MONSTERS: {
790         msg_print(_("モンスターを召喚した!", "You summon monsters!"));
791         for (int k = 0; k < bm_ptr->plev / 15 + 2; k++) {
792             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))) {
793                 if (!bm_ptr->pet)
794                     msg_print(_("召喚されたモンスターは怒っている!", "The summoned monsters are angry!"));
795             } else {
796                 bm_ptr->no_trump = TRUE;
797             }
798         }
799
800         break;
801     }
802     case MS_S_ANT: {
803         msg_print(_("アリを召喚した。", "You summon ants."));
804         if (summon_specific(
805                 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))) {
806             if (!bm_ptr->pet)
807                 msg_print(_("召喚されたアリは怒っている!", "The summoned ants are angry!"));
808         } else {
809             bm_ptr->no_trump = TRUE;
810         }
811
812         break;
813     }
814     case MS_S_SPIDER: {
815         msg_print(_("蜘蛛を召喚した。", "You summon spiders."));
816         if (summon_specific(
817                 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))) {
818             if (!bm_ptr->pet)
819                 msg_print(_("召喚された蜘蛛は怒っている!", "Summoned spiders are angry!"));
820         } else {
821             bm_ptr->no_trump = TRUE;
822         }
823
824         break;
825     }
826     case MS_S_HOUND: {
827         msg_print(_("ハウンドを召喚した。", "You summon hounds."));
828         if (summon_specific(
829                 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))) {
830             if (!bm_ptr->pet)
831                 msg_print(_("召喚されたハウンドは怒っている!", "Summoned hounds are angry!"));
832         } else {
833             bm_ptr->no_trump = TRUE;
834         }
835
836         break;
837     }
838     case MS_S_HYDRA: {
839         msg_print(_("ヒドラを召喚した。", "You summon a hydras."));
840         if (summon_specific(
841                 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))) {
842             if (!bm_ptr->pet)
843                 msg_print(_("召喚されたヒドラは怒っている!", "Summoned hydras are angry!"));
844         } else {
845             bm_ptr->no_trump = TRUE;
846         }
847
848         break;
849     }
850     case MS_S_ANGEL: {
851         msg_print(_("天使を召喚した!", "You summon an angel!"));
852         if (summon_specific(
853                 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))) {
854             if (!bm_ptr->pet)
855                 msg_print(_("召喚された天使は怒っている!", "The summoned angel is angry!"));
856         } else {
857             bm_ptr->no_trump = TRUE;
858         }
859
860         break;
861     }
862     case MS_S_DEMON: {
863         msg_print(_("混沌の宮廷から悪魔を召喚した!", "You summon a demon from the Courts of Chaos!"));
864         if (summon_specific(
865                 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))) {
866             if (!bm_ptr->pet)
867                 msg_print(_("召喚されたデーモンは怒っている!", "The summoned demon is angry!"));
868         } else {
869             bm_ptr->no_trump = TRUE;
870         }
871
872         break;
873     }
874     case MS_S_UNDEAD: {
875         msg_print(_("アンデッドの強敵を召喚した!", "You summon an undead adversary!"));
876         if (summon_specific(
877                 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))) {
878             if (!bm_ptr->pet)
879                 msg_print(_("召喚されたアンデッドは怒っている!", "The summoned undead is angry!"));
880         } else {
881             bm_ptr->no_trump = TRUE;
882         }
883
884         break;
885     }
886     case MS_S_DRAGON: {
887         msg_print(_("ドラゴンを召喚した!", "You summon a dragon!"));
888         if (summon_specific(
889                 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))) {
890             if (!bm_ptr->pet)
891                 msg_print(_("召喚されたドラゴンは怒っている!", "The summoned dragon is angry!"));
892         } else {
893             bm_ptr->no_trump = TRUE;
894         }
895
896         break;
897     }
898     case MS_S_HI_UNDEAD: {
899         msg_print(_("強力なアンデッドを召喚した!", "You summon a greater undead!"));
900         if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_HI_UNDEAD,
901                 (bm_ptr->g_mode | bm_ptr->p_mode | bm_ptr->u_mode))) {
902             if (!bm_ptr->pet)
903                 msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead is angry!"));
904         } else {
905             bm_ptr->no_trump = TRUE;
906         }
907
908         break;
909     }
910     case MS_S_HI_DRAGON: {
911         msg_print(_("古代ドラゴンを召喚した!", "You summon an ancient dragon!"));
912         if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_HI_DRAGON,
913                 (bm_ptr->g_mode | bm_ptr->p_mode | bm_ptr->u_mode))) {
914             if (!bm_ptr->pet)
915                 msg_print(_("召喚された古代ドラゴンは怒っている!", "The summoned ancient dragon is angry!"));
916         } else {
917             bm_ptr->no_trump = TRUE;
918         }
919
920         break;
921     }
922     case MS_S_AMBERITE: {
923         msg_print(_("アンバーの王族を召喚した!", "You summon a Lord of Amber!"));
924         if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_AMBERITES,
925                 (bm_ptr->g_mode | bm_ptr->p_mode | bm_ptr->u_mode))) {
926             if (!bm_ptr->pet)
927                 msg_print(_("召喚されたアンバーの王族は怒っている!", "The summoned Lord of Amber is angry!"));
928         } else {
929             bm_ptr->no_trump = TRUE;
930         }
931
932         break;
933     }
934     case MS_S_UNIQUE: {
935         int count = 0;
936         msg_print(_("特別な強敵を召喚した!", "You summon a special opponent!"));
937         for (int k = 0; k < 1; k++) {
938             if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_UNIQUE,
939                     (bm_ptr->g_mode | bm_ptr->p_mode | PM_ALLOW_UNIQUE))) {
940                 count++;
941                 if (!bm_ptr->pet)
942                     msg_print(_("召喚されたユニーク・モンスターは怒っている!", "The summoned special opponent is angry!"));
943             }
944         }
945
946         for (int k = count; k < 1; k++) {
947             if (summon_specific(caster_ptr, (bm_ptr->pet ? -1 : 0), caster_ptr->y, caster_ptr->x, bm_ptr->summon_lev, SUMMON_HI_UNDEAD,
948                     (bm_ptr->g_mode | bm_ptr->p_mode | PM_ALLOW_UNIQUE))) {
949                 count++;
950                 if (!bm_ptr->pet)
951                     msg_print(_("召喚された上級アンデッドは怒っている!", "The summoned greater undead is angry!"));
952             }
953         }
954
955         if (!count)
956             bm_ptr->no_trump = TRUE;
957
958         break;
959     }
960     default:
961         msg_print("hoge?");
962     }
963
964     if (bm_ptr->no_trump)
965         msg_print(_("何も現れなかった。", "No one appeared."));
966
967     return TRUE;
968 }