OSDN Git Service

・゙・ッ・﨓セハムケケ。」ENCHANT「ェCRAFT
[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, TRUE);
511                 break;
512         case 4:
513         case 5:
514         case 6:
515                 teleport_player(100, TRUE);
516                 break;
517         case 7:
518         case 8:
519                 teleport_player(200, TRUE);
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, TRUE);
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, TRUE);
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, TRUE);
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, FALSE);
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, FALSE);
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 "Satisfies hunger.";
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, FALSE);
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, FALSE);
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, FALSE);
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, FALSE);
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, FALSE);
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 "Remove Enchantment";
6685                 if (desc) return "Removes all magics completely from any weapon or armor.";
6686 #endif
6687     
6688                 {
6689                         if (cast)
6690                         {
6691                                 if (!mundane_spell(TRUE)) return NULL;
6692                         }
6693                 }
6694                 break;
6695
6696         case 1:
6697 #ifdef JP
6698                 if (name) return "ÀÖ³°Àþ»ëÎÏ";
6699                 if (desc) return "°ìÄê»þ´Ö¡¢ÀÖ³°Àþ»ëÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
6700 #else
6701                 if (name) return "Infravision";
6702                 if (desc) return "Gives infravision for a while.";
6703 #endif
6704     
6705                 {
6706                         int base = 100;
6707
6708                         if (info) return info_duration(base, base);
6709
6710                         if (cast)
6711                         {
6712                                 set_tim_infra(base + randint1(base), FALSE);
6713                         }
6714                 }
6715                 break;
6716
6717         case 2:
6718 #ifdef JP
6719                 if (name) return "²óÉüÎ϶¯²½";
6720                 if (desc) return "°ìÄê»þ´Ö¡¢²óÉüÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
6721 #else
6722                 if (name) return "Regeneration";
6723                 if (desc) return "Gives regeneration ability for a while.";
6724 #endif
6725     
6726                 {
6727                         int base = 80;
6728
6729                         if (info) return info_duration(base, base);
6730
6731                         if (cast)
6732                         {
6733                                 set_tim_regen(base + randint1(base), FALSE);
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 "Satisfy Hunger";
6744                 if (desc) return "Satisfies hunger.";
6745 #endif
6746     
6747                 {
6748                         if (cast)
6749                         {
6750                                 set_food(PY_FOOD_MAX - 1);
6751                         }
6752                 }
6753                 break;
6754
6755         case 4:
6756 #ifdef JP
6757                 if (name) return "ÂÑÎ䵤";
6758                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6759 #else
6760                 if (name) return "Resist Cold";
6761                 if (desc) return "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.";
6762 #endif
6763     
6764                 {
6765                         int base = 20;
6766
6767                         if (info) return info_duration(base, base);
6768
6769                         if (cast)
6770                         {
6771                                 set_oppose_cold(randint1(base) + base, FALSE);
6772                         }
6773                 }
6774                 break;
6775
6776         case 5:
6777 #ifdef JP
6778                 if (name) return "ÂѲбê";
6779                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6780 #else
6781                 if (name) return "Resist Fire";
6782                 if (desc) return "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.";
6783 #endif
6784     
6785                 {
6786                         int base = 20;
6787
6788                         if (info) return info_duration(base, base);
6789
6790                         if (cast)
6791                         {
6792                                 set_oppose_fire(randint1(base) + base, FALSE);
6793                         }
6794                 }
6795                 break;
6796
6797         case 6:
6798 #ifdef JP
6799                 if (name) return "»Îµ¤¹âÍÈ";
6800                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
6801 #else
6802                 if (name) return "Heroism";
6803                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
6804 #endif
6805     
6806                 {
6807                         int base = 25;
6808
6809                         if (info) return info_duration(base, base);
6810
6811                         if (cast)
6812                         {
6813                                 set_hero(randint1(base) + base, FALSE);
6814                                 hp_player(10);
6815                                 set_afraid(0);
6816                         }
6817                 }
6818                 break;
6819
6820         case 7:
6821 #ifdef JP
6822                 if (name) return "ÂÑÅÅ·â";
6823                 if (desc) return "°ìÄê»þ´Ö¡¢ÅÅ·â¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6824 #else
6825                 if (name) return "Resist Lightning";
6826                 if (desc) return "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.";
6827 #endif
6828     
6829                 {
6830                         int base = 20;
6831
6832                         if (info) return info_duration(base, base);
6833
6834                         if (cast)
6835                         {
6836                                 set_oppose_elec(randint1(base) + base, FALSE);
6837                         }
6838                 }
6839                 break;
6840
6841         case 8:
6842 #ifdef JP
6843                 if (name) return "ÂÑ»À";
6844                 if (desc) return "°ìÄê»þ´Ö¡¢»À¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6845 #else
6846                 if (name) return "Resist Acid";
6847                 if (desc) return "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.";
6848 #endif
6849     
6850                 {
6851                         int base = 20;
6852
6853                         if (info) return info_duration(base, base);
6854
6855                         if (cast)
6856                         {
6857                                 set_oppose_acid(randint1(base) + base, FALSE);
6858                         }
6859                 }
6860                 break;
6861
6862         case 9:
6863 #ifdef JP
6864                 if (name) return "Æ©ÌÀ»ëǧ";
6865                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
6866 #else
6867                 if (name) return "See Invisibility";
6868                 if (desc) return "Gives see invisible for a while.";
6869 #endif
6870     
6871                 {
6872                         int base = 24;
6873
6874                         if (info) return info_duration(base, base);
6875
6876                         if (cast)
6877                         {
6878                                 set_tim_invis(randint1(base) + base, FALSE);
6879                         }
6880                 }
6881                 break;
6882
6883         case 10:
6884 #ifdef JP
6885                 if (name) return "²ò¼ö";
6886                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
6887 #else
6888                 if (name) return "Remove Curse";
6889                 if (desc) return "Removes normal curses from equipped items.";
6890 #endif
6891     
6892                 {
6893                         if (cast)
6894                         {
6895                                 if (remove_curse())
6896                                 {
6897 #ifdef JP
6898                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
6899 #else
6900                                         msg_print("You feel as if someone is watching over you.");
6901 #endif
6902                                 }
6903                         }
6904                 }
6905                 break;
6906
6907         case 11:
6908 #ifdef JP
6909                 if (name) return "ÂÑÆÇ";
6910                 if (desc) return "°ìÄê»þ´Ö¡¢ÆǤؤÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6911 #else
6912                 if (name) return "Resist Poison";
6913                 if (desc) return "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.";
6914 #endif
6915     
6916                 {
6917                         int base = 20;
6918
6919                         if (info) return info_duration(base, base);
6920
6921                         if (cast)
6922                         {
6923                                 set_oppose_pois(randint1(base) + base, FALSE);
6924                         }
6925                 }
6926                 break;
6927
6928         case 12:
6929 #ifdef JP
6930                 if (name) return "¶¸Àï»Î²½";
6931                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤¹¤ë¡£";
6932 #else
6933                 if (name) return "Berserk";
6934                 if (desc) return "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.";
6935 #endif
6936     
6937                 {
6938                         int base = 25;
6939
6940                         if (info) return info_duration(base, base);
6941
6942                         if (cast)
6943                         {
6944                                 set_shero(randint1(base) + base, FALSE);
6945                                 hp_player(30);
6946                                 set_afraid(0);
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 "Self Knowledge";
6957                 if (desc) return "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.";
6958 #endif
6959     
6960                 {
6961                         if (cast)
6962                         {
6963                                 self_knowledge();
6964                         }
6965                 }
6966                 break;
6967
6968         case 14:
6969 #ifdef JP
6970                 if (name) return "Âмٰ­·ë³¦";
6971                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Î¹¶·â¤òËɤ°¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
6972 #else
6973                 if (name) return "Protection from Evil";
6974                 if (desc) return "Gives aura which protect you from evil monster's physical attack.";
6975 #endif
6976     
6977                 {
6978                         int base = 3 * plev;
6979                         int sides = 25;
6980
6981                         if (info) return info_duration(base, sides);
6982
6983                         if (cast)
6984                         {
6985                                 set_protevil(randint1(sides) + base, FALSE);
6986                         }
6987                 }
6988                 break;
6989
6990         case 15:
6991 #ifdef JP
6992                 if (name) return "Ìþ¤·";
6993                 if (desc) return "ÆÇ¡¢Û¯Û°¾õÂÖ¡¢Éé½ý¤òÁ´²÷¤µ¤»¡¢¸¸³Ð¤òľ¤¹¡£";
6994 #else
6995                 if (name) return "Cure";
6996                 if (desc) return "Heals poison, stun, cut and hallucination completely.";
6997 #endif
6998     
6999                 {
7000                         if (cast)
7001                         {
7002                                 set_poisoned(0);
7003                                 set_stun(0);
7004                                 set_cut(0);
7005                                 set_image(0);
7006                         }
7007                 }
7008                 break;
7009
7010         case 16:
7011 #ifdef JP
7012                 if (name) return "ËâË¡·õ";
7013                 if (desc) return "°ìÄê»þ´Ö¡¢Éð´ï¤ËÎ䵤¡¢±ê¡¢ÅÅ·â¡¢»À¡¢ÆǤΤ¤¤º¤ì¤«¤Î°À­¤ò¤Ä¤±¤ë¡£Éð´ï¤ò»ý¤¿¤Ê¤¤¤È»È¤¨¤Ê¤¤¡£";
7014 #else
7015                 if (name) return "Mana Branding";
7016                 if (desc) return "Makes current weapon some elemental branded. You must wield weapons.";
7017 #endif
7018     
7019                 {
7020                         int base = plev / 2;
7021
7022                         if (info) return info_duration(base, base);
7023
7024                         if (cast)
7025                         {
7026                                 if (!choose_ele_attack()) return NULL;
7027                         }
7028                 }
7029                 break;
7030
7031         case 17:
7032 #ifdef JP
7033                 if (name) return "¥Æ¥ì¥Ñ¥·¡¼";
7034                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
7035 #else
7036                 if (name) return "Telepathy";
7037                 if (desc) return "Gives telepathy for a while.";
7038 #endif
7039     
7040                 {
7041                         int base = 25;
7042                         int sides = 30;
7043
7044                         if (info) return info_duration(base, sides);
7045
7046                         if (cast)
7047                         {
7048                                 set_tim_esp(randint1(sides) + base, FALSE);
7049                         }
7050                 }
7051                 break;
7052
7053         case 18:
7054 #ifdef JP
7055                 if (name) return "È©Àв½";
7056                 if (desc) return "°ìÄê»þ´Ö¡¢AC¤ò¾å¾º¤µ¤»¤ë¡£";
7057 #else
7058                 if (name) return "Stone Skin";
7059                 if (desc) return "Gives bonus to AC for a while.";
7060 #endif
7061     
7062                 {
7063                         int base = 30;
7064                         int sides = 20;
7065
7066                         if (info) return info_duration(base, sides);
7067
7068                         if (cast)
7069                         {
7070                                 set_shield(randint1(sides) + base, FALSE);
7071                         }
7072                 }
7073                 break;
7074
7075         case 19:
7076 #ifdef JP
7077                 if (name) return "Á´ÂÑÀ­";
7078                 if (desc) return "°ìÄê»þ´Ö¡¢»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7079 #else
7080                 if (name) return "Resistance";
7081                 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.";
7082 #endif
7083     
7084                 {
7085                         int base = 20;
7086
7087                         if (info) return info_duration(base, base);
7088
7089                         if (cast)
7090                         {
7091                                 set_oppose_acid(randint1(base) + base, FALSE);
7092                                 set_oppose_elec(randint1(base) + base, FALSE);
7093                                 set_oppose_fire(randint1(base) + base, FALSE);
7094                                 set_oppose_cold(randint1(base) + base, FALSE);
7095                                 set_oppose_pois(randint1(base) + base, FALSE);
7096                         }
7097                 }
7098                 break;
7099
7100         case 20:
7101 #ifdef JP
7102                 if (name) return "¥¹¥Ô¡¼¥É";
7103                 if (desc) return "°ìÄê»þ´Ö¡¢²Ã®¤¹¤ë¡£";
7104 #else
7105                 if (name) return "Haste Self";
7106                 if (desc) return "Hastes you for a while.";
7107 #endif
7108     
7109                 {
7110                         int base = plev;
7111                         int sides = 20 + plev;
7112
7113                         if (info) return info_duration(base, sides);
7114
7115                         if (cast)
7116                         {
7117                                 set_fast(randint1(sides) + base, FALSE);
7118                         }
7119                 }
7120                 break;
7121
7122         case 21:
7123 #ifdef JP
7124                 if (name) return "ÊÉÈ´¤±";
7125                 if (desc) return "°ìÄê»þ´Ö¡¢È¾Êª¼Á²½¤·ÊɤòÄ̤êÈ´¤±¤é¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
7126 #else
7127                 if (name) return "Walk through Wall";
7128                 if (desc) return "Gives ability to pass walls for a while.";
7129 #endif
7130     
7131                 {
7132                         int base = plev / 2;
7133
7134                         if (info) return info_duration(base, base);
7135
7136                         if (cast)
7137                         {
7138                                 set_kabenuke(randint1(base) + base, FALSE);
7139                         }
7140                 }
7141                 break;
7142
7143         case 22:
7144 #ifdef JP
7145                 if (name) return "½âË᤭";
7146                 if (desc) return "½â¤ËÈ¿¼Í¤Î°À­¤ò¤Ä¤±¤ë¡£";
7147 #else
7148                 if (name) return "Polish Shield";
7149                 if (desc) return "Makes a shield a shield of reflection.";
7150 #endif
7151     
7152                 {
7153                         if (cast)
7154                         {
7155                                 pulish_shield();
7156                         }
7157                 }
7158                 break;
7159
7160         case 23:
7161 #ifdef JP
7162                 if (name) return "¥´¡¼¥ì¥àÀ½Â¤";
7163                 if (desc) return "1ÂΤΥ´¡¼¥ì¥à¤òÀ½Â¤¤¹¤ë¡£";
7164 #else
7165                 if (name) return "Create Golem";
7166                 if (desc) return "Creates a golem.";
7167 #endif
7168     
7169                 {
7170                         if (cast)
7171                         {
7172                                 if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, PM_FORCE_PET))
7173                                 {
7174 #ifdef JP
7175                                         msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
7176 #else
7177                                         msg_print("You make a golem.");
7178 #endif
7179                                 }
7180                                 else
7181                                 {
7182 #ifdef JP
7183                                         msg_print("¤¦¤Þ¤¯¥´¡¼¥ì¥à¤òºî¤ì¤Ê¤«¤Ã¤¿¡£");
7184 #else
7185                                         msg_print("No Golems arrive.");
7186 #endif
7187                                 }
7188                         }
7189                 }
7190                 break;
7191
7192         case 24:
7193 #ifdef JP
7194                 if (name) return "ËâË¡¤Î³»";
7195                 if (desc) return "°ìÄê»þ´Ö¡¢ËâË¡ËɸæÎϤÈAC¤¬¾å¤¬¤ê¡¢º®Íð¤ÈÌÕÌܤÎÂÑÀ­¡¢È¿¼ÍǽÎÏ¡¢ËãáãÃΤ餺¡¢ÉâÍ·¤òÆÀ¤ë¡£";
7196 #else
7197                 if (name) return "Magical armor";
7198                 if (desc) return "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.";
7199 #endif
7200     
7201                 {
7202                         int base = 20;
7203
7204                         if (info) return info_duration(base, base);
7205
7206                         if (cast)
7207                         {
7208                                 set_magicdef(randint1(base) + base, FALSE);
7209                         }
7210                 }
7211                 break;
7212         case 25:
7213 #ifdef JP
7214                 if (name) return "¼ö¤¤Ê´ºÕ";
7215                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
7216 #else
7217                 if (name) return "Remove All Curse";
7218                 if (desc) return "Removes normal and heavy curse from equipped items.";
7219 #endif
7220     
7221                 {
7222                         if (cast)
7223                         {
7224                                 if (remove_all_curse())
7225                                 {
7226 #ifdef JP
7227                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
7228 #else
7229                                         msg_print("You feel as if someone is watching over you.");
7230 #endif
7231                                 }
7232                         }
7233                 }
7234                 break;
7235
7236         case 26:
7237 #ifdef JP
7238                 if (name) return "´°Á´¤Ê¤ëÃμ±";
7239                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
7240 #else
7241                 if (name) return "Knowledge True";
7242                 if (desc) return "*Identifies* an item.";
7243 #endif
7244     
7245                 {
7246                         if (cast)
7247                         {
7248                                 if (!identify_fully(FALSE)) return NULL;
7249                         }
7250                 }
7251                 break;
7252
7253         case 27:
7254 #ifdef JP
7255                 if (name) return "Éð´ï¶¯²½";
7256                 if (desc) return "Éð´ï¤ÎÌ¿ÃæΨ½¤Àµ¤È¥À¥á¡¼¥¸½¤Àµ¤ò¶¯²½¤¹¤ë¡£";
7257 #else
7258                 if (name) return "Enchant Weapon";
7259                 if (desc) return "Attempts to increase +to-hit, +to-dam of a weapon.";
7260 #endif
7261     
7262                 {
7263                         if (cast)
7264                         {
7265                                 if (!enchant_spell(randint0(4) + 1, randint0(4) + 1, 0)) return NULL;
7266                         }
7267                 }
7268                 break;
7269
7270         case 28:
7271 #ifdef JP
7272                 if (name) return "Ëɶñ¶¯²½";
7273                 if (desc) return "³»¤ÎËɸ潤Àµ¤ò¶¯²½¤¹¤ë¡£";
7274 #else
7275                 if (name) return "Enchant Armor";
7276                 if (desc) return "Attempts to increase +AC of an armor.";
7277 #endif
7278     
7279                 {
7280                         if (cast)
7281                         {
7282                                 if (!enchant_spell(0, 0, randint0(3) + 2)) return NULL;
7283                         }
7284                 }
7285                 break;
7286
7287         case 29:
7288 #ifdef JP
7289                 if (name) return "Éð´ï°À­ÉÕÍ¿";
7290                 if (desc) return "Éð´ï¤Ë¥é¥ó¥À¥à¤Ë°À­¤ò¤Ä¤±¤ë¡£";
7291 #else
7292                 if (name) return "Brand Weapon";
7293                 if (desc) return "Makes current weapon a random ego weapon.";
7294 #endif
7295     
7296                 {
7297                         if (cast)
7298                         {
7299                                 brand_weapon(randint0(18));
7300                         }
7301                 }
7302                 break;
7303
7304         case 30:
7305 #ifdef JP
7306                 if (name) return "¿Í´Ö¥È¥é¥ó¥×";
7307                 if (desc) return "¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤«¡¢¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤¬¿È¤Ë¤Ä¤¯¡£";
7308 #else
7309                 if (name) return "Living Trump";
7310                 if (desc) return "Gives mutation which makes you teleport randomly or makes you able to teleport at will.";
7311 #endif
7312     
7313                 {
7314                         if (cast)
7315                         {
7316                                 int mutation;
7317
7318                                 if (one_in_(7))
7319                                         /* Teleport control */
7320                                         mutation = 12;
7321                                 else
7322                                         /* Random teleportation (uncontrolled) */
7323                                         mutation = 77;
7324
7325                                 /* Gain the mutation */
7326                                 if (gain_random_mutation(mutation))
7327                                 {
7328 #ifdef JP
7329                                         msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤­¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
7330 #else
7331                                         msg_print("You have turned into a Living Trump.");
7332 #endif
7333                                 }
7334                         }
7335                 }
7336                 break;
7337
7338         case 31:
7339 #ifdef JP
7340                 if (name) return "°À­¤Ø¤ÎÌȱÖ";
7341                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¡¢±ê¡¢ÅÅ·â¡¢»À¤Î¤¤¤º¤ì¤«¤ËÂФ¹¤ëÌȱ֤òÆÀ¤ë¡£";
7342 #else
7343                 if (name) return "Immunity";
7344                 if (desc) return "Gives an immunity to fire, cold, electricity or acid for a while.";
7345 #endif
7346     
7347                 {
7348                         int base = 13;
7349
7350                         if (info) return info_duration(base, base);
7351
7352                         if (cast)
7353                         {
7354                                 if (!choose_ele_immune(base + randint1(base))) return NULL;
7355                         }
7356                 }
7357                 break;
7358         }
7359
7360         return "";
7361 }
7362
7363
7364 static cptr do_daemon_spell(int spell, int mode)
7365 {
7366         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
7367         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
7368         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
7369         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
7370
7371 #ifdef JP
7372         static const char s_dam[] = "»½ý:";
7373 #else
7374         static const char s_dam[] = "dam ";
7375 #endif
7376
7377         int dir;
7378         int plev = p_ptr->lev;
7379
7380         switch (spell)
7381         {
7382         case 0:
7383 #ifdef JP
7384                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë";
7385                 if (desc) return "¼å¤¤ËâË¡¤ÎÌð¤òÊü¤Ä¡£";
7386 #else
7387                 if (name) return "Magic Missile";
7388                 if (desc) return "Fires a weak bolt of magic.";
7389 #endif
7390     
7391                 {
7392                         int dice = 3 + (plev - 1) / 5;
7393                         int sides = 4;
7394
7395                         if (info) return info_damage(dice, sides, 0);
7396
7397                         if (cast)
7398                         {
7399                                 if (!get_aim_dir(&dir)) return NULL;
7400
7401                                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
7402                         }
7403                 }
7404                 break;
7405
7406         case 1:
7407 #ifdef JP
7408                 if (name) return "̵À¸Ì¿´¶ÃÎ";
7409                 if (desc) return "¶á¤¯¤ÎÀ¸Ì¿¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
7410 #else
7411                 if (name) return "Detect Unlife";
7412                 if (desc) return "Detects all nonliving monsters in your vicinity.";
7413 #endif
7414     
7415                 {
7416                         int rad = DETECT_RAD_DEFAULT;
7417
7418                         if (info) return info_radius(rad);
7419
7420                         if (cast)
7421                         {
7422                                 detect_monsters_nonliving(rad);
7423                         }
7424                 }
7425                 break;
7426
7427         case 2:
7428 #ifdef JP
7429                 if (name) return "¼Ù¤Ê¤ë½ËÊ¡";
7430                 if (desc) return "°ìÄê»þ´Ö¡¢Ì¿ÃæΨ¤ÈAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
7431 #else
7432                 if (name) return "Evil Bless";
7433                 if (desc) return "Gives bonus to hit and AC for a few turns.";
7434 #endif
7435     
7436                 {
7437                         int base = 12;
7438
7439                         if (info) return info_duration(base, base);
7440
7441                         if (cast)
7442                         {
7443                                 set_blessed(randint1(base) + base, FALSE);
7444                         }
7445                 }
7446                 break;
7447
7448         case 3:
7449 #ifdef JP
7450                 if (name) return "ÂѲбê";
7451                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7452 #else
7453                 if (name) return "Resist Fire";
7454                 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.";
7455 #endif
7456     
7457                 {
7458                         int base = 20;
7459
7460                         if (info) return info_duration(base, base);
7461
7462                         if (cast)
7463                         {
7464                                 set_oppose_fire(randint1(base) + base, FALSE);
7465                         }
7466                 }
7467                 break;
7468
7469         case 4:
7470 #ifdef JP
7471                 if (name) return "¶²¹²";
7472                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¡¢Û¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
7473 #else
7474                 if (name) return "Horrify";
7475                 if (desc) return "Attempts to scare and stun a monster.";
7476 #endif
7477     
7478                 {
7479                         int power = plev;
7480
7481                         if (info) return info_power(power);
7482
7483                         if (cast)
7484                         {
7485                                 if (!get_aim_dir(&dir)) return NULL;
7486
7487                                 fear_monster(dir, power);
7488                                 stun_monster(dir, power);
7489                         }
7490                 }
7491                 break;
7492
7493         case 5:
7494 #ifdef JP
7495                 if (name) return "ÃϹö¤ÎÌð";
7496                 if (desc) return "ÃϹö¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
7497 #else
7498                 if (name) return "Nether Bolt";
7499                 if (desc) return "Fires a bolt or beam of nether.";
7500 #endif
7501     
7502                 {
7503                         int dice = 6 + (plev - 5) / 4;
7504                         int sides = 8;
7505
7506                         if (info) return info_damage(dice, sides, 0);
7507
7508                         if (cast)
7509                         {
7510                                 if (!get_aim_dir(&dir)) return NULL;
7511
7512                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
7513                         }
7514                 }
7515                 break;
7516
7517         case 6:
7518 #ifdef JP
7519                 if (name) return "¸ÅÂå¤Î»àÎ´­";
7520                 if (desc) return "¸ÅÂå¤Î»àÎî¤ò¾¤´­¤¹¤ë¡£";
7521 #else
7522                 if (name) return "Summon Manes";
7523                 if (desc) return "Summons a manes.";
7524 #endif
7525     
7526                 {
7527                         if (cast)
7528                         {
7529                                 if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))
7530                                 {
7531 #ifdef JP
7532                                         msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
7533 #else
7534                                         msg_print("No Manes arrive.");
7535 #endif
7536                                 }
7537                         }
7538                 }
7539                 break;
7540
7541         case 7:
7542 #ifdef JP
7543                 if (name) return "ÃϹö¤Î±ë";
7544                 if (desc) return "¼Ù°­¤ÊÎϤò»ý¤Ä¥Ü¡¼¥ë¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
7545 #else
7546                 if (name) return "Hellish Flame";
7547                 if (desc) return "Fires a ball of evil power. Hurts good monsters greatly.";
7548 #endif
7549     
7550                 {
7551                         int dice = 3;
7552                         int sides = 6;
7553                         int rad = (plev < 30) ? 2 : 3;
7554                         int base;
7555
7556                         if (p_ptr->pclass == CLASS_MAGE ||
7557                             p_ptr->pclass == CLASS_HIGH_MAGE ||
7558                             p_ptr->pclass == CLASS_SORCERER)
7559                                 base = plev + plev / 2;
7560                         else
7561                                 base = plev + plev / 4;
7562
7563
7564                         if (info) return info_damage(dice, sides, base);
7565
7566                         if (cast)
7567                         {
7568                                 if (!get_aim_dir(&dir)) return NULL;
7569
7570                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides) + base, rad);
7571                         }
7572                 }
7573                 break;
7574
7575         case 8:
7576 #ifdef JP
7577                 if (name) return "¥Ç¡¼¥â¥ó»ÙÇÛ";
7578                 if (desc) return "°­Ëâ1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú";
7579 #else
7580                 if (name) return "Dominate Demon";
7581                 if (desc) return "Attempts to charm a demon.";
7582 #endif
7583     
7584                 {
7585                         int power = plev;
7586
7587                         if (info) return info_power(power);
7588
7589                         if (cast)
7590                         {
7591                                 if (!get_aim_dir(&dir)) return NULL;
7592
7593                                 control_one_demon(dir, power);
7594                         }
7595                 }
7596                 break;
7597
7598         case 9:
7599 #ifdef JP
7600                 if (name) return "¥Ó¥¸¥ç¥ó";
7601                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
7602 #else
7603                 if (name) return "Vision";
7604                 if (desc) return "Maps nearby area.";
7605 #endif
7606     
7607                 {
7608                         int rad = DETECT_RAD_MAP;
7609
7610                         if (info) return info_radius(rad);
7611
7612                         if (cast)
7613                         {
7614                                 map_area(rad);
7615                         }
7616                 }
7617                 break;
7618
7619         case 10:
7620 #ifdef JP
7621                 if (name) return "ÂÑÃϹö";
7622                 if (desc) return "°ìÄê»þ´Ö¡¢ÃϹö¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£";
7623 #else
7624                 if (name) return "Resist Nether";
7625                 if (desc) return "Gives resistance to nether for a while.";
7626 #endif
7627     
7628                 {
7629                         int base = 20;
7630
7631                         if (info) return info_duration(base, base);
7632
7633                         if (cast)
7634                         {
7635                                 set_tim_res_nether(randint1(base) + base, FALSE);
7636                         }
7637                 }
7638                 break;
7639
7640         case 11:
7641 #ifdef JP
7642                 if (name) return "¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È";
7643                 if (desc) return "¥×¥é¥º¥Þ¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
7644 #else
7645                 if (name) return "Plasma bolt";
7646                 if (desc) return "Fires a bolt or beam of plasma.";
7647 #endif
7648     
7649                 {
7650                         int dice = 11 + (plev - 5) / 4;
7651                         int sides = 8;
7652
7653                         if (info) return info_damage(dice, sides, 0);
7654
7655                         if (cast)
7656                         {
7657                                 if (!get_aim_dir(&dir)) return NULL;
7658
7659                                 fire_bolt_or_beam(beam_chance(), GF_PLASMA, dir, damroll(dice, sides));
7660                         }
7661                 }
7662                 break;
7663
7664         case 12:
7665 #ifdef JP
7666                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";
7667                 if (desc) return "±ê¤Îµå¤òÊü¤Ä¡£";
7668 #else
7669                 if (name) return "Fire Ball";
7670                 if (desc) return "Fires a ball of fire.";
7671 #endif
7672     
7673                 {
7674                         int dam = plev + 55;
7675                         int rad = 2;
7676
7677                         if (info) return info_damage(0, 0, dam);
7678
7679                         if (cast)
7680                         {
7681                                 if (!get_aim_dir(&dir)) return NULL;
7682
7683                                 fire_ball(GF_FIRE, dir, dam, rad);
7684                         }
7685                 }
7686                 break;
7687
7688         case 13:
7689 #ifdef JP
7690                 if (name) return "±ê¤Î¿Ï";
7691                 if (desc) return "Éð´ï¤Ë±ê¤Î°À­¤ò¤Ä¤±¤ë¡£";
7692 #else
7693                 if (name) return "Fire Branding";
7694                 if (desc) return "Makes current weapon fire branded.";
7695 #endif
7696     
7697                 {
7698                         if (cast)
7699                         {
7700                                 brand_weapon(1);
7701                         }
7702                 }
7703                 break;
7704
7705         case 14:
7706 #ifdef JP
7707                 if (name) return "ÃϹöµå";
7708                 if (desc) return "Â礭¤ÊÃϹö¤Îµå¤òÊü¤Ä¡£";
7709 #else
7710                 if (name) return "Nether Ball";
7711                 if (desc) return "Fires a huge ball of nether.";
7712 #endif
7713     
7714                 {
7715                         int dam = plev * 3 / 2 + 100;
7716                         int rad = plev / 20 + 2;
7717
7718                         if (info) return info_damage(0, 0, dam);
7719
7720                         if (cast)
7721                         {
7722                                 if (!get_aim_dir(&dir)) return NULL;
7723
7724                                 fire_ball(GF_NETHER, dir, dam, rad);
7725                         }
7726                 }
7727                 break;
7728
7729         case 15:
7730 #ifdef JP
7731                 if (name) return "¥Ç¡¼¥â¥ó¾¤´­";
7732                 if (desc) return "°­Ëâ1ÂΤò¾¤´­¤¹¤ë¡£";
7733 #else
7734                 if (name) return "Summon Demon";
7735                 if (desc) return "Summons a demon.";
7736 #endif
7737     
7738                 {
7739                         if (cast)
7740                         {
7741                                 bool pet = !one_in_(3);
7742                                 u32b mode = 0L;
7743
7744                                 if (pet) mode |= PM_FORCE_PET;
7745                                 else mode |= PM_NO_PET;
7746                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
7747
7748                                 if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint1(plev/2), SUMMON_DEMON, mode))
7749                                 {
7750 #ifdef JP
7751                                         msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
7752 #else
7753                                         msg_print("The area fills with a stench of sulphur and brimstone.");
7754 #endif
7755
7756
7757                                         if (pet)
7758                                         {
7759 #ifdef JP
7760                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
7761 #else
7762                                                 msg_print("'What is thy bidding... Master?'");
7763 #endif
7764                                         }
7765                                         else
7766                                         {
7767 #ifdef JP
7768                                                 msg_print("¡ÖÈܤ·¤­¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
7769 #else
7770                                                 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
7771 #endif
7772                                         }
7773                                 }
7774                                 else
7775                                 {
7776 #ifdef JP
7777                                         msg_print("°­Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
7778 #else
7779                                         msg_print("No demons arrive.");
7780 #endif
7781                                 }
7782                                 break;
7783                         }
7784                 }
7785                 break;
7786
7787         case 16:
7788 #ifdef JP
7789                 if (name) return "°­Ëâ¤ÎÌÜ";
7790                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
7791 #else
7792                 if (name) return "Devilish Eye";
7793                 if (desc) return "Gives telepathy for a while.";
7794 #endif
7795     
7796                 {
7797                         int base = 30;
7798                         int sides = 25;
7799
7800                         if (info) return info_duration(base, sides);
7801
7802                         if (cast)
7803                         {
7804                                 set_tim_esp(randint1(base) + sides, FALSE);
7805                         }
7806                 }
7807                 break;
7808
7809         case 17:
7810 #ifdef JP
7811                 if (name) return "°­Ëâ¤Î¥¯¥í¡¼¥¯";
7812                 if (desc) return "¶²Éݤò¼è¤ê½ü¤­¡¢°ìÄê»þ´Ö¡¢±ê¤ÈÎ䵤¤ÎÂÑÀ­¡¢±ê¤Î¥ª¡¼¥é¤òÆÀ¤ë¡£ÂÑÀ­¤ÏÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7813 #else
7814                 if (name) return "Devil Cloak";
7815                 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.";
7816 #endif
7817     
7818                 {
7819                         int base = 20;
7820
7821                         if (info) return info_duration(base, base);
7822
7823                         if (cast)
7824                         {
7825                                 int dur = randint1(base) + base;
7826                                         
7827                                 set_oppose_fire(dur, FALSE);
7828                                 set_oppose_cold(dur, FALSE);
7829                                 set_tim_sh_fire(dur, FALSE);
7830                                 set_afraid(0);
7831                                 break;
7832                         }
7833                 }
7834                 break;
7835
7836         case 18:
7837 #ifdef JP
7838                 if (name) return "ÍÏ´äή";
7839                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿±ê¤Îµå¤òºî¤ê½Ð¤·¡¢¾²¤òÍÏ´ä¤ËÊѤ¨¤ë¡£";
7840 #else
7841                 if (name) return "The Flow of Lava";
7842                 if (desc) return "Generates a ball of fire centered on you which transforms floors to magma.";
7843 #endif
7844     
7845                 {
7846                         int dam = (55 + plev) * 2;
7847                         int rad = 3;
7848
7849                         if (info) return info_damage(0, 0, dam/2);
7850
7851                         if (cast)
7852                         {
7853                                 fire_ball(GF_FIRE, 0, dam, rad);
7854                                 fire_ball_hide(GF_LAVA_FLOW, 0, 2 + randint1(2), rad);
7855                         }
7856                 }
7857                 break;
7858
7859         case 19:
7860 #ifdef JP
7861                 if (name) return "¥×¥é¥º¥Þµå";
7862                 if (desc) return "¥×¥é¥º¥Þ¤Îµå¤òÊü¤Ä¡£";
7863 #else
7864                 if (name) return "Plasma Ball";
7865                 if (desc) return "Fires a ball of plasma.";
7866 #endif
7867     
7868                 {
7869                         int dam = plev * 3 / 2 + 80;
7870                         int rad = 2 + plev / 40;
7871
7872                         if (info) return info_damage(0, 0, dam);
7873
7874                         if (cast)
7875                         {
7876                                 if (!get_aim_dir(&dir)) return NULL;
7877
7878                                 fire_ball(GF_PLASMA, dir, dam, rad);
7879                         }
7880                 }
7881                 break;
7882
7883         case 20:
7884 #ifdef JP
7885                 if (name) return "°­ËâÊѲ½";
7886                 if (desc) return "°ìÄê»þ´Ö¡¢°­Ëâ¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤Ë°­Ëâ¤È¤·¤Æ¤ÎǽÎϤòÆÀ¤ë¡£";
7887 #else
7888                 if (name) return "Polymorph Demon";
7889                 if (desc) return "Mimic a demon for a while. Loses abilities of original race and gets abilities as a demon.";
7890 #endif
7891     
7892                 {
7893                         int base = 10 + plev / 2;
7894
7895                         if (info) return info_duration(base, base);
7896
7897                         if (cast)
7898                         {
7899                                 set_mimic(base + randint1(base), MIMIC_DEMON, FALSE);
7900                         }
7901                 }
7902                 break;
7903
7904         case 21:
7905 #ifdef JP
7906                 if (name) return "ÃϹö¤ÎÇÈÆ°";
7907                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤ËÆäËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
7908 #else
7909                 if (name) return "Nather Wave";
7910                 if (desc) return "Damages all monsters in sight. Hurts good monsters greatly.";
7911 #endif
7912     
7913                 {
7914                         int sides1 = plev * 2;
7915                         int sides2 = plev * 2;
7916
7917                         if (info) return format("%sd%d+d%d", s_dam, sides1, sides2);
7918
7919                         if (cast)
7920                         {
7921                                 dispel_monsters(randint1(sides1));
7922                                 dispel_good(randint1(sides2));
7923                         }
7924                 }
7925                 break;
7926
7927         case 22:
7928 #ifdef JP
7929                 if (name) return "¥µ¥­¥å¥Ð¥¹¤ÎÀÜÊ­";
7930                 if (desc) return "°ø²Ìº®Íð¤Îµå¤òÊü¤Ä¡£";
7931 #else
7932                 if (name) return "Kiss of Succubus";
7933                 if (desc) return "Fires a ball of nexus.";
7934 #endif
7935     
7936                 {
7937                         int dam = 100 + plev * 2;
7938                         int rad = 4;
7939
7940                         if (info) return info_damage(0, 0, dam);
7941
7942                         if (cast)
7943                         {
7944                                 if (!get_aim_dir(&dir)) return NULL;
7945                                 fire_ball(GF_NEXUS, dir, dam, rad);
7946                         }
7947                 }
7948                 break;
7949
7950         case 23:
7951 #ifdef JP
7952                 if (name) return "ÇËÌǤμê";
7953                 if (desc) return "ÇËÌǤμê¤òÊü¤Ä¡£¿©¤é¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤Ï¤½¤Î¤È¤­¤ÎHP¤ÎȾʬÁ°¸å¤Î¥À¥á¡¼¥¸¤ò¼õ¤±¤ë¡£";
7954 #else
7955                 if (name) return "Doom Hand";
7956                 if (desc) return "Attempts to make a monster's HP almost half.";
7957 #endif
7958     
7959                 {
7960                         if (cast)
7961                         {
7962                                 if (!get_aim_dir(&dir)) return NULL;
7963 #ifdef JP
7964                                 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
7965 #else
7966                                 else msg_print("You invoke the Hand of Doom!");
7967 #endif
7968
7969                                 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
7970                         }
7971                 }
7972                 break;
7973
7974         case 24:
7975 #ifdef JP
7976                 if (name) return "»Îµ¤¹âÍÈ";
7977                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
7978 #else
7979                 if (name) return "Raise the Morale";
7980                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
7981 #endif
7982     
7983                 {
7984                         int base = 25;
7985
7986                         if (info) return info_duration(base, base);
7987
7988                         if (cast)
7989                         {
7990                                 set_hero(randint1(base) + base, FALSE);
7991                                 hp_player(10);
7992                                 set_afraid(0);
7993                         }
7994                 }
7995                 break;
7996
7997         case 25:
7998 #ifdef JP
7999                 if (name) return "ÉÔÌǤÎÆùÂÎ";
8000                 if (desc) return "°ìÄê»þ´Ö¡¢»þ´ÖµÕž¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£";
8001 #else
8002                 if (name) return "Immortal Body";
8003                 if (desc) return "Gives resistance to time for a while.";
8004 #endif
8005     
8006                 {
8007                         int base = 20;
8008
8009                         if (info) return info_duration(base, base);
8010
8011                         if (cast)
8012                         {
8013                                 set_tim_res_time(randint1(base)+base, FALSE);
8014                         }
8015                 }
8016                 break;
8017
8018         case 26:
8019 #ifdef JP
8020                 if (name) return "¶¸µ¤¤Î±ß´Ä";
8021                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¥«¥ª¥¹¤Îµå¡¢º®Íð¤Îµå¤òȯÀ¸¤µ¤»¡¢¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£";
8022 #else
8023                 if (name) return "Insanity Circle";
8024                 if (desc) return "Generate balls of chaos, confusion and charm centered on you.";
8025 #endif
8026     
8027                 {
8028                         int dam = 50 + plev;
8029                         int power = 20 + plev;
8030                         int rad = 3 + plev / 20;
8031
8032                         if (info) return format("%s%d+%d", s_dam, dam/2, dam/2);
8033
8034                         if (cast)
8035                         {
8036                                 fire_ball(GF_CHAOS, 0, dam, rad);
8037                                 fire_ball(GF_CONFUSION, 0, dam, rad);
8038                                 fire_ball(GF_CHARM, 0, power, rad);
8039                         }
8040                 }
8041                 break;
8042
8043         case 27:
8044 #ifdef JP
8045                 if (name) return "¥Ú¥Ã¥ÈÇúÇË";
8046                 if (desc) return "Á´¤Æ¤Î¥Ú¥Ã¥È¤ò¶¯À©Åª¤ËÇúÇˤµ¤»¤ë¡£";
8047 #else
8048                 if (name) return "Explode Pets";
8049                 if (desc) return "Makes all pets explode.";
8050 #endif
8051     
8052                 {
8053                         if (cast)
8054                         {
8055                                 discharge_minion();
8056                         }
8057                 }
8058                 break;
8059
8060         case 28:
8061 #ifdef JP
8062                 if (name) return "¥°¥ì¡¼¥¿¡¼¥Ç¡¼¥â¥ó¾¤´­";
8063                 if (desc) return "¾åµé¥Ç¡¼¥â¥ó¤ò¾¤´­¤¹¤ë¡£¾¤´­¤¹¤ë¤Ë¤Ï¿Í´Ö('p','h','t'¤Çɽ¤µ¤ì¤ë¥â¥ó¥¹¥¿¡¼)¤Î»àÂΤòÊû¤²¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£";
8064 #else
8065                 if (name) return "Summon Greater Demon";
8066                 if (desc) return "Summons greater demon. It need to sacrifice a corpse of human ('p','h' or 't').";
8067 #endif
8068     
8069                 {
8070                         if (cast)
8071                         {
8072                                 if (!cast_summon_greater_demon()) return NULL;
8073                         }
8074                 }
8075                 break;
8076
8077         case 29:
8078 #ifdef JP
8079                 if (name) return "ÃϹöÍò";
8080                 if (desc) return "ĶµðÂç¤ÊÃϹö¤Îµå¤òÊü¤Ä¡£";
8081 #else
8082                 if (name) return "Nether Storm";
8083                 if (desc) return "Generate a huge ball of nether.";
8084 #endif
8085     
8086                 {
8087                         int dam = plev * 15;
8088                         int rad = plev / 5;
8089
8090                         if (info) return info_damage(0, 0, dam);
8091
8092                         if (cast)
8093                         {
8094                                 if (!get_aim_dir(&dir)) return NULL;
8095
8096                                 fire_ball(GF_NETHER, dir, dam, rad);
8097                         }
8098                 }
8099                 break;
8100
8101         case 30:
8102 #ifdef JP
8103                 if (name) return "·ì¤Î¼ö¤¤";
8104                 if (desc) return "¼«Ê¬¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤ë¤³¤È¤Ë¤è¤Ã¤ÆÂоݤ˼ö¤¤¤ò¤«¤±¡¢¥À¥á¡¼¥¸¤òÍ¿¤¨ÍÍ¡¹¤Ê¸ú²Ì¤ò°ú¤­µ¯¤³¤¹¡£";
8105 #else
8106                 if (name) return "Bloody Curse";
8107                 if (desc) return "Puts blood curse which damages and causes various effects on a monster. You also take damage.";
8108 #endif
8109     
8110                 {
8111                         int dam = 600;
8112                         int rad = 0;
8113
8114                         if (info) return info_damage(0, 0, dam);
8115
8116                         if (cast)
8117                         {
8118                                 if (!get_aim_dir(&dir)) return NULL;
8119
8120                                 fire_ball_hide(GF_BLOOD_CURSE, dir, dam, rad);
8121 #ifdef JP
8122                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "·ì¤Î¼ö¤¤", -1);
8123 #else
8124                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "Blood curse", -1);
8125 #endif
8126                         }
8127                 }
8128                 break;
8129
8130         case 31:
8131 #ifdef JP
8132                 if (name) return "ËⲦÊѲ½";
8133                 if (desc) return "°­Ëâ¤Î²¦¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤Ë°­Ëâ¤Î²¦¤È¤·¤Æ¤ÎǽÎϤòÆÀ¡¢ÊɤòÇ˲õ¤·¤Ê¤¬¤éÊ⤯¡£";
8134 #else
8135                 if (name) return "Polymorph Demonlord";
8136                 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.";
8137 #endif
8138     
8139                 {
8140                         int base = 15;
8141
8142                         if (info) return info_duration(base, base);
8143
8144                         if (cast)
8145                         {
8146                                 set_mimic(base + randint1(base), MIMIC_DEMON_LORD, FALSE);
8147                         }
8148                 }
8149                 break;
8150         }
8151
8152         return "";
8153 }
8154
8155
8156 static cptr do_crusade_spell(int spell, int mode)
8157 {
8158         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
8159         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
8160         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
8161         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
8162
8163         int dir;
8164         int plev = p_ptr->lev;
8165
8166         switch (spell)
8167         {
8168         case 0:
8169 #ifdef JP
8170                 if (name) return "Ĩȳ";
8171                 if (desc) return "ÅÅ·â¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
8172 #else
8173                 if (name) return "Punishment";
8174                 if (desc) return "Fires a bolt or beam of lightning.";
8175 #endif
8176     
8177                 {
8178                         int dice = 3 + (plev - 1) / 5;
8179                         int sides = 4;
8180
8181                         if (info) return info_damage(dice, sides, 0);
8182
8183                         if (cast)
8184                         {
8185                                 if (!get_aim_dir(&dir)) return NULL;
8186
8187                                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
8188                         }
8189                 }
8190                 break;
8191
8192         case 1:
8193 #ifdef JP
8194                 if (name) return "¼Ù°­Â¸ºß´¶ÃÎ";
8195                 if (desc) return "¶á¤¯¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
8196 #else
8197                 if (name) return "Detect Evil";
8198                 if (desc) return "Detects all evil monsters in your vicinity.";
8199 #endif
8200     
8201                 {
8202                         int rad = DETECT_RAD_DEFAULT;
8203
8204                         if (info) return info_radius(rad);
8205
8206                         if (cast)
8207                         {
8208                                 detect_monsters_evil(rad);
8209                         }
8210                 }
8211                 break;
8212
8213         case 2:
8214 #ifdef JP
8215                 if (name) return "¶²Éݽüµî";
8216                 if (desc) return "¶²Éݤò¼è¤ê½ü¤¯¡£";
8217 #else
8218                 if (name) return "Remove Fear";
8219                 if (desc) return "Removes fear.";
8220 #endif
8221     
8222                 {
8223                         if (cast)
8224                         {
8225                                 set_afraid(0);
8226                         }
8227                 }
8228                 break;
8229
8230         case 3:
8231 #ifdef JP
8232                 if (name) return "°Ò°µ";
8233                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8234 #else
8235                 if (name) return "Scare Monster";
8236                 if (desc) return "Attempts to scare a monster.";
8237 #endif
8238     
8239                 {
8240                         int power = plev;
8241
8242                         if (info) return info_power(power);
8243
8244                         if (cast)
8245                         {
8246                                 if (!get_aim_dir(&dir)) return NULL;
8247
8248                                 fear_monster(dir, power);
8249                         }
8250                 }
8251                 break;
8252
8253         case 4:
8254 #ifdef JP
8255                 if (name) return "À»°è";
8256                 if (desc) return "ÎÙÀܤ·¤¿Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8257 #else
8258                 if (name) return "Sanctuary";
8259                 if (desc) return "Attempts to sleep monsters in the adjacent squares.";
8260 #endif
8261     
8262                 {
8263                         int power = plev;
8264
8265                         if (info) return info_power(power);
8266
8267                         if (cast)
8268                         {
8269                                 sleep_monsters_touch();
8270                         }
8271                 }
8272                 break;
8273
8274         case 5:
8275 #ifdef JP
8276                 if (name) return "Æþ¸ý";
8277                 if (desc) return "Ãæµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
8278 #else
8279                 if (name) return "Portal";
8280                 if (desc) return "Teleport medium distance.";
8281 #endif
8282     
8283                 {
8284                         int range = 25 + plev / 2;
8285
8286                         if (info) return info_range(range);
8287
8288                         if (cast)
8289                         {
8290                                 teleport_player(range, FALSE);
8291                         }
8292                 }
8293                 break;
8294
8295         case 6:
8296 #ifdef JP
8297                 if (name) return "¥¹¥¿¡¼¥À¥¹¥È";
8298                 if (desc) return "¥¿¡¼¥²¥Ã¥ÈÉÕ¶á¤ËÁ®¸÷¤Î¥Ü¥ë¥È¤òÏ¢¼Í¤¹¤ë¡£";
8299 #else
8300                 if (name) return "Star Dust";
8301                 if (desc) return "Fires many bolts of light near the target.";
8302 #endif
8303     
8304                 {
8305                         int dice = 3 + (plev - 1) / 9;
8306                         int sides = 2;
8307
8308                         if (info) return info_multi_damage_dice(dice, sides);
8309
8310                         if (cast)
8311                         {
8312                                 if (!get_aim_dir(&dir)) return NULL;
8313                                 fire_blast(GF_LITE, dir, dice, sides, 10, 3);
8314                         }
8315                 }
8316                 break;
8317
8318         case 7:
8319 #ifdef JP
8320                 if (name) return "¿ÈÂξô²½";
8321                 if (desc) return "½ý¡¢ÆÇ¡¢Û¯Û°¤«¤éÁ´²÷¤¹¤ë¡£";
8322 #else
8323                 if (name) return "Purify";
8324                 if (desc) return "Heals all cut, stun and poison status.";
8325 #endif
8326     
8327                 {
8328                         if (cast)
8329                         {
8330                                 set_cut(0);
8331                                 set_poisoned(0);
8332                                 set_stun(0);
8333                         }
8334                 }
8335                 break;
8336
8337         case 8:
8338 #ifdef JP
8339                 if (name) return "¼Ù°­Èô¤Ð¤·";
8340                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼1ÂΤò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8341 #else
8342                 if (name) return "Scatter Evil";
8343                 if (desc) return "Attempts to teleport an evil monster away.";
8344 #endif
8345     
8346                 {
8347                         int power = MAX_SIGHT * 5;
8348
8349                         if (info) return info_power(power);
8350
8351                         if (cast)
8352                         {
8353                                 if (!get_aim_dir(&dir)) return NULL;
8354                                 fire_ball(GF_AWAY_EVIL, dir, power, 0);
8355                         }
8356                 }
8357                 break;
8358
8359         case 9:
8360 #ifdef JP
8361                 if (name) return "À»¤Ê¤ë¸÷µå";
8362                 if (desc) return "À»¤Ê¤ëÎϤò¤â¤ÄÊõ¼î¤òÊü¤Ä¡£¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤¬¡¢Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡£";
8363 #else
8364                 if (name) return "Holy Orb";
8365                 if (desc) return "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good monsters.";
8366 #endif
8367     
8368                 {
8369                         int dice = 3;
8370                         int sides = 6;
8371                         int rad = (plev < 30) ? 2 : 3;
8372                         int base;
8373
8374                         if (p_ptr->pclass == CLASS_PRIEST ||
8375                             p_ptr->pclass == CLASS_HIGH_MAGE ||
8376                             p_ptr->pclass == CLASS_SORCERER)
8377                                 base = plev + plev / 2;
8378                         else
8379                                 base = plev + plev / 4;
8380
8381
8382                         if (info) return info_damage(dice, sides, base);
8383
8384                         if (cast)
8385                         {
8386                                 if (!get_aim_dir(&dir)) return NULL;
8387
8388                                 fire_ball(GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);
8389                         }
8390                 }
8391                 break;
8392
8393         case 10:
8394 #ifdef JP
8395                 if (name) return "°­Ëâʧ¤¤";
8396                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥ÉµÚ¤Ó°­Ëâ¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£";
8397 #else
8398                 if (name) return "Exorcism";
8399                 if (desc) return "Damages all undead and demons in sight, and scares all evil monsters in sight.";
8400 #endif
8401     
8402                 {
8403                         int sides = plev;
8404                         int power = plev;
8405
8406                         if (info) return info_damage(1, sides, 0);
8407
8408                         if (cast)
8409                         {
8410                                 dispel_undead(randint1(sides));
8411                                 dispel_demons(randint1(sides));
8412                                 turn_evil(power);
8413                         }
8414                 }
8415                 break;
8416
8417         case 11:
8418 #ifdef JP
8419                 if (name) return "²ò¼ö";
8420                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
8421 #else
8422                 if (name) return "Remove Curse";
8423                 if (desc) return "Removes normal curses from equipped items.";
8424 #endif
8425     
8426                 {
8427                         if (cast)
8428                         {
8429                                 if (remove_curse())
8430                                 {
8431 #ifdef JP
8432                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
8433 #else
8434                                         msg_print("You feel as if someone is watching over you.");
8435 #endif
8436                                 }
8437                         }
8438                 }
8439                 break;
8440
8441         case 12:
8442 #ifdef JP
8443                 if (name) return "Æ©ÌÀ»ëǧ";
8444                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
8445 #else
8446                 if (name) return "Sense Unseen";
8447                 if (desc) return "Gives see invisible for a while.";
8448 #endif
8449     
8450                 {
8451                         int base = 24;
8452
8453                         if (info) return info_duration(base, base);
8454
8455                         if (cast)
8456                         {
8457                                 set_tim_invis(randint1(base) + base, FALSE);
8458                         }
8459                 }
8460                 break;
8461
8462         case 13:
8463 #ifdef JP
8464                 if (name) return "Âмٰ­·ë³¦";
8465                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Î¹¶·â¤òËɤ°¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
8466 #else
8467                 if (name) return "Protection from Evil";
8468                 if (desc) return "Gives aura which protect you from evil monster's physical attack.";
8469 #endif
8470     
8471                 {
8472                         int base = 25;
8473                         int sides = 3 * plev;
8474
8475                         if (info) return info_duration(base, sides);
8476
8477                         if (cast)
8478                         {
8479                                 set_protevil(randint1(sides) + sides, FALSE);
8480                         }
8481                 }
8482                 break;
8483
8484         case 14:
8485 #ifdef JP
8486                 if (name) return "ºÛ¤­¤ÎÍë";
8487                 if (desc) return "¶¯ÎϤÊÅÅ·â¤Î¥Ü¥ë¥È¤òÊü¤Ä¡£";
8488 #else
8489                 if (name) return "Judgment Thunder";
8490                 if (desc) return "Fires a powerful bolt of lightning.";
8491 #endif
8492     
8493                 {
8494                         int dam = plev * 5;
8495
8496                         if (info) return info_damage(0, 0, dam);
8497
8498                         if (cast)
8499                         {
8500                                 if (!get_aim_dir(&dir)) return NULL;
8501                                 fire_bolt(GF_ELEC, dir, dam);
8502                         }
8503                 }
8504                 break;
8505
8506         case 15:
8507 #ifdef JP
8508                 if (name) return "À»¤Ê¤ë¸æ¸ÀÍÕ";
8509                 if (desc) return "»ë³¦Æâ¤Î¼Ù°­¤Ê¸ºß¤ËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢ÂÎÎϤò²óÉü¤·¡¢ÆÇ¡¢¶²ÉÝ¡¢Û¯Û°¾õÂÖ¡¢Éé½ý¤«¤éÁ´²÷¤¹¤ë¡£";
8510 #else
8511                 if (name) return "Holy Word";
8512                 if (desc) return "Damages all evil monsters in sight, heals HP somewhat, and completely heals poison, fear, stun and cut status.";
8513 #endif
8514     
8515                 {
8516                         int dam_sides = plev * 6;
8517                         int heal = 100;
8518
8519 #ifdef JP
8520                         if (info) return format("»:1d%d/²ó%d", dam_sides, heal);
8521 #else
8522                         if (info) return format("dam:d%d/h%d", dam_sides, heal);
8523 #endif
8524
8525                         if (cast)
8526                         {
8527                                 dispel_evil(randint1(dam_sides));
8528                                 hp_player(heal);
8529                                 set_afraid(0);
8530                                 set_poisoned(0);
8531                                 set_stun(0);
8532                                 set_cut(0);
8533                         }
8534                 }
8535                 break;
8536
8537         case 16:
8538 #ifdef JP
8539                 if (name) return "³«¤«¤ì¤¿Æ»";
8540                 if (desc) return "°ìľÀþ¾å¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
8541 #else
8542                 if (name) return "Unbarring Ways";
8543                 if (desc) return "Fires a beam which destroy traps and doors.";
8544 #endif
8545     
8546                 {
8547                         if (cast)
8548                         {
8549                                 if (!get_aim_dir(&dir)) return NULL;
8550
8551                                 destroy_door(dir);
8552                         }
8553                 }
8554                 break;
8555
8556         case 17:
8557 #ifdef JP
8558                 if (name) return "ÉõËâ";
8559                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ÎÆ°¤­¤ò»ß¤á¤ë¡£";
8560 #else
8561                 if (name) return "Arrest";
8562                 if (desc) return "Attempts to paralyze an evil monster.";
8563 #endif
8564     
8565                 {
8566                         int power = plev * 2;
8567
8568                         if (info) return info_power(power);
8569
8570                         if (cast)
8571                         {
8572                                 if (!get_aim_dir(&dir)) return NULL;
8573                                 stasis_evil(dir);
8574                         }
8575                 }
8576                 break;
8577
8578         case 18:
8579 #ifdef JP
8580                 if (name) return "À»¤Ê¤ë¥ª¡¼¥é";
8581                 if (desc) return "°ìÄê»þ´Ö¡¢¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò½ý¤Ä¤±¤ëÀ»¤Ê¤ë¥ª¡¼¥é¤òÆÀ¤ë¡£";
8582 #else
8583                 if (name) return "Holy Aura";
8584                 if (desc) return "Gives aura of holy power which injures evil monsters which attacked you for a while.";
8585 #endif
8586     
8587                 {
8588                         int base = 20;
8589
8590                         if (info) return info_duration(base, base);
8591
8592                         if (cast)
8593                         {
8594                                 set_tim_sh_holy(randint1(base) + base, FALSE);
8595                         }
8596                 }
8597                 break;
8598
8599         case 19:
8600 #ifdef JP
8601                 if (name) return "¥¢¥ó¥Ç¥Ã¥É&°­ËâÂ໶";
8602                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥ÉµÚ¤Ó°­Ëâ¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8603 #else
8604                 if (name) return "Dispel Undead & Demons";
8605                 if (desc) return "Damages all undead and demons in sight.";
8606 #endif
8607     
8608                 {
8609                         int sides = plev * 4;
8610
8611                         if (info) return info_damage(1, sides, 0);
8612
8613                         if (cast)
8614                         {
8615                                 dispel_undead(randint1(sides));
8616                                 dispel_demons(randint1(sides));
8617                         }
8618                 }
8619                 break;
8620
8621         case 20:
8622 #ifdef JP
8623                 if (name) return "¼Ù°­Â໶";
8624                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8625 #else
8626                 if (name) return "Dispel Evil";
8627                 if (desc) return "Damages all evil monsters in sight.";
8628 #endif
8629     
8630                 {
8631                         int sides = plev * 4;
8632
8633                         if (info) return info_damage(1, sides, 0);
8634
8635                         if (cast)
8636                         {
8637                                 dispel_evil(randint1(sides));
8638                         }
8639                 }
8640                 break;
8641
8642         case 21:
8643 #ifdef JP
8644                 if (name) return "À»¤Ê¤ë¿Ï";
8645                 if (desc) return "Ä̾ï¤ÎÉð´ï¤ËÌǼ٤ΰÀ­¤ò¤Ä¤±¤ë¡£";
8646 #else
8647                 if (name) return "Holy Blade";
8648                 if (desc) return "Makes current weapon especially deadly against evil monsters.";
8649 #endif
8650     
8651                 {
8652                         if (cast)
8653                         {
8654                                 brand_weapon(13);
8655                         }
8656                 }
8657                 break;
8658
8659         case 22:
8660 #ifdef JP
8661                 if (name) return "¥¹¥¿¡¼¥Ð¡¼¥¹¥È";
8662                 if (desc) return "µðÂç¤ÊÁ®¸÷¤Îµå¤òÊü¤Ä¡£";
8663 #else
8664                 if (name) return "Star Burst";
8665                 if (desc) return "Fires a huge ball of powerful light.";
8666 #endif
8667     
8668                 {
8669                         int dam = 100 + plev * 2;
8670                         int rad = 4;
8671
8672                         if (info) return info_damage(0, 0, dam);
8673
8674                         if (cast)
8675                         {
8676                                 if (!get_aim_dir(&dir)) return NULL;
8677
8678                                 fire_ball(GF_LITE, dir, dam, rad);
8679                         }
8680                 }
8681                 break;
8682
8683         case 23:
8684 #ifdef JP
8685                 if (name) return "Å·»È¾¤´­";
8686                 if (desc) return "Å·»È¤ò1Âξ¤´­¤¹¤ë¡£";
8687 #else
8688                 if (name) return "Summon Angel";
8689                 if (desc) return "Summons an angel.";
8690 #endif
8691     
8692                 {
8693                         if (cast)
8694                         {
8695                                 bool pet = !one_in_(3);
8696                                 u32b mode = 0L;
8697
8698                                 if (pet) mode |= PM_FORCE_PET;
8699                                 else mode |= PM_NO_PET;
8700                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
8701
8702                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_ANGEL, mode))
8703                                 {
8704                                         if (pet)
8705                                         {
8706 #ifdef JP
8707                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
8708 #else
8709                                                 msg_print("'What is thy bidding... Master?'");
8710 #endif
8711                                         }
8712                                         else
8713                                         {
8714 #ifdef JP
8715                                                 msg_print("¡Ö²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª °­¹Ô¼Ô¤è¡¢²ù¤¤²þ¤á¤è¡ª¡×");
8716 #else
8717                                                 msg_print("Mortal! Repent of thy impiousness.");
8718 #endif
8719                                         }
8720                                 }
8721                         }
8722                 }
8723                 break;
8724
8725         case 24:
8726 #ifdef JP
8727                 if (name) return "»Îµ¤¹âÍÈ";
8728                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
8729 #else
8730                 if (name) return "Heroism";
8731                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
8732 #endif
8733     
8734                 {
8735                         int base = 25;
8736
8737                         if (info) return info_duration(base, base);
8738
8739                         if (cast)
8740                         {
8741                                 set_hero(randint1(base) + base, FALSE);
8742                                 hp_player(10);
8743                                 set_afraid(0);
8744                         }
8745                 }
8746                 break;
8747
8748         case 25:
8749 #ifdef JP
8750                 if (name) return "¼ö¤¤Â໶";
8751                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
8752 #else
8753                 if (name) return "Dispel Curse";
8754                 if (desc) return "Removes normal and heavy curse from equipped items.";
8755 #endif
8756     
8757                 {
8758                         if (cast)
8759                         {
8760                                 if (remove_all_curse())
8761                                 {
8762 #ifdef JP
8763                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
8764 #else
8765                                         msg_print("You feel as if someone is watching over you.");
8766 #endif
8767                                 }
8768                         }
8769                 }
8770                 break;
8771
8772         case 26:
8773 #ifdef JP
8774                 if (name) return "¼Ù°­ÄÉÊü";
8775                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8776 #else
8777                 if (name) return "Banish Evil";
8778                 if (desc) return "Teleports all evil monsters in sight away unless resisted.";
8779 #endif
8780     
8781                 {
8782                         int power = 100;
8783
8784                         if (info) return info_power(power);
8785
8786                         if (cast)
8787                         {
8788                                 if (banish_evil(power))
8789                                 {
8790 #ifdef JP
8791                                         msg_print("¿ÀÀ»¤ÊÎϤ¬¼Ù°­¤òÂǤÁʧ¤Ã¤¿¡ª");
8792 #else
8793                                         msg_print("The holy power banishes evil!");
8794 #endif
8795
8796                                 }
8797                         }
8798                 }
8799                 break;
8800
8801         case 27:
8802 #ifdef JP
8803                 if (name) return "¥Ï¥ë¥Þ¥²¥É¥ó";
8804                 if (desc) return "¼þÊդΥ¢¥¤¥Æ¥à¡¢¥â¥ó¥¹¥¿¡¼¡¢ÃÏ·Á¤òÇ˲õ¤¹¤ë¡£";
8805 #else
8806                 if (name) return "Armageddon";
8807                 if (desc) return "Destroy everything in nearby area.";
8808 #endif
8809     
8810                 {
8811                         int base = 12;
8812                         int sides = 4;
8813
8814                         if (cast)
8815                         {
8816                                 destroy_area(py, px, base + randint1(sides), FALSE);
8817                         }
8818                 }
8819                 break;
8820
8821         case 28:
8822 #ifdef JP
8823                 if (name) return "ÌܤˤÏÌܤò";
8824                 if (desc) return "°ìÄê»þ´Ö¡¢¼«Ê¬¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤¿¤È¤­¤Ë¹¶·â¤ò¹Ô¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆƱÅù¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8825 #else
8826                 if (name) return "An Eye for an Eye";
8827                 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.";
8828 #endif
8829     
8830                 {
8831                         int base = 10;
8832
8833                         if (info) return info_duration(base, base);
8834
8835                         if (cast)
8836                         {
8837                                 set_tim_eyeeye(randint1(base) + base, FALSE);
8838                         }
8839                 }
8840                 break;
8841
8842         case 29:
8843 #ifdef JP
8844                 if (name) return "¿À¤ÎÅܤê";
8845                 if (desc) return "¥¿¡¼¥²¥Ã¥È¤Î¼þ°Ï¤Ëʬ²ò¤Îµå¤ò¿¿ôÍî¤È¤¹¡£";
8846 #else
8847                 if (name) return "Wrath of the God";
8848                 if (desc) return "Drops many balls of disintegration near the target.";
8849 #endif
8850     
8851                 {
8852                         int dam = plev * 3 + 25;
8853                         int rad = 2;
8854
8855                         if (info) return info_multi_damage(dam);
8856
8857                         if (cast)
8858                         {
8859                                 if (!cast_wrath_of_the_god(dam, rad)) return NULL;
8860                         }
8861                 }
8862                 break;
8863
8864         case 30:
8865 #ifdef JP
8866                 if (name) return "¿À°Ò";
8867                 if (desc) return "ÎÙÀܤ¹¤ë¥â¥ó¥¹¥¿¡¼¤ËÀ»¤Ê¤ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¡¢¸ºÂ®¡¢Û¯Û°¡¢º®Í𡢶²ÉÝ¡¢Ì²¤ê¤òÍ¿¤¨¤ë¡£¤µ¤é¤ËÂÎÎϤò²óÉü¤¹¤ë¡£";
8868 #else
8869                 if (name) return "Divine Intervention";
8870                 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.";
8871 #endif
8872     
8873                 {
8874                         int b_dam = plev * 11;
8875                         int d_dam = plev * 4;
8876                         int heal = 100;
8877                         int power = plev * 4;
8878
8879 #ifdef JP
8880                         if (info) return format("²ó%d/»%d+%d", heal, d_dam, b_dam/2);
8881 #else
8882                         if (info) return format("h%d/dm%d+%d", heal, d_dam, b_dam/2);
8883 #endif
8884
8885                         if (cast)
8886                         {
8887                                 project(0, 1, py, px, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
8888                                 dispel_monsters(d_dam);
8889                                 slow_monsters();
8890                                 stun_monsters(power);
8891                                 confuse_monsters(power);
8892                                 turn_monsters(power);
8893                                 stasis_monsters(power);
8894                                 hp_player(heal);
8895                         }
8896                 }
8897                 break;
8898
8899         case 31:
8900 #ifdef JP
8901                 if (name) return "À»Àï";
8902                 if (desc) return "»ë³¦Æâ¤ÎÁ±Îɤʥâ¥ó¥¹¥¿¡¼¤ò¥Ú¥Ã¥È¤Ë¤·¤è¤¦¤È¤·¡¢¤Ê¤é¤Ê¤«¤Ã¤¿¾ì¹çµÚ¤ÓÁ±ÎɤǤʤ¤¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£¤µ¤é¤Ë¿¿ô¤Î²Ã®¤µ¤ì¤¿µ³»Î¤ò¾¤´­¤·¡¢¥Ò¡¼¥í¡¼¡¢½ËÊ¡¡¢²Ã®¡¢Âмٰ­·ë³¦¤òÆÀ¤ë¡£";
8903 #else
8904                 if (name) return "Crusade";
8905                 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.";
8906 #endif
8907     
8908                 {
8909                         if (cast)
8910                         {
8911                                 int base = 25;
8912                                 int sp_sides = 20 + plev;
8913                                 int sp_base = plev;
8914
8915                                 int i;
8916                                 crusade();
8917                                 for (i = 0; i < 12; i++)
8918                                 {
8919                                         int attempt = 10;
8920                                         int my, mx;
8921
8922                                         while (attempt--)
8923                                         {
8924                                                 scatter(&my, &mx, py, px, 4, 0);
8925
8926                                                 /* Require empty grids */
8927                                                 if (cave_empty_bold2(my, mx)) break;
8928                                         }
8929                                         if (attempt < 0) continue;
8930                                         summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
8931                                 }
8932                                 set_hero(randint1(base) + base, FALSE);
8933                                 set_blessed(randint1(base) + base, FALSE);
8934                                 set_fast(randint1(sp_sides) + sp_base, FALSE);
8935                                 set_protevil(randint1(base) + base, FALSE);
8936                                 set_afraid(0);
8937                         }
8938                 }
8939                 break;
8940         }
8941
8942         return "";
8943 }
8944
8945
8946 static cptr do_music_spell(int spell, int mode)
8947 {
8948         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
8949         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
8950         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
8951         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
8952         bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
8953         bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
8954         bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
8955
8956 #ifdef JP
8957         static const char s_dam[] = "»½ý:";
8958 #else
8959         static const char s_dam[] = "dam ";
8960 #endif
8961
8962         int dir;
8963         int plev = p_ptr->lev;
8964
8965         switch (spell)
8966         {
8967         case 0:
8968 #ifdef JP
8969                 if (name) return "ÃÙÆߤβÎ";
8970                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8971 #else
8972                 if (name) return "Song of Holding";
8973                 if (desc) return "Attempts to slow all monsters in sight.";
8974 #endif
8975     
8976                 /* Stop singing before start another */
8977                 if (cast || fail) stop_singing();
8978
8979                 if (cast)
8980                 {
8981 #ifdef JP
8982                         msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
8983 #else
8984                         msg_print("You start humming a slow, steady melody...");
8985 #endif
8986                         start_singing(spell, MUSIC_SLOW);
8987                 }
8988
8989                 {
8990                         int power = plev;
8991
8992                         if (info) return info_power(power);
8993
8994                         if (cont)
8995                         {
8996                                 slow_monsters();
8997                         }
8998                 }
8999                 break;
9000
9001         case 1:
9002 #ifdef JP
9003                 if (name) return "½ËÊ¡¤Î²Î";
9004                 if (desc) return "Ì¿ÃæΨ¤ÈAC¤Î¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
9005 #else
9006                 if (name) return "Song of Blessing";
9007                 if (desc) return "Gives bonus to hit and AC for a few turns.";
9008 #endif
9009     
9010                 /* Stop singing before start another */
9011                 if (cast || fail) stop_singing();
9012
9013                 if (cast)
9014                 {
9015 #ifdef JP
9016                         msg_print("¸·¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9017 #else
9018                         msg_print("The holy power of the Music of the Ainur enters you...");
9019 #endif
9020                         start_singing(spell, MUSIC_BLESS);
9021                 }
9022
9023                 if (stop)
9024                 {
9025                         if (!p_ptr->blessed)
9026                         {
9027 #ifdef JP
9028                                 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9029 #else
9030                                 msg_print("The prayer has expired.");
9031 #endif
9032                         }
9033                 }
9034
9035                 break;
9036
9037         case 2:
9038 #ifdef JP
9039                 if (name) return "Êø²õ¤Î²»¿§";
9040                 if (desc) return "¹ì²»¤Î¥Ü¥ë¥È¤òÊü¤Ä¡£";
9041 #else
9042                 if (name) return "Wrecking Note";
9043                 if (desc) return "Fires a bolt of sound.";
9044 #endif
9045     
9046                 /* Stop singing before start another */
9047                 if (cast || fail) stop_singing();
9048
9049                 {
9050                         int dice = 4 + (plev - 1) / 5;
9051                         int sides = 4;
9052
9053                         if (info) return info_damage(dice, sides, 0);
9054
9055                         if (cast)
9056                         {
9057                                 if (!get_aim_dir(&dir)) return NULL;
9058
9059                                 fire_bolt(GF_SOUND, dir, damroll(dice, sides));
9060                         }
9061                 }
9062                 break;
9063
9064         case 3:
9065 #ifdef JP
9066                 if (name) return "Û¯Û°¤ÎÀûΧ";
9067                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òÛ¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9068 #else
9069                 if (name) return "Stun Pattern";
9070                 if (desc) return "Attempts to stun all monsters in sight.";
9071 #endif
9072     
9073                 /* Stop singing before start another */
9074                 if (cast || fail) stop_singing();
9075
9076                 if (cast)
9077                 {
9078 #ifdef JP
9079                         msg_print("âÁÏǤµ¤»¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9080 #else
9081                         msg_print("You weave a pattern of sounds to bewilder and daze...");
9082 #endif
9083                         start_singing(spell, MUSIC_STUN);
9084                 }
9085
9086                 {
9087                         int dice = plev / 10;
9088                         int sides = 2;
9089
9090                         if (info) return info_power_dice(dice, sides);
9091
9092                         if (cont)
9093                         {
9094                                 stun_monsters(damroll(dice, sides));
9095                         }
9096                 }
9097
9098                 break;
9099
9100         case 4:
9101 #ifdef JP
9102                 if (name) return "À¸Ì¿¤Îή¤ì";
9103                 if (desc) return "ÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
9104 #else
9105                 if (name) return "Flow of Life";
9106                 if (desc) return "Heals HP a little.";
9107 #endif
9108     
9109                 /* Stop singing before start another */
9110                 if (cast || fail) stop_singing();
9111
9112                 if (cast)
9113                 {
9114 #ifdef JP
9115                         msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤­¤¿¡¥¡¥¡¥");
9116 #else
9117                         msg_print("Life flows through you as you sing a song of healing...");
9118 #endif
9119                         start_singing(spell, MUSIC_L_LIFE);
9120                 }
9121
9122                 {
9123                         int dice = 2;
9124                         int sides = 6;
9125
9126                         if (info) return info_heal(dice, sides, 0);
9127
9128                         if (cont)
9129                         {
9130                                 hp_player(damroll(dice, sides));
9131                         }
9132                 }
9133
9134                 break;
9135
9136         case 5:
9137 #ifdef JP
9138                 if (name) return "ÂÀÍۤβÎ";
9139                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
9140 #else
9141                 if (name) return "Song of the Sun";
9142                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
9143 #endif
9144     
9145                 /* Stop singing before start another */
9146                 if (cast || fail) stop_singing();
9147
9148                 {
9149                         int dice = 2;
9150                         int sides = plev / 2;
9151                         int rad = plev / 10 + 1;
9152
9153                         if (info) return info_damage(dice, sides, 0);
9154
9155                         if (cast)
9156                         {
9157 #ifdef JP
9158                                 msg_print("¸÷¤êµ±¤¯²Î¤¬ÊÕ¤ê¤ò¾È¤é¤·¤¿¡£");
9159 #else
9160                                 msg_print("Your uplifting song brings brightness to dark places...");
9161 #endif
9162
9163                                 lite_area(damroll(dice, sides), rad);
9164                         }
9165                 }
9166                 break;
9167
9168         case 6:
9169 #ifdef JP
9170                 if (name) return "¶²ÉݤβÎ";
9171                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9172 #else
9173                 if (name) return "Song of Fear";
9174                 if (desc) return "Attempts to scare all monsters in sight.";
9175 #endif
9176     
9177                 /* Stop singing before start another */
9178                 if (cast || fail) stop_singing();
9179
9180                 if (cast)
9181                 {
9182 #ifdef JP
9183                         msg_print("¤ª¤É¤í¤ª¤É¤í¤·¤¤¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9184 #else
9185                         msg_print("You start weaving a fearful pattern...");
9186 #endif
9187                         start_singing(spell, MUSIC_FEAR);                       
9188                 }
9189
9190                 {
9191                         int power = plev;
9192
9193                         if (info) return info_power(power);
9194
9195                         if (cont)
9196                         {
9197                                 project_hack(GF_TURN_ALL, power);
9198                         }
9199                 }
9200
9201                 break;
9202
9203         case 7:
9204 #ifdef JP
9205                 if (name) return "À襤¤Î²Î";
9206                 if (desc) return "¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
9207 #else
9208                 if (name) return "Heroic Ballad";
9209                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
9210 #endif
9211
9212                 /* Stop singing before start another */
9213                 if (cast || fail) stop_singing();
9214
9215                 if (cast)
9216                 {
9217 #ifdef JP
9218                         msg_print("·ã¤·¤¤À襤¤Î²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
9219 #else
9220                         msg_print("You start singing a song of intense fighting...");
9221 #endif
9222
9223                         (void)hp_player(10);
9224                         (void)set_afraid(0);
9225
9226                         /* Recalculate hitpoints */
9227                         p_ptr->update |= (PU_HP);
9228
9229                         start_singing(spell, MUSIC_HERO);
9230                 }
9231
9232                 if (stop)
9233                 {
9234                         if (!p_ptr->hero)
9235                         {
9236 #ifdef JP
9237                                 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9238 #else
9239                                 msg_print("The heroism wears off.");
9240 #endif
9241                                 /* Recalculate hitpoints */
9242                                 p_ptr->update |= (PU_HP);
9243                         }
9244                 }
9245
9246                 break;
9247
9248         case 8:
9249 #ifdef JP
9250                 if (name) return "ÎîŪÃγÐ";
9251                 if (desc) return "¶á¤¯¤Îæ«/Èâ/³¬Ãʤò´¶ÃΤ¹¤ë¡£¥ì¥Ù¥ë15¤ÇÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢20¤ÇºâÊõ¤È¥¢¥¤¥Æ¥à¤ò´¶ÃΤǤ­¤ë¤è¤¦¤Ë¤Ê¤ë¡£¥ì¥Ù¥ë25¤Ç¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ·¡¢40¤Ç¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆâ¤Î¤¹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤³¤Î¸ú²Ì¤Ï²Î¤¤Â³¤±¤ë¤³¤È¤Ç½ç¤Ëµ¯¤³¤ë¡£";
9252 #else
9253                 if (name) return "Clairaudience";
9254                 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.";
9255 #endif
9256     
9257                 /* Stop singing before start another */
9258                 if (cast || fail) stop_singing();
9259
9260                 if (cast)
9261                 {
9262 #ifdef JP
9263                         msg_print("ÀŤ«¤Ê²»³Ú¤¬´¶³Ð¤ò¸¦¤®À¡¤Þ¤µ¤»¤¿¡¥¡¥¡¥");
9264 #else
9265                         msg_print("Your quiet music sharpens your sense of hearing...");
9266 #endif
9267
9268                         /* Hack -- Initialize the turn count */
9269                         p_ptr->magic_num1[2] = 0;
9270
9271                         start_singing(spell, MUSIC_DETECT);
9272                 }
9273
9274                 {
9275                         int rad = DETECT_RAD_DEFAULT;
9276
9277                         if (info) return info_radius(rad);
9278
9279                         if (cont)
9280                         {
9281                                 int count = p_ptr->magic_num1[2];
9282
9283                                 if (count >= 19) wiz_lite(FALSE);
9284                                 if (count >= 11)
9285                                 {
9286                                         map_area(rad);
9287                                         if (plev > 39 && count < 19)
9288                                                 p_ptr->magic_num1[2] = count + 1;
9289                                 }
9290                                 if (count >= 6)
9291                                 {
9292                                         /* There are too many hidden treasure.  So... */
9293                                         /* detect_treasure(rad); */
9294                                         detect_objects_gold(rad);
9295                                         detect_objects_normal(rad);
9296
9297                                         if (plev > 24 && count < 11)
9298                                                 p_ptr->magic_num1[2] = count + 1;
9299                                 }
9300                                 if (count >= 3)
9301                                 {
9302                                         detect_monsters_invis(rad);
9303                                         detect_monsters_normal(rad);
9304
9305                                         if (plev > 19 && count < 6)
9306                                                 p_ptr->magic_num1[2] = count + 1;
9307                                 }
9308                                 detect_traps(rad, TRUE);
9309                                 detect_doors(rad);
9310                                 detect_stairs(rad);
9311
9312                                 if (plev > 14 && count < 3)
9313                                         p_ptr->magic_num1[2] = count + 1;
9314                         }
9315                 }
9316
9317                 break;
9318
9319         case 9:
9320 #ifdef JP
9321                 if (name) return "º²¤Î²Î";
9322                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆÀº¿À¹¶·â¤ò¹Ô¤¦¡£";
9323 #else
9324                 if (name) return "Soul Shriek";
9325                 if (desc) return "Damages all monsters in sight with PSI damages.";
9326 #endif
9327
9328                 /* Stop singing before start another */
9329                 if (cast || fail) stop_singing();
9330
9331                 if (cast)
9332                 {
9333 #ifdef JP
9334                         msg_print("Àº¿À¤òDZ¤¸¶Ê¤²¤ë²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
9335 #else
9336                         msg_print("You start singing a song of soul in pain...");
9337 #endif
9338                         start_singing(spell, MUSIC_PSI);
9339                 }
9340
9341                 {
9342                         int dice = 1;
9343                         int sides = plev * 3 / 2;
9344
9345                         if (info) return info_damage(dice, sides, 0);
9346
9347                         if (cont)
9348                         {
9349                                 project_hack(GF_PSI, damroll(dice, sides));
9350                         }
9351                 }
9352
9353                 break;
9354
9355         case 10:
9356 #ifdef JP
9357                 if (name) return "Ãμ±¤Î²Î";
9358                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¥Þ¥¹¤ÈÎÙ¤ê¤Î¥Þ¥¹¤ËÍî¤Á¤Æ¤¤¤ë¥¢¥¤¥Æ¥à¤ò´ÕÄꤹ¤ë¡£";
9359 #else
9360                 if (name) return "Song of Lore";
9361                 if (desc) return "Identifies all items which are in the adjacent squares.";
9362 #endif
9363     
9364                 /* Stop singing before start another */
9365                 if (cast || fail) stop_singing();
9366
9367                 if (cast)
9368                 {
9369 #ifdef JP
9370                         msg_print("¤³¤ÎÀ¤³¦¤ÎÃ챤¬Î®¤ì¹þ¤ó¤Ç¤­¤¿¡¥¡¥¡¥");
9371 #else
9372                         msg_print("You recall the rich lore of the world...");
9373 #endif
9374                         start_singing(spell, MUSIC_ID);
9375                 }
9376
9377                 {
9378                         int rad = 1;
9379
9380                         if (info) return info_radius(rad);
9381
9382                         /*
9383                          * ²Î¤Î³«»Ï»þ¤Ë¤â¸ú²Ìȯư¡§
9384                          * MPÉÔ­¤Ç´ÕÄ꤬ȯư¤µ¤ì¤ëÁ°¤Ë²Î¤¬ÃæÃǤ·¤Æ¤·¤Þ¤¦¤Î¤òËɻߡ£
9385                          */
9386                         if (cont || cast)
9387                         {
9388                                 project(0, rad, py, px, 0, GF_IDENTIFY, PROJECT_ITEM, -1);
9389                         }
9390                 }
9391
9392                 break;
9393
9394         case 11:
9395 #ifdef JP
9396                 if (name) return "±£ÆۤβÎ";
9397                 if (desc) return "±£Ì©¹ÔưǽÎϤò¾å¾º¤µ¤»¤ë¡£";
9398 #else
9399                 if (name) return "Hiding Tune";
9400                 if (desc) return "Gives improved stealth.";
9401 #endif
9402
9403                 /* Stop singing before start another */
9404                 if (cast || fail) stop_singing();
9405
9406                 if (cast)
9407                 {
9408 #ifdef JP
9409                         msg_print("¤¢¤Ê¤¿¤Î»Ñ¤¬·Ê¿§¤Ë¤È¤±¤³¤ó¤Ç¤¤¤Ã¤¿¡¥¡¥¡¥");
9410 #else
9411                         msg_print("Your song carries you beyond the sight of mortal eyes...");
9412 #endif
9413                         start_singing(spell, MUSIC_STEALTH);
9414                 }
9415
9416                 if (stop)
9417                 {
9418                         if (!p_ptr->tim_stealth)
9419                         {
9420 #ifdef JP
9421                                 msg_print("»Ñ¤¬¤Ï¤Ã¤­¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
9422 #else
9423                                 msg_print("You are no longer hided.");
9424 #endif
9425                         }
9426                 }
9427
9428                 break;
9429
9430         case 12:
9431 #ifdef JP
9432                 if (name) return "¸¸±Æ¤ÎÀûΧ";
9433                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òº®Í𤵤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9434 #else
9435                 if (name) return "Illusion Pattern";
9436                 if (desc) return "Attempts to confuse all monsters in sight.";
9437 #endif
9438     
9439                 /* Stop singing before start another */
9440                 if (cast || fail) stop_singing();
9441
9442                 if (cast)
9443                 {
9444 #ifdef JP
9445                         msg_print("ÊÕ¤ê°ìÌ̤˸¸±Æ¤¬¸½¤ì¤¿¡¥¡¥¡¥");
9446 #else
9447                         msg_print("You weave a pattern of sounds to beguile and confuse...");
9448 #endif
9449                         start_singing(spell, MUSIC_CONF);
9450                 }
9451
9452                 {
9453                         int power = plev * 2;
9454
9455                         if (info) return info_power(power);
9456
9457                         if (cont)
9458                         {
9459                                 confuse_monsters(power);
9460                         }
9461                 }
9462
9463                 break;
9464
9465         case 13:
9466 #ifdef JP
9467                 if (name) return "ÇËÌǤ櫤Ó";
9468                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤Æ¹ì²»¹¶·â¤ò¹Ô¤¦¡£";
9469 #else
9470                 if (name) return "Doomcall";
9471                 if (desc) return "Damages all monsters in sight with booming sound.";
9472 #endif
9473     
9474                 /* Stop singing before start another */
9475                 if (cast || fail) stop_singing();
9476
9477                 if (cast)
9478                 {
9479 #ifdef JP
9480                         msg_print("¹ì²»¤¬¶Á¤¤¤¿¡¥¡¥¡¥");
9481 #else
9482                         msg_print("The fury of the Downfall of Numenor lashes out...");
9483 #endif
9484                         start_singing(spell, MUSIC_SOUND);
9485                 }
9486
9487                 {
9488                         int dice = 10 + plev / 5;
9489                         int sides = 7;
9490
9491                         if (info) return info_damage(dice, sides, 0);
9492
9493                         if (cont)
9494                         {
9495                                 project_hack(GF_SOUND, damroll(dice, sides));
9496                         }
9497                 }
9498
9499                 break;
9500
9501         case 14:
9502 #ifdef JP
9503                 if (name) return "¥Õ¥£¥ê¥¨¥ë¤Î²Î";
9504                 if (desc) return "¼þ°Ï¤Î»àÂΤä¹ü¤òÀ¸¤­ÊÖ¤¹¡£";
9505 #else
9506                 if (name) return "Firiel's Song";
9507                 if (desc) return "Resurrects nearby corpse and skeletons. And makes these your pets.";
9508 #endif
9509     
9510                 {
9511                         /* Stop singing before start another */
9512                         if (cast || fail) stop_singing();
9513
9514                         if (cast)
9515                         {
9516 #ifdef JP
9517                                 msg_print("À¸Ì¿¤ÈÉü³è¤Î¥Æ¡¼¥Þ¤òÁդǻϤ᤿¡¥¡¥¡¥");
9518 #else
9519                                 msg_print("The themes of life and revival are woven into your song...");
9520 #endif
9521
9522                                 animate_dead(0, py, px);
9523                         }
9524                 }
9525                 break;
9526
9527         case 15:
9528 #ifdef JP
9529                 if (name) return "ι¤ÎÃç´Ö";
9530                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9531 #else
9532                 if (name) return "Fellowship Chant";
9533                 if (desc) return "Attempts to charm all monsters in sight.";
9534 #endif
9535
9536                 /* Stop singing before start another */
9537                 if (cast || fail) stop_singing();
9538
9539                 if (cast)
9540                 {
9541 #ifdef JP
9542                         msg_print("°Â¤é¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9543 #else
9544                         msg_print("You weave a slow, soothing melody of imploration...");
9545 #endif
9546                         start_singing(spell, MUSIC_CHARM);
9547                 }
9548
9549                 {
9550                         int dice = 10 + plev / 15;
9551                         int sides = 6;
9552
9553                         if (info) return info_power_dice(dice, sides);
9554
9555                         if (cont)
9556                         {
9557                                 charm_monsters(damroll(dice, sides));
9558                         }
9559                 }
9560
9561                 break;
9562
9563         case 16:
9564 #ifdef JP
9565                 if (name) return "ʬ²ò²»ÇÈ";
9566                 if (desc) return "Êɤò·¡¤ê¿Ê¤à¡£¼«Ê¬¤Î­¸µ¤Î¥¢¥¤¥Æ¥à¤Ï¾øȯ¤¹¤ë¡£";
9567 #else
9568                 if (name) return "Sound of disintegration";
9569                 if (desc) return "Turns all rocks in the adjacent squares to mud.";
9570 #endif
9571
9572                 /* Stop singing before start another */
9573                 if (cast || fail) stop_singing();
9574
9575                 if (cast)
9576                 {
9577 #ifdef JP
9578                         msg_print("Ê´ºÕ¤¹¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9579 #else
9580                         msg_print("You weave a violent pattern of sounds to break wall.");
9581 #endif
9582                         start_singing(spell, MUSIC_WALL);
9583                 }
9584
9585                 {
9586                         /*
9587                          * ²Î¤Î³«»Ï»þ¤Ë¤â¸ú²Ìȯư¡§
9588                          * MPÉÔ­¤Ç¸ú²Ì¤¬È¯Æ°¤µ¤ì¤ëÁ°¤Ë²Î¤¬ÃæÃǤ·¤Æ¤·¤Þ¤¦¤Î¤òËɻߡ£
9589                          */
9590                         if (cont || cast)
9591                         {
9592                                 project(0, 0, py, px,
9593                                         0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
9594                         }
9595                 }
9596                 break;
9597
9598         case 17:
9599 #ifdef JP
9600                 if (name) return "¸µÁÇÂÑÀ­";
9601                 if (desc) return "»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
9602 #else
9603                 if (name) return "Finrod's Resistance";
9604                 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.";
9605 #endif
9606     
9607                 /* Stop singing before start another */
9608                 if (cast || fail) stop_singing();
9609
9610                 if (cast)
9611                 {
9612 #ifdef JP
9613                         msg_print("¸µÁǤÎÎϤËÂФ¹¤ëǦÂѤβΤò²Î¤Ã¤¿¡£");
9614 #else
9615                         msg_print("You sing a song of perseverance against powers...");
9616 #endif
9617                         start_singing(spell, MUSIC_RESIST);
9618                 }
9619
9620                 if (stop)
9621                 {
9622                         if (!p_ptr->oppose_acid)
9623                         {
9624 #ifdef JP
9625                                 msg_print("»À¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9626 #else
9627                                 msg_print("You feel less resistant to acid.");
9628 #endif
9629                         }
9630
9631                         if (!p_ptr->oppose_elec)
9632                         {
9633 #ifdef JP
9634                                 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9635 #else
9636                                 msg_print("You feel less resistant to elec.");
9637 #endif
9638                         }
9639
9640                         if (!p_ptr->oppose_fire)
9641                         {
9642 #ifdef JP
9643                                 msg_print("²Ð¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9644 #else
9645                                 msg_print("You feel less resistant to fire.");
9646 #endif
9647                         }
9648
9649                         if (!p_ptr->oppose_cold)
9650                         {
9651 #ifdef JP
9652                                 msg_print("Î䵤¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9653 #else
9654                                 msg_print("You feel less resistant to cold.");
9655 #endif
9656                         }
9657
9658                         if (!p_ptr->oppose_pois)
9659                         {
9660 #ifdef JP
9661                                 msg_print("ÆǤؤÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9662 #else
9663                                 msg_print("You feel less resistant to pois.");
9664 #endif
9665                         }
9666                 }
9667
9668                 break;
9669
9670         case 18:
9671 #ifdef JP
9672                 if (name) return "¥Û¥Ó¥Ã¥È¤Î¥á¥í¥Ç¥£";
9673                 if (desc) return "²Ã®¤¹¤ë¡£";
9674 #else
9675                 if (name) return "Hobbit Melodies";
9676                 if (desc) return "Hastes you.";
9677 #endif
9678
9679                 /* Stop singing before start another */
9680                 if (cast || fail) stop_singing();
9681
9682                 if (cast)
9683                 {
9684 #ifdef JP
9685                         msg_print("·Ú²÷¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
9686 #else
9687                         msg_print("You start singing joyful pop song...");
9688 #endif
9689                         start_singing(spell, MUSIC_SPEED);
9690                 }
9691
9692                 if (stop)
9693                 {
9694                         if (!p_ptr->fast)
9695                         {
9696 #ifdef JP
9697                                 msg_print("Æ°¤­¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
9698 #else
9699                                 msg_print("You feel yourself slow down.");
9700 #endif
9701                         }
9702                 }
9703
9704                 break;
9705
9706         case 19:
9707 #ifdef JP
9708                 if (name) return "ÏĤó¤ÀÀ¤³¦";
9709                 if (desc) return "¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9710 #else
9711                 if (name) return "World Contortion";
9712                 if (desc) return "Teleports all nearby monsters away unless resisted.";
9713 #endif
9714     
9715                 {
9716                         int rad = plev / 15 + 1;
9717                         int power = plev * 3 + 1;
9718
9719                         if (info) return info_radius(rad);
9720
9721                         /* Stop singing before start another */
9722                         if (cast || fail) stop_singing();
9723
9724                         if (cast)
9725                         {
9726 #ifdef JP
9727                                 msg_print("²Î¤¬¶õ´Ö¤òÏĤ᤿¡¥¡¥¡¥");
9728 #else
9729                                 msg_print("Reality whirls wildly as you sing a dizzying melody...");
9730 #endif
9731
9732                                 project(0, rad, py, px, power, GF_AWAY_ALL, PROJECT_KILL, -1);
9733                         }
9734                 }
9735                 break;
9736
9737         case 20:
9738 #ifdef JP
9739                 if (name) return "Â໶¤Î²Î";
9740                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÆäËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
9741 #else
9742                 if (name) return "Dispelling chant";
9743                 if (desc) return "Damages all monsters in sight. Hurts evil monsters greatly.";
9744 #endif
9745     
9746                 /* Stop singing before start another */
9747                 if (cast || fail) stop_singing();
9748
9749                 if (cast)
9750                 {
9751 #ifdef JP
9752                         msg_print("ÂѤ¨¤é¤ì¤Ê¤¤ÉÔ¶¨Ï²»¤¬Å¨¤òÀÕ¤áΩ¤Æ¤¿¡¥¡¥¡¥");
9753 #else
9754                         msg_print("You cry out in an ear-wracking voice...");
9755 #endif
9756                         start_singing(spell, MUSIC_DISPEL);
9757                 }
9758
9759                 {
9760                         int m_sides = plev * 3;
9761                         int e_sides = plev * 3;
9762
9763                         if (info) return format("%s1d%d+1d%d", s_dam, m_sides, e_sides);
9764
9765                         if (cont)
9766                         {
9767                                 dispel_monsters(randint1(m_sides));
9768                                 dispel_evil(randint1(e_sides));
9769                         }
9770                 }
9771                 break;
9772
9773         case 21:
9774 #ifdef JP
9775                 if (name) return "¥µ¥ë¥Þ¥ó¤Î´Å¸À";
9776                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¡¢Ì²¤é¤»¤è¤¦¤È¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9777 #else
9778                 if (name) return "The Voice of Saruman";
9779                 if (desc) return "Attempts to slow and sleep all monsters in sight.";
9780 #endif
9781     
9782                 /* Stop singing before start another */
9783                 if (cast || fail) stop_singing();
9784
9785                 if (cast)
9786                 {
9787 #ifdef JP
9788                         msg_print("Í¥¤·¤¯¡¢Ì¥ÎÏŪ¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
9789 #else
9790                         msg_print("You start humming a gentle and attractive song...");
9791 #endif
9792                         start_singing(spell, MUSIC_SARUMAN);
9793                 }
9794
9795                 {
9796                         int power = plev;
9797
9798                         if (info) return info_power(power);
9799
9800                         if (cont)
9801                         {
9802                                 slow_monsters();
9803                                 sleep_monsters();
9804                         }
9805                 }
9806
9807                 break;
9808
9809         case 22:
9810 #ifdef JP
9811                 if (name) return "Íò¤Î²»¿§";
9812                 if (desc) return "¹ì²»¤Î¥Ó¡¼¥à¤òÊü¤Ä¡£";
9813 #else
9814                 if (name) return "Song of the Tempest";
9815                 if (desc) return "Fires a beam of sound.";
9816 #endif
9817     
9818                 {
9819                         int dice = 15 + (plev - 1) / 2;
9820                         int sides = 10;
9821
9822                         if (info) return info_damage(dice, sides, 0);
9823
9824                         /* Stop singing before start another */
9825                         if (cast || fail) stop_singing();
9826
9827                         if (cast)
9828                         {
9829                                 if (!get_aim_dir(&dir)) return NULL;
9830
9831                                 fire_beam(GF_SOUND, dir, damroll(dice, sides));
9832                         }
9833                 }
9834                 break;
9835
9836         case 23:
9837 #ifdef JP
9838                 if (name) return "¤â¤¦°ì¤Ä¤ÎÀ¤³¦";
9839                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
9840 #else
9841                 if (name) return "Ambarkanta";
9842                 if (desc) return "Recreates current dungeon level.";
9843 #endif
9844     
9845                 {
9846                         int base = 15;
9847                         int sides = 20;
9848
9849                         if (info) return info_delay(base, sides);
9850
9851                         /* Stop singing before start another */
9852                         if (cast || fail) stop_singing();
9853
9854                         if (cast)
9855                         {
9856 #ifdef JP
9857                                 msg_print("¼þ°Ï¤¬ÊѲ½¤·»Ï¤á¤¿¡¥¡¥¡¥");
9858 #else
9859                                 msg_print("You sing of the primeval shaping of Middle-earth...");
9860 #endif
9861
9862                                 alter_reality();
9863                         }
9864                 }
9865                 break;
9866
9867         case 24:
9868 #ifdef JP
9869                 if (name) return "Ç˲õ¤ÎÀûΧ";
9870                 if (desc) return "¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÍɤ餷¡¢ÊɤȾ²¤ò¥é¥ó¥À¥à¤ËÆþ¤ìÊѤ¨¤ë¡£";
9871 #else
9872                 if (name) return "Wrecking Pattern";
9873                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
9874 #endif
9875
9876                 /* Stop singing before start another */
9877                 if (cast || fail) stop_singing();
9878
9879                 if (cast)
9880                 {
9881 #ifdef JP
9882                         msg_print("Ç˲õŪ¤Ê²Î¤¬¶Á¤­¤ï¤¿¤Ã¤¿¡¥¡¥¡¥");
9883 #else
9884                         msg_print("You weave a pattern of sounds to contort and shatter...");
9885 #endif
9886                         start_singing(spell, MUSIC_QUAKE);
9887                 }
9888
9889                 {
9890                         int rad = 10;
9891
9892                         if (info) return info_radius(rad);
9893
9894                         if (cont)
9895                         {
9896                                 earthquake(py, px, 10);
9897                         }
9898                 }
9899
9900                 break;
9901
9902
9903         case 25:
9904 #ifdef JP
9905                 if (name) return "ÄäÂڤβÎ";
9906                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òËãá㤵¤»¤è¤¦¤È¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9907 #else
9908                 if (name) return "Stationary Shriek";
9909                 if (desc) return "Attempts to freeze all monsters in sight.";
9910 #endif
9911     
9912                 /* Stop singing before start another */
9913                 if (cast || fail) stop_singing();
9914
9915                 if (cast)
9916                 {
9917 #ifdef JP
9918                         msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9919 #else
9920                         msg_print("You weave a very slow pattern which is almost likely to stop...");
9921 #endif
9922                         start_singing(spell, MUSIC_STASIS);
9923                 }
9924
9925                 {
9926                         int power = plev * 4;
9927
9928                         if (info) return info_power(power);
9929
9930                         if (cont)
9931                         {
9932                                 stasis_monsters(power);
9933                         }
9934                 }
9935
9936                 break;
9937
9938         case 26:
9939 #ifdef JP
9940                 if (name) return "¼é¤ê¤Î²Î";
9941                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
9942 #else
9943                 if (name) return "Endurance";
9944                 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.";
9945 #endif
9946     
9947                 {
9948                         /* Stop singing before start another */
9949                         if (cast || fail) stop_singing();
9950
9951                         if (cast)
9952                         {
9953 #ifdef JP
9954                                 msg_print("²Î¤¬¿ÀÀ»¤Ê¾ì¤òºî¤ê½Ð¤·¤¿¡¥¡¥¡¥");
9955 #else
9956                                 msg_print("The holy power of the Music is creating sacred field...");
9957 #endif
9958
9959                                 warding_glyph();
9960                         }
9961                 }
9962                 break;
9963
9964         case 27:
9965 #ifdef JP
9966                 if (name) return "±Ñͺ¤Î»í";
9967                 if (desc) return "²Ã®¤·¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ê¡¢»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
9968 #else
9969                 if (name) return "The Hero's Poem";
9970                 if (desc) return "Hastes you. Gives heroism. Damages all monsters in sight.";
9971 #endif
9972     
9973                 /* Stop singing before start another */
9974                 if (cast || fail) stop_singing();
9975
9976                 if (cast)
9977                 {
9978 #ifdef JP
9979                         msg_print("±Ñͺ¤Î²Î¤ò¸ý¤º¤µ¤ó¤À¡¥¡¥¡¥");
9980 #else
9981                         msg_print("You chant a powerful, heroic call to arms...");
9982 #endif
9983                         (void)hp_player(10);
9984                         (void)set_afraid(0);
9985
9986                         /* Recalculate hitpoints */
9987                         p_ptr->update |= (PU_HP);
9988
9989                         start_singing(spell, MUSIC_SHERO);
9990                 }
9991
9992                 if (stop)
9993                 {
9994                         if (!p_ptr->hero)
9995                         {
9996 #ifdef JP
9997                                 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9998 #else
9999                                 msg_print("The heroism wears off.");
10000 #endif
10001                                 /* Recalculate hitpoints */
10002                                 p_ptr->update |= (PU_HP);
10003                         }
10004
10005                         if (!p_ptr->fast)
10006                         {
10007 #ifdef JP
10008                                 msg_print("Æ°¤­¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
10009 #else
10010                                 msg_print("You feel yourself slow down.");
10011 #endif
10012                         }
10013                 }
10014
10015                 {
10016                         int dice = 1;
10017                         int sides = plev * 3;
10018
10019                         if (info) return info_damage(dice, sides, 0);
10020
10021                         if (cont)
10022                         {
10023                                 dispel_monsters(damroll(dice, sides));
10024                         }
10025                 }
10026                 break;
10027
10028         case 28:
10029 #ifdef JP
10030                 if (name) return "¥ä¥ô¥¡¥ó¥Ê¤Î½õ¤±";
10031                 if (desc) return "¶¯ÎϤʲóÉü¤Î²Î¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
10032 #else
10033                 if (name) return "Relief of Yavanna";
10034                 if (desc) return "Powerful healing song. Also heals cut and stun completely.";
10035 #endif
10036     
10037                 /* Stop singing before start another */
10038                 if (cast || fail) stop_singing();
10039
10040                 if (cast)
10041                 {
10042 #ifdef JP
10043                         msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤­¤¿¡¥¡¥¡¥");
10044 #else
10045                         msg_print("Life flows through you as you sing the song...");
10046 #endif
10047                         start_singing(spell, MUSIC_H_LIFE);
10048                 }
10049
10050                 {
10051                         int dice = 15;
10052                         int sides = 10;
10053
10054                         if (info) return info_heal(dice, sides, 0);
10055
10056                         if (cont)
10057                         {
10058                                 hp_player(damroll(dice, sides));
10059                                 set_stun(0);
10060                                 set_cut(0);
10061                         }
10062                 }
10063
10064                 break;
10065
10066         case 29:
10067 #ifdef JP
10068                 if (name) return "ºÆÀ¸¤Î²Î";
10069                 if (desc) return "¤¹¤Ù¤Æ¤Î¥¹¥Æ¡¼¥¿¥¹¤È·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
10070 #else
10071                 if (name) return "Goddess' rebirth";
10072                 if (desc) return "Restores all stats and experience.";
10073 #endif
10074     
10075                 {
10076                         /* Stop singing before start another */
10077                         if (cast || fail) stop_singing();
10078
10079                         if (cast)
10080                         {
10081 #ifdef JP
10082                                 msg_print("°Å¹õ¤ÎÃæ¤Ë¸÷¤ÈÈþ¤ò¤Õ¤ê¤Þ¤¤¤¿¡£ÂΤ¬¸µ¤Î³èÎϤò¼è¤êÌᤷ¤¿¡£");
10083 #else
10084                                 msg_print("You strewed light and beauty in the dark as you sing. You feel refreshed.");
10085 #endif
10086                                 (void)do_res_stat(A_STR);
10087                                 (void)do_res_stat(A_INT);
10088                                 (void)do_res_stat(A_WIS);
10089                                 (void)do_res_stat(A_DEX);
10090                                 (void)do_res_stat(A_CON);
10091                                 (void)do_res_stat(A_CHR);
10092                                 (void)restore_level();
10093                         }
10094                 }
10095                 break;
10096
10097         case 30:
10098 #ifdef JP
10099                 if (name) return "¥µ¥¦¥í¥ó¤ÎËâ½Ñ";
10100                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤǤ´¤¯¾®¤µ¤¤¹ì²»¤Îµå¤òÊü¤Ä¡£";
10101 #else
10102                 if (name) return "Wizardry of Sauron";
10103                 if (desc) return "Fires an extremely powerful tiny ball of sound.";
10104 #endif
10105     
10106                 {
10107                         int dice = 50 + plev;
10108                         int sides = 10;
10109                         int rad = 0;
10110
10111                         if (info) return info_damage(dice, sides, 0);
10112
10113                         /* Stop singing before start another */
10114                         if (cast || fail) stop_singing();
10115
10116                         if (cast)
10117                         {
10118                                 if (!get_aim_dir(&dir)) return NULL;
10119
10120                                 fire_ball(GF_SOUND, dir, damroll(dice, sides), rad);
10121                         }
10122                 }
10123                 break;
10124
10125         case 31:
10126 #ifdef JP
10127                 if (name) return "¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤ÎÄ©Àï";
10128                 if (desc) return "¥À¥á¡¼¥¸¤ò¼õ¤±¤Ê¤¯¤Ê¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
10129 #else
10130                 if (name) return "Fingolfin's Challenge";
10131                 if (desc) return "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks.";
10132 #endif
10133     
10134                 /* Stop singing before start another */
10135                 if (cast || fail) stop_singing();
10136
10137                 if (cast)
10138                 {
10139 #ifdef JP
10140                                 msg_print("¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤Î̽²¦¤Ø¤ÎÄ©Àï¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
10141 #else
10142                                 msg_print("You recall the valor of Fingolfin's challenge to the Dark Lord...");
10143 #endif
10144
10145                                 /* Redraw map */
10146                                 p_ptr->redraw |= (PR_MAP);
10147                 
10148                                 /* Update monsters */
10149                                 p_ptr->update |= (PU_MONSTERS);
10150                 
10151                                 /* Window stuff */
10152                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
10153
10154                                 start_singing(spell, MUSIC_INVULN);
10155                 }
10156
10157                 if (stop)
10158                 {
10159                         if (!p_ptr->invuln)
10160                         {
10161 #ifdef JP
10162                                 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
10163 #else
10164                                 msg_print("The invulnerability wears off.");
10165 #endif
10166                                 /* Redraw map */
10167                                 p_ptr->redraw |= (PR_MAP);
10168
10169                                 /* Update monsters */
10170                                 p_ptr->update |= (PU_MONSTERS);
10171
10172                                 /* Window stuff */
10173                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
10174                         }
10175                 }
10176
10177                 break;
10178         }
10179
10180         return "";
10181 }
10182
10183
10184 static cptr do_hissatsu_spell(int spell, int mode)
10185 {
10186         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
10187         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
10188         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
10189
10190         int dir;
10191         int plev = p_ptr->lev;
10192
10193         switch (spell)
10194         {
10195         case 0:
10196 #ifdef JP
10197                 if (name) return "ÈôÈÓ¹Ë";
10198                 if (desc) return "2¥Þ¥¹Î¥¤ì¤¿¤È¤³¤í¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¡£";
10199 #else
10200                 if (name) return "Tobi-Izuna";
10201                 if (desc) return "Attacks a two squares distant monster.";
10202 #endif
10203     
10204                 if (cast)
10205                 {
10206                         project_length = 2;
10207                         if (!get_aim_dir(&dir)) return NULL;
10208
10209                         project_hook(GF_ATTACK, dir, HISSATSU_2, PROJECT_STOP | PROJECT_KILL);
10210                 }
10211                 break;
10212
10213         case 1:
10214 #ifdef JP
10215                 if (name) return "¸Þ·î±«»Â¤ê";
10216                 if (desc) return "3Êý¸þ¤ËÂФ·¤Æ¹¶·â¤¹¤ë¡£";
10217 #else
10218                 if (name) return "3-Way Attack";
10219                 if (desc) return "Attacks in 3 directions in one time.";
10220 #endif
10221     
10222                 if (cast)
10223                 {
10224                         int cdir;
10225                         int y, x;
10226
10227                         if (!get_rep_dir2(&dir)) return NULL;
10228                         if (dir == 5) return NULL;
10229
10230                         for (cdir = 0;cdir < 8; cdir++)
10231                         {
10232                                 if (cdd[cdir] == dir) break;
10233                         }
10234
10235                         if (cdir == 8) return NULL;
10236
10237                         y = py + ddy_cdd[cdir];
10238                         x = px + ddx_cdd[cdir];
10239                         if (cave[y][x].m_idx)
10240                                 py_attack(y, x, 0);
10241                         else
10242 #ifdef JP
10243                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10244 #else
10245                                 msg_print("You attack the empty air.");
10246 #endif
10247                         y = py + ddy_cdd[(cdir + 7) % 8];
10248                         x = px + ddx_cdd[(cdir + 7) % 8];
10249                         if (cave[y][x].m_idx)
10250                                 py_attack(y, x, 0);
10251                         else
10252 #ifdef JP
10253                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10254 #else
10255                                 msg_print("You attack the empty air.");
10256 #endif
10257                         y = py + ddy_cdd[(cdir + 1) % 8];
10258                         x = px + ddx_cdd[(cdir + 1) % 8];
10259                         if (cave[y][x].m_idx)
10260                                 py_attack(y, x, 0);
10261                         else
10262 #ifdef JP
10263                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10264 #else
10265                                 msg_print("You attack the empty air.");
10266 #endif
10267                 }
10268                 break;
10269
10270         case 2:
10271 #ifdef JP
10272                 if (name) return "¥Ö¡¼¥á¥é¥ó";
10273                 if (desc) return "Éð´ï¤ò¼ê¸µ¤ËÌá¤Ã¤Æ¤¯¤ë¤è¤¦¤ËÅꤲ¤ë¡£Ìá¤Ã¤Æ¤³¤Ê¤¤¤³¤È¤â¤¢¤ë¡£";
10274 #else
10275                 if (name) return "Boomerang";
10276                 if (desc) return "Throws current weapon. And it'll return to your hand unless failed.";
10277 #endif
10278     
10279                 if (cast)
10280                 {
10281                         if (!do_cmd_throw_aux(1, TRUE, 0)) return NULL;
10282                 }
10283                 break;
10284
10285         case 3:
10286 #ifdef JP
10287                 if (name) return "±ëÎî";
10288                 if (desc) return "²Ð±êÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10289 #else
10290                 if (name) return "Burning Strike";
10291                 if (desc) return "Attacks a monster with more damage unless it has resistance to fire.";
10292 #endif
10293     
10294                 if (cast)
10295                 {
10296                         int y, x;
10297
10298                         if (!get_rep_dir2(&dir)) return NULL;
10299                         if (dir == 5) return NULL;
10300
10301                         y = py + ddy[dir];
10302                         x = px + ddx[dir];
10303
10304                         if (cave[y][x].m_idx)
10305                                 py_attack(y, x, HISSATSU_FIRE);
10306                         else
10307                         {
10308 #ifdef JP
10309                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10310 #else
10311                                 msg_print("There is no monster.");
10312 #endif
10313                                 return NULL;
10314                         }
10315                 }
10316                 break;
10317
10318         case 4:
10319 #ifdef JP
10320                 if (name) return "»¦µ¤´¶ÃÎ";
10321                 if (desc) return "¶á¤¯¤Î»×¹Í¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
10322 #else
10323                 if (name) return "Detect Ferocity";
10324                 if (desc) return "Detects all monsters except mindless in your vicinity.";
10325 #endif
10326     
10327                 if (cast)
10328                 {
10329                         detect_monsters_mind(DETECT_RAD_DEFAULT);
10330                 }
10331                 break;
10332
10333         case 5:
10334 #ifdef JP
10335                 if (name) return "¤ß¤ÍÂǤÁ";
10336                 if (desc) return "Áê¼ê¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤Ê¤¤¤¬¡¢Û¯Û°¤È¤µ¤»¤ë¡£";
10337 #else
10338                 if (name) return "Strike to Stun";
10339                 if (desc) return "Attempts to stun a monster in the adjacent.";
10340 #endif
10341     
10342                 if (cast)
10343                 {
10344                         int y, x;
10345
10346                         if (!get_rep_dir2(&dir)) return NULL;
10347                         if (dir == 5) return NULL;
10348
10349                         y = py + ddy[dir];
10350                         x = px + ddx[dir];
10351
10352                         if (cave[y][x].m_idx)
10353                                 py_attack(y, x, HISSATSU_MINEUCHI);
10354                         else
10355                         {
10356 #ifdef JP
10357                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10358 #else
10359                                 msg_print("There is no monster.");
10360 #endif
10361                                 return NULL;
10362                         }
10363                 }
10364                 break;
10365
10366         case 6:
10367 #ifdef JP
10368                 if (name) return "¥«¥¦¥ó¥¿¡¼";
10369                 if (desc) return "Áê¼ê¤Ë¹¶·â¤µ¤ì¤¿¤È¤­¤ËÈ¿·â¤¹¤ë¡£È¿·â¤¹¤ë¤¿¤Ó¤ËMP¤ò¾ÃÈñ¡£";
10370 #else
10371                 if (name) return "Counter";
10372                 if (desc) return "Prepares to counterattack. When attack by a monster, strikes back using SP each time.";
10373 #endif
10374     
10375                 if (cast)
10376                 {
10377                         if (p_ptr->riding)
10378                         {
10379 #ifdef JP
10380                                 msg_print("¾èÇÏÃæ¤Ë¤Ï̵Íý¤À¡£");
10381 #else
10382                                 msg_print("You cannot do it when riding.");
10383 #endif
10384                                 return NULL;
10385                         }
10386 #ifdef JP
10387                         msg_print("Áê¼ê¤Î¹¶·â¤ËÂФ·¤Æ¿È¹½¤¨¤¿¡£");
10388 #else
10389                         msg_print("You prepare to counter blow.");
10390 #endif
10391                         p_ptr->counter = TRUE;
10392                 }
10393                 break;
10394
10395         case 7:
10396 #ifdef JP
10397                 if (name) return "ʧ¤¤È´¤±";
10398                 if (desc) return "¹¶·â¤·¤¿¸å¡¢È¿ÂЦ¤ËÈ´¤±¤ë¡£";
10399 #else
10400                 if (name) return "Harainuke";
10401                 if (desc) return "Attacks monster with your weapons normally, then move through counter side of the monster.";
10402 #endif
10403     
10404                 if (cast)
10405                 {
10406                         int y, x;
10407
10408                         if (p_ptr->riding)
10409                         {
10410 #ifdef JP
10411                                 msg_print("¾èÇÏÃæ¤Ë¤Ï̵Íý¤À¡£");
10412 #else
10413                                 msg_print("You cannot do it when riding.");
10414 #endif
10415                                 return NULL;
10416                         }
10417         
10418                         if (!get_rep_dir2(&dir)) return NULL;
10419         
10420                         if (dir == 5) return NULL;
10421                         y = py + ddy[dir];
10422                         x = px + ddx[dir];
10423         
10424                         if (!cave[y][x].m_idx)
10425                         {
10426 #ifdef JP
10427                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10428 #else
10429                                 msg_print("There is no monster.");
10430 #endif
10431                                 return NULL;
10432                         }
10433         
10434                         py_attack(y, x, 0);
10435         
10436                         if (!player_can_enter(cave[y][x].feat, 0) || is_trap(cave[y][x].feat))
10437                                 break;
10438         
10439                         y += ddy[dir];
10440                         x += ddx[dir];
10441         
10442                         if (player_can_enter(cave[y][x].feat, 0) && !is_trap(cave[y][x].feat) && !cave[y][x].m_idx)
10443                         {
10444                                 msg_print(NULL);
10445         
10446                                 /* Move the player */
10447                                 (void)move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
10448                         }
10449                 }
10450                 break;
10451
10452         case 8:
10453 #ifdef JP
10454                 if (name) return "¥µ¡¼¥Ú¥ó¥Ä¥¿¥ó";
10455                 if (desc) return "ÆÇÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10456 #else
10457                 if (name) return "Serpent's Tongue";
10458                 if (desc) return "Attacks a monster with more damage unless it has resistance to poison.";
10459 #endif
10460     
10461                 if (cast)
10462                 {
10463                         int y, x;
10464
10465                         if (!get_rep_dir2(&dir)) return NULL;
10466                         if (dir == 5) return NULL;
10467
10468                         y = py + ddy[dir];
10469                         x = px + ddx[dir];
10470
10471                         if (cave[y][x].m_idx)
10472                                 py_attack(y, x, HISSATSU_POISON);
10473                         else
10474                         {
10475 #ifdef JP
10476                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10477 #else
10478                                 msg_print("There is no monster.");
10479 #endif
10480                                 return NULL;
10481                         }
10482                 }
10483                 break;
10484
10485         case 9:
10486 #ifdef JP
10487                 if (name) return "»ÂËâ·õÆõ¤ÎÂÀÅá";
10488                 if (desc) return "À¸Ì¿¤Î¤Ê¤¤¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤¬¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤ÏÁ´¤¯¸ú²Ì¤¬¤Ê¤¤¡£";
10489 #else
10490                 if (name) return "Zammaken";
10491                 if (desc) return "Attacks an evil unliving monster with great damage. No effect to other  monsters.";
10492 #endif
10493     
10494                 if (cast)
10495                 {
10496                         int y, x;
10497
10498                         if (!get_rep_dir2(&dir)) return NULL;
10499                         if (dir == 5) return NULL;
10500
10501                         y = py + ddy[dir];
10502                         x = px + ddx[dir];
10503
10504                         if (cave[y][x].m_idx)
10505                                 py_attack(y, x, HISSATSU_ZANMA);
10506                         else
10507                         {
10508 #ifdef JP
10509                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10510 #else
10511                                 msg_print("There is no monster.");
10512 #endif
10513                                 return NULL;
10514                         }
10515                 }
10516                 break;
10517
10518         case 10:
10519 #ifdef JP
10520                 if (name) return "ÎöÉ÷·õ";
10521                 if (desc) return "¹¶·â¤·¤¿Áê¼ê¤ò¸åÊý¤Ø¿á¤­Èô¤Ð¤¹¡£";
10522 #else
10523                 if (name) return "Wind Blast";
10524                 if (desc) return "Attacks an adjacent monster, and blow it away.";
10525 #endif
10526     
10527                 if (cast)
10528                 {
10529                         int y, x;
10530
10531                         if (!get_rep_dir2(&dir)) return NULL;
10532                         if (dir == 5) return NULL;
10533
10534                         y = py + ddy[dir];
10535                         x = px + ddx[dir];
10536
10537                         if (cave[y][x].m_idx)
10538                                 py_attack(y, x, 0);
10539                         else
10540                         {
10541 #ifdef JP
10542                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10543 #else
10544                                 msg_print("There is no monster.");
10545 #endif
10546                                 return NULL;
10547                         }
10548                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
10549                         {
10550                                 return "";
10551                         }
10552                         if (cave[y][x].m_idx)
10553                         {
10554                                 int i;
10555                                 int ty = y, tx = x;
10556                                 int oy = y, ox = x;
10557                                 int m_idx = cave[y][x].m_idx;
10558                                 monster_type *m_ptr = &m_list[m_idx];
10559                                 char m_name[80];
10560         
10561                                 monster_desc(m_name, m_ptr, 0);
10562         
10563                                 for (i = 0; i < 5; i++)
10564                                 {
10565                                         y += ddy[dir];
10566                                         x += ddx[dir];
10567                                         if (cave_empty_bold(y, x))
10568                                         {
10569                                                 ty = y;
10570                                                 tx = x;
10571                                         }
10572                                         else break;
10573                                 }
10574                                 if ((ty != oy) || (tx != ox))
10575                                 {
10576 #ifdef JP
10577                                         msg_format("%s¤ò¿á¤­Èô¤Ð¤·¤¿¡ª", m_name);
10578 #else
10579                                         msg_format("You blow %s away!", m_name);
10580 #endif
10581                                         cave[oy][ox].m_idx = 0;
10582                                         cave[ty][tx].m_idx = m_idx;
10583                                         m_ptr->fy = ty;
10584                                         m_ptr->fx = tx;
10585         
10586                                         update_mon(m_idx, TRUE);
10587                                         lite_spot(oy, ox);
10588                                         lite_spot(ty, tx);
10589         
10590                                         if (r_info[m_ptr->r_idx].flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
10591                                                 p_ptr->update |= (PU_MON_LITE);
10592                                 }
10593                         }
10594                 }
10595                 break;
10596
10597         case 11:
10598 #ifdef JP
10599                 if (name) return "Åá¾¢¤ÎÌÜÍø¤­";
10600                 if (desc) return "Éð´ï¡¦Ëɶñ¤ò1¤Ä¼±Ê̤¹¤ë¡£¥ì¥Ù¥ë45°Ê¾å¤ÇÉð´ï¡¦Ëɶñ¤ÎǽÎϤò´°Á´¤ËÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£";
10601 #else
10602                 if (name) return "Judge";
10603                 if (desc) return "Identifies a weapon or armor. Or *identifies* these at level 45.";
10604 #endif
10605     
10606                 if (cast)
10607                 {
10608                         if (plev > 44)
10609                         {
10610                                 if (!identify_fully(TRUE)) return NULL;
10611                         }
10612                         else
10613                         {
10614                                 if (!ident_spell(TRUE)) return NULL;
10615                         }
10616                 }
10617                 break;
10618
10619         case 12:
10620 #ifdef JP
10621                 if (name) return "ÇË´ä»Â";
10622                 if (desc) return "´ä¤ò²õ¤·¡¢´äÀзϤΥâ¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10623 #else
10624                 if (name) return "Rock Smash";
10625                 if (desc) return "Breaks rock. Or greatly damage a monster made by rocks.";
10626 #endif
10627     
10628                 if (cast)
10629                 {
10630                         int y, x;
10631
10632                         if (!get_rep_dir2(&dir)) return NULL;
10633                         if (dir == 5) return NULL;
10634
10635                         y = py + ddy[dir];
10636                         x = px + ddx[dir];
10637
10638                         if (cave[y][x].m_idx)
10639                                 py_attack(y, x, HISSATSU_HAGAN);
10640         
10641                         if (!cave_have_flag_bold(y, x, FF_HURT_ROCK)) break;
10642         
10643                         /* Destroy the feature */
10644                         cave_alter_feat(y, x, FF_HURT_ROCK);
10645         
10646                         /* Update some things */
10647                         p_ptr->update |= (PU_FLOW);
10648                 }
10649                 break;
10650
10651         case 13:
10652 #ifdef JP
10653                 if (name) return "Íð¤ìÀã·î²Ö";
10654                 if (desc) return "¹¶·â²ó¿ô¤¬Áý¤¨¡¢Î䵤ÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10655 #else
10656                 if (name) return "Midare-Setsugekka";
10657                 if (desc) return "Attacks a monster with increased number of attacks and more damage unless it has resistance to cold.";
10658 #endif
10659     
10660                 if (cast)
10661                 {
10662                         int y, x;
10663
10664                         if (!get_rep_dir2(&dir)) return NULL;
10665                         if (dir == 5) return NULL;
10666
10667                         y = py + ddy[dir];
10668                         x = px + ddx[dir];
10669
10670                         if (cave[y][x].m_idx)
10671                                 py_attack(y, x, HISSATSU_COLD);
10672                         else
10673                         {
10674 #ifdef JP
10675                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10676 #else
10677                                 msg_print("There is no monster.");
10678 #endif
10679                                 return NULL;
10680                         }
10681                 }
10682                 break;
10683
10684         case 14:
10685 #ifdef JP
10686                 if (name) return "µÞ½êÆͤ­";
10687                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò°ì·â¤ÇÅݤ¹¹¶·â¤ò·«¤ê½Ð¤¹¡£¼ºÇÔ¤¹¤ë¤È1ÅÀ¤·¤«¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤Ê¤¤¡£";
10688 #else
10689                 if (name) return "Spot Aiming";
10690                 if (desc) return "Attempts to kill a monster instantly. If failed cause only 1HP of damage.";
10691 #endif
10692     
10693                 if (cast)
10694                 {
10695                         int y, x;
10696
10697                         if (!get_rep_dir2(&dir)) return NULL;
10698                         if (dir == 5) return NULL;
10699
10700                         y = py + ddy[dir];
10701                         x = px + ddx[dir];
10702
10703                         if (cave[y][x].m_idx)
10704                                 py_attack(y, x, HISSATSU_KYUSHO);
10705                         else
10706                         {
10707 #ifdef JP
10708                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10709 #else
10710                                 msg_print("There is no monster.");
10711 #endif
10712                                 return NULL;
10713                         }
10714                 }
10715                 break;
10716
10717         case 15:
10718 #ifdef JP
10719                 if (name) return "Ëâ¿À»Â¤ê";
10720                 if (desc) return "²ñ¿´¤Î°ì·â¤Ç¹¶·â¤¹¤ë¡£¹¶·â¤¬¤«¤ï¤µ¤ì¤ä¤¹¤¤¡£";
10721 #else
10722                 if (name) return "Majingiri";
10723                 if (desc) return "Attempts to attack with critical hit. But this attack is easy to evade for a monster.";
10724 #endif
10725     
10726                 if (cast)
10727                 {
10728                         int y, x;
10729
10730                         if (!get_rep_dir2(&dir)) return NULL;
10731                         if (dir == 5) return NULL;
10732
10733                         y = py + ddy[dir];
10734                         x = px + ddx[dir];
10735
10736                         if (cave[y][x].m_idx)
10737                                 py_attack(y, x, HISSATSU_MAJIN);
10738                         else
10739                         {
10740 #ifdef JP
10741                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10742 #else
10743                                 msg_print("There is no monster.");
10744 #endif
10745                                 return NULL;
10746                         }
10747                 }
10748                 break;
10749
10750         case 16:
10751 #ifdef JP
10752                 if (name) return "¼Î¤Æ¿È";
10753                 if (desc) return "¶¯ÎϤʹ¶·â¤ò·«¤ê½Ð¤¹¡£¼¡¤Î¥¿¡¼¥ó¤Þ¤Ç¤Î´Ö¡¢¿©¤é¤¦¥À¥á¡¼¥¸¤¬Áý¤¨¤ë¡£";
10754 #else
10755                 if (name) return "Desperate Attack";
10756                 if (desc) return "Attacks with all of your power. But all damages you take will be doubled for one turn.";
10757 #endif
10758     
10759                 if (cast)
10760                 {
10761                         int y, x;
10762
10763                         if (!get_rep_dir2(&dir)) return NULL;
10764                         if (dir == 5) return NULL;
10765
10766                         y = py + ddy[dir];
10767                         x = px + ddx[dir];
10768
10769                         if (cave[y][x].m_idx)
10770                                 py_attack(y, x, HISSATSU_SUTEMI);
10771                         else
10772                         {
10773 #ifdef JP
10774                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10775 #else
10776                                 msg_print("There is no monster.");
10777 #endif
10778                                 return NULL;
10779                         }
10780                         p_ptr->sutemi = TRUE;
10781                 }
10782                 break;
10783
10784         case 17:
10785 #ifdef JP
10786                 if (name) return "Íë·âÏÉÄÞ»Â";
10787                 if (desc) return "ÅÅ·âÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÈó¾ï¤ËÂ礭¤¤¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10788 #else
10789                 if (name) return "Lightning Eagle";
10790                 if (desc) return "Attacks a monster with more damage unless it has resistance to electricity.";
10791 #endif
10792     
10793                 if (cast)
10794                 {
10795                         int y, x;
10796
10797                         if (!get_rep_dir2(&dir)) return NULL;
10798                         if (dir == 5) return NULL;
10799
10800                         y = py + ddy[dir];
10801                         x = px + ddx[dir];
10802
10803                         if (cave[y][x].m_idx)
10804                                 py_attack(y, x, HISSATSU_ELEC);
10805                         else
10806                         {
10807 #ifdef JP
10808                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10809 #else
10810                                 msg_print("There is no monster.");
10811 #endif
10812                                 return NULL;
10813                         }
10814                 }
10815                 break;
10816
10817         case 18:
10818 #ifdef JP
10819                 if (name) return "Æþ¿È";
10820                 if (desc) return "ÁÇÁ᤯Áê¼ê¤Ë¶á´ó¤ê¹¶·â¤¹¤ë¡£";
10821 #else
10822                 if (name) return "Rush Attack";
10823                 if (desc) return "Steps close to a monster and attacks at a time.";
10824 #endif
10825     
10826                 if (cast)
10827                 {
10828                         if (!rush_attack(NULL)) return NULL;
10829                 }
10830                 break;
10831
10832         case 19:
10833 #ifdef JP
10834                 if (name) return "ÀÖή±²";
10835                 if (desc) return "¼«Ê¬¼«¿È¤â½ý¤òºî¤ê¤Ä¤Ä¡¢¤½¤Î½ý¤¬¿¼¤¤¤Û¤ÉÂ礭¤¤°ÒÎϤÇÁ´Êý¸þ¤ÎŨ¤ò¹¶·â¤Ç¤­¤ë¡£À¸¤­¤Æ¤¤¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡£";
10836 #else
10837                 if (name) return "Bloody Maelstrom";
10838                 if (desc) return "Attacks all adjacent monsters with power corresponding to your cut status. Then increases your cut status. No effect to unliving monsters.";
10839 #endif
10840     
10841                 if (cast)
10842                 {
10843                         int y = 0, x = 0;
10844
10845                         cave_type       *c_ptr;
10846                         monster_type    *m_ptr;
10847         
10848                         if (p_ptr->cut < 300)
10849                                 set_cut(p_ptr->cut + 300);
10850                         else
10851                                 set_cut(p_ptr->cut * 2);
10852         
10853                         for (dir = 0; dir < 8; dir++)
10854                         {
10855                                 y = py + ddy_ddd[dir];
10856                                 x = px + ddx_ddd[dir];
10857                                 c_ptr = &cave[y][x];
10858         
10859                                 /* Get the monster */
10860                                 m_ptr = &m_list[c_ptr->m_idx];
10861         
10862                                 /* Hack -- attack monsters */
10863                                 if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
10864                                 {
10865                                         if (!monster_living(&r_info[m_ptr->r_idx]))
10866                                         {
10867                                                 char m_name[80];
10868         
10869                                                 monster_desc(m_name, m_ptr, 0);
10870 #ifdef JP
10871                                                 msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡ª", m_name);
10872 #else
10873                                                 msg_format("%s is unharmed!", m_name);
10874 #endif
10875                                         }
10876                                         else py_attack(y, x, HISSATSU_SEKIRYUKA);
10877                                 }
10878                         }
10879                 }
10880                 break;
10881
10882         case 20:
10883 #ifdef JP
10884                 if (name) return "·ã¿Ì·â";
10885                 if (desc) return "ÃϿ̤òµ¯¤³¤¹¡£";
10886 #else
10887                 if (name) return "Earthquake Blow";
10888                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
10889 #endif
10890     
10891                 if (cast)
10892                 {
10893                         int y,x;
10894
10895                         if (!get_rep_dir2(&dir)) return NULL;
10896                         if (dir == 5) return NULL;
10897
10898                         y = py + ddy[dir];
10899                         x = px + ddx[dir];
10900
10901                         if (cave[y][x].m_idx)
10902                                 py_attack(y, x, HISSATSU_QUAKE);
10903                         else
10904                                 earthquake(py, px, 10);
10905                 }
10906                 break;
10907
10908         case 21:
10909 #ifdef JP
10910                 if (name) return "ÃÏÁö¤ê";
10911                 if (desc) return "¾×·âÇȤΥӡ¼¥à¤òÊü¤Ä¡£";
10912 #else
10913                 if (name) return "Crack";
10914                 if (desc) return "Fires a beam of shock wave.";
10915 #endif
10916     
10917                 if (cast)
10918                 {
10919                         int total_damage = 0, basedam, i;
10920                         u32b flgs[TR_FLAG_SIZE];
10921                         object_type *o_ptr;
10922                         if (!get_aim_dir(&dir)) return NULL;
10923 #ifdef JP
10924                         msg_print("Éð´ï¤òÂ礭¤¯¿¶¤ê²¼¤í¤·¤¿¡£");
10925 #else
10926                         msg_print("You swing your weapon downward.");
10927 #endif
10928                         for (i = 0; i < 2; i++)
10929                         {
10930                                 int damage;
10931         
10932                                 if (!buki_motteruka(INVEN_RARM+i)) break;
10933                                 o_ptr = &inventory[INVEN_RARM+i];
10934                                 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
10935                                 damage = o_ptr->to_d * 100;
10936                                 object_flags(o_ptr, flgs);
10937                                 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
10938                                 {
10939                                         /* vorpal blade */
10940                                         basedam *= 5;
10941                                         basedam /= 3;
10942                                 }
10943                                 else if (have_flag(flgs, TR_VORPAL))
10944                                 {
10945                                         /* vorpal flag only */
10946                                         basedam *= 11;
10947                                         basedam /= 9;
10948                                 }
10949                                 damage += basedam;
10950                                 damage *= p_ptr->num_blow[i];
10951                                 total_damage += damage / 200;
10952                                 if (i) total_damage = total_damage*7/10;
10953                         }
10954                         fire_beam(GF_FORCE, dir, total_damage);
10955                 }
10956                 break;
10957
10958         case 22:
10959 #ifdef JP
10960                 if (name) return "µ¤Ç÷¤Îͺ¶«¤Ó";
10961                 if (desc) return "»ë³¦Æâ¤ÎÁ´¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤Æ¹ì²»¤Î¹¶·â¤ò¹Ô¤¦¡£¤µ¤é¤Ë¡¢¶á¤¯¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤ë¡£";
10962 #else
10963                 if (name) return "War Cry";
10964                 if (desc) return "Damages all monsters in sight with sound. Aggravate nearby monsters.";
10965 #endif
10966     
10967                 if (cast)
10968                 {
10969 #ifdef JP
10970                         msg_print("ͺ¶«¤Ó¤ò¤¢¤²¤¿¡ª");
10971 #else
10972                         msg_print("You roar out!");
10973 #endif
10974                         project_hack(GF_SOUND, randint1(plev * 3));
10975                         aggravate_monsters(0);
10976                 }
10977                 break;
10978
10979         case 23:
10980 #ifdef JP
10981                 if (name) return "̵Áл°ÃÊ";
10982                 if (desc) return "¶¯ÎϤÊ3Ãʹ¶·â¤ò·«¤ê½Ð¤¹¡£";
10983 #else
10984                 if (name) return "Musou-Sandan";
10985                 if (desc) return "Attacks with powerful 3 strikes.";
10986 #endif
10987     
10988                 if (cast)
10989                 {
10990                         int i;
10991
10992                         if (!get_rep_dir2(&dir)) return NULL;
10993                         if (dir == 5) return NULL;
10994
10995                         for (i = 0; i < 3; i++)
10996                         {
10997                                 int y, x;
10998                                 int ny, nx;
10999                                 int m_idx;
11000                                 cave_type *c_ptr;
11001                                 monster_type *m_ptr;
11002         
11003                                 y = py + ddy[dir];
11004                                 x = px + ddx[dir];
11005                                 c_ptr = &cave[y][x];
11006         
11007                                 if (c_ptr->m_idx)
11008                                         py_attack(y, x, HISSATSU_3DAN);
11009                                 else
11010                                 {
11011 #ifdef JP
11012                                         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11013 #else
11014                                         msg_print("There is no monster.");
11015 #endif
11016                                         return NULL;
11017                                 }
11018         
11019                                 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
11020                                 {
11021                                         return "";
11022                                 }
11023         
11024                                 /* Monster is dead? */
11025                                 if (!c_ptr->m_idx) break;
11026         
11027                                 ny = y + ddy[dir];
11028                                 nx = x + ddx[dir];
11029                                 m_idx = c_ptr->m_idx;
11030                                 m_ptr = &m_list[m_idx];
11031         
11032                                 /* Monster cannot move back? */
11033                                 if (!monster_can_enter(ny, nx, &r_info[m_ptr->r_idx], 0))
11034                                 {
11035                                         /* -more- */
11036                                         if (i < 2) msg_print(NULL);
11037                                         continue;
11038                                 }
11039         
11040                                 c_ptr->m_idx = 0;
11041                                 cave[ny][nx].m_idx = m_idx;
11042                                 m_ptr->fy = ny;
11043                                 m_ptr->fx = nx;
11044         
11045                                 update_mon(m_idx, TRUE);
11046         
11047                                 /* Redraw the old spot */
11048                                 lite_spot(y, x);
11049         
11050                                 /* Redraw the new spot */
11051                                 lite_spot(ny, nx);
11052         
11053                                 /* Player can move forward? */
11054                                 if (player_can_enter(c_ptr->feat, 0))
11055                                 {
11056                                         /* Move the player */
11057                                         if (!move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP)) break;
11058                                 }
11059         
11060                                 /* -more- */
11061                                 if (i < 2) msg_print(NULL);
11062                         }
11063                 }
11064                 break;
11065
11066         case 24:
11067 #ifdef JP
11068                 if (name) return "µÛ·ìµ´¤Î²ç";
11069                 if (desc) return "¹¶·â¤·¤¿Áê¼ê¤ÎÂÎÎϤòµÛ¤¤¤È¤ê¡¢¼«Ê¬¤ÎÂÎÎϤò²óÉü¤µ¤»¤ë¡£À¸Ì¿¤ò»ý¤¿¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Ë¤ÏÄ̤¸¤Ê¤¤¡£";
11070 #else
11071                 if (name) return "Vampire's Fang";
11072                 if (desc) return "Attacks with vampiric strikes which absorbs HP from a monster and gives them to you. No effect to unliving monsters.";
11073 #endif
11074     
11075                 if (cast)
11076                 {
11077                         int y, x;
11078
11079                         if (!get_rep_dir2(&dir)) return NULL;
11080                         if (dir == 5) return NULL;
11081
11082                         y = py + ddy[dir];
11083                         x = px + ddx[dir];
11084
11085                         if (cave[y][x].m_idx)
11086                                 py_attack(y, x, HISSATSU_DRAIN);
11087                         else
11088                         {
11089 #ifdef JP
11090                                         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11091 #else
11092                                         msg_print("There is no monster.");
11093 #endif
11094                                 return NULL;
11095                         }
11096                 }
11097                 break;
11098
11099         case 25:
11100 #ifdef JP
11101                 if (name) return "¸¸ÏÇ";
11102                 if (desc) return "»ë³¦Æâ¤Îµ¯¤­¤Æ¤¤¤ëÁ´¥â¥ó¥¹¥¿¡¼¤ËÛ¯Û°¡¢º®Íð¡¢Ì²¤ê¤òÍ¿¤¨¤è¤¦¤È¤¹¤ë¡£";
11103 #else
11104                 if (name) return "Moon Dazzling";
11105                 if (desc) return "Attempts to stun, confuse and sleep all waking monsters.";
11106 #endif
11107     
11108                 if (cast)
11109                 {
11110 #ifdef JP
11111                         msg_print("Éð´ï¤òÉÔµ¬Â§¤ËÍɤ餷¤¿¡¥¡¥¡¥");
11112 #else
11113                         msg_print("You irregularly wave your weapon...");
11114 #endif
11115                         project_hack(GF_ENGETSU, plev * 4);
11116                         project_hack(GF_ENGETSU, plev * 4);
11117                         project_hack(GF_ENGETSU, plev * 4);
11118                 }
11119                 break;
11120
11121         case 26:
11122 #ifdef JP
11123                 if (name) return "É´¿Í»Â¤ê";
11124                 if (desc) return "Ϣ³¤·¤ÆÆþ¿È¤Ç¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¡£¹¶·â¤¹¤ë¤¿¤Ó¤ËMP¤ò¾ÃÈñ¡£MP¤¬¤Ê¤¯¤Ê¤ë¤«¡¢¥â¥ó¥¹¥¿¡¼¤òÅݤ»¤Ê¤«¤Ã¤¿¤éÉ´¿Í»Â¤ê¤Ï½ªÎ»¤¹¤ë¡£";
11125 #else
11126                 if (name) return "Hundred Slaughter";
11127                 if (desc) return "Performs a series of rush attacks. The series continues while killing each monster in a time and SP remains.";
11128 #endif
11129     
11130                 if (cast)
11131                 {
11132                         const int mana_cost_per_monster = 8;
11133                         bool new = TRUE;
11134                         bool mdeath;
11135
11136                         do
11137                         {
11138                                 if (!rush_attack(&mdeath)) break;
11139                                 if (new)
11140                                 {
11141                                         /* Reserve needed mana point */
11142                                         p_ptr->csp -= technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
11143                                         new = FALSE;
11144                                 }
11145                                 else
11146                                         p_ptr->csp -= mana_cost_per_monster;
11147
11148                                 if (!mdeath) break;
11149                                 command_dir = 0;
11150
11151                                 p_ptr->redraw |= PR_MANA;
11152                                 handle_stuff();
11153                         }
11154                         while (p_ptr->csp > mana_cost_per_monster);
11155
11156                         if (new) return NULL;
11157         
11158                         /* Restore reserved mana */
11159                         p_ptr->csp += technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
11160                 }
11161                 break;
11162
11163         case 27:
11164 #ifdef JP
11165                 if (name) return "Å·æÆζÁ®";
11166                 if (desc) return "»ë³¦Æâ¤Î¾ì½ê¤ò»ØÄꤷ¤Æ¡¢¤½¤Î¾ì½ê¤È¼«Ê¬¤Î´Ö¤Ë¤¤¤ëÁ´¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤·¡¢¤½¤Î¾ì½ê¤Ë°ÜÆ°¤¹¤ë¡£";
11167 #else
11168                 if (name) return "Dragonic Flash";
11169                 if (desc) return "Runs toward given location while attacking all monsters on the path.";
11170 #endif
11171     
11172                 if (cast)
11173                 {
11174                         int y, x;
11175
11176                         if (!tgt_pt(&x, &y)) return NULL;
11177
11178                         if (!cave_player_teleportable_bold(y, x, FALSE, FALSE) ||
11179                             (distance(y, x, py, px) > MAX_SIGHT / 2) ||
11180                             !projectable(py, px, y, x))
11181                         {
11182 #ifdef JP
11183                                 msg_print("¼ºÇÔ¡ª");
11184 #else
11185                                 msg_print("You cannot move to that place!");
11186 #endif
11187                                 break;
11188                         }
11189                         if (p_ptr->anti_tele)
11190                         {
11191 #ifdef JP
11192                                 msg_print("ÉԻ׵ĤÊÎϤ¬¥Æ¥ì¥Ý¡¼¥È¤òËɤ¤¤À¡ª");
11193 #else
11194                                 msg_print("A mysterious force prevents you from teleporting!");
11195 #endif
11196         
11197                                 break;
11198                         }
11199                         project(0, 0, y, x, HISSATSU_ISSEN, GF_ATTACK, PROJECT_BEAM | PROJECT_KILL, -1);
11200                         teleport_player_to(y, x, TRUE, FALSE);
11201                 }
11202                 break;
11203
11204         case 28:
11205 #ifdef JP
11206                 if (name) return "Æó½Å¤Î·õ·â";
11207                 if (desc) return "1¥¿¡¼¥ó¤Ç2ÅÙ¹¶·â¤ò¹Ô¤¦¡£";
11208 #else
11209                 if (name) return "Twin Slash";
11210                 if (desc) return "double attacks at a time.";
11211 #endif
11212     
11213                 if (cast)
11214                 {
11215                         int x, y;
11216         
11217                         if (!get_rep_dir(&dir, FALSE)) return NULL;
11218
11219                         y = py + ddy[dir];
11220                         x = px + ddx[dir];
11221
11222                         if (cave[y][x].m_idx)
11223                         {
11224                                 py_attack(y, x, 0);
11225                                 if (cave[y][x].m_idx)
11226                                 {
11227                                         handle_stuff();
11228                                         py_attack(y, x, 0);
11229                                 }
11230                         }
11231                         else
11232                         {
11233 #ifdef JP
11234         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11235 #else
11236                                 msg_print("You don't see any monster in this direction");
11237 #endif
11238                                 return NULL;
11239                         }
11240                 }
11241                 break;
11242
11243         case 29:
11244 #ifdef JP
11245                 if (name) return "¸×ÉúÀäÅáÀª";
11246                 if (desc) return "¶¯ÎϤʹ¶·â¤ò¹Ô¤¤¡¢¶á¤¯¤Î¾ì½ê¤Ë¤â¸ú²Ì¤¬µÚ¤Ö¡£";
11247 #else
11248                 if (name) return "Kofuku-Zettousei";
11249                 if (desc) return "Performs a powerful attack which even effect nearby monsters.";
11250 #endif
11251     
11252                 if (cast)
11253                 {
11254                         int total_damage = 0, basedam, i;
11255                         int y, x;
11256                         u32b flgs[TR_FLAG_SIZE];
11257                         object_type *o_ptr;
11258         
11259                         if (!get_rep_dir2(&dir)) return NULL;
11260                         if (dir == 5) return NULL;
11261
11262                         y = py + ddy[dir];
11263                         x = px + ddx[dir];
11264
11265                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
11266                         {
11267 #ifdef JP
11268                                 msg_print("¤Ê¤¼¤«¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£");
11269 #else
11270                                 msg_print("Something prevent you from attacking.");
11271 #endif
11272                                 return "";
11273                         }
11274 #ifdef JP
11275                         msg_print("Éð´ï¤òÂ礭¤¯¿¶¤ê²¼¤í¤·¤¿¡£");
11276 #else
11277                         msg_print("You swing your weapon downward.");
11278 #endif
11279                         for (i = 0; i < 2; i++)
11280                         {
11281                                 int damage;
11282                                 if (!buki_motteruka(INVEN_RARM+i)) break;
11283                                 o_ptr = &inventory[INVEN_RARM+i];
11284                                 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
11285                                 damage = o_ptr->to_d * 100;
11286                                 object_flags(o_ptr, flgs);
11287                                 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
11288                                 {
11289                                         /* vorpal blade */
11290                                         basedam *= 5;
11291                                         basedam /= 3;
11292                                 }
11293                                 else if (have_flag(flgs, TR_VORPAL))
11294                                 {
11295                                         /* vorpal flag only */
11296                                         basedam *= 11;
11297                                         basedam /= 9;
11298                                 }
11299                                 damage += basedam;
11300                                 damage += p_ptr->to_d[i] * 100;
11301                                 damage *= p_ptr->num_blow[i];
11302                                 total_damage += (damage / 100);
11303                         }
11304                         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);
11305                 }
11306                 break;
11307
11308         case 30:
11309 #ifdef JP
11310                 if (name) return "·Ä±Àµ´Ç¦·õ";
11311                 if (desc) return "¼«Ê¬¤â¥À¥á¡¼¥¸¤ò¤¯¤é¤¦¤¬¡¢Áê¼ê¤ËÈó¾ï¤ËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£¥¢¥ó¥Ç¥Ã¥É¤Ë¤ÏÆä˸ú²Ì¤¬¤¢¤ë¡£";
11312 #else
11313                 if (name) return "Keiun-Kininken";
11314                 if (desc) return "Attacks a monster with extremely powerful damage. But you also takes some damages. Hurts a undead monster greatly.";
11315 #endif
11316     
11317                 if (cast)
11318                 {
11319                         int y, x;
11320
11321                         if (!get_rep_dir2(&dir)) return NULL;
11322                         if (dir == 5) return NULL;
11323
11324                         y = py + ddy[dir];
11325                         x = px + ddx[dir];
11326
11327                         if (cave[y][x].m_idx)
11328                                 py_attack(y, x, HISSATSU_UNDEAD);
11329                         else
11330                         {
11331 #ifdef JP
11332                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11333 #else
11334                                 msg_print("There is no monster.");
11335 #endif
11336                                 return NULL;
11337                         }
11338 #ifdef JP
11339                         take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), "·Ä±Àµ´Ç¦·õ¤ò»È¤Ã¤¿¾×·â", -1);
11340 #else
11341                         take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), "exhaustion on using Keiun-Kininken", -1);
11342 #endif
11343                 }
11344                 break;
11345
11346         case 31:
11347 #ifdef JP
11348                 if (name) return "ÀÚÊ¢";
11349                 if (desc) return "¡ÖÉð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£¡×";
11350 #else
11351                 if (name) return "Harakiri";
11352                 if (desc) return "'Busido is found in death'";
11353 #endif
11354
11355                 if (cast)
11356                 {
11357                         int i;
11358 #ifdef JP
11359         if (!get_check("ËÜÅö¤Ë¼«»¦¤·¤Þ¤¹¤«¡©")) return NULL;
11360 #else
11361                         if (!get_check("Do you really want to commit suicide? ")) return NULL;
11362 #endif
11363                                 /* Special Verification for suicide */
11364 #ifdef JP
11365         prt("³Îǧ¤Î¤¿¤á '@' ¤ò²¡¤·¤Æ²¼¤µ¤¤¡£", 0, 0);
11366 #else
11367                         prt("Please verify SUICIDE by typing the '@' sign: ", 0, 0);
11368 #endif
11369         
11370                         flush();
11371                         i = inkey();
11372                         prt("", 0, 0);
11373                         if (i != '@') return NULL;
11374                         if (p_ptr->total_winner)
11375                         {
11376                                 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
11377                                 p_ptr->total_winner = TRUE;
11378                         }
11379                         else
11380                         {
11381 #ifdef JP
11382                                 msg_print("Éð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£");
11383                                 take_hit(DAMAGE_FORCE, 9999, "ÀÚÊ¢", -1);
11384 #else
11385                                 msg_print("Meaning of Bushi-do is found in the death.");
11386                                 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
11387 #endif
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 }