OSDN Git Service

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