OSDN Git Service

e1af8baea406e9f0cfa168246afe0eb32f0d9e65
[hengband/hengband.git] / src / do-spell.c
1 /* File: do-spell.c */
2
3 /* Purpose: Do everything for each spell */
4
5 #include "angband.h"
6
7
8 /*
9  * Generate dice info string such as "foo 2d10"
10  */
11 static cptr info_string_dice(cptr str, int dice, int sides, int base)
12 {
13         /* Fix value */
14         if (!dice)
15                 return format("%s%d", str, base);
16
17         /* Dice only */
18         else if (!base)
19                 return format("%s%dd%d", str, dice, sides);
20
21         /* Dice plus base value */
22         else
23                 return format("%s%dd%d%+d", str, dice, sides, base);
24 }
25
26
27 /*
28  * Generate damage-dice info string such as "dam 2d10"
29  */
30 static cptr info_damage(int dice, int sides, int base)
31 {
32 #ifdef JP
33         return info_string_dice("»½ý:", dice, sides, base);
34 #else
35         return info_string_dice("dam ", dice, sides, base);
36 #endif
37 }
38
39
40 /*
41  * Generate duration info string such as "dur 20+1d20"
42  */
43 static cptr info_duration(int base, int sides)
44 {
45 #ifdef JP
46         return format("´ü´Ö:%d+1d%d", base, sides);
47 #else
48         return format("dur %d+1d%d", base, sides);
49 #endif
50 }
51
52
53 /*
54  * Generate range info string such as "range 5"
55  */
56 static cptr info_range(int range)
57 {
58 #ifdef JP
59         return format("ÈÏ°Ï:%d", range);
60 #else
61         return format("range %d", range);
62 #endif
63 }
64
65
66 /*
67  * Generate heal info string such as "heal 2d8"
68  */
69 static cptr info_heal(int dice, int sides, int base)
70 {
71 #ifdef JP
72         return info_string_dice("²óÉü:", dice, sides, base);
73 #else
74         return info_string_dice("heal ", dice, sides, base);
75 #endif
76 }
77
78
79 /*
80  * Generate delay info string such as "delay 15+1d15"
81  */
82 static cptr info_delay(int base, int sides)
83 {
84 #ifdef JP
85         return format("ÃÙ±ä:%d+1d%d", base, sides);
86 #else
87         return format("delay %d+1d%d", base, sides);
88 #endif
89 }
90
91
92 /*
93  * Generate multiple-damage info string such as "dam 25 each"
94  */
95 static cptr info_multi_damage(int dam)
96 {
97 #ifdef JP
98         return format("»½ý:³Æ%d", dam);
99 #else
100         return format("dam %d each", dam);
101 #endif
102 }
103
104
105 /*
106  * Generate multiple-damage-dice info string such as "dam 5d2 each"
107  */
108 static cptr info_multi_damage_dice(int dice, int sides)
109 {
110 #ifdef JP
111         return format("»½ý:³Æ%dd%d", dice, sides);
112 #else
113         return format("dam %dd%d each", dice, sides);
114 #endif
115 }
116
117
118 /*
119  * Generate power info string such as "power 100"
120  */
121 static cptr info_power(int power)
122 {
123 #ifdef JP
124         return format("¸úÎÏ:%d", power);
125 #else
126         return format("power %d", power);
127 #endif
128 }
129
130
131 /*
132  * Generate power info string such as "power 1d100"
133  */
134 static cptr info_power_dice(int dice, int sides)
135 {
136 #ifdef JP
137         return format("¸úÎÏ:%dd%d", dice, sides);
138 #else
139         return format("power %dd%d", dice, sides);
140 #endif
141 }
142
143
144 /*
145  * Generate radius info string such as "rad 100"
146  */
147 static cptr info_radius(int rad)
148 {
149 #ifdef JP
150         return format("Ⱦ·Â:%d", rad);
151 #else
152         return format("rad %d", rad);
153 #endif
154 }
155
156
157 /*
158  * Generate weight info string such as "max wgt 15"
159  */
160 static cptr info_weight(int weight)
161 {
162 #ifdef JP
163         return format("ºÇÂç½ÅÎÌ:%d.%dkg", lbtokg1(weight/10), lbtokg2(weight/10));
164 #else
165         return format("max wgt %d", weight/10);
166 #endif
167 }
168
169
170 /*
171  * Prepare standard probability to become beam for fire_bolt_or_beam()
172  */
173 static int beam_chance(void)
174 {
175         if (p_ptr->pclass == CLASS_MAGE)
176                 return p_ptr->lev;
177         if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER)
178                 return p_ptr->lev + 10;
179
180         return p_ptr->lev / 2;
181 }
182
183
184 /*
185  * Handle summoning and failure of trump spells
186  */
187 static bool trump_summoning(int num, bool pet, int y, int x, int lev, int type, u32b mode)
188 {
189         int plev = p_ptr->lev;
190
191         int who;
192         int i;
193         bool success = FALSE;
194
195         /* Default level */
196         if (!lev) lev = plev * 2 / 3 + randint1(plev / 2);
197
198         if (pet)
199         {
200                 /* Become pet */
201                 mode |= PM_FORCE_PET;
202
203                 /* Only sometimes allow unique monster */
204                 if (mode & PM_ALLOW_UNIQUE)
205                 {
206                         /* Forbid often */
207                         if (randint1(50 + plev) >= plev / 10)
208                                 mode &= ~PM_ALLOW_UNIQUE;
209                 }
210
211                 /* Player is who summons */
212                 who = -1;
213         }
214         else
215         {
216                 /* Prevent taming, allow unique monster */
217                 mode |= PM_NO_PET;
218
219                 /* Behave as if they appear by themselfs */
220                 who = 0;
221         }
222
223         for (i = 0; i < num; i++)
224         {
225                 if (summon_specific(who, y, x, lev, type, mode))
226                         success = TRUE;
227         }
228
229         if (!success)
230         {
231 #ifdef JP
232                 msg_print("ï¤â¤¢¤Ê¤¿¤Î¥«¡¼¥É¤Î¸Æ¤ÓÀ¼¤ËÅú¤¨¤Ê¤¤¡£");
233 #else
234                 msg_print("Nobody answers to your Trump call.");
235 #endif
236         }
237
238         return success;
239 }
240
241
242 /*
243  * This spell should become more useful (more controlled) as the
244  * player gains experience levels.  Thus, add 1/5 of the player's
245  * level to the die roll.  This eliminates the worst effects later on,
246  * while keeping the results quite random.  It also allows some potent
247  * effects only at high level.
248  */
249 static void cast_wonder(int dir)
250 {
251         int plev = p_ptr->lev;
252         int die = randint1(100) + plev / 5;
253         int vir = virtue_number(V_CHANCE);
254
255         if (vir)
256         {
257                 if (p_ptr->virtues[vir - 1] > 0)
258                 {
259                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
260                 }
261                 else
262                 {
263                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
264                 }
265         }
266
267         if (die < 26)
268                 chg_virtue(V_CHANCE, 1);
269
270         if (die > 100)
271         {
272 #ifdef JP
273                 msg_print("¤¢¤Ê¤¿¤ÏÎϤ¬¤ß¤Ê¤®¤ë¤Î¤ò´¶¤¸¤¿¡ª");
274 #else
275                 msg_print("You feel a surge of power!");
276 #endif
277         }
278
279         if (die < 8) clone_monster(dir);
280         else if (die < 14) speed_monster(dir);
281         else if (die < 26) heal_monster(dir, damroll(4, 6));
282         else if (die < 31) poly_monster(dir);
283         else if (die < 36)
284                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir,
285                                   damroll(3 + ((plev - 1) / 5), 4));
286         else if (die < 41) confuse_monster(dir, plev);
287         else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
288         else if (die < 51) (void)lite_line(dir);
289         else if (die < 56)
290                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir,
291                                   damroll(3 + ((plev - 5) / 4), 8));
292         else if (die < 61)
293                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir,
294                                   damroll(5 + ((plev - 5) / 4), 8));
295         else if (die < 66)
296                 fire_bolt_or_beam(beam_chance(), GF_ACID, dir,
297                                   damroll(6 + ((plev - 5) / 4), 8));
298         else if (die < 71)
299                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir,
300                                   damroll(8 + ((plev - 5) / 4), 8));
301         else if (die < 76) drain_life(dir, 75);
302         else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
303         else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2);
304         else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3);
305         else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3);
306         else if (die < 101) drain_life(dir, 100 + plev);
307         else if (die < 104)
308         {
309                 earthquake(py, px, 12);
310         }
311         else if (die < 106)
312         {
313                 (void)destroy_area(py, px, 13 + randint0(5), FALSE);
314         }
315         else if (die < 108)
316         {
317                 symbol_genocide(plev+50, TRUE);
318         }
319         else if (die < 110) dispel_monsters(120);
320         else /* RARE */
321         {
322                 dispel_monsters(150);
323                 slow_monsters();
324                 sleep_monsters();
325                 hp_player(300);
326         }
327 }
328
329
330 static void cast_invoke_spirits(int dir)
331 {
332         int plev = p_ptr->lev;
333         int die = randint1(100) + plev / 5;
334         int vir = virtue_number(V_CHANCE);
335
336         if (vir)
337         {
338                 if (p_ptr->virtues[vir - 1] > 0)
339                 {
340                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
341                 }
342                 else
343                 {
344                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
345                 }
346         }
347
348 #ifdef JP
349         msg_print("¤¢¤Ê¤¿¤Ï»à¼Ô¤¿¤Á¤ÎÎϤò¾·½¸¤·¤¿...");
350 #else
351         msg_print("You call on the power of the dead...");
352 #endif
353         if (die < 26)
354                 chg_virtue(V_CHANCE, 1);
355
356         if (die > 100)
357         {
358 #ifdef JP
359                 msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤ÎϤΤ¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
360 #else
361                 msg_print("You feel a surge of eldritch force!");
362 #endif
363         }
364
365
366         if (die < 8)
367         {
368 #ifdef JP
369                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¤¢¤Ê¤¿¤Î¼þ¤ê¤ÎÃÏÌ̤«¤éµà¤Á¤¿¿Í±Æ¤¬Î©¤Á¾å¤¬¤Ã¤Æ¤­¤¿¡ª");
370 #else
371                 msg_print("Oh no! Mouldering forms rise from the earth around you!");
372 #endif
373
374                 (void)summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
375                 chg_virtue(V_UNLIFE, 1);
376         }
377         else if (die < 14)
378         {
379 #ifdef JP
380                 msg_print("̾¾õ¤·Æñ¤¤¼Ù°­¤Ê¸ºß¤¬¤¢¤Ê¤¿¤Î¿´¤òÄ̤ê²á¤®¤Æ¹Ô¤Ã¤¿...");
381 #else
382                 msg_print("An unnamable evil brushes against your mind...");
383 #endif
384
385                 set_afraid(p_ptr->afraid + randint1(4) + 4);
386         }
387         else if (die < 26)
388         {
389 #ifdef JP
390                 msg_print("¤¢¤Ê¤¿¤ÎƬ¤ËÂçÎ̤ÎÍ©Î¤Á¤ÎÁû¡¹¤·¤¤À¼¤¬²¡¤·´ó¤»¤Æ¤­¤¿...");
391 #else
392                 msg_print("Your head is invaded by a horde of gibbering spectral voices...");
393 #endif
394
395                 set_confused(p_ptr->confused + randint1(4) + 4);
396         }
397         else if (die < 31)
398         {
399                 poly_monster(dir);
400         }
401         else if (die < 36)
402         {
403                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir,
404                                   damroll(3 + ((plev - 1) / 5), 4));
405         }
406         else if (die < 41)
407         {
408                 confuse_monster (dir, plev);
409         }
410         else if (die < 46)
411         {
412                 fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
413         }
414         else if (die < 51)
415         {
416                 (void)lite_line(dir);
417         }
418         else if (die < 56)
419         {
420                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir,
421                                   damroll(3+((plev-5)/4),8));
422         }
423         else if (die < 61)
424         {
425                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir,
426                                   damroll(5+((plev-5)/4),8));
427         }
428         else if (die < 66)
429         {
430                 fire_bolt_or_beam(beam_chance(), GF_ACID, dir,
431                                   damroll(6+((plev-5)/4),8));
432         }
433         else if (die < 71)
434         {
435                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir,
436                                   damroll(8+((plev-5)/4),8));
437         }
438         else if (die < 76)
439         {
440                 drain_life(dir, 75);
441         }
442         else if (die < 81)
443         {
444                 fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
445         }
446         else if (die < 86)
447         {
448                 fire_ball(GF_ACID, dir, 40 + plev, 2);
449         }
450         else if (die < 91)
451         {
452                 fire_ball(GF_ICE, dir, 70 + plev, 3);
453         }
454         else if (die < 96)
455         {
456                 fire_ball(GF_FIRE, dir, 80 + plev, 3);
457         }
458         else if (die < 101)
459         {
460                 drain_life(dir, 100 + plev);
461         }
462         else if (die < 104)
463         {
464                 earthquake(py, px, 12);
465         }
466         else if (die < 106)
467         {
468                 (void)destroy_area(py, px, 13 + randint0(5), FALSE);
469         }
470         else if (die < 108)
471         {
472                 symbol_genocide(plev+50, TRUE);
473         }
474         else if (die < 110)
475         {
476                 dispel_monsters(120);
477         }
478         else
479         { /* RARE */
480                 dispel_monsters(150);
481                 slow_monsters();
482                 sleep_monsters();
483                 hp_player(300);
484         }
485
486         if (die < 31)
487         {
488 #ifdef JP
489                 msg_print("±¢±µ¤ÊÀ¼¤¬¥¯¥¹¥¯¥¹¾Ð¤¦¡£¡Ö¤â¤¦¤¹¤°¤ª¤Þ¤¨¤Ï²æ¡¹¤ÎÃç´Ö¤Ë¤Ê¤ë¤À¤í¤¦¡£¼å¤­¼Ô¤è¡£¡×");
490 #else
491                 msg_print("Sepulchral voices chuckle. 'Soon you will join us, mortal.'");
492 #endif
493         }
494 }
495
496
497 static void wild_magic(int spell)
498 {
499         int counter = 0;
500         int type = SUMMON_BIZARRE1 + randint0(6);
501
502         if (type < SUMMON_BIZARRE1) type = SUMMON_BIZARRE1;
503         else if (type > SUMMON_BIZARRE6) type = SUMMON_BIZARRE6;
504
505         switch (randint1(spell) + randint1(8) + 1)
506         {
507         case 1:
508         case 2:
509         case 3:
510                 teleport_player(10, TELEPORT_PASSIVE);
511                 break;
512         case 4:
513         case 5:
514         case 6:
515                 teleport_player(100, TELEPORT_PASSIVE);
516                 break;
517         case 7:
518         case 8:
519                 teleport_player(200, TELEPORT_PASSIVE);
520                 break;
521         case 9:
522         case 10:
523         case 11:
524                 unlite_area(10, 3);
525                 break;
526         case 12:
527         case 13:
528         case 14:
529                 lite_area(damroll(2, 3), 2);
530                 break;
531         case 15:
532                 destroy_doors_touch();
533                 break;
534         case 16: case 17:
535                 wall_breaker();
536         case 18:
537                 sleep_monsters_touch();
538                 break;
539         case 19:
540         case 20:
541                 trap_creation(py, px);
542                 break;
543         case 21:
544         case 22:
545                 door_creation();
546                 break;
547         case 23:
548         case 24:
549         case 25:
550                 aggravate_monsters(0);
551                 break;
552         case 26:
553                 earthquake(py, px, 5);
554                 break;
555         case 27:
556         case 28:
557                 (void)gain_random_mutation(0);
558                 break;
559         case 29:
560         case 30:
561                 apply_disenchant(1);
562                 break;
563         case 31:
564                 lose_all_info();
565                 break;
566         case 32:
567                 fire_ball(GF_CHAOS, 0, spell + 5, 1 + (spell / 10));
568                 break;
569         case 33:
570                 wall_stone();
571                 break;
572         case 34:
573         case 35:
574                 while (counter++ < 8)
575                 {
576                         (void)summon_specific(0, py, px, (dun_level * 3) / 2, type, (PM_ALLOW_GROUP | PM_NO_PET));
577                 }
578                 break;
579         case 36:
580         case 37:
581                 activate_hi_summon(py, px, FALSE);
582                 break;
583         case 38:
584                 (void)summon_cyber(-1, py, px);
585                 break;
586         default:
587                 {
588                         int count = 0;
589                         (void)activate_ty_curse(FALSE, &count);
590                         break;
591                 }
592         }
593 }
594
595
596 static void cast_shuffle(void)
597 {
598         int plev = p_ptr->lev;
599         int dir;
600         int die;
601         int vir = virtue_number(V_CHANCE);
602         int i;
603
604         /* Card sharks and high mages get a level bonus */
605         if ((p_ptr->pclass == CLASS_ROGUE) ||
606             (p_ptr->pclass == CLASS_HIGH_MAGE) ||
607             (p_ptr->pclass == CLASS_SORCERER))
608                 die = (randint1(110)) + plev / 5;
609         else
610                 die = randint1(120);
611
612
613         if (vir)
614         {
615                 if (p_ptr->virtues[vir - 1] > 0)
616                 {
617                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
618                 }
619                 else
620                 {
621                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
622                 }
623         }
624
625 #ifdef JP
626         msg_print("¤¢¤Ê¤¿¤Ï¥«¡¼¥É¤òÀڤäưìËç°ú¤¤¤¿...");
627 #else
628         msg_print("You shuffle the deck and draw a card...");
629 #endif
630
631         if (die < 30)
632                 chg_virtue(V_CHANCE, 1);
633
634         if (die < 7)
635         {
636 #ifdef JP
637                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô»à¡Õ¤À¡ª");
638 #else
639                 msg_print("Oh no! It's Death!");
640 #endif
641
642                 for (i = 0; i < randint1(3); i++)
643                         activate_hi_summon(py, px, FALSE);
644         }
645         else if (die < 14)
646         {
647 #ifdef JP
648                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô°­Ëâ¡Õ¤À¡ª");
649 #else
650                 msg_print("Oh no! It's the Devil!");
651 #endif
652
653                 summon_specific(0, py, px, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
654         }
655         else if (die < 18)
656         {
657                 int count = 0;
658 #ifdef JP
659                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡ÔÄߤé¤ì¤¿ÃË¡Õ¤À¡ª");
660 #else
661                 msg_print("Oh no! It's the Hanged Man.");
662 #endif
663
664                 activate_ty_curse(FALSE, &count);
665         }
666         else if (die < 22)
667         {
668 #ifdef JP
669                 msg_print("¡ÔÉÔĴϤηõ¡Õ¤À¡£");
670 #else
671                 msg_print("It's the swords of discord.");
672 #endif
673
674                 aggravate_monsters(0);
675         }
676         else if (die < 26)
677         {
678 #ifdef JP
679                 msg_print("¡Ô¶ò¼Ô¡Õ¤À¡£");
680 #else
681                 msg_print("It's the Fool.");
682 #endif
683
684                 do_dec_stat(A_INT);
685                 do_dec_stat(A_WIS);
686         }
687         else if (die < 30)
688         {
689 #ifdef JP
690                 msg_print("´ñ̯¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
691 #else
692                 msg_print("It's the picture of a strange monster.");
693 #endif
694
695                 trump_summoning(1, FALSE, py, px, (dun_level * 3 / 2), (32 + randint1(6)), PM_ALLOW_GROUP | PM_ALLOW_UNIQUE);
696         }
697         else if (die < 33)
698         {
699 #ifdef JP
700                 msg_print("¡Ô·î¡Õ¤À¡£");
701 #else
702                 msg_print("It's the Moon.");
703 #endif
704
705                 unlite_area(10, 3);
706         }
707         else if (die < 38)
708         {
709 #ifdef JP
710                 msg_print("¡Ô±¿Ì¿¤ÎÎØ¡Õ¤À¡£");
711 #else
712                 msg_print("It's the Wheel of Fortune.");
713 #endif
714
715                 wild_magic(randint0(32));
716         }
717         else if (die < 40)
718         {
719 #ifdef JP
720                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
721 #else
722                 msg_print("It's a teleport trump card.");
723 #endif
724
725                 teleport_player(10, TELEPORT_PASSIVE);
726         }
727         else if (die < 42)
728         {
729 #ifdef JP
730                 msg_print("¡ÔÀµµÁ¡Õ¤À¡£");
731 #else
732                 msg_print("It's Justice.");
733 #endif
734
735                 set_blessed(p_ptr->lev, FALSE);
736         }
737         else if (die < 47)
738         {
739 #ifdef JP
740                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
741 #else
742                 msg_print("It's a teleport trump card.");
743 #endif
744
745                 teleport_player(100, TELEPORT_PASSIVE);
746         }
747         else if (die < 52)
748         {
749 #ifdef JP
750                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
751 #else
752                 msg_print("It's a teleport trump card.");
753 #endif
754
755                 teleport_player(200, TELEPORT_PASSIVE);
756         }
757         else if (die < 60)
758         {
759 #ifdef JP
760                 msg_print("¡ÔÅã¡Õ¤À¡£");
761 #else
762                 msg_print("It's the Tower.");
763 #endif
764
765                 wall_breaker();
766         }
767         else if (die < 72)
768         {
769 #ifdef JP
770                 msg_print("¡ÔÀáÀ©¡Õ¤À¡£");
771 #else
772                 msg_print("It's Temperance.");
773 #endif
774
775                 sleep_monsters_touch();
776         }
777         else if (die < 80)
778         {
779 #ifdef JP
780                 msg_print("¡ÔÅã¡Õ¤À¡£");
781 #else
782                 msg_print("It's the Tower.");
783 #endif
784
785                 earthquake(py, px, 5);
786         }
787         else if (die < 82)
788         {
789 #ifdef JP
790                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
791 #else
792                 msg_print("It's the picture of a friendly monster.");
793 #endif
794
795                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE1, 0L);
796         }
797         else if (die < 84)
798         {
799 #ifdef JP
800                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
801 #else
802                 msg_print("It's the picture of a friendly monster.");
803 #endif
804
805                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE2, 0L);
806         }
807         else if (die < 86)
808         {
809 #ifdef JP
810                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
811 #else
812                 msg_print("It's the picture of a friendly monster.");
813 #endif
814
815                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE4, 0L);
816         }
817         else if (die < 88)
818         {
819 #ifdef JP
820                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
821 #else
822                 msg_print("It's the picture of a friendly monster.");
823 #endif
824
825                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE5, 0L);
826         }
827         else if (die < 96)
828         {
829 #ifdef JP
830                 msg_print("¡ÔÎø¿Í¡Õ¤À¡£");
831 #else
832                 msg_print("It's the Lovers.");
833 #endif
834
835                 if (get_aim_dir(&dir))
836                         charm_monster(dir, MIN(p_ptr->lev, 20));
837         }
838         else if (die < 101)
839         {
840 #ifdef JP
841                 msg_print("¡Ô±£¼Ô¡Õ¤À¡£");
842 #else
843                 msg_print("It's the Hermit.");
844 #endif
845
846                 wall_stone();
847         }
848         else if (die < 111)
849         {
850 #ifdef JP
851                 msg_print("¡Ô¿³È½¡Õ¤À¡£");
852 #else
853                 msg_print("It's the Judgement.");
854 #endif
855
856                 do_cmd_rerate(FALSE);
857                 if (p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3)
858                 {
859 #ifdef JP
860                         msg_print("Á´¤Æ¤ÎÆÍÁ³ÊÑ°Û¤¬¼£¤Ã¤¿¡£");
861 #else
862                         msg_print("You are cured of all mutations.");
863 #endif
864
865                         p_ptr->muta1 = p_ptr->muta2 = p_ptr->muta3 = 0;
866                         p_ptr->update |= PU_BONUS;
867                         handle_stuff();
868                 }
869         }
870         else if (die < 120)
871         {
872 #ifdef JP
873                 msg_print("¡ÔÂÀÍÛ¡Õ¤À¡£");
874 #else
875                 msg_print("It's the Sun.");
876 #endif
877
878                 chg_virtue(V_KNOWLEDGE, 1);
879                 chg_virtue(V_ENLIGHTEN, 1);
880                 wiz_lite(FALSE);
881         }
882         else
883         {
884 #ifdef JP
885                 msg_print("¡ÔÀ¤³¦¡Õ¤À¡£");
886 #else
887                 msg_print("It's the World.");
888 #endif
889
890                 if (p_ptr->exp < PY_MAX_EXP)
891                 {
892                         s32b ee = (p_ptr->exp / 25) + 1;
893                         if (ee > 5000) ee = 5000;
894 #ifdef JP
895                         msg_print("¹¹¤Ë·Ð¸³¤òÀѤó¤À¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
896 #else
897                         msg_print("You feel more experienced.");
898 #endif
899
900                         gain_exp(ee);
901                 }
902         }
903 }
904
905
906 /*
907  * Drop 10+1d10 meteor ball at random places near the player
908  */
909 static void cast_meteor(int dam, int rad)
910 {
911         int i;
912         int b = 10 + randint1(10);
913
914         for (i = 0; i < b; i++)
915         {
916                 int y, x;
917                 int count;
918
919                 for (count = 0; count <= 20; count++)
920                 {
921                         int dy, dx, d;
922
923                         x = px - 8 + randint0(17);
924                         y = py - 8 + randint0(17);
925
926                         dx = (px > x) ? (px - x) : (x - px);
927                         dy = (py > y) ? (py - y) : (y - py);
928
929                         /* Approximate distance */
930                         d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
931
932                         if (d >= 9) continue;
933
934                         if (!in_bounds(y, x) || !projectable(py, px, y, x)) continue;
935
936                         /* Valid position */
937                         break;
938                 }
939
940                 if (count > 20) continue;
941
942                 project(0, rad, y, x, dam, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
943         }
944 }
945
946
947 /*
948  * Drop 10+1d10 disintegration ball at random places near the target
949  */
950 static bool cast_wrath_of_the_god(int dam, int rad)
951 {
952         int x, y, tx, ty;
953         int nx, ny;
954         int dir, i;
955         int b = 10 + randint1(10);
956
957         if (!get_aim_dir(&dir)) return FALSE;
958
959         /* Use the given direction */
960         tx = px + 99 * ddx[dir];
961         ty = py + 99 * ddy[dir];
962
963         /* Hack -- Use an actual "target" */
964         if ((dir == 5) && target_okay())
965         {
966                 tx = target_col;
967                 ty = target_row;
968         }
969
970         x = px;
971         y = py;
972
973         while (1)
974         {
975                 /* Hack -- Stop at the target */
976                 if ((y == ty) && (x == tx)) break;
977
978                 ny = y;
979                 nx = x;
980                 mmove2(&ny, &nx, py, px, ty, tx);
981
982                 /* Stop at maximum range */
983                 if (MAX_RANGE <= distance(py, px, ny, nx)) break;
984
985                 /* Stopped by walls/doors */
986                 if (!cave_have_flag_bold(ny, nx, FF_PROJECT)) break;
987
988                 /* Stopped by monsters */
989                 if ((dir != 5) && cave[ny][nx].m_idx != 0) break;
990
991                 /* Save the new location */
992                 x = nx;
993                 y = ny;
994         }
995         tx = x;
996         ty = y;
997
998         for (i = 0; i < b; i++)
999         {
1000                 int count = 20, d = 0;
1001
1002                 while (count--)
1003                 {
1004                         int dx, dy;
1005
1006                         x = tx - 5 + randint0(11);
1007                         y = ty - 5 + randint0(11);
1008
1009                         dx = (tx > x) ? (tx - x) : (x - tx);
1010                         dy = (ty > y) ? (ty - y) : (y - ty);
1011
1012                         /* Approximate distance */
1013                         d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
1014                         /* Within the radius */
1015                         if (d < 5) break;
1016                 }
1017
1018                 if (count < 0) continue;
1019
1020                 /* Cannot penetrate perm walls */
1021                 if (!in_bounds(y,x) ||
1022                     cave_stop_disintegration(y,x) ||
1023                     !in_disintegration_range(ty, tx, y, x))
1024                         continue;
1025
1026                 project(0, rad, y, x, dam, GF_DISINTEGRATE, PROJECT_JUMP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1);
1027         }
1028
1029         return TRUE;
1030 }
1031
1032
1033 /*
1034  * An "item_tester_hook" for offer
1035  */
1036 static bool item_tester_offer(object_type *o_ptr)
1037 {
1038         /* Flasks of oil are okay */
1039         if (o_ptr->tval != TV_CORPSE) return (FALSE);
1040
1041         if (o_ptr->sval != SV_CORPSE) return (FALSE);
1042
1043         if (my_strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
1044
1045         /* Assume not okay */
1046         return (FALSE);
1047 }
1048
1049
1050 /*
1051  * Daemon spell Summon Greater Demon
1052  */
1053 static bool cast_summon_greater_demon(void)
1054 {
1055         int plev = p_ptr->lev;
1056         int item;
1057         cptr q, s;
1058         int summon_lev;
1059         object_type *o_ptr;
1060
1061         item_tester_hook = item_tester_offer;
1062 #ifdef JP
1063         q = "¤É¤Î»àÂΤòÊû¤²¤Þ¤¹¤«? ";
1064         s = "Êû¤²¤é¤ì¤ë»àÂΤò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
1065 #else
1066         q = "Sacrifice which corpse? ";
1067         s = "You have nothing to scrifice.";
1068 #endif
1069         if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
1070
1071         /* Get the item (in the pack) */
1072         if (item >= 0)
1073         {
1074                 o_ptr = &inventory[item];
1075         }
1076
1077         /* Get the item (on the floor) */
1078         else
1079         {
1080                 o_ptr = &o_list[0 - item];
1081         }
1082
1083         summon_lev = plev * 2 / 3 + r_info[o_ptr->pval].level;
1084
1085         if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET)))
1086         {
1087 #ifdef JP
1088                 msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
1089 #else
1090                 msg_print("The area fills with a stench of sulphur and brimstone.");
1091 #endif
1092
1093
1094 #ifdef JP
1095                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
1096 #else
1097                 msg_print("'What is thy bidding... Master?'");
1098 #endif
1099
1100                 /* Decrease the item (from the pack) */
1101                 if (item >= 0)
1102                 {
1103                         inven_item_increase(item, -1);
1104                         inven_item_describe(item);
1105                         inven_item_optimize(item);
1106                 }
1107
1108                 /* Decrease the item (from the floor) */
1109                 else
1110                 {
1111                         floor_item_increase(0 - item, -1);
1112                         floor_item_describe(0 - item);
1113                         floor_item_optimize(0 - item);
1114                 }
1115         }
1116         else
1117         {
1118 #ifdef JP
1119                 msg_print("°­Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
1120 #else
1121                 msg_print("No Greater Demon arrive.");
1122 #endif
1123         }
1124
1125         return TRUE;
1126 }
1127
1128
1129 /*
1130  * Start singing if the player is a Bard 
1131  */
1132 static void start_singing(int spell, int song)
1133 {
1134         /* Remember the song index */
1135         p_ptr->magic_num1[0] = song;
1136
1137         /* Remember the index of the spell which activated the song */
1138         p_ptr->magic_num2[0] = spell;
1139
1140
1141         /* Now the player is singing */
1142         set_action(ACTION_SING);
1143
1144
1145         /* Recalculate bonuses */
1146         p_ptr->update |= (PU_BONUS);
1147
1148         /* Redraw status bar */
1149         p_ptr->redraw |= (PR_STATUS);
1150 }
1151
1152
1153 /*
1154  * Stop singing if the player is a Bard 
1155  */
1156 void stop_singing(void)
1157 {
1158         if (p_ptr->pclass != CLASS_BARD) return;
1159
1160         /* Are there interupted song? */
1161         if (p_ptr->magic_num1[1])
1162         {
1163                 /* Forget interupted song */
1164                 p_ptr->magic_num1[1] = 0;
1165                 return;
1166         }
1167
1168         /* The player is singing? */
1169         if (!p_ptr->magic_num1[0]) return;
1170
1171         /* Hack -- if called from set_action(), avoid recursive loop */
1172         if (p_ptr->action == ACTION_SING) set_action(ACTION_NONE);
1173
1174         /* Message text of each song or etc. */
1175         do_spell(REALM_MUSIC, p_ptr->magic_num2[0], SPELL_STOP);
1176
1177         p_ptr->magic_num1[0] = MUSIC_NONE;
1178         p_ptr->magic_num2[0] = 0;
1179
1180         /* Recalculate bonuses */
1181         p_ptr->update |= (PU_BONUS);
1182
1183         /* Redraw status bar */
1184         p_ptr->redraw |= (PR_STATUS);
1185 }
1186
1187
1188 static cptr do_life_spell(int spell, int mode)
1189 {
1190         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
1191         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
1192         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
1193         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
1194
1195         int dir;
1196         int plev = p_ptr->lev;
1197
1198         switch (spell)
1199         {
1200         case 0:
1201 #ifdef JP
1202                 if (name) return "·Ú½ý¤Î¼£Ìþ";
1203                 if (desc) return "²ø²æ¤ÈÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
1204 #else
1205                 if (name) return "Cure Light Wounds";
1206                 if (desc) return "Heals cut and HP a little.";
1207 #endif
1208     
1209                 {
1210                         int dice = 2;
1211                         int sides = 10;
1212
1213                         if (info) return info_heal(dice, sides, 0);
1214
1215                         if (cast)
1216                         {
1217                                 hp_player(damroll(dice, sides));
1218                                 set_cut(p_ptr->cut - 10);
1219                         }
1220                 }
1221                 break;
1222
1223         case 1:
1224 #ifdef JP
1225                 if (name) return "½ËÊ¡";
1226                 if (desc) return "°ìÄê»þ´Ö¡¢Ì¿ÃæΨ¤ÈAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
1227 #else
1228                 if (name) return "Bless";
1229                 if (desc) return "Gives bonus to hit and AC for a few turns.";
1230 #endif
1231     
1232                 {
1233                         int base = 12;
1234
1235                         if (info) return info_duration(base, base);
1236
1237                         if (cast)
1238                         {
1239                                 set_blessed(randint1(base) + base, FALSE);
1240                         }
1241                 }
1242                 break;
1243
1244         case 2:
1245 #ifdef JP
1246                 if (name) return "·Ú½ý";
1247                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤Ë¾®¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1248 #else
1249                 if (name) return "Cause Light Wounds";
1250                 if (desc) return "Wounds a monster a little unless resisted.";
1251 #endif
1252     
1253                 {
1254                         int dice = 3 + (plev - 1) / 5;
1255                         int sides = 4;
1256
1257                         if (info) return info_damage(dice, sides, 0);
1258
1259                         if (cast)
1260                         {
1261                                 if (!get_aim_dir(&dir)) return NULL;
1262                                 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
1263                         }
1264                 }
1265                 break;
1266
1267         case 3:
1268 #ifdef JP
1269                 if (name) return "¸÷¤Î¾¤´­";
1270                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
1271 #else
1272                 if (name) return "Call Light";
1273                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
1274 #endif
1275     
1276                 {
1277                         int dice = 2;
1278                         int sides = plev / 2;
1279                         int rad = plev / 10 + 1;
1280
1281                         if (info) return info_damage(dice, sides, 0);
1282
1283                         if (cast)
1284                         {
1285                                 lite_area(damroll(dice, sides), rad);
1286                         }
1287                 }
1288                 break;
1289
1290         case 4:
1291 #ifdef JP
1292                 if (name) return "æ« & ±£¤·Èâ´¶ÃÎ";
1293                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤È³¬Ãʤò´¶ÃΤ¹¤ë¡£";
1294 #else
1295                 if (name) return "Detect Doors & Traps";
1296                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
1297 #endif
1298     
1299                 {
1300                         int rad = DETECT_RAD_DEFAULT;
1301
1302                         if (info) return info_radius(rad);
1303
1304                         if (cast)
1305                         {
1306                                 detect_traps(rad, TRUE);
1307                                 detect_doors(rad);
1308                                 detect_stairs(rad);
1309                         }
1310                 }
1311                 break;
1312
1313         case 5:
1314 #ifdef JP
1315                 if (name) return "½Å½ý¤Î¼£Ìþ";
1316                 if (desc) return "²ø²æ¤ÈÂÎÎϤòÃæÄøÅÙ²óÉü¤µ¤»¤ë¡£";
1317 #else
1318                 if (name) return "Cure Medium Wounds";
1319                 if (desc) return "Heals cut and HP more.";
1320 #endif
1321     
1322                 {
1323                         int dice = 4;
1324                         int sides = 10;
1325
1326                         if (info) return info_heal(dice, sides, 0);
1327
1328                         if (cast)
1329                         {
1330                                 hp_player(damroll(dice, sides));
1331                                 set_cut((p_ptr->cut / 2) - 20);
1332                         }
1333                 }
1334                 break;
1335
1336         case 6:
1337 #ifdef JP
1338                 if (name) return "²òÆÇ";
1339                 if (desc) return "ÂÎÆâ¤ÎÆǤò¼è¤ê½ü¤¯¡£";
1340 #else
1341                 if (name) return "Cure Poison";
1342                 if (desc) return "Cure poison status.";
1343 #endif
1344     
1345                 {
1346                         if (cast)
1347                         {
1348                                 set_poisoned(0);
1349                         }
1350                 }
1351                 break;
1352
1353         case 7:
1354 #ifdef JP
1355                 if (name) return "¶õÊ¢½¼Â­";
1356                 if (desc) return "ËþÊ¢¤Ë¤¹¤ë¡£";
1357 #else
1358                 if (name) return "Satisfy Hunger";
1359                 if (desc) return "Satisfies hunger.";
1360 #endif
1361     
1362                 {
1363                         if (cast)
1364                         {
1365                                 set_food(PY_FOOD_MAX - 1);
1366                         }
1367                 }
1368                 break;
1369
1370         case 8:
1371 #ifdef JP
1372                 if (name) return "²ò¼ö";
1373                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
1374 #else
1375                 if (name) return "Remove Curse";
1376                 if (desc) return "Removes normal curses from equipped items.";
1377 #endif
1378
1379                 {
1380                         if (cast)
1381                         {
1382                                 if (remove_curse())
1383                                 {
1384 #ifdef JP
1385                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1386 #else
1387                                         msg_print("You feel as if someone is watching over you.");
1388 #endif
1389                                 }
1390                         }
1391                 }
1392                 break;
1393
1394         case 9:
1395 #ifdef JP
1396                 if (name) return "½Å½ý";
1397                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ËÃæ¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1398 #else
1399                 if (name) return "Cause Medium Wounds";
1400                 if (desc) return "Wounds a monster unless resisted.";
1401 #endif
1402     
1403                 {
1404                         int sides = 8 + (plev - 5) / 4;
1405                         int dice = 8;
1406
1407                         if (info) return info_damage(dice, sides, 0);
1408
1409                         if (cast)
1410                         {
1411                                 if (!get_aim_dir(&dir)) return NULL;
1412                                 fire_ball_hide(GF_WOUNDS, dir, damroll(sides, dice), 0);
1413                         }
1414                 }
1415                 break;
1416
1417         case 10:
1418 #ifdef JP
1419                 if (name) return "Ã×Ì¿½ý¤Î¼£Ìþ";
1420                 if (desc) return "ÂÎÎϤòÂçÉý¤Ë²óÉü¤µ¤»¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1421 #else
1422                 if (name) return "Cure Critical Wounds";
1423                 if (desc) return "Heals cut, stun and HP greatly.";
1424 #endif
1425     
1426                 {
1427                         int dice = 8;
1428                         int sides = 10;
1429
1430                         if (info) return info_heal(dice, sides, 0);
1431
1432                         if (cast)
1433                         {
1434                                 hp_player(damroll(dice, sides));
1435                                 set_stun(0);
1436                                 set_cut(0);
1437                         }
1438                 }
1439                 break;
1440
1441         case 11:
1442 #ifdef JP
1443                 if (name) return "ÂÑÇ®ÂÑ´¨";
1444                 if (desc) return "°ìÄê»þ´Ö¡¢²Ð±ê¤ÈÎ䵤¤ËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
1445 #else
1446                 if (name) return "Resist Heat and Cold";
1447                 if (desc) return "Gives resistance to fire and cold. These resistances can be added to which from equipment for more powerful resistances.";
1448 #endif
1449     
1450                 {
1451                         int base = 20;
1452
1453                         if (info) return info_duration(base, base);
1454
1455                         if (cast)
1456                         {
1457                                 set_oppose_cold(randint1(base) + base, FALSE);
1458                                 set_oppose_fire(randint1(base) + base, FALSE);
1459                         }
1460                 }
1461                 break;
1462
1463         case 12:
1464 #ifdef JP
1465                 if (name) return "¼þÊÕ´¶ÃÎ";
1466                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
1467 #else
1468                 if (name) return "Sense Surroundings";
1469                 if (desc) return "Maps nearby area.";
1470 #endif
1471     
1472                 {
1473                         int rad = DETECT_RAD_MAP;
1474
1475                         if (info) return info_radius(rad);
1476
1477                         if (cast)
1478                         {
1479                                 map_area(rad);
1480                         }
1481                 }
1482                 break;
1483
1484         case 13:
1485 #ifdef JP
1486                 if (name) return "¥Ñ¥Ë¥Ã¥¯¡¦¥¢¥ó¥Ç¥Ã¥É";
1487                 if (desc) return "»ë³¦Æâ¤Î¥¢¥ó¥Ç¥Ã¥É¤ò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1488 #else
1489                 if (name) return "Turn Undead";
1490                 if (desc) return "Attempts to scare undead monsters in sight.";
1491 #endif
1492     
1493                 {
1494                         if (cast)
1495                         {
1496                                 turn_undead();
1497                         }
1498                 }
1499                 break;
1500
1501         case 14:
1502 #ifdef JP
1503                 if (name) return "ÂÎÎϲóÉü";
1504                 if (desc) return "¶Ë¤á¤Æ¶¯ÎϤʲóÉü¼öʸ¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1505 #else
1506                 if (name) return "Healing";
1507                 if (desc) return "Much powerful healing magic, and heals cut and stun completely.";
1508 #endif
1509     
1510                 {
1511                         int heal = 300;
1512
1513                         if (info) return info_heal(0, 0, heal);
1514
1515                         if (cast)
1516                         {
1517                                 hp_player(heal);
1518                                 set_stun(0);
1519                                 set_cut(0);
1520                         }
1521                 }
1522                 break;
1523
1524         case 15:
1525 #ifdef JP
1526                 if (name) return "·ë³¦¤ÎÌæ¾Ï";
1527                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
1528 #else
1529                 if (name) return "Glyph of Warding";
1530                 if (desc) return "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph.";
1531 #endif
1532     
1533                 {
1534                         if (cast)
1535                         {
1536                                 warding_glyph();
1537                         }
1538                 }
1539                 break;
1540
1541         case 16:
1542 #ifdef JP
1543                 if (name) return "*²ò¼ö*";
1544                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
1545 #else
1546                 if (name) return "Dispel Curse";
1547                 if (desc) return "Removes normal and heavy curse from equipped items.";
1548 #endif
1549     
1550                 {
1551                         if (cast)
1552                         {
1553                                 if (remove_all_curse())
1554                                 {
1555 #ifdef JP
1556                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1557 #else
1558                                         msg_print("You feel as if someone is watching over you.");
1559 #endif
1560                                 }
1561                         }
1562                 }
1563                 break;
1564
1565         case 17:
1566 #ifdef JP
1567                 if (name) return "´Õ¼±";
1568                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
1569 #else
1570                 if (name) return "Perception";
1571                 if (desc) return "Identifies an item.";
1572 #endif
1573     
1574                 {
1575                         if (cast)
1576                         {
1577                                 if (!ident_spell(FALSE)) return NULL;
1578                         }
1579                 }
1580                 break;
1581
1582         case 18:
1583 #ifdef JP
1584                 if (name) return "¥¢¥ó¥Ç¥Ã¥ÉÂ໶";
1585                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥É¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
1586 #else
1587                 if (name) return "Dispel Undead";
1588                 if (desc) return "Damages all undead monsters in sight.";
1589 #endif
1590     
1591                 {
1592                         int dice = 1;
1593                         int sides = plev * 5;
1594
1595                         if (info) return info_damage(dice, sides, 0);
1596
1597                         if (cast)
1598                         {
1599                                 dispel_undead(damroll(dice, sides));
1600                         }
1601                 }
1602                 break;
1603
1604         case 19:
1605 #ifdef JP
1606                 if (name) return "Æä¤Î¹ï";
1607                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1608 #else
1609                 if (name) return "Day of the Dove";
1610                 if (desc) return "Attempts to charm all monsters in sight.";
1611 #endif
1612     
1613                 {
1614                         int power = plev * 2;
1615
1616                         if (info) return info_power(power);
1617
1618                         if (cast)
1619                         {
1620                                 charm_monsters(power);
1621                         }
1622                 }
1623                 break;
1624
1625         case 20:
1626 #ifdef JP
1627                 if (name) return "Ã×Ì¿½ý";
1628                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1629 #else
1630                 if (name) return "Cause Critical Wounds";
1631                 if (desc) return "Wounds a monster critically unless resisted.";
1632 #endif
1633     
1634                 {
1635                         int dice = 5 + (plev - 5) / 3;
1636                         int sides = 15;
1637
1638                         if (info) return info_damage(dice, sides, 0);
1639
1640                         if (cast)
1641                         {
1642                                 if (!get_aim_dir(&dir)) return NULL;
1643                                 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
1644                         }
1645                 }
1646                 break;
1647
1648         case 21:
1649 #ifdef JP
1650                 if (name) return "µ¢´Ô¤Î¾Û";
1651                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
1652 #else
1653                 if (name) return "Word of Recall";
1654                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
1655 #endif
1656     
1657                 {
1658                         int base = 15;
1659                         int sides = 20;
1660
1661                         if (info) return info_delay(base, sides);
1662
1663                         if (cast)
1664                         {
1665                                 if (!word_of_recall()) return NULL;
1666                         }
1667                 }
1668                 break;
1669
1670         case 22:
1671 #ifdef JP
1672                 if (name) return "¿¿¼Â¤Îº×ÃÅ";
1673                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
1674 #else
1675                 if (name) return "Alter Reality";
1676                 if (desc) return "Recreates current dungeon level.";
1677 #endif
1678     
1679                 {
1680                         int base = 15;
1681                         int sides = 20;
1682
1683                         if (info) return info_delay(base, sides);
1684
1685                         if (cast)
1686                         {
1687                                 alter_reality();
1688                         }
1689                 }
1690                 break;
1691
1692         case 23:
1693 #ifdef JP
1694                 if (name) return "¿¿¡¦·ë³¦";
1695                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤È¼þ°Ï8¥Þ¥¹¤Î¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
1696 #else
1697                 if (name) return "Warding True";
1698                 if (desc) return "Creates glyphs in all adjacent squares and under you.";
1699 #endif
1700     
1701                 {
1702                         int rad = 1;
1703
1704                         if (info) return info_radius(rad);
1705
1706                         if (cast)
1707                         {
1708                                 warding_glyph();
1709                                 glyph_creation();
1710                         }
1711                 }
1712                 break;
1713
1714         case 24:
1715 #ifdef JP
1716                 if (name) return "ÉÔÌÓ²½";
1717                 if (desc) return "¤³¤Î³¬¤ÎÁý¿£¤¹¤ë¥â¥ó¥¹¥¿¡¼¤¬Áý¿£¤Ç¤­¤Ê¤¯¤Ê¤ë¡£";
1718 #else
1719                 if (name) return "Sterilization";
1720                 if (desc) return "Prevents any breeders on current level from breeding.";
1721 #endif
1722     
1723                 {
1724                         if (cast)
1725                         {
1726                                 num_repro += MAX_REPRO;
1727                         }
1728                 }
1729                 break;
1730
1731         case 25:
1732 #ifdef JP
1733                 if (name) return "Á´´¶ÃÎ";
1734                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
1735 #else
1736                 if (name) return "Detection";
1737                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
1738 #endif
1739
1740                 {
1741                         int rad = DETECT_RAD_DEFAULT;
1742
1743                         if (info) return info_radius(rad);
1744
1745                         if (cast)
1746                         {
1747                                 detect_all(rad);
1748                         }
1749                 }
1750                 break;
1751
1752         case 26:
1753 #ifdef JP
1754                 if (name) return "¥¢¥ó¥Ç¥Ã¥É¾ÃÌÇ";
1755                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë¤¤¤ë¥¢¥ó¥Ç¥Ã¥É¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1756 #else
1757                 if (name) return "Annihilate Undead";
1758                 if (desc) return "Eliminates all nearby undead monsters, exhausting you.  Powerful or unique monsters may be able to resist.";
1759 #endif
1760     
1761                 {
1762                         int power = plev + 50;
1763
1764                         if (info) return info_power(power);
1765
1766                         if (cast)
1767                         {
1768                                 mass_genocide_undead(power, TRUE);
1769                         }
1770                 }
1771                 break;
1772
1773         case 27:
1774 #ifdef JP
1775                 if (name) return "ÀéΤ´ã";
1776                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
1777 #else
1778                 if (name) return "Clairvoyance";
1779                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
1780 #endif
1781     
1782                 {
1783                         if (cast)
1784                         {
1785                                 wiz_lite(FALSE);
1786                         }
1787                 }
1788                 break;
1789
1790         case 28:
1791 #ifdef JP
1792                 if (name) return "Á´Éü³è";
1793                 if (desc) return "¤¹¤Ù¤Æ¤Î¥¹¥Æ¡¼¥¿¥¹¤È·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
1794 #else
1795                 if (name) return "Restoration";
1796                 if (desc) return "Restores all stats and experience.";
1797 #endif
1798     
1799                 {
1800                         if (cast)
1801                         {
1802                                 do_res_stat(A_STR);
1803                                 do_res_stat(A_INT);
1804                                 do_res_stat(A_WIS);
1805                                 do_res_stat(A_DEX);
1806                                 do_res_stat(A_CON);
1807                                 do_res_stat(A_CHR);
1808                                 restore_level();
1809                         }
1810                 }
1811                 break;
1812
1813         case 29:
1814 #ifdef JP
1815                 if (name) return "*ÂÎÎϲóÉü*";
1816                 if (desc) return "ºÇ¶¯¤Î¼£Ìþ¤ÎËâË¡¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1817 #else
1818                 if (name) return "Healing True";
1819                 if (desc) return "The greatest healing magic. Heals all HP, cut and stun.";
1820 #endif
1821     
1822                 {
1823                         int heal = 2000;
1824
1825                         if (info) return info_heal(0, 0, heal);
1826
1827                         if (cast)
1828                         {
1829                                 hp_player(heal);
1830                                 set_stun(0);
1831                                 set_cut(0);
1832                         }
1833                 }
1834                 break;
1835
1836         case 30:
1837 #ifdef JP
1838                 if (name) return "À»¤Ê¤ë¥Ó¥¸¥ç¥ó";
1839                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
1840 #else
1841                 if (name) return "Holy Vision";
1842                 if (desc) return "*Identifies* an item.";
1843 #endif
1844     
1845                 {
1846                         if (cast)
1847                         {
1848                                 if (!identify_fully(FALSE)) return NULL;
1849                         }
1850                 }
1851                 break;
1852
1853         case 31:
1854 #ifdef JP
1855                 if (name) return "µæ¶Ë¤ÎÂÑÀ­";
1856                 if (desc) return "°ìÄê»þ´Ö¡¢¤¢¤é¤æ¤ëÂÑÀ­¤òÉÕ¤±¡¢AC¤ÈËâË¡ËɸæǽÎϤò¾å¾º¤µ¤»¤ë¡£";
1857 #else
1858                 if (name) return "Ultimate Resistance";
1859                 if (desc) return "Gives ultimate resistance, bonus to AC and speed.";
1860 #endif
1861     
1862                 {
1863                         int base = plev / 2;
1864
1865                         if (info) return info_duration(base, base);
1866
1867                         if (cast)
1868                         {
1869                                 int v = randint1(base) + base;
1870                                 set_fast(v, FALSE);
1871                                 set_oppose_acid(v, FALSE);
1872                                 set_oppose_elec(v, FALSE);
1873                                 set_oppose_fire(v, FALSE);
1874                                 set_oppose_cold(v, FALSE);
1875                                 set_oppose_pois(v, FALSE);
1876                                 set_ultimate_res(v, FALSE);
1877                         }
1878                 }
1879                 break;
1880         }
1881
1882         return "";
1883 }
1884
1885
1886 static cptr do_sorcery_spell(int spell, int mode)
1887 {
1888         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
1889         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
1890         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
1891         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
1892
1893         int dir;
1894         int plev = p_ptr->lev;
1895
1896         switch (spell)
1897         {
1898         case 0:
1899 #ifdef JP
1900                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
1901                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
1902 #else
1903                 if (name) return "Detect Monsters";
1904                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
1905 #endif
1906     
1907                 {
1908                         int rad = DETECT_RAD_DEFAULT;
1909
1910                         if (info) return info_radius(rad);
1911
1912                         if (cast)
1913                         {
1914                                 detect_monsters_normal(rad);
1915                         }
1916                 }
1917                 break;
1918
1919         case 1:
1920 #ifdef JP
1921                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
1922                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
1923 #else
1924                 if (name) return "Phase Door";
1925                 if (desc) return "Teleport short distance.";
1926 #endif
1927     
1928                 {
1929                         int range = 10;
1930
1931                         if (info) return info_range(range);
1932
1933                         if (cast)
1934                         {
1935                                 teleport_player(range, 0L);
1936                         }
1937                 }
1938                 break;
1939
1940         case 2:
1941 #ifdef JP
1942                 if (name) return "櫤ÈÈâ´¶ÃÎ";
1943                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤ÎÈâ¤È櫤ò´¶ÃΤ¹¤ë¡£";
1944 #else
1945                 if (name) return "Detect Doors and Traps";
1946                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
1947 #endif
1948     
1949                 {
1950                         int rad = DETECT_RAD_DEFAULT;
1951
1952                         if (info) return info_radius(rad);
1953
1954                         if (cast)
1955                         {
1956                                 detect_traps(rad, TRUE);
1957                                 detect_doors(rad);
1958                                 detect_stairs(rad);
1959                         }
1960                 }
1961                 break;
1962
1963         case 3:
1964 #ifdef JP
1965                 if (name) return "¥é¥¤¥È¡¦¥¨¥ê¥¢";
1966                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
1967 #else
1968                 if (name) return "Light Area";
1969                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
1970 #endif
1971     
1972                 {
1973                         int dice = 2;
1974                         int sides = plev / 2;
1975                         int rad = plev / 10 + 1;
1976
1977                         if (info) return info_damage(dice, sides, 0);
1978
1979                         if (cast)
1980                         {
1981                                 lite_area(damroll(dice, sides), rad);
1982                         }
1983                 }
1984                 break;
1985
1986         case 4:
1987 #ifdef JP
1988                 if (name) return "¥Ñ¥Ë¥Ã¥¯¡¦¥â¥ó¥¹¥¿¡¼";
1989                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤòº®Í𤵤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1990 #else
1991                 if (name) return "Confuse Monster";
1992                 if (desc) return "Attempts to confuse a monster.";
1993 #endif
1994     
1995                 {
1996                         int power = (plev * 3) / 2;
1997
1998                         if (info) return info_power(power);
1999
2000                         if (cast)
2001                         {
2002                                 if (!get_aim_dir(&dir)) return NULL;
2003
2004                                 confuse_monster(dir, power);
2005                         }
2006                 }
2007                 break;
2008
2009         case 5:
2010 #ifdef JP
2011                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
2012                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
2013 #else
2014                 if (name) return "Teleport";
2015                 if (desc) return "Teleport long distance.";
2016 #endif
2017     
2018                 {
2019                         int range = plev * 5;
2020
2021                         if (info) return info_range(range);
2022
2023                         if (cast)
2024                         {
2025                                 teleport_player(range, 0L);
2026                         }
2027                 }
2028                 break;
2029
2030         case 6:
2031 #ifdef JP
2032                 if (name) return "¥¹¥ê¡¼¥×¡¦¥â¥ó¥¹¥¿¡¼";
2033                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2034 #else
2035                 if (name) return "Sleep Monster";
2036                 if (desc) return "Attempts to sleep a monster.";
2037 #endif
2038     
2039                 {
2040                         int power = plev;
2041
2042                         if (info) return info_power(power);
2043
2044                         if (cast)
2045                         {
2046                                 if (!get_aim_dir(&dir)) return NULL;
2047
2048                                 sleep_monster(dir);
2049                         }
2050                 }
2051                 break;
2052
2053         case 7:
2054 #ifdef JP
2055                 if (name) return "ËâÎϽ¼Å¶";
2056                 if (desc) return "¾ó/ËâË¡ËÀ¤Î½¼Å¶²ó¿ô¤òÁý¤ä¤¹¤«¡¢½¼Å¶Ãæ¤Î¥í¥Ã¥É¤Î½¼Å¶»þ´Ö¤ò¸º¤é¤¹¡£";
2057 #else
2058                 if (name) return "Recharging";
2059                 if (desc) return "Recharges staffs, wands or rods.";
2060 #endif
2061     
2062                 {
2063                         int power = plev * 4;
2064
2065                         if (info) return info_power(power);
2066
2067                         if (cast)
2068                         {
2069                                 if (!recharge(power)) return NULL;
2070                         }
2071                 }
2072                 break;
2073
2074         case 8:
2075 #ifdef JP
2076                 if (name) return "ËâË¡¤ÎÃÏ¿Þ";
2077                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
2078 #else
2079                 if (name) return "Magic Mapping";
2080                 if (desc) return "Maps nearby area.";
2081 #endif
2082     
2083                 {
2084                         int rad = DETECT_RAD_MAP;
2085
2086                         if (info) return info_radius(rad);
2087
2088                         if (cast)
2089                         {
2090                                 map_area(rad);
2091                         }
2092                 }
2093                 break;
2094
2095         case 9:
2096 #ifdef JP
2097                 if (name) return "´ÕÄê";
2098                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
2099 #else
2100                 if (name) return "Identify";
2101                 if (desc) return "Identifies an item.";
2102 #endif
2103     
2104                 {
2105                         if (cast)
2106                         {
2107                                 if (!ident_spell(FALSE)) return NULL;
2108                         }
2109                 }
2110                 break;
2111
2112         case 10:
2113 #ifdef JP
2114                 if (name) return "¥¹¥í¥¦¡¦¥â¥ó¥¹¥¿¡¼";
2115                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¸ºÂ®¤µ¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2116 #else
2117                 if (name) return "Slow Monster";
2118                 if (desc) return "Attempts to slow a monster.";
2119 #endif
2120     
2121                 {
2122                         int power = plev;
2123
2124                         if (info) return info_power(power);
2125
2126                         if (cast)
2127                         {
2128                                 if (!get_aim_dir(&dir)) return NULL;
2129
2130                                 slow_monster(dir);
2131                         }
2132                 }
2133                 break;
2134
2135         case 11:
2136 #ifdef JP
2137                 if (name) return "¼þÊÕ¥¹¥ê¡¼¥×";
2138                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2139 #else
2140                 if (name) return "Mass Sleep";
2141                 if (desc) return "Attempts to sleep all monsters in sight.";
2142 #endif
2143     
2144                 {
2145                         int power = plev;
2146
2147                         if (info) return info_power(power);
2148
2149                         if (cast)
2150                         {
2151                                 sleep_monsters();
2152                         }
2153                 }
2154                 break;
2155
2156         case 12:
2157 #ifdef JP
2158                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
2159                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2160 #else
2161                 if (name) return "Teleport Away";
2162                 if (desc) return "Teleports all monsters on the line away unless resisted.";
2163 #endif
2164     
2165                 {
2166                         int power = plev;
2167
2168                         if (info) return info_power(power);
2169
2170                         if (cast)
2171                         {
2172                                 if (!get_aim_dir(&dir)) return NULL;
2173
2174                                 fire_beam(GF_AWAY_ALL, dir, power);
2175                         }
2176                 }
2177                 break;
2178
2179         case 13:
2180 #ifdef JP
2181                 if (name) return "¥¹¥Ô¡¼¥É";
2182                 if (desc) return "°ìÄê»þ´Ö¡¢²Ã®¤¹¤ë¡£";
2183 #else
2184                 if (name) return "Haste Self";
2185                 if (desc) return "Hastes you for a while.";
2186 #endif
2187     
2188                 {
2189                         int base = plev;
2190                         int sides = 20 + plev;
2191
2192                         if (info) return info_duration(base, sides);
2193
2194                         if (cast)
2195                         {
2196                                 set_fast(randint1(sides) + base, FALSE);
2197                         }
2198                 }
2199                 break;
2200
2201         case 14:
2202 #ifdef JP
2203                 if (name) return "¿¿¡¦´¶ÃÎ";
2204                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
2205 #else
2206                 if (name) return "Detection True";
2207                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
2208 #endif
2209     
2210                 {
2211                         int rad = DETECT_RAD_DEFAULT;
2212
2213                         if (info) return info_radius(rad);
2214
2215                         if (cast)
2216                         {
2217                                 detect_all(rad);
2218                         }
2219                 }
2220                 break;
2221
2222         case 15:
2223 #ifdef JP
2224                 if (name) return "¿¿¡¦´ÕÄê";
2225                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
2226 #else
2227                 if (name) return "Identify True";
2228                 if (desc) return "*Identifies* an item.";
2229 #endif
2230     
2231                 {
2232                         if (cast)
2233                         {
2234                                 if (!identify_fully(FALSE)) return NULL;
2235                         }
2236                 }
2237                 break;
2238
2239         case 16:
2240 #ifdef JP
2241                 if (name) return "ʪÂΤȺâÊõ´¶ÃÎ";
2242                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥¢¥¤¥Æ¥à¤ÈºâÊõ¤ò´¶ÃΤ¹¤ë¡£";
2243 #else
2244                 if (name) return "Detect items and Treasure";
2245                 if (desc) return "Detects all treasures and items in your vicinity.";
2246 #endif
2247     
2248                 {
2249                         int rad = DETECT_RAD_DEFAULT;
2250
2251                         if (info) return info_radius(rad);
2252
2253                         if (cast)
2254                         {
2255                                 detect_objects_normal(rad);
2256                                 detect_treasure(rad);
2257                                 detect_objects_gold(rad);
2258                         }
2259                 }
2260                 break;
2261
2262         case 17:
2263 #ifdef JP
2264                 if (name) return "¥Á¥ã¡¼¥à¡¦¥â¥ó¥¹¥¿¡¼";
2265                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2266 #else
2267                 if (name) return "Charm Monster";
2268                 if (desc) return "Attempts to charm a monster.";
2269 #endif
2270     
2271                 {
2272                         int power = plev;
2273
2274                         if (info) return info_power(power);
2275
2276                         if (cast)
2277                         {
2278                                 if (!get_aim_dir(&dir)) return NULL;
2279
2280                                 charm_monster(dir, power);
2281                         }
2282                 }
2283                 break;
2284
2285         case 18:
2286 #ifdef JP
2287                 if (name) return "Àº¿À´¶ÃÎ";
2288                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
2289 #else
2290                 if (name) return "Sense Minds";
2291                 if (desc) return "Gives telepathy for a while.";
2292 #endif
2293     
2294                 {
2295                         int base = 25;
2296                         int sides = 30;
2297
2298                         if (info) return info_duration(base, sides);
2299
2300                         if (cast)
2301                         {
2302                                 set_tim_esp(randint1(sides) + base, FALSE);
2303                         }
2304                 }
2305                 break;
2306
2307         case 19:
2308 #ifdef JP
2309                 if (name) return "³¹°ÜÆ°";
2310                 if (desc) return "³¹¤Ø°ÜÆ°¤¹¤ë¡£ÃϾå¤Ë¤¤¤ë¤È¤­¤·¤«»È¤¨¤Ê¤¤¡£";
2311 #else
2312                 if (name) return "Teleport to town";
2313                 if (desc) return "Teleport to a town which you choose in a moment. Can only be used outdoors.";
2314 #endif
2315     
2316                 {
2317                         if (cast)
2318                         {
2319                                 if (!tele_town()) return NULL;
2320                         }
2321                 }
2322                 break;
2323
2324         case 20:
2325 #ifdef JP
2326                 if (name) return "¼«¸ÊʬÀÏ";
2327                 if (desc) return "¸½ºß¤Î¼«Ê¬¤Î¾õÂÖ¤ò´°Á´¤ËÃΤ롣";
2328 #else
2329                 if (name) return "Self Knowledge";
2330                 if (desc) return "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.";
2331 #endif
2332     
2333                 {
2334                         if (cast)
2335                         {
2336                                 self_knowledge();
2337                         }
2338                 }
2339                 break;
2340
2341         case 21:
2342 #ifdef JP
2343                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
2344                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
2345 #else
2346                 if (name) return "Teleport Level";
2347                 if (desc) return "Teleport to up or down stairs in a moment.";
2348 #endif
2349     
2350                 {
2351                         if (cast)
2352                         {
2353 #ifdef JP
2354                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
2355 #else
2356                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
2357 #endif
2358                                 teleport_level(0);
2359                         }
2360                 }
2361                 break;
2362
2363         case 22:
2364 #ifdef JP
2365                 if (name) return "µ¢´Ô¤Î¼öʸ";
2366                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
2367 #else
2368                 if (name) return "Word of Recall";
2369                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
2370 #endif
2371     
2372                 {
2373                         int base = 15;
2374                         int sides = 20;
2375
2376                         if (info) return info_delay(base, sides);
2377
2378                         if (cast)
2379                         {
2380                                 if (!word_of_recall()) return NULL;
2381                         }
2382                 }
2383                 break;
2384
2385         case 23:
2386 #ifdef JP
2387                 if (name) return "¼¡¸µ¤ÎÈâ";
2388                 if (desc) return "ûµ÷Î¥Æâ¤Î»ØÄꤷ¤¿¾ì½ê¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
2389 #else
2390                 if (name) return "Dimension Door";
2391                 if (desc) return "Teleport to given location.";
2392 #endif
2393     
2394                 {
2395                         int range = plev / 2 + 10;
2396
2397                         if (info) return info_range(range);
2398
2399                         if (cast)
2400                         {
2401 #ifdef JP
2402                                 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
2403 #else
2404                                 msg_print("You open a dimensional gate. Choose a destination.");
2405 #endif
2406
2407                                 if (!dimension_door()) return NULL;
2408                         }
2409                 }
2410                 break;
2411
2412         case 24:
2413 #ifdef JP
2414                 if (name) return "Ä´ºº";
2415                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤Î°À­¡¢»Ä¤êÂÎÎÏ¡¢ºÇÂçÂÎÎÏ¡¢¥¹¥Ô¡¼¥É¡¢ÀµÂΤòÃΤ롣";
2416 #else
2417                 if (name) return "Probing";
2418                 if (desc) return "Proves all monsters' alignment, HP, speed and their true character.";
2419 #endif
2420     
2421                 {
2422                         if (cast)
2423                         {
2424                                 probing();
2425                         }
2426                 }
2427                 break;
2428
2429         case 25:
2430 #ifdef JP
2431                 if (name) return "Çúȯ¤Î¥ë¡¼¥ó";
2432                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤ë¤ÈÇúȯ¤·¤Æ¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
2433 #else
2434                 if (name) return "Explosive Rune";
2435                 if (desc) return "Sets a glyph under you. The glyph will explode when a monster moves on it.";
2436 #endif
2437     
2438                 {
2439                         int dice = 7;
2440                         int sides = 7;
2441                         int base = plev;
2442
2443                         if (info) return info_damage(dice, sides, base);
2444
2445                         if (cast)
2446                         {
2447                                 explosive_rune();
2448                         }
2449                 }
2450                 break;
2451
2452         case 26:
2453 #ifdef JP
2454                 if (name) return "Ç°Æ°ÎÏ";
2455                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼«Ê¬¤Î­¸µ¤Ø°ÜÆ°¤µ¤»¤ë¡£";
2456 #else
2457                 if (name) return "Telekinesis";
2458                 if (desc) return "Pulls a distant item close to you.";
2459 #endif
2460     
2461                 {
2462                         int weight = plev * 15;
2463
2464                         if (info) return info_weight(weight);
2465
2466                         if (cast)
2467                         {
2468                                 if (!get_aim_dir(&dir)) return NULL;
2469
2470                                 fetch(dir, weight, FALSE);
2471                         }
2472                 }
2473                 break;
2474
2475         case 27:
2476 #ifdef JP
2477                 if (name) return "ÀéΤ´ã";
2478                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤µ¤é¤Ë¡¢°ìÄê»þ´Ö¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
2479 #else
2480                 if (name) return "Clairvoyance";
2481                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
2482 #endif
2483     
2484                 {
2485                         int base = 25;
2486                         int sides = 30;
2487
2488                         if (info) return info_duration(base, sides);
2489
2490                         if (cast)
2491                         {
2492                                 chg_virtue(V_KNOWLEDGE, 1);
2493                                 chg_virtue(V_ENLIGHTEN, 1);
2494
2495                                 wiz_lite(FALSE);
2496
2497                                 if (!p_ptr->telepathy)
2498                                 {
2499                                         set_tim_esp(randint1(sides) + base, FALSE);
2500                                 }
2501                         }
2502                 }
2503                 break;
2504
2505         case 28:
2506 #ifdef JP
2507                 if (name) return "̥λ¤Î»ëÀþ";
2508                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2509 #else
2510                 if (name) return "Charm monsters";
2511                 if (desc) return "Attempts to charm all monsters in sight.";
2512 #endif
2513     
2514                 {
2515                         int power = plev * 2;
2516
2517                         if (info) return info_power(power);
2518
2519                         if (cast)
2520                         {
2521                                 charm_monsters(power);
2522                         }
2523                 }
2524                 break;
2525
2526         case 29:
2527 #ifdef JP
2528                 if (name) return "Ï£¶â½Ñ";
2529                 if (desc) return "¥¢¥¤¥Æ¥à1¤Ä¤ò¤ª¶â¤ËÊѤ¨¤ë¡£";
2530 #else
2531                 if (name) return "Alchemy";
2532                 if (desc) return "Turns an item into 1/3 of its value in gold.";
2533 #endif
2534     
2535                 {
2536                         if (cast)
2537                         {
2538                                 if (!alchemy()) return NULL;
2539                         }
2540                 }
2541                 break;
2542
2543         case 30:
2544 #ifdef JP
2545                 if (name) return "²øʪÄÉÊü";
2546                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2547 #else
2548                 if (name) return "Banishment";
2549                 if (desc) return "Teleports all monsters in sight away unless resisted.";
2550 #endif
2551     
2552                 {
2553                         int power = plev * 4;
2554
2555                         if (info) return info_power(power);
2556
2557                         if (cast)
2558                         {
2559                                 banish_monsters(power);
2560                         }
2561                 }
2562                 break;
2563
2564         case 31:
2565 #ifdef JP
2566                 if (name) return "̵½ý¤Îµå";
2567                 if (desc) return "°ìÄê»þ´Ö¡¢¥À¥á¡¼¥¸¤ò¼õ¤±¤Ê¤¯¤Ê¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£Àڤ줿½Ö´Ö¤Ë¾¯¤·¥¿¡¼¥ó¤ò¾ÃÈñ¤¹¤ë¤Î¤ÇÃí°Õ¡£";
2568 #else
2569                 if (name) return "Globe of Invulnerability";
2570                 if (desc) return "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks or duration time is exceeded.";
2571 #endif
2572     
2573                 {
2574                         int base = 4;
2575
2576                         if (info) return info_duration(base, base);
2577
2578                         if (cast)
2579                         {
2580                                 set_invuln(randint1(base) + base, FALSE);
2581                         }
2582                 }
2583                 break;
2584         }
2585
2586         return "";
2587 }
2588
2589
2590 static cptr do_nature_spell(int spell, int mode)
2591 {
2592         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
2593         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
2594         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
2595         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
2596
2597 #ifdef JP
2598         static const char s_dam[] = "»½ý:";
2599         static const char s_rng[] = "¼ÍÄø";
2600 #else
2601         static const char s_dam[] = "dam ";
2602         static const char s_rng[] = "rng ";
2603 #endif
2604
2605         int dir;
2606         int plev = p_ptr->lev;
2607
2608         switch (spell)
2609         {
2610         case 0:
2611 #ifdef JP
2612                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
2613                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
2614 #else
2615                 if (name) return "Detect Creatures";
2616                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
2617 #endif
2618     
2619                 {
2620                         int rad = DETECT_RAD_DEFAULT;
2621
2622                         if (info) return info_radius(rad);
2623
2624                         if (cast)
2625                         {
2626                                 detect_monsters_normal(rad);
2627                         }
2628                 }
2629                 break;
2630
2631         case 1:
2632 #ifdef JP
2633                 if (name) return "°ðºÊ";
2634                 if (desc) return "ÅÅ·â¤Îû¤¤¥Ó¡¼¥à¤òÊü¤Ä¡£";
2635 #else
2636                 if (name) return "Lightning";
2637                 if (desc) return "Fires a short beam of lightning.";
2638 #endif
2639     
2640                 {
2641                         int dice = 3 + (plev - 1) / 5;
2642                         int sides = 4;
2643                         int range = plev / 6 + 2;
2644
2645                         if (info) return format("%s%dd%d %s%d", s_dam, dice, sides, s_rng, range);
2646
2647                         if (cast)
2648                         {
2649                                 project_length = range;
2650
2651                                 if (!get_aim_dir(&dir)) return NULL;
2652
2653                                 fire_beam(GF_ELEC, dir, damroll(dice, sides));
2654                         }
2655                 }
2656                 break;
2657
2658         case 2:
2659 #ifdef JP
2660                 if (name) return "櫤ÈÈâ´¶ÃÎ";
2661                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤ò´¶ÃΤ¹¤ë¡£";
2662 #else
2663                 if (name) return "Detect Doors and Traps";
2664                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
2665 #endif
2666     
2667                 {
2668                         int rad = DETECT_RAD_DEFAULT;
2669
2670                         if (info) return info_radius(rad);
2671
2672                         if (cast)
2673                         {
2674                                 detect_traps(rad, TRUE);
2675                                 detect_doors(rad);
2676                                 detect_stairs(rad);
2677                         }
2678                 }
2679                 break;
2680
2681         case 3:
2682 #ifdef JP
2683                 if (name) return "¿©ÎÈÀ¸À®";
2684                 if (desc) return "¿©ÎÁ¤ò°ì¤Äºî¤ê½Ð¤¹¡£";
2685 #else
2686                 if (name) return "Produce Food";
2687                 if (desc) return "Produces a Ration of Food.";
2688 #endif
2689     
2690                 {
2691                         if (cast)
2692                         {
2693                                 object_type forge, *q_ptr = &forge;
2694
2695 #ifdef JP
2696                                 msg_print("¿©ÎÁ¤òÀ¸À®¤·¤¿¡£");
2697 #else
2698                                 msg_print("A food ration is produced.");
2699 #endif
2700
2701                                 /* Create the food ration */
2702                                 object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
2703
2704                                 /* Drop the object from heaven */
2705                                 drop_near(q_ptr, -1, py, px);
2706                         }
2707                 }
2708                 break;
2709
2710         case 4:
2711 #ifdef JP
2712                 if (name) return "Æü¤Î¸÷";
2713                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
2714 #else
2715                 if (name) return "Daylight";
2716                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
2717 #endif
2718     
2719                 {
2720                         int dice = 2;
2721                         int sides = plev / 2;
2722                         int rad = (plev / 10) + 1;
2723
2724                         if (info) return info_damage(dice, sides, 0);
2725
2726                         if (cast)
2727                         {
2728                                 lite_area(damroll(dice, sides), rad);
2729
2730                                 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
2731                                 {
2732 #ifdef JP
2733                                         msg_print("Æü¤Î¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
2734 #else
2735                                         msg_print("The daylight scorches your flesh!");
2736 #endif
2737
2738 #ifdef JP
2739                                         take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "Æü¤Î¸÷", -1);
2740 #else
2741                                         take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "daylight", -1);
2742 #endif
2743                                 }
2744                         }
2745                 }
2746                 break;
2747
2748         case 5:
2749 #ifdef JP
2750                 if (name) return "ưʪ½¬¤·";
2751                 if (desc) return "ưʪ1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2752 #else
2753                 if (name) return "Animal Taming";
2754                 if (desc) return "Attempts to charm an animal.";
2755 #endif
2756     
2757                 {
2758                         int power = plev;
2759
2760                         if (info) return info_power(power);
2761
2762                         if (cast)
2763                         {
2764                                 if (!get_aim_dir(&dir)) return NULL;
2765
2766                                 charm_animal(dir, power);
2767                         }
2768                 }
2769                 break;
2770
2771         case 6:
2772 #ifdef JP
2773                 if (name) return "´Ä¶­¤Ø¤ÎÂÑÀ­";
2774                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¡¢±ê¡¢ÅÅ·â¤ËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
2775 #else
2776                 if (name) return "Resist Environment";
2777                 if (desc) return "Gives resistance to fire, cold and electricity for a while. These resistances can be added to which from equipment for more powerful resistances.";
2778 #endif
2779     
2780                 {
2781                         int base = 20;
2782
2783                         if (info) return info_duration(base, base);
2784
2785                         if (cast)
2786                         {
2787                                 set_oppose_cold(randint1(base) + base, FALSE);
2788                                 set_oppose_fire(randint1(base) + base, FALSE);
2789                                 set_oppose_elec(randint1(base) + base, FALSE);
2790                         }
2791                 }
2792                 break;
2793
2794         case 7:
2795 #ifdef JP
2796                 if (name) return "½ý¤ÈÆǼ£ÎÅ";
2797                 if (desc) return "²ø²æ¤òÁ´²÷¤µ¤»¡¢ÆǤòÂΤ«¤é´°Á´¤Ë¼è¤ê½ü¤­¡¢ÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
2798 #else
2799                 if (name) return "Cure Wounds & Poison";
2800                 if (desc) return "Heals all cut and poison status. Heals HP a little.";
2801 #endif
2802     
2803                 {
2804                         int dice = 2;
2805                         int sides = 8;
2806
2807                         if (info) return info_heal(dice, sides, 0);
2808
2809                         if (cast)
2810                         {
2811                                 hp_player(damroll(dice, sides));
2812                                 set_cut(0);
2813                                 set_poisoned(0);
2814                         }
2815                 }
2816                 break;
2817
2818         case 8:
2819 #ifdef JP
2820                 if (name) return "´äÀÐÍϲò";
2821                 if (desc) return "ÊɤòÍϤ«¤·¤Æ¾²¤Ë¤¹¤ë¡£";
2822 #else
2823                 if (name) return "Stone to Mud";
2824                 if (desc) return "Turns one rock square to mud.";
2825 #endif
2826     
2827                 {
2828                         int dice = 1;
2829                         int sides = 30;
2830                         int base = 20;
2831
2832                         if (info) return info_damage(dice, sides, base);
2833
2834                         if (cast)
2835                         {
2836                                 if (!get_aim_dir(&dir)) return NULL;
2837
2838                                 wall_to_mud(dir);
2839                         }
2840                 }
2841                 break;
2842
2843         case 9:
2844 #ifdef JP
2845                 if (name) return "¥¢¥¤¥¹¡¦¥Ü¥ë¥È";
2846                 if (desc) return "Î䵤¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
2847 #else
2848                 if (name) return "Frost Bolt";
2849                 if (desc) return "Fires a bolt or beam of cold.";
2850 #endif
2851     
2852                 {
2853                         int dice = 3 + (plev - 5) / 4;
2854                         int sides = 8;
2855
2856                         if (info) return info_damage(dice, sides, 0);
2857
2858                         if (cast)
2859                         {
2860                                 if (!get_aim_dir(&dir)) return NULL;
2861                                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir, damroll(dice, sides));
2862                         }
2863                 }
2864                 break;
2865
2866         case 10:
2867 #ifdef JP
2868                 if (name) return "¼«Á³¤Î³ÐÀÃ";
2869                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ·¡¢¶á¤¯¤Îæ«¡¢Èâ¡¢³¬ÃÊ¡¢Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
2870 #else
2871                 if (name) return "Nature Awareness";
2872                 if (desc) return "Maps nearby area. Detects all monsters, traps, doors and stairs.";
2873 #endif
2874     
2875                 {
2876                         int rad1 = DETECT_RAD_MAP;
2877                         int rad2 = DETECT_RAD_DEFAULT;
2878
2879                         if (info) return info_radius(MAX(rad1, rad2));
2880
2881                         if (cast)
2882                         {
2883                                 map_area(rad1);
2884                                 detect_traps(rad2, TRUE);
2885                                 detect_doors(rad2);
2886                                 detect_stairs(rad2);
2887                                 detect_monsters_normal(rad2);
2888                         }
2889                 }
2890                 break;
2891
2892         case 11:
2893 #ifdef JP
2894                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";
2895                 if (desc) return "²Ð±ê¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
2896 #else
2897                 if (name) return "Fire Bolt";
2898                 if (desc) return "Fires a bolt or beam of fire.";
2899 #endif
2900     
2901                 {
2902                         int dice = 5 + (plev - 5) / 4;
2903                         int sides = 8;
2904
2905                         if (info) return info_damage(dice, sides, 0);
2906
2907                         if (cast)
2908                         {
2909                                 if (!get_aim_dir(&dir)) return NULL;
2910                                 fire_bolt_or_beam(beam_chance() - 10, GF_FIRE, dir, damroll(dice, sides));
2911                         }
2912                 }
2913                 break;
2914
2915         case 12:
2916 #ifdef JP
2917                 if (name) return "ÂÀÍÛ¸÷Àþ";
2918                 if (desc) return "¸÷Àþ¤òÊü¤Ä¡£¸÷¤ê¤ò·ù¤¦¥â¥ó¥¹¥¿¡¼¤Ë¸ú²Ì¤¬¤¢¤ë¡£";
2919 #else
2920                 if (name) return "Ray of Sunlight";
2921                 if (desc) return "Fires a beam of light which damages to light-sensitive monsters.";
2922 #endif
2923     
2924                 {
2925                         int dice = 6;
2926                         int sides = 8;
2927
2928                         if (info) return info_damage(dice, sides, 0);
2929
2930                         if (cast)
2931                         {
2932                                 if (!get_aim_dir(&dir)) return NULL;
2933 #ifdef JP
2934                                 msg_print("ÂÀÍÛ¸÷Àþ¤¬¸½¤ì¤¿¡£");
2935 #else
2936                                 msg_print("A line of sunlight appears.");
2937 #endif
2938
2939                                 lite_line(dir);
2940                         }
2941                 }
2942                 break;
2943
2944         case 13:
2945 #ifdef JP
2946                 if (name) return "­¤«¤»";
2947                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2948 #else
2949                 if (name) return "Entangle";
2950                 if (desc) return "Attempts to slow all monsters in sight.";
2951 #endif
2952     
2953                 {
2954                         int power = plev;
2955
2956                         if (info) return info_power(power);
2957
2958                         if (cast)
2959                         {
2960                                 slow_monsters();
2961                         }
2962                 }
2963                 break;
2964
2965         case 14:
2966 #ifdef JP
2967                 if (name) return "ưʪ¾¤´­";
2968                 if (desc) return "ưʪ¤ò1Âξ¤´­¤¹¤ë¡£";
2969 #else
2970                 if (name) return "Summon Animal";
2971                 if (desc) return "Summons an animal.";
2972 #endif
2973     
2974                 {
2975                         if (cast)
2976                         {
2977                                 if (!(summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))
2978                                 {
2979 #ifdef JP
2980                                         msg_print("ưʪ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
2981 #else
2982                                         msg_print("No animals arrive.");
2983 #endif
2984                                 }
2985                                 break;
2986                         }
2987                 }
2988                 break;
2989
2990         case 15:
2991 #ifdef JP
2992                 if (name) return "ÌôÁð¼£ÎÅ";
2993                 if (desc) return "ÂÎÎϤòÂçÉý¤Ë²óÉü¤µ¤»¡¢Éé½ý¡¢Û¯Û°¾õÂÖ¡¢ÆǤ«¤éÁ´²÷¤¹¤ë¡£";
2994 #else
2995                 if (name) return "Herbal Healing";
2996                 if (desc) return "Heals HP greatly. And heals cut, stun and poison completely.";
2997 #endif
2998     
2999                 {
3000                         int heal = 500;
3001
3002                         if (info) return info_heal(0, 0, heal);
3003
3004                         if (cast)
3005                         {
3006                                 hp_player(heal);
3007                                 set_stun(0);
3008                                 set_cut(0);
3009                                 set_poisoned(0);
3010                         }
3011                 }
3012                 break;
3013
3014         case 16:
3015 #ifdef JP
3016                 if (name) return "³¬ÃÊÀ¸À®";
3017                 if (desc) return "¼«Ê¬¤Î¤¤¤ë°ÌÃ֤˳¬Ãʤòºî¤ë¡£";
3018 #else
3019                 if (name) return "Stair Building";
3020                 if (desc) return "Creates a stair which goes down or up.";
3021 #endif
3022     
3023                 {
3024                         if (cast)
3025                         {
3026                                 stair_creation();
3027                         }
3028                 }
3029                 break;
3030
3031         case 17:
3032 #ifdef JP
3033                 if (name) return "È©Àв½";
3034                 if (desc) return "°ìÄê»þ´Ö¡¢AC¤ò¾å¾º¤µ¤»¤ë¡£";
3035 #else
3036                 if (name) return "Stone Skin";
3037                 if (desc) return "Gives bonus to AC for a while.";
3038 #endif
3039     
3040                 {
3041                         int base = 20;
3042                         int sides = 30;
3043
3044                         if (info) return info_duration(base, sides);
3045
3046                         if (cast)
3047                         {
3048                                 set_shield(randint1(sides) + base, FALSE);
3049                         }
3050                 }
3051                 break;
3052
3053         case 18:
3054 #ifdef JP
3055                 if (name) return "¿¿¡¦ÂÑÀ­";
3056                 if (desc) return "°ìÄê»þ´Ö¡¢»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
3057 #else
3058                 if (name) return "Resistance True";
3059                 if (desc) return "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to which from equipment for more powerful resistances.";
3060 #endif
3061     
3062                 {
3063                         int base = 20;
3064
3065                         if (info) return info_duration(base, base);
3066
3067                         if (cast)
3068                         {
3069                                 set_oppose_acid(randint1(base) + base, FALSE);
3070                                 set_oppose_elec(randint1(base) + base, FALSE);
3071                                 set_oppose_fire(randint1(base) + base, FALSE);
3072                                 set_oppose_cold(randint1(base) + base, FALSE);
3073                                 set_oppose_pois(randint1(base) + base, FALSE);
3074                         }
3075                 }
3076                 break;
3077
3078         case 19:
3079 #ifdef JP
3080                 if (name) return "¿¹ÎÓÁϤ";
3081                 if (desc) return "¼þ°Ï¤ËÌÚ¤òºî¤ê½Ð¤¹¡£";
3082 #else
3083                 if (name) return "Forest Creation";
3084                 if (desc) return "Creates trees in all adjacent squares.";
3085 #endif
3086     
3087                 {
3088                         if (cast)
3089                         {
3090                                 tree_creation();
3091                         }
3092                 }
3093                 break;
3094
3095         case 20:
3096 #ifdef JP
3097                 if (name) return "ưʪͧÏÂ";
3098                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Îưʪ¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3099 #else
3100                 if (name) return "Animal Friendship";
3101                 if (desc) return "Attempts to charm all animals in sight.";
3102 #endif
3103     
3104                 {
3105                         int power = plev * 2;
3106
3107                         if (info) return info_power(power);
3108
3109                         if (cast)
3110                         {
3111                                 charm_animals(power);
3112                         }
3113                 }
3114                 break;
3115
3116         case 21:
3117 #ifdef JP
3118                 if (name) return "»î¶âÀÐ";
3119                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
3120 #else
3121                 if (name) return "Stone Tell";
3122                 if (desc) return "*Identifies* an item.";
3123 #endif
3124     
3125                 {
3126                         if (cast)
3127                         {
3128                                 if (!identify_fully(FALSE)) return NULL;
3129                         }
3130                 }
3131                 break;
3132
3133         case 22:
3134 #ifdef JP
3135                 if (name) return "ÀФÎÊÉ";
3136                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë²ÖÖ¾´ä¤ÎÊɤòºî¤ë¡£";
3137 #else
3138                 if (name) return "Wall of Stone";
3139                 if (desc) return "Creates granite walls in all adjacent squares.";
3140 #endif
3141     
3142                 {
3143                         if (cast)
3144                         {
3145                                 wall_stone();
3146                         }
3147                 }
3148                 break;
3149
3150         case 23:
3151 #ifdef JP
3152                 if (name) return "Éå¿©ËÉ»ß";
3153                 if (desc) return "¥¢¥¤¥Æ¥à¤ò»À¤Ç½ý¤Ä¤«¤Ê¤¤¤è¤¦²Ã¹©¤¹¤ë¡£";
3154 #else
3155                 if (name) return "Protect from Corrosion";
3156                 if (desc) return "Makes an equipment acid-proof.";
3157 #endif
3158     
3159                 {
3160                         if (cast)
3161                         {
3162                                 if (!rustproof()) return NULL;
3163                         }
3164                 }
3165                 break;
3166
3167         case 24:
3168 #ifdef JP
3169                 if (name) return "ÃÏ¿Ì";
3170                 if (desc) return "¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÍɤ餷¡¢ÊɤȾ²¤ò¥é¥ó¥À¥à¤ËÆþ¤ìÊѤ¨¤ë¡£";
3171 #else
3172                 if (name) return "Earthquake";
3173                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
3174 #endif
3175     
3176                 {
3177                         int rad = 10;
3178
3179                         if (info) return info_radius(rad);
3180
3181                         if (cast)
3182                         {
3183                                 earthquake(py, px, rad);
3184                         }
3185                 }
3186                 break;
3187
3188         case 25:
3189 #ifdef JP
3190                 if (name) return "¥«¥Þ¥¤¥¿¥Á";
3191                 if (desc) return "Á´Êý¸þ¤Ë¸þ¤«¤Ã¤Æ¹¶·â¤¹¤ë¡£";
3192 #else
3193                 if (name) return "Cyclone";
3194                 if (desc) return "Attacks all adjacent monsters.";
3195 #endif
3196     
3197                 {
3198                         if (cast)
3199                         {
3200                                 int y = 0, x = 0;
3201                                 cave_type       *c_ptr;
3202                                 monster_type    *m_ptr;
3203
3204                                 for (dir = 0; dir < 8; dir++)
3205                                 {
3206                                         y = py + ddy_ddd[dir];
3207                                         x = px + ddx_ddd[dir];
3208                                         c_ptr = &cave[y][x];
3209
3210                                         /* Get the monster */
3211                                         m_ptr = &m_list[c_ptr->m_idx];
3212
3213                                         /* Hack -- attack monsters */
3214                                         if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
3215                                                 py_attack(y, x, 0);
3216                                 }
3217                         }
3218                 }
3219                 break;
3220
3221         case 26:
3222 #ifdef JP
3223                 if (name) return "¥Ö¥ê¥¶¡¼¥É";
3224                 if (desc) return "µðÂç¤ÊÎ䵤¤Îµå¤òÊü¤Ä¡£";
3225 #else
3226                 if (name) return "Blizzard";
3227                 if (desc) return "Fires a huge ball of cold.";
3228 #endif
3229     
3230                 {
3231                         int dam = 70 + plev * 3 / 2;
3232                         int rad = plev / 12 + 1;
3233
3234                         if (info) return info_damage(0, 0, dam);
3235
3236                         if (cast)
3237                         {
3238                                 if (!get_aim_dir(&dir)) return NULL;
3239
3240                                 fire_ball(GF_COLD, dir, dam, rad);
3241                         }
3242                 }
3243                 break;
3244
3245         case 27:
3246 #ifdef JP
3247                 if (name) return "°ðºÊÍò";
3248                 if (desc) return "µðÂç¤ÊÅÅ·â¤Îµå¤òÊü¤Ä¡£";
3249 #else
3250                 if (name) return "Lightning Storm";
3251                 if (desc) return "Fires a huge electric ball.";
3252 #endif
3253     
3254                 {
3255                         int dam = 90 + plev * 3 / 2;
3256                         int rad = plev / 12 + 1;
3257
3258                         if (info) return info_damage(0, 0, dam);
3259
3260                         if (cast)
3261                         {
3262                                 if (!get_aim_dir(&dir)) return NULL;
3263                                 fire_ball(GF_ELEC, dir, dam, rad);
3264                                 break;
3265                         }
3266                 }
3267                 break;
3268
3269         case 28:
3270 #ifdef JP
3271                 if (name) return "±²Ä¬";
3272                 if (desc) return "µðÂç¤Ê¿å¤Îµå¤òÊü¤Ä¡£";
3273 #else
3274                 if (name) return "Whirlpool";
3275                 if (desc) return "Fires a huge ball of water.";
3276 #endif
3277     
3278                 {
3279                         int dam = 100 + plev * 3 / 2;
3280                         int rad = plev / 12 + 1;
3281
3282                         if (info) return info_damage(0, 0, dam);
3283
3284                         if (cast)
3285                         {
3286                                 if (!get_aim_dir(&dir)) return NULL;
3287                                 fire_ball(GF_WATER, dir, dam, rad);
3288                         }
3289                 }
3290                 break;
3291
3292         case 29:
3293 #ifdef JP
3294                 if (name) return "ÍÛ¸÷¾¤´­";
3295                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¸÷¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£¤µ¤é¤Ë¡¢¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
3296 #else
3297                 if (name) return "Call Sunlight";
3298                 if (desc) return "Generates ball of light centered on you. Maps and lights whole dungeon level. Knows all objects location.";
3299 #endif
3300     
3301                 {
3302                         int dam = 150;
3303                         int rad = 8;
3304
3305                         if (info) return info_damage(0, 0, dam/2);
3306
3307                         if (cast)
3308                         {
3309                                 fire_ball(GF_LITE, 0, dam, rad);
3310                                 chg_virtue(V_KNOWLEDGE, 1);
3311                                 chg_virtue(V_ENLIGHTEN, 1);
3312                                 wiz_lite(FALSE);
3313
3314                                 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
3315                                 {
3316 #ifdef JP
3317                                         msg_print("Æü¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
3318 #else
3319                                         msg_print("The sunlight scorches your flesh!");
3320 #endif
3321
3322 #ifdef JP
3323                                         take_hit(DAMAGE_NOESCAPE, 50, "Æü¸÷", -1);
3324 #else
3325                                         take_hit(DAMAGE_NOESCAPE, 50, "sunlight", -1);
3326 #endif
3327                                 }
3328                         }
3329                 }
3330                 break;
3331
3332         case 30:
3333 #ifdef JP
3334                 if (name) return "ÀºÎî¤Î¿Ï";
3335                 if (desc) return "Éð´ï¤Ë±ê¤«Î䵤¤Î°À­¤ò¤Ä¤±¤ë¡£";
3336 #else
3337                 if (name) return "Elemental Branding";
3338                 if (desc) return "Makes current weapon fire or frost branded.";
3339 #endif
3340     
3341                 {
3342                         if (cast)
3343                         {
3344                                 brand_weapon(randint0(2));
3345                         }
3346                 }
3347                 break;
3348
3349         case 31:
3350 #ifdef JP
3351                 if (name) return "¼«Á³¤Î¶¼°Ò";
3352                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢ÃϿ̤òµ¯¤³¤·¡¢¼«Ê¬¤òÃæ¿´¤È¤·¤¿Ê¬²ò¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
3353 #else
3354                 if (name) return "Nature's Wrath";
3355                 if (desc) return "Damages all monsters in sight. Makes quake. Generates disintegration ball centered on you.";
3356 #endif
3357     
3358                 {
3359                         int d_dam = 4 * plev;
3360                         int b_dam = (100 + plev) * 2;
3361                         int b_rad = 1 + plev / 12;
3362                         int q_rad = 20 + plev / 2;
3363
3364                         if (info) return format("%s%d+%d", s_dam, d_dam, b_dam/2);
3365
3366                         if (cast)
3367                         {
3368                                 dispel_monsters(d_dam);
3369                                 earthquake(py, px, q_rad);
3370                                 project(0, b_rad, py, px, b_dam, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);
3371                         }
3372                 }
3373                 break;
3374         }
3375
3376         return "";
3377 }
3378
3379
3380 static cptr do_chaos_spell(int spell, int mode)
3381 {
3382         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
3383         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
3384         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
3385         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
3386
3387 #ifdef JP
3388         static const char s_dam[] = "»½ý:";
3389         static const char s_random[] = "¥é¥ó¥À¥à";
3390 #else
3391         static const char s_dam[] = "dam ";
3392         static const char s_random[] = "random";
3393 #endif
3394
3395         int dir;
3396         int plev = p_ptr->lev;
3397
3398         switch (spell)
3399         {
3400         case 0:
3401 #ifdef JP
3402                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë";
3403                 if (desc) return "¼å¤¤ËâË¡¤ÎÌð¤òÊü¤Ä¡£";
3404 #else
3405                 if (name) return "Magic Missile";
3406                 if (desc) return "Fires a weak bolt of magic.";
3407 #endif
3408     
3409                 {
3410                         int dice = 3 + ((plev - 1) / 5);
3411                         int sides = 4;
3412
3413                         if (info) return info_damage(dice, sides, 0);
3414
3415                         if (cast)
3416                         {
3417                                 if (!get_aim_dir(&dir)) return NULL;
3418
3419                                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
3420                         }
3421                 }
3422                 break;
3423
3424         case 1:
3425 #ifdef JP
3426                 if (name) return "¥È¥é¥Ã¥×/¥É¥¢Ç˲õ";
3427                 if (desc) return "ÎÙÀܤ¹¤ë櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
3428 #else
3429                 if (name) return "Trap / Door Destruction";
3430                 if (desc) return "Destroys all traps in adjacent squares.";
3431 #endif
3432     
3433                 {
3434                         int rad = 1;
3435
3436                         if (info) return info_radius(rad);
3437
3438                         if (cast)
3439                         {
3440                                 destroy_doors_touch();
3441                         }
3442                 }
3443                 break;
3444
3445         case 2:
3446 #ifdef JP
3447                 if (name) return "Á®¸÷";
3448                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
3449 #else
3450                 if (name) return "Flash of Light";
3451                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
3452 #endif
3453     
3454                 {
3455                         int dice = 2;
3456                         int sides = plev / 2;
3457                         int rad = (plev / 10) + 1;
3458
3459                         if (info) return info_damage(dice, sides, 0);
3460
3461                         if (cast)
3462                         {
3463                                 lite_area(damroll(dice, sides), rad);
3464                         }
3465                 }
3466                 break;
3467
3468         case 3:
3469 #ifdef JP
3470                 if (name) return "º®Íð¤Î¼ê";
3471                 if (desc) return "Áê¼ê¤òº®Í𤵤»¤ë¹¶·â¤ò¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¡£";
3472 #else
3473                 if (name) return "Touch of Confusion";
3474                 if (desc) return "Attempts to confuse the next monster that you hit.";
3475 #endif
3476     
3477                 {
3478                         if (cast)
3479                         {
3480                                 if (!(p_ptr->special_attack & ATTACK_CONFUSE))
3481                                 {
3482 #ifdef JP
3483                                         msg_print("¤¢¤Ê¤¿¤Î¼ê¤Ï¸÷¤ê»Ï¤á¤¿¡£");
3484 #else
3485                                         msg_print("Your hands start glowing.");
3486 #endif
3487
3488                                         p_ptr->special_attack |= ATTACK_CONFUSE;
3489                                         p_ptr->redraw |= (PR_STATUS);
3490                                 }
3491                         }
3492                 }
3493                 break;
3494
3495         case 4:
3496 #ifdef JP
3497                 if (name) return "ËâÎÏßÚÎö";
3498                 if (desc) return "ËâË¡¤Îµå¤òÊü¤Ä¡£";
3499 #else
3500                 if (name) return "Mana Burst";
3501                 if (desc) return "Fires a ball of magic.";
3502 #endif
3503     
3504                 {
3505                         int dice = 3;
3506                         int sides = 5;
3507                         int rad = (plev < 30) ? 2 : 3;
3508                         int base;
3509
3510                         if (p_ptr->pclass == CLASS_MAGE ||
3511                             p_ptr->pclass == CLASS_HIGH_MAGE ||
3512                             p_ptr->pclass == CLASS_SORCERER)
3513                                 base = plev + plev / 2;
3514                         else
3515                                 base = plev + plev / 4;
3516
3517
3518                         if (info) return info_damage(dice, sides, base);
3519
3520                         if (cast)
3521                         {
3522                                 if (!get_aim_dir(&dir)) return NULL;
3523
3524                                 fire_ball(GF_MISSILE, dir, damroll(dice, sides) + base, rad);
3525
3526                                 /*
3527                                  * Shouldn't actually use GF_MANA, as
3528                                  * it will destroy all items on the
3529                                  * floor
3530                                  */
3531                         }
3532                 }
3533                 break;
3534
3535         case 5:
3536 #ifdef JP
3537                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";
3538                 if (desc) return "±ê¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
3539 #else
3540                 if (name) return "Fire Bolt";
3541                 if (desc) return "Fires a bolt or beam of fire.";
3542 #endif
3543     
3544                 {
3545                         int dice = 8 + (plev - 5) / 4;
3546                         int sides = 8;
3547
3548                         if (info) return info_damage(dice, sides, 0);
3549
3550                         if (cast)
3551                         {
3552                                 if (!get_aim_dir(&dir)) return NULL;
3553
3554                                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir, damroll(dice, sides));
3555                         }
3556                 }
3557                 break;
3558
3559         case 6:
3560 #ifdef JP
3561                 if (name) return "ÎϤηý";
3562                 if (desc) return "¤´¤¯¾®¤µ¤Êʬ²ò¤Îµå¤òÊü¤Ä¡£";
3563 #else
3564                 if (name) return "Fist of Force";
3565                 if (desc) return "Fires a tiny ball of disintegration.";
3566 #endif
3567     
3568                 {
3569                         int dice = 8 + ((plev - 5) / 4);
3570                         int sides = 8;
3571
3572                         if (info) return info_damage(dice, sides, 0);
3573
3574                         if (cast)
3575                         {
3576                                 if (!get_aim_dir(&dir)) return NULL;
3577
3578                                 fire_ball(GF_DISINTEGRATE, dir,
3579                                         damroll(dice, sides), 0);
3580                         }
3581                 }
3582                 break;
3583
3584         case 7:
3585 #ifdef JP
3586                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
3587                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
3588 #else
3589                 if (name) return "Teleport Self";
3590                 if (desc) return "Teleport long distance.";
3591 #endif
3592     
3593                 {
3594                         int range = plev * 5;
3595
3596                         if (info) return info_range(range);
3597
3598                         if (cast)
3599                         {
3600                                 teleport_player(range, 0L);
3601                         }
3602                 }
3603                 break;
3604
3605         case 8:
3606 #ifdef JP
3607                 if (name) return "¥ï¥ó¥À¡¼";
3608                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤Ë¥é¥ó¥À¥à¤Ê¸ú²Ì¤òÍ¿¤¨¤ë¡£";
3609 #else
3610                 if (name) return "Wonder";
3611                 if (desc) return "Fires something with random effects.";
3612 #endif
3613     
3614                 {
3615                         if (info) return s_random;
3616
3617                         if (cast)
3618                         {
3619
3620                                 if (!get_aim_dir(&dir)) return NULL;
3621
3622                                 cast_wonder(dir);
3623                         }
3624                 }
3625                 break;
3626
3627         case 9:
3628 #ifdef JP
3629                 if (name) return "¥«¥ª¥¹¡¦¥Ü¥ë¥È";
3630                 if (desc) return "¥«¥ª¥¹¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
3631 #else
3632                 if (name) return "Chaos Bolt";
3633                 if (desc) return "Fires a bolt or ball of chaos.";
3634 #endif
3635     
3636                 {
3637                         int dice = 10 + (plev - 5) / 4;
3638                         int sides = 8;
3639
3640                         if (info) return info_damage(dice, sides, 0);
3641
3642                         if (cast)
3643                         {
3644                                 if (!get_aim_dir(&dir)) return NULL;
3645
3646                                 fire_bolt_or_beam(beam_chance(), GF_CHAOS, dir, damroll(dice, sides));
3647                         }
3648                 }
3649                 break;
3650
3651         case 10:
3652 #ifdef JP
3653                 if (name) return "¥½¥Ë¥Ã¥¯¡¦¥Ö¡¼¥à";
3654                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¹ì²»¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
3655 #else
3656                 if (name) return "Sonic Boom";
3657                 if (desc) return "Generates a ball of sound centered on you.";
3658 #endif
3659     
3660                 {
3661                         int dam = 60 + plev;
3662                         int rad = plev / 10 + 2;
3663
3664                         if (info) return info_damage(0, 0, dam/2);
3665
3666                         if (cast)
3667                         {
3668 #ifdef JP
3669                                 msg_print("¥É¡¼¥ó¡ªÉô²°¤¬Íɤ줿¡ª");
3670 #else
3671                                 msg_print("BOOM! Shake the room!");
3672 #endif
3673
3674                                 project(0, rad, py, px, dam, GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
3675                         }
3676                 }
3677                 break;
3678
3679         case 11:
3680 #ifdef JP
3681                 if (name) return "ÇËÌǤÎÌð";
3682                 if (desc) return "½ã¿è¤ÊËâÎϤΥӡ¼¥à¤òÊü¤Ä¡£";
3683 #else
3684                 if (name) return "Doom Bolt";
3685                 if (desc) return "Fires a beam of pure mana.";
3686 #endif
3687     
3688                 {
3689                         int dice = 11 + (plev - 5) / 4;
3690                         int sides = 8;
3691
3692                         if (info) return info_damage(dice, sides, 0);
3693
3694                         if (cast)
3695                         {
3696                                 if (!get_aim_dir(&dir)) return NULL;
3697
3698                                 fire_beam(GF_MANA, dir, damroll(dice, sides));
3699                         }
3700                 }
3701                 break;
3702
3703         case 12:
3704 #ifdef JP
3705                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";
3706                 if (desc) return "±ê¤Îµå¤òÊü¤Ä¡£";
3707 #else
3708                 if (name) return "Fire Ball";
3709                 if (desc) return "Fires a ball of fire.";
3710 #endif
3711     
3712                 {
3713                         int dam = plev + 55;
3714                         int rad = 2;
3715
3716                         if (info) return info_damage(0, 0, dam);
3717
3718                         if (cast)
3719                         {
3720                                 if (!get_aim_dir(&dir)) return NULL;
3721
3722                                 fire_ball(GF_FIRE, dir, dam, rad);
3723                         }
3724                 }
3725                 break;
3726
3727         case 13:
3728 #ifdef JP
3729                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥¢¥¦¥§¥¤";
3730                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3731 #else
3732                 if (name) return "Teleport Other";
3733                 if (desc) return "Teleports all monsters on the line away unless resisted.";
3734 #endif
3735     
3736                 {
3737                         int power = plev;
3738
3739                         if (info) return info_power(power);
3740
3741                         if (cast)
3742                         {
3743                                 if (!get_aim_dir(&dir)) return NULL;
3744
3745                                 fire_beam(GF_AWAY_ALL, dir, power);
3746                         }
3747                 }
3748                 break;
3749
3750         case 14:
3751 #ifdef JP
3752                 if (name) return "Ç˲õ¤Î¸ÀÍÕ";
3753                 if (desc) return "¼þÊդΥ¢¥¤¥Æ¥à¡¢¥â¥ó¥¹¥¿¡¼¡¢ÃÏ·Á¤òÇ˲õ¤¹¤ë¡£";
3754 #else
3755                 if (name) return "Word of Destruction";
3756                 if (desc) return "Destroy everything in nearby area.";
3757 #endif
3758     
3759                 {
3760                         int base = 12;
3761                         int sides = 4;
3762
3763                         if (cast)
3764                         {
3765                                 destroy_area(py, px, base + randint1(sides), FALSE);
3766                         }
3767                 }
3768                 break;
3769
3770         case 15:
3771 #ifdef JP
3772                 if (name) return "¥í¥°¥ë¥¹È¯Æ°";
3773                 if (desc) return "µðÂç¤Ê¥«¥ª¥¹¤Îµå¤òÊü¤Ä¡£";
3774 #else
3775                 if (name) return "Invoke Logrus";
3776                 if (desc) return "Fires a huge ball of chaos.";
3777 #endif
3778     
3779                 {
3780                         int dam = plev * 2 + 99;
3781                         int rad = plev / 5;
3782
3783                         if (info) return info_damage(0, 0, dam);
3784
3785                         if (cast)
3786                         {
3787                                 if (!get_aim_dir(&dir)) return NULL;
3788
3789                                 fire_ball(GF_CHAOS, dir, dam, rad);
3790                         }
3791                 }
3792                 break;
3793
3794         case 16:
3795 #ifdef JP
3796                 if (name) return "¾¼ÔÊÑÍÆ";
3797                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤòÊѿȤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3798 #else
3799                 if (name) return "Polymorph Other";
3800                 if (desc) return "Attempts to polymorph a monster.";
3801 #endif
3802     
3803                 {
3804                         int power = plev;
3805
3806                         if (info) return info_power(power);
3807
3808                         if (cast)
3809                         {
3810                                 if (!get_aim_dir(&dir)) return NULL;
3811
3812                                 poly_monster(dir);
3813                         }
3814                 }
3815                 break;
3816
3817         case 17:
3818 #ifdef JP
3819                 if (name) return "Ï¢º¿°ðºÊ";
3820                 if (desc) return "Á´Êý¸þ¤ËÂФ·¤ÆÅÅ·â¤Î¥Ó¡¼¥à¤òÊü¤Ä¡£";
3821 #else
3822                 if (name) return "Chain Lightning";
3823                 if (desc) return "Fires lightning beams in all directions.";
3824 #endif
3825     
3826                 {
3827                         int dice = 5 + plev / 10;
3828                         int sides = 8;
3829
3830                         if (info) return info_damage(dice, sides, 0);
3831
3832                         if (cast)
3833                         {
3834                                 for (dir = 0; dir <= 9; dir++)
3835                                         fire_beam(GF_ELEC, dir, damroll(dice, sides));
3836                         }
3837                 }
3838                 break;
3839
3840         case 18:
3841 #ifdef JP
3842                 if (name) return "ËâÎÏÉõÆþ";
3843                 if (desc) return "¾ó/ËâË¡ËÀ¤Î½¼Å¶²ó¿ô¤òÁý¤ä¤¹¤«¡¢½¼Å¶Ãæ¤Î¥í¥Ã¥É¤Î½¼Å¶»þ´Ö¤ò¸º¤é¤¹¡£";
3844 #else
3845                 if (name) return "Arcane Binding";
3846                 if (desc) return "Recharges staffs, wands or rods.";
3847 #endif
3848     
3849                 {
3850                         int power = 90;
3851
3852                         if (info) return info_power(power);
3853
3854                         if (cast)
3855                         {
3856                                 if (!recharge(power)) return NULL;
3857                         }
3858                 }
3859                 break;
3860
3861         case 19:
3862 #ifdef JP
3863                 if (name) return "¸¶»Òʬ²ò";
3864                 if (desc) return "µðÂç¤Êʬ²ò¤Îµå¤òÊü¤Ä¡£";
3865 #else
3866                 if (name) return "Disintegrate";
3867                 if (desc) return "Fires a huge ball of disintegration.";
3868 #endif
3869     
3870                 {
3871                         int dam = plev + 70;
3872                         int rad = 3 + plev / 40;
3873
3874                         if (info) return info_damage(0, 0, dam);
3875
3876                         if (cast)
3877                         {
3878                                 if (!get_aim_dir(&dir)) return NULL;
3879
3880                                 fire_ball(GF_DISINTEGRATE, dir, dam, rad);
3881                         }
3882                 }
3883                 break;
3884
3885         case 20:
3886 #ifdef JP
3887                 if (name) return "¸½¼ÂÊÑÍÆ";
3888                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
3889 #else
3890                 if (name) return "Alter Reality";
3891                 if (desc) return "Recreates current dungeon level.";
3892 #endif
3893     
3894                 {
3895                         int base = 15;
3896                         int sides = 20;
3897
3898                         if (info) return info_delay(base, sides);
3899
3900                         if (cast)
3901                         {
3902                                 alter_reality();
3903                         }
3904                 }
3905                 break;
3906
3907         case 21:
3908 #ifdef JP
3909                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥í¥±¥Ã¥È";
3910                 if (desc) return "¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë¡£";
3911 #else
3912                 if (name) return "Magic Rocket";
3913                 if (desc) return "Fires a magic rocket.";
3914 #endif
3915     
3916                 {
3917                         int dam = 120 + plev * 2;
3918                         int rad = 2;
3919
3920                         if (info) return info_damage(0, 0, dam);
3921
3922                         if (cast)
3923                         {
3924                                 if (!get_aim_dir(&dir)) return NULL;
3925
3926 #ifdef JP
3927                                 msg_print("¥í¥±¥Ã¥Èȯ¼Í¡ª");
3928 #else
3929                                 msg_print("You launch a rocket!");
3930 #endif
3931
3932                                 fire_rocket(GF_ROCKET, dir, dam, rad);
3933                         }
3934                 }
3935                 break;
3936
3937         case 22:
3938 #ifdef JP
3939                 if (name) return "º®Æ٤οÏ";
3940                 if (desc) return "Éð´ï¤Ë¥«¥ª¥¹¤Î°À­¤ò¤Ä¤±¤ë¡£";
3941 #else
3942                 if (name) return "Chaos Branding";
3943                 if (desc) return "Makes current weapon a Chaotic weapon.";
3944 #endif
3945     
3946                 {
3947                         if (cast)
3948                         {
3949                                 brand_weapon(2);
3950                         }
3951                 }
3952                 break;
3953
3954         case 23:
3955 #ifdef JP
3956                 if (name) return "°­Ë⾤´­";
3957                 if (desc) return "°­Ëâ¤ò1Âξ¤´­¤¹¤ë¡£";
3958 #else
3959                 if (name) return "Summon Demon";
3960                 if (desc) return "Summons a demon.";
3961 #endif
3962     
3963                 {
3964                         if (cast)
3965                         {
3966                                 u32b mode = 0L;
3967                                 bool pet = !one_in_(3);
3968
3969                                 if (pet) mode |= PM_FORCE_PET;
3970                                 else mode |= PM_NO_PET;
3971                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
3972
3973                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_DEMON, mode))
3974                                 {
3975 #ifdef JP
3976                                         msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
3977 #else
3978                                         msg_print("The area fills with a stench of sulphur and brimstone.");
3979 #endif
3980
3981                                         if (pet)
3982                                         {
3983 #ifdef JP
3984                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3985 #else
3986                                                 msg_print("'What is thy bidding... Master?'");
3987 #endif
3988                                         }
3989                                         else
3990                                         {
3991 #ifdef JP
3992                                                 msg_print("¡ÖÈܤ·¤­¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
3993 #else
3994                                                 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
3995 #endif
3996                                         }
3997                                 }
3998                         }
3999                 }
4000                 break;
4001
4002         case 24:
4003 #ifdef JP
4004                 if (name) return "½ÅÎϸ÷Àþ";
4005                 if (desc) return "½ÅÎϤΥӡ¼¥à¤òÊü¤Ä¡£";
4006 #else
4007                 if (name) return "Beam of Gravity";
4008                 if (desc) return "Fires a beam of gravity.";
4009 #endif
4010     
4011                 {
4012                         int dice = 9 + (plev - 5) / 4;
4013                         int sides = 8;
4014
4015                         if (info) return info_damage(dice, sides, 0);
4016
4017                         if (cast)
4018                         {
4019                                 if (!get_aim_dir(&dir)) return NULL;
4020
4021                                 fire_beam(GF_GRAVITY, dir, damroll(dice, sides));
4022                         }
4023                 }
4024                 break;
4025
4026         case 25:
4027 #ifdef JP
4028                 if (name) return "ήÀ±·²";
4029                 if (desc) return "¼«Ê¬¤Î¼þÊÕ¤Ëð¨ÀФòÍî¤È¤¹¡£";
4030 #else
4031                 if (name) return "Meteor Swarm";
4032                 if (desc) return "Makes meteor balls fall down to nearby random locations.";
4033 #endif
4034     
4035                 {
4036                         int dam = plev * 2;
4037                         int rad = 2;
4038
4039                         if (info) return info_multi_damage(dam);
4040
4041                         if (cast)
4042                         {
4043                                 cast_meteor(dam, rad);
4044                         }
4045                 }
4046                 break;
4047
4048         case 26:
4049 #ifdef JP
4050                 if (name) return "±ë¤Î°ì·â";
4051                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿Ä¶µðÂç¤Ê±ê¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
4052 #else
4053                 if (name) return "Flame Strike";
4054                 if (desc) return "Generate a huge ball of fire centered on you.";
4055 #endif
4056     
4057                 {
4058                         int dam = 300 + 3 * plev;
4059                         int rad = 8;
4060
4061                         if (info) return info_damage(0, 0, dam/2);
4062
4063                         if (cast)
4064                         {
4065                                 fire_ball(GF_FIRE, 0, dam, rad);
4066                         }
4067                 }
4068                 break;
4069
4070         case 27:
4071 #ifdef JP
4072                 if (name) return "º®ÆÙ¾¤Íè";
4073                 if (desc) return "¥é¥ó¥À¥à¤Ê°À­¤Îµå¤ä¥Ó¡¼¥à¤òȯÀ¸¤µ¤»¤ë¡£";
4074 #else
4075                 if (name) return "Call Chaos";
4076                 if (desc) return "Generate random kind of balls or beams.";
4077 #endif
4078     
4079                 {
4080                         if (info) return format("%s150 / 250", s_dam);
4081
4082                         if (cast)
4083                         {
4084                                 call_chaos();
4085                         }
4086                 }
4087                 break;
4088
4089         case 28:
4090 #ifdef JP
4091                 if (name) return "¼«¸ÊÊÑÍÆ";
4092                 if (desc) return "¼«Ê¬¤òÊѿȤµ¤»¤è¤¦¤È¤¹¤ë¡£";
4093 #else
4094                 if (name) return "Polymorph Self";
4095                 if (desc) return "Polymorphs yourself.";
4096 #endif
4097     
4098                 {
4099                         if (cast)
4100                         {
4101 #ifdef JP
4102                                 if (!get_check("ÊѿȤ·¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) return NULL;
4103 #else
4104                                 if (!get_check("You will polymorph yourself. Are you sure? ")) return NULL;
4105 #endif
4106                                 do_poly_self();
4107                         }
4108                 }
4109                 break;
4110
4111         case 29:
4112 #ifdef JP
4113                 if (name) return "ËâÎϤÎÍò";
4114                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤǵðÂç¤Ê½ã¿è¤ÊËâÎϤεå¤òÊü¤Ä¡£";
4115 #else
4116                 if (name) return "Mana Storm";
4117                 if (desc) return "Fires an extremely powerful huge ball of pure mana.";
4118 #endif
4119     
4120                 {
4121                         int dam = 300 + plev * 4;
4122                         int rad = 4;
4123
4124                         if (info) return info_damage(0, 0, dam);
4125
4126                         if (cast)
4127                         {
4128                                 if (!get_aim_dir(&dir)) return NULL;
4129
4130                                 fire_ball(GF_MANA, dir, dam, rad);
4131                         }
4132                 }
4133                 break;
4134
4135         case 30:
4136 #ifdef JP
4137                 if (name) return "¥í¥°¥ë¥¹¤Î¥Ö¥ì¥¹";
4138                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤʥ«¥ª¥¹¤Îµå¤òÊü¤Ä¡£";
4139 #else
4140                 if (name) return "Breathe Logrus";
4141                 if (desc) return "Fires an extremely powerful ball of chaos.";
4142 #endif
4143     
4144                 {
4145                         int dam = p_ptr->chp;
4146                         int rad = 2;
4147
4148                         if (info) return info_damage(0, 0, dam);
4149
4150                         if (cast)
4151                         {
4152                                 if (!get_aim_dir(&dir)) return NULL;
4153
4154                                 fire_ball(GF_CHAOS, dir, dam, rad);
4155                         }
4156                 }
4157                 break;
4158
4159         case 31:
4160 #ifdef JP
4161                 if (name) return "µõ̵¾¤Íè";
4162                 if (desc) return "¼«Ê¬¤Ë¼þ°Ï¤Ë¸þ¤«¤Ã¤Æ¡¢¥í¥±¥Ã¥È¡¢½ã¿è¤ÊËâÎϤε塢Êü¼ÍÀ­ÇÑ´þʪ¤Îµå¤òÊü¤Ä¡£¤¿¤À¤·¡¢ÊɤËÎÙÀܤ·¤Æ»ÈÍѤ¹¤ë¤È¹­ÈϰϤòÇ˲õ¤¹¤ë¡£";
4163 #else
4164                 if (name) return "Call the Void";
4165                 if (desc) return "Fires rockets, mana balls and nuclear waste balls in all directions each unless you are not adjacent to any walls. Otherwise *destroys* huge area.";
4166 #endif
4167     
4168                 {
4169                         if (info) return format("%s3 * 175", s_dam);
4170
4171                         if (cast)
4172                         {
4173                                 call_the_();
4174                         }
4175                 }
4176                 break;
4177         }
4178
4179         return "";
4180 }
4181
4182
4183 static cptr do_death_spell(int spell, int mode)
4184 {
4185         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
4186         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
4187         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
4188         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
4189
4190 #ifdef JP
4191         static const char s_dam[] = "»½ý:";
4192         static const char s_random[] = "¥é¥ó¥À¥à";
4193 #else
4194         static const char s_dam[] = "dam ";
4195         static const char s_random[] = "random";
4196 #endif
4197
4198         int dir;
4199         int plev = p_ptr->lev;
4200
4201         switch (spell)
4202         {
4203         case 0:
4204 #ifdef JP
4205                 if (name) return "̵À¸Ì¿´¶ÃÎ";
4206                 if (desc) return "¶á¤¯¤ÎÀ¸Ì¿¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
4207 #else
4208                 if (name) return "Detect Unlife";
4209                 if (desc) return "Detects all nonliving monsters in your vicinity.";
4210 #endif
4211     
4212                 {
4213                         int rad = DETECT_RAD_DEFAULT;
4214
4215                         if (info) return info_radius(rad);
4216
4217                         if (cast)
4218                         {
4219                                 detect_monsters_nonliving(rad);
4220                         }
4221                 }
4222                 break;
4223
4224         case 1:
4225 #ifdef JP
4226                 if (name) return "¼ö»¦ÃÆ";
4227                 if (desc) return "¤´¤¯¾®¤µ¤Ê¼Ù°­¤ÊÎϤò»ý¤Ä¥Ü¡¼¥ë¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
4228 #else
4229                 if (name) return "Malediction";
4230                 if (desc) return "Fires a tiny ball of evil power which hurts good monsters greatly.";
4231 #endif
4232     
4233                 {
4234                         int dice = 3 + (plev - 1) / 5;
4235                         int sides = 4;
4236                         int rad = 0;
4237
4238                         if (info) return info_damage(dice, sides, 0);
4239
4240                         if (cast)
4241                         {
4242                                 if (!get_aim_dir(&dir)) return NULL;
4243
4244                                 /*
4245                                  * A radius-0 ball may (1) be aimed at
4246                                  * objects etc., and will affect them;
4247                                  * (2) may be aimed at ANY visible
4248                                  * monster, unlike a 'bolt' which must
4249                                  * travel to the monster.
4250                                  */
4251
4252                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides), rad);
4253
4254                                 if (one_in_(5))
4255                                 {
4256                                         /* Special effect first */
4257                                         int effect = randint1(1000);
4258
4259                                         if (effect == 666)
4260                                                 fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);
4261                                         else if (effect < 500)
4262                                                 fire_ball_hide(GF_TURN_ALL, dir, plev, 0);
4263                                         else if (effect < 800)
4264                                                 fire_ball_hide(GF_OLD_CONF, dir, plev, 0);
4265                                         else
4266                                                 fire_ball_hide(GF_STUN, dir, plev, 0);
4267                                 }
4268                         }
4269                 }
4270                 break;
4271
4272         case 2:
4273 #ifdef JP
4274                 if (name) return "¼Ù°­´¶ÃÎ";
4275                 if (desc) return "¶á¤¯¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
4276 #else
4277                 if (name) return "Detect Evil";
4278                 if (desc) return "Detects all evil monsters in your vicinity.";
4279 #endif
4280     
4281                 {
4282                         int rad = DETECT_RAD_DEFAULT;
4283
4284                         if (info) return info_radius(rad);
4285
4286                         if (cast)
4287                         {
4288                                 detect_monsters_evil(rad);
4289                         }
4290                 }
4291                 break;
4292
4293         case 3:
4294 #ifdef JP
4295                 if (name) return "°­½­±À";
4296                 if (desc) return "ÆǤεå¤òÊü¤Ä¡£";
4297 #else
4298                 if (name) return "Stinking Cloud";
4299                 if (desc) return "Fires a ball of poison.";
4300 #endif
4301     
4302                 {
4303                         int dam = 10 + plev / 2;
4304                         int rad = 2;
4305
4306                         if (info) return info_damage(0, 0, dam);
4307
4308                         if (cast)
4309                         {
4310                                 if (!get_aim_dir(&dir)) return NULL;
4311
4312                                 fire_ball(GF_POIS, dir, dam, rad);
4313                         }
4314                 }
4315                 break;
4316
4317         case 4:
4318 #ifdef JP
4319                 if (name) return "¹õ¤¤Ì²¤ê";
4320                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4321 #else
4322                 if (name) return "Black Sleep";
4323                 if (desc) return "Attempts to sleep a monster.";
4324 #endif
4325     
4326                 {
4327                         int power = plev;
4328
4329                         if (info) return info_power(power);
4330
4331                         if (cast)
4332                         {
4333                                 if (!get_aim_dir(&dir)) return NULL;
4334
4335                                 sleep_monster(dir);
4336                         }
4337                 }
4338                 break;
4339
4340         case 5:
4341 #ifdef JP
4342                 if (name) return "ÂÑÆÇ";
4343                 if (desc) return "°ìÄê»þ´Ö¡¢ÆǤؤÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
4344 #else
4345                 if (name) return "Resist Poison";
4346                 if (desc) return "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.";
4347 #endif
4348     
4349                 {
4350                         int base = 20;
4351
4352                         if (info) return info_duration(base, base);
4353
4354                         if (cast)
4355                         {
4356                                 set_oppose_pois(randint1(base) + base, FALSE);
4357                         }
4358                 }
4359                 break;
4360
4361         case 6:
4362 #ifdef JP
4363                 if (name) return "¶²¹²";
4364                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¡¢Û¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4365 #else
4366                 if (name) return "Horrify";
4367                 if (desc) return "Attempts to scare and stun a monster.";
4368 #endif
4369     
4370                 {
4371                         int power = plev;
4372
4373                         if (info) return info_power(power);
4374
4375                         if (cast)
4376                         {
4377                                 if (!get_aim_dir(&dir)) return NULL;
4378
4379                                 fear_monster(dir, power);
4380                                 stun_monster(dir, power);
4381                         }
4382                 }
4383                 break;
4384
4385         case 7:
4386 #ifdef JP
4387                 if (name) return "¥¢¥ó¥Ç¥Ã¥É½¾Â°";
4388                 if (desc) return "¥¢¥ó¥Ç¥Ã¥É1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4389 #else
4390                 if (name) return "Enslave Undead";
4391                 if (desc) return "Attempts to charm an undead monster.";
4392 #endif
4393     
4394                 {
4395                         int power = plev;
4396
4397                         if (info) return info_power(power);
4398
4399                         if (cast)
4400                         {
4401                                 if (!get_aim_dir(&dir)) return NULL;
4402
4403                                 control_one_undead(dir, power);
4404                         }
4405                 }
4406                 break;
4407
4408         case 8:
4409 #ifdef JP
4410                 if (name) return "¥¨¥ó¥È¥í¥Ô¡¼¤Îµå";
4411                 if (desc) return "À¸Ì¿¤Î¤¢¤ë¼Ô¤Ë¸ú²Ì¤Î¤¢¤ëµå¤òÊü¤Ä¡£";
4412 #else
4413                 if (name) return "Orb of Entropy";
4414                 if (desc) return "Fires a ball which damages living monsters.";
4415 #endif
4416     
4417                 {
4418                         int dice = 3;
4419                         int sides = 6;
4420                         int rad = (plev < 30) ? 2 : 3;
4421                         int base;
4422
4423                         if (p_ptr->pclass == CLASS_MAGE ||
4424                             p_ptr->pclass == CLASS_HIGH_MAGE ||
4425                             p_ptr->pclass == CLASS_SORCERER)
4426                                 base = plev + plev / 2;
4427                         else
4428                                 base = plev + plev / 4;
4429
4430
4431                         if (info) return info_damage(dice, sides, base);
4432
4433                         if (cast)
4434                         {
4435                                 if (!get_aim_dir(&dir)) return NULL;
4436
4437                                 fire_ball(GF_OLD_DRAIN, dir, damroll(dice, dice) + base, rad);
4438                         }
4439                 }
4440                 break;
4441
4442         case 9:
4443 #ifdef JP
4444                 if (name) return "ÃϹö¤ÎÌð";
4445                 if (desc) return "ÃϹö¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
4446 #else
4447                 if (name) return "Nether Bolt";
4448                 if (desc) return "Fires a bolt or beam of nether.";
4449 #endif
4450     
4451                 {
4452                         int dice = 8 + (plev - 5) / 4;
4453                         int sides = 8;
4454
4455                         if (info) return info_damage(dice, sides, 0);
4456
4457                         if (cast)
4458                         {
4459                                 if (!get_aim_dir(&dir)) return NULL;
4460
4461                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
4462                         }
4463                 }
4464                 break;
4465
4466         case 10:
4467 #ifdef JP
4468                 if (name) return "»¦Ù¤±À";
4469                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿ÆǤεå¤òȯÀ¸¤µ¤»¤ë¡£";
4470 #else
4471                 if (name) return "Cloud kill";
4472                 if (desc) return "Generate a ball of poison centered on you.";
4473 #endif
4474     
4475                 {
4476                         int dam = (30 + plev) * 2;
4477                         int rad = plev / 10 + 2;
4478
4479                         if (info) return info_damage(0, 0, dam/2);
4480
4481                         if (cast)
4482                         {
4483                                 project(0, rad, py, px, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);
4484                         }
4485                 }
4486                 break;
4487
4488         case 11:
4489 #ifdef JP
4490                 if (name) return "¥â¥ó¥¹¥¿¡¼¾ÃÌÇ";
4491                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¾Ã¤·µî¤ë¡£·Ð¸³Ãͤ䥢¥¤¥Æ¥à¤Ï¼ê¤ËÆþ¤é¤Ê¤¤¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4492 #else
4493                 if (name) return "Genocide One";
4494                 if (desc) return "Attempts to vanish a monster.";
4495 #endif
4496     
4497                 {
4498                         int power = plev + 50;
4499
4500                         if (info) return info_power(power);
4501
4502                         if (cast)
4503                         {
4504                                 if (!get_aim_dir(&dir)) return NULL;
4505
4506                                 fire_ball_hide(GF_GENOCIDE, dir, power, 0);
4507                         }
4508                 }
4509                 break;
4510
4511         case 12:
4512 #ifdef JP
4513                 if (name) return "ÆǤοÏ";
4514                 if (desc) return "Éð´ï¤ËÆǤΰÀ­¤ò¤Ä¤±¤ë¡£";
4515 #else
4516                 if (name) return "Poison Branding";
4517                 if (desc) return "Makes current weapon poison branded.";
4518 #endif
4519     
4520                 {
4521                         if (cast)
4522                         {
4523                                 brand_weapon(3);
4524                         }
4525                 }
4526                 break;
4527
4528         case 13:
4529 #ifdef JP
4530                 if (name) return "µÛ·ì¥É¥ì¥¤¥ó";
4531                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤ«¤éÀ¸Ì¿ÎϤòµÛ¤¤¤È¤ë¡£µÛ¤¤¤È¤Ã¤¿À¸Ì¿ÎϤˤè¤Ã¤ÆËþÊ¢ÅÙ¤¬¾å¤¬¤ë¡£";
4532 #else
4533                 if (name) return "Vampiric Drain";
4534                 if (desc) return "Absorbs some HP from a monster and gives them to you. You will also gain nutritional sustenance from this.";
4535 #endif
4536     
4537                 {
4538                         int dice = 1;
4539                         int sides = plev * 2;
4540                         int base = plev * 2;
4541
4542                         if (info) return info_damage(dice, sides, base);
4543
4544                         if (cast)
4545                         {
4546                                 int dam = base + damroll(dice, sides);
4547
4548                                 if (!get_aim_dir(&dir)) return NULL;
4549
4550                                 if (drain_life(dir, dam))
4551                                 {
4552                                         chg_virtue(V_SACRIFICE, -1);
4553                                         chg_virtue(V_VITALITY, -1);
4554
4555                                         hp_player(dam);
4556
4557                                         /*
4558                                          * Gain nutritional sustenance:
4559                                          * 150/hp drained
4560                                          *
4561                                          * A Food ration gives 5000
4562                                          * food points (by contrast)
4563                                          * Don't ever get more than
4564                                          * "Full" this way But if we
4565                                          * ARE Gorged, it won't cure
4566                                          * us
4567                                          */
4568                                         dam = p_ptr->food + MIN(5000, 100 * dam);
4569
4570                                         /* Not gorged already */
4571                                         if (p_ptr->food < PY_FOOD_MAX)
4572                                                 set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);
4573                                 }
4574                         }
4575                 }
4576                 break;
4577
4578         case 14:
4579 #ifdef JP
4580                 if (name) return "È¿º²¤Î½Ñ";
4581                 if (desc) return "¼þ°Ï¤Î»àÂΤä¹ü¤òÀ¸¤­ÊÖ¤¹¡£";
4582 #else
4583                 if (name) return "Animate dead";
4584                 if (desc) return "Resurrects nearby corpse and skeletons. And makes these your pets.";
4585 #endif
4586     
4587                 {
4588                         if (cast)
4589                         {
4590                                 animate_dead(0, py, px);
4591                         }
4592                 }
4593                 break;
4594
4595         case 15:
4596 #ifdef JP
4597                 if (name) return "Ëõ»¦";
4598                 if (desc) return "»ØÄꤷ¤¿Ê¸»ú¤Î¥â¥ó¥¹¥¿¡¼¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4599 #else
4600                 if (name) return "Genocide";
4601                 if (desc) return "Eliminates an entire class of monster, exhausting you.  Powerful or unique monsters may resist.";
4602 #endif
4603     
4604                 {
4605                         int power = plev+50;
4606
4607                         if (info) return info_power(power);
4608
4609                         if (cast)
4610                         {
4611                                 symbol_genocide(power, TRUE);
4612                         }
4613                 }
4614                 break;
4615
4616         case 16:
4617 #ifdef JP
4618                 if (name) return "¶¸Àï»Î²½";
4619                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤¹¤ë¡£";
4620 #else
4621                 if (name) return "Berserk";
4622                 if (desc) return "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.";
4623 #endif
4624     
4625                 {
4626                         int base = 25;
4627
4628                         if (info) return info_duration(base, base);
4629
4630                         if (cast)
4631                         {
4632                                 set_shero(randint1(base) + base, FALSE);
4633                                 hp_player(30);
4634                                 set_afraid(0);
4635                         }
4636                 }
4637                 break;
4638
4639         case 17:
4640 #ifdef JP
4641                 if (name) return "°­Î´­";
4642                 if (desc) return "¥é¥ó¥À¥à¤ÇÍÍ¡¹¤Ê¸ú²Ì¤¬µ¯¤³¤ë¡£";
4643 #else
4644                 if (name) return "Invoke Spirits";
4645                 if (desc) return "Causes random effects.";
4646 #endif
4647     
4648                 {
4649                         if (info) return s_random;
4650
4651                         if (cast)
4652                         {
4653                                 if (!get_aim_dir(&dir)) return NULL;
4654
4655                                 cast_invoke_spirits(dir);
4656                         }
4657                 }
4658                 break;
4659
4660         case 18:
4661 #ifdef JP
4662                 if (name) return "°Å¹õ¤ÎÌð";
4663                 if (desc) return "°Å¹õ¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
4664 #else
4665                 if (name) return "Dark Bolt";
4666                 if (desc) return "Fires a bolt or beam of darkness.";
4667 #endif
4668     
4669                 {
4670                         int dice = 4 + (plev - 5) / 4;
4671                         int sides = 8;
4672
4673                         if (info) return info_damage(dice, sides, 0);
4674
4675                         if (cast)
4676                         {
4677                                 if (!get_aim_dir(&dir)) return NULL;
4678
4679                                 fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));
4680                         }
4681                 }
4682                 break;
4683
4684         case 19:
4685 #ifdef JP
4686                 if (name) return "¶¸ÍðÀï»Î";
4687                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤·¡¢²Ã®¤¹¤ë¡£";
4688 #else
4689                 if (name) return "Battle Frenzy";
4690                 if (desc) return "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.";
4691 #endif
4692     
4693                 {
4694                         int b_base = 25;
4695                         int sp_base = plev / 2;
4696                         int sp_sides = 20 + plev / 2;
4697
4698                         if (info) return info_duration(b_base, b_base);
4699
4700                         if (cast)
4701                         {
4702                                 set_shero(randint1(25) + 25, FALSE);
4703                                 hp_player(30);
4704                                 set_afraid(0);
4705                                 set_fast(randint1(sp_sides) + sp_base, FALSE);
4706                         }
4707                 }
4708                 break;
4709
4710         case 20:
4711 #ifdef JP
4712                 if (name) return "µÛ·ì¤Î¿Ï";
4713                 if (desc) return "Éð´ï¤ËµÛ·ì¤Î°À­¤ò¤Ä¤±¤ë¡£";
4714 #else
4715                 if (name) return "Vampiric Branding";
4716                 if (desc) return "Makes current weapon Vampiric.";
4717 #endif
4718     
4719                 {
4720                         if (cast)
4721                         {
4722                                 brand_weapon(4);
4723                         }
4724                 }
4725                 break;
4726
4727         case 21:
4728 #ifdef JP
4729                 if (name) return "¿¿¡¦µÛ·ì";
4730                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤ«¤éÀ¸Ì¿ÎϤòµÛ¤¤¤È¤ë¡£µÛ¤¤¤È¤Ã¤¿À¸Ì¿ÎϤˤè¤Ã¤ÆÂÎÎϤ¬²óÉü¤¹¤ë¡£";
4731 #else
4732                 if (name) return "Vampirism True";
4733                 if (desc) return "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.";
4734 #endif
4735     
4736                 {
4737                         int dam = 100;
4738
4739                         if (info) return format("%s3*%d", s_dam, dam);
4740
4741                         if (cast)
4742                         {
4743                                 int i;
4744
4745                                 if (!get_aim_dir(&dir)) return NULL;
4746
4747                                 chg_virtue(V_SACRIFICE, -1);
4748                                 chg_virtue(V_VITALITY, -1);
4749
4750                                 for (i = 0; i < 3; i++)
4751                                 {
4752                                         if (drain_life(dir, dam))
4753                                                 hp_player(dam);
4754                                 }
4755                         }
4756                 }
4757                 break;
4758
4759         case 22:
4760 #ifdef JP
4761                 if (name) return "»à¤Î¸Àº²";
4762                 if (desc) return "»ë³¦Æâ¤ÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
4763 #else
4764                 if (name) return "Nether Wave";
4765                 if (desc) return "Damages all living monsters in sight.";
4766 #endif
4767     
4768                 {
4769                         int sides = plev * 3;
4770
4771                         if (info) return info_damage(1, sides, 0);
4772
4773                         if (cast)
4774                         {
4775                                 dispel_living(randint1(sides));
4776                         }
4777                 }
4778                 break;
4779
4780         case 23:
4781 #ifdef JP
4782                 if (name) return "°Å¹õ¤ÎÍò";
4783                 if (desc) return "µðÂç¤Ê°Å¹õ¤Îµå¤òÊü¤Ä¡£";
4784 #else
4785                 if (name) return "Darkness Storm";
4786                 if (desc) return "Fires a huge ball of darkness.";
4787 #endif
4788     
4789                 {
4790                         int dam = 100 + plev * 2;
4791                         int rad = 4;
4792
4793                         if (info) return info_damage(0, 0, dam);
4794
4795                         if (cast)
4796                         {
4797                                 if (!get_aim_dir(&dir)) return NULL;
4798
4799                                 fire_ball(GF_DARK, dir, dam, rad);
4800                         }
4801                 }
4802                 break;
4803
4804         case 24:
4805 #ifdef JP
4806                 if (name) return "»à¤Î¸÷Àþ";
4807                 if (desc) return "»à¤Î¸÷Àþ¤òÊü¤Ä¡£";
4808 #else
4809                 if (name) return "Death Ray";
4810                 if (desc) return "Fires a beam of death.";
4811 #endif
4812     
4813                 {
4814                         if (cast)
4815                         {
4816                                 if (!get_aim_dir(&dir)) return NULL;
4817
4818                                 death_ray(dir, plev);
4819                         }
4820                 }
4821                 break;
4822
4823         case 25:
4824 #ifdef JP
4825                 if (name) return "»à¼Ô¾¤´­";
4826                 if (desc) return "1ÂΤΥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
4827 #else
4828                 if (name) return "Raise the Dead";
4829                 if (desc) return "Summons an undead monster.";
4830 #endif
4831     
4832                 {
4833                         if (cast)
4834                         {
4835                                 int type;
4836                                 bool pet = one_in_(3);
4837                                 u32b mode = 0L;
4838
4839                                 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
4840
4841                                 if (!pet || (pet && (plev > 24) && one_in_(3)))
4842                                         mode |= PM_ALLOW_GROUP;
4843
4844                                 if (pet) mode |= PM_FORCE_PET;
4845                                 else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
4846
4847                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, type, mode))
4848                                 {
4849 #ifdef JP
4850                                         msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤­»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½­¤ò±¿¤ó¤Ç¤¤¤ë...");
4851 #else
4852                                         msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
4853 #endif
4854
4855
4856                                         if (pet)
4857                                         {
4858 #ifdef JP
4859                                                 msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
4860 #else
4861                                                 msg_print("Ancient, long-dead forms arise from the ground to serve you!");
4862 #endif
4863                                         }
4864                                         else
4865                                         {
4866 #ifdef JP
4867                                                 msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
4868 #else
4869                                                 msg_print("'The dead arise... to punish you for disturbing them!'");
4870 #endif
4871                                         }
4872
4873                                         chg_virtue(V_UNLIFE, 1);
4874                                 }
4875                         }
4876                 }
4877                 break;
4878
4879         case 26:
4880 #ifdef JP
4881                 if (name) return "»à¼Ô¤ÎÈëÅÁ";
4882                 if (desc) return "¥¢¥¤¥Æ¥à¤ò1¤Ä¼±Ê̤¹¤ë¡£¥ì¥Ù¥ë¤¬¹â¤¤¤È¥¢¥¤¥Æ¥à¤ÎǽÎϤò´°Á´¤ËÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£";
4883 #else
4884                 if (name) return "Esoteria";
4885                 if (desc) return "Identifies an item. Or *identifies* an item at higher level.";
4886 #endif
4887     
4888                 {
4889                         if (cast)
4890                         {
4891                                 if (randint1(50) > plev)
4892                                 {
4893                                         if (!ident_spell(FALSE)) return NULL;
4894                                 }
4895                                 else
4896                                 {
4897                                         if (!identify_fully(FALSE)) return NULL;
4898                                 }
4899                         }
4900                 }
4901                 break;
4902
4903         case 27:
4904 #ifdef JP
4905                 if (name) return "µÛ·ìµ´ÊѲ½";
4906                 if (desc) return "°ìÄê»þ´Ö¡¢µÛ·ìµ´¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤ËµÛ·ìµ´¤È¤·¤Æ¤ÎǽÎϤòÆÀ¤ë¡£";
4907 #else
4908                 if (name) return "Polymorph Vampire";
4909                 if (desc) return "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.";
4910 #endif
4911     
4912                 {
4913                         int base = 10 + plev / 2;
4914
4915                         if (info) return info_duration(base, base);
4916
4917                         if (cast)
4918                         {
4919                                 set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);
4920                         }
4921                 }
4922                 break;
4923
4924         case 28:
4925 #ifdef JP
4926                 if (name) return "À¸Ì¿ÎÏÉü³è";
4927                 if (desc) return "¼º¤Ã¤¿·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
4928 #else
4929                 if (name) return "Restore Life";
4930                 if (desc) return "Restore lost experience.";
4931 #endif
4932     
4933                 {
4934                         if (cast)
4935                         {
4936                                 restore_level();
4937                         }
4938                 }
4939                 break;
4940
4941         case 29:
4942 #ifdef JP
4943                 if (name) return "¼þÊÕËõ»¦";
4944                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4945 #else
4946                 if (name) return "Mass Genocide";
4947                 if (desc) return "Eliminates all nearby monsters, exhausting you.  Powerful or unique monsters may be able to resist.";
4948 #endif
4949     
4950                 {
4951                         int power = plev + 50;
4952
4953                         if (info) return info_power(power);
4954
4955                         if (cast)
4956                         {
4957                                 mass_genocide(power, TRUE);
4958                         }
4959                 }
4960                 break;
4961
4962         case 30:
4963 #ifdef JP
4964                 if (name) return "ÃϹö¤Î¹å²Ð";
4965                 if (desc) return "¼Ù°­¤ÊÎϤò»ý¤ÄÊõ¼î¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
4966 #else
4967                 if (name) return "Hellfire";
4968                 if (desc) return "Fires a powerful ball of evil power. Hurts good monsters greatly.";
4969 #endif
4970     
4971                 {
4972                         int dam = 666;
4973                         int rad = 3;
4974
4975                         if (info) return info_damage(0, 0, dam);
4976
4977                         if (cast)
4978                         {
4979                                 if (!get_aim_dir(&dir)) return NULL;
4980
4981                                 fire_ball(GF_HELL_FIRE, dir, dam, rad);
4982 #ifdef JP
4983                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "ÃϹö¤Î¹å²Ð¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
4984 #else
4985                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "the strain of casting Hellfire", -1);
4986 #endif
4987                         }
4988                 }
4989                 break;
4990
4991         case 31:
4992 #ifdef JP
4993                 if (name) return "Í©Âβ½";
4994                 if (desc) return "°ìÄê»þ´Ö¡¢ÊɤòÄ̤êÈ´¤±¤ë¤³¤È¤¬¤Ç¤­¼õ¤±¤ë¥À¥á¡¼¥¸¤¬·Ú¸º¤µ¤ì¤ëÍ©ÂΤξõÂÖ¤ËÊѿȤ¹¤ë¡£";
4995 #else
4996                 if (name) return "Wraithform";
4997                 if (desc) return "Becomes wraith form which gives ability to pass walls and makes all damages half.";
4998 #endif
4999     
5000                 {
5001                         int base = plev / 2;
5002
5003                         if (info) return info_duration(base, base);
5004
5005                         if (cast)
5006                         {
5007                                 set_wraith_form(randint1(base) + base, FALSE);
5008                         }
5009                 }
5010                 break;
5011         }
5012
5013         return "";
5014 }
5015
5016
5017 static cptr do_trump_spell(int spell, int mode)
5018 {
5019         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
5020         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
5021         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
5022         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
5023         bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
5024
5025 #ifdef JP
5026         static const char s_random[] = "¥é¥ó¥À¥à";
5027 #else
5028         static const char s_random[] = "random";
5029 #endif
5030
5031         int dir;
5032         int plev = p_ptr->lev;
5033
5034         switch (spell)
5035         {
5036         case 0:
5037 #ifdef JP
5038                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
5039                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
5040 #else
5041                 if (name) return "Phase Door";
5042                 if (desc) return "Teleport short distance.";
5043 #endif
5044     
5045                 {
5046                         int range = 10;
5047
5048                         if (info) return info_range(range);
5049
5050                         if (cast)
5051                         {
5052                                 teleport_player(range, 0L);
5053                         }
5054                 }
5055                 break;
5056
5057         case 1:
5058 #ifdef JP
5059                 if (name) return "ÃØéá¤Î¥«¡¼¥É";
5060                 if (desc) return "ÃØéá¤ò¾¤´­¤¹¤ë¡£";
5061 #else
5062                 if (name) return "Trump Spiders";
5063                 if (desc) return "Summons spiders.";
5064 #endif
5065     
5066                 {
5067                         if (cast || fail)
5068                         {
5069 #ifdef JP
5070                                 msg_print("¤¢¤Ê¤¿¤ÏÃØéá¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5071 #else
5072                                 msg_print("You concentrate on the trump of an spider...");
5073 #endif
5074
5075                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))
5076                                 {
5077                                         if (fail)
5078                                         {
5079 #ifdef JP
5080                                                 msg_print("¾¤´­¤µ¤ì¤¿ÃØéá¤ÏÅܤäƤ¤¤ë¡ª");
5081 #else
5082                                                 msg_print("The summoned spiders get angry!");
5083 #endif
5084                                         }
5085                                 }
5086                         }
5087                 }
5088                 break;
5089
5090         case 2:
5091 #ifdef JP
5092                 if (name) return "¥·¥ã¥Ã¥Õ¥ë";
5093                 if (desc) return "¥«¡¼¥É¤ÎÀꤤ¤ò¤¹¤ë¡£";
5094 #else
5095                 if (name) return "Shuffle";
5096                 if (desc) return "Causes random effects.";
5097 #endif
5098     
5099                 {
5100                         if (info) return s_random;
5101
5102                         if (cast)
5103                         {
5104                                 cast_shuffle();
5105                         }
5106                 }
5107                 break;
5108
5109         case 3:
5110 #ifdef JP
5111                 if (name) return "¥Õ¥í¥¢¡¦¥ê¥»¥Ã¥È";
5112                 if (desc) return "ºÇ¿¼³¬¤òÊѹ¹¤¹¤ë¡£";
5113 #else
5114                 if (name) return "Reset Recall";
5115                 if (desc) return "Resets the 'deepest' level for recall spell.";
5116 #endif
5117     
5118                 {
5119                         if (cast)
5120                         {
5121                                 if (!reset_recall()) return NULL;
5122                         }
5123                 }
5124                 break;
5125
5126         case 4:
5127 #ifdef JP
5128                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
5129                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
5130 #else
5131                 if (name) return "Teleport";
5132                 if (desc) return "Teleport long distance.";
5133 #endif
5134     
5135                 {
5136                         int range = plev * 4;
5137
5138                         if (info) return info_range(range);
5139
5140                         if (cast)
5141                         {
5142                                 teleport_player(range, 0L);
5143                         }
5144                 }
5145                 break;
5146
5147         case 5:
5148 #ifdef JP
5149                 if (name) return "´¶ÃΤΥ«¡¼¥É";
5150                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
5151 #else
5152                 if (name) return "Trump Spying";
5153                 if (desc) return "Gives telepathy for a while.";
5154 #endif
5155     
5156                 {
5157                         int base = 25;
5158                         int sides = 30;
5159
5160                         if (info) return info_duration(base, sides);
5161
5162                         if (cast)
5163                         {
5164                                 set_tim_esp(randint1(sides) + base, FALSE);
5165                         }
5166                 }
5167                 break;
5168
5169         case 6:
5170 #ifdef JP
5171                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
5172                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
5173 #else
5174                 if (name) return "Teleport Away";
5175                 if (desc) return "Teleports all monsters on the line away unless resisted.";
5176 #endif
5177     
5178                 {
5179                         int power = plev;
5180
5181                         if (info) return info_power(power);
5182
5183                         if (cast)
5184                         {
5185                                 if (!get_aim_dir(&dir)) return NULL;
5186
5187                                 fire_beam(GF_AWAY_ALL, dir, power);
5188                         }
5189                 }
5190                 break;
5191
5192         case 7:
5193 #ifdef JP
5194                 if (name) return "ưʪ¤Î¥«¡¼¥É";
5195                 if (desc) return "1ÂΤÎưʪ¤ò¾¤´­¤¹¤ë¡£";
5196 #else
5197                 if (name) return "Trump Animals";
5198                 if (desc) return "Summons an animal.";
5199 #endif
5200     
5201                 {
5202                         if (cast || fail)
5203                         {
5204                                 int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
5205
5206 #ifdef JP
5207                                 msg_print("¤¢¤Ê¤¿¤Ïưʪ¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5208 #else
5209                                 msg_print("You concentrate on the trump of an animal...");
5210 #endif
5211
5212                                 if (trump_summoning(1, !fail, py, px, 0, type, 0L))
5213                                 {
5214                                         if (fail)
5215                                         {
5216 #ifdef JP
5217                                                 msg_print("¾¤´­¤µ¤ì¤¿Æ°Êª¤ÏÅܤäƤ¤¤ë¡ª");
5218 #else
5219                                                 msg_print("The summoned animal gets angry!");
5220 #endif
5221                                         }
5222                                 }
5223                         }
5224                 }
5225                 break;
5226
5227         case 8:
5228 #ifdef JP
5229                 if (name) return "°ÜÆ°¤Î¥«¡¼¥É";
5230                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼«Ê¬¤Î­¸µ¤Ø°ÜÆ°¤µ¤»¤ë¡£";
5231 #else
5232                 if (name) return "Trump Reach";
5233                 if (desc) return "Pulls a distant item close to you.";
5234 #endif
5235     
5236                 {
5237                         int weight = plev * 15;
5238
5239                         if (info) return info_weight(weight);
5240
5241                         if (cast)
5242                         {
5243                                 if (!get_aim_dir(&dir)) return NULL;
5244
5245                                 fetch(dir, weight, FALSE);
5246                         }
5247                 }
5248                 break;
5249
5250         case 9:
5251 #ifdef JP
5252                 if (name) return "¥«¥ß¥«¥¼¤Î¥«¡¼¥É";
5253                 if (desc) return "Ê£¿ô¤ÎÇúȯ¤¹¤ë¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤¹¤ë¡£";
5254 #else
5255                 if (name) return "Trump Kamikaze";
5256                 if (desc) return "Summons monsters which explode by itself.";
5257 #endif
5258     
5259                 {
5260                         if (cast || fail)
5261                         {
5262                                 int x, y;
5263                                 int type;
5264
5265                                 if (cast)
5266                                 {
5267                                         if (!target_set(TARGET_KILL)) return NULL;
5268                                         x = target_col;
5269                                         y = target_row;
5270                                 }
5271                                 else
5272                                 {
5273                                         /* Summons near player when failed */
5274                                         x = px;
5275                                         y = py;
5276                                 }
5277
5278                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
5279                                         type = SUMMON_KAMIKAZE_LIVING;
5280                                 else
5281                                         type = SUMMON_KAMIKAZE;
5282
5283 #ifdef JP
5284                                 msg_print("¤¢¤Ê¤¿¤Ï¥«¥ß¥«¥¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5285 #else
5286                                 msg_print("You concentrate on several trumps at once...");
5287 #endif
5288
5289                                 if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))
5290                                 {
5291                                         if (fail)
5292                                         {
5293 #ifdef JP
5294                                                 msg_print("¾¤´­¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
5295 #else
5296                                                 msg_print("The summoned creatures get angry!");
5297 #endif
5298                                         }
5299                                 }
5300                         }
5301                 }
5302                 break;
5303
5304         case 10:
5305 #ifdef JP
5306                 if (name) return "¸¸Î´­";
5307                 if (desc) return "1ÂΤÎÍ©Îî¤ò¾¤´­¤¹¤ë¡£";
5308 #else
5309                 if (name) return "Phantasmal Servant";
5310                 if (desc) return "Summons a ghost.";
5311 #endif
5312     
5313                 {
5314                         /* Phantasmal Servant is not summoned as enemy when failed */
5315                         if (cast)
5316                         {
5317                                 int summon_lev = plev * 2 / 3 + randint1(plev / 2);
5318
5319                                 if (trump_summoning(1, !fail, py, px, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))
5320                                 {
5321 #ifdef JP
5322                                         msg_print("¸æÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¸æ¼ç¿ÍÍÍ¡©");
5323 #else
5324                                         msg_print("'Your wish, master?'");
5325 #endif
5326                                 }
5327                         }
5328                 }
5329                 break;
5330
5331         case 11:
5332 #ifdef JP
5333                 if (name) return "¥¹¥Ô¡¼¥É¡¦¥â¥ó¥¹¥¿¡¼";
5334                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò²Ã®¤µ¤»¤ë¡£";
5335 #else
5336                 if (name) return "Haste Monster";
5337                 if (desc) return "Hastes a monster.";
5338 #endif
5339     
5340                 {
5341                         if (cast)
5342                         {
5343                                 bool result;
5344
5345                                 /* Temporary enable target_pet option */
5346                                 bool old_target_pet = target_pet;
5347                                 target_pet = TRUE;
5348
5349                                 result = get_aim_dir(&dir);
5350
5351                                 /* Restore target_pet option */
5352                                 target_pet = old_target_pet;
5353
5354                                 if (!result) return NULL;
5355
5356                                 speed_monster(dir);
5357                         }
5358                 }
5359                 break;
5360
5361         case 12:
5362 #ifdef JP
5363                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
5364                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
5365 #else
5366                 if (name) return "Teleport Level";
5367                 if (desc) return "Teleport to up or down stairs in a moment.";
5368 #endif
5369     
5370                 {
5371                         if (cast)
5372                         {
5373 #ifdef JP
5374                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
5375 #else
5376                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
5377 #endif
5378                                 teleport_level(0);
5379                         }
5380                 }
5381                 break;
5382
5383         case 13:
5384 #ifdef JP
5385                 if (name) return "¼¡¸µ¤ÎÈâ";
5386                 if (desc) return "ûµ÷Î¥Æâ¤Î»ØÄꤷ¤¿¾ì½ê¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
5387 #else
5388                 if (name) return "Dimension Door";
5389                 if (desc) return "Teleport to given location.";
5390 #endif
5391     
5392                 {
5393                         int range = plev / 2 + 10;
5394
5395                         if (info) return info_range(range);
5396
5397                         if (cast)
5398                         {
5399 #ifdef JP
5400                                 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
5401 #else
5402                                 msg_print("You open a dimensional gate. Choose a destination.");
5403 #endif
5404
5405                                 if (!dimension_door()) return NULL;
5406                         }
5407                 }
5408                 break;
5409
5410         case 14:
5411 #ifdef JP
5412                 if (name) return "µ¢´Ô¤Î¼öʸ";
5413                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
5414 #else
5415                 if (name) return "Word of Recall";
5416                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
5417 #endif
5418     
5419                 {
5420                         int base = 15;
5421                         int sides = 20;
5422
5423                         if (info) return info_delay(base, sides);
5424
5425                         if (cast)
5426                         {
5427                                 if (!word_of_recall()) return NULL;
5428                         }
5429                 }
5430                 break;
5431
5432         case 15:
5433 #ifdef JP
5434                 if (name) return "²øʪÄÉÊü";
5435                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
5436 #else
5437                 if (name) return "Banish";
5438                 if (desc) return "Teleports all monsters in sight away unless resisted.";
5439 #endif
5440     
5441                 {
5442                         int power = plev * 4;
5443
5444                         if (info) return info_power(power);
5445
5446                         if (cast)
5447                         {
5448                                 banish_monsters(power);
5449                         }
5450                 }
5451                 break;
5452
5453         case 16:
5454 #ifdef JP
5455                 if (name) return "°ÌÃÖ¸ò´¹¤Î¥«¡¼¥É";
5456                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤È°ÌÃÖ¤ò¸ò´¹¤¹¤ë¡£";
5457 #else
5458                 if (name) return "Swap Position";
5459                 if (desc) return "Swap positions of you and a monster.";
5460 #endif
5461     
5462                 {
5463                         if (cast)
5464                         {
5465                                 bool result;
5466
5467                                 /* HACK -- No range limit */
5468                                 project_length = -1;
5469
5470                                 result = get_aim_dir(&dir);
5471
5472                                 /* Restore range to default */
5473                                 project_length = 0;
5474
5475                                 if (!result) return NULL;
5476
5477                                 teleport_swap(dir);
5478                         }
5479                 }
5480                 break;
5481
5482         case 17:
5483 #ifdef JP
5484                 if (name) return "¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É";
5485                 if (desc) return "1ÂΤΥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
5486 #else
5487                 if (name) return "Trump Undead";
5488                 if (desc) return "Summons an undead monster.";
5489 #endif
5490     
5491                 {
5492                         if (cast || fail)
5493                         {
5494 #ifdef JP
5495                                 msg_print("¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5496 #else
5497                                 msg_print("You concentrate on the trump of an undead creature...");
5498 #endif
5499
5500                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_UNDEAD, 0L))
5501                                 {
5502                                         if (fail)
5503                                         {
5504 #ifdef JP
5505                                                 msg_print("¾¤´­¤µ¤ì¤¿¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
5506 #else
5507                                                 msg_print("The summoned undead creature gets angry!");
5508 #endif
5509                                         }
5510                                 }
5511                         }
5512                 }
5513                 break;
5514
5515         case 18:
5516 #ifdef JP
5517                 if (name) return "à¨ÃîÎà¤Î¥«¡¼¥É";
5518                 if (desc) return "1ÂΤΥҥɥé¤ò¾¤´­¤¹¤ë¡£";
5519 #else
5520                 if (name) return "Trump Reptiles";
5521                 if (desc) return "Summons a hydra.";
5522 #endif
5523     
5524                 {
5525                         if (cast || fail)
5526                         {
5527 #ifdef JP
5528                                 msg_print("¤¢¤Ê¤¿¤Ïà¨ÃîÎà¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5529 #else
5530                                 msg_print("You concentrate on the trump of a reptile...");
5531 #endif
5532
5533                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HYDRA, 0L))
5534                                 {
5535                                         if (fail)
5536                                         {
5537 #ifdef JP
5538                                                 msg_print("¾¤´­¤µ¤ì¤¿à¨ÃîÎà¤ÏÅܤäƤ¤¤ë¡ª");
5539 #else
5540                                                 msg_print("The summoned reptile gets angry!");
5541 #endif
5542                                         }
5543                                 }
5544                         }
5545                 }
5546                 break;
5547
5548         case 19:
5549 #ifdef JP
5550                 if (name) return "¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É";
5551                 if (desc) return "Ê£¿ô¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤¹¤ë¡£";
5552 #else
5553                 if (name) return "Trump Monsters";
5554                 if (desc) return "Summons some monsters.";
5555 #endif
5556     
5557                 {
5558                         if (cast || fail)
5559                         {
5560                                 int type;
5561
5562 #ifdef JP
5563                                 msg_print("¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5564 #else
5565                                 msg_print("You concentrate on several trumps at once...");
5566 #endif
5567
5568                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
5569                                         type = SUMMON_LIVING;
5570                                 else
5571                                         type = 0;
5572
5573                                 if (trump_summoning((1 + (plev - 15)/ 10), !fail, py, px, 0, type, 0L))
5574                                 {
5575                                         if (fail)
5576                                         {
5577 #ifdef JP
5578                                                 msg_print("¾¤´­¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
5579 #else
5580                                                 msg_print("The summoned creatures get angry!");
5581 #endif
5582                                         }
5583                                 }
5584
5585                         }
5586                 }
5587                 break;
5588
5589         case 20:
5590 #ifdef JP
5591                 if (name) return "¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É";
5592                 if (desc) return "1¥°¥ë¡¼¥×¤Î¥Ï¥¦¥ó¥É¤ò¾¤´­¤¹¤ë¡£";
5593 #else
5594                 if (name) return "Trump Hounds";
5595                 if (desc) return "Summons a group of hounds.";
5596 #endif
5597     
5598                 {
5599                         if (cast || fail)
5600                         {
5601 #ifdef JP
5602                                 msg_print("¤¢¤Ê¤¿¤Ï¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5603 #else
5604                                 msg_print("You concentrate on the trump of a hound...");
5605 #endif
5606
5607                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HOUND, PM_ALLOW_GROUP))
5608                                 {
5609                                         if (fail)
5610                                         {
5611 #ifdef JP
5612                                                 msg_print("¾¤´­¤µ¤ì¤¿¥Ï¥¦¥ó¥É¤ÏÅܤäƤ¤¤ë¡ª");
5613 #else
5614                                                 msg_print("The summoned hounds get angry!");
5615 #endif
5616                                         }
5617                                 }
5618                         }
5619                 }
5620                 break;
5621
5622         case 21:
5623 #ifdef JP
5624                 if (name) return "¥È¥é¥ó¥×¤Î¿Ï";
5625                 if (desc) return "Éð´ï¤Ë¥È¥é¥ó¥×¤Î°À­¤ò¤Ä¤±¤ë¡£";
5626 #else
5627                 if (name) return "Trump Branding";
5628                 if (desc) return "Makes current weapon a Trump weapon.";
5629 #endif
5630     
5631                 {
5632                         if (cast)
5633                         {
5634                                 brand_weapon(5);
5635                         }
5636                 }
5637                 break;
5638
5639         case 22:
5640 #ifdef JP
5641                 if (name) return "¿Í´Ö¥È¥é¥ó¥×";
5642                 if (desc) return "¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤«¡¢¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤¬¿È¤Ë¤Ä¤¯¡£";
5643 #else
5644                 if (name) return "Living Trump";
5645                 if (desc) return "Gives mutation which makes you teleport randomly or makes you able to teleport at will.";
5646 #endif
5647     
5648                 {
5649                         if (cast)
5650                         {
5651                                 int mutation;
5652
5653                                 if (one_in_(7))
5654                                         /* Teleport control */
5655                                         mutation = 12;
5656                                 else
5657                                         /* Random teleportation (uncontrolled) */
5658                                         mutation = 77;
5659
5660                                 /* Gain the mutation */
5661                                 if (gain_random_mutation(mutation))
5662                                 {
5663 #ifdef JP
5664                                         msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤­¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
5665 #else
5666                                         msg_print("You have turned into a Living Trump.");
5667 #endif
5668                                 }
5669                         }
5670                 }
5671                 break;
5672
5673         case 23:
5674 #ifdef JP
5675                 if (name) return "¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É";
5676                 if (desc) return "1ÂΤΥµ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤¹¤ë¡£";
5677 #else
5678                 if (name) return "Trump Cyberdemon";
5679                 if (desc) return "Summons a cyber demon.";
5680 #endif
5681     
5682                 {
5683                         if (cast || fail)
5684                         {
5685 #ifdef JP
5686                                 msg_print("¤¢¤Ê¤¿¤Ï¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5687 #else
5688                                 msg_print("You concentrate on the trump of a Cyberdemon...");
5689 #endif
5690
5691                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_CYBER, 0L))
5692                                 {
5693                                         if (fail)
5694                                         {
5695 #ifdef JP
5696                                                 msg_print("¾¤´­¤µ¤ì¤¿¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5697 #else
5698                                                 msg_print("The summoned Cyberdemon gets angry!");
5699 #endif
5700                                         }
5701                                 }
5702                         }
5703                 }
5704                 break;
5705
5706         case 24:
5707 #ifdef JP
5708                 if (name) return "ͽ¸«¤Î¥«¡¼¥É";
5709                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
5710 #else
5711                 if (name) return "Trump Divination";
5712                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
5713 #endif
5714     
5715                 {
5716                         int rad = DETECT_RAD_DEFAULT;
5717
5718                         if (info) return info_radius(rad);
5719
5720                         if (cast)
5721                         {
5722                                 detect_all(rad);
5723                         }
5724                 }
5725                 break;
5726
5727         case 25:
5728 #ifdef JP
5729                 if (name) return "Ãμ±¤Î¥«¡¼¥É";
5730                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
5731 #else
5732                 if (name) return "Trump Lore";
5733                 if (desc) return "*Identifies* an item.";
5734 #endif
5735     
5736                 {
5737                         if (cast)
5738                         {
5739                                 if (!identify_fully(FALSE)) return NULL;
5740                         }
5741                 }
5742                 break;
5743
5744         case 26:
5745 #ifdef JP
5746                 if (name) return "²óÉü¥â¥ó¥¹¥¿¡¼";
5747                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤÎÂÎÎϤò²óÉü¤µ¤»¤ë¡£";
5748 #else
5749                 if (name) return "Heal Monster";
5750                 if (desc) return "Heal a monster.";
5751 #endif
5752     
5753                 {
5754                         int heal = plev * 10 + 200;
5755
5756                         if (info) return info_heal(0, 0, heal);
5757
5758                         if (cast)
5759                         {
5760                                 bool result;
5761
5762                                 /* Temporary enable target_pet option */
5763                                 bool old_target_pet = target_pet;
5764                                 target_pet = TRUE;
5765
5766                                 result = get_aim_dir(&dir);
5767
5768                                 /* Restore target_pet option */
5769                                 target_pet = old_target_pet;
5770
5771                                 if (!result) return NULL;
5772
5773                                 heal_monster(dir, heal);
5774                         }
5775                 }
5776                 break;
5777
5778         case 27:
5779 #ifdef JP
5780                 if (name) return "¥É¥é¥´¥ó¤Î¥«¡¼¥É";
5781                 if (desc) return "1ÂΤΥɥ饴¥ó¤ò¾¤´­¤¹¤ë¡£";
5782 #else
5783                 if (name) return "Trump Dragon";
5784                 if (desc) return "Summons a dragon.";
5785 #endif
5786     
5787                 {
5788                         if (cast || fail)
5789                         {
5790 #ifdef JP
5791                                 msg_print("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5792 #else
5793                                 msg_print("You concentrate on the trump of a dragon...");
5794 #endif
5795
5796                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_DRAGON, 0L))
5797                                 {
5798                                         if (fail)
5799                                         {
5800 #ifdef JP
5801                                                 msg_print("¾¤´­¤µ¤ì¤¿¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5802 #else
5803                                                 msg_print("The summoned dragon gets angry!");
5804 #endif
5805                                         }
5806                                 }
5807                         }
5808                 }
5809                 break;
5810
5811         case 28:
5812 #ifdef JP
5813                 if (name) return "ð¨ÀФΥ«¡¼¥É";
5814                 if (desc) return "¼«Ê¬¤Î¼þÊÕ¤Ëð¨ÀФòÍî¤È¤¹¡£";
5815 #else
5816                 if (name) return "Trump Meteor";
5817                 if (desc) return "Makes meteor balls fall down to nearby random locations.";
5818 #endif
5819     
5820                 {
5821                         int dam = plev * 2;
5822                         int rad = 2;
5823
5824                         if (info) return info_multi_damage(dam);
5825
5826                         if (cast)
5827                         {
5828                                 cast_meteor(dam, rad);
5829                         }
5830                 }
5831                 break;
5832
5833         case 29:
5834 #ifdef JP
5835                 if (name) return "¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É";
5836                 if (desc) return "1ÂΤΰ­Ëâ¤ò¾¤´­¤¹¤ë¡£";
5837 #else
5838                 if (name) return "Trump Demon";
5839                 if (desc) return "Summons a demon.";
5840 #endif
5841     
5842                 {
5843                         if (cast || fail)
5844                         {
5845 #ifdef JP
5846                                 msg_print("¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5847 #else
5848                                 msg_print("You concentrate on the trump of a demon...");
5849 #endif
5850
5851                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_DEMON, 0L))
5852                                 {
5853                                         if (fail)
5854                                         {
5855 #ifdef JP
5856                                                 msg_print("¾¤´­¤µ¤ì¤¿¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5857 #else
5858                                                 msg_print("The summoned demon gets angry!");
5859 #endif
5860                                         }
5861                                 }
5862                         }
5863                 }
5864                 break;
5865
5866         case 30:
5867 #ifdef JP
5868                 if (name) return "ÃϹö¤Î¥«¡¼¥É";
5869                 if (desc) return "1ÂΤξåµé¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
5870 #else
5871                 if (name) return "Trump Greater Undead";
5872                 if (desc) return "Summons a greater undead.";
5873 #endif
5874     
5875                 {
5876                         if (cast || fail)
5877                         {
5878 #ifdef JP
5879                                 msg_print("¤¢¤Ê¤¿¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5880 #else
5881                                 msg_print("You concentrate on the trump of a greater undead being...");
5882 #endif
5883                                 /* May allow unique depend on level and dice roll */
5884                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))
5885                                 {
5886                                         if (fail)
5887                                         {
5888 #ifdef JP
5889                                                 msg_print("¾¤´­¤µ¤ì¤¿¾åµé¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
5890 #else
5891                                                 msg_print("The summoned greater undead creature gets angry!");
5892 #endif
5893                                         }
5894                                 }
5895                         }
5896                 }
5897                 break;
5898
5899         case 31:
5900 #ifdef JP
5901                 if (name) return "¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É";
5902                 if (desc) return "1ÂΤθÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤¹¤ë¡£";
5903 #else
5904                 if (name) return "Trump Ancient Dragon";
5905                 if (desc) return "Summons an ancient dragon.";
5906 #endif
5907     
5908                 {
5909                         if (cast)
5910                         {
5911                                 int type;
5912
5913                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
5914                                         type = SUMMON_HI_DRAGON_LIVING;
5915                                 else
5916                                         type = SUMMON_HI_DRAGON;
5917
5918 #ifdef JP
5919                                 msg_print("¤¢¤Ê¤¿¤Ï¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5920 #else
5921                                 msg_print("You concentrate on the trump of an ancient dragon...");
5922 #endif
5923
5924                                 /* May allow unique depend on level and dice roll */
5925                                 if (trump_summoning(1, !fail, py, px, 0, type, PM_ALLOW_UNIQUE))
5926                                 {
5927                                         if (fail)
5928                                         {
5929 #ifdef JP
5930                                                 msg_print("¾¤´­¤µ¤ì¤¿¸ÅÂå¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5931 #else
5932                                                 msg_print("The summoned ancient dragon gets angry!");
5933 #endif
5934                                         }
5935                                 }
5936                         }
5937                 }
5938                 break;
5939         }
5940
5941         return "";
5942 }
5943
5944
5945 static cptr do_arcane_spell(int spell, int mode)
5946 {
5947         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
5948         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
5949         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
5950         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
5951
5952         int dir;
5953         int plev = p_ptr->lev;
5954
5955         switch (spell)
5956         {
5957         case 0:
5958 #ifdef JP
5959                 if (name) return "ÅÅ·â";
5960                 if (desc) return "ÅÅ·â¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
5961 #else
5962                 if (name) return "Zap";
5963                 if (desc) return "Fires a bolt or beam of lightning.";
5964 #endif
5965     
5966                 {
5967                         int dice = 3 + (plev - 1) / 5;
5968                         int sides = 3;
5969
5970                         if (info) return info_damage(dice, sides, 0);
5971
5972                         if (cast)
5973                         {
5974                                 if (!get_aim_dir(&dir)) return NULL;
5975
5976                                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
5977                         }
5978                 }
5979                 break;
5980
5981         case 1:
5982 #ifdef JP
5983                 if (name) return "ËâË¡¤Î»Ü¾û";
5984                 if (desc) return "Èâ¤Ë¸°¤ò¤«¤±¤ë¡£";
5985 #else
5986                 if (name) return "Wizard Lock";
5987                 if (desc) return "Locks a door.";
5988 #endif
5989     
5990                 {
5991                         if (cast)
5992                         {
5993                                 if (!get_aim_dir(&dir)) return NULL;
5994
5995                                 wizard_lock(dir);
5996                         }
5997                 }
5998                 break;
5999
6000         case 2:
6001 #ifdef JP
6002                 if (name) return "Æ©ÌÀÂδ¶ÃÎ";
6003                 if (desc) return "¶á¤¯¤ÎÆ©ÌÀ¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
6004 #else
6005                 if (name) return "Detect Invisibility";
6006                 if (desc) return "Detects all invisible monsters in your vicinity.";
6007 #endif
6008     
6009                 {
6010                         int rad = DETECT_RAD_DEFAULT;
6011
6012                         if (info) return info_radius(rad);
6013
6014                         if (cast)
6015                         {
6016                                 detect_monsters_invis(rad);
6017                         }
6018                 }
6019                 break;
6020
6021         case 3:
6022 #ifdef JP
6023                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
6024                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
6025 #else
6026                 if (name) return "Detect Monsters";
6027                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
6028 #endif
6029     
6030                 {
6031                         int rad = DETECT_RAD_DEFAULT;
6032
6033                         if (info) return info_radius(rad);
6034
6035                         if (cast)
6036                         {
6037                                 detect_monsters_normal(rad);
6038                         }
6039                 }
6040                 break;
6041
6042         case 4:
6043 #ifdef JP
6044                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
6045                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
6046 #else
6047                 if (name) return "Blink";
6048                 if (desc) return "Teleport short distance.";
6049 #endif
6050     
6051                 {
6052                         int range = 10;
6053
6054                         if (info) return info_range(range);
6055
6056                         if (cast)
6057                         {
6058                                 teleport_player(range, 0L);
6059                         }
6060                 }
6061                 break;
6062
6063         case 5:
6064 #ifdef JP
6065                 if (name) return "¥é¥¤¥È¡¦¥¨¥ê¥¢";
6066                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
6067 #else
6068                 if (name) return "Light Area";
6069                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
6070 #endif
6071     
6072                 {
6073                         int dice = 2;
6074                         int sides = plev / 2;
6075                         int rad = plev / 10 + 1;
6076
6077                         if (info) return info_damage(dice, sides, 0);
6078
6079                         if (cast)
6080                         {
6081                                 lite_area(damroll(dice, sides), rad);
6082                         }
6083                 }
6084                 break;
6085
6086         case 6:
6087 #ifdef JP
6088                 if (name) return "櫤ÈÈâ Ç˲õ";
6089                 if (desc) return "°ìľÀþ¾å¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
6090 #else
6091                 if (name) return "Trap & Door Destruction";
6092                 if (desc) return "Fires a beam which destroy traps and doors.";
6093 #endif
6094     
6095                 {
6096                         if (cast)
6097                         {
6098                                 if (!get_aim_dir(&dir)) return NULL;
6099
6100                                 destroy_door(dir);
6101                         }
6102                 }
6103                 break;
6104
6105         case 7:
6106 #ifdef JP
6107                 if (name) return "·Ú½ý¤Î¼£Ìþ";
6108                 if (desc) return "²ø²æ¤ÈÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
6109 #else
6110                 if (name) return "Cure Light Wounds";
6111                 if (desc) return "Heals cut and HP a little.";
6112 #endif
6113     
6114                 {
6115                         int dice = 2;
6116                         int sides = 8;
6117
6118                         if (info) return info_heal(dice, sides, 0);
6119
6120                         if (cast)
6121                         {
6122                                 hp_player(damroll(dice, sides));
6123                                 set_cut(p_ptr->cut - 10);
6124                         }
6125                 }
6126                 break;
6127
6128         case 8:
6129 #ifdef JP
6130                 if (name) return "櫤ÈÈâ ´¶ÃÎ";
6131                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤È³¬Ãʤò´¶ÃΤ¹¤ë¡£";
6132 #else
6133                 if (name) return "Detect Doors & Traps";
6134                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
6135 #endif
6136     
6137                 {
6138                         int rad = DETECT_RAD_DEFAULT;
6139
6140                         if (info) return info_radius(rad);
6141
6142                         if (cast)
6143                         {
6144                                 detect_traps(rad, TRUE);
6145                                 detect_doors(rad);
6146                                 detect_stairs(rad);
6147                         }
6148                 }
6149                 break;
6150
6151         case 9:
6152 #ifdef JP
6153                 if (name) return "dzÁÇ";
6154                 if (desc) return "¸÷¸»¤ËdzÎÁ¤òÊäµë¤¹¤ë¡£";
6155 #else
6156                 if (name) return "Phlogiston";
6157                 if (desc) return "Adds more turns of light to a lantern or torch.";
6158 #endif
6159     
6160                 {
6161                         if (cast)
6162                         {
6163                                 phlogiston();
6164                         }
6165                 }
6166                 break;
6167
6168         case 10:
6169 #ifdef JP
6170                 if (name) return "ºâÊõ´¶ÃÎ";
6171                 if (desc) return "¶á¤¯¤ÎºâÊõ¤ò´¶ÃΤ¹¤ë¡£";
6172 #else
6173                 if (name) return "Detect Treasure";
6174                 if (desc) return "Detects all treasures in your vicinity.";
6175 #endif
6176     
6177                 {
6178                         int rad = DETECT_RAD_DEFAULT;
6179
6180                         if (info) return info_radius(rad);
6181
6182                         if (cast)
6183                         {
6184                                 detect_treasure(rad);
6185                                 detect_objects_gold(rad);
6186                         }
6187                 }
6188                 break;
6189
6190         case 11:
6191 #ifdef JP
6192                 if (name) return "ËâË¡ ´¶ÃÎ";
6193                 if (desc) return "¶á¤¯¤ÎËâË¡¤¬¤«¤«¤Ã¤¿¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6194 #else
6195                 if (name) return "Detect Enchantment";
6196                 if (desc) return "Detects all magical items in your vicinity.";
6197 #endif
6198     
6199                 {
6200                         int rad = DETECT_RAD_DEFAULT;
6201
6202                         if (info) return info_radius(rad);
6203
6204                         if (cast)
6205                         {
6206                                 detect_objects_magic(rad);
6207                         }
6208                 }
6209                 break;
6210
6211         case 12:
6212 #ifdef JP
6213                 if (name) return "¥¢¥¤¥Æ¥à´¶ÃÎ";
6214                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6215 #else
6216                 if (name) return "Detect Objects";
6217                 if (desc) return "Detects all items in your vicinity.";
6218 #endif
6219     
6220                 {
6221                         int rad = DETECT_RAD_DEFAULT;
6222
6223                         if (info) return info_radius(rad);
6224
6225                         if (cast)
6226                         {
6227                                 detect_objects_normal(rad);
6228                         }
6229                 }
6230                 break;
6231
6232         case 13:
6233 #ifdef JP
6234                 if (name) return "²òÆÇ";
6235                 if (desc) return "ÆǤòÂÎÆ⤫¤é´°Á´¤Ë¼è¤ê½ü¤¯¡£";
6236 #else
6237                 if (name) return "Cure Poison";
6238                 if (desc) return "Cures poison status.";
6239 #endif
6240     
6241                 {
6242                         if (cast)
6243                         {
6244                                 set_poisoned(0);
6245                         }
6246                 }
6247                 break;
6248
6249         case 14:
6250 #ifdef JP
6251                 if (name) return "ÂÑÎä";
6252                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6253 #else
6254                 if (name) return "Resist Cold";
6255                 if (desc) return "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.";
6256 #endif
6257     
6258                 {
6259                         int base = 20;
6260
6261                         if (info) return info_duration(base, base);
6262
6263                         if (cast)
6264                         {
6265                                 set_oppose_cold(randint1(base) + base, FALSE);
6266                         }
6267                 }
6268                 break;
6269
6270         case 15:
6271 #ifdef JP
6272                 if (name) return "ÂѲÐ";
6273                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6274 #else
6275                 if (name) return "Resist Fire";
6276                 if (desc) return "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.";
6277 #endif
6278     
6279                 {
6280                         int base = 20;
6281
6282                         if (info) return info_duration(base, base);
6283
6284                         if (cast)
6285                         {
6286                                 set_oppose_fire(randint1(base) + base, FALSE);
6287                         }
6288                 }
6289                 break;
6290
6291         case 16:
6292 #ifdef JP
6293                 if (name) return "ÂÑÅÅ";
6294                 if (desc) return "°ìÄê»þ´Ö¡¢ÅÅ·â¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6295 #else
6296                 if (name) return "Resist Lightning";
6297                 if (desc) return "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.";
6298 #endif
6299     
6300                 {
6301                         int base = 20;
6302
6303                         if (info) return info_duration(base, base);
6304
6305                         if (cast)
6306                         {
6307                                 set_oppose_elec(randint1(base) + base, FALSE);
6308                         }
6309                 }
6310                 break;
6311
6312         case 17:
6313 #ifdef JP
6314                 if (name) return "ÂÑ»À";
6315                 if (desc) return "°ìÄê»þ´Ö¡¢»À¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6316 #else
6317                 if (name) return "Resist Acid";
6318                 if (desc) return "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.";
6319 #endif
6320     
6321                 {
6322                         int base = 20;
6323
6324                         if (info) return info_duration(base, base);
6325
6326                         if (cast)
6327                         {
6328                                 set_oppose_acid(randint1(base) + base, FALSE);
6329                         }
6330                 }
6331                 break;
6332
6333         case 18:
6334 #ifdef JP
6335                 if (name) return "½Å½ý¤Î¼£Ìþ";
6336                 if (desc) return "²ø²æ¤ÈÂÎÎϤòÃæÄøÅÙ²óÉü¤µ¤»¤ë¡£";
6337 #else
6338                 if (name) return "Cure Medium Wounds";
6339                 if (desc) return "Heals cut and HP more.";
6340 #endif
6341     
6342                 {
6343                         int dice = 4;
6344                         int sides = 8;
6345
6346                         if (info) return info_heal(dice, sides, 0);
6347
6348                         if (cast)
6349                         {
6350                                 hp_player(damroll(dice, sides));
6351                                 set_cut((p_ptr->cut / 2) - 50);
6352                         }
6353                 }
6354                 break;
6355
6356         case 19:
6357 #ifdef JP
6358                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
6359                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
6360 #else
6361                 if (name) return "Teleport";
6362                 if (desc) return "Teleport long distance.";
6363 #endif
6364     
6365                 {
6366                         int range = plev * 5;
6367
6368                         if (info) return info_range(range);
6369
6370                         if (cast)
6371                         {
6372                                 teleport_player(range, 0L);
6373                         }
6374                 }
6375                 break;
6376
6377         case 20:
6378 #ifdef JP
6379                 if (name) return "´ÕÄê";
6380                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
6381 #else
6382                 if (name) return "Identify";
6383                 if (desc) return "Identifies an item.";
6384 #endif
6385     
6386                 {
6387                         if (cast)
6388                         {
6389                                 if (!ident_spell(FALSE)) return NULL;
6390                         }
6391                 }
6392                 break;
6393
6394         case 21:
6395 #ifdef JP
6396                 if (name) return "´äÀÐÍϲò";
6397                 if (desc) return "ÊɤòÍϤ«¤·¤Æ¾²¤Ë¤¹¤ë¡£";
6398 #else
6399                 if (name) return "Stone to Mud";
6400                 if (desc) return "Turns one rock square to mud.";
6401 #endif
6402     
6403                 {
6404                         int dice = 1;
6405                         int sides = 30;
6406                         int base = 20;
6407
6408                         if (info) return info_damage(dice, sides, base);
6409
6410                         if (cast)
6411                         {
6412                                 if (!get_aim_dir(&dir)) return NULL;
6413
6414                                 wall_to_mud(dir);
6415                         }
6416                 }
6417                 break;
6418
6419         case 22:
6420 #ifdef JP
6421                 if (name) return "Á®¸÷";
6422                 if (desc) return "¸÷Àþ¤òÊü¤Ä¡£¸÷¤ê¤ò·ù¤¦¥â¥ó¥¹¥¿¡¼¤Ë¸ú²Ì¤¬¤¢¤ë¡£";
6423 #else
6424                 if (name) return "Ray of Light";
6425                 if (desc) return "Fires a beam of light which damages to light-sensitive monsters.";
6426 #endif
6427     
6428                 {
6429                         int dice = 6;
6430                         int sides = 8;
6431
6432                         if (info) return info_damage(dice, sides, 0);
6433
6434                         if (cast)
6435                         {
6436                                 if (!get_aim_dir(&dir)) return NULL;
6437
6438 #ifdef JP
6439                                 msg_print("¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
6440 #else
6441                                 msg_print("A line of light appears.");
6442 #endif
6443
6444                                 lite_line(dir);
6445                         }
6446                 }
6447                 break;
6448
6449         case 23:
6450 #ifdef JP
6451                 if (name) return "¶õÊ¢½¼Â­";
6452                 if (desc) return "ËþÊ¢¤Ë¤¹¤ë¡£";
6453 #else
6454                 if (name) return "Satisfy Hunger";
6455                 if (desc) return "Satisfies hunger.";
6456 #endif
6457     
6458                 {
6459                         if (cast)
6460                         {
6461                                 set_food(PY_FOOD_MAX - 1);
6462                         }
6463                 }
6464                 break;
6465
6466         case 24:
6467 #ifdef JP
6468                 if (name) return "Æ©ÌÀ»ëǧ";
6469                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
6470 #else
6471                 if (name) return "See Invisible";
6472                 if (desc) return "Gives see invisible for a while.";
6473 #endif
6474     
6475                 {
6476                         int base = 24;
6477
6478                         if (info) return info_duration(base, base);
6479
6480                         if (cast)
6481                         {
6482                                 set_tim_invis(randint1(base) + base, FALSE);
6483                         }
6484                 }
6485                 break;
6486
6487         case 25:
6488 #ifdef JP
6489                 if (name) return "¥¨¥ì¥á¥ó¥¿¥ë¾¤´­";
6490                 if (desc) return "1ÂΤΥ¨¥ì¥á¥ó¥¿¥ë¤ò¾¤´­¤¹¤ë¡£";
6491 #else
6492                 if (name) return "Conjure Elemental";
6493                 if (desc) return "Summons an elemental.";
6494 #endif
6495     
6496                 {
6497                         if (cast)
6498                         {
6499                                 if (!summon_specific(-1, py, px, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))
6500                                 {
6501 #ifdef JP
6502                                         msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
6503 #else
6504                                         msg_print("No Elementals arrive.");
6505 #endif
6506                                 }
6507                         }
6508                 }
6509                 break;
6510
6511         case 26:
6512 #ifdef JP
6513                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
6514                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
6515 #else
6516                 if (name) return "Teleport Level";
6517                 if (desc) return "Teleport to up or down stairs in a moment.";
6518 #endif
6519     
6520                 {
6521                         if (cast)
6522                         {
6523 #ifdef JP
6524                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
6525 #else
6526                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
6527 #endif
6528                                 teleport_level(0);
6529                         }
6530                 }
6531                 break;
6532
6533         case 27:
6534 #ifdef JP
6535                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
6536                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
6537 #else
6538                 if (name) return "Teleport Away";
6539                 if (desc) return "Teleports all monsters on the line away unless resisted.";
6540 #endif
6541     
6542                 {
6543                         int power = plev;
6544
6545                         if (info) return info_power(power);
6546
6547                         if (cast)
6548                         {
6549                                 if (!get_aim_dir(&dir)) return NULL;
6550
6551                                 fire_beam(GF_AWAY_ALL, dir, power);
6552                         }
6553                 }
6554                 break;
6555
6556         case 28:
6557 #ifdef JP
6558                 if (name) return "¸µÁǤεå";
6559                 if (desc) return "±ê¡¢ÅÅ·â¡¢Î䵤¡¢»À¤Î¤É¤ì¤«¤Îµå¤òÊü¤Ä¡£";
6560 #else
6561                 if (name) return "Elemental Ball";
6562                 if (desc) return "Fires a ball of some elements.";
6563 #endif
6564     
6565                 {
6566                         int dam = 75 + plev;
6567                         int rad = 2;
6568
6569                         if (info) return info_damage(0, 0, dam);
6570
6571                         if (cast)
6572                         {
6573                                 int type;
6574
6575                                 if (!get_aim_dir(&dir)) return NULL;
6576
6577                                 switch (randint1(4))
6578                                 {
6579                                         case 1:  type = GF_FIRE;break;
6580                                         case 2:  type = GF_ELEC;break;
6581                                         case 3:  type = GF_COLD;break;
6582                                         default: type = GF_ACID;break;
6583                                 }
6584
6585                                 fire_ball(type, dir, dam, rad);
6586                         }
6587                 }
6588                 break;
6589
6590         case 29:
6591 #ifdef JP
6592                 if (name) return "Á´´¶ÃÎ";
6593                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6594 #else
6595                 if (name) return "Detection";
6596                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
6597 #endif
6598     
6599                 {
6600                         int rad = DETECT_RAD_DEFAULT;
6601
6602                         if (info) return info_radius(rad);
6603
6604                         if (cast)
6605                         {
6606                                 detect_all(rad);
6607                         }
6608                 }
6609                 break;
6610
6611         case 30:
6612 #ifdef JP
6613                 if (name) return "µ¢´Ô¤Î¼öʸ";
6614                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
6615 #else
6616                 if (name) return "Word of Recall";
6617                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
6618 #endif
6619     
6620                 {
6621                         int base = 15;
6622                         int sides = 20;
6623
6624                         if (info) return info_delay(base, sides);
6625
6626                         if (cast)
6627                         {
6628                                 if (!word_of_recall()) return NULL;
6629                         }
6630                 }
6631                 break;
6632
6633         case 31:
6634 #ifdef JP
6635                 if (name) return "ÀéΤ´ã";
6636                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤µ¤é¤Ë¡¢°ìÄê»þ´Ö¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
6637 #else
6638                 if (name) return "Clairvoyance";
6639                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
6640 #endif
6641     
6642                 {
6643                         int base = 25;
6644                         int sides = 30;
6645
6646                         if (info) return info_duration(base, sides);
6647
6648                         if (cast)
6649                         {
6650                                 chg_virtue(V_KNOWLEDGE, 1);
6651                                 chg_virtue(V_ENLIGHTEN, 1);
6652
6653                                 wiz_lite(FALSE);
6654
6655                                 if (!p_ptr->telepathy)
6656                                 {
6657                                         set_tim_esp(randint1(sides) + base, FALSE);
6658                                 }
6659                         }
6660                 }
6661                 break;
6662         }
6663
6664         return "";
6665 }
6666
6667
6668 static cptr do_craft_spell(int spell, int mode)
6669 {
6670         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
6671         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
6672         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
6673         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
6674
6675         int plev = p_ptr->lev;
6676
6677         switch (spell)
6678         {
6679         case 0:
6680 #ifdef JP
6681                 if (name) return "ÀÖ³°Àþ»ëÎÏ";
6682                 if (desc) return "°ìÄê»þ´Ö¡¢ÀÖ³°Àþ»ëÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
6683 #else
6684                 if (name) return "Infravision";
6685                 if (desc) return "Gives infravision for a while.";
6686 #endif
6687     
6688                 {
6689                         int base = 100;
6690
6691                         if (info) return info_duration(base, base);
6692
6693                         if (cast)
6694                         {
6695                                 set_tim_infra(base + randint1(base), FALSE);
6696                         }
6697                 }
6698                 break;
6699
6700         case 1:
6701 #ifdef JP
6702                 if (name) return "²óÉüÎ϶¯²½";
6703                 if (desc) return "°ìÄê»þ´Ö¡¢²óÉüÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
6704 #else
6705                 if (name) return "Regeneration";
6706                 if (desc) return "Gives regeneration ability for a while.";
6707 #endif
6708     
6709                 {
6710                         int base = 80;
6711
6712                         if (info) return info_duration(base, base);
6713
6714                         if (cast)
6715                         {
6716                                 set_tim_regen(base + randint1(base), FALSE);
6717                         }
6718                 }
6719                 break;
6720
6721         case 2:
6722 #ifdef JP
6723                 if (name) return "¶õÊ¢½¼Â­";
6724                 if (desc) return "ËþÊ¢¤Ë¤Ê¤ë¡£";
6725 #else
6726                 if (name) return "Satisfy Hunger";
6727                 if (desc) return "Satisfies hunger.";
6728 #endif
6729     
6730                 {
6731                         if (cast)
6732                         {
6733                                 set_food(PY_FOOD_MAX - 1);
6734                         }
6735                 }
6736                 break;
6737
6738         case 3:
6739 #ifdef JP
6740                 if (name) return "ÂÑÎ䵤";
6741                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6742 #else
6743                 if (name) return "Resist Cold";
6744                 if (desc) return "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.";
6745 #endif
6746     
6747                 {
6748                         int base = 20;
6749
6750                         if (info) return info_duration(base, base);
6751
6752                         if (cast)
6753                         {
6754                                 set_oppose_cold(randint1(base) + base, FALSE);
6755                         }
6756                 }
6757                 break;
6758
6759         case 4:
6760 #ifdef JP
6761                 if (name) return "ÂѲбê";
6762                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6763 #else
6764                 if (name) return "Resist Fire";
6765                 if (desc) return "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.";
6766 #endif
6767     
6768                 {
6769                         int base = 20;
6770
6771                         if (info) return info_duration(base, base);
6772
6773                         if (cast)
6774                         {
6775                                 set_oppose_fire(randint1(base) + base, FALSE);
6776                         }
6777                 }
6778                 break;
6779
6780         case 5:
6781 #ifdef JP
6782                 if (name) return "»Îµ¤¹âÍÈ";
6783                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
6784 #else
6785                 if (name) return "Heroism";
6786                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
6787 #endif
6788     
6789                 {
6790                         int base = 25;
6791
6792                         if (info) return info_duration(base, base);
6793
6794                         if (cast)
6795                         {
6796                                 set_hero(randint1(base) + base, FALSE);
6797                                 hp_player(10);
6798                                 set_afraid(0);
6799                         }
6800                 }
6801                 break;
6802
6803         case 6:
6804 #ifdef JP
6805                 if (name) return "ÂÑÅÅ·â";
6806                 if (desc) return "°ìÄê»þ´Ö¡¢ÅÅ·â¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6807 #else
6808                 if (name) return "Resist Lightning";
6809                 if (desc) return "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.";
6810 #endif
6811     
6812                 {
6813                         int base = 20;
6814
6815                         if (info) return info_duration(base, base);
6816
6817                         if (cast)
6818                         {
6819                                 set_oppose_elec(randint1(base) + base, FALSE);
6820                         }
6821                 }
6822                 break;
6823
6824         case 7:
6825 #ifdef JP
6826                 if (name) return "ÂÑ»À";
6827                 if (desc) return "°ìÄê»þ´Ö¡¢»À¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6828 #else
6829                 if (name) return "Resist Acid";
6830                 if (desc) return "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.";
6831 #endif
6832     
6833                 {
6834                         int base = 20;
6835
6836                         if (info) return info_duration(base, base);
6837
6838                         if (cast)
6839                         {
6840                                 set_oppose_acid(randint1(base) + base, FALSE);
6841                         }
6842                 }
6843                 break;
6844
6845         case 8:
6846 #ifdef JP
6847                 if (name) return "Æ©ÌÀ»ëǧ";
6848                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
6849 #else
6850                 if (name) return "See Invisibility";
6851                 if (desc) return "Gives see invisible for a while.";
6852 #endif
6853     
6854                 {
6855                         int base = 24;
6856
6857                         if (info) return info_duration(base, base);
6858
6859                         if (cast)
6860                         {
6861                                 set_tim_invis(randint1(base) + base, FALSE);
6862                         }
6863                 }
6864                 break;
6865
6866         case 9:
6867 #ifdef JP
6868                 if (name) return "²ò¼ö";
6869                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
6870 #else
6871                 if (name) return "Remove Curse";
6872                 if (desc) return "Removes normal curses from equipped items.";
6873 #endif
6874     
6875                 {
6876                         if (cast)
6877                         {
6878                                 if (remove_curse())
6879                                 {
6880 #ifdef JP
6881                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
6882 #else
6883                                         msg_print("You feel as if someone is watching over you.");
6884 #endif
6885                                 }
6886                         }
6887                 }
6888                 break;
6889
6890         case 10:
6891 #ifdef JP
6892                 if (name) return "ÂÑÆÇ";
6893                 if (desc) return "°ìÄê»þ´Ö¡¢ÆǤؤÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6894 #else
6895                 if (name) return "Resist Poison";
6896                 if (desc) return "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.";
6897 #endif
6898     
6899                 {
6900                         int base = 20;
6901
6902                         if (info) return info_duration(base, base);
6903
6904                         if (cast)
6905                         {
6906                                 set_oppose_pois(randint1(base) + base, FALSE);
6907                         }
6908                 }
6909                 break;
6910
6911         case 11:
6912 #ifdef JP
6913                 if (name) return "¶¸Àï»Î²½";
6914                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤¹¤ë¡£";
6915 #else
6916                 if (name) return "Berserk";
6917                 if (desc) return "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.";
6918 #endif
6919     
6920                 {
6921                         int base = 25;
6922
6923                         if (info) return info_duration(base, base);
6924
6925                         if (cast)
6926                         {
6927                                 set_shero(randint1(base) + base, FALSE);
6928                                 hp_player(30);
6929                                 set_afraid(0);
6930                         }
6931                 }
6932                 break;
6933
6934         case 12:
6935 #ifdef JP
6936                 if (name) return "¼«¸ÊʬÀÏ";
6937                 if (desc) return "¸½ºß¤Î¼«Ê¬¤Î¾õÂÖ¤ò´°Á´¤ËÃΤ롣";
6938 #else
6939                 if (name) return "Self Knowledge";
6940                 if (desc) return "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.";
6941 #endif
6942     
6943                 {
6944                         if (cast)
6945                         {
6946                                 self_knowledge();
6947                         }
6948                 }
6949                 break;
6950
6951         case 13:
6952 #ifdef JP
6953                 if (name) return "Âмٰ­·ë³¦";
6954                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Î¹¶·â¤òËɤ°¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
6955 #else
6956                 if (name) return "Protection from Evil";
6957                 if (desc) return "Gives aura which protect you from evil monster's physical attack.";
6958 #endif
6959     
6960                 {
6961                         int base = 3 * plev;
6962                         int sides = 25;
6963
6964                         if (info) return info_duration(base, sides);
6965
6966                         if (cast)
6967                         {
6968                                 set_protevil(randint1(sides) + base, FALSE);
6969                         }
6970                 }
6971                 break;
6972
6973         case 14:
6974 #ifdef JP
6975                 if (name) return "Ìþ¤·";
6976                 if (desc) return "ÆÇ¡¢Û¯Û°¾õÂÖ¡¢Éé½ý¤òÁ´²÷¤µ¤»¡¢¸¸³Ð¤òľ¤¹¡£";
6977 #else
6978                 if (name) return "Cure";
6979                 if (desc) return "Heals poison, stun, cut and hallucination completely.";
6980 #endif
6981     
6982                 {
6983                         if (cast)
6984                         {
6985                                 set_poisoned(0);
6986                                 set_stun(0);
6987                                 set_cut(0);
6988                                 set_image(0);
6989                         }
6990                 }
6991                 break;
6992
6993         case 15:
6994 #ifdef JP
6995                 if (name) return "ËâË¡·õ";
6996                 if (desc) return "°ìÄê»þ´Ö¡¢Éð´ï¤ËÎ䵤¡¢±ê¡¢ÅÅ·â¡¢»À¡¢ÆǤΤ¤¤º¤ì¤«¤Î°À­¤ò¤Ä¤±¤ë¡£Éð´ï¤ò»ý¤¿¤Ê¤¤¤È»È¤¨¤Ê¤¤¡£";
6997 #else
6998                 if (name) return "Mana Branding";
6999                 if (desc) return "Makes current weapon some elemental branded. You must wield weapons.";
7000 #endif
7001     
7002                 {
7003                         int base = plev / 2;
7004
7005                         if (info) return info_duration(base, base);
7006
7007                         if (cast)
7008                         {
7009                                 if (!choose_ele_attack()) return NULL;
7010                         }
7011                 }
7012                 break;
7013
7014         case 16:
7015 #ifdef JP
7016                 if (name) return "¥Æ¥ì¥Ñ¥·¡¼";
7017                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
7018 #else
7019                 if (name) return "Telepathy";
7020                 if (desc) return "Gives telepathy for a while.";
7021 #endif
7022     
7023                 {
7024                         int base = 25;
7025                         int sides = 30;
7026
7027                         if (info) return info_duration(base, sides);
7028
7029                         if (cast)
7030                         {
7031                                 set_tim_esp(randint1(sides) + base, FALSE);
7032                         }
7033                 }
7034                 break;
7035
7036         case 17:
7037 #ifdef JP
7038                 if (name) return "È©Àв½";
7039                 if (desc) return "°ìÄê»þ´Ö¡¢AC¤ò¾å¾º¤µ¤»¤ë¡£";
7040 #else
7041                 if (name) return "Stone Skin";
7042                 if (desc) return "Gives bonus to AC for a while.";
7043 #endif
7044     
7045                 {
7046                         int base = 30;
7047                         int sides = 20;
7048
7049                         if (info) return info_duration(base, sides);
7050
7051                         if (cast)
7052                         {
7053                                 set_shield(randint1(sides) + base, FALSE);
7054                         }
7055                 }
7056                 break;
7057
7058         case 18:
7059 #ifdef JP
7060                 if (name) return "Á´ÂÑÀ­";
7061                 if (desc) return "°ìÄê»þ´Ö¡¢»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7062 #else
7063                 if (name) return "Resistance";
7064                 if (desc) return "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to which from equipment for more powerful resistances.";
7065 #endif
7066     
7067                 {
7068                         int base = 20;
7069
7070                         if (info) return info_duration(base, base);
7071
7072                         if (cast)
7073                         {
7074                                 set_oppose_acid(randint1(base) + base, FALSE);
7075                                 set_oppose_elec(randint1(base) + base, FALSE);
7076                                 set_oppose_fire(randint1(base) + base, FALSE);
7077                                 set_oppose_cold(randint1(base) + base, FALSE);
7078                                 set_oppose_pois(randint1(base) + base, FALSE);
7079                         }
7080                 }
7081                 break;
7082
7083         case 19:
7084 #ifdef JP
7085                 if (name) return "¥¹¥Ô¡¼¥É";
7086                 if (desc) return "°ìÄê»þ´Ö¡¢²Ã®¤¹¤ë¡£";
7087 #else
7088                 if (name) return "Haste Self";
7089                 if (desc) return "Hastes you for a while.";
7090 #endif
7091     
7092                 {
7093                         int base = plev;
7094                         int sides = 20 + plev;
7095
7096                         if (info) return info_duration(base, sides);
7097
7098                         if (cast)
7099                         {
7100                                 set_fast(randint1(sides) + base, FALSE);
7101                         }
7102                 }
7103                 break;
7104
7105         case 20:
7106 #ifdef JP
7107                 if (name) return "ÊÉÈ´¤±";
7108                 if (desc) return "°ìÄê»þ´Ö¡¢È¾Êª¼Á²½¤·ÊɤòÄ̤êÈ´¤±¤é¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
7109 #else
7110                 if (name) return "Walk through Wall";
7111                 if (desc) return "Gives ability to pass walls for a while.";
7112 #endif
7113     
7114                 {
7115                         int base = plev / 2;
7116
7117                         if (info) return info_duration(base, base);
7118
7119                         if (cast)
7120                         {
7121                                 set_kabenuke(randint1(base) + base, FALSE);
7122                         }
7123                 }
7124                 break;
7125
7126         case 21:
7127 #ifdef JP
7128                 if (name) return "½âË᤭";
7129                 if (desc) return "½â¤ËÈ¿¼Í¤Î°À­¤ò¤Ä¤±¤ë¡£";
7130 #else
7131                 if (name) return "Polish Shield";
7132                 if (desc) return "Makes a shield a shield of reflection.";
7133 #endif
7134     
7135                 {
7136                         if (cast)
7137                         {
7138                                 pulish_shield();
7139                         }
7140                 }
7141                 break;
7142
7143         case 22:
7144 #ifdef JP
7145                 if (name) return "¥´¡¼¥ì¥àÀ½Â¤";
7146                 if (desc) return "1ÂΤΥ´¡¼¥ì¥à¤òÀ½Â¤¤¹¤ë¡£";
7147 #else
7148                 if (name) return "Create Golem";
7149                 if (desc) return "Creates a golem.";
7150 #endif
7151     
7152                 {
7153                         if (cast)
7154                         {
7155                                 if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, PM_FORCE_PET))
7156                                 {
7157 #ifdef JP
7158                                         msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
7159 #else
7160                                         msg_print("You make a golem.");
7161 #endif
7162                                 }
7163                                 else
7164                                 {
7165 #ifdef JP
7166                                         msg_print("¤¦¤Þ¤¯¥´¡¼¥ì¥à¤òºî¤ì¤Ê¤«¤Ã¤¿¡£");
7167 #else
7168                                         msg_print("No Golems arrive.");
7169 #endif
7170                                 }
7171                         }
7172                 }
7173                 break;
7174
7175         case 23:
7176 #ifdef JP
7177                 if (name) return "ËâË¡¤Î³»";
7178                 if (desc) return "°ìÄê»þ´Ö¡¢ËâË¡ËɸæÎϤÈAC¤¬¾å¤¬¤ê¡¢º®Íð¤ÈÌÕÌܤÎÂÑÀ­¡¢È¿¼ÍǽÎÏ¡¢ËãáãÃΤ餺¡¢ÉâÍ·¤òÆÀ¤ë¡£";
7179 #else
7180                 if (name) return "Magical armor";
7181                 if (desc) return "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.";
7182 #endif
7183     
7184                 {
7185                         int base = 20;
7186
7187                         if (info) return info_duration(base, base);
7188
7189                         if (cast)
7190                         {
7191                                 set_magicdef(randint1(base) + base, FALSE);
7192                         }
7193                 }
7194                 break;
7195
7196         case 24:
7197 #ifdef JP
7198                 if (name) return "ÁõÈ÷̵Îϲ½";
7199                 if (desc) return "Éð´ï¡¦Ëɶñ¤Ë¤«¤±¤é¤ì¤¿¤¢¤é¤æ¤ëËâÎϤò´°Á´¤Ë²ò½ü¤¹¤ë¡£";
7200 #else
7201                 if (name) return "Remove Enchantment";
7202                 if (desc) return "Removes all magics completely from any weapon or armor.";
7203 #endif
7204     
7205                 {
7206                         if (cast)
7207                         {
7208                                 if (!mundane_spell(TRUE)) return NULL;
7209                         }
7210                 }
7211                 break;
7212
7213         case 25:
7214 #ifdef JP
7215                 if (name) return "¼ö¤¤Ê´ºÕ";
7216                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
7217 #else
7218                 if (name) return "Remove All Curse";
7219                 if (desc) return "Removes normal and heavy curse from equipped items.";
7220 #endif
7221     
7222                 {
7223                         if (cast)
7224                         {
7225                                 if (remove_all_curse())
7226                                 {
7227 #ifdef JP
7228                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
7229 #else
7230                                         msg_print("You feel as if someone is watching over you.");
7231 #endif
7232                                 }
7233                         }
7234                 }
7235                 break;
7236
7237         case 26:
7238 #ifdef JP
7239                 if (name) return "´°Á´¤Ê¤ëÃμ±";
7240                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
7241 #else
7242                 if (name) return "Knowledge True";
7243                 if (desc) return "*Identifies* an item.";
7244 #endif
7245     
7246                 {
7247                         if (cast)
7248                         {
7249                                 if (!identify_fully(FALSE)) return NULL;
7250                         }
7251                 }
7252                 break;
7253
7254         case 27:
7255 #ifdef JP
7256                 if (name) return "Éð´ï¶¯²½";
7257                 if (desc) return "Éð´ï¤ÎÌ¿ÃæΨ½¤Àµ¤È¥À¥á¡¼¥¸½¤Àµ¤ò¶¯²½¤¹¤ë¡£";
7258 #else
7259                 if (name) return "Enchant Weapon";
7260                 if (desc) return "Attempts to increase +to-hit, +to-dam of a weapon.";
7261 #endif
7262     
7263                 {
7264                         if (cast)
7265                         {
7266                                 if (!enchant_spell(randint0(4) + 1, randint0(4) + 1, 0)) return NULL;
7267                         }
7268                 }
7269                 break;
7270
7271         case 28:
7272 #ifdef JP
7273                 if (name) return "Ëɶñ¶¯²½";
7274                 if (desc) return "³»¤ÎËɸ潤Àµ¤ò¶¯²½¤¹¤ë¡£";
7275 #else
7276                 if (name) return "Enchant Armor";
7277                 if (desc) return "Attempts to increase +AC of an armor.";
7278 #endif
7279     
7280                 {
7281                         if (cast)
7282                         {
7283                                 if (!enchant_spell(0, 0, randint0(3) + 2)) return NULL;
7284                         }
7285                 }
7286                 break;
7287
7288         case 29:
7289 #ifdef JP
7290                 if (name) return "Éð´ï°À­ÉÕÍ¿";
7291                 if (desc) return "Éð´ï¤Ë¥é¥ó¥À¥à¤Ë°À­¤ò¤Ä¤±¤ë¡£";
7292 #else
7293                 if (name) return "Brand Weapon";
7294                 if (desc) return "Makes current weapon a random ego weapon.";
7295 #endif
7296     
7297                 {
7298                         if (cast)
7299                         {
7300                                 brand_weapon(randint0(18));
7301                         }
7302                 }
7303                 break;
7304
7305         case 30:
7306 #ifdef JP
7307                 if (name) return "¿Í´Ö¥È¥é¥ó¥×";
7308                 if (desc) return "¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤«¡¢¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤¬¿È¤Ë¤Ä¤¯¡£";
7309 #else
7310                 if (name) return "Living Trump";
7311                 if (desc) return "Gives mutation which makes you teleport randomly or makes you able to teleport at will.";
7312 #endif
7313     
7314                 {
7315                         if (cast)
7316                         {
7317                                 int mutation;
7318
7319                                 if (one_in_(7))
7320                                         /* Teleport control */
7321                                         mutation = 12;
7322                                 else
7323                                         /* Random teleportation (uncontrolled) */
7324                                         mutation = 77;
7325
7326                                 /* Gain the mutation */
7327                                 if (gain_random_mutation(mutation))
7328                                 {
7329 #ifdef JP
7330                                         msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤­¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
7331 #else
7332                                         msg_print("You have turned into a Living Trump.");
7333 #endif
7334                                 }
7335                         }
7336                 }
7337                 break;
7338
7339         case 31:
7340 #ifdef JP
7341                 if (name) return "°À­¤Ø¤ÎÌȱÖ";
7342                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¡¢±ê¡¢ÅÅ·â¡¢»À¤Î¤¤¤º¤ì¤«¤ËÂФ¹¤ëÌȱ֤òÆÀ¤ë¡£";
7343 #else
7344                 if (name) return "Immunity";
7345                 if (desc) return "Gives an immunity to fire, cold, electricity or acid for a while.";
7346 #endif
7347     
7348                 {
7349                         int base = 13;
7350
7351                         if (info) return info_duration(base, base);
7352
7353                         if (cast)
7354                         {
7355                                 if (!choose_ele_immune(base + randint1(base))) return NULL;
7356                         }
7357                 }
7358                 break;
7359         }
7360
7361         return "";
7362 }
7363
7364
7365 static cptr do_daemon_spell(int spell, int mode)
7366 {
7367         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
7368         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
7369         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
7370         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
7371
7372 #ifdef JP
7373         static const char s_dam[] = "»½ý:";
7374 #else
7375         static const char s_dam[] = "dam ";
7376 #endif
7377
7378         int dir;
7379         int plev = p_ptr->lev;
7380
7381         switch (spell)
7382         {
7383         case 0:
7384 #ifdef JP
7385                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë";
7386                 if (desc) return "¼å¤¤ËâË¡¤ÎÌð¤òÊü¤Ä¡£";
7387 #else
7388                 if (name) return "Magic Missile";
7389                 if (desc) return "Fires a weak bolt of magic.";
7390 #endif
7391     
7392                 {
7393                         int dice = 3 + (plev - 1) / 5;
7394                         int sides = 4;
7395
7396                         if (info) return info_damage(dice, sides, 0);
7397
7398                         if (cast)
7399                         {
7400                                 if (!get_aim_dir(&dir)) return NULL;
7401
7402                                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
7403                         }
7404                 }
7405                 break;
7406
7407         case 1:
7408 #ifdef JP
7409                 if (name) return "̵À¸Ì¿´¶ÃÎ";
7410                 if (desc) return "¶á¤¯¤ÎÀ¸Ì¿¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
7411 #else
7412                 if (name) return "Detect Unlife";
7413                 if (desc) return "Detects all nonliving monsters in your vicinity.";
7414 #endif
7415     
7416                 {
7417                         int rad = DETECT_RAD_DEFAULT;
7418
7419                         if (info) return info_radius(rad);
7420
7421                         if (cast)
7422                         {
7423                                 detect_monsters_nonliving(rad);
7424                         }
7425                 }
7426                 break;
7427
7428         case 2:
7429 #ifdef JP
7430                 if (name) return "¼Ù¤Ê¤ë½ËÊ¡";
7431                 if (desc) return "°ìÄê»þ´Ö¡¢Ì¿ÃæΨ¤ÈAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
7432 #else
7433                 if (name) return "Evil Bless";
7434                 if (desc) return "Gives bonus to hit and AC for a few turns.";
7435 #endif
7436     
7437                 {
7438                         int base = 12;
7439
7440                         if (info) return info_duration(base, base);
7441
7442                         if (cast)
7443                         {
7444                                 set_blessed(randint1(base) + base, FALSE);
7445                         }
7446                 }
7447                 break;
7448
7449         case 3:
7450 #ifdef JP
7451                 if (name) return "ÂѲбê";
7452                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7453 #else
7454                 if (name) return "Resist Fire";
7455                 if (desc) return "Gives resistance to fire, cold and electricity for a while. These resistances can be added to which from equipment for more powerful resistances.";
7456 #endif
7457     
7458                 {
7459                         int base = 20;
7460
7461                         if (info) return info_duration(base, base);
7462
7463                         if (cast)
7464                         {
7465                                 set_oppose_fire(randint1(base) + base, FALSE);
7466                         }
7467                 }
7468                 break;
7469
7470         case 4:
7471 #ifdef JP
7472                 if (name) return "¶²¹²";
7473                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¡¢Û¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
7474 #else
7475                 if (name) return "Horrify";
7476                 if (desc) return "Attempts to scare and stun a monster.";
7477 #endif
7478     
7479                 {
7480                         int power = plev;
7481
7482                         if (info) return info_power(power);
7483
7484                         if (cast)
7485                         {
7486                                 if (!get_aim_dir(&dir)) return NULL;
7487
7488                                 fear_monster(dir, power);
7489                                 stun_monster(dir, power);
7490                         }
7491                 }
7492                 break;
7493
7494         case 5:
7495 #ifdef JP
7496                 if (name) return "ÃϹö¤ÎÌð";
7497                 if (desc) return "ÃϹö¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
7498 #else
7499                 if (name) return "Nether Bolt";
7500                 if (desc) return "Fires a bolt or beam of nether.";
7501 #endif
7502     
7503                 {
7504                         int dice = 6 + (plev - 5) / 4;
7505                         int sides = 8;
7506
7507                         if (info) return info_damage(dice, sides, 0);
7508
7509                         if (cast)
7510                         {
7511                                 if (!get_aim_dir(&dir)) return NULL;
7512
7513                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
7514                         }
7515                 }
7516                 break;
7517
7518         case 6:
7519 #ifdef JP
7520                 if (name) return "¸ÅÂå¤Î»àÎ´­";
7521                 if (desc) return "¸ÅÂå¤Î»àÎî¤ò¾¤´­¤¹¤ë¡£";
7522 #else
7523                 if (name) return "Summon Manes";
7524                 if (desc) return "Summons a manes.";
7525 #endif
7526     
7527                 {
7528                         if (cast)
7529                         {
7530                                 if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))
7531                                 {
7532 #ifdef JP
7533                                         msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
7534 #else
7535                                         msg_print("No Manes arrive.");
7536 #endif
7537                                 }
7538                         }
7539                 }
7540                 break;
7541
7542         case 7:
7543 #ifdef JP
7544                 if (name) return "ÃϹö¤Î±ë";
7545                 if (desc) return "¼Ù°­¤ÊÎϤò»ý¤Ä¥Ü¡¼¥ë¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
7546 #else
7547                 if (name) return "Hellish Flame";
7548                 if (desc) return "Fires a ball of evil power. Hurts good monsters greatly.";
7549 #endif
7550     
7551                 {
7552                         int dice = 3;
7553                         int sides = 6;
7554                         int rad = (plev < 30) ? 2 : 3;
7555                         int base;
7556
7557                         if (p_ptr->pclass == CLASS_MAGE ||
7558                             p_ptr->pclass == CLASS_HIGH_MAGE ||
7559                             p_ptr->pclass == CLASS_SORCERER)
7560                                 base = plev + plev / 2;
7561                         else
7562                                 base = plev + plev / 4;
7563
7564
7565                         if (info) return info_damage(dice, sides, base);
7566
7567                         if (cast)
7568                         {
7569                                 if (!get_aim_dir(&dir)) return NULL;
7570
7571                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides) + base, rad);
7572                         }
7573                 }
7574                 break;
7575
7576         case 8:
7577 #ifdef JP
7578                 if (name) return "¥Ç¡¼¥â¥ó»ÙÇÛ";
7579                 if (desc) return "°­Ëâ1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú";
7580 #else
7581                 if (name) return "Dominate Demon";
7582                 if (desc) return "Attempts to charm a demon.";
7583 #endif
7584     
7585                 {
7586                         int power = plev;
7587
7588                         if (info) return info_power(power);
7589
7590                         if (cast)
7591                         {
7592                                 if (!get_aim_dir(&dir)) return NULL;
7593
7594                                 control_one_demon(dir, power);
7595                         }
7596                 }
7597                 break;
7598
7599         case 9:
7600 #ifdef JP
7601                 if (name) return "¥Ó¥¸¥ç¥ó";
7602                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
7603 #else
7604                 if (name) return "Vision";
7605                 if (desc) return "Maps nearby area.";
7606 #endif
7607     
7608                 {
7609                         int rad = DETECT_RAD_MAP;
7610
7611                         if (info) return info_radius(rad);
7612
7613                         if (cast)
7614                         {
7615                                 map_area(rad);
7616                         }
7617                 }
7618                 break;
7619
7620         case 10:
7621 #ifdef JP
7622                 if (name) return "ÂÑÃϹö";
7623                 if (desc) return "°ìÄê»þ´Ö¡¢ÃϹö¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£";
7624 #else
7625                 if (name) return "Resist Nether";
7626                 if (desc) return "Gives resistance to nether for a while.";
7627 #endif
7628     
7629                 {
7630                         int base = 20;
7631
7632                         if (info) return info_duration(base, base);
7633
7634                         if (cast)
7635                         {
7636                                 set_tim_res_nether(randint1(base) + base, FALSE);
7637                         }
7638                 }
7639                 break;
7640
7641         case 11:
7642 #ifdef JP
7643                 if (name) return "¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È";
7644                 if (desc) return "¥×¥é¥º¥Þ¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
7645 #else
7646                 if (name) return "Plasma bolt";
7647                 if (desc) return "Fires a bolt or beam of plasma.";
7648 #endif
7649     
7650                 {
7651                         int dice = 11 + (plev - 5) / 4;
7652                         int sides = 8;
7653
7654                         if (info) return info_damage(dice, sides, 0);
7655
7656                         if (cast)
7657                         {
7658                                 if (!get_aim_dir(&dir)) return NULL;
7659
7660                                 fire_bolt_or_beam(beam_chance(), GF_PLASMA, dir, damroll(dice, sides));
7661                         }
7662                 }
7663                 break;
7664
7665         case 12:
7666 #ifdef JP
7667                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";
7668                 if (desc) return "±ê¤Îµå¤òÊü¤Ä¡£";
7669 #else
7670                 if (name) return "Fire Ball";
7671                 if (desc) return "Fires a ball of fire.";
7672 #endif
7673     
7674                 {
7675                         int dam = plev + 55;
7676                         int rad = 2;
7677
7678                         if (info) return info_damage(0, 0, dam);
7679
7680                         if (cast)
7681                         {
7682                                 if (!get_aim_dir(&dir)) return NULL;
7683
7684                                 fire_ball(GF_FIRE, dir, dam, rad);
7685                         }
7686                 }
7687                 break;
7688
7689         case 13:
7690 #ifdef JP
7691                 if (name) return "±ê¤Î¿Ï";
7692                 if (desc) return "Éð´ï¤Ë±ê¤Î°À­¤ò¤Ä¤±¤ë¡£";
7693 #else
7694                 if (name) return "Fire Branding";
7695                 if (desc) return "Makes current weapon fire branded.";
7696 #endif
7697     
7698                 {
7699                         if (cast)
7700                         {
7701                                 brand_weapon(1);
7702                         }
7703                 }
7704                 break;
7705
7706         case 14:
7707 #ifdef JP
7708                 if (name) return "ÃϹöµå";
7709                 if (desc) return "Â礭¤ÊÃϹö¤Îµå¤òÊü¤Ä¡£";
7710 #else
7711                 if (name) return "Nether Ball";
7712                 if (desc) return "Fires a huge ball of nether.";
7713 #endif
7714     
7715                 {
7716                         int dam = plev * 3 / 2 + 100;
7717                         int rad = plev / 20 + 2;
7718
7719                         if (info) return info_damage(0, 0, dam);
7720
7721                         if (cast)
7722                         {
7723                                 if (!get_aim_dir(&dir)) return NULL;
7724
7725                                 fire_ball(GF_NETHER, dir, dam, rad);
7726                         }
7727                 }
7728                 break;
7729
7730         case 15:
7731 #ifdef JP
7732                 if (name) return "¥Ç¡¼¥â¥ó¾¤´­";
7733                 if (desc) return "°­Ëâ1ÂΤò¾¤´­¤¹¤ë¡£";
7734 #else
7735                 if (name) return "Summon Demon";
7736                 if (desc) return "Summons a demon.";
7737 #endif
7738     
7739                 {
7740                         if (cast)
7741                         {
7742                                 bool pet = !one_in_(3);
7743                                 u32b mode = 0L;
7744
7745                                 if (pet) mode |= PM_FORCE_PET;
7746                                 else mode |= PM_NO_PET;
7747                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
7748
7749                                 if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint1(plev/2), SUMMON_DEMON, mode))
7750                                 {
7751 #ifdef JP
7752                                         msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
7753 #else
7754                                         msg_print("The area fills with a stench of sulphur and brimstone.");
7755 #endif
7756
7757
7758                                         if (pet)
7759                                         {
7760 #ifdef JP
7761                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
7762 #else
7763                                                 msg_print("'What is thy bidding... Master?'");
7764 #endif
7765                                         }
7766                                         else
7767                                         {
7768 #ifdef JP
7769                                                 msg_print("¡ÖÈܤ·¤­¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
7770 #else
7771                                                 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
7772 #endif
7773                                         }
7774                                 }
7775                                 else
7776                                 {
7777 #ifdef JP
7778                                         msg_print("°­Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
7779 #else
7780                                         msg_print("No demons arrive.");
7781 #endif
7782                                 }
7783                                 break;
7784                         }
7785                 }
7786                 break;
7787
7788         case 16:
7789 #ifdef JP
7790                 if (name) return "°­Ëâ¤ÎÌÜ";
7791                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
7792 #else
7793                 if (name) return "Devilish Eye";
7794                 if (desc) return "Gives telepathy for a while.";
7795 #endif
7796     
7797                 {
7798                         int base = 30;
7799                         int sides = 25;
7800
7801                         if (info) return info_duration(base, sides);
7802
7803                         if (cast)
7804                         {
7805                                 set_tim_esp(randint1(base) + sides, FALSE);
7806                         }
7807                 }
7808                 break;
7809
7810         case 17:
7811 #ifdef JP
7812                 if (name) return "°­Ëâ¤Î¥¯¥í¡¼¥¯";
7813                 if (desc) return "¶²Éݤò¼è¤ê½ü¤­¡¢°ìÄê»þ´Ö¡¢±ê¤ÈÎ䵤¤ÎÂÑÀ­¡¢±ê¤Î¥ª¡¼¥é¤òÆÀ¤ë¡£ÂÑÀ­¤ÏÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7814 #else
7815                 if (name) return "Devil Cloak";
7816                 if (desc) return "Removes fear. Gives resistance to fire and cold, and aura of fire. These resistances can be added to which from equipment for more powerful resistances.";
7817 #endif
7818     
7819                 {
7820                         int base = 20;
7821
7822                         if (info) return info_duration(base, base);
7823
7824                         if (cast)
7825                         {
7826                                 int dur = randint1(base) + base;
7827                                         
7828                                 set_oppose_fire(dur, FALSE);
7829                                 set_oppose_cold(dur, FALSE);
7830                                 set_tim_sh_fire(dur, FALSE);
7831                                 set_afraid(0);
7832                                 break;
7833                         }
7834                 }
7835                 break;
7836
7837         case 18:
7838 #ifdef JP
7839                 if (name) return "ÍÏ´äή";
7840                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿±ê¤Îµå¤òºî¤ê½Ð¤·¡¢¾²¤òÍÏ´ä¤ËÊѤ¨¤ë¡£";
7841 #else
7842                 if (name) return "The Flow of Lava";
7843                 if (desc) return "Generates a ball of fire centered on you which transforms floors to magma.";
7844 #endif
7845     
7846                 {
7847                         int dam = (55 + plev) * 2;
7848                         int rad = 3;
7849
7850                         if (info) return info_damage(0, 0, dam/2);
7851
7852                         if (cast)
7853                         {
7854                                 fire_ball(GF_FIRE, 0, dam, rad);
7855                                 fire_ball_hide(GF_LAVA_FLOW, 0, 2 + randint1(2), rad);
7856                         }
7857                 }
7858                 break;
7859
7860         case 19:
7861 #ifdef JP
7862                 if (name) return "¥×¥é¥º¥Þµå";
7863                 if (desc) return "¥×¥é¥º¥Þ¤Îµå¤òÊü¤Ä¡£";
7864 #else
7865                 if (name) return "Plasma Ball";
7866                 if (desc) return "Fires a ball of plasma.";
7867 #endif
7868     
7869                 {
7870                         int dam = plev * 3 / 2 + 80;
7871                         int rad = 2 + plev / 40;
7872
7873                         if (info) return info_damage(0, 0, dam);
7874
7875                         if (cast)
7876                         {
7877                                 if (!get_aim_dir(&dir)) return NULL;
7878
7879                                 fire_ball(GF_PLASMA, dir, dam, rad);
7880                         }
7881                 }
7882                 break;
7883
7884         case 20:
7885 #ifdef JP
7886                 if (name) return "°­ËâÊѲ½";
7887                 if (desc) return "°ìÄê»þ´Ö¡¢°­Ëâ¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤Ë°­Ëâ¤È¤·¤Æ¤ÎǽÎϤòÆÀ¤ë¡£";
7888 #else
7889                 if (name) return "Polymorph Demon";
7890                 if (desc) return "Mimic a demon for a while. Loses abilities of original race and gets abilities as a demon.";
7891 #endif
7892     
7893                 {
7894                         int base = 10 + plev / 2;
7895
7896                         if (info) return info_duration(base, base);
7897
7898                         if (cast)
7899                         {
7900                                 set_mimic(base + randint1(base), MIMIC_DEMON, FALSE);
7901                         }
7902                 }
7903                 break;
7904
7905         case 21:
7906 #ifdef JP
7907                 if (name) return "ÃϹö¤ÎÇÈÆ°";
7908                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤ËÆäËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
7909 #else
7910                 if (name) return "Nather Wave";
7911                 if (desc) return "Damages all monsters in sight. Hurts good monsters greatly.";
7912 #endif
7913     
7914                 {
7915                         int sides1 = plev * 2;
7916                         int sides2 = plev * 2;
7917
7918                         if (info) return format("%sd%d+d%d", s_dam, sides1, sides2);
7919
7920                         if (cast)
7921                         {
7922                                 dispel_monsters(randint1(sides1));
7923                                 dispel_good(randint1(sides2));
7924                         }
7925                 }
7926                 break;
7927
7928         case 22:
7929 #ifdef JP
7930                 if (name) return "¥µ¥­¥å¥Ð¥¹¤ÎÀÜÊ­";
7931                 if (desc) return "°ø²Ìº®Íð¤Îµå¤òÊü¤Ä¡£";
7932 #else
7933                 if (name) return "Kiss of Succubus";
7934                 if (desc) return "Fires a ball of nexus.";
7935 #endif
7936     
7937                 {
7938                         int dam = 100 + plev * 2;
7939                         int rad = 4;
7940
7941                         if (info) return info_damage(0, 0, dam);
7942
7943                         if (cast)
7944                         {
7945                                 if (!get_aim_dir(&dir)) return NULL;
7946                                 fire_ball(GF_NEXUS, dir, dam, rad);
7947                         }
7948                 }
7949                 break;
7950
7951         case 23:
7952 #ifdef JP
7953                 if (name) return "ÇËÌǤμê";
7954                 if (desc) return "ÇËÌǤμê¤òÊü¤Ä¡£¿©¤é¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤Ï¤½¤Î¤È¤­¤ÎHP¤ÎȾʬÁ°¸å¤Î¥À¥á¡¼¥¸¤ò¼õ¤±¤ë¡£";
7955 #else
7956                 if (name) return "Doom Hand";
7957                 if (desc) return "Attempts to make a monster's HP almost half.";
7958 #endif
7959     
7960                 {
7961                         if (cast)
7962                         {
7963                                 if (!get_aim_dir(&dir)) return NULL;
7964 #ifdef JP
7965                                 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
7966 #else
7967                                 else msg_print("You invoke the Hand of Doom!");
7968 #endif
7969
7970                                 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
7971                         }
7972                 }
7973                 break;
7974
7975         case 24:
7976 #ifdef JP
7977                 if (name) return "»Îµ¤¹âÍÈ";
7978                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
7979 #else
7980                 if (name) return "Raise the Morale";
7981                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
7982 #endif
7983     
7984                 {
7985                         int base = 25;
7986
7987                         if (info) return info_duration(base, base);
7988
7989                         if (cast)
7990                         {
7991                                 set_hero(randint1(base) + base, FALSE);
7992                                 hp_player(10);
7993                                 set_afraid(0);
7994                         }
7995                 }
7996                 break;
7997
7998         case 25:
7999 #ifdef JP
8000                 if (name) return "ÉÔÌǤÎÆùÂÎ";
8001                 if (desc) return "°ìÄê»þ´Ö¡¢»þ´ÖµÕž¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£";
8002 #else
8003                 if (name) return "Immortal Body";
8004                 if (desc) return "Gives resistance to time for a while.";
8005 #endif
8006     
8007                 {
8008                         int base = 20;
8009
8010                         if (info) return info_duration(base, base);
8011
8012                         if (cast)
8013                         {
8014                                 set_tim_res_time(randint1(base)+base, FALSE);
8015                         }
8016                 }
8017                 break;
8018
8019         case 26:
8020 #ifdef JP
8021                 if (name) return "¶¸µ¤¤Î±ß´Ä";
8022                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¥«¥ª¥¹¤Îµå¡¢º®Íð¤Îµå¤òȯÀ¸¤µ¤»¡¢¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£";
8023 #else
8024                 if (name) return "Insanity Circle";
8025                 if (desc) return "Generate balls of chaos, confusion and charm centered on you.";
8026 #endif
8027     
8028                 {
8029                         int dam = 50 + plev;
8030                         int power = 20 + plev;
8031                         int rad = 3 + plev / 20;
8032
8033                         if (info) return format("%s%d+%d", s_dam, dam/2, dam/2);
8034
8035                         if (cast)
8036                         {
8037                                 fire_ball(GF_CHAOS, 0, dam, rad);
8038                                 fire_ball(GF_CONFUSION, 0, dam, rad);
8039                                 fire_ball(GF_CHARM, 0, power, rad);
8040                         }
8041                 }
8042                 break;
8043
8044         case 27:
8045 #ifdef JP
8046                 if (name) return "¥Ú¥Ã¥ÈÇúÇË";
8047                 if (desc) return "Á´¤Æ¤Î¥Ú¥Ã¥È¤ò¶¯À©Åª¤ËÇúÇˤµ¤»¤ë¡£";
8048 #else
8049                 if (name) return "Explode Pets";
8050                 if (desc) return "Makes all pets explode.";
8051 #endif
8052     
8053                 {
8054                         if (cast)
8055                         {
8056                                 discharge_minion();
8057                         }
8058                 }
8059                 break;
8060
8061         case 28:
8062 #ifdef JP
8063                 if (name) return "¥°¥ì¡¼¥¿¡¼¥Ç¡¼¥â¥ó¾¤´­";
8064                 if (desc) return "¾åµé¥Ç¡¼¥â¥ó¤ò¾¤´­¤¹¤ë¡£¾¤´­¤¹¤ë¤Ë¤Ï¿Í´Ö('p','h','t'¤Çɽ¤µ¤ì¤ë¥â¥ó¥¹¥¿¡¼)¤Î»àÂΤòÊû¤²¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£";
8065 #else
8066                 if (name) return "Summon Greater Demon";
8067                 if (desc) return "Summons greater demon. It need to sacrifice a corpse of human ('p','h' or 't').";
8068 #endif
8069     
8070                 {
8071                         if (cast)
8072                         {
8073                                 if (!cast_summon_greater_demon()) return NULL;
8074                         }
8075                 }
8076                 break;
8077
8078         case 29:
8079 #ifdef JP
8080                 if (name) return "ÃϹöÍò";
8081                 if (desc) return "ĶµðÂç¤ÊÃϹö¤Îµå¤òÊü¤Ä¡£";
8082 #else
8083                 if (name) return "Nether Storm";
8084                 if (desc) return "Generate a huge ball of nether.";
8085 #endif
8086     
8087                 {
8088                         int dam = plev * 15;
8089                         int rad = plev / 5;
8090
8091                         if (info) return info_damage(0, 0, dam);
8092
8093                         if (cast)
8094                         {
8095                                 if (!get_aim_dir(&dir)) return NULL;
8096
8097                                 fire_ball(GF_NETHER, dir, dam, rad);
8098                         }
8099                 }
8100                 break;
8101
8102         case 30:
8103 #ifdef JP
8104                 if (name) return "·ì¤Î¼ö¤¤";
8105                 if (desc) return "¼«Ê¬¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤ë¤³¤È¤Ë¤è¤Ã¤ÆÂоݤ˼ö¤¤¤ò¤«¤±¡¢¥À¥á¡¼¥¸¤òÍ¿¤¨ÍÍ¡¹¤Ê¸ú²Ì¤ò°ú¤­µ¯¤³¤¹¡£";
8106 #else
8107                 if (name) return "Bloody Curse";
8108                 if (desc) return "Puts blood curse which damages and causes various effects on a monster. You also take damage.";
8109 #endif
8110     
8111                 {
8112                         int dam = 600;
8113                         int rad = 0;
8114
8115                         if (info) return info_damage(0, 0, dam);
8116
8117                         if (cast)
8118                         {
8119                                 if (!get_aim_dir(&dir)) return NULL;
8120
8121                                 fire_ball_hide(GF_BLOOD_CURSE, dir, dam, rad);
8122 #ifdef JP
8123                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "·ì¤Î¼ö¤¤", -1);
8124 #else
8125                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "Blood curse", -1);
8126 #endif
8127                         }
8128                 }
8129                 break;
8130
8131         case 31:
8132 #ifdef JP
8133                 if (name) return "ËⲦÊѲ½";
8134                 if (desc) return "°­Ëâ¤Î²¦¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤Ë°­Ëâ¤Î²¦¤È¤·¤Æ¤ÎǽÎϤòÆÀ¡¢ÊɤòÇ˲õ¤·¤Ê¤¬¤éÊ⤯¡£";
8135 #else
8136                 if (name) return "Polymorph Demonlord";
8137                 if (desc) return "Mimic a demon lord for a while. Loses abilities of original race and gets great abilities as a demon lord. Even hard walls can't stop your walking.";
8138 #endif
8139     
8140                 {
8141                         int base = 15;
8142
8143                         if (info) return info_duration(base, base);
8144
8145                         if (cast)
8146                         {
8147                                 set_mimic(base + randint1(base), MIMIC_DEMON_LORD, FALSE);
8148                         }
8149                 }
8150                 break;
8151         }
8152
8153         return "";
8154 }
8155
8156
8157 static cptr do_crusade_spell(int spell, int mode)
8158 {
8159         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
8160         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
8161         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
8162         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
8163
8164         int dir;
8165         int plev = p_ptr->lev;
8166
8167         switch (spell)
8168         {
8169         case 0:
8170 #ifdef JP
8171                 if (name) return "Ĩȳ";
8172                 if (desc) return "ÅÅ·â¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
8173 #else
8174                 if (name) return "Punishment";
8175                 if (desc) return "Fires a bolt or beam of lightning.";
8176 #endif
8177     
8178                 {
8179                         int dice = 3 + (plev - 1) / 5;
8180                         int sides = 4;
8181
8182                         if (info) return info_damage(dice, sides, 0);
8183
8184                         if (cast)
8185                         {
8186                                 if (!get_aim_dir(&dir)) return NULL;
8187
8188                                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
8189                         }
8190                 }
8191                 break;
8192
8193         case 1:
8194 #ifdef JP
8195                 if (name) return "¼Ù°­Â¸ºß´¶ÃÎ";
8196                 if (desc) return "¶á¤¯¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
8197 #else
8198                 if (name) return "Detect Evil";
8199                 if (desc) return "Detects all evil monsters in your vicinity.";
8200 #endif
8201     
8202                 {
8203                         int rad = DETECT_RAD_DEFAULT;
8204
8205                         if (info) return info_radius(rad);
8206
8207                         if (cast)
8208                         {
8209                                 detect_monsters_evil(rad);
8210                         }
8211                 }
8212                 break;
8213
8214         case 2:
8215 #ifdef JP
8216                 if (name) return "¶²Éݽüµî";
8217                 if (desc) return "¶²Éݤò¼è¤ê½ü¤¯¡£";
8218 #else
8219                 if (name) return "Remove Fear";
8220                 if (desc) return "Removes fear.";
8221 #endif
8222     
8223                 {
8224                         if (cast)
8225                         {
8226                                 set_afraid(0);
8227                         }
8228                 }
8229                 break;
8230
8231         case 3:
8232 #ifdef JP
8233                 if (name) return "°Ò°µ";
8234                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8235 #else
8236                 if (name) return "Scare Monster";
8237                 if (desc) return "Attempts to scare a monster.";
8238 #endif
8239     
8240                 {
8241                         int power = plev;
8242
8243                         if (info) return info_power(power);
8244
8245                         if (cast)
8246                         {
8247                                 if (!get_aim_dir(&dir)) return NULL;
8248
8249                                 fear_monster(dir, power);
8250                         }
8251                 }
8252                 break;
8253
8254         case 4:
8255 #ifdef JP
8256                 if (name) return "À»°è";
8257                 if (desc) return "ÎÙÀܤ·¤¿Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8258 #else
8259                 if (name) return "Sanctuary";
8260                 if (desc) return "Attempts to sleep monsters in the adjacent squares.";
8261 #endif
8262     
8263                 {
8264                         int power = plev;
8265
8266                         if (info) return info_power(power);
8267
8268                         if (cast)
8269                         {
8270                                 sleep_monsters_touch();
8271                         }
8272                 }
8273                 break;
8274
8275         case 5:
8276 #ifdef JP
8277                 if (name) return "Æþ¸ý";
8278                 if (desc) return "Ãæµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
8279 #else
8280                 if (name) return "Portal";
8281                 if (desc) return "Teleport medium distance.";
8282 #endif
8283     
8284                 {
8285                         int range = 25 + plev / 2;
8286
8287                         if (info) return info_range(range);
8288
8289                         if (cast)
8290                         {
8291                                 teleport_player(range, 0L);
8292                         }
8293                 }
8294                 break;
8295
8296         case 6:
8297 #ifdef JP
8298                 if (name) return "¥¹¥¿¡¼¥À¥¹¥È";
8299                 if (desc) return "¥¿¡¼¥²¥Ã¥ÈÉÕ¶á¤ËÁ®¸÷¤Î¥Ü¥ë¥È¤òÏ¢¼Í¤¹¤ë¡£";
8300 #else
8301                 if (name) return "Star Dust";
8302                 if (desc) return "Fires many bolts of light near the target.";
8303 #endif
8304     
8305                 {
8306                         int dice = 3 + (plev - 1) / 9;
8307                         int sides = 2;
8308
8309                         if (info) return info_multi_damage_dice(dice, sides);
8310
8311                         if (cast)
8312                         {
8313                                 if (!get_aim_dir(&dir)) return NULL;
8314                                 fire_blast(GF_LITE, dir, dice, sides, 10, 3);
8315                         }
8316                 }
8317                 break;
8318
8319         case 7:
8320 #ifdef JP
8321                 if (name) return "¿ÈÂξô²½";
8322                 if (desc) return "½ý¡¢ÆÇ¡¢Û¯Û°¤«¤éÁ´²÷¤¹¤ë¡£";
8323 #else
8324                 if (name) return "Purify";
8325                 if (desc) return "Heals all cut, stun and poison status.";
8326 #endif
8327     
8328                 {
8329                         if (cast)
8330                         {
8331                                 set_cut(0);
8332                                 set_poisoned(0);
8333                                 set_stun(0);
8334                         }
8335                 }
8336                 break;
8337
8338         case 8:
8339 #ifdef JP
8340                 if (name) return "¼Ù°­Èô¤Ð¤·";
8341                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼1ÂΤò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8342 #else
8343                 if (name) return "Scatter Evil";
8344                 if (desc) return "Attempts to teleport an evil monster away.";
8345 #endif
8346     
8347                 {
8348                         int power = MAX_SIGHT * 5;
8349
8350                         if (info) return info_power(power);
8351
8352                         if (cast)
8353                         {
8354                                 if (!get_aim_dir(&dir)) return NULL;
8355                                 fire_ball(GF_AWAY_EVIL, dir, power, 0);
8356                         }
8357                 }
8358                 break;
8359
8360         case 9:
8361 #ifdef JP
8362                 if (name) return "À»¤Ê¤ë¸÷µå";
8363                 if (desc) return "À»¤Ê¤ëÎϤò¤â¤ÄÊõ¼î¤òÊü¤Ä¡£¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤¬¡¢Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡£";
8364 #else
8365                 if (name) return "Holy Orb";
8366                 if (desc) return "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good monsters.";
8367 #endif
8368     
8369                 {
8370                         int dice = 3;
8371                         int sides = 6;
8372                         int rad = (plev < 30) ? 2 : 3;
8373                         int base;
8374
8375                         if (p_ptr->pclass == CLASS_PRIEST ||
8376                             p_ptr->pclass == CLASS_HIGH_MAGE ||
8377                             p_ptr->pclass == CLASS_SORCERER)
8378                                 base = plev + plev / 2;
8379                         else
8380                                 base = plev + plev / 4;
8381
8382
8383                         if (info) return info_damage(dice, sides, base);
8384
8385                         if (cast)
8386                         {
8387                                 if (!get_aim_dir(&dir)) return NULL;
8388
8389                                 fire_ball(GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);
8390                         }
8391                 }
8392                 break;
8393
8394         case 10:
8395 #ifdef JP
8396                 if (name) return "°­Ëâʧ¤¤";
8397                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥ÉµÚ¤Ó°­Ëâ¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£";
8398 #else
8399                 if (name) return "Exorcism";
8400                 if (desc) return "Damages all undead and demons in sight, and scares all evil monsters in sight.";
8401 #endif
8402     
8403                 {
8404                         int sides = plev;
8405                         int power = plev;
8406
8407                         if (info) return info_damage(1, sides, 0);
8408
8409                         if (cast)
8410                         {
8411                                 dispel_undead(randint1(sides));
8412                                 dispel_demons(randint1(sides));
8413                                 turn_evil(power);
8414                         }
8415                 }
8416                 break;
8417
8418         case 11:
8419 #ifdef JP
8420                 if (name) return "²ò¼ö";
8421                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
8422 #else
8423                 if (name) return "Remove Curse";
8424                 if (desc) return "Removes normal curses from equipped items.";
8425 #endif
8426     
8427                 {
8428                         if (cast)
8429                         {
8430                                 if (remove_curse())
8431                                 {
8432 #ifdef JP
8433                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
8434 #else
8435                                         msg_print("You feel as if someone is watching over you.");
8436 #endif
8437                                 }
8438                         }
8439                 }
8440                 break;
8441
8442         case 12:
8443 #ifdef JP
8444                 if (name) return "Æ©ÌÀ»ëǧ";
8445                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
8446 #else
8447                 if (name) return "Sense Unseen";
8448                 if (desc) return "Gives see invisible for a while.";
8449 #endif
8450     
8451                 {
8452                         int base = 24;
8453
8454                         if (info) return info_duration(base, base);
8455
8456                         if (cast)
8457                         {
8458                                 set_tim_invis(randint1(base) + base, FALSE);
8459                         }
8460                 }
8461                 break;
8462
8463         case 13:
8464 #ifdef JP
8465                 if (name) return "Âмٰ­·ë³¦";
8466                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Î¹¶·â¤òËɤ°¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
8467 #else
8468                 if (name) return "Protection from Evil";
8469                 if (desc) return "Gives aura which protect you from evil monster's physical attack.";
8470 #endif
8471     
8472                 {
8473                         int base = 25;
8474                         int sides = 3 * plev;
8475
8476                         if (info) return info_duration(base, sides);
8477
8478                         if (cast)
8479                         {
8480                                 set_protevil(randint1(sides) + sides, FALSE);
8481                         }
8482                 }
8483                 break;
8484
8485         case 14:
8486 #ifdef JP
8487                 if (name) return "ºÛ¤­¤ÎÍë";
8488                 if (desc) return "¶¯ÎϤÊÅÅ·â¤Î¥Ü¥ë¥È¤òÊü¤Ä¡£";
8489 #else
8490                 if (name) return "Judgment Thunder";
8491                 if (desc) return "Fires a powerful bolt of lightning.";
8492 #endif
8493     
8494                 {
8495                         int dam = plev * 5;
8496
8497                         if (info) return info_damage(0, 0, dam);
8498
8499                         if (cast)
8500                         {
8501                                 if (!get_aim_dir(&dir)) return NULL;
8502                                 fire_bolt(GF_ELEC, dir, dam);
8503                         }
8504                 }
8505                 break;
8506
8507         case 15:
8508 #ifdef JP
8509                 if (name) return "À»¤Ê¤ë¸æ¸ÀÍÕ";
8510                 if (desc) return "»ë³¦Æâ¤Î¼Ù°­¤Ê¸ºß¤ËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢ÂÎÎϤò²óÉü¤·¡¢ÆÇ¡¢¶²ÉÝ¡¢Û¯Û°¾õÂÖ¡¢Éé½ý¤«¤éÁ´²÷¤¹¤ë¡£";
8511 #else
8512                 if (name) return "Holy Word";
8513                 if (desc) return "Damages all evil monsters in sight, heals HP somewhat, and completely heals poison, fear, stun and cut status.";
8514 #endif
8515     
8516                 {
8517                         int dam_sides = plev * 6;
8518                         int heal = 100;
8519
8520 #ifdef JP
8521                         if (info) return format("»:1d%d/²ó%d", dam_sides, heal);
8522 #else
8523                         if (info) return format("dam:d%d/h%d", dam_sides, heal);
8524 #endif
8525
8526                         if (cast)
8527                         {
8528                                 dispel_evil(randint1(dam_sides));
8529                                 hp_player(heal);
8530                                 set_afraid(0);
8531                                 set_poisoned(0);
8532                                 set_stun(0);
8533                                 set_cut(0);
8534                         }
8535                 }
8536                 break;
8537
8538         case 16:
8539 #ifdef JP
8540                 if (name) return "³«¤«¤ì¤¿Æ»";
8541                 if (desc) return "°ìľÀþ¾å¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
8542 #else
8543                 if (name) return "Unbarring Ways";
8544                 if (desc) return "Fires a beam which destroy traps and doors.";
8545 #endif
8546     
8547                 {
8548                         if (cast)
8549                         {
8550                                 if (!get_aim_dir(&dir)) return NULL;
8551
8552                                 destroy_door(dir);
8553                         }
8554                 }
8555                 break;
8556
8557         case 17:
8558 #ifdef JP
8559                 if (name) return "ÉõËâ";
8560                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ÎÆ°¤­¤ò»ß¤á¤ë¡£";
8561 #else
8562                 if (name) return "Arrest";
8563                 if (desc) return "Attempts to paralyze an evil monster.";
8564 #endif
8565     
8566                 {
8567                         int power = plev * 2;
8568
8569                         if (info) return info_power(power);
8570
8571                         if (cast)
8572                         {
8573                                 if (!get_aim_dir(&dir)) return NULL;
8574                                 stasis_evil(dir);
8575                         }
8576                 }
8577                 break;
8578
8579         case 18:
8580 #ifdef JP
8581                 if (name) return "À»¤Ê¤ë¥ª¡¼¥é";
8582                 if (desc) return "°ìÄê»þ´Ö¡¢¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò½ý¤Ä¤±¤ëÀ»¤Ê¤ë¥ª¡¼¥é¤òÆÀ¤ë¡£";
8583 #else
8584                 if (name) return "Holy Aura";
8585                 if (desc) return "Gives aura of holy power which injures evil monsters which attacked you for a while.";
8586 #endif
8587     
8588                 {
8589                         int base = 20;
8590
8591                         if (info) return info_duration(base, base);
8592
8593                         if (cast)
8594                         {
8595                                 set_tim_sh_holy(randint1(base) + base, FALSE);
8596                         }
8597                 }
8598                 break;
8599
8600         case 19:
8601 #ifdef JP
8602                 if (name) return "¥¢¥ó¥Ç¥Ã¥É&°­ËâÂ໶";
8603                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥ÉµÚ¤Ó°­Ëâ¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8604 #else
8605                 if (name) return "Dispel Undead & Demons";
8606                 if (desc) return "Damages all undead and demons in sight.";
8607 #endif
8608     
8609                 {
8610                         int sides = plev * 4;
8611
8612                         if (info) return info_damage(1, sides, 0);
8613
8614                         if (cast)
8615                         {
8616                                 dispel_undead(randint1(sides));
8617                                 dispel_demons(randint1(sides));
8618                         }
8619                 }
8620                 break;
8621
8622         case 20:
8623 #ifdef JP
8624                 if (name) return "¼Ù°­Â໶";
8625                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8626 #else
8627                 if (name) return "Dispel Evil";
8628                 if (desc) return "Damages all evil monsters in sight.";
8629 #endif
8630     
8631                 {
8632                         int sides = plev * 4;
8633
8634                         if (info) return info_damage(1, sides, 0);
8635
8636                         if (cast)
8637                         {
8638                                 dispel_evil(randint1(sides));
8639                         }
8640                 }
8641                 break;
8642
8643         case 21:
8644 #ifdef JP
8645                 if (name) return "À»¤Ê¤ë¿Ï";
8646                 if (desc) return "Ä̾ï¤ÎÉð´ï¤ËÌǼ٤ΰÀ­¤ò¤Ä¤±¤ë¡£";
8647 #else
8648                 if (name) return "Holy Blade";
8649                 if (desc) return "Makes current weapon especially deadly against evil monsters.";
8650 #endif
8651     
8652                 {
8653                         if (cast)
8654                         {
8655                                 brand_weapon(13);
8656                         }
8657                 }
8658                 break;
8659
8660         case 22:
8661 #ifdef JP
8662                 if (name) return "¥¹¥¿¡¼¥Ð¡¼¥¹¥È";
8663                 if (desc) return "µðÂç¤ÊÁ®¸÷¤Îµå¤òÊü¤Ä¡£";
8664 #else
8665                 if (name) return "Star Burst";
8666                 if (desc) return "Fires a huge ball of powerful light.";
8667 #endif
8668     
8669                 {
8670                         int dam = 100 + plev * 2;
8671                         int rad = 4;
8672
8673                         if (info) return info_damage(0, 0, dam);
8674
8675                         if (cast)
8676                         {
8677                                 if (!get_aim_dir(&dir)) return NULL;
8678
8679                                 fire_ball(GF_LITE, dir, dam, rad);
8680                         }
8681                 }
8682                 break;
8683
8684         case 23:
8685 #ifdef JP
8686                 if (name) return "Å·»È¾¤´­";
8687                 if (desc) return "Å·»È¤ò1Âξ¤´­¤¹¤ë¡£";
8688 #else
8689                 if (name) return "Summon Angel";
8690                 if (desc) return "Summons an angel.";
8691 #endif
8692     
8693                 {
8694                         if (cast)
8695                         {
8696                                 bool pet = !one_in_(3);
8697                                 u32b mode = 0L;
8698
8699                                 if (pet) mode |= PM_FORCE_PET;
8700                                 else mode |= PM_NO_PET;
8701                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
8702
8703                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_ANGEL, mode))
8704                                 {
8705                                         if (pet)
8706                                         {
8707 #ifdef JP
8708                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
8709 #else
8710                                                 msg_print("'What is thy bidding... Master?'");
8711 #endif
8712                                         }
8713                                         else
8714                                         {
8715 #ifdef JP
8716                                                 msg_print("¡Ö²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª °­¹Ô¼Ô¤è¡¢²ù¤¤²þ¤á¤è¡ª¡×");
8717 #else
8718                                                 msg_print("Mortal! Repent of thy impiousness.");
8719 #endif
8720                                         }
8721                                 }
8722                         }
8723                 }
8724                 break;
8725
8726         case 24:
8727 #ifdef JP
8728                 if (name) return "»Îµ¤¹âÍÈ";
8729                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
8730 #else
8731                 if (name) return "Heroism";
8732                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
8733 #endif
8734     
8735                 {
8736                         int base = 25;
8737
8738                         if (info) return info_duration(base, base);
8739
8740                         if (cast)
8741                         {
8742                                 set_hero(randint1(base) + base, FALSE);
8743                                 hp_player(10);
8744                                 set_afraid(0);
8745                         }
8746                 }
8747                 break;
8748
8749         case 25:
8750 #ifdef JP
8751                 if (name) return "¼ö¤¤Â໶";
8752                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
8753 #else
8754                 if (name) return "Dispel Curse";
8755                 if (desc) return "Removes normal and heavy curse from equipped items.";
8756 #endif
8757     
8758                 {
8759                         if (cast)
8760                         {
8761                                 if (remove_all_curse())
8762                                 {
8763 #ifdef JP
8764                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
8765 #else
8766                                         msg_print("You feel as if someone is watching over you.");
8767 #endif
8768                                 }
8769                         }
8770                 }
8771                 break;
8772
8773         case 26:
8774 #ifdef JP
8775                 if (name) return "¼Ù°­ÄÉÊü";
8776                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8777 #else
8778                 if (name) return "Banish Evil";
8779                 if (desc) return "Teleports all evil monsters in sight away unless resisted.";
8780 #endif
8781     
8782                 {
8783                         int power = 100;
8784
8785                         if (info) return info_power(power);
8786
8787                         if (cast)
8788                         {
8789                                 if (banish_evil(power))
8790                                 {
8791 #ifdef JP
8792                                         msg_print("¿ÀÀ»¤ÊÎϤ¬¼Ù°­¤òÂǤÁʧ¤Ã¤¿¡ª");
8793 #else
8794                                         msg_print("The holy power banishes evil!");
8795 #endif
8796
8797                                 }
8798                         }
8799                 }
8800                 break;
8801
8802         case 27:
8803 #ifdef JP
8804                 if (name) return "¥Ï¥ë¥Þ¥²¥É¥ó";
8805                 if (desc) return "¼þÊդΥ¢¥¤¥Æ¥à¡¢¥â¥ó¥¹¥¿¡¼¡¢ÃÏ·Á¤òÇ˲õ¤¹¤ë¡£";
8806 #else
8807                 if (name) return "Armageddon";
8808                 if (desc) return "Destroy everything in nearby area.";
8809 #endif
8810     
8811                 {
8812                         int base = 12;
8813                         int sides = 4;
8814
8815                         if (cast)
8816                         {
8817                                 destroy_area(py, px, base + randint1(sides), FALSE);
8818                         }
8819                 }
8820                 break;
8821
8822         case 28:
8823 #ifdef JP
8824                 if (name) return "ÌܤˤÏÌܤò";
8825                 if (desc) return "°ìÄê»þ´Ö¡¢¼«Ê¬¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤¿¤È¤­¤Ë¹¶·â¤ò¹Ô¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆƱÅù¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8826 #else
8827                 if (name) return "An Eye for an Eye";
8828                 if (desc) return "Gives special aura for a while. When you are attacked by a monster, the monster are injured with same amount of damage as you take.";
8829 #endif
8830     
8831                 {
8832                         int base = 10;
8833
8834                         if (info) return info_duration(base, base);
8835
8836                         if (cast)
8837                         {
8838                                 set_tim_eyeeye(randint1(base) + base, FALSE);
8839                         }
8840                 }
8841                 break;
8842
8843         case 29:
8844 #ifdef JP
8845                 if (name) return "¿À¤ÎÅܤê";
8846                 if (desc) return "¥¿¡¼¥²¥Ã¥È¤Î¼þ°Ï¤Ëʬ²ò¤Îµå¤ò¿¿ôÍî¤È¤¹¡£";
8847 #else
8848                 if (name) return "Wrath of the God";
8849                 if (desc) return "Drops many balls of disintegration near the target.";
8850 #endif
8851     
8852                 {
8853                         int dam = plev * 3 + 25;
8854                         int rad = 2;
8855
8856                         if (info) return info_multi_damage(dam);
8857
8858                         if (cast)
8859                         {
8860                                 if (!cast_wrath_of_the_god(dam, rad)) return NULL;
8861                         }
8862                 }
8863                 break;
8864
8865         case 30:
8866 #ifdef JP
8867                 if (name) return "¿À°Ò";
8868                 if (desc) return "ÎÙÀܤ¹¤ë¥â¥ó¥¹¥¿¡¼¤ËÀ»¤Ê¤ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¡¢¸ºÂ®¡¢Û¯Û°¡¢º®Í𡢶²ÉÝ¡¢Ì²¤ê¤òÍ¿¤¨¤ë¡£¤µ¤é¤ËÂÎÎϤò²óÉü¤¹¤ë¡£";
8869 #else
8870                 if (name) return "Divine Intervention";
8871                 if (desc) return "Damages all adjacent monsters with holy power. Damages and attempt to slow, stun, confuse, scare and freeze all monsters in sight. And heals HP.";
8872 #endif
8873     
8874                 {
8875                         int b_dam = plev * 11;
8876                         int d_dam = plev * 4;
8877                         int heal = 100;
8878                         int power = plev * 4;
8879
8880 #ifdef JP
8881                         if (info) return format("²ó%d/»%d+%d", heal, d_dam, b_dam/2);
8882 #else
8883                         if (info) return format("h%d/dm%d+%d", heal, d_dam, b_dam/2);
8884 #endif
8885
8886                         if (cast)
8887                         {
8888                                 project(0, 1, py, px, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
8889                                 dispel_monsters(d_dam);
8890                                 slow_monsters();
8891                                 stun_monsters(power);
8892                                 confuse_monsters(power);
8893                                 turn_monsters(power);
8894                                 stasis_monsters(power);
8895                                 hp_player(heal);
8896                         }
8897                 }
8898                 break;
8899
8900         case 31:
8901 #ifdef JP
8902                 if (name) return "À»Àï";
8903                 if (desc) return "»ë³¦Æâ¤ÎÁ±Îɤʥâ¥ó¥¹¥¿¡¼¤ò¥Ú¥Ã¥È¤Ë¤·¤è¤¦¤È¤·¡¢¤Ê¤é¤Ê¤«¤Ã¤¿¾ì¹çµÚ¤ÓÁ±ÎɤǤʤ¤¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£¤µ¤é¤Ë¿¿ô¤Î²Ã®¤µ¤ì¤¿µ³»Î¤ò¾¤´­¤·¡¢¥Ò¡¼¥í¡¼¡¢½ËÊ¡¡¢²Ã®¡¢Âмٰ­·ë³¦¤òÆÀ¤ë¡£";
8904 #else
8905                 if (name) return "Crusade";
8906                 if (desc) return "Attempts to charm all good monsters in sight, and scare all non-charmed monsters, and summons great number of knights, and gives heroism, bless, speed and protection from evil.";
8907 #endif
8908     
8909                 {
8910                         if (cast)
8911                         {
8912                                 int base = 25;
8913                                 int sp_sides = 20 + plev;
8914                                 int sp_base = plev;
8915
8916                                 int i;
8917                                 crusade();
8918                                 for (i = 0; i < 12; i++)
8919                                 {
8920                                         int attempt = 10;
8921                                         int my, mx;
8922
8923                                         while (attempt--)
8924                                         {
8925                                                 scatter(&my, &mx, py, px, 4, 0);
8926
8927                                                 /* Require empty grids */
8928                                                 if (cave_empty_bold2(my, mx)) break;
8929                                         }
8930                                         if (attempt < 0) continue;
8931                                         summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
8932                                 }
8933                                 set_hero(randint1(base) + base, FALSE);
8934                                 set_blessed(randint1(base) + base, FALSE);
8935                                 set_fast(randint1(sp_sides) + sp_base, FALSE);
8936                                 set_protevil(randint1(base) + base, FALSE);
8937                                 set_afraid(0);
8938                         }
8939                 }
8940                 break;
8941         }
8942
8943         return "";
8944 }
8945
8946
8947 static cptr do_music_spell(int spell, int mode)
8948 {
8949         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
8950         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
8951         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
8952         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
8953         bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
8954         bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
8955         bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
8956
8957 #ifdef JP
8958         static const char s_dam[] = "»½ý:";
8959 #else
8960         static const char s_dam[] = "dam ";
8961 #endif
8962
8963         int dir;
8964         int plev = p_ptr->lev;
8965
8966         switch (spell)
8967         {
8968         case 0:
8969 #ifdef JP
8970                 if (name) return "ÃÙÆߤβÎ";
8971                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8972 #else
8973                 if (name) return "Song of Holding";
8974                 if (desc) return "Attempts to slow all monsters in sight.";
8975 #endif
8976     
8977                 /* Stop singing before start another */
8978                 if (cast || fail) stop_singing();
8979
8980                 if (cast)
8981                 {
8982 #ifdef JP
8983                         msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
8984 #else
8985                         msg_print("You start humming a slow, steady melody...");
8986 #endif
8987                         start_singing(spell, MUSIC_SLOW);
8988                 }
8989
8990                 {
8991                         int power = plev;
8992
8993                         if (info) return info_power(power);
8994
8995                         if (cont)
8996                         {
8997                                 slow_monsters();
8998                         }
8999                 }
9000                 break;
9001
9002         case 1:
9003 #ifdef JP
9004                 if (name) return "½ËÊ¡¤Î²Î";
9005                 if (desc) return "Ì¿ÃæΨ¤ÈAC¤Î¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
9006 #else
9007                 if (name) return "Song of Blessing";
9008                 if (desc) return "Gives bonus to hit and AC for a few turns.";
9009 #endif
9010     
9011                 /* Stop singing before start another */
9012                 if (cast || fail) stop_singing();
9013
9014                 if (cast)
9015                 {
9016 #ifdef JP
9017                         msg_print("¸·¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9018 #else
9019                         msg_print("The holy power of the Music of the Ainur enters you...");
9020 #endif
9021                         start_singing(spell, MUSIC_BLESS);
9022                 }
9023
9024                 if (stop)
9025                 {
9026                         if (!p_ptr->blessed)
9027                         {
9028 #ifdef JP
9029                                 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9030 #else
9031                                 msg_print("The prayer has expired.");
9032 #endif
9033                         }
9034                 }
9035
9036                 break;
9037
9038         case 2:
9039 #ifdef JP
9040                 if (name) return "Êø²õ¤Î²»¿§";
9041                 if (desc) return "¹ì²»¤Î¥Ü¥ë¥È¤òÊü¤Ä¡£";
9042 #else
9043                 if (name) return "Wrecking Note";
9044                 if (desc) return "Fires a bolt of sound.";
9045 #endif
9046     
9047                 /* Stop singing before start another */
9048                 if (cast || fail) stop_singing();
9049
9050                 {
9051                         int dice = 4 + (plev - 1) / 5;
9052                         int sides = 4;
9053
9054                         if (info) return info_damage(dice, sides, 0);
9055
9056                         if (cast)
9057                         {
9058                                 if (!get_aim_dir(&dir)) return NULL;
9059
9060                                 fire_bolt(GF_SOUND, dir, damroll(dice, sides));
9061                         }
9062                 }
9063                 break;
9064
9065         case 3:
9066 #ifdef JP
9067                 if (name) return "Û¯Û°¤ÎÀûΧ";
9068                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òÛ¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9069 #else
9070                 if (name) return "Stun Pattern";
9071                 if (desc) return "Attempts to stun all monsters in sight.";
9072 #endif
9073     
9074                 /* Stop singing before start another */
9075                 if (cast || fail) stop_singing();
9076
9077                 if (cast)
9078                 {
9079 #ifdef JP
9080                         msg_print("âÁÏǤµ¤»¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9081 #else
9082                         msg_print("You weave a pattern of sounds to bewilder and daze...");
9083 #endif
9084                         start_singing(spell, MUSIC_STUN);
9085                 }
9086
9087                 {
9088                         int dice = plev / 10;
9089                         int sides = 2;
9090
9091                         if (info) return info_power_dice(dice, sides);
9092
9093                         if (cont)
9094                         {
9095                                 stun_monsters(damroll(dice, sides));
9096                         }
9097                 }
9098
9099                 break;
9100
9101         case 4:
9102 #ifdef JP
9103                 if (name) return "À¸Ì¿¤Îή¤ì";
9104                 if (desc) return "ÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
9105 #else
9106                 if (name) return "Flow of Life";
9107                 if (desc) return "Heals HP a little.";
9108 #endif
9109     
9110                 /* Stop singing before start another */
9111                 if (cast || fail) stop_singing();
9112
9113                 if (cast)
9114                 {
9115 #ifdef JP
9116                         msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤­¤¿¡¥¡¥¡¥");
9117 #else
9118                         msg_print("Life flows through you as you sing a song of healing...");
9119 #endif
9120                         start_singing(spell, MUSIC_L_LIFE);
9121                 }
9122
9123                 {
9124                         int dice = 2;
9125                         int sides = 6;
9126
9127                         if (info) return info_heal(dice, sides, 0);
9128
9129                         if (cont)
9130                         {
9131                                 hp_player(damroll(dice, sides));
9132                         }
9133                 }
9134
9135                 break;
9136
9137         case 5:
9138 #ifdef JP
9139                 if (name) return "ÂÀÍۤβÎ";
9140                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
9141 #else
9142                 if (name) return "Song of the Sun";
9143                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
9144 #endif
9145     
9146                 /* Stop singing before start another */
9147                 if (cast || fail) stop_singing();
9148
9149                 {
9150                         int dice = 2;
9151                         int sides = plev / 2;
9152                         int rad = plev / 10 + 1;
9153
9154                         if (info) return info_damage(dice, sides, 0);
9155
9156                         if (cast)
9157                         {
9158 #ifdef JP
9159                                 msg_print("¸÷¤êµ±¤¯²Î¤¬ÊÕ¤ê¤ò¾È¤é¤·¤¿¡£");
9160 #else
9161                                 msg_print("Your uplifting song brings brightness to dark places...");
9162 #endif
9163
9164                                 lite_area(damroll(dice, sides), rad);
9165                         }
9166                 }
9167                 break;
9168
9169         case 6:
9170 #ifdef JP
9171                 if (name) return "¶²ÉݤβÎ";
9172                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9173 #else
9174                 if (name) return "Song of Fear";
9175                 if (desc) return "Attempts to scare all monsters in sight.";
9176 #endif
9177     
9178                 /* Stop singing before start another */
9179                 if (cast || fail) stop_singing();
9180
9181                 if (cast)
9182                 {
9183 #ifdef JP
9184                         msg_print("¤ª¤É¤í¤ª¤É¤í¤·¤¤¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9185 #else
9186                         msg_print("You start weaving a fearful pattern...");
9187 #endif
9188                         start_singing(spell, MUSIC_FEAR);                       
9189                 }
9190
9191                 {
9192                         int power = plev;
9193
9194                         if (info) return info_power(power);
9195
9196                         if (cont)
9197                         {
9198                                 project_hack(GF_TURN_ALL, power);
9199                         }
9200                 }
9201
9202                 break;
9203
9204         case 7:
9205 #ifdef JP
9206                 if (name) return "À襤¤Î²Î";
9207                 if (desc) return "¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
9208 #else
9209                 if (name) return "Heroic Ballad";
9210                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
9211 #endif
9212
9213                 /* Stop singing before start another */
9214                 if (cast || fail) stop_singing();
9215
9216                 if (cast)
9217                 {
9218 #ifdef JP
9219                         msg_print("·ã¤·¤¤À襤¤Î²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
9220 #else
9221                         msg_print("You start singing a song of intense fighting...");
9222 #endif
9223
9224                         (void)hp_player(10);
9225                         (void)set_afraid(0);
9226
9227                         /* Recalculate hitpoints */
9228                         p_ptr->update |= (PU_HP);
9229
9230                         start_singing(spell, MUSIC_HERO);
9231                 }
9232
9233                 if (stop)
9234                 {
9235                         if (!p_ptr->hero)
9236                         {
9237 #ifdef JP
9238                                 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9239 #else
9240                                 msg_print("The heroism wears off.");
9241 #endif
9242                                 /* Recalculate hitpoints */
9243                                 p_ptr->update |= (PU_HP);
9244                         }
9245                 }
9246
9247                 break;
9248
9249         case 8:
9250 #ifdef JP
9251                 if (name) return "ÎîŪÃγÐ";
9252                 if (desc) return "¶á¤¯¤Îæ«/Èâ/³¬Ãʤò´¶ÃΤ¹¤ë¡£¥ì¥Ù¥ë15¤ÇÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢20¤ÇºâÊõ¤È¥¢¥¤¥Æ¥à¤ò´¶ÃΤǤ­¤ë¤è¤¦¤Ë¤Ê¤ë¡£¥ì¥Ù¥ë25¤Ç¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ·¡¢40¤Ç¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆâ¤Î¤¹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤³¤Î¸ú²Ì¤Ï²Î¤¤Â³¤±¤ë¤³¤È¤Ç½ç¤Ëµ¯¤³¤ë¡£";
9253 #else
9254                 if (name) return "Clairaudience";
9255                 if (desc) return "Detects traps, doors and stairs in your vicinity. And detects all monsters at level 15, treasures and items at level 20. Maps nearby area at level 25. Lights and know the whole level at level 40. These effects occurs by turns while this song continues.";
9256 #endif
9257     
9258                 /* Stop singing before start another */
9259                 if (cast || fail) stop_singing();
9260
9261                 if (cast)
9262                 {
9263 #ifdef JP
9264                         msg_print("ÀŤ«¤Ê²»³Ú¤¬´¶³Ð¤ò¸¦¤®À¡¤Þ¤µ¤»¤¿¡¥¡¥¡¥");
9265 #else
9266                         msg_print("Your quiet music sharpens your sense of hearing...");
9267 #endif
9268
9269                         /* Hack -- Initialize the turn count */
9270                         p_ptr->magic_num1[2] = 0;
9271
9272                         start_singing(spell, MUSIC_DETECT);
9273                 }
9274
9275                 {
9276                         int rad = DETECT_RAD_DEFAULT;
9277
9278                         if (info) return info_radius(rad);
9279
9280                         if (cont)
9281                         {
9282                                 int count = p_ptr->magic_num1[2];
9283
9284                                 if (count >= 19) wiz_lite(FALSE);
9285                                 if (count >= 11)
9286                                 {
9287                                         map_area(rad);
9288                                         if (plev > 39 && count < 19)
9289                                                 p_ptr->magic_num1[2] = count + 1;
9290                                 }
9291                                 if (count >= 6)
9292                                 {
9293                                         /* There are too many hidden treasure.  So... */
9294                                         /* detect_treasure(rad); */
9295                                         detect_objects_gold(rad);
9296                                         detect_objects_normal(rad);
9297
9298                                         if (plev > 24 && count < 11)
9299                                                 p_ptr->magic_num1[2] = count + 1;
9300                                 }
9301                                 if (count >= 3)
9302                                 {
9303                                         detect_monsters_invis(rad);
9304                                         detect_monsters_normal(rad);
9305
9306                                         if (plev > 19 && count < 6)
9307                                                 p_ptr->magic_num1[2] = count + 1;
9308                                 }
9309                                 detect_traps(rad, TRUE);
9310                                 detect_doors(rad);
9311                                 detect_stairs(rad);
9312
9313                                 if (plev > 14 && count < 3)
9314                                         p_ptr->magic_num1[2] = count + 1;
9315                         }
9316                 }
9317
9318                 break;
9319
9320         case 9:
9321 #ifdef JP
9322                 if (name) return "º²¤Î²Î";
9323                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆÀº¿À¹¶·â¤ò¹Ô¤¦¡£";
9324 #else
9325                 if (name) return "Soul Shriek";
9326                 if (desc) return "Damages all monsters in sight with PSI damages.";
9327 #endif
9328
9329                 /* Stop singing before start another */
9330                 if (cast || fail) stop_singing();
9331
9332                 if (cast)
9333                 {
9334 #ifdef JP
9335                         msg_print("Àº¿À¤òDZ¤¸¶Ê¤²¤ë²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
9336 #else
9337                         msg_print("You start singing a song of soul in pain...");
9338 #endif
9339                         start_singing(spell, MUSIC_PSI);
9340                 }
9341
9342                 {
9343                         int dice = 1;
9344                         int sides = plev * 3 / 2;
9345
9346                         if (info) return info_damage(dice, sides, 0);
9347
9348                         if (cont)
9349                         {
9350                                 project_hack(GF_PSI, damroll(dice, sides));
9351                         }
9352                 }
9353
9354                 break;
9355
9356         case 10:
9357 #ifdef JP
9358                 if (name) return "Ãμ±¤Î²Î";
9359                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¥Þ¥¹¤ÈÎÙ¤ê¤Î¥Þ¥¹¤ËÍî¤Á¤Æ¤¤¤ë¥¢¥¤¥Æ¥à¤ò´ÕÄꤹ¤ë¡£";
9360 #else
9361                 if (name) return "Song of Lore";
9362                 if (desc) return "Identifies all items which are in the adjacent squares.";
9363 #endif
9364     
9365                 /* Stop singing before start another */
9366                 if (cast || fail) stop_singing();
9367
9368                 if (cast)
9369                 {
9370 #ifdef JP
9371                         msg_print("¤³¤ÎÀ¤³¦¤ÎÃ챤¬Î®¤ì¹þ¤ó¤Ç¤­¤¿¡¥¡¥¡¥");
9372 #else
9373                         msg_print("You recall the rich lore of the world...");
9374 #endif
9375                         start_singing(spell, MUSIC_ID);
9376                 }
9377
9378                 {
9379                         int rad = 1;
9380
9381                         if (info) return info_radius(rad);
9382
9383                         /*
9384                          * ²Î¤Î³«»Ï»þ¤Ë¤â¸ú²Ìȯư¡§
9385                          * MPÉÔ­¤Ç´ÕÄ꤬ȯư¤µ¤ì¤ëÁ°¤Ë²Î¤¬ÃæÃǤ·¤Æ¤·¤Þ¤¦¤Î¤òËɻߡ£
9386                          */
9387                         if (cont || cast)
9388                         {
9389                                 project(0, rad, py, px, 0, GF_IDENTIFY, PROJECT_ITEM, -1);
9390                         }
9391                 }
9392
9393                 break;
9394
9395         case 11:
9396 #ifdef JP
9397                 if (name) return "±£ÆۤβÎ";
9398                 if (desc) return "±£Ì©¹ÔưǽÎϤò¾å¾º¤µ¤»¤ë¡£";
9399 #else
9400                 if (name) return "Hiding Tune";
9401                 if (desc) return "Gives improved stealth.";
9402 #endif
9403
9404                 /* Stop singing before start another */
9405                 if (cast || fail) stop_singing();
9406
9407                 if (cast)
9408                 {
9409 #ifdef JP
9410                         msg_print("¤¢¤Ê¤¿¤Î»Ñ¤¬·Ê¿§¤Ë¤È¤±¤³¤ó¤Ç¤¤¤Ã¤¿¡¥¡¥¡¥");
9411 #else
9412                         msg_print("Your song carries you beyond the sight of mortal eyes...");
9413 #endif
9414                         start_singing(spell, MUSIC_STEALTH);
9415                 }
9416
9417                 if (stop)
9418                 {
9419                         if (!p_ptr->tim_stealth)
9420                         {
9421 #ifdef JP
9422                                 msg_print("»Ñ¤¬¤Ï¤Ã¤­¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
9423 #else
9424                                 msg_print("You are no longer hided.");
9425 #endif
9426                         }
9427                 }
9428
9429                 break;
9430
9431         case 12:
9432 #ifdef JP
9433                 if (name) return "¸¸±Æ¤ÎÀûΧ";
9434                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òº®Í𤵤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9435 #else
9436                 if (name) return "Illusion Pattern";
9437                 if (desc) return "Attempts to confuse all monsters in sight.";
9438 #endif
9439     
9440                 /* Stop singing before start another */
9441                 if (cast || fail) stop_singing();
9442
9443                 if (cast)
9444                 {
9445 #ifdef JP
9446                         msg_print("ÊÕ¤ê°ìÌ̤˸¸±Æ¤¬¸½¤ì¤¿¡¥¡¥¡¥");
9447 #else
9448                         msg_print("You weave a pattern of sounds to beguile and confuse...");
9449 #endif
9450                         start_singing(spell, MUSIC_CONF);
9451                 }
9452
9453                 {
9454                         int power = plev * 2;
9455
9456                         if (info) return info_power(power);
9457
9458                         if (cont)
9459                         {
9460                                 confuse_monsters(power);
9461                         }
9462                 }
9463
9464                 break;
9465
9466         case 13:
9467 #ifdef JP
9468                 if (name) return "ÇËÌǤ櫤Ó";
9469                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤Æ¹ì²»¹¶·â¤ò¹Ô¤¦¡£";
9470 #else
9471                 if (name) return "Doomcall";
9472                 if (desc) return "Damages all monsters in sight with booming sound.";
9473 #endif
9474     
9475                 /* Stop singing before start another */
9476                 if (cast || fail) stop_singing();
9477
9478                 if (cast)
9479                 {
9480 #ifdef JP
9481                         msg_print("¹ì²»¤¬¶Á¤¤¤¿¡¥¡¥¡¥");
9482 #else
9483                         msg_print("The fury of the Downfall of Numenor lashes out...");
9484 #endif
9485                         start_singing(spell, MUSIC_SOUND);
9486                 }
9487
9488                 {
9489                         int dice = 10 + plev / 5;
9490                         int sides = 7;
9491
9492                         if (info) return info_damage(dice, sides, 0);
9493
9494                         if (cont)
9495                         {
9496                                 project_hack(GF_SOUND, damroll(dice, sides));
9497                         }
9498                 }
9499
9500                 break;
9501
9502         case 14:
9503 #ifdef JP
9504                 if (name) return "¥Õ¥£¥ê¥¨¥ë¤Î²Î";
9505                 if (desc) return "¼þ°Ï¤Î»àÂΤä¹ü¤òÀ¸¤­ÊÖ¤¹¡£";
9506 #else
9507                 if (name) return "Firiel's Song";
9508                 if (desc) return "Resurrects nearby corpse and skeletons. And makes these your pets.";
9509 #endif
9510     
9511                 {
9512                         /* Stop singing before start another */
9513                         if (cast || fail) stop_singing();
9514
9515                         if (cast)
9516                         {
9517 #ifdef JP
9518                                 msg_print("À¸Ì¿¤ÈÉü³è¤Î¥Æ¡¼¥Þ¤òÁդǻϤ᤿¡¥¡¥¡¥");
9519 #else
9520                                 msg_print("The themes of life and revival are woven into your song...");
9521 #endif
9522
9523                                 animate_dead(0, py, px);
9524                         }
9525                 }
9526                 break;
9527
9528         case 15:
9529 #ifdef JP
9530                 if (name) return "ι¤ÎÃç´Ö";
9531                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9532 #else
9533                 if (name) return "Fellowship Chant";
9534                 if (desc) return "Attempts to charm all monsters in sight.";
9535 #endif
9536
9537                 /* Stop singing before start another */
9538                 if (cast || fail) stop_singing();
9539
9540                 if (cast)
9541                 {
9542 #ifdef JP
9543                         msg_print("°Â¤é¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9544 #else
9545                         msg_print("You weave a slow, soothing melody of imploration...");
9546 #endif
9547                         start_singing(spell, MUSIC_CHARM);
9548                 }
9549
9550                 {
9551                         int dice = 10 + plev / 15;
9552                         int sides = 6;
9553
9554                         if (info) return info_power_dice(dice, sides);
9555
9556                         if (cont)
9557                         {
9558                                 charm_monsters(damroll(dice, sides));
9559                         }
9560                 }
9561
9562                 break;
9563
9564         case 16:
9565 #ifdef JP
9566                 if (name) return "ʬ²ò²»ÇÈ";
9567                 if (desc) return "Êɤò·¡¤ê¿Ê¤à¡£¼«Ê¬¤Î­¸µ¤Î¥¢¥¤¥Æ¥à¤Ï¾øȯ¤¹¤ë¡£";
9568 #else
9569                 if (name) return "Sound of disintegration";
9570                 if (desc) return "Makes you be able to burrow into walls. Objects under your feet evaporate.";
9571 #endif
9572
9573                 /* Stop singing before start another */
9574                 if (cast || fail) stop_singing();
9575
9576                 if (cast)
9577                 {
9578 #ifdef JP
9579                         msg_print("Ê´ºÕ¤¹¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9580 #else
9581                         msg_print("You weave a violent pattern of sounds to break wall.");
9582 #endif
9583                         start_singing(spell, MUSIC_WALL);
9584                 }
9585
9586                 {
9587                         /*
9588                          * ²Î¤Î³«»Ï»þ¤Ë¤â¸ú²Ìȯư¡§
9589                          * MPÉÔ­¤Ç¸ú²Ì¤¬È¯Æ°¤µ¤ì¤ëÁ°¤Ë²Î¤¬ÃæÃǤ·¤Æ¤·¤Þ¤¦¤Î¤òËɻߡ£
9590                          */
9591                         if (cont || cast)
9592                         {
9593                                 project(0, 0, py, px,
9594                                         0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
9595                         }
9596                 }
9597                 break;
9598
9599         case 17:
9600 #ifdef JP
9601                 if (name) return "¸µÁÇÂÑÀ­";
9602                 if (desc) return "»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
9603 #else
9604                 if (name) return "Finrod's Resistance";
9605                 if (desc) return "Gives resistance to fire, cold, electricity, acid and poison. These resistances can be added to which from equipment for more powerful resistances.";
9606 #endif
9607     
9608                 /* Stop singing before start another */
9609                 if (cast || fail) stop_singing();
9610
9611                 if (cast)
9612                 {
9613 #ifdef JP
9614                         msg_print("¸µÁǤÎÎϤËÂФ¹¤ëǦÂѤβΤò²Î¤Ã¤¿¡£");
9615 #else
9616                         msg_print("You sing a song of perseverance against powers...");
9617 #endif
9618                         start_singing(spell, MUSIC_RESIST);
9619                 }
9620
9621                 if (stop)
9622                 {
9623                         if (!p_ptr->oppose_acid)
9624                         {
9625 #ifdef JP
9626                                 msg_print("»À¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9627 #else
9628                                 msg_print("You feel less resistant to acid.");
9629 #endif
9630                         }
9631
9632                         if (!p_ptr->oppose_elec)
9633                         {
9634 #ifdef JP
9635                                 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9636 #else
9637                                 msg_print("You feel less resistant to elec.");
9638 #endif
9639                         }
9640
9641                         if (!p_ptr->oppose_fire)
9642                         {
9643 #ifdef JP
9644                                 msg_print("²Ð¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9645 #else
9646                                 msg_print("You feel less resistant to fire.");
9647 #endif
9648                         }
9649
9650                         if (!p_ptr->oppose_cold)
9651                         {
9652 #ifdef JP
9653                                 msg_print("Î䵤¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9654 #else
9655                                 msg_print("You feel less resistant to cold.");
9656 #endif
9657                         }
9658
9659                         if (!p_ptr->oppose_pois)
9660                         {
9661 #ifdef JP
9662                                 msg_print("ÆǤؤÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9663 #else
9664                                 msg_print("You feel less resistant to pois.");
9665 #endif
9666                         }
9667                 }
9668
9669                 break;
9670
9671         case 18:
9672 #ifdef JP
9673                 if (name) return "¥Û¥Ó¥Ã¥È¤Î¥á¥í¥Ç¥£";
9674                 if (desc) return "²Ã®¤¹¤ë¡£";
9675 #else
9676                 if (name) return "Hobbit Melodies";
9677                 if (desc) return "Hastes you.";
9678 #endif
9679
9680                 /* Stop singing before start another */
9681                 if (cast || fail) stop_singing();
9682
9683                 if (cast)
9684                 {
9685 #ifdef JP
9686                         msg_print("·Ú²÷¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
9687 #else
9688                         msg_print("You start singing joyful pop song...");
9689 #endif
9690                         start_singing(spell, MUSIC_SPEED);
9691                 }
9692
9693                 if (stop)
9694                 {
9695                         if (!p_ptr->fast)
9696                         {
9697 #ifdef JP
9698                                 msg_print("Æ°¤­¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
9699 #else
9700                                 msg_print("You feel yourself slow down.");
9701 #endif
9702                         }
9703                 }
9704
9705                 break;
9706
9707         case 19:
9708 #ifdef JP
9709                 if (name) return "ÏĤó¤ÀÀ¤³¦";
9710                 if (desc) return "¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9711 #else
9712                 if (name) return "World Contortion";
9713                 if (desc) return "Teleports all nearby monsters away unless resisted.";
9714 #endif
9715     
9716                 {
9717                         int rad = plev / 15 + 1;
9718                         int power = plev * 3 + 1;
9719
9720                         if (info) return info_radius(rad);
9721
9722                         /* Stop singing before start another */
9723                         if (cast || fail) stop_singing();
9724
9725                         if (cast)
9726                         {
9727 #ifdef JP
9728                                 msg_print("²Î¤¬¶õ´Ö¤òÏĤ᤿¡¥¡¥¡¥");
9729 #else
9730                                 msg_print("Reality whirls wildly as you sing a dizzying melody...");
9731 #endif
9732
9733                                 project(0, rad, py, px, power, GF_AWAY_ALL, PROJECT_KILL, -1);
9734                         }
9735                 }
9736                 break;
9737
9738         case 20:
9739 #ifdef JP
9740                 if (name) return "Â໶¤Î²Î";
9741                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÆäËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
9742 #else
9743                 if (name) return "Dispelling chant";
9744                 if (desc) return "Damages all monsters in sight. Hurts evil monsters greatly.";
9745 #endif
9746     
9747                 /* Stop singing before start another */
9748                 if (cast || fail) stop_singing();
9749
9750                 if (cast)
9751                 {
9752 #ifdef JP
9753                         msg_print("ÂѤ¨¤é¤ì¤Ê¤¤ÉÔ¶¨Ï²»¤¬Å¨¤òÀÕ¤áΩ¤Æ¤¿¡¥¡¥¡¥");
9754 #else
9755                         msg_print("You cry out in an ear-wracking voice...");
9756 #endif
9757                         start_singing(spell, MUSIC_DISPEL);
9758                 }
9759
9760                 {
9761                         int m_sides = plev * 3;
9762                         int e_sides = plev * 3;
9763
9764                         if (info) return format("%s1d%d+1d%d", s_dam, m_sides, e_sides);
9765
9766                         if (cont)
9767                         {
9768                                 dispel_monsters(randint1(m_sides));
9769                                 dispel_evil(randint1(e_sides));
9770                         }
9771                 }
9772                 break;
9773
9774         case 21:
9775 #ifdef JP
9776                 if (name) return "¥µ¥ë¥Þ¥ó¤Î´Å¸À";
9777                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¡¢Ì²¤é¤»¤è¤¦¤È¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9778 #else
9779                 if (name) return "The Voice of Saruman";
9780                 if (desc) return "Attempts to slow and sleep all monsters in sight.";
9781 #endif
9782     
9783                 /* Stop singing before start another */
9784                 if (cast || fail) stop_singing();
9785
9786                 if (cast)
9787                 {
9788 #ifdef JP
9789                         msg_print("Í¥¤·¤¯¡¢Ì¥ÎÏŪ¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
9790 #else
9791                         msg_print("You start humming a gentle and attractive song...");
9792 #endif
9793                         start_singing(spell, MUSIC_SARUMAN);
9794                 }
9795
9796                 {
9797                         int power = plev;
9798
9799                         if (info) return info_power(power);
9800
9801                         if (cont)
9802                         {
9803                                 slow_monsters();
9804                                 sleep_monsters();
9805                         }
9806                 }
9807
9808                 break;
9809
9810         case 22:
9811 #ifdef JP
9812                 if (name) return "Íò¤Î²»¿§";
9813                 if (desc) return "¹ì²»¤Î¥Ó¡¼¥à¤òÊü¤Ä¡£";
9814 #else
9815                 if (name) return "Song of the Tempest";
9816                 if (desc) return "Fires a beam of sound.";
9817 #endif
9818     
9819                 {
9820                         int dice = 15 + (plev - 1) / 2;
9821                         int sides = 10;
9822
9823                         if (info) return info_damage(dice, sides, 0);
9824
9825                         /* Stop singing before start another */
9826                         if (cast || fail) stop_singing();
9827
9828                         if (cast)
9829                         {
9830                                 if (!get_aim_dir(&dir)) return NULL;
9831
9832                                 fire_beam(GF_SOUND, dir, damroll(dice, sides));
9833                         }
9834                 }
9835                 break;
9836
9837         case 23:
9838 #ifdef JP
9839                 if (name) return "¤â¤¦°ì¤Ä¤ÎÀ¤³¦";
9840                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
9841 #else
9842                 if (name) return "Ambarkanta";
9843                 if (desc) return "Recreates current dungeon level.";
9844 #endif
9845     
9846                 {
9847                         int base = 15;
9848                         int sides = 20;
9849
9850                         if (info) return info_delay(base, sides);
9851
9852                         /* Stop singing before start another */
9853                         if (cast || fail) stop_singing();
9854
9855                         if (cast)
9856                         {
9857 #ifdef JP
9858                                 msg_print("¼þ°Ï¤¬ÊѲ½¤·»Ï¤á¤¿¡¥¡¥¡¥");
9859 #else
9860                                 msg_print("You sing of the primeval shaping of Middle-earth...");
9861 #endif
9862
9863                                 alter_reality();
9864                         }
9865                 }
9866                 break;
9867
9868         case 24:
9869 #ifdef JP
9870                 if (name) return "Ç˲õ¤ÎÀûΧ";
9871                 if (desc) return "¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÍɤ餷¡¢ÊɤȾ²¤ò¥é¥ó¥À¥à¤ËÆþ¤ìÊѤ¨¤ë¡£";
9872 #else
9873                 if (name) return "Wrecking Pattern";
9874                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
9875 #endif
9876
9877                 /* Stop singing before start another */
9878                 if (cast || fail) stop_singing();
9879
9880                 if (cast)
9881                 {
9882 #ifdef JP
9883                         msg_print("Ç˲õŪ¤Ê²Î¤¬¶Á¤­¤ï¤¿¤Ã¤¿¡¥¡¥¡¥");
9884 #else
9885                         msg_print("You weave a pattern of sounds to contort and shatter...");
9886 #endif
9887                         start_singing(spell, MUSIC_QUAKE);
9888                 }
9889
9890                 {
9891                         int rad = 10;
9892
9893                         if (info) return info_radius(rad);
9894
9895                         if (cont)
9896                         {
9897                                 earthquake(py, px, 10);
9898                         }
9899                 }
9900
9901                 break;
9902
9903
9904         case 25:
9905 #ifdef JP
9906                 if (name) return "ÄäÂڤβÎ";
9907                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òËãá㤵¤»¤è¤¦¤È¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9908 #else
9909                 if (name) return "Stationary Shriek";
9910                 if (desc) return "Attempts to freeze all monsters in sight.";
9911 #endif
9912     
9913                 /* Stop singing before start another */
9914                 if (cast || fail) stop_singing();
9915
9916                 if (cast)
9917                 {
9918 #ifdef JP
9919                         msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9920 #else
9921                         msg_print("You weave a very slow pattern which is almost likely to stop...");
9922 #endif
9923                         start_singing(spell, MUSIC_STASIS);
9924                 }
9925
9926                 {
9927                         int power = plev * 4;
9928
9929                         if (info) return info_power(power);
9930
9931                         if (cont)
9932                         {
9933                                 stasis_monsters(power);
9934                         }
9935                 }
9936
9937                 break;
9938
9939         case 26:
9940 #ifdef JP
9941                 if (name) return "¼é¤ê¤Î²Î";
9942                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
9943 #else
9944                 if (name) return "Endurance";
9945                 if (desc) return "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph.";
9946 #endif
9947     
9948                 {
9949                         /* Stop singing before start another */
9950                         if (cast || fail) stop_singing();
9951
9952                         if (cast)
9953                         {
9954 #ifdef JP
9955                                 msg_print("²Î¤¬¿ÀÀ»¤Ê¾ì¤òºî¤ê½Ð¤·¤¿¡¥¡¥¡¥");
9956 #else
9957                                 msg_print("The holy power of the Music is creating sacred field...");
9958 #endif
9959
9960                                 warding_glyph();
9961                         }
9962                 }
9963                 break;
9964
9965         case 27:
9966 #ifdef JP
9967                 if (name) return "±Ñͺ¤Î»í";
9968                 if (desc) return "²Ã®¤·¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ê¡¢»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
9969 #else
9970                 if (name) return "The Hero's Poem";
9971                 if (desc) return "Hastes you. Gives heroism. Damages all monsters in sight.";
9972 #endif
9973     
9974                 /* Stop singing before start another */
9975                 if (cast || fail) stop_singing();
9976
9977                 if (cast)
9978                 {
9979 #ifdef JP
9980                         msg_print("±Ñͺ¤Î²Î¤ò¸ý¤º¤µ¤ó¤À¡¥¡¥¡¥");
9981 #else
9982                         msg_print("You chant a powerful, heroic call to arms...");
9983 #endif
9984                         (void)hp_player(10);
9985                         (void)set_afraid(0);
9986
9987                         /* Recalculate hitpoints */
9988                         p_ptr->update |= (PU_HP);
9989
9990                         start_singing(spell, MUSIC_SHERO);
9991                 }
9992
9993                 if (stop)
9994                 {
9995                         if (!p_ptr->hero)
9996                         {
9997 #ifdef JP
9998                                 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9999 #else
10000                                 msg_print("The heroism wears off.");
10001 #endif
10002                                 /* Recalculate hitpoints */
10003                                 p_ptr->update |= (PU_HP);
10004                         }
10005
10006                         if (!p_ptr->fast)
10007                         {
10008 #ifdef JP
10009                                 msg_print("Æ°¤­¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
10010 #else
10011                                 msg_print("You feel yourself slow down.");
10012 #endif
10013                         }
10014                 }
10015
10016                 {
10017                         int dice = 1;
10018                         int sides = plev * 3;
10019
10020                         if (info) return info_damage(dice, sides, 0);
10021
10022                         if (cont)
10023                         {
10024                                 dispel_monsters(damroll(dice, sides));
10025                         }
10026                 }
10027                 break;
10028
10029         case 28:
10030 #ifdef JP
10031                 if (name) return "¥ä¥ô¥¡¥ó¥Ê¤Î½õ¤±";
10032                 if (desc) return "¶¯ÎϤʲóÉü¤Î²Î¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
10033 #else
10034                 if (name) return "Relief of Yavanna";
10035                 if (desc) return "Powerful healing song. Also heals cut and stun completely.";
10036 #endif
10037     
10038                 /* Stop singing before start another */
10039                 if (cast || fail) stop_singing();
10040
10041                 if (cast)
10042                 {
10043 #ifdef JP
10044                         msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤­¤¿¡¥¡¥¡¥");
10045 #else
10046                         msg_print("Life flows through you as you sing the song...");
10047 #endif
10048                         start_singing(spell, MUSIC_H_LIFE);
10049                 }
10050
10051                 {
10052                         int dice = 15;
10053                         int sides = 10;
10054
10055                         if (info) return info_heal(dice, sides, 0);
10056
10057                         if (cont)
10058                         {
10059                                 hp_player(damroll(dice, sides));
10060                                 set_stun(0);
10061                                 set_cut(0);
10062                         }
10063                 }
10064
10065                 break;
10066
10067         case 29:
10068 #ifdef JP
10069                 if (name) return "ºÆÀ¸¤Î²Î";
10070                 if (desc) return "¤¹¤Ù¤Æ¤Î¥¹¥Æ¡¼¥¿¥¹¤È·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
10071 #else
10072                 if (name) return "Goddess' rebirth";
10073                 if (desc) return "Restores all stats and experience.";
10074 #endif
10075     
10076                 {
10077                         /* Stop singing before start another */
10078                         if (cast || fail) stop_singing();
10079
10080                         if (cast)
10081                         {
10082 #ifdef JP
10083                                 msg_print("°Å¹õ¤ÎÃæ¤Ë¸÷¤ÈÈþ¤ò¤Õ¤ê¤Þ¤¤¤¿¡£ÂΤ¬¸µ¤Î³èÎϤò¼è¤êÌᤷ¤¿¡£");
10084 #else
10085                                 msg_print("You strewed light and beauty in the dark as you sing. You feel refreshed.");
10086 #endif
10087                                 (void)do_res_stat(A_STR);
10088                                 (void)do_res_stat(A_INT);
10089                                 (void)do_res_stat(A_WIS);
10090                                 (void)do_res_stat(A_DEX);
10091                                 (void)do_res_stat(A_CON);
10092                                 (void)do_res_stat(A_CHR);
10093                                 (void)restore_level();
10094                         }
10095                 }
10096                 break;
10097
10098         case 30:
10099 #ifdef JP
10100                 if (name) return "¥µ¥¦¥í¥ó¤ÎËâ½Ñ";
10101                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤǤ´¤¯¾®¤µ¤¤¹ì²»¤Îµå¤òÊü¤Ä¡£";
10102 #else
10103                 if (name) return "Wizardry of Sauron";
10104                 if (desc) return "Fires an extremely powerful tiny ball of sound.";
10105 #endif
10106     
10107                 {
10108                         int dice = 50 + plev;
10109                         int sides = 10;
10110                         int rad = 0;
10111
10112                         if (info) return info_damage(dice, sides, 0);
10113
10114                         /* Stop singing before start another */
10115                         if (cast || fail) stop_singing();
10116
10117                         if (cast)
10118                         {
10119                                 if (!get_aim_dir(&dir)) return NULL;
10120
10121                                 fire_ball(GF_SOUND, dir, damroll(dice, sides), rad);
10122                         }
10123                 }
10124                 break;
10125
10126         case 31:
10127 #ifdef JP
10128                 if (name) return "¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤ÎÄ©Àï";
10129                 if (desc) return "¥À¥á¡¼¥¸¤ò¼õ¤±¤Ê¤¯¤Ê¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
10130 #else
10131                 if (name) return "Fingolfin's Challenge";
10132                 if (desc) return "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks.";
10133 #endif
10134     
10135                 /* Stop singing before start another */
10136                 if (cast || fail) stop_singing();
10137
10138                 if (cast)
10139                 {
10140 #ifdef JP
10141                                 msg_print("¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤Î̽²¦¤Ø¤ÎÄ©Àï¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
10142 #else
10143                                 msg_print("You recall the valor of Fingolfin's challenge to the Dark Lord...");
10144 #endif
10145
10146                                 /* Redraw map */
10147                                 p_ptr->redraw |= (PR_MAP);
10148                 
10149                                 /* Update monsters */
10150                                 p_ptr->update |= (PU_MONSTERS);
10151                 
10152                                 /* Window stuff */
10153                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
10154
10155                                 start_singing(spell, MUSIC_INVULN);
10156                 }
10157
10158                 if (stop)
10159                 {
10160                         if (!p_ptr->invuln)
10161                         {
10162 #ifdef JP
10163                                 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
10164 #else
10165                                 msg_print("The invulnerability wears off.");
10166 #endif
10167                                 /* Redraw map */
10168                                 p_ptr->redraw |= (PR_MAP);
10169
10170                                 /* Update monsters */
10171                                 p_ptr->update |= (PU_MONSTERS);
10172
10173                                 /* Window stuff */
10174                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
10175                         }
10176                 }
10177
10178                 break;
10179         }
10180
10181         return "";
10182 }
10183
10184
10185 static cptr do_hissatsu_spell(int spell, int mode)
10186 {
10187         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
10188         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
10189         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
10190
10191         int dir;
10192         int plev = p_ptr->lev;
10193
10194         switch (spell)
10195         {
10196         case 0:
10197 #ifdef JP
10198                 if (name) return "ÈôÈÓ¹Ë";
10199                 if (desc) return "2¥Þ¥¹Î¥¤ì¤¿¤È¤³¤í¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¡£";
10200 #else
10201                 if (name) return "Tobi-Izuna";
10202                 if (desc) return "Attacks a two squares distant monster.";
10203 #endif
10204     
10205                 if (cast)
10206                 {
10207                         project_length = 2;
10208                         if (!get_aim_dir(&dir)) return NULL;
10209
10210                         project_hook(GF_ATTACK, dir, HISSATSU_2, PROJECT_STOP | PROJECT_KILL);
10211                 }
10212                 break;
10213
10214         case 1:
10215 #ifdef JP
10216                 if (name) return "¸Þ·î±«»Â¤ê";
10217                 if (desc) return "3Êý¸þ¤ËÂФ·¤Æ¹¶·â¤¹¤ë¡£";
10218 #else
10219                 if (name) return "3-Way Attack";
10220                 if (desc) return "Attacks in 3 directions in one time.";
10221 #endif
10222     
10223                 if (cast)
10224                 {
10225                         int cdir;
10226                         int y, x;
10227
10228                         if (!get_rep_dir2(&dir)) return NULL;
10229                         if (dir == 5) return NULL;
10230
10231                         for (cdir = 0;cdir < 8; cdir++)
10232                         {
10233                                 if (cdd[cdir] == dir) break;
10234                         }
10235
10236                         if (cdir == 8) return NULL;
10237
10238                         y = py + ddy_cdd[cdir];
10239                         x = px + ddx_cdd[cdir];
10240                         if (cave[y][x].m_idx)
10241                                 py_attack(y, x, 0);
10242                         else
10243 #ifdef JP
10244                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10245 #else
10246                                 msg_print("You attack the empty air.");
10247 #endif
10248                         y = py + ddy_cdd[(cdir + 7) % 8];
10249                         x = px + ddx_cdd[(cdir + 7) % 8];
10250                         if (cave[y][x].m_idx)
10251                                 py_attack(y, x, 0);
10252                         else
10253 #ifdef JP
10254                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10255 #else
10256                                 msg_print("You attack the empty air.");
10257 #endif
10258                         y = py + ddy_cdd[(cdir + 1) % 8];
10259                         x = px + ddx_cdd[(cdir + 1) % 8];
10260                         if (cave[y][x].m_idx)
10261                                 py_attack(y, x, 0);
10262                         else
10263 #ifdef JP
10264                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10265 #else
10266                                 msg_print("You attack the empty air.");
10267 #endif
10268                 }
10269                 break;
10270
10271         case 2:
10272 #ifdef JP
10273                 if (name) return "¥Ö¡¼¥á¥é¥ó";
10274                 if (desc) return "Éð´ï¤ò¼ê¸µ¤ËÌá¤Ã¤Æ¤¯¤ë¤è¤¦¤ËÅꤲ¤ë¡£Ìá¤Ã¤Æ¤³¤Ê¤¤¤³¤È¤â¤¢¤ë¡£";
10275 #else
10276                 if (name) return "Boomerang";
10277                 if (desc) return "Throws current weapon. And it'll return to your hand unless failed.";
10278 #endif
10279     
10280                 if (cast)
10281                 {
10282                         if (!do_cmd_throw_aux(1, TRUE, 0)) return NULL;
10283                 }
10284                 break;
10285
10286         case 3:
10287 #ifdef JP
10288                 if (name) return "±ëÎî";
10289                 if (desc) return "²Ð±êÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10290 #else
10291                 if (name) return "Burning Strike";
10292                 if (desc) return "Attacks a monster with more damage unless it has resistance to fire.";
10293 #endif
10294     
10295                 if (cast)
10296                 {
10297                         int y, x;
10298
10299                         if (!get_rep_dir2(&dir)) return NULL;
10300                         if (dir == 5) return NULL;
10301
10302                         y = py + ddy[dir];
10303                         x = px + ddx[dir];
10304
10305                         if (cave[y][x].m_idx)
10306                                 py_attack(y, x, HISSATSU_FIRE);
10307                         else
10308                         {
10309 #ifdef JP
10310                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10311 #else
10312                                 msg_print("There is no monster.");
10313 #endif
10314                                 return NULL;
10315                         }
10316                 }
10317                 break;
10318
10319         case 4:
10320 #ifdef JP
10321                 if (name) return "»¦µ¤´¶ÃÎ";
10322                 if (desc) return "¶á¤¯¤Î»×¹Í¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
10323 #else
10324                 if (name) return "Detect Ferocity";
10325                 if (desc) return "Detects all monsters except mindless in your vicinity.";
10326 #endif
10327     
10328                 if (cast)
10329                 {
10330                         detect_monsters_mind(DETECT_RAD_DEFAULT);
10331                 }
10332                 break;
10333
10334         case 5:
10335 #ifdef JP
10336                 if (name) return "¤ß¤ÍÂǤÁ";
10337                 if (desc) return "Áê¼ê¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤Ê¤¤¤¬¡¢Û¯Û°¤È¤µ¤»¤ë¡£";
10338 #else
10339                 if (name) return "Strike to Stun";
10340                 if (desc) return "Attempts to stun a monster in the adjacent.";
10341 #endif
10342     
10343                 if (cast)
10344                 {
10345                         int y, x;
10346
10347                         if (!get_rep_dir2(&dir)) return NULL;
10348                         if (dir == 5) return NULL;
10349
10350                         y = py + ddy[dir];
10351                         x = px + ddx[dir];
10352
10353                         if (cave[y][x].m_idx)
10354                                 py_attack(y, x, HISSATSU_MINEUCHI);
10355                         else
10356                         {
10357 #ifdef JP
10358                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10359 #else
10360                                 msg_print("There is no monster.");
10361 #endif
10362                                 return NULL;
10363                         }
10364                 }
10365                 break;
10366
10367         case 6:
10368 #ifdef JP
10369                 if (name) return "¥«¥¦¥ó¥¿¡¼";
10370                 if (desc) return "Áê¼ê¤Ë¹¶·â¤µ¤ì¤¿¤È¤­¤ËÈ¿·â¤¹¤ë¡£È¿·â¤¹¤ë¤¿¤Ó¤ËMP¤ò¾ÃÈñ¡£";
10371 #else
10372                 if (name) return "Counter";
10373                 if (desc) return "Prepares to counterattack. When attack by a monster, strikes back using SP each time.";
10374 #endif
10375     
10376                 if (cast)
10377                 {
10378                         if (p_ptr->riding)
10379                         {
10380 #ifdef JP
10381                                 msg_print("¾èÇÏÃæ¤Ë¤Ï̵Íý¤À¡£");
10382 #else
10383                                 msg_print("You cannot do it when riding.");
10384 #endif
10385                                 return NULL;
10386                         }
10387 #ifdef JP
10388                         msg_print("Áê¼ê¤Î¹¶·â¤ËÂФ·¤Æ¿È¹½¤¨¤¿¡£");
10389 #else
10390                         msg_print("You prepare to counter blow.");
10391 #endif
10392                         p_ptr->counter = TRUE;
10393                 }
10394                 break;
10395
10396         case 7:
10397 #ifdef JP
10398                 if (name) return "ʧ¤¤È´¤±";
10399                 if (desc) return "¹¶·â¤·¤¿¸å¡¢È¿ÂЦ¤ËÈ´¤±¤ë¡£";
10400 #else
10401                 if (name) return "Harainuke";
10402                 if (desc) return "Attacks monster with your weapons normally, then move through counter side of the monster.";
10403 #endif
10404     
10405                 if (cast)
10406                 {
10407                         int y, x;
10408
10409                         if (p_ptr->riding)
10410                         {
10411 #ifdef JP
10412                                 msg_print("¾èÇÏÃæ¤Ë¤Ï̵Íý¤À¡£");
10413 #else
10414                                 msg_print("You cannot do it when riding.");
10415 #endif
10416                                 return NULL;
10417                         }
10418         
10419                         if (!get_rep_dir2(&dir)) return NULL;
10420         
10421                         if (dir == 5) return NULL;
10422                         y = py + ddy[dir];
10423                         x = px + ddx[dir];
10424         
10425                         if (!cave[y][x].m_idx)
10426                         {
10427 #ifdef JP
10428                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10429 #else
10430                                 msg_print("There is no monster.");
10431 #endif
10432                                 return NULL;
10433                         }
10434         
10435                         py_attack(y, x, 0);
10436         
10437                         if (!player_can_enter(cave[y][x].feat, 0) || is_trap(cave[y][x].feat))
10438                                 break;
10439         
10440                         y += ddy[dir];
10441                         x += ddx[dir];
10442         
10443                         if (player_can_enter(cave[y][x].feat, 0) && !is_trap(cave[y][x].feat) && !cave[y][x].m_idx)
10444                         {
10445                                 msg_print(NULL);
10446         
10447                                 /* Move the player */
10448                                 (void)move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
10449                         }
10450                 }
10451                 break;
10452
10453         case 8:
10454 #ifdef JP
10455                 if (name) return "¥µ¡¼¥Ú¥ó¥Ä¥¿¥ó";
10456                 if (desc) return "ÆÇÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10457 #else
10458                 if (name) return "Serpent's Tongue";
10459                 if (desc) return "Attacks a monster with more damage unless it has resistance to poison.";
10460 #endif
10461     
10462                 if (cast)
10463                 {
10464                         int y, x;
10465
10466                         if (!get_rep_dir2(&dir)) return NULL;
10467                         if (dir == 5) return NULL;
10468
10469                         y = py + ddy[dir];
10470                         x = px + ddx[dir];
10471
10472                         if (cave[y][x].m_idx)
10473                                 py_attack(y, x, HISSATSU_POISON);
10474                         else
10475                         {
10476 #ifdef JP
10477                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10478 #else
10479                                 msg_print("There is no monster.");
10480 #endif
10481                                 return NULL;
10482                         }
10483                 }
10484                 break;
10485
10486         case 9:
10487 #ifdef JP
10488                 if (name) return "»ÂËâ·õÆõ¤ÎÂÀÅá";
10489                 if (desc) return "À¸Ì¿¤Î¤Ê¤¤¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤¬¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤ÏÁ´¤¯¸ú²Ì¤¬¤Ê¤¤¡£";
10490 #else
10491                 if (name) return "Zammaken";
10492                 if (desc) return "Attacks an evil unliving monster with great damage. No effect to other  monsters.";
10493 #endif
10494     
10495                 if (cast)
10496                 {
10497                         int y, x;
10498
10499                         if (!get_rep_dir2(&dir)) return NULL;
10500                         if (dir == 5) return NULL;
10501
10502                         y = py + ddy[dir];
10503                         x = px + ddx[dir];
10504
10505                         if (cave[y][x].m_idx)
10506                                 py_attack(y, x, HISSATSU_ZANMA);
10507                         else
10508                         {
10509 #ifdef JP
10510                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10511 #else
10512                                 msg_print("There is no monster.");
10513 #endif
10514                                 return NULL;
10515                         }
10516                 }
10517                 break;
10518
10519         case 10:
10520 #ifdef JP
10521                 if (name) return "ÎöÉ÷·õ";
10522                 if (desc) return "¹¶·â¤·¤¿Áê¼ê¤ò¸åÊý¤Ø¿á¤­Èô¤Ð¤¹¡£";
10523 #else
10524                 if (name) return "Wind Blast";
10525                 if (desc) return "Attacks an adjacent monster, and blow it away.";
10526 #endif
10527     
10528                 if (cast)
10529                 {
10530                         int y, x;
10531
10532                         if (!get_rep_dir2(&dir)) return NULL;
10533                         if (dir == 5) return NULL;
10534
10535                         y = py + ddy[dir];
10536                         x = px + ddx[dir];
10537
10538                         if (cave[y][x].m_idx)
10539                                 py_attack(y, x, 0);
10540                         else
10541                         {
10542 #ifdef JP
10543                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10544 #else
10545                                 msg_print("There is no monster.");
10546 #endif
10547                                 return NULL;
10548                         }
10549                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
10550                         {
10551                                 return "";
10552                         }
10553                         if (cave[y][x].m_idx)
10554                         {
10555                                 int i;
10556                                 int ty = y, tx = x;
10557                                 int oy = y, ox = x;
10558                                 int m_idx = cave[y][x].m_idx;
10559                                 monster_type *m_ptr = &m_list[m_idx];
10560                                 char m_name[80];
10561         
10562                                 monster_desc(m_name, m_ptr, 0);
10563         
10564                                 for (i = 0; i < 5; i++)
10565                                 {
10566                                         y += ddy[dir];
10567                                         x += ddx[dir];
10568                                         if (cave_empty_bold(y, x))
10569                                         {
10570                                                 ty = y;
10571                                                 tx = x;
10572                                         }
10573                                         else break;
10574                                 }
10575                                 if ((ty != oy) || (tx != ox))
10576                                 {
10577 #ifdef JP
10578                                         msg_format("%s¤ò¿á¤­Èô¤Ð¤·¤¿¡ª", m_name);
10579 #else
10580                                         msg_format("You blow %s away!", m_name);
10581 #endif
10582                                         cave[oy][ox].m_idx = 0;
10583                                         cave[ty][tx].m_idx = m_idx;
10584                                         m_ptr->fy = ty;
10585                                         m_ptr->fx = tx;
10586         
10587                                         update_mon(m_idx, TRUE);
10588                                         lite_spot(oy, ox);
10589                                         lite_spot(ty, tx);
10590         
10591                                         if (r_info[m_ptr->r_idx].flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
10592                                                 p_ptr->update |= (PU_MON_LITE);
10593                                 }
10594                         }
10595                 }
10596                 break;
10597
10598         case 11:
10599 #ifdef JP
10600                 if (name) return "Åá¾¢¤ÎÌÜÍø¤­";
10601                 if (desc) return "Éð´ï¡¦Ëɶñ¤ò1¤Ä¼±Ê̤¹¤ë¡£¥ì¥Ù¥ë45°Ê¾å¤ÇÉð´ï¡¦Ëɶñ¤ÎǽÎϤò´°Á´¤ËÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£";
10602 #else
10603                 if (name) return "Judge";
10604                 if (desc) return "Identifies a weapon or armor. Or *identifies* these at level 45.";
10605 #endif
10606     
10607                 if (cast)
10608                 {
10609                         if (plev > 44)
10610                         {
10611                                 if (!identify_fully(TRUE)) return NULL;
10612                         }
10613                         else
10614                         {
10615                                 if (!ident_spell(TRUE)) return NULL;
10616                         }
10617                 }
10618                 break;
10619
10620         case 12:
10621 #ifdef JP
10622                 if (name) return "ÇË´ä»Â";
10623                 if (desc) return "´ä¤ò²õ¤·¡¢´äÀзϤΥâ¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10624 #else
10625                 if (name) return "Rock Smash";
10626                 if (desc) return "Breaks rock. Or greatly damage a monster made by rocks.";
10627 #endif
10628     
10629                 if (cast)
10630                 {
10631                         int y, x;
10632
10633                         if (!get_rep_dir2(&dir)) return NULL;
10634                         if (dir == 5) return NULL;
10635
10636                         y = py + ddy[dir];
10637                         x = px + ddx[dir];
10638
10639                         if (cave[y][x].m_idx)
10640                                 py_attack(y, x, HISSATSU_HAGAN);
10641         
10642                         if (!cave_have_flag_bold(y, x, FF_HURT_ROCK)) break;
10643         
10644                         /* Destroy the feature */
10645                         cave_alter_feat(y, x, FF_HURT_ROCK);
10646         
10647                         /* Update some things */
10648                         p_ptr->update |= (PU_FLOW);
10649                 }
10650                 break;
10651
10652         case 13:
10653 #ifdef JP
10654                 if (name) return "Íð¤ìÀã·î²Ö";
10655                 if (desc) return "¹¶·â²ó¿ô¤¬Áý¤¨¡¢Î䵤ÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10656 #else
10657                 if (name) return "Midare-Setsugekka";
10658                 if (desc) return "Attacks a monster with increased number of attacks and more damage unless it has resistance to cold.";
10659 #endif
10660     
10661                 if (cast)
10662                 {
10663                         int y, x;
10664
10665                         if (!get_rep_dir2(&dir)) return NULL;
10666                         if (dir == 5) return NULL;
10667
10668                         y = py + ddy[dir];
10669                         x = px + ddx[dir];
10670
10671                         if (cave[y][x].m_idx)
10672                                 py_attack(y, x, HISSATSU_COLD);
10673                         else
10674                         {
10675 #ifdef JP
10676                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10677 #else
10678                                 msg_print("There is no monster.");
10679 #endif
10680                                 return NULL;
10681                         }
10682                 }
10683                 break;
10684
10685         case 14:
10686 #ifdef JP
10687                 if (name) return "µÞ½êÆͤ­";
10688                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò°ì·â¤ÇÅݤ¹¹¶·â¤ò·«¤ê½Ð¤¹¡£¼ºÇÔ¤¹¤ë¤È1ÅÀ¤·¤«¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤Ê¤¤¡£";
10689 #else
10690                 if (name) return "Spot Aiming";
10691                 if (desc) return "Attempts to kill a monster instantly. If failed cause only 1HP of damage.";
10692 #endif
10693     
10694                 if (cast)
10695                 {
10696                         int y, x;
10697
10698                         if (!get_rep_dir2(&dir)) return NULL;
10699                         if (dir == 5) return NULL;
10700
10701                         y = py + ddy[dir];
10702                         x = px + ddx[dir];
10703
10704                         if (cave[y][x].m_idx)
10705                                 py_attack(y, x, HISSATSU_KYUSHO);
10706                         else
10707                         {
10708 #ifdef JP
10709                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10710 #else
10711                                 msg_print("There is no monster.");
10712 #endif
10713                                 return NULL;
10714                         }
10715                 }
10716                 break;
10717
10718         case 15:
10719 #ifdef JP
10720                 if (name) return "Ëâ¿À»Â¤ê";
10721                 if (desc) return "²ñ¿´¤Î°ì·â¤Ç¹¶·â¤¹¤ë¡£¹¶·â¤¬¤«¤ï¤µ¤ì¤ä¤¹¤¤¡£";
10722 #else
10723                 if (name) return "Majingiri";
10724                 if (desc) return "Attempts to attack with critical hit. But this attack is easy to evade for a monster.";
10725 #endif
10726     
10727                 if (cast)
10728                 {
10729                         int y, x;
10730
10731                         if (!get_rep_dir2(&dir)) return NULL;
10732                         if (dir == 5) return NULL;
10733
10734                         y = py + ddy[dir];
10735                         x = px + ddx[dir];
10736
10737                         if (cave[y][x].m_idx)
10738                                 py_attack(y, x, HISSATSU_MAJIN);
10739                         else
10740                         {
10741 #ifdef JP
10742                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10743 #else
10744                                 msg_print("There is no monster.");
10745 #endif
10746                                 return NULL;
10747                         }
10748                 }
10749                 break;
10750
10751         case 16:
10752 #ifdef JP
10753                 if (name) return "¼Î¤Æ¿È";
10754                 if (desc) return "¶¯ÎϤʹ¶·â¤ò·«¤ê½Ð¤¹¡£¼¡¤Î¥¿¡¼¥ó¤Þ¤Ç¤Î´Ö¡¢¿©¤é¤¦¥À¥á¡¼¥¸¤¬Áý¤¨¤ë¡£";
10755 #else
10756                 if (name) return "Desperate Attack";
10757                 if (desc) return "Attacks with all of your power. But all damages you take will be doubled for one turn.";
10758 #endif
10759     
10760                 if (cast)
10761                 {
10762                         int y, x;
10763
10764                         if (!get_rep_dir2(&dir)) return NULL;
10765                         if (dir == 5) return NULL;
10766
10767                         y = py + ddy[dir];
10768                         x = px + ddx[dir];
10769
10770                         if (cave[y][x].m_idx)
10771                                 py_attack(y, x, HISSATSU_SUTEMI);
10772                         else
10773                         {
10774 #ifdef JP
10775                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10776 #else
10777                                 msg_print("There is no monster.");
10778 #endif
10779                                 return NULL;
10780                         }
10781                         p_ptr->sutemi = TRUE;
10782                 }
10783                 break;
10784
10785         case 17:
10786 #ifdef JP
10787                 if (name) return "Íë·âÏÉÄÞ»Â";
10788                 if (desc) return "ÅÅ·âÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÈó¾ï¤ËÂ礭¤¤¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10789 #else
10790                 if (name) return "Lightning Eagle";
10791                 if (desc) return "Attacks a monster with more damage unless it has resistance to electricity.";
10792 #endif
10793     
10794                 if (cast)
10795                 {
10796                         int y, x;
10797
10798                         if (!get_rep_dir2(&dir)) return NULL;
10799                         if (dir == 5) return NULL;
10800
10801                         y = py + ddy[dir];
10802                         x = px + ddx[dir];
10803
10804                         if (cave[y][x].m_idx)
10805                                 py_attack(y, x, HISSATSU_ELEC);
10806                         else
10807                         {
10808 #ifdef JP
10809                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10810 #else
10811                                 msg_print("There is no monster.");
10812 #endif
10813                                 return NULL;
10814                         }
10815                 }
10816                 break;
10817
10818         case 18:
10819 #ifdef JP
10820                 if (name) return "Æþ¿È";
10821                 if (desc) return "ÁÇÁ᤯Áê¼ê¤Ë¶á´ó¤ê¹¶·â¤¹¤ë¡£";
10822 #else
10823                 if (name) return "Rush Attack";
10824                 if (desc) return "Steps close to a monster and attacks at a time.";
10825 #endif
10826     
10827                 if (cast)
10828                 {
10829                         if (!rush_attack(NULL)) return NULL;
10830                 }
10831                 break;
10832
10833         case 19:
10834 #ifdef JP
10835                 if (name) return "ÀÖή±²";
10836                 if (desc) return "¼«Ê¬¼«¿È¤â½ý¤òºî¤ê¤Ä¤Ä¡¢¤½¤Î½ý¤¬¿¼¤¤¤Û¤ÉÂ礭¤¤°ÒÎϤÇÁ´Êý¸þ¤ÎŨ¤ò¹¶·â¤Ç¤­¤ë¡£À¸¤­¤Æ¤¤¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡£";
10837 #else
10838                 if (name) return "Bloody Maelstrom";
10839                 if (desc) return "Attacks all adjacent monsters with power corresponding to your cut status. Then increases your cut status. No effect to unliving monsters.";
10840 #endif
10841     
10842                 if (cast)
10843                 {
10844                         int y = 0, x = 0;
10845
10846                         cave_type       *c_ptr;
10847                         monster_type    *m_ptr;
10848         
10849                         if (p_ptr->cut < 300)
10850                                 set_cut(p_ptr->cut + 300);
10851                         else
10852                                 set_cut(p_ptr->cut * 2);
10853         
10854                         for (dir = 0; dir < 8; dir++)
10855                         {
10856                                 y = py + ddy_ddd[dir];
10857                                 x = px + ddx_ddd[dir];
10858                                 c_ptr = &cave[y][x];
10859         
10860                                 /* Get the monster */
10861                                 m_ptr = &m_list[c_ptr->m_idx];
10862         
10863                                 /* Hack -- attack monsters */
10864                                 if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
10865                                 {
10866                                         if (!monster_living(&r_info[m_ptr->r_idx]))
10867                                         {
10868                                                 char m_name[80];
10869         
10870                                                 monster_desc(m_name, m_ptr, 0);
10871 #ifdef JP
10872                                                 msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡ª", m_name);
10873 #else
10874                                                 msg_format("%s is unharmed!", m_name);
10875 #endif
10876                                         }
10877                                         else py_attack(y, x, HISSATSU_SEKIRYUKA);
10878                                 }
10879                         }
10880                 }
10881                 break;
10882
10883         case 20:
10884 #ifdef JP
10885                 if (name) return "·ã¿Ì·â";
10886                 if (desc) return "ÃϿ̤òµ¯¤³¤¹¡£";
10887 #else
10888                 if (name) return "Earthquake Blow";
10889                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
10890 #endif
10891     
10892                 if (cast)
10893                 {
10894                         int y,x;
10895
10896                         if (!get_rep_dir2(&dir)) return NULL;
10897                         if (dir == 5) return NULL;
10898
10899                         y = py + ddy[dir];
10900                         x = px + ddx[dir];
10901
10902                         if (cave[y][x].m_idx)
10903                                 py_attack(y, x, HISSATSU_QUAKE);
10904                         else
10905                                 earthquake(py, px, 10);
10906                 }
10907                 break;
10908
10909         case 21:
10910 #ifdef JP
10911                 if (name) return "ÃÏÁö¤ê";
10912                 if (desc) return "¾×·âÇȤΥӡ¼¥à¤òÊü¤Ä¡£";
10913 #else
10914                 if (name) return "Crack";
10915                 if (desc) return "Fires a beam of shock wave.";
10916 #endif
10917     
10918                 if (cast)
10919                 {
10920                         int total_damage = 0, basedam, i;
10921                         u32b flgs[TR_FLAG_SIZE];
10922                         object_type *o_ptr;
10923                         if (!get_aim_dir(&dir)) return NULL;
10924 #ifdef JP
10925                         msg_print("Éð´ï¤òÂ礭¤¯¿¶¤ê²¼¤í¤·¤¿¡£");
10926 #else
10927                         msg_print("You swing your weapon downward.");
10928 #endif
10929                         for (i = 0; i < 2; i++)
10930                         {
10931                                 int damage;
10932         
10933                                 if (!buki_motteruka(INVEN_RARM+i)) break;
10934                                 o_ptr = &inventory[INVEN_RARM+i];
10935                                 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
10936                                 damage = o_ptr->to_d * 100;
10937                                 object_flags(o_ptr, flgs);
10938                                 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
10939                                 {
10940                                         /* vorpal blade */
10941                                         basedam *= 5;
10942                                         basedam /= 3;
10943                                 }
10944                                 else if (have_flag(flgs, TR_VORPAL))
10945                                 {
10946                                         /* vorpal flag only */
10947                                         basedam *= 11;
10948                                         basedam /= 9;
10949                                 }
10950                                 damage += basedam;
10951                                 damage *= p_ptr->num_blow[i];
10952                                 total_damage += damage / 200;
10953                                 if (i) total_damage = total_damage*7/10;
10954                         }
10955                         fire_beam(GF_FORCE, dir, total_damage);
10956                 }
10957                 break;
10958
10959         case 22:
10960 #ifdef JP
10961                 if (name) return "µ¤Ç÷¤Îͺ¶«¤Ó";
10962                 if (desc) return "»ë³¦Æâ¤ÎÁ´¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤Æ¹ì²»¤Î¹¶·â¤ò¹Ô¤¦¡£¤µ¤é¤Ë¡¢¶á¤¯¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤ë¡£";
10963 #else
10964                 if (name) return "War Cry";
10965                 if (desc) return "Damages all monsters in sight with sound. Aggravate nearby monsters.";
10966 #endif
10967     
10968                 if (cast)
10969                 {
10970 #ifdef JP
10971                         msg_print("ͺ¶«¤Ó¤ò¤¢¤²¤¿¡ª");
10972 #else
10973                         msg_print("You roar out!");
10974 #endif
10975                         project_hack(GF_SOUND, randint1(plev * 3));
10976                         aggravate_monsters(0);
10977                 }
10978                 break;
10979
10980         case 23:
10981 #ifdef JP
10982                 if (name) return "̵Áл°ÃÊ";
10983                 if (desc) return "¶¯ÎϤÊ3Ãʹ¶·â¤ò·«¤ê½Ð¤¹¡£";
10984 #else
10985                 if (name) return "Musou-Sandan";
10986                 if (desc) return "Attacks with powerful 3 strikes.";
10987 #endif
10988     
10989                 if (cast)
10990                 {
10991                         int i;
10992
10993                         if (!get_rep_dir2(&dir)) return NULL;
10994                         if (dir == 5) return NULL;
10995
10996                         for (i = 0; i < 3; i++)
10997                         {
10998                                 int y, x;
10999                                 int ny, nx;
11000                                 int m_idx;
11001                                 cave_type *c_ptr;
11002                                 monster_type *m_ptr;
11003         
11004                                 y = py + ddy[dir];
11005                                 x = px + ddx[dir];
11006                                 c_ptr = &cave[y][x];
11007         
11008                                 if (c_ptr->m_idx)
11009                                         py_attack(y, x, HISSATSU_3DAN);
11010                                 else
11011                                 {
11012 #ifdef JP
11013                                         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11014 #else
11015                                         msg_print("There is no monster.");
11016 #endif
11017                                         return NULL;
11018                                 }
11019         
11020                                 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
11021                                 {
11022                                         return "";
11023                                 }
11024         
11025                                 /* Monster is dead? */
11026                                 if (!c_ptr->m_idx) break;
11027         
11028                                 ny = y + ddy[dir];
11029                                 nx = x + ddx[dir];
11030                                 m_idx = c_ptr->m_idx;
11031                                 m_ptr = &m_list[m_idx];
11032         
11033                                 /* Monster cannot move back? */
11034                                 if (!monster_can_enter(ny, nx, &r_info[m_ptr->r_idx], 0))
11035                                 {
11036                                         /* -more- */
11037                                         if (i < 2) msg_print(NULL);
11038                                         continue;
11039                                 }
11040         
11041                                 c_ptr->m_idx = 0;
11042                                 cave[ny][nx].m_idx = m_idx;
11043                                 m_ptr->fy = ny;
11044                                 m_ptr->fx = nx;
11045         
11046                                 update_mon(m_idx, TRUE);
11047         
11048                                 /* Redraw the old spot */
11049                                 lite_spot(y, x);
11050         
11051                                 /* Redraw the new spot */
11052                                 lite_spot(ny, nx);
11053         
11054                                 /* Player can move forward? */
11055                                 if (player_can_enter(c_ptr->feat, 0))
11056                                 {
11057                                         /* Move the player */
11058                                         if (!move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP)) break;
11059                                 }
11060         
11061                                 /* -more- */
11062                                 if (i < 2) msg_print(NULL);
11063                         }
11064                 }
11065                 break;
11066
11067         case 24:
11068 #ifdef JP
11069                 if (name) return "µÛ·ìµ´¤Î²ç";
11070                 if (desc) return "¹¶·â¤·¤¿Áê¼ê¤ÎÂÎÎϤòµÛ¤¤¤È¤ê¡¢¼«Ê¬¤ÎÂÎÎϤò²óÉü¤µ¤»¤ë¡£À¸Ì¿¤ò»ý¤¿¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Ë¤ÏÄ̤¸¤Ê¤¤¡£";
11071 #else
11072                 if (name) return "Vampire's Fang";
11073                 if (desc) return "Attacks with vampiric strikes which absorbs HP from a monster and gives them to you. No effect to unliving monsters.";
11074 #endif
11075     
11076                 if (cast)
11077                 {
11078                         int y, x;
11079
11080                         if (!get_rep_dir2(&dir)) return NULL;
11081                         if (dir == 5) return NULL;
11082
11083                         y = py + ddy[dir];
11084                         x = px + ddx[dir];
11085
11086                         if (cave[y][x].m_idx)
11087                                 py_attack(y, x, HISSATSU_DRAIN);
11088                         else
11089                         {
11090 #ifdef JP
11091                                         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11092 #else
11093                                         msg_print("There is no monster.");
11094 #endif
11095                                 return NULL;
11096                         }
11097                 }
11098                 break;
11099
11100         case 25:
11101 #ifdef JP
11102                 if (name) return "¸¸ÏÇ";
11103                 if (desc) return "»ë³¦Æâ¤Îµ¯¤­¤Æ¤¤¤ëÁ´¥â¥ó¥¹¥¿¡¼¤ËÛ¯Û°¡¢º®Íð¡¢Ì²¤ê¤òÍ¿¤¨¤è¤¦¤È¤¹¤ë¡£";
11104 #else
11105                 if (name) return "Moon Dazzling";
11106                 if (desc) return "Attempts to stun, confuse and sleep all waking monsters.";
11107 #endif
11108     
11109                 if (cast)
11110                 {
11111 #ifdef JP
11112                         msg_print("Éð´ï¤òÉÔµ¬Â§¤ËÍɤ餷¤¿¡¥¡¥¡¥");
11113 #else
11114                         msg_print("You irregularly wave your weapon...");
11115 #endif
11116                         project_hack(GF_ENGETSU, plev * 4);
11117                         project_hack(GF_ENGETSU, plev * 4);
11118                         project_hack(GF_ENGETSU, plev * 4);
11119                 }
11120                 break;
11121
11122         case 26:
11123 #ifdef JP
11124                 if (name) return "É´¿Í»Â¤ê";
11125                 if (desc) return "Ϣ³¤·¤ÆÆþ¿È¤Ç¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¡£¹¶·â¤¹¤ë¤¿¤Ó¤ËMP¤ò¾ÃÈñ¡£MP¤¬¤Ê¤¯¤Ê¤ë¤«¡¢¥â¥ó¥¹¥¿¡¼¤òÅݤ»¤Ê¤«¤Ã¤¿¤éÉ´¿Í»Â¤ê¤Ï½ªÎ»¤¹¤ë¡£";
11126 #else
11127                 if (name) return "Hundred Slaughter";
11128                 if (desc) return "Performs a series of rush attacks. The series continues while killing each monster in a time and SP remains.";
11129 #endif
11130     
11131                 if (cast)
11132                 {
11133                         const int mana_cost_per_monster = 8;
11134                         bool new = TRUE;
11135                         bool mdeath;
11136
11137                         do
11138                         {
11139                                 if (!rush_attack(&mdeath)) break;
11140                                 if (new)
11141                                 {
11142                                         /* Reserve needed mana point */
11143                                         p_ptr->csp -= technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
11144                                         new = FALSE;
11145                                 }
11146                                 else
11147                                         p_ptr->csp -= mana_cost_per_monster;
11148
11149                                 if (!mdeath) break;
11150                                 command_dir = 0;
11151
11152                                 p_ptr->redraw |= PR_MANA;
11153                                 handle_stuff();
11154                         }
11155                         while (p_ptr->csp > mana_cost_per_monster);
11156
11157                         if (new) return NULL;
11158         
11159                         /* Restore reserved mana */
11160                         p_ptr->csp += technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
11161                 }
11162                 break;
11163
11164         case 27:
11165 #ifdef JP
11166                 if (name) return "Å·æÆζÁ®";
11167                 if (desc) return "»ë³¦Æâ¤Î¾ì½ê¤ò»ØÄꤷ¤Æ¡¢¤½¤Î¾ì½ê¤È¼«Ê¬¤Î´Ö¤Ë¤¤¤ëÁ´¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤·¡¢¤½¤Î¾ì½ê¤Ë°ÜÆ°¤¹¤ë¡£";
11168 #else
11169                 if (name) return "Dragonic Flash";
11170                 if (desc) return "Runs toward given location while attacking all monsters on the path.";
11171 #endif
11172     
11173                 if (cast)
11174                 {
11175                         int y, x;
11176
11177                         if (!tgt_pt(&x, &y)) return NULL;
11178
11179                         if (!cave_player_teleportable_bold(y, x, 0L) ||
11180                             (distance(y, x, py, px) > MAX_SIGHT / 2) ||
11181                             !projectable(py, px, y, x))
11182                         {
11183 #ifdef JP
11184                                 msg_print("¼ºÇÔ¡ª");
11185 #else
11186                                 msg_print("You cannot move to that place!");
11187 #endif
11188                                 break;
11189                         }
11190                         if (p_ptr->anti_tele)
11191                         {
11192 #ifdef JP
11193                                 msg_print("ÉԻ׵ĤÊÎϤ¬¥Æ¥ì¥Ý¡¼¥È¤òËɤ¤¤À¡ª");
11194 #else
11195                                 msg_print("A mysterious force prevents you from teleporting!");
11196 #endif
11197         
11198                                 break;
11199                         }
11200                         project(0, 0, y, x, HISSATSU_ISSEN, GF_ATTACK, PROJECT_BEAM | PROJECT_KILL, -1);
11201                         teleport_player_to(y, x, 0L);
11202                 }
11203                 break;
11204
11205         case 28:
11206 #ifdef JP
11207                 if (name) return "Æó½Å¤Î·õ·â";
11208                 if (desc) return "1¥¿¡¼¥ó¤Ç2ÅÙ¹¶·â¤ò¹Ô¤¦¡£";
11209 #else
11210                 if (name) return "Twin Slash";
11211                 if (desc) return "double attacks at a time.";
11212 #endif
11213     
11214                 if (cast)
11215                 {
11216                         int x, y;
11217         
11218                         if (!get_rep_dir(&dir, FALSE)) return NULL;
11219
11220                         y = py + ddy[dir];
11221                         x = px + ddx[dir];
11222
11223                         if (cave[y][x].m_idx)
11224                         {
11225                                 py_attack(y, x, 0);
11226                                 if (cave[y][x].m_idx)
11227                                 {
11228                                         handle_stuff();
11229                                         py_attack(y, x, 0);
11230                                 }
11231                         }
11232                         else
11233                         {
11234 #ifdef JP
11235         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11236 #else
11237                                 msg_print("You don't see any monster in this direction");
11238 #endif
11239                                 return NULL;
11240                         }
11241                 }
11242                 break;
11243
11244         case 29:
11245 #ifdef JP
11246                 if (name) return "¸×ÉúÀäÅáÀª";
11247                 if (desc) return "¶¯ÎϤʹ¶·â¤ò¹Ô¤¤¡¢¶á¤¯¤Î¾ì½ê¤Ë¤â¸ú²Ì¤¬µÚ¤Ö¡£";
11248 #else
11249                 if (name) return "Kofuku-Zettousei";
11250                 if (desc) return "Performs a powerful attack which even effect nearby monsters.";
11251 #endif
11252     
11253                 if (cast)
11254                 {
11255                         int total_damage = 0, basedam, i;
11256                         int y, x;
11257                         u32b flgs[TR_FLAG_SIZE];
11258                         object_type *o_ptr;
11259         
11260                         if (!get_rep_dir2(&dir)) return NULL;
11261                         if (dir == 5) return NULL;
11262
11263                         y = py + ddy[dir];
11264                         x = px + ddx[dir];
11265
11266                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
11267                         {
11268 #ifdef JP
11269                                 msg_print("¤Ê¤¼¤«¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£");
11270 #else
11271                                 msg_print("Something prevent you from attacking.");
11272 #endif
11273                                 return "";
11274                         }
11275 #ifdef JP
11276                         msg_print("Éð´ï¤òÂ礭¤¯¿¶¤ê²¼¤í¤·¤¿¡£");
11277 #else
11278                         msg_print("You swing your weapon downward.");
11279 #endif
11280                         for (i = 0; i < 2; i++)
11281                         {
11282                                 int damage;
11283                                 if (!buki_motteruka(INVEN_RARM+i)) break;
11284                                 o_ptr = &inventory[INVEN_RARM+i];
11285                                 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
11286                                 damage = o_ptr->to_d * 100;
11287                                 object_flags(o_ptr, flgs);
11288                                 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
11289                                 {
11290                                         /* vorpal blade */
11291                                         basedam *= 5;
11292                                         basedam /= 3;
11293                                 }
11294                                 else if (have_flag(flgs, TR_VORPAL))
11295                                 {
11296                                         /* vorpal flag only */
11297                                         basedam *= 11;
11298                                         basedam /= 9;
11299                                 }
11300                                 damage += basedam;
11301                                 damage += p_ptr->to_d[i] * 100;
11302                                 damage *= p_ptr->num_blow[i];
11303                                 total_damage += (damage / 100);
11304                         }
11305                         project(0, (cave_have_flag_bold(y, x, FF_PROJECT) ? 5 : 0), y, x, total_damage * 3 / 2, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
11306                 }
11307                 break;
11308
11309         case 30:
11310 #ifdef JP
11311                 if (name) return "·Ä±Àµ´Ç¦·õ";
11312                 if (desc) return "¼«Ê¬¤â¥À¥á¡¼¥¸¤ò¤¯¤é¤¦¤¬¡¢Áê¼ê¤ËÈó¾ï¤ËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£¥¢¥ó¥Ç¥Ã¥É¤Ë¤ÏÆä˸ú²Ì¤¬¤¢¤ë¡£";
11313 #else
11314                 if (name) return "Keiun-Kininken";
11315                 if (desc) return "Attacks a monster with extremely powerful damage. But you also takes some damages. Hurts a undead monster greatly.";
11316 #endif
11317     
11318                 if (cast)
11319                 {
11320                         int y, x;
11321
11322                         if (!get_rep_dir2(&dir)) return NULL;
11323                         if (dir == 5) return NULL;
11324
11325                         y = py + ddy[dir];
11326                         x = px + ddx[dir];
11327
11328                         if (cave[y][x].m_idx)
11329                                 py_attack(y, x, HISSATSU_UNDEAD);
11330                         else
11331                         {
11332 #ifdef JP
11333                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11334 #else
11335                                 msg_print("There is no monster.");
11336 #endif
11337                                 return NULL;
11338                         }
11339 #ifdef JP
11340                         take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), "·Ä±Àµ´Ç¦·õ¤ò»È¤Ã¤¿¾×·â", -1);
11341 #else
11342                         take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), "exhaustion on using Keiun-Kininken", -1);
11343 #endif
11344                 }
11345                 break;
11346
11347         case 31:
11348 #ifdef JP
11349                 if (name) return "ÀÚÊ¢";
11350                 if (desc) return "¡ÖÉð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£¡×";
11351 #else
11352                 if (name) return "Harakiri";
11353                 if (desc) return "'Busido is found in death'";
11354 #endif
11355
11356                 if (cast)
11357                 {
11358                         int i;
11359 #ifdef JP
11360         if (!get_check("ËÜÅö¤Ë¼«»¦¤·¤Þ¤¹¤«¡©")) return NULL;
11361 #else
11362                         if (!get_check("Do you really want to commit suicide? ")) return NULL;
11363 #endif
11364                                 /* Special Verification for suicide */
11365 #ifdef JP
11366         prt("³Îǧ¤Î¤¿¤á '@' ¤ò²¡¤·¤Æ²¼¤µ¤¤¡£", 0, 0);
11367 #else
11368                         prt("Please verify SUICIDE by typing the '@' sign: ", 0, 0);
11369 #endif
11370         
11371                         flush();
11372                         i = inkey();
11373                         prt("", 0, 0);
11374                         if (i != '@') return NULL;
11375                         if (p_ptr->total_winner)
11376                         {
11377                                 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
11378                                 p_ptr->total_winner = TRUE;
11379                         }
11380                         else
11381                         {
11382 #ifdef JP
11383                                 msg_print("Éð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£");
11384 #else
11385                                 msg_print("Meaning of Bushi-do is found in the death.");
11386 #endif
11387                                 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
11388                         }
11389                 }
11390                 break;
11391         }
11392
11393         return "";
11394 }
11395
11396
11397 /*
11398  * Do everything for each spell
11399  */
11400 cptr do_spell(int realm, int spell, int mode)
11401 {
11402         switch (realm)
11403         {
11404         case REALM_LIFE:     return do_life_spell(spell, mode);
11405         case REALM_SORCERY:  return do_sorcery_spell(spell, mode);
11406         case REALM_NATURE:   return do_nature_spell(spell, mode);
11407         case REALM_CHAOS:    return do_chaos_spell(spell, mode);
11408         case REALM_DEATH:    return do_death_spell(spell, mode);
11409         case REALM_TRUMP:    return do_trump_spell(spell, mode);
11410         case REALM_ARCANE:   return do_arcane_spell(spell, mode);
11411         case REALM_CRAFT:    return do_craft_spell(spell, mode);
11412         case REALM_DAEMON:   return do_daemon_spell(spell, mode);
11413         case REALM_CRUSADE:  return do_crusade_spell(spell, mode);
11414         case REALM_MUSIC:    return do_music_spell(spell, mode);
11415         case REALM_HISSATSU: return do_hissatsu_spell(spell, mode);
11416         }
11417
11418         return NULL;
11419 }