OSDN Git Service

bug fix: disable target of spreading shuriken with index 0
[hengband/hengband.git] / src / do-spell.c
1 /* File: do-spell.c */
2
3 /* Purpose: Do everything for each spell */
4
5 #include "angband.h"
6
7
8 /*
9  * Generate dice info string such as "foo 2d10"
10  */
11 static cptr info_string_dice(cptr str, int dice, int sides, int base)
12 {
13         /* Fix value */
14         if (!dice)
15                 return format("%s%d", str, base);
16
17         /* Dice only */
18         else if (!base)
19                 return format("%s%dd%d", str, dice, sides);
20
21         /* Dice plus base value */
22         else
23                 return format("%s%dd%d%+d", str, dice, sides, base);
24 }
25
26
27 /*
28  * Generate damage-dice info string such as "dam 2d10"
29  */
30 static cptr info_damage(int dice, int sides, int base)
31 {
32 #ifdef JP
33         return info_string_dice("»½ý:", dice, sides, base);
34 #else
35         return info_string_dice("dam ", dice, sides, base);
36 #endif
37 }
38
39
40 /*
41  * Generate duration info string such as "dur 20+1d20"
42  */
43 static cptr info_duration(int base, int sides)
44 {
45 #ifdef JP
46         return format("´ü´Ö:%d+1d%d", base, sides);
47 #else
48         return format("dur %d+1d%d", base, sides);
49 #endif
50 }
51
52
53 /*
54  * Generate range info string such as "range 5"
55  */
56 static cptr info_range(int range)
57 {
58 #ifdef JP
59         return format("ÈÏ°Ï:%d", range);
60 #else
61         return format("range %d", range);
62 #endif
63 }
64
65
66 /*
67  * Generate heal info string such as "heal 2d8"
68  */
69 static cptr info_heal(int dice, int sides, int base)
70 {
71 #ifdef JP
72         return info_string_dice("²óÉü:", dice, sides, base);
73 #else
74         return info_string_dice("heal ", dice, sides, base);
75 #endif
76 }
77
78
79 /*
80  * Generate delay info string such as "delay 15+1d15"
81  */
82 static cptr info_delay(int base, int sides)
83 {
84 #ifdef JP
85         return format("ÃÙ±ä:%d+1d%d", base, sides);
86 #else
87         return format("delay %d+1d%d", base, sides);
88 #endif
89 }
90
91
92 /*
93  * Generate multiple-damage info string such as "dam 25 each"
94  */
95 static cptr info_multi_damage(int dam)
96 {
97 #ifdef JP
98         return format("»½ý:³Æ%d", dam);
99 #else
100         return format("dam %d each", dam);
101 #endif
102 }
103
104
105 /*
106  * Generate multiple-damage-dice info string such as "dam 5d2 each"
107  */
108 static cptr info_multi_damage_dice(int dice, int sides)
109 {
110 #ifdef JP
111         return format("»½ý:³Æ%dd%d", dice, sides);
112 #else
113         return format("dam %dd%d each", dice, sides);
114 #endif
115 }
116
117
118 /*
119  * Generate power info string such as "power 100"
120  */
121 static cptr info_power(int power)
122 {
123 #ifdef JP
124         return format("¸úÎÏ:%d", power);
125 #else
126         return format("power %d", power);
127 #endif
128 }
129
130
131 /*
132  * Generate power info string such as "power 1d100"
133  */
134 static cptr info_power_dice(int dice, int sides)
135 {
136 #ifdef JP
137         return format("¸úÎÏ:%dd%d", dice, sides);
138 #else
139         return format("power %dd%d", dice, sides);
140 #endif
141 }
142
143
144 /*
145  * Generate radius info string such as "rad 100"
146  */
147 static cptr info_radius(int rad)
148 {
149 #ifdef JP
150         return format("Ⱦ·Â:%d", rad);
151 #else
152         return format("rad %d", rad);
153 #endif
154 }
155
156
157 /*
158  * Generate weight info string such as "max wgt 15"
159  */
160 static cptr info_weight(int weight)
161 {
162 #ifdef JP
163         return format("ºÇÂç½ÅÎÌ:%d.%dkg", lbtokg1(weight/10), lbtokg2(weight/10));
164 #else
165         return format("max wgt %d", weight/10);
166 #endif
167 }
168
169
170 /*
171  * Prepare standard probability to become beam for fire_bolt_or_beam()
172  */
173 static int beam_chance(void)
174 {
175         if (p_ptr->pclass == CLASS_MAGE)
176                 return p_ptr->lev;
177         if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER)
178                 return p_ptr->lev + 10;
179
180         return p_ptr->lev / 2;
181 }
182
183
184 /*
185  * Handle summoning and failure of trump spells
186  */
187 static bool trump_summoning(int num, bool pet, int y, int x, int lev, int type, u32b mode)
188 {
189         int plev = p_ptr->lev;
190
191         int who;
192         int i;
193         bool success = FALSE;
194
195         /* Default level */
196         if (!lev) lev = plev * 2 / 3 + randint1(plev / 2);
197
198         if (pet)
199         {
200                 /* Become pet */
201                 mode |= PM_FORCE_PET;
202
203                 /* Only sometimes allow unique monster */
204                 if (mode & PM_ALLOW_UNIQUE)
205                 {
206                         /* Forbid often */
207                         if (randint1(50 + plev) >= plev / 10)
208                                 mode &= ~PM_ALLOW_UNIQUE;
209                 }
210
211                 /* Player is who summons */
212                 who = -1;
213         }
214         else
215         {
216                 /* Prevent taming, allow unique monster */
217                 mode |= PM_NO_PET;
218
219                 /* Behave as if they appear by themselfs */
220                 who = 0;
221         }
222
223         for (i = 0; i < num; i++)
224         {
225                 if (summon_specific(who, y, x, lev, type, mode))
226                         success = TRUE;
227         }
228
229         if (!success)
230         {
231 #ifdef JP
232                 msg_print("ï¤â¤¢¤Ê¤¿¤Î¥«¡¼¥É¤Î¸Æ¤ÓÀ¼¤ËÅú¤¨¤Ê¤¤¡£");
233 #else
234                 msg_print("Nobody answers to your Trump call.");
235 #endif
236         }
237
238         return success;
239 }
240
241
242 /*
243  * This spell should become more useful (more controlled) as the
244  * player gains experience levels.  Thus, add 1/5 of the player's
245  * level to the die roll.  This eliminates the worst effects later on,
246  * while keeping the results quite random.  It also allows some potent
247  * effects only at high level.
248  */
249 static void cast_wonder(int dir)
250 {
251         int plev = p_ptr->lev;
252         int die = randint1(100) + plev / 5;
253         int vir = virtue_number(V_CHANCE);
254
255         if (vir)
256         {
257                 if (p_ptr->virtues[vir - 1] > 0)
258                 {
259                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
260                 }
261                 else
262                 {
263                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
264                 }
265         }
266
267         if (die < 26)
268                 chg_virtue(V_CHANCE, 1);
269
270         if (die > 100)
271         {
272 #ifdef JP
273                 msg_print("¤¢¤Ê¤¿¤ÏÎϤ¬¤ß¤Ê¤®¤ë¤Î¤ò´¶¤¸¤¿¡ª");
274 #else
275                 msg_print("You feel a surge of power!");
276 #endif
277         }
278
279         if (die < 8) clone_monster(dir);
280         else if (die < 14) speed_monster(dir);
281         else if (die < 26) heal_monster(dir, damroll(4, 6));
282         else if (die < 31) poly_monster(dir);
283         else if (die < 36)
284                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir,
285                                   damroll(3 + ((plev - 1) / 5), 4));
286         else if (die < 41) confuse_monster(dir, plev);
287         else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
288         else if (die < 51) (void)lite_line(dir);
289         else if (die < 56)
290                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir,
291                                   damroll(3 + ((plev - 5) / 4), 8));
292         else if (die < 61)
293                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir,
294                                   damroll(5 + ((plev - 5) / 4), 8));
295         else if (die < 66)
296                 fire_bolt_or_beam(beam_chance(), GF_ACID, dir,
297                                   damroll(6 + ((plev - 5) / 4), 8));
298         else if (die < 71)
299                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir,
300                                   damroll(8 + ((plev - 5) / 4), 8));
301         else if (die < 76) drain_life(dir, 75);
302         else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
303         else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2);
304         else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3);
305         else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3);
306         else if (die < 101) drain_life(dir, 100 + plev);
307         else if (die < 104)
308         {
309                 earthquake(py, px, 12);
310         }
311         else if (die < 106)
312         {
313                 (void)destroy_area(py, px, 13 + randint0(5), FALSE);
314         }
315         else if (die < 108)
316         {
317                 symbol_genocide(plev+50, TRUE);
318         }
319         else if (die < 110) dispel_monsters(120);
320         else /* RARE */
321         {
322                 dispel_monsters(150);
323                 slow_monsters();
324                 sleep_monsters();
325                 hp_player(300);
326         }
327 }
328
329
330 static void cast_invoke_spirits(int dir)
331 {
332         int plev = p_ptr->lev;
333         int die = randint1(100) + plev / 5;
334         int vir = virtue_number(V_CHANCE);
335
336         if (vir)
337         {
338                 if (p_ptr->virtues[vir - 1] > 0)
339                 {
340                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
341                 }
342                 else
343                 {
344                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
345                 }
346         }
347
348 #ifdef JP
349         msg_print("¤¢¤Ê¤¿¤Ï»à¼Ô¤¿¤Á¤ÎÎϤò¾·½¸¤·¤¿...");
350 #else
351         msg_print("You call on the power of the dead...");
352 #endif
353         if (die < 26)
354                 chg_virtue(V_CHANCE, 1);
355
356         if (die > 100)
357         {
358 #ifdef JP
359                 msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤ÎϤΤ¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
360 #else
361                 msg_print("You feel a surge of eldritch force!");
362 #endif
363         }
364
365
366         if (die < 8)
367         {
368 #ifdef JP
369                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¤¢¤Ê¤¿¤Î¼þ¤ê¤ÎÃÏÌ̤«¤éµà¤Á¤¿¿Í±Æ¤¬Î©¤Á¾å¤¬¤Ã¤Æ¤­¤¿¡ª");
370 #else
371                 msg_print("Oh no! Mouldering forms rise from the earth around you!");
372 #endif
373
374                 (void)summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
375                 chg_virtue(V_UNLIFE, 1);
376         }
377         else if (die < 14)
378         {
379 #ifdef JP
380                 msg_print("̾¾õ¤·Æñ¤¤¼Ù°­¤Ê¸ºß¤¬¤¢¤Ê¤¿¤Î¿´¤òÄ̤ê²á¤®¤Æ¹Ô¤Ã¤¿...");
381 #else
382                 msg_print("An unnamable evil brushes against your mind...");
383 #endif
384
385                 set_afraid(p_ptr->afraid + randint1(4) + 4);
386         }
387         else if (die < 26)
388         {
389 #ifdef JP
390                 msg_print("¤¢¤Ê¤¿¤ÎƬ¤ËÂçÎ̤ÎÍ©Î¤Á¤ÎÁû¡¹¤·¤¤À¼¤¬²¡¤·´ó¤»¤Æ¤­¤¿...");
391 #else
392                 msg_print("Your head is invaded by a horde of gibbering spectral voices...");
393 #endif
394
395                 set_confused(p_ptr->confused + randint1(4) + 4);
396         }
397         else if (die < 31)
398         {
399                 poly_monster(dir);
400         }
401         else if (die < 36)
402         {
403                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir,
404                                   damroll(3 + ((plev - 1) / 5), 4));
405         }
406         else if (die < 41)
407         {
408                 confuse_monster (dir, plev);
409         }
410         else if (die < 46)
411         {
412                 fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
413         }
414         else if (die < 51)
415         {
416                 (void)lite_line(dir);
417         }
418         else if (die < 56)
419         {
420                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir,
421                                   damroll(3+((plev-5)/4),8));
422         }
423         else if (die < 61)
424         {
425                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir,
426                                   damroll(5+((plev-5)/4),8));
427         }
428         else if (die < 66)
429         {
430                 fire_bolt_or_beam(beam_chance(), GF_ACID, dir,
431                                   damroll(6+((plev-5)/4),8));
432         }
433         else if (die < 71)
434         {
435                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir,
436                                   damroll(8+((plev-5)/4),8));
437         }
438         else if (die < 76)
439         {
440                 drain_life(dir, 75);
441         }
442         else if (die < 81)
443         {
444                 fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
445         }
446         else if (die < 86)
447         {
448                 fire_ball(GF_ACID, dir, 40 + plev, 2);
449         }
450         else if (die < 91)
451         {
452                 fire_ball(GF_ICE, dir, 70 + plev, 3);
453         }
454         else if (die < 96)
455         {
456                 fire_ball(GF_FIRE, dir, 80 + plev, 3);
457         }
458         else if (die < 101)
459         {
460                 drain_life(dir, 100 + plev);
461         }
462         else if (die < 104)
463         {
464                 earthquake(py, px, 12);
465         }
466         else if (die < 106)
467         {
468                 (void)destroy_area(py, px, 13 + randint0(5), FALSE);
469         }
470         else if (die < 108)
471         {
472                 symbol_genocide(plev+50, TRUE);
473         }
474         else if (die < 110)
475         {
476                 dispel_monsters(120);
477         }
478         else
479         { /* RARE */
480                 dispel_monsters(150);
481                 slow_monsters();
482                 sleep_monsters();
483                 hp_player(300);
484         }
485
486         if (die < 31)
487         {
488 #ifdef JP
489                 msg_print("±¢±µ¤ÊÀ¼¤¬¥¯¥¹¥¯¥¹¾Ð¤¦¡£¡Ö¤â¤¦¤¹¤°¤ª¤Þ¤¨¤Ï²æ¡¹¤ÎÃç´Ö¤Ë¤Ê¤ë¤À¤í¤¦¡£¼å¤­¼Ô¤è¡£¡×");
490 #else
491                 msg_print("Sepulchral voices chuckle. 'Soon you will join us, mortal.'");
492 #endif
493         }
494 }
495
496
497 static void wild_magic(int spell)
498 {
499         int counter = 0;
500         int type = SUMMON_BIZARRE1 + randint0(6);
501
502         if (type < SUMMON_BIZARRE1) type = SUMMON_BIZARRE1;
503         else if (type > SUMMON_BIZARRE6) type = SUMMON_BIZARRE6;
504
505         switch (randint1(spell) + randint1(8) + 1)
506         {
507         case 1:
508         case 2:
509         case 3:
510                 teleport_player(10, TELEPORT_PASSIVE);
511                 break;
512         case 4:
513         case 5:
514         case 6:
515                 teleport_player(100, TELEPORT_PASSIVE);
516                 break;
517         case 7:
518         case 8:
519                 teleport_player(200, TELEPORT_PASSIVE);
520                 break;
521         case 9:
522         case 10:
523         case 11:
524                 unlite_area(10, 3);
525                 break;
526         case 12:
527         case 13:
528         case 14:
529                 lite_area(damroll(2, 3), 2);
530                 break;
531         case 15:
532                 destroy_doors_touch();
533                 break;
534         case 16: case 17:
535                 wall_breaker();
536         case 18:
537                 sleep_monsters_touch();
538                 break;
539         case 19:
540         case 20:
541                 trap_creation(py, px);
542                 break;
543         case 21:
544         case 22:
545                 door_creation();
546                 break;
547         case 23:
548         case 24:
549         case 25:
550                 aggravate_monsters(0);
551                 break;
552         case 26:
553                 earthquake(py, px, 5);
554                 break;
555         case 27:
556         case 28:
557                 (void)gain_random_mutation(0);
558                 break;
559         case 29:
560         case 30:
561                 apply_disenchant(1);
562                 break;
563         case 31:
564                 lose_all_info();
565                 break;
566         case 32:
567                 fire_ball(GF_CHAOS, 0, spell + 5, 1 + (spell / 10));
568                 break;
569         case 33:
570                 wall_stone();
571                 break;
572         case 34:
573         case 35:
574                 while (counter++ < 8)
575                 {
576                         (void)summon_specific(0, py, px, (dun_level * 3) / 2, type, (PM_ALLOW_GROUP | PM_NO_PET));
577                 }
578                 break;
579         case 36:
580         case 37:
581                 activate_hi_summon(py, px, FALSE);
582                 break;
583         case 38:
584                 (void)summon_cyber(-1, py, px);
585                 break;
586         default:
587                 {
588                         int count = 0;
589                         (void)activate_ty_curse(FALSE, &count);
590                         break;
591                 }
592         }
593 }
594
595
596 static void cast_shuffle(void)
597 {
598         int plev = p_ptr->lev;
599         int dir;
600         int die;
601         int vir = virtue_number(V_CHANCE);
602         int i;
603
604         /* Card sharks and high mages get a level bonus */
605         if ((p_ptr->pclass == CLASS_ROGUE) ||
606             (p_ptr->pclass == CLASS_HIGH_MAGE) ||
607             (p_ptr->pclass == CLASS_SORCERER))
608                 die = (randint1(110)) + plev / 5;
609         else
610                 die = randint1(120);
611
612
613         if (vir)
614         {
615                 if (p_ptr->virtues[vir - 1] > 0)
616                 {
617                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
618                 }
619                 else
620                 {
621                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
622                 }
623         }
624
625 #ifdef JP
626         msg_print("¤¢¤Ê¤¿¤Ï¥«¡¼¥É¤òÀڤäưìËç°ú¤¤¤¿...");
627 #else
628         msg_print("You shuffle the deck and draw a card...");
629 #endif
630
631         if (die < 30)
632                 chg_virtue(V_CHANCE, 1);
633
634         if (die < 7)
635         {
636 #ifdef JP
637                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô»à¡Õ¤À¡ª");
638 #else
639                 msg_print("Oh no! It's Death!");
640 #endif
641
642                 for (i = 0; i < randint1(3); i++)
643                         activate_hi_summon(py, px, FALSE);
644         }
645         else if (die < 14)
646         {
647 #ifdef JP
648                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô°­Ëâ¡Õ¤À¡ª");
649 #else
650                 msg_print("Oh no! It's the Devil!");
651 #endif
652
653                 summon_specific(0, py, px, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
654         }
655         else if (die < 18)
656         {
657                 int count = 0;
658 #ifdef JP
659                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡ÔÄߤé¤ì¤¿ÃË¡Õ¤À¡ª");
660 #else
661                 msg_print("Oh no! It's the Hanged Man.");
662 #endif
663
664                 activate_ty_curse(FALSE, &count);
665         }
666         else if (die < 22)
667         {
668 #ifdef JP
669                 msg_print("¡ÔÉÔĴϤηõ¡Õ¤À¡£");
670 #else
671                 msg_print("It's the swords of discord.");
672 #endif
673
674                 aggravate_monsters(0);
675         }
676         else if (die < 26)
677         {
678 #ifdef JP
679                 msg_print("¡Ô¶ò¼Ô¡Õ¤À¡£");
680 #else
681                 msg_print("It's the Fool.");
682 #endif
683
684                 do_dec_stat(A_INT);
685                 do_dec_stat(A_WIS);
686         }
687         else if (die < 30)
688         {
689 #ifdef JP
690                 msg_print("´ñ̯¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
691 #else
692                 msg_print("It's the picture of a strange monster.");
693 #endif
694
695                 trump_summoning(1, FALSE, py, px, (dun_level * 3 / 2), (32 + randint1(6)), PM_ALLOW_GROUP | PM_ALLOW_UNIQUE);
696         }
697         else if (die < 33)
698         {
699 #ifdef JP
700                 msg_print("¡Ô·î¡Õ¤À¡£");
701 #else
702                 msg_print("It's the Moon.");
703 #endif
704
705                 unlite_area(10, 3);
706         }
707         else if (die < 38)
708         {
709 #ifdef JP
710                 msg_print("¡Ô±¿Ì¿¤ÎÎØ¡Õ¤À¡£");
711 #else
712                 msg_print("It's the Wheel of Fortune.");
713 #endif
714
715                 wild_magic(randint0(32));
716         }
717         else if (die < 40)
718         {
719 #ifdef JP
720                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
721 #else
722                 msg_print("It's a teleport trump card.");
723 #endif
724
725                 teleport_player(10, TELEPORT_PASSIVE);
726         }
727         else if (die < 42)
728         {
729 #ifdef JP
730                 msg_print("¡ÔÀµµÁ¡Õ¤À¡£");
731 #else
732                 msg_print("It's Justice.");
733 #endif
734
735                 set_blessed(p_ptr->lev, FALSE);
736         }
737         else if (die < 47)
738         {
739 #ifdef JP
740                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
741 #else
742                 msg_print("It's a teleport trump card.");
743 #endif
744
745                 teleport_player(100, TELEPORT_PASSIVE);
746         }
747         else if (die < 52)
748         {
749 #ifdef JP
750                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
751 #else
752                 msg_print("It's a teleport trump card.");
753 #endif
754
755                 teleport_player(200, TELEPORT_PASSIVE);
756         }
757         else if (die < 60)
758         {
759 #ifdef JP
760                 msg_print("¡ÔÅã¡Õ¤À¡£");
761 #else
762                 msg_print("It's the Tower.");
763 #endif
764
765                 wall_breaker();
766         }
767         else if (die < 72)
768         {
769 #ifdef JP
770                 msg_print("¡ÔÀáÀ©¡Õ¤À¡£");
771 #else
772                 msg_print("It's Temperance.");
773 #endif
774
775                 sleep_monsters_touch();
776         }
777         else if (die < 80)
778         {
779 #ifdef JP
780                 msg_print("¡ÔÅã¡Õ¤À¡£");
781 #else
782                 msg_print("It's the Tower.");
783 #endif
784
785                 earthquake(py, px, 5);
786         }
787         else if (die < 82)
788         {
789 #ifdef JP
790                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
791 #else
792                 msg_print("It's the picture of a friendly monster.");
793 #endif
794
795                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE1, 0L);
796         }
797         else if (die < 84)
798         {
799 #ifdef JP
800                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
801 #else
802                 msg_print("It's the picture of a friendly monster.");
803 #endif
804
805                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE2, 0L);
806         }
807         else if (die < 86)
808         {
809 #ifdef JP
810                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
811 #else
812                 msg_print("It's the picture of a friendly monster.");
813 #endif
814
815                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE4, 0L);
816         }
817         else if (die < 88)
818         {
819 #ifdef JP
820                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
821 #else
822                 msg_print("It's the picture of a friendly monster.");
823 #endif
824
825                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE5, 0L);
826         }
827         else if (die < 96)
828         {
829 #ifdef JP
830                 msg_print("¡ÔÎø¿Í¡Õ¤À¡£");
831 #else
832                 msg_print("It's the Lovers.");
833 #endif
834
835                 if (get_aim_dir(&dir))
836                         charm_monster(dir, MIN(p_ptr->lev, 20));
837         }
838         else if (die < 101)
839         {
840 #ifdef JP
841                 msg_print("¡Ô±£¼Ô¡Õ¤À¡£");
842 #else
843                 msg_print("It's the Hermit.");
844 #endif
845
846                 wall_stone();
847         }
848         else if (die < 111)
849         {
850 #ifdef JP
851                 msg_print("¡Ô¿³È½¡Õ¤À¡£");
852 #else
853                 msg_print("It's the Judgement.");
854 #endif
855
856                 do_cmd_rerate(FALSE);
857                 if (p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3)
858                 {
859 #ifdef JP
860                         msg_print("Á´¤Æ¤ÎÆÍÁ³ÊÑ°Û¤¬¼£¤Ã¤¿¡£");
861 #else
862                         msg_print("You are cured of all mutations.");
863 #endif
864
865                         p_ptr->muta1 = p_ptr->muta2 = p_ptr->muta3 = 0;
866                         p_ptr->update |= PU_BONUS;
867                         handle_stuff();
868                 }
869         }
870         else if (die < 120)
871         {
872 #ifdef JP
873                 msg_print("¡ÔÂÀÍÛ¡Õ¤À¡£");
874 #else
875                 msg_print("It's the Sun.");
876 #endif
877
878                 chg_virtue(V_KNOWLEDGE, 1);
879                 chg_virtue(V_ENLIGHTEN, 1);
880                 wiz_lite(FALSE);
881         }
882         else
883         {
884 #ifdef JP
885                 msg_print("¡ÔÀ¤³¦¡Õ¤À¡£");
886 #else
887                 msg_print("It's the World.");
888 #endif
889
890                 if (p_ptr->exp < PY_MAX_EXP)
891                 {
892                         s32b ee = (p_ptr->exp / 25) + 1;
893                         if (ee > 5000) ee = 5000;
894 #ifdef JP
895                         msg_print("¹¹¤Ë·Ð¸³¤òÀѤó¤À¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
896 #else
897                         msg_print("You feel more experienced.");
898 #endif
899
900                         gain_exp(ee);
901                 }
902         }
903 }
904
905
906 /*
907  * Drop 10+1d10 meteor ball at random places near the player
908  */
909 static void cast_meteor(int dam, int rad)
910 {
911         int i;
912         int b = 10 + randint1(10);
913
914         for (i = 0; i < b; i++)
915         {
916                 int y, x;
917                 int count;
918
919                 for (count = 0; count <= 20; count++)
920                 {
921                         int dy, dx, d;
922
923                         x = px - 8 + randint0(17);
924                         y = py - 8 + randint0(17);
925
926                         dx = (px > x) ? (px - x) : (x - px);
927                         dy = (py > y) ? (py - y) : (y - py);
928
929                         /* Approximate distance */
930                         d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
931
932                         if (d >= 9) continue;
933
934                         if (!in_bounds(y, x) || !projectable(py, px, y, x)
935                             || !cave_have_flag_bold(y, x, FF_PROJECT)) continue;
936
937                         /* Valid position */
938                         break;
939                 }
940
941                 if (count > 20) continue;
942
943                 project(0, rad, y, x, dam, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
944         }
945 }
946
947
948 /*
949  * Drop 10+1d10 disintegration ball at random places near the target
950  */
951 static bool cast_wrath_of_the_god(int dam, int rad)
952 {
953         int x, y, tx, ty;
954         int nx, ny;
955         int dir, i;
956         int b = 10 + randint1(10);
957
958         if (!get_aim_dir(&dir)) return FALSE;
959
960         /* Use the given direction */
961         tx = px + 99 * ddx[dir];
962         ty = py + 99 * ddy[dir];
963
964         /* Hack -- Use an actual "target" */
965         if ((dir == 5) && target_okay())
966         {
967                 tx = target_col;
968                 ty = target_row;
969         }
970
971         x = px;
972         y = py;
973
974         while (1)
975         {
976                 /* Hack -- Stop at the target */
977                 if ((y == ty) && (x == tx)) break;
978
979                 ny = y;
980                 nx = x;
981                 mmove2(&ny, &nx, py, px, ty, tx);
982
983                 /* Stop at maximum range */
984                 if (MAX_RANGE <= distance(py, px, ny, nx)) break;
985
986                 /* Stopped by walls/doors */
987                 if (!cave_have_flag_bold(ny, nx, FF_PROJECT)) break;
988
989                 /* Stopped by monsters */
990                 if ((dir != 5) && cave[ny][nx].m_idx != 0) break;
991
992                 /* Save the new location */
993                 x = nx;
994                 y = ny;
995         }
996         tx = x;
997         ty = y;
998
999         for (i = 0; i < b; i++)
1000         {
1001                 int count = 20, d = 0;
1002
1003                 while (count--)
1004                 {
1005                         int dx, dy;
1006
1007                         x = tx - 5 + randint0(11);
1008                         y = ty - 5 + randint0(11);
1009
1010                         dx = (tx > x) ? (tx - x) : (x - tx);
1011                         dy = (ty > y) ? (ty - y) : (y - ty);
1012
1013                         /* Approximate distance */
1014                         d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
1015                         /* Within the radius */
1016                         if (d < 5) break;
1017                 }
1018
1019                 if (count < 0) continue;
1020
1021                 /* Cannot penetrate perm walls */
1022                 if (!in_bounds(y,x) ||
1023                     cave_stop_disintegration(y,x) ||
1024                     !in_disintegration_range(ty, tx, y, x))
1025                         continue;
1026
1027                 project(0, rad, y, x, dam, GF_DISINTEGRATE, PROJECT_JUMP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1);
1028         }
1029
1030         return TRUE;
1031 }
1032
1033
1034 /*
1035  * An "item_tester_hook" for offer
1036  */
1037 static bool item_tester_offer(object_type *o_ptr)
1038 {
1039         /* Flasks of oil are okay */
1040         if (o_ptr->tval != TV_CORPSE) return (FALSE);
1041
1042         if (o_ptr->sval != SV_CORPSE) return (FALSE);
1043
1044         if (my_strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
1045
1046         /* Assume not okay */
1047         return (FALSE);
1048 }
1049
1050
1051 /*
1052  * Daemon spell Summon Greater Demon
1053  */
1054 static bool cast_summon_greater_demon(void)
1055 {
1056         int plev = p_ptr->lev;
1057         int item;
1058         cptr q, s;
1059         int summon_lev;
1060         object_type *o_ptr;
1061
1062         item_tester_hook = item_tester_offer;
1063 #ifdef JP
1064         q = "¤É¤Î»àÂΤòÊû¤²¤Þ¤¹¤«? ";
1065         s = "Êû¤²¤é¤ì¤ë»àÂΤò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
1066 #else
1067         q = "Sacrifice which corpse? ";
1068         s = "You have nothing to scrifice.";
1069 #endif
1070         if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
1071
1072         /* Get the item (in the pack) */
1073         if (item >= 0)
1074         {
1075                 o_ptr = &inventory[item];
1076         }
1077
1078         /* Get the item (on the floor) */
1079         else
1080         {
1081                 o_ptr = &o_list[0 - item];
1082         }
1083
1084         summon_lev = plev * 2 / 3 + r_info[o_ptr->pval].level;
1085
1086         if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET)))
1087         {
1088 #ifdef JP
1089                 msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
1090 #else
1091                 msg_print("The area fills with a stench of sulphur and brimstone.");
1092 #endif
1093
1094
1095 #ifdef JP
1096                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
1097 #else
1098                 msg_print("'What is thy bidding... Master?'");
1099 #endif
1100
1101                 /* Decrease the item (from the pack) */
1102                 if (item >= 0)
1103                 {
1104                         inven_item_increase(item, -1);
1105                         inven_item_describe(item);
1106                         inven_item_optimize(item);
1107                 }
1108
1109                 /* Decrease the item (from the floor) */
1110                 else
1111                 {
1112                         floor_item_increase(0 - item, -1);
1113                         floor_item_describe(0 - item);
1114                         floor_item_optimize(0 - item);
1115                 }
1116         }
1117         else
1118         {
1119 #ifdef JP
1120                 msg_print("°­Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
1121 #else
1122                 msg_print("No Greater Demon arrive.");
1123 #endif
1124         }
1125
1126         return TRUE;
1127 }
1128
1129
1130 /*
1131  * Start singing if the player is a Bard 
1132  */
1133 static void start_singing(int spell, int song)
1134 {
1135         /* Remember the song index */
1136         p_ptr->magic_num1[0] = song;
1137
1138         /* Remember the index of the spell which activated the song */
1139         p_ptr->magic_num2[0] = spell;
1140
1141
1142         /* Now the player is singing */
1143         set_action(ACTION_SING);
1144
1145
1146         /* Recalculate bonuses */
1147         p_ptr->update |= (PU_BONUS);
1148
1149         /* Redraw status bar */
1150         p_ptr->redraw |= (PR_STATUS);
1151 }
1152
1153
1154 /*
1155  * Stop singing if the player is a Bard 
1156  */
1157 void stop_singing(void)
1158 {
1159         if (p_ptr->pclass != CLASS_BARD) return;
1160
1161         /* Are there interupted song? */
1162         if (p_ptr->magic_num1[1])
1163         {
1164                 /* Forget interupted song */
1165                 p_ptr->magic_num1[1] = 0;
1166                 return;
1167         }
1168
1169         /* The player is singing? */
1170         if (!p_ptr->magic_num1[0]) return;
1171
1172         /* Hack -- if called from set_action(), avoid recursive loop */
1173         if (p_ptr->action == ACTION_SING) set_action(ACTION_NONE);
1174
1175         /* Message text of each song or etc. */
1176         do_spell(REALM_MUSIC, p_ptr->magic_num2[0], SPELL_STOP);
1177
1178         p_ptr->magic_num1[0] = MUSIC_NONE;
1179         p_ptr->magic_num2[0] = 0;
1180
1181         /* Recalculate bonuses */
1182         p_ptr->update |= (PU_BONUS);
1183
1184         /* Redraw status bar */
1185         p_ptr->redraw |= (PR_STATUS);
1186 }
1187
1188
1189 static cptr do_life_spell(int spell, int mode)
1190 {
1191         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
1192         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
1193         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
1194         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
1195
1196         int dir;
1197         int plev = p_ptr->lev;
1198
1199         switch (spell)
1200         {
1201         case 0:
1202 #ifdef JP
1203                 if (name) return "·Ú½ý¤Î¼£Ìþ";
1204                 if (desc) return "²ø²æ¤ÈÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
1205 #else
1206                 if (name) return "Cure Light Wounds";
1207                 if (desc) return "Heals cut and HP a little.";
1208 #endif
1209     
1210                 {
1211                         int dice = 2;
1212                         int sides = 10;
1213
1214                         if (info) return info_heal(dice, sides, 0);
1215
1216                         if (cast)
1217                         {
1218                                 hp_player(damroll(dice, sides));
1219                                 set_cut(p_ptr->cut - 10);
1220                         }
1221                 }
1222                 break;
1223
1224         case 1:
1225 #ifdef JP
1226                 if (name) return "½ËÊ¡";
1227                 if (desc) return "°ìÄê»þ´Ö¡¢Ì¿ÃæΨ¤ÈAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
1228 #else
1229                 if (name) return "Bless";
1230                 if (desc) return "Gives bonus to hit and AC for a few turns.";
1231 #endif
1232     
1233                 {
1234                         int base = 12;
1235
1236                         if (info) return info_duration(base, base);
1237
1238                         if (cast)
1239                         {
1240                                 set_blessed(randint1(base) + base, FALSE);
1241                         }
1242                 }
1243                 break;
1244
1245         case 2:
1246 #ifdef JP
1247                 if (name) return "·Ú½ý";
1248                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤Ë¾®¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1249 #else
1250                 if (name) return "Cause Light Wounds";
1251                 if (desc) return "Wounds a monster a little unless resisted.";
1252 #endif
1253     
1254                 {
1255                         int dice = 3 + (plev - 1) / 5;
1256                         int sides = 4;
1257
1258                         if (info) return info_damage(dice, sides, 0);
1259
1260                         if (cast)
1261                         {
1262                                 if (!get_aim_dir(&dir)) return NULL;
1263                                 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
1264                         }
1265                 }
1266                 break;
1267
1268         case 3:
1269 #ifdef JP
1270                 if (name) return "¸÷¤Î¾¤´­";
1271                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
1272 #else
1273                 if (name) return "Call Light";
1274                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
1275 #endif
1276     
1277                 {
1278                         int dice = 2;
1279                         int sides = plev / 2;
1280                         int rad = plev / 10 + 1;
1281
1282                         if (info) return info_damage(dice, sides, 0);
1283
1284                         if (cast)
1285                         {
1286                                 lite_area(damroll(dice, sides), rad);
1287                         }
1288                 }
1289                 break;
1290
1291         case 4:
1292 #ifdef JP
1293                 if (name) return "æ« & ±£¤·Èâ´¶ÃÎ";
1294                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤È³¬Ãʤò´¶ÃΤ¹¤ë¡£";
1295 #else
1296                 if (name) return "Detect Doors & Traps";
1297                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
1298 #endif
1299     
1300                 {
1301                         int rad = DETECT_RAD_DEFAULT;
1302
1303                         if (info) return info_radius(rad);
1304
1305                         if (cast)
1306                         {
1307                                 detect_traps(rad, TRUE);
1308                                 detect_doors(rad);
1309                                 detect_stairs(rad);
1310                         }
1311                 }
1312                 break;
1313
1314         case 5:
1315 #ifdef JP
1316                 if (name) return "½Å½ý¤Î¼£Ìþ";
1317                 if (desc) return "²ø²æ¤ÈÂÎÎϤòÃæÄøÅÙ²óÉü¤µ¤»¤ë¡£";
1318 #else
1319                 if (name) return "Cure Medium Wounds";
1320                 if (desc) return "Heals cut and HP more.";
1321 #endif
1322     
1323                 {
1324                         int dice = 4;
1325                         int sides = 10;
1326
1327                         if (info) return info_heal(dice, sides, 0);
1328
1329                         if (cast)
1330                         {
1331                                 hp_player(damroll(dice, sides));
1332                                 set_cut((p_ptr->cut / 2) - 20);
1333                         }
1334                 }
1335                 break;
1336
1337         case 6:
1338 #ifdef JP
1339                 if (name) return "²òÆÇ";
1340                 if (desc) return "ÂÎÆâ¤ÎÆǤò¼è¤ê½ü¤¯¡£";
1341 #else
1342                 if (name) return "Cure Poison";
1343                 if (desc) return "Cure poison status.";
1344 #endif
1345     
1346                 {
1347                         if (cast)
1348                         {
1349                                 set_poisoned(0);
1350                         }
1351                 }
1352                 break;
1353
1354         case 7:
1355 #ifdef JP
1356                 if (name) return "¶õÊ¢½¼Â­";
1357                 if (desc) return "ËþÊ¢¤Ë¤¹¤ë¡£";
1358 #else
1359                 if (name) return "Satisfy Hunger";
1360                 if (desc) return "Satisfies hunger.";
1361 #endif
1362     
1363                 {
1364                         if (cast)
1365                         {
1366                                 set_food(PY_FOOD_MAX - 1);
1367                         }
1368                 }
1369                 break;
1370
1371         case 8:
1372 #ifdef JP
1373                 if (name) return "²ò¼ö";
1374                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
1375 #else
1376                 if (name) return "Remove Curse";
1377                 if (desc) return "Removes normal curses from equipped items.";
1378 #endif
1379
1380                 {
1381                         if (cast)
1382                         {
1383                                 if (remove_curse())
1384                                 {
1385 #ifdef JP
1386                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1387 #else
1388                                         msg_print("You feel as if someone is watching over you.");
1389 #endif
1390                                 }
1391                         }
1392                 }
1393                 break;
1394
1395         case 9:
1396 #ifdef JP
1397                 if (name) return "½Å½ý";
1398                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ËÃæ¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1399 #else
1400                 if (name) return "Cause Medium Wounds";
1401                 if (desc) return "Wounds a monster unless resisted.";
1402 #endif
1403     
1404                 {
1405                         int sides = 8 + (plev - 5) / 4;
1406                         int dice = 8;
1407
1408                         if (info) return info_damage(dice, sides, 0);
1409
1410                         if (cast)
1411                         {
1412                                 if (!get_aim_dir(&dir)) return NULL;
1413                                 fire_ball_hide(GF_WOUNDS, dir, damroll(sides, dice), 0);
1414                         }
1415                 }
1416                 break;
1417
1418         case 10:
1419 #ifdef JP
1420                 if (name) return "Ã×Ì¿½ý¤Î¼£Ìþ";
1421                 if (desc) return "ÂÎÎϤòÂçÉý¤Ë²óÉü¤µ¤»¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1422 #else
1423                 if (name) return "Cure Critical Wounds";
1424                 if (desc) return "Heals cut, stun and HP greatly.";
1425 #endif
1426     
1427                 {
1428                         int dice = 8;
1429                         int sides = 10;
1430
1431                         if (info) return info_heal(dice, sides, 0);
1432
1433                         if (cast)
1434                         {
1435                                 hp_player(damroll(dice, sides));
1436                                 set_stun(0);
1437                                 set_cut(0);
1438                         }
1439                 }
1440                 break;
1441
1442         case 11:
1443 #ifdef JP
1444                 if (name) return "ÂÑÇ®ÂÑ´¨";
1445                 if (desc) return "°ìÄê»þ´Ö¡¢²Ð±ê¤ÈÎ䵤¤ËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
1446 #else
1447                 if (name) return "Resist Heat and Cold";
1448                 if (desc) return "Gives resistance to fire and cold. These resistances can be added to which from equipment for more powerful resistances.";
1449 #endif
1450     
1451                 {
1452                         int base = 20;
1453
1454                         if (info) return info_duration(base, base);
1455
1456                         if (cast)
1457                         {
1458                                 set_oppose_cold(randint1(base) + base, FALSE);
1459                                 set_oppose_fire(randint1(base) + base, FALSE);
1460                         }
1461                 }
1462                 break;
1463
1464         case 12:
1465 #ifdef JP
1466                 if (name) return "¼þÊÕ´¶ÃÎ";
1467                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
1468 #else
1469                 if (name) return "Sense Surroundings";
1470                 if (desc) return "Maps nearby area.";
1471 #endif
1472     
1473                 {
1474                         int rad = DETECT_RAD_MAP;
1475
1476                         if (info) return info_radius(rad);
1477
1478                         if (cast)
1479                         {
1480                                 map_area(rad);
1481                         }
1482                 }
1483                 break;
1484
1485         case 13:
1486 #ifdef JP
1487                 if (name) return "¥Ñ¥Ë¥Ã¥¯¡¦¥¢¥ó¥Ç¥Ã¥É";
1488                 if (desc) return "»ë³¦Æâ¤Î¥¢¥ó¥Ç¥Ã¥É¤ò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1489 #else
1490                 if (name) return "Turn Undead";
1491                 if (desc) return "Attempts to scare undead monsters in sight.";
1492 #endif
1493     
1494                 {
1495                         if (cast)
1496                         {
1497                                 turn_undead();
1498                         }
1499                 }
1500                 break;
1501
1502         case 14:
1503 #ifdef JP
1504                 if (name) return "ÂÎÎϲóÉü";
1505                 if (desc) return "¶Ë¤á¤Æ¶¯ÎϤʲóÉü¼öʸ¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1506 #else
1507                 if (name) return "Healing";
1508                 if (desc) return "Much powerful healing magic, and heals cut and stun completely.";
1509 #endif
1510     
1511                 {
1512                         int heal = 300;
1513
1514                         if (info) return info_heal(0, 0, heal);
1515
1516                         if (cast)
1517                         {
1518                                 hp_player(heal);
1519                                 set_stun(0);
1520                                 set_cut(0);
1521                         }
1522                 }
1523                 break;
1524
1525         case 15:
1526 #ifdef JP
1527                 if (name) return "·ë³¦¤ÎÌæ¾Ï";
1528                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
1529 #else
1530                 if (name) return "Glyph of Warding";
1531                 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.";
1532 #endif
1533     
1534                 {
1535                         if (cast)
1536                         {
1537                                 warding_glyph();
1538                         }
1539                 }
1540                 break;
1541
1542         case 16:
1543 #ifdef JP
1544                 if (name) return "*²ò¼ö*";
1545                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
1546 #else
1547                 if (name) return "Dispel Curse";
1548                 if (desc) return "Removes normal and heavy curse from equipped items.";
1549 #endif
1550     
1551                 {
1552                         if (cast)
1553                         {
1554                                 if (remove_all_curse())
1555                                 {
1556 #ifdef JP
1557                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1558 #else
1559                                         msg_print("You feel as if someone is watching over you.");
1560 #endif
1561                                 }
1562                         }
1563                 }
1564                 break;
1565
1566         case 17:
1567 #ifdef JP
1568                 if (name) return "´Õ¼±";
1569                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
1570 #else
1571                 if (name) return "Perception";
1572                 if (desc) return "Identifies an item.";
1573 #endif
1574     
1575                 {
1576                         if (cast)
1577                         {
1578                                 if (!ident_spell(FALSE)) return NULL;
1579                         }
1580                 }
1581                 break;
1582
1583         case 18:
1584 #ifdef JP
1585                 if (name) return "¥¢¥ó¥Ç¥Ã¥ÉÂ໶";
1586                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥É¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
1587 #else
1588                 if (name) return "Dispel Undead";
1589                 if (desc) return "Damages all undead monsters in sight.";
1590 #endif
1591     
1592                 {
1593                         int dice = 1;
1594                         int sides = plev * 5;
1595
1596                         if (info) return info_damage(dice, sides, 0);
1597
1598                         if (cast)
1599                         {
1600                                 dispel_undead(damroll(dice, sides));
1601                         }
1602                 }
1603                 break;
1604
1605         case 19:
1606 #ifdef JP
1607                 if (name) return "Æä¤Î¹ï";
1608                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1609 #else
1610                 if (name) return "Day of the Dove";
1611                 if (desc) return "Attempts to charm all monsters in sight.";
1612 #endif
1613     
1614                 {
1615                         int power = plev * 2;
1616
1617                         if (info) return info_power(power);
1618
1619                         if (cast)
1620                         {
1621                                 charm_monsters(power);
1622                         }
1623                 }
1624                 break;
1625
1626         case 20:
1627 #ifdef JP
1628                 if (name) return "Ã×Ì¿½ý";
1629                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1630 #else
1631                 if (name) return "Cause Critical Wounds";
1632                 if (desc) return "Wounds a monster critically unless resisted.";
1633 #endif
1634     
1635                 {
1636                         int dice = 5 + (plev - 5) / 3;
1637                         int sides = 15;
1638
1639                         if (info) return info_damage(dice, sides, 0);
1640
1641                         if (cast)
1642                         {
1643                                 if (!get_aim_dir(&dir)) return NULL;
1644                                 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
1645                         }
1646                 }
1647                 break;
1648
1649         case 21:
1650 #ifdef JP
1651                 if (name) return "µ¢´Ô¤Î¾Û";
1652                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
1653 #else
1654                 if (name) return "Word of Recall";
1655                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
1656 #endif
1657     
1658                 {
1659                         int base = 15;
1660                         int sides = 20;
1661
1662                         if (info) return info_delay(base, sides);
1663
1664                         if (cast)
1665                         {
1666                                 if (!word_of_recall()) return NULL;
1667                         }
1668                 }
1669                 break;
1670
1671         case 22:
1672 #ifdef JP
1673                 if (name) return "¿¿¼Â¤Îº×ÃÅ";
1674                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
1675 #else
1676                 if (name) return "Alter Reality";
1677                 if (desc) return "Recreates current dungeon level.";
1678 #endif
1679     
1680                 {
1681                         int base = 15;
1682                         int sides = 20;
1683
1684                         if (info) return info_delay(base, sides);
1685
1686                         if (cast)
1687                         {
1688                                 alter_reality();
1689                         }
1690                 }
1691                 break;
1692
1693         case 23:
1694 #ifdef JP
1695                 if (name) return "¿¿¡¦·ë³¦";
1696                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤È¼þ°Ï8¥Þ¥¹¤Î¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
1697 #else
1698                 if (name) return "Warding True";
1699                 if (desc) return "Creates glyphs in all adjacent squares and under you.";
1700 #endif
1701     
1702                 {
1703                         int rad = 1;
1704
1705                         if (info) return info_radius(rad);
1706
1707                         if (cast)
1708                         {
1709                                 warding_glyph();
1710                                 glyph_creation();
1711                         }
1712                 }
1713                 break;
1714
1715         case 24:
1716 #ifdef JP
1717                 if (name) return "ÉÔÌÓ²½";
1718                 if (desc) return "¤³¤Î³¬¤ÎÁý¿£¤¹¤ë¥â¥ó¥¹¥¿¡¼¤¬Áý¿£¤Ç¤­¤Ê¤¯¤Ê¤ë¡£";
1719 #else
1720                 if (name) return "Sterilization";
1721                 if (desc) return "Prevents any breeders on current level from breeding.";
1722 #endif
1723     
1724                 {
1725                         if (cast)
1726                         {
1727                                 num_repro += MAX_REPRO;
1728                         }
1729                 }
1730                 break;
1731
1732         case 25:
1733 #ifdef JP
1734                 if (name) return "Á´´¶ÃÎ";
1735                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
1736 #else
1737                 if (name) return "Detection";
1738                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
1739 #endif
1740
1741                 {
1742                         int rad = DETECT_RAD_DEFAULT;
1743
1744                         if (info) return info_radius(rad);
1745
1746                         if (cast)
1747                         {
1748                                 detect_all(rad);
1749                         }
1750                 }
1751                 break;
1752
1753         case 26:
1754 #ifdef JP
1755                 if (name) return "¥¢¥ó¥Ç¥Ã¥É¾ÃÌÇ";
1756                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë¤¤¤ë¥¢¥ó¥Ç¥Ã¥É¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1757 #else
1758                 if (name) return "Annihilate Undead";
1759                 if (desc) return "Eliminates all nearby undead monsters, exhausting you.  Powerful or unique monsters may be able to resist.";
1760 #endif
1761     
1762                 {
1763                         int power = plev + 50;
1764
1765                         if (info) return info_power(power);
1766
1767                         if (cast)
1768                         {
1769                                 mass_genocide_undead(power, TRUE);
1770                         }
1771                 }
1772                 break;
1773
1774         case 27:
1775 #ifdef JP
1776                 if (name) return "ÀéΤ´ã";
1777                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
1778 #else
1779                 if (name) return "Clairvoyance";
1780                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
1781 #endif
1782     
1783                 {
1784                         if (cast)
1785                         {
1786                                 wiz_lite(FALSE);
1787                         }
1788                 }
1789                 break;
1790
1791         case 28:
1792 #ifdef JP
1793                 if (name) return "Á´Éü³è";
1794                 if (desc) return "¤¹¤Ù¤Æ¤Î¥¹¥Æ¡¼¥¿¥¹¤È·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
1795 #else
1796                 if (name) return "Restoration";
1797                 if (desc) return "Restores all stats and experience.";
1798 #endif
1799     
1800                 {
1801                         if (cast)
1802                         {
1803                                 do_res_stat(A_STR);
1804                                 do_res_stat(A_INT);
1805                                 do_res_stat(A_WIS);
1806                                 do_res_stat(A_DEX);
1807                                 do_res_stat(A_CON);
1808                                 do_res_stat(A_CHR);
1809                                 restore_level();
1810                         }
1811                 }
1812                 break;
1813
1814         case 29:
1815 #ifdef JP
1816                 if (name) return "*ÂÎÎϲóÉü*";
1817                 if (desc) return "ºÇ¶¯¤Î¼£Ìþ¤ÎËâË¡¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1818 #else
1819                 if (name) return "Healing True";
1820                 if (desc) return "The greatest healing magic. Heals all HP, cut and stun.";
1821 #endif
1822     
1823                 {
1824                         int heal = 2000;
1825
1826                         if (info) return info_heal(0, 0, heal);
1827
1828                         if (cast)
1829                         {
1830                                 hp_player(heal);
1831                                 set_stun(0);
1832                                 set_cut(0);
1833                         }
1834                 }
1835                 break;
1836
1837         case 30:
1838 #ifdef JP
1839                 if (name) return "À»¤Ê¤ë¥Ó¥¸¥ç¥ó";
1840                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
1841 #else
1842                 if (name) return "Holy Vision";
1843                 if (desc) return "*Identifies* an item.";
1844 #endif
1845     
1846                 {
1847                         if (cast)
1848                         {
1849                                 if (!identify_fully(FALSE)) return NULL;
1850                         }
1851                 }
1852                 break;
1853
1854         case 31:
1855 #ifdef JP
1856                 if (name) return "µæ¶Ë¤ÎÂÑÀ­";
1857                 if (desc) return "°ìÄê»þ´Ö¡¢¤¢¤é¤æ¤ëÂÑÀ­¤òÉÕ¤±¡¢AC¤ÈËâË¡ËɸæǽÎϤò¾å¾º¤µ¤»¤ë¡£";
1858 #else
1859                 if (name) return "Ultimate Resistance";
1860                 if (desc) return "Gives ultimate resistance, bonus to AC and speed.";
1861 #endif
1862     
1863                 {
1864                         int base = plev / 2;
1865
1866                         if (info) return info_duration(base, base);
1867
1868                         if (cast)
1869                         {
1870                                 int v = randint1(base) + base;
1871                                 set_fast(v, FALSE);
1872                                 set_oppose_acid(v, FALSE);
1873                                 set_oppose_elec(v, FALSE);
1874                                 set_oppose_fire(v, FALSE);
1875                                 set_oppose_cold(v, FALSE);
1876                                 set_oppose_pois(v, FALSE);
1877                                 set_ultimate_res(v, FALSE);
1878                         }
1879                 }
1880                 break;
1881         }
1882
1883         return "";
1884 }
1885
1886
1887 static cptr do_sorcery_spell(int spell, int mode)
1888 {
1889         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
1890         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
1891         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
1892         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
1893
1894         int dir;
1895         int plev = p_ptr->lev;
1896
1897         switch (spell)
1898         {
1899         case 0:
1900 #ifdef JP
1901                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
1902                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
1903 #else
1904                 if (name) return "Detect Monsters";
1905                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
1906 #endif
1907     
1908                 {
1909                         int rad = DETECT_RAD_DEFAULT;
1910
1911                         if (info) return info_radius(rad);
1912
1913                         if (cast)
1914                         {
1915                                 detect_monsters_normal(rad);
1916                         }
1917                 }
1918                 break;
1919
1920         case 1:
1921 #ifdef JP
1922                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
1923                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
1924 #else
1925                 if (name) return "Phase Door";
1926                 if (desc) return "Teleport short distance.";
1927 #endif
1928     
1929                 {
1930                         int range = 10;
1931
1932                         if (info) return info_range(range);
1933
1934                         if (cast)
1935                         {
1936                                 teleport_player(range, 0L);
1937                         }
1938                 }
1939                 break;
1940
1941         case 2:
1942 #ifdef JP
1943                 if (name) return "櫤ÈÈâ´¶ÃÎ";
1944                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤ÎÈâ¤È櫤ò´¶ÃΤ¹¤ë¡£";
1945 #else
1946                 if (name) return "Detect Doors and Traps";
1947                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
1948 #endif
1949     
1950                 {
1951                         int rad = DETECT_RAD_DEFAULT;
1952
1953                         if (info) return info_radius(rad);
1954
1955                         if (cast)
1956                         {
1957                                 detect_traps(rad, TRUE);
1958                                 detect_doors(rad);
1959                                 detect_stairs(rad);
1960                         }
1961                 }
1962                 break;
1963
1964         case 3:
1965 #ifdef JP
1966                 if (name) return "¥é¥¤¥È¡¦¥¨¥ê¥¢";
1967                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
1968 #else
1969                 if (name) return "Light Area";
1970                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
1971 #endif
1972     
1973                 {
1974                         int dice = 2;
1975                         int sides = plev / 2;
1976                         int rad = plev / 10 + 1;
1977
1978                         if (info) return info_damage(dice, sides, 0);
1979
1980                         if (cast)
1981                         {
1982                                 lite_area(damroll(dice, sides), rad);
1983                         }
1984                 }
1985                 break;
1986
1987         case 4:
1988 #ifdef JP
1989                 if (name) return "¥Ñ¥Ë¥Ã¥¯¡¦¥â¥ó¥¹¥¿¡¼";
1990                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤòº®Í𤵤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1991 #else
1992                 if (name) return "Confuse Monster";
1993                 if (desc) return "Attempts to confuse a monster.";
1994 #endif
1995     
1996                 {
1997                         int power = (plev * 3) / 2;
1998
1999                         if (info) return info_power(power);
2000
2001                         if (cast)
2002                         {
2003                                 if (!get_aim_dir(&dir)) return NULL;
2004
2005                                 confuse_monster(dir, power);
2006                         }
2007                 }
2008                 break;
2009
2010         case 5:
2011 #ifdef JP
2012                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
2013                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
2014 #else
2015                 if (name) return "Teleport";
2016                 if (desc) return "Teleport long distance.";
2017 #endif
2018     
2019                 {
2020                         int range = plev * 5;
2021
2022                         if (info) return info_range(range);
2023
2024                         if (cast)
2025                         {
2026                                 teleport_player(range, 0L);
2027                         }
2028                 }
2029                 break;
2030
2031         case 6:
2032 #ifdef JP
2033                 if (name) return "¥¹¥ê¡¼¥×¡¦¥â¥ó¥¹¥¿¡¼";
2034                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2035 #else
2036                 if (name) return "Sleep Monster";
2037                 if (desc) return "Attempts to sleep a monster.";
2038 #endif
2039     
2040                 {
2041                         int power = plev;
2042
2043                         if (info) return info_power(power);
2044
2045                         if (cast)
2046                         {
2047                                 if (!get_aim_dir(&dir)) return NULL;
2048
2049                                 sleep_monster(dir);
2050                         }
2051                 }
2052                 break;
2053
2054         case 7:
2055 #ifdef JP
2056                 if (name) return "ËâÎϽ¼Å¶";
2057                 if (desc) return "¾ó/ËâË¡ËÀ¤Î½¼Å¶²ó¿ô¤òÁý¤ä¤¹¤«¡¢½¼Å¶Ãæ¤Î¥í¥Ã¥É¤Î½¼Å¶»þ´Ö¤ò¸º¤é¤¹¡£";
2058 #else
2059                 if (name) return "Recharging";
2060                 if (desc) return "Recharges staffs, wands or rods.";
2061 #endif
2062     
2063                 {
2064                         int power = plev * 4;
2065
2066                         if (info) return info_power(power);
2067
2068                         if (cast)
2069                         {
2070                                 if (!recharge(power)) return NULL;
2071                         }
2072                 }
2073                 break;
2074
2075         case 8:
2076 #ifdef JP
2077                 if (name) return "ËâË¡¤ÎÃÏ¿Þ";
2078                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
2079 #else
2080                 if (name) return "Magic Mapping";
2081                 if (desc) return "Maps nearby area.";
2082 #endif
2083     
2084                 {
2085                         int rad = DETECT_RAD_MAP;
2086
2087                         if (info) return info_radius(rad);
2088
2089                         if (cast)
2090                         {
2091                                 map_area(rad);
2092                         }
2093                 }
2094                 break;
2095
2096         case 9:
2097 #ifdef JP
2098                 if (name) return "´ÕÄê";
2099                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
2100 #else
2101                 if (name) return "Identify";
2102                 if (desc) return "Identifies an item.";
2103 #endif
2104     
2105                 {
2106                         if (cast)
2107                         {
2108                                 if (!ident_spell(FALSE)) return NULL;
2109                         }
2110                 }
2111                 break;
2112
2113         case 10:
2114 #ifdef JP
2115                 if (name) return "¥¹¥í¥¦¡¦¥â¥ó¥¹¥¿¡¼";
2116                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¸ºÂ®¤µ¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2117 #else
2118                 if (name) return "Slow Monster";
2119                 if (desc) return "Attempts to slow a monster.";
2120 #endif
2121     
2122                 {
2123                         int power = plev;
2124
2125                         if (info) return info_power(power);
2126
2127                         if (cast)
2128                         {
2129                                 if (!get_aim_dir(&dir)) return NULL;
2130
2131                                 slow_monster(dir);
2132                         }
2133                 }
2134                 break;
2135
2136         case 11:
2137 #ifdef JP
2138                 if (name) return "¼þÊÕ¥¹¥ê¡¼¥×";
2139                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2140 #else
2141                 if (name) return "Mass Sleep";
2142                 if (desc) return "Attempts to sleep all monsters in sight.";
2143 #endif
2144     
2145                 {
2146                         int power = plev;
2147
2148                         if (info) return info_power(power);
2149
2150                         if (cast)
2151                         {
2152                                 sleep_monsters();
2153                         }
2154                 }
2155                 break;
2156
2157         case 12:
2158 #ifdef JP
2159                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
2160                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2161 #else
2162                 if (name) return "Teleport Away";
2163                 if (desc) return "Teleports all monsters on the line away unless resisted.";
2164 #endif
2165     
2166                 {
2167                         int power = plev;
2168
2169                         if (info) return info_power(power);
2170
2171                         if (cast)
2172                         {
2173                                 if (!get_aim_dir(&dir)) return NULL;
2174
2175                                 fire_beam(GF_AWAY_ALL, dir, power);
2176                         }
2177                 }
2178                 break;
2179
2180         case 13:
2181 #ifdef JP
2182                 if (name) return "¥¹¥Ô¡¼¥É";
2183                 if (desc) return "°ìÄê»þ´Ö¡¢²Ã®¤¹¤ë¡£";
2184 #else
2185                 if (name) return "Haste Self";
2186                 if (desc) return "Hastes you for a while.";
2187 #endif
2188     
2189                 {
2190                         int base = plev;
2191                         int sides = 20 + plev;
2192
2193                         if (info) return info_duration(base, sides);
2194
2195                         if (cast)
2196                         {
2197                                 set_fast(randint1(sides) + base, FALSE);
2198                         }
2199                 }
2200                 break;
2201
2202         case 14:
2203 #ifdef JP
2204                 if (name) return "¿¿¡¦´¶ÃÎ";
2205                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
2206 #else
2207                 if (name) return "Detection True";
2208                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
2209 #endif
2210     
2211                 {
2212                         int rad = DETECT_RAD_DEFAULT;
2213
2214                         if (info) return info_radius(rad);
2215
2216                         if (cast)
2217                         {
2218                                 detect_all(rad);
2219                         }
2220                 }
2221                 break;
2222
2223         case 15:
2224 #ifdef JP
2225                 if (name) return "¿¿¡¦´ÕÄê";
2226                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
2227 #else
2228                 if (name) return "Identify True";
2229                 if (desc) return "*Identifies* an item.";
2230 #endif
2231     
2232                 {
2233                         if (cast)
2234                         {
2235                                 if (!identify_fully(FALSE)) return NULL;
2236                         }
2237                 }
2238                 break;
2239
2240         case 16:
2241 #ifdef JP
2242                 if (name) return "ʪÂΤȺâÊõ´¶ÃÎ";
2243                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥¢¥¤¥Æ¥à¤ÈºâÊõ¤ò´¶ÃΤ¹¤ë¡£";
2244 #else
2245                 if (name) return "Detect items and Treasure";
2246                 if (desc) return "Detects all treasures and items in your vicinity.";
2247 #endif
2248     
2249                 {
2250                         int rad = DETECT_RAD_DEFAULT;
2251
2252                         if (info) return info_radius(rad);
2253
2254                         if (cast)
2255                         {
2256                                 detect_objects_normal(rad);
2257                                 detect_treasure(rad);
2258                                 detect_objects_gold(rad);
2259                         }
2260                 }
2261                 break;
2262
2263         case 17:
2264 #ifdef JP
2265                 if (name) return "¥Á¥ã¡¼¥à¡¦¥â¥ó¥¹¥¿¡¼";
2266                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2267 #else
2268                 if (name) return "Charm Monster";
2269                 if (desc) return "Attempts to charm a monster.";
2270 #endif
2271     
2272                 {
2273                         int power = plev;
2274
2275                         if (info) return info_power(power);
2276
2277                         if (cast)
2278                         {
2279                                 if (!get_aim_dir(&dir)) return NULL;
2280
2281                                 charm_monster(dir, power);
2282                         }
2283                 }
2284                 break;
2285
2286         case 18:
2287 #ifdef JP
2288                 if (name) return "Àº¿À´¶ÃÎ";
2289                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
2290 #else
2291                 if (name) return "Sense Minds";
2292                 if (desc) return "Gives telepathy for a while.";
2293 #endif
2294     
2295                 {
2296                         int base = 25;
2297                         int sides = 30;
2298
2299                         if (info) return info_duration(base, sides);
2300
2301                         if (cast)
2302                         {
2303                                 set_tim_esp(randint1(sides) + base, FALSE);
2304                         }
2305                 }
2306                 break;
2307
2308         case 19:
2309 #ifdef JP
2310                 if (name) return "³¹°ÜÆ°";
2311                 if (desc) return "³¹¤Ø°ÜÆ°¤¹¤ë¡£ÃϾå¤Ë¤¤¤ë¤È¤­¤·¤«»È¤¨¤Ê¤¤¡£";
2312 #else
2313                 if (name) return "Teleport to town";
2314                 if (desc) return "Teleport to a town which you choose in a moment. Can only be used outdoors.";
2315 #endif
2316     
2317                 {
2318                         if (cast)
2319                         {
2320                                 if (!tele_town()) return NULL;
2321                         }
2322                 }
2323                 break;
2324
2325         case 20:
2326 #ifdef JP
2327                 if (name) return "¼«¸ÊʬÀÏ";
2328                 if (desc) return "¸½ºß¤Î¼«Ê¬¤Î¾õÂÖ¤ò´°Á´¤ËÃΤ롣";
2329 #else
2330                 if (name) return "Self Knowledge";
2331                 if (desc) return "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.";
2332 #endif
2333     
2334                 {
2335                         if (cast)
2336                         {
2337                                 self_knowledge();
2338                         }
2339                 }
2340                 break;
2341
2342         case 21:
2343 #ifdef JP
2344                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
2345                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
2346 #else
2347                 if (name) return "Teleport Level";
2348                 if (desc) return "Teleport to up or down stairs in a moment.";
2349 #endif
2350     
2351                 {
2352                         if (cast)
2353                         {
2354 #ifdef JP
2355                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
2356 #else
2357                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
2358 #endif
2359                                 teleport_level(0);
2360                         }
2361                 }
2362                 break;
2363
2364         case 22:
2365 #ifdef JP
2366                 if (name) return "µ¢´Ô¤Î¼öʸ";
2367                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
2368 #else
2369                 if (name) return "Word of Recall";
2370                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
2371 #endif
2372     
2373                 {
2374                         int base = 15;
2375                         int sides = 20;
2376
2377                         if (info) return info_delay(base, sides);
2378
2379                         if (cast)
2380                         {
2381                                 if (!word_of_recall()) return NULL;
2382                         }
2383                 }
2384                 break;
2385
2386         case 23:
2387 #ifdef JP
2388                 if (name) return "¼¡¸µ¤ÎÈâ";
2389                 if (desc) return "ûµ÷Î¥Æâ¤Î»ØÄꤷ¤¿¾ì½ê¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
2390 #else
2391                 if (name) return "Dimension Door";
2392                 if (desc) return "Teleport to given location.";
2393 #endif
2394     
2395                 {
2396                         int range = plev / 2 + 10;
2397
2398                         if (info) return info_range(range);
2399
2400                         if (cast)
2401                         {
2402 #ifdef JP
2403                                 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
2404 #else
2405                                 msg_print("You open a dimensional gate. Choose a destination.");
2406 #endif
2407
2408                                 if (!dimension_door()) return NULL;
2409                         }
2410                 }
2411                 break;
2412
2413         case 24:
2414 #ifdef JP
2415                 if (name) return "Ä´ºº";
2416                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤Î°À­¡¢»Ä¤êÂÎÎÏ¡¢ºÇÂçÂÎÎÏ¡¢¥¹¥Ô¡¼¥É¡¢ÀµÂΤòÃΤ롣";
2417 #else
2418                 if (name) return "Probing";
2419                 if (desc) return "Proves all monsters' alignment, HP, speed and their true character.";
2420 #endif
2421     
2422                 {
2423                         if (cast)
2424                         {
2425                                 probing();
2426                         }
2427                 }
2428                 break;
2429
2430         case 25:
2431 #ifdef JP
2432                 if (name) return "Çúȯ¤Î¥ë¡¼¥ó";
2433                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤ë¤ÈÇúȯ¤·¤Æ¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
2434 #else
2435                 if (name) return "Explosive Rune";
2436                 if (desc) return "Sets a glyph under you. The glyph will explode when a monster moves on it.";
2437 #endif
2438     
2439                 {
2440                         int dice = 7;
2441                         int sides = 7;
2442                         int base = plev;
2443
2444                         if (info) return info_damage(dice, sides, base);
2445
2446                         if (cast)
2447                         {
2448                                 explosive_rune();
2449                         }
2450                 }
2451                 break;
2452
2453         case 26:
2454 #ifdef JP
2455                 if (name) return "Ç°Æ°ÎÏ";
2456                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼«Ê¬¤Î­¸µ¤Ø°ÜÆ°¤µ¤»¤ë¡£";
2457 #else
2458                 if (name) return "Telekinesis";
2459                 if (desc) return "Pulls a distant item close to you.";
2460 #endif
2461     
2462                 {
2463                         int weight = plev * 15;
2464
2465                         if (info) return info_weight(weight);
2466
2467                         if (cast)
2468                         {
2469                                 if (!get_aim_dir(&dir)) return NULL;
2470
2471                                 fetch(dir, weight, FALSE);
2472                         }
2473                 }
2474                 break;
2475
2476         case 27:
2477 #ifdef JP
2478                 if (name) return "ÀéΤ´ã";
2479                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤µ¤é¤Ë¡¢°ìÄê»þ´Ö¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
2480 #else
2481                 if (name) return "Clairvoyance";
2482                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
2483 #endif
2484     
2485                 {
2486                         int base = 25;
2487                         int sides = 30;
2488
2489                         if (info) return info_duration(base, sides);
2490
2491                         if (cast)
2492                         {
2493                                 chg_virtue(V_KNOWLEDGE, 1);
2494                                 chg_virtue(V_ENLIGHTEN, 1);
2495
2496                                 wiz_lite(FALSE);
2497
2498                                 if (!p_ptr->telepathy)
2499                                 {
2500                                         set_tim_esp(randint1(sides) + base, FALSE);
2501                                 }
2502                         }
2503                 }
2504                 break;
2505
2506         case 28:
2507 #ifdef JP
2508                 if (name) return "̥λ¤Î»ëÀþ";
2509                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2510 #else
2511                 if (name) return "Charm monsters";
2512                 if (desc) return "Attempts to charm all monsters in sight.";
2513 #endif
2514     
2515                 {
2516                         int power = plev * 2;
2517
2518                         if (info) return info_power(power);
2519
2520                         if (cast)
2521                         {
2522                                 charm_monsters(power);
2523                         }
2524                 }
2525                 break;
2526
2527         case 29:
2528 #ifdef JP
2529                 if (name) return "Ï£¶â½Ñ";
2530                 if (desc) return "¥¢¥¤¥Æ¥à1¤Ä¤ò¤ª¶â¤ËÊѤ¨¤ë¡£";
2531 #else
2532                 if (name) return "Alchemy";
2533                 if (desc) return "Turns an item into 1/3 of its value in gold.";
2534 #endif
2535     
2536                 {
2537                         if (cast)
2538                         {
2539                                 if (!alchemy()) return NULL;
2540                         }
2541                 }
2542                 break;
2543
2544         case 30:
2545 #ifdef JP
2546                 if (name) return "²øʪÄÉÊü";
2547                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2548 #else
2549                 if (name) return "Banishment";
2550                 if (desc) return "Teleports all monsters in sight away unless resisted.";
2551 #endif
2552     
2553                 {
2554                         int power = plev * 4;
2555
2556                         if (info) return info_power(power);
2557
2558                         if (cast)
2559                         {
2560                                 banish_monsters(power);
2561                         }
2562                 }
2563                 break;
2564
2565         case 31:
2566 #ifdef JP
2567                 if (name) return "̵½ý¤Îµå";
2568                 if (desc) return "°ìÄê»þ´Ö¡¢¥À¥á¡¼¥¸¤ò¼õ¤±¤Ê¤¯¤Ê¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£Àڤ줿½Ö´Ö¤Ë¾¯¤·¥¿¡¼¥ó¤ò¾ÃÈñ¤¹¤ë¤Î¤ÇÃí°Õ¡£";
2569 #else
2570                 if (name) return "Globe of Invulnerability";
2571                 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.";
2572 #endif
2573     
2574                 {
2575                         int base = 4;
2576
2577                         if (info) return info_duration(base, base);
2578
2579                         if (cast)
2580                         {
2581                                 set_invuln(randint1(base) + base, FALSE);
2582                         }
2583                 }
2584                 break;
2585         }
2586
2587         return "";
2588 }
2589
2590
2591 static cptr do_nature_spell(int spell, int mode)
2592 {
2593         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
2594         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
2595         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
2596         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
2597
2598 #ifdef JP
2599         static const char s_dam[] = "»½ý:";
2600         static const char s_rng[] = "¼ÍÄø";
2601 #else
2602         static const char s_dam[] = "dam ";
2603         static const char s_rng[] = "rng ";
2604 #endif
2605
2606         int dir;
2607         int plev = p_ptr->lev;
2608
2609         switch (spell)
2610         {
2611         case 0:
2612 #ifdef JP
2613                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
2614                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
2615 #else
2616                 if (name) return "Detect Creatures";
2617                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
2618 #endif
2619     
2620                 {
2621                         int rad = DETECT_RAD_DEFAULT;
2622
2623                         if (info) return info_radius(rad);
2624
2625                         if (cast)
2626                         {
2627                                 detect_monsters_normal(rad);
2628                         }
2629                 }
2630                 break;
2631
2632         case 1:
2633 #ifdef JP
2634                 if (name) return "°ðºÊ";
2635                 if (desc) return "ÅÅ·â¤Îû¤¤¥Ó¡¼¥à¤òÊü¤Ä¡£";
2636 #else
2637                 if (name) return "Lightning";
2638                 if (desc) return "Fires a short beam of lightning.";
2639 #endif
2640     
2641                 {
2642                         int dice = 3 + (plev - 1) / 5;
2643                         int sides = 4;
2644                         int range = plev / 6 + 2;
2645
2646                         if (info) return format("%s%dd%d %s%d", s_dam, dice, sides, s_rng, range);
2647
2648                         if (cast)
2649                         {
2650                                 project_length = range;
2651
2652                                 if (!get_aim_dir(&dir)) return NULL;
2653
2654                                 fire_beam(GF_ELEC, dir, damroll(dice, sides));
2655                         }
2656                 }
2657                 break;
2658
2659         case 2:
2660 #ifdef JP
2661                 if (name) return "櫤ÈÈâ´¶ÃÎ";
2662                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤ò´¶ÃΤ¹¤ë¡£";
2663 #else
2664                 if (name) return "Detect Doors and Traps";
2665                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
2666 #endif
2667     
2668                 {
2669                         int rad = DETECT_RAD_DEFAULT;
2670
2671                         if (info) return info_radius(rad);
2672
2673                         if (cast)
2674                         {
2675                                 detect_traps(rad, TRUE);
2676                                 detect_doors(rad);
2677                                 detect_stairs(rad);
2678                         }
2679                 }
2680                 break;
2681
2682         case 3:
2683 #ifdef JP
2684                 if (name) return "¿©ÎÈÀ¸À®";
2685                 if (desc) return "¿©ÎÁ¤ò°ì¤Äºî¤ê½Ð¤¹¡£";
2686 #else
2687                 if (name) return "Produce Food";
2688                 if (desc) return "Produces a Ration of Food.";
2689 #endif
2690     
2691                 {
2692                         if (cast)
2693                         {
2694                                 object_type forge, *q_ptr = &forge;
2695
2696 #ifdef JP
2697                                 msg_print("¿©ÎÁ¤òÀ¸À®¤·¤¿¡£");
2698 #else
2699                                 msg_print("A food ration is produced.");
2700 #endif
2701
2702                                 /* Create the food ration */
2703                                 object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
2704
2705                                 /* Drop the object from heaven */
2706                                 drop_near(q_ptr, -1, py, px);
2707                         }
2708                 }
2709                 break;
2710
2711         case 4:
2712 #ifdef JP
2713                 if (name) return "Æü¤Î¸÷";
2714                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
2715 #else
2716                 if (name) return "Daylight";
2717                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
2718 #endif
2719     
2720                 {
2721                         int dice = 2;
2722                         int sides = plev / 2;
2723                         int rad = (plev / 10) + 1;
2724
2725                         if (info) return info_damage(dice, sides, 0);
2726
2727                         if (cast)
2728                         {
2729                                 lite_area(damroll(dice, sides), rad);
2730
2731                                 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
2732                                 {
2733 #ifdef JP
2734                                         msg_print("Æü¤Î¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
2735 #else
2736                                         msg_print("The daylight scorches your flesh!");
2737 #endif
2738
2739 #ifdef JP
2740                                         take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "Æü¤Î¸÷", -1);
2741 #else
2742                                         take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "daylight", -1);
2743 #endif
2744                                 }
2745                         }
2746                 }
2747                 break;
2748
2749         case 5:
2750 #ifdef JP
2751                 if (name) return "ưʪ½¬¤·";
2752                 if (desc) return "ưʪ1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2753 #else
2754                 if (name) return "Animal Taming";
2755                 if (desc) return "Attempts to charm an animal.";
2756 #endif
2757     
2758                 {
2759                         int power = plev;
2760
2761                         if (info) return info_power(power);
2762
2763                         if (cast)
2764                         {
2765                                 if (!get_aim_dir(&dir)) return NULL;
2766
2767                                 charm_animal(dir, power);
2768                         }
2769                 }
2770                 break;
2771
2772         case 6:
2773 #ifdef JP
2774                 if (name) return "´Ä¶­¤Ø¤ÎÂÑÀ­";
2775                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¡¢±ê¡¢ÅÅ·â¤ËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
2776 #else
2777                 if (name) return "Resist Environment";
2778                 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.";
2779 #endif
2780     
2781                 {
2782                         int base = 20;
2783
2784                         if (info) return info_duration(base, base);
2785
2786                         if (cast)
2787                         {
2788                                 set_oppose_cold(randint1(base) + base, FALSE);
2789                                 set_oppose_fire(randint1(base) + base, FALSE);
2790                                 set_oppose_elec(randint1(base) + base, FALSE);
2791                         }
2792                 }
2793                 break;
2794
2795         case 7:
2796 #ifdef JP
2797                 if (name) return "½ý¤ÈÆǼ£ÎÅ";
2798                 if (desc) return "²ø²æ¤òÁ´²÷¤µ¤»¡¢ÆǤòÂΤ«¤é´°Á´¤Ë¼è¤ê½ü¤­¡¢ÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
2799 #else
2800                 if (name) return "Cure Wounds & Poison";
2801                 if (desc) return "Heals all cut and poison status. Heals HP a little.";
2802 #endif
2803     
2804                 {
2805                         int dice = 2;
2806                         int sides = 8;
2807
2808                         if (info) return info_heal(dice, sides, 0);
2809
2810                         if (cast)
2811                         {
2812                                 hp_player(damroll(dice, sides));
2813                                 set_cut(0);
2814                                 set_poisoned(0);
2815                         }
2816                 }
2817                 break;
2818
2819         case 8:
2820 #ifdef JP
2821                 if (name) return "´äÀÐÍϲò";
2822                 if (desc) return "ÊɤòÍϤ«¤·¤Æ¾²¤Ë¤¹¤ë¡£";
2823 #else
2824                 if (name) return "Stone to Mud";
2825                 if (desc) return "Turns one rock square to mud.";
2826 #endif
2827     
2828                 {
2829                         int dice = 1;
2830                         int sides = 30;
2831                         int base = 20;
2832
2833                         if (info) return info_damage(dice, sides, base);
2834
2835                         if (cast)
2836                         {
2837                                 if (!get_aim_dir(&dir)) return NULL;
2838
2839                                 wall_to_mud(dir);
2840                         }
2841                 }
2842                 break;
2843
2844         case 9:
2845 #ifdef JP
2846                 if (name) return "¥¢¥¤¥¹¡¦¥Ü¥ë¥È";
2847                 if (desc) return "Î䵤¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
2848 #else
2849                 if (name) return "Frost Bolt";
2850                 if (desc) return "Fires a bolt or beam of cold.";
2851 #endif
2852     
2853                 {
2854                         int dice = 3 + (plev - 5) / 4;
2855                         int sides = 8;
2856
2857                         if (info) return info_damage(dice, sides, 0);
2858
2859                         if (cast)
2860                         {
2861                                 if (!get_aim_dir(&dir)) return NULL;
2862                                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir, damroll(dice, sides));
2863                         }
2864                 }
2865                 break;
2866
2867         case 10:
2868 #ifdef JP
2869                 if (name) return "¼«Á³¤Î³ÐÀÃ";
2870                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ·¡¢¶á¤¯¤Îæ«¡¢Èâ¡¢³¬ÃÊ¡¢Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
2871 #else
2872                 if (name) return "Nature Awareness";
2873                 if (desc) return "Maps nearby area. Detects all monsters, traps, doors and stairs.";
2874 #endif
2875     
2876                 {
2877                         int rad1 = DETECT_RAD_MAP;
2878                         int rad2 = DETECT_RAD_DEFAULT;
2879
2880                         if (info) return info_radius(MAX(rad1, rad2));
2881
2882                         if (cast)
2883                         {
2884                                 map_area(rad1);
2885                                 detect_traps(rad2, TRUE);
2886                                 detect_doors(rad2);
2887                                 detect_stairs(rad2);
2888                                 detect_monsters_normal(rad2);
2889                         }
2890                 }
2891                 break;
2892
2893         case 11:
2894 #ifdef JP
2895                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";
2896                 if (desc) return "²Ð±ê¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
2897 #else
2898                 if (name) return "Fire Bolt";
2899                 if (desc) return "Fires a bolt or beam of fire.";
2900 #endif
2901     
2902                 {
2903                         int dice = 5 + (plev - 5) / 4;
2904                         int sides = 8;
2905
2906                         if (info) return info_damage(dice, sides, 0);
2907
2908                         if (cast)
2909                         {
2910                                 if (!get_aim_dir(&dir)) return NULL;
2911                                 fire_bolt_or_beam(beam_chance() - 10, GF_FIRE, dir, damroll(dice, sides));
2912                         }
2913                 }
2914                 break;
2915
2916         case 12:
2917 #ifdef JP
2918                 if (name) return "ÂÀÍÛ¸÷Àþ";
2919                 if (desc) return "¸÷Àþ¤òÊü¤Ä¡£¸÷¤ê¤ò·ù¤¦¥â¥ó¥¹¥¿¡¼¤Ë¸ú²Ì¤¬¤¢¤ë¡£";
2920 #else
2921                 if (name) return "Ray of Sunlight";
2922                 if (desc) return "Fires a beam of light which damages to light-sensitive monsters.";
2923 #endif
2924     
2925                 {
2926                         int dice = 6;
2927                         int sides = 8;
2928
2929                         if (info) return info_damage(dice, sides, 0);
2930
2931                         if (cast)
2932                         {
2933                                 if (!get_aim_dir(&dir)) return NULL;
2934 #ifdef JP
2935                                 msg_print("ÂÀÍÛ¸÷Àþ¤¬¸½¤ì¤¿¡£");
2936 #else
2937                                 msg_print("A line of sunlight appears.");
2938 #endif
2939
2940                                 lite_line(dir);
2941                         }
2942                 }
2943                 break;
2944
2945         case 13:
2946 #ifdef JP
2947                 if (name) return "­¤«¤»";
2948                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2949 #else
2950                 if (name) return "Entangle";
2951                 if (desc) return "Attempts to slow all monsters in sight.";
2952 #endif
2953     
2954                 {
2955                         int power = plev;
2956
2957                         if (info) return info_power(power);
2958
2959                         if (cast)
2960                         {
2961                                 slow_monsters();
2962                         }
2963                 }
2964                 break;
2965
2966         case 14:
2967 #ifdef JP
2968                 if (name) return "ưʪ¾¤´­";
2969                 if (desc) return "ưʪ¤ò1Âξ¤´­¤¹¤ë¡£";
2970 #else
2971                 if (name) return "Summon Animal";
2972                 if (desc) return "Summons an animal.";
2973 #endif
2974     
2975                 {
2976                         if (cast)
2977                         {
2978                                 if (!(summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))
2979                                 {
2980 #ifdef JP
2981                                         msg_print("ưʪ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
2982 #else
2983                                         msg_print("No animals arrive.");
2984 #endif
2985                                 }
2986                                 break;
2987                         }
2988                 }
2989                 break;
2990
2991         case 15:
2992 #ifdef JP
2993                 if (name) return "ÌôÁð¼£ÎÅ";
2994                 if (desc) return "ÂÎÎϤòÂçÉý¤Ë²óÉü¤µ¤»¡¢Éé½ý¡¢Û¯Û°¾õÂÖ¡¢ÆǤ«¤éÁ´²÷¤¹¤ë¡£";
2995 #else
2996                 if (name) return "Herbal Healing";
2997                 if (desc) return "Heals HP greatly. And heals cut, stun and poison completely.";
2998 #endif
2999     
3000                 {
3001                         int heal = 500;
3002
3003                         if (info) return info_heal(0, 0, heal);
3004
3005                         if (cast)
3006                         {
3007                                 hp_player(heal);
3008                                 set_stun(0);
3009                                 set_cut(0);
3010                                 set_poisoned(0);
3011                         }
3012                 }
3013                 break;
3014
3015         case 16:
3016 #ifdef JP
3017                 if (name) return "³¬ÃÊÀ¸À®";
3018                 if (desc) return "¼«Ê¬¤Î¤¤¤ë°ÌÃ֤˳¬Ãʤòºî¤ë¡£";
3019 #else
3020                 if (name) return "Stair Building";
3021                 if (desc) return "Creates a stair which goes down or up.";
3022 #endif
3023     
3024                 {
3025                         if (cast)
3026                         {
3027                                 stair_creation();
3028                         }
3029                 }
3030                 break;
3031
3032         case 17:
3033 #ifdef JP
3034                 if (name) return "È©Àв½";
3035                 if (desc) return "°ìÄê»þ´Ö¡¢AC¤ò¾å¾º¤µ¤»¤ë¡£";
3036 #else
3037                 if (name) return "Stone Skin";
3038                 if (desc) return "Gives bonus to AC for a while.";
3039 #endif
3040     
3041                 {
3042                         int base = 20;
3043                         int sides = 30;
3044
3045                         if (info) return info_duration(base, sides);
3046
3047                         if (cast)
3048                         {
3049                                 set_shield(randint1(sides) + base, FALSE);
3050                         }
3051                 }
3052                 break;
3053
3054         case 18:
3055 #ifdef JP
3056                 if (name) return "¿¿¡¦ÂÑÀ­";
3057                 if (desc) return "°ìÄê»þ´Ö¡¢»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
3058 #else
3059                 if (name) return "Resistance True";
3060                 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.";
3061 #endif
3062     
3063                 {
3064                         int base = 20;
3065
3066                         if (info) return info_duration(base, base);
3067
3068                         if (cast)
3069                         {
3070                                 set_oppose_acid(randint1(base) + base, FALSE);
3071                                 set_oppose_elec(randint1(base) + base, FALSE);
3072                                 set_oppose_fire(randint1(base) + base, FALSE);
3073                                 set_oppose_cold(randint1(base) + base, FALSE);
3074                                 set_oppose_pois(randint1(base) + base, FALSE);
3075                         }
3076                 }
3077                 break;
3078
3079         case 19:
3080 #ifdef JP
3081                 if (name) return "¿¹ÎÓÁϤ";
3082                 if (desc) return "¼þ°Ï¤ËÌÚ¤òºî¤ê½Ð¤¹¡£";
3083 #else
3084                 if (name) return "Forest Creation";
3085                 if (desc) return "Creates trees in all adjacent squares.";
3086 #endif
3087     
3088                 {
3089                         if (cast)
3090                         {
3091                                 tree_creation();
3092                         }
3093                 }
3094                 break;
3095
3096         case 20:
3097 #ifdef JP
3098                 if (name) return "ưʪͧÏÂ";
3099                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Îưʪ¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3100 #else
3101                 if (name) return "Animal Friendship";
3102                 if (desc) return "Attempts to charm all animals in sight.";
3103 #endif
3104     
3105                 {
3106                         int power = plev * 2;
3107
3108                         if (info) return info_power(power);
3109
3110                         if (cast)
3111                         {
3112                                 charm_animals(power);
3113                         }
3114                 }
3115                 break;
3116
3117         case 21:
3118 #ifdef JP
3119                 if (name) return "»î¶âÀÐ";
3120                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
3121 #else
3122                 if (name) return "Stone Tell";
3123                 if (desc) return "*Identifies* an item.";
3124 #endif
3125     
3126                 {
3127                         if (cast)
3128                         {
3129                                 if (!identify_fully(FALSE)) return NULL;
3130                         }
3131                 }
3132                 break;
3133
3134         case 22:
3135 #ifdef JP
3136                 if (name) return "ÀФÎÊÉ";
3137                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë²ÖÖ¾´ä¤ÎÊɤòºî¤ë¡£";
3138 #else
3139                 if (name) return "Wall of Stone";
3140                 if (desc) return "Creates granite walls in all adjacent squares.";
3141 #endif
3142     
3143                 {
3144                         if (cast)
3145                         {
3146                                 wall_stone();
3147                         }
3148                 }
3149                 break;
3150
3151         case 23:
3152 #ifdef JP
3153                 if (name) return "Éå¿©ËÉ»ß";
3154                 if (desc) return "¥¢¥¤¥Æ¥à¤ò»À¤Ç½ý¤Ä¤«¤Ê¤¤¤è¤¦²Ã¹©¤¹¤ë¡£";
3155 #else
3156                 if (name) return "Protect from Corrosion";
3157                 if (desc) return "Makes an equipment acid-proof.";
3158 #endif
3159     
3160                 {
3161                         if (cast)
3162                         {
3163                                 if (!rustproof()) return NULL;
3164                         }
3165                 }
3166                 break;
3167
3168         case 24:
3169 #ifdef JP
3170                 if (name) return "ÃÏ¿Ì";
3171                 if (desc) return "¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÍɤ餷¡¢ÊɤȾ²¤ò¥é¥ó¥À¥à¤ËÆþ¤ìÊѤ¨¤ë¡£";
3172 #else
3173                 if (name) return "Earthquake";
3174                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
3175 #endif
3176     
3177                 {
3178                         int rad = 10;
3179
3180                         if (info) return info_radius(rad);
3181
3182                         if (cast)
3183                         {
3184                                 earthquake(py, px, rad);
3185                         }
3186                 }
3187                 break;
3188
3189         case 25:
3190 #ifdef JP
3191                 if (name) return "¥«¥Þ¥¤¥¿¥Á";
3192                 if (desc) return "Á´Êý¸þ¤Ë¸þ¤«¤Ã¤Æ¹¶·â¤¹¤ë¡£";
3193 #else
3194                 if (name) return "Cyclone";
3195                 if (desc) return "Attacks all adjacent monsters.";
3196 #endif
3197     
3198                 {
3199                         if (cast)
3200                         {
3201                                 int y = 0, x = 0;
3202                                 cave_type       *c_ptr;
3203                                 monster_type    *m_ptr;
3204
3205                                 for (dir = 0; dir < 8; dir++)
3206                                 {
3207                                         y = py + ddy_ddd[dir];
3208                                         x = px + ddx_ddd[dir];
3209                                         c_ptr = &cave[y][x];
3210
3211                                         /* Get the monster */
3212                                         m_ptr = &m_list[c_ptr->m_idx];
3213
3214                                         /* Hack -- attack monsters */
3215                                         if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
3216                                                 py_attack(y, x, 0);
3217                                 }
3218                         }
3219                 }
3220                 break;
3221
3222         case 26:
3223 #ifdef JP
3224                 if (name) return "¥Ö¥ê¥¶¡¼¥É";
3225                 if (desc) return "µðÂç¤ÊÎ䵤¤Îµå¤òÊü¤Ä¡£";
3226 #else
3227                 if (name) return "Blizzard";
3228                 if (desc) return "Fires a huge ball of cold.";
3229 #endif
3230     
3231                 {
3232                         int dam = 70 + plev * 3 / 2;
3233                         int rad = plev / 12 + 1;
3234
3235                         if (info) return info_damage(0, 0, dam);
3236
3237                         if (cast)
3238                         {
3239                                 if (!get_aim_dir(&dir)) return NULL;
3240
3241                                 fire_ball(GF_COLD, dir, dam, rad);
3242                         }
3243                 }
3244                 break;
3245
3246         case 27:
3247 #ifdef JP
3248                 if (name) return "°ðºÊÍò";
3249                 if (desc) return "µðÂç¤ÊÅÅ·â¤Îµå¤òÊü¤Ä¡£";
3250 #else
3251                 if (name) return "Lightning Storm";
3252                 if (desc) return "Fires a huge electric ball.";
3253 #endif
3254     
3255                 {
3256                         int dam = 90 + plev * 3 / 2;
3257                         int rad = plev / 12 + 1;
3258
3259                         if (info) return info_damage(0, 0, dam);
3260
3261                         if (cast)
3262                         {
3263                                 if (!get_aim_dir(&dir)) return NULL;
3264                                 fire_ball(GF_ELEC, dir, dam, rad);
3265                                 break;
3266                         }
3267                 }
3268                 break;
3269
3270         case 28:
3271 #ifdef JP
3272                 if (name) return "±²Ä¬";
3273                 if (desc) return "µðÂç¤Ê¿å¤Îµå¤òÊü¤Ä¡£";
3274 #else
3275                 if (name) return "Whirlpool";
3276                 if (desc) return "Fires a huge ball of water.";
3277 #endif
3278     
3279                 {
3280                         int dam = 100 + plev * 3 / 2;
3281                         int rad = plev / 12 + 1;
3282
3283                         if (info) return info_damage(0, 0, dam);
3284
3285                         if (cast)
3286                         {
3287                                 if (!get_aim_dir(&dir)) return NULL;
3288                                 fire_ball(GF_WATER, dir, dam, rad);
3289                         }
3290                 }
3291                 break;
3292
3293         case 29:
3294 #ifdef JP
3295                 if (name) return "ÍÛ¸÷¾¤´­";
3296                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¸÷¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£¤µ¤é¤Ë¡¢¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
3297 #else
3298                 if (name) return "Call Sunlight";
3299                 if (desc) return "Generates ball of light centered on you. Maps and lights whole dungeon level. Knows all objects location.";
3300 #endif
3301     
3302                 {
3303                         int dam = 150;
3304                         int rad = 8;
3305
3306                         if (info) return info_damage(0, 0, dam/2);
3307
3308                         if (cast)
3309                         {
3310                                 fire_ball(GF_LITE, 0, dam, rad);
3311                                 chg_virtue(V_KNOWLEDGE, 1);
3312                                 chg_virtue(V_ENLIGHTEN, 1);
3313                                 wiz_lite(FALSE);
3314
3315                                 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
3316                                 {
3317 #ifdef JP
3318                                         msg_print("Æü¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
3319 #else
3320                                         msg_print("The sunlight scorches your flesh!");
3321 #endif
3322
3323 #ifdef JP
3324                                         take_hit(DAMAGE_NOESCAPE, 50, "Æü¸÷", -1);
3325 #else
3326                                         take_hit(DAMAGE_NOESCAPE, 50, "sunlight", -1);
3327 #endif
3328                                 }
3329                         }
3330                 }
3331                 break;
3332
3333         case 30:
3334 #ifdef JP
3335                 if (name) return "ÀºÎî¤Î¿Ï";
3336                 if (desc) return "Éð´ï¤Ë±ê¤«Î䵤¤Î°À­¤ò¤Ä¤±¤ë¡£";
3337 #else
3338                 if (name) return "Elemental Branding";
3339                 if (desc) return "Makes current weapon fire or frost branded.";
3340 #endif
3341     
3342                 {
3343                         if (cast)
3344                         {
3345                                 brand_weapon(randint0(2));
3346                         }
3347                 }
3348                 break;
3349
3350         case 31:
3351 #ifdef JP
3352                 if (name) return "¼«Á³¤Î¶¼°Ò";
3353                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢ÃϿ̤òµ¯¤³¤·¡¢¼«Ê¬¤òÃæ¿´¤È¤·¤¿Ê¬²ò¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
3354 #else
3355                 if (name) return "Nature's Wrath";
3356                 if (desc) return "Damages all monsters in sight. Makes quake. Generates disintegration ball centered on you.";
3357 #endif
3358     
3359                 {
3360                         int d_dam = 4 * plev;
3361                         int b_dam = (100 + plev) * 2;
3362                         int b_rad = 1 + plev / 12;
3363                         int q_rad = 20 + plev / 2;
3364
3365                         if (info) return format("%s%d+%d", s_dam, d_dam, b_dam/2);
3366
3367                         if (cast)
3368                         {
3369                                 dispel_monsters(d_dam);
3370                                 earthquake(py, px, q_rad);
3371                                 project(0, b_rad, py, px, b_dam, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);
3372                         }
3373                 }
3374                 break;
3375         }
3376
3377         return "";
3378 }
3379
3380
3381 static cptr do_chaos_spell(int spell, int mode)
3382 {
3383         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
3384         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
3385         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
3386         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
3387
3388 #ifdef JP
3389         static const char s_dam[] = "»½ý:";
3390         static const char s_random[] = "¥é¥ó¥À¥à";
3391 #else
3392         static const char s_dam[] = "dam ";
3393         static const char s_random[] = "random";
3394 #endif
3395
3396         int dir;
3397         int plev = p_ptr->lev;
3398
3399         switch (spell)
3400         {
3401         case 0:
3402 #ifdef JP
3403                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë";
3404                 if (desc) return "¼å¤¤ËâË¡¤ÎÌð¤òÊü¤Ä¡£";
3405 #else
3406                 if (name) return "Magic Missile";
3407                 if (desc) return "Fires a weak bolt of magic.";
3408 #endif
3409     
3410                 {
3411                         int dice = 3 + ((plev - 1) / 5);
3412                         int sides = 4;
3413
3414                         if (info) return info_damage(dice, sides, 0);
3415
3416                         if (cast)
3417                         {
3418                                 if (!get_aim_dir(&dir)) return NULL;
3419
3420                                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
3421                         }
3422                 }
3423                 break;
3424
3425         case 1:
3426 #ifdef JP
3427                 if (name) return "¥È¥é¥Ã¥×/¥É¥¢Ç˲õ";
3428                 if (desc) return "ÎÙÀܤ¹¤ë櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
3429 #else
3430                 if (name) return "Trap / Door Destruction";
3431                 if (desc) return "Destroys all traps in adjacent squares.";
3432 #endif
3433     
3434                 {
3435                         int rad = 1;
3436
3437                         if (info) return info_radius(rad);
3438
3439                         if (cast)
3440                         {
3441                                 destroy_doors_touch();
3442                         }
3443                 }
3444                 break;
3445
3446         case 2:
3447 #ifdef JP
3448                 if (name) return "Á®¸÷";
3449                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
3450 #else
3451                 if (name) return "Flash of Light";
3452                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
3453 #endif
3454     
3455                 {
3456                         int dice = 2;
3457                         int sides = plev / 2;
3458                         int rad = (plev / 10) + 1;
3459
3460                         if (info) return info_damage(dice, sides, 0);
3461
3462                         if (cast)
3463                         {
3464                                 lite_area(damroll(dice, sides), rad);
3465                         }
3466                 }
3467                 break;
3468
3469         case 3:
3470 #ifdef JP
3471                 if (name) return "º®Íð¤Î¼ê";
3472                 if (desc) return "Áê¼ê¤òº®Í𤵤»¤ë¹¶·â¤ò¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¡£";
3473 #else
3474                 if (name) return "Touch of Confusion";
3475                 if (desc) return "Attempts to confuse the next monster that you hit.";
3476 #endif
3477     
3478                 {
3479                         if (cast)
3480                         {
3481                                 if (!(p_ptr->special_attack & ATTACK_CONFUSE))
3482                                 {
3483 #ifdef JP
3484                                         msg_print("¤¢¤Ê¤¿¤Î¼ê¤Ï¸÷¤ê»Ï¤á¤¿¡£");
3485 #else
3486                                         msg_print("Your hands start glowing.");
3487 #endif
3488
3489                                         p_ptr->special_attack |= ATTACK_CONFUSE;
3490                                         p_ptr->redraw |= (PR_STATUS);
3491                                 }
3492                         }
3493                 }
3494                 break;
3495
3496         case 4:
3497 #ifdef JP
3498                 if (name) return "ËâÎÏßÚÎö";
3499                 if (desc) return "ËâË¡¤Îµå¤òÊü¤Ä¡£";
3500 #else
3501                 if (name) return "Mana Burst";
3502                 if (desc) return "Fires a ball of magic.";
3503 #endif
3504     
3505                 {
3506                         int dice = 3;
3507                         int sides = 5;
3508                         int rad = (plev < 30) ? 2 : 3;
3509                         int base;
3510
3511                         if (p_ptr->pclass == CLASS_MAGE ||
3512                             p_ptr->pclass == CLASS_HIGH_MAGE ||
3513                             p_ptr->pclass == CLASS_SORCERER)
3514                                 base = plev + plev / 2;
3515                         else
3516                                 base = plev + plev / 4;
3517
3518
3519                         if (info) return info_damage(dice, sides, base);
3520
3521                         if (cast)
3522                         {
3523                                 if (!get_aim_dir(&dir)) return NULL;
3524
3525                                 fire_ball(GF_MISSILE, dir, damroll(dice, sides) + base, rad);
3526
3527                                 /*
3528                                  * Shouldn't actually use GF_MANA, as
3529                                  * it will destroy all items on the
3530                                  * floor
3531                                  */
3532                         }
3533                 }
3534                 break;
3535
3536         case 5:
3537 #ifdef JP
3538                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";
3539                 if (desc) return "±ê¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
3540 #else
3541                 if (name) return "Fire Bolt";
3542                 if (desc) return "Fires a bolt or beam of fire.";
3543 #endif
3544     
3545                 {
3546                         int dice = 8 + (plev - 5) / 4;
3547                         int sides = 8;
3548
3549                         if (info) return info_damage(dice, sides, 0);
3550
3551                         if (cast)
3552                         {
3553                                 if (!get_aim_dir(&dir)) return NULL;
3554
3555                                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir, damroll(dice, sides));
3556                         }
3557                 }
3558                 break;
3559
3560         case 6:
3561 #ifdef JP
3562                 if (name) return "ÎϤηý";
3563                 if (desc) return "¤´¤¯¾®¤µ¤Êʬ²ò¤Îµå¤òÊü¤Ä¡£";
3564 #else
3565                 if (name) return "Fist of Force";
3566                 if (desc) return "Fires a tiny ball of disintegration.";
3567 #endif
3568     
3569                 {
3570                         int dice = 8 + ((plev - 5) / 4);
3571                         int sides = 8;
3572
3573                         if (info) return info_damage(dice, sides, 0);
3574
3575                         if (cast)
3576                         {
3577                                 if (!get_aim_dir(&dir)) return NULL;
3578
3579                                 fire_ball(GF_DISINTEGRATE, dir,
3580                                         damroll(dice, sides), 0);
3581                         }
3582                 }
3583                 break;
3584
3585         case 7:
3586 #ifdef JP
3587                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
3588                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
3589 #else
3590                 if (name) return "Teleport Self";
3591                 if (desc) return "Teleport long distance.";
3592 #endif
3593     
3594                 {
3595                         int range = plev * 5;
3596
3597                         if (info) return info_range(range);
3598
3599                         if (cast)
3600                         {
3601                                 teleport_player(range, 0L);
3602                         }
3603                 }
3604                 break;
3605
3606         case 8:
3607 #ifdef JP
3608                 if (name) return "¥ï¥ó¥À¡¼";
3609                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤Ë¥é¥ó¥À¥à¤Ê¸ú²Ì¤òÍ¿¤¨¤ë¡£";
3610 #else
3611                 if (name) return "Wonder";
3612                 if (desc) return "Fires something with random effects.";
3613 #endif
3614     
3615                 {
3616                         if (info) return s_random;
3617
3618                         if (cast)
3619                         {
3620
3621                                 if (!get_aim_dir(&dir)) return NULL;
3622
3623                                 cast_wonder(dir);
3624                         }
3625                 }
3626                 break;
3627
3628         case 9:
3629 #ifdef JP
3630                 if (name) return "¥«¥ª¥¹¡¦¥Ü¥ë¥È";
3631                 if (desc) return "¥«¥ª¥¹¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
3632 #else
3633                 if (name) return "Chaos Bolt";
3634                 if (desc) return "Fires a bolt or ball of chaos.";
3635 #endif
3636     
3637                 {
3638                         int dice = 10 + (plev - 5) / 4;
3639                         int sides = 8;
3640
3641                         if (info) return info_damage(dice, sides, 0);
3642
3643                         if (cast)
3644                         {
3645                                 if (!get_aim_dir(&dir)) return NULL;
3646
3647                                 fire_bolt_or_beam(beam_chance(), GF_CHAOS, dir, damroll(dice, sides));
3648                         }
3649                 }
3650                 break;
3651
3652         case 10:
3653 #ifdef JP
3654                 if (name) return "¥½¥Ë¥Ã¥¯¡¦¥Ö¡¼¥à";
3655                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¹ì²»¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
3656 #else
3657                 if (name) return "Sonic Boom";
3658                 if (desc) return "Generates a ball of sound centered on you.";
3659 #endif
3660     
3661                 {
3662                         int dam = 60 + plev;
3663                         int rad = plev / 10 + 2;
3664
3665                         if (info) return info_damage(0, 0, dam/2);
3666
3667                         if (cast)
3668                         {
3669 #ifdef JP
3670                                 msg_print("¥É¡¼¥ó¡ªÉô²°¤¬Íɤ줿¡ª");
3671 #else
3672                                 msg_print("BOOM! Shake the room!");
3673 #endif
3674
3675                                 project(0, rad, py, px, dam, GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
3676                         }
3677                 }
3678                 break;
3679
3680         case 11:
3681 #ifdef JP
3682                 if (name) return "ÇËÌǤÎÌð";
3683                 if (desc) return "½ã¿è¤ÊËâÎϤΥӡ¼¥à¤òÊü¤Ä¡£";
3684 #else
3685                 if (name) return "Doom Bolt";
3686                 if (desc) return "Fires a beam of pure mana.";
3687 #endif
3688     
3689                 {
3690                         int dice = 11 + (plev - 5) / 4;
3691                         int sides = 8;
3692
3693                         if (info) return info_damage(dice, sides, 0);
3694
3695                         if (cast)
3696                         {
3697                                 if (!get_aim_dir(&dir)) return NULL;
3698
3699                                 fire_beam(GF_MANA, dir, damroll(dice, sides));
3700                         }
3701                 }
3702                 break;
3703
3704         case 12:
3705 #ifdef JP
3706                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";
3707                 if (desc) return "±ê¤Îµå¤òÊü¤Ä¡£";
3708 #else
3709                 if (name) return "Fire Ball";
3710                 if (desc) return "Fires a ball of fire.";
3711 #endif
3712     
3713                 {
3714                         int dam = plev + 55;
3715                         int rad = 2;
3716
3717                         if (info) return info_damage(0, 0, dam);
3718
3719                         if (cast)
3720                         {
3721                                 if (!get_aim_dir(&dir)) return NULL;
3722
3723                                 fire_ball(GF_FIRE, dir, dam, rad);
3724                         }
3725                 }
3726                 break;
3727
3728         case 13:
3729 #ifdef JP
3730                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥¢¥¦¥§¥¤";
3731                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3732 #else
3733                 if (name) return "Teleport Other";
3734                 if (desc) return "Teleports all monsters on the line away unless resisted.";
3735 #endif
3736     
3737                 {
3738                         int power = plev;
3739
3740                         if (info) return info_power(power);
3741
3742                         if (cast)
3743                         {
3744                                 if (!get_aim_dir(&dir)) return NULL;
3745
3746                                 fire_beam(GF_AWAY_ALL, dir, power);
3747                         }
3748                 }
3749                 break;
3750
3751         case 14:
3752 #ifdef JP
3753                 if (name) return "Ç˲õ¤Î¸ÀÍÕ";
3754                 if (desc) return "¼þÊդΥ¢¥¤¥Æ¥à¡¢¥â¥ó¥¹¥¿¡¼¡¢ÃÏ·Á¤òÇ˲õ¤¹¤ë¡£";
3755 #else
3756                 if (name) return "Word of Destruction";
3757                 if (desc) return "Destroy everything in nearby area.";
3758 #endif
3759     
3760                 {
3761                         int base = 12;
3762                         int sides = 4;
3763
3764                         if (cast)
3765                         {
3766                                 destroy_area(py, px, base + randint1(sides), FALSE);
3767                         }
3768                 }
3769                 break;
3770
3771         case 15:
3772 #ifdef JP
3773                 if (name) return "¥í¥°¥ë¥¹È¯Æ°";
3774                 if (desc) return "µðÂç¤Ê¥«¥ª¥¹¤Îµå¤òÊü¤Ä¡£";
3775 #else
3776                 if (name) return "Invoke Logrus";
3777                 if (desc) return "Fires a huge ball of chaos.";
3778 #endif
3779     
3780                 {
3781                         int dam = plev * 2 + 99;
3782                         int rad = plev / 5;
3783
3784                         if (info) return info_damage(0, 0, dam);
3785
3786                         if (cast)
3787                         {
3788                                 if (!get_aim_dir(&dir)) return NULL;
3789
3790                                 fire_ball(GF_CHAOS, dir, dam, rad);
3791                         }
3792                 }
3793                 break;
3794
3795         case 16:
3796 #ifdef JP
3797                 if (name) return "¾¼ÔÊÑÍÆ";
3798                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤòÊѿȤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3799 #else
3800                 if (name) return "Polymorph Other";
3801                 if (desc) return "Attempts to polymorph a monster.";
3802 #endif
3803     
3804                 {
3805                         int power = plev;
3806
3807                         if (info) return info_power(power);
3808
3809                         if (cast)
3810                         {
3811                                 if (!get_aim_dir(&dir)) return NULL;
3812
3813                                 poly_monster(dir);
3814                         }
3815                 }
3816                 break;
3817
3818         case 17:
3819 #ifdef JP
3820                 if (name) return "Ï¢º¿°ðºÊ";
3821                 if (desc) return "Á´Êý¸þ¤ËÂФ·¤ÆÅÅ·â¤Î¥Ó¡¼¥à¤òÊü¤Ä¡£";
3822 #else
3823                 if (name) return "Chain Lightning";
3824                 if (desc) return "Fires lightning beams in all directions.";
3825 #endif
3826     
3827                 {
3828                         int dice = 5 + plev / 10;
3829                         int sides = 8;
3830
3831                         if (info) return info_damage(dice, sides, 0);
3832
3833                         if (cast)
3834                         {
3835                                 for (dir = 0; dir <= 9; dir++)
3836                                         fire_beam(GF_ELEC, dir, damroll(dice, sides));
3837                         }
3838                 }
3839                 break;
3840
3841         case 18:
3842 #ifdef JP
3843                 if (name) return "ËâÎÏÉõÆþ";
3844                 if (desc) return "¾ó/ËâË¡ËÀ¤Î½¼Å¶²ó¿ô¤òÁý¤ä¤¹¤«¡¢½¼Å¶Ãæ¤Î¥í¥Ã¥É¤Î½¼Å¶»þ´Ö¤ò¸º¤é¤¹¡£";
3845 #else
3846                 if (name) return "Arcane Binding";
3847                 if (desc) return "Recharges staffs, wands or rods.";
3848 #endif
3849     
3850                 {
3851                         int power = 90;
3852
3853                         if (info) return info_power(power);
3854
3855                         if (cast)
3856                         {
3857                                 if (!recharge(power)) return NULL;
3858                         }
3859                 }
3860                 break;
3861
3862         case 19:
3863 #ifdef JP
3864                 if (name) return "¸¶»Òʬ²ò";
3865                 if (desc) return "µðÂç¤Êʬ²ò¤Îµå¤òÊü¤Ä¡£";
3866 #else
3867                 if (name) return "Disintegrate";
3868                 if (desc) return "Fires a huge ball of disintegration.";
3869 #endif
3870     
3871                 {
3872                         int dam = plev + 70;
3873                         int rad = 3 + plev / 40;
3874
3875                         if (info) return info_damage(0, 0, dam);
3876
3877                         if (cast)
3878                         {
3879                                 if (!get_aim_dir(&dir)) return NULL;
3880
3881                                 fire_ball(GF_DISINTEGRATE, dir, dam, rad);
3882                         }
3883                 }
3884                 break;
3885
3886         case 20:
3887 #ifdef JP
3888                 if (name) return "¸½¼ÂÊÑÍÆ";
3889                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
3890 #else
3891                 if (name) return "Alter Reality";
3892                 if (desc) return "Recreates current dungeon level.";
3893 #endif
3894     
3895                 {
3896                         int base = 15;
3897                         int sides = 20;
3898
3899                         if (info) return info_delay(base, sides);
3900
3901                         if (cast)
3902                         {
3903                                 alter_reality();
3904                         }
3905                 }
3906                 break;
3907
3908         case 21:
3909 #ifdef JP
3910                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥í¥±¥Ã¥È";
3911                 if (desc) return "¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë¡£";
3912 #else
3913                 if (name) return "Magic Rocket";
3914                 if (desc) return "Fires a magic rocket.";
3915 #endif
3916     
3917                 {
3918                         int dam = 120 + plev * 2;
3919                         int rad = 2;
3920
3921                         if (info) return info_damage(0, 0, dam);
3922
3923                         if (cast)
3924                         {
3925                                 if (!get_aim_dir(&dir)) return NULL;
3926
3927 #ifdef JP
3928                                 msg_print("¥í¥±¥Ã¥Èȯ¼Í¡ª");
3929 #else
3930                                 msg_print("You launch a rocket!");
3931 #endif
3932
3933                                 fire_rocket(GF_ROCKET, dir, dam, rad);
3934                         }
3935                 }
3936                 break;
3937
3938         case 22:
3939 #ifdef JP
3940                 if (name) return "º®Æ٤οÏ";
3941                 if (desc) return "Éð´ï¤Ë¥«¥ª¥¹¤Î°À­¤ò¤Ä¤±¤ë¡£";
3942 #else
3943                 if (name) return "Chaos Branding";
3944                 if (desc) return "Makes current weapon a Chaotic weapon.";
3945 #endif
3946     
3947                 {
3948                         if (cast)
3949                         {
3950                                 brand_weapon(2);
3951                         }
3952                 }
3953                 break;
3954
3955         case 23:
3956 #ifdef JP
3957                 if (name) return "°­Ë⾤´­";
3958                 if (desc) return "°­Ëâ¤ò1Âξ¤´­¤¹¤ë¡£";
3959 #else
3960                 if (name) return "Summon Demon";
3961                 if (desc) return "Summons a demon.";
3962 #endif
3963     
3964                 {
3965                         if (cast)
3966                         {
3967                                 u32b mode = 0L;
3968                                 bool pet = !one_in_(3);
3969
3970                                 if (pet) mode |= PM_FORCE_PET;
3971                                 else mode |= PM_NO_PET;
3972                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
3973
3974                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_DEMON, mode))
3975                                 {
3976 #ifdef JP
3977                                         msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
3978 #else
3979                                         msg_print("The area fills with a stench of sulphur and brimstone.");
3980 #endif
3981
3982                                         if (pet)
3983                                         {
3984 #ifdef JP
3985                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
3986 #else
3987                                                 msg_print("'What is thy bidding... Master?'");
3988 #endif
3989                                         }
3990                                         else
3991                                         {
3992 #ifdef JP
3993                                                 msg_print("¡ÖÈܤ·¤­¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
3994 #else
3995                                                 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
3996 #endif
3997                                         }
3998                                 }
3999                         }
4000                 }
4001                 break;
4002
4003         case 24:
4004 #ifdef JP
4005                 if (name) return "½ÅÎϸ÷Àþ";
4006                 if (desc) return "½ÅÎϤΥӡ¼¥à¤òÊü¤Ä¡£";
4007 #else
4008                 if (name) return "Beam of Gravity";
4009                 if (desc) return "Fires a beam of gravity.";
4010 #endif
4011     
4012                 {
4013                         int dice = 9 + (plev - 5) / 4;
4014                         int sides = 8;
4015
4016                         if (info) return info_damage(dice, sides, 0);
4017
4018                         if (cast)
4019                         {
4020                                 if (!get_aim_dir(&dir)) return NULL;
4021
4022                                 fire_beam(GF_GRAVITY, dir, damroll(dice, sides));
4023                         }
4024                 }
4025                 break;
4026
4027         case 25:
4028 #ifdef JP
4029                 if (name) return "ήÀ±·²";
4030                 if (desc) return "¼«Ê¬¤Î¼þÊÕ¤Ëð¨ÀФòÍî¤È¤¹¡£";
4031 #else
4032                 if (name) return "Meteor Swarm";
4033                 if (desc) return "Makes meteor balls fall down to nearby random locations.";
4034 #endif
4035     
4036                 {
4037                         int dam = plev * 2;
4038                         int rad = 2;
4039
4040                         if (info) return info_multi_damage(dam);
4041
4042                         if (cast)
4043                         {
4044                                 cast_meteor(dam, rad);
4045                         }
4046                 }
4047                 break;
4048
4049         case 26:
4050 #ifdef JP
4051                 if (name) return "±ë¤Î°ì·â";
4052                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿Ä¶µðÂç¤Ê±ê¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
4053 #else
4054                 if (name) return "Flame Strike";
4055                 if (desc) return "Generate a huge ball of fire centered on you.";
4056 #endif
4057     
4058                 {
4059                         int dam = 300 + 3 * plev;
4060                         int rad = 8;
4061
4062                         if (info) return info_damage(0, 0, dam/2);
4063
4064                         if (cast)
4065                         {
4066                                 fire_ball(GF_FIRE, 0, dam, rad);
4067                         }
4068                 }
4069                 break;
4070
4071         case 27:
4072 #ifdef JP
4073                 if (name) return "º®ÆÙ¾¤Íè";
4074                 if (desc) return "¥é¥ó¥À¥à¤Ê°À­¤Îµå¤ä¥Ó¡¼¥à¤òȯÀ¸¤µ¤»¤ë¡£";
4075 #else
4076                 if (name) return "Call Chaos";
4077                 if (desc) return "Generate random kind of balls or beams.";
4078 #endif
4079     
4080                 {
4081                         if (info) return format("%s150 / 250", s_dam);
4082
4083                         if (cast)
4084                         {
4085                                 call_chaos();
4086                         }
4087                 }
4088                 break;
4089
4090         case 28:
4091 #ifdef JP
4092                 if (name) return "¼«¸ÊÊÑÍÆ";
4093                 if (desc) return "¼«Ê¬¤òÊѿȤµ¤»¤è¤¦¤È¤¹¤ë¡£";
4094 #else
4095                 if (name) return "Polymorph Self";
4096                 if (desc) return "Polymorphs yourself.";
4097 #endif
4098     
4099                 {
4100                         if (cast)
4101                         {
4102 #ifdef JP
4103                                 if (!get_check("ÊѿȤ·¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) return NULL;
4104 #else
4105                                 if (!get_check("You will polymorph yourself. Are you sure? ")) return NULL;
4106 #endif
4107                                 do_poly_self();
4108                         }
4109                 }
4110                 break;
4111
4112         case 29:
4113 #ifdef JP
4114                 if (name) return "ËâÎϤÎÍò";
4115                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤǵðÂç¤Ê½ã¿è¤ÊËâÎϤεå¤òÊü¤Ä¡£";
4116 #else
4117                 if (name) return "Mana Storm";
4118                 if (desc) return "Fires an extremely powerful huge ball of pure mana.";
4119 #endif
4120     
4121                 {
4122                         int dam = 300 + plev * 4;
4123                         int rad = 4;
4124
4125                         if (info) return info_damage(0, 0, dam);
4126
4127                         if (cast)
4128                         {
4129                                 if (!get_aim_dir(&dir)) return NULL;
4130
4131                                 fire_ball(GF_MANA, dir, dam, rad);
4132                         }
4133                 }
4134                 break;
4135
4136         case 30:
4137 #ifdef JP
4138                 if (name) return "¥í¥°¥ë¥¹¤Î¥Ö¥ì¥¹";
4139                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤʥ«¥ª¥¹¤Îµå¤òÊü¤Ä¡£";
4140 #else
4141                 if (name) return "Breathe Logrus";
4142                 if (desc) return "Fires an extremely powerful ball of chaos.";
4143 #endif
4144     
4145                 {
4146                         int dam = p_ptr->chp;
4147                         int rad = 2;
4148
4149                         if (info) return info_damage(0, 0, dam);
4150
4151                         if (cast)
4152                         {
4153                                 if (!get_aim_dir(&dir)) return NULL;
4154
4155                                 fire_ball(GF_CHAOS, dir, dam, rad);
4156                         }
4157                 }
4158                 break;
4159
4160         case 31:
4161 #ifdef JP
4162                 if (name) return "µõ̵¾¤Íè";
4163                 if (desc) return "¼«Ê¬¤Ë¼þ°Ï¤Ë¸þ¤«¤Ã¤Æ¡¢¥í¥±¥Ã¥È¡¢½ã¿è¤ÊËâÎϤε塢Êü¼ÍÀ­ÇÑ´þʪ¤Îµå¤òÊü¤Ä¡£¤¿¤À¤·¡¢ÊɤËÎÙÀܤ·¤Æ»ÈÍѤ¹¤ë¤È¹­ÈϰϤòÇ˲õ¤¹¤ë¡£";
4164 #else
4165                 if (name) return "Call the Void";
4166                 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.";
4167 #endif
4168     
4169                 {
4170                         if (info) return format("%s3 * 175", s_dam);
4171
4172                         if (cast)
4173                         {
4174                                 call_the_();
4175                         }
4176                 }
4177                 break;
4178         }
4179
4180         return "";
4181 }
4182
4183
4184 static cptr do_death_spell(int spell, int mode)
4185 {
4186         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
4187         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
4188         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
4189         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
4190
4191 #ifdef JP
4192         static const char s_dam[] = "»½ý:";
4193         static const char s_random[] = "¥é¥ó¥À¥à";
4194 #else
4195         static const char s_dam[] = "dam ";
4196         static const char s_random[] = "random";
4197 #endif
4198
4199         int dir;
4200         int plev = p_ptr->lev;
4201
4202         switch (spell)
4203         {
4204         case 0:
4205 #ifdef JP
4206                 if (name) return "̵À¸Ì¿´¶ÃÎ";
4207                 if (desc) return "¶á¤¯¤ÎÀ¸Ì¿¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
4208 #else
4209                 if (name) return "Detect Unlife";
4210                 if (desc) return "Detects all nonliving monsters in your vicinity.";
4211 #endif
4212     
4213                 {
4214                         int rad = DETECT_RAD_DEFAULT;
4215
4216                         if (info) return info_radius(rad);
4217
4218                         if (cast)
4219                         {
4220                                 detect_monsters_nonliving(rad);
4221                         }
4222                 }
4223                 break;
4224
4225         case 1:
4226 #ifdef JP
4227                 if (name) return "¼ö»¦ÃÆ";
4228                 if (desc) return "¤´¤¯¾®¤µ¤Ê¼Ù°­¤ÊÎϤò»ý¤Ä¥Ü¡¼¥ë¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
4229 #else
4230                 if (name) return "Malediction";
4231                 if (desc) return "Fires a tiny ball of evil power which hurts good monsters greatly.";
4232 #endif
4233     
4234                 {
4235                         int dice = 3 + (plev - 1) / 5;
4236                         int sides = 4;
4237                         int rad = 0;
4238
4239                         if (info) return info_damage(dice, sides, 0);
4240
4241                         if (cast)
4242                         {
4243                                 if (!get_aim_dir(&dir)) return NULL;
4244
4245                                 /*
4246                                  * A radius-0 ball may (1) be aimed at
4247                                  * objects etc., and will affect them;
4248                                  * (2) may be aimed at ANY visible
4249                                  * monster, unlike a 'bolt' which must
4250                                  * travel to the monster.
4251                                  */
4252
4253                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides), rad);
4254
4255                                 if (one_in_(5))
4256                                 {
4257                                         /* Special effect first */
4258                                         int effect = randint1(1000);
4259
4260                                         if (effect == 666)
4261                                                 fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);
4262                                         else if (effect < 500)
4263                                                 fire_ball_hide(GF_TURN_ALL, dir, plev, 0);
4264                                         else if (effect < 800)
4265                                                 fire_ball_hide(GF_OLD_CONF, dir, plev, 0);
4266                                         else
4267                                                 fire_ball_hide(GF_STUN, dir, plev, 0);
4268                                 }
4269                         }
4270                 }
4271                 break;
4272
4273         case 2:
4274 #ifdef JP
4275                 if (name) return "¼Ù°­´¶ÃÎ";
4276                 if (desc) return "¶á¤¯¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
4277 #else
4278                 if (name) return "Detect Evil";
4279                 if (desc) return "Detects all evil monsters in your vicinity.";
4280 #endif
4281     
4282                 {
4283                         int rad = DETECT_RAD_DEFAULT;
4284
4285                         if (info) return info_radius(rad);
4286
4287                         if (cast)
4288                         {
4289                                 detect_monsters_evil(rad);
4290                         }
4291                 }
4292                 break;
4293
4294         case 3:
4295 #ifdef JP
4296                 if (name) return "°­½­±À";
4297                 if (desc) return "ÆǤεå¤òÊü¤Ä¡£";
4298 #else
4299                 if (name) return "Stinking Cloud";
4300                 if (desc) return "Fires a ball of poison.";
4301 #endif
4302     
4303                 {
4304                         int dam = 10 + plev / 2;
4305                         int rad = 2;
4306
4307                         if (info) return info_damage(0, 0, dam);
4308
4309                         if (cast)
4310                         {
4311                                 if (!get_aim_dir(&dir)) return NULL;
4312
4313                                 fire_ball(GF_POIS, dir, dam, rad);
4314                         }
4315                 }
4316                 break;
4317
4318         case 4:
4319 #ifdef JP
4320                 if (name) return "¹õ¤¤Ì²¤ê";
4321                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4322 #else
4323                 if (name) return "Black Sleep";
4324                 if (desc) return "Attempts to sleep a monster.";
4325 #endif
4326     
4327                 {
4328                         int power = plev;
4329
4330                         if (info) return info_power(power);
4331
4332                         if (cast)
4333                         {
4334                                 if (!get_aim_dir(&dir)) return NULL;
4335
4336                                 sleep_monster(dir);
4337                         }
4338                 }
4339                 break;
4340
4341         case 5:
4342 #ifdef JP
4343                 if (name) return "ÂÑÆÇ";
4344                 if (desc) return "°ìÄê»þ´Ö¡¢ÆǤؤÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
4345 #else
4346                 if (name) return "Resist Poison";
4347                 if (desc) return "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.";
4348 #endif
4349     
4350                 {
4351                         int base = 20;
4352
4353                         if (info) return info_duration(base, base);
4354
4355                         if (cast)
4356                         {
4357                                 set_oppose_pois(randint1(base) + base, FALSE);
4358                         }
4359                 }
4360                 break;
4361
4362         case 6:
4363 #ifdef JP
4364                 if (name) return "¶²¹²";
4365                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¡¢Û¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4366 #else
4367                 if (name) return "Horrify";
4368                 if (desc) return "Attempts to scare and stun a monster.";
4369 #endif
4370     
4371                 {
4372                         int power = plev;
4373
4374                         if (info) return info_power(power);
4375
4376                         if (cast)
4377                         {
4378                                 if (!get_aim_dir(&dir)) return NULL;
4379
4380                                 fear_monster(dir, power);
4381                                 stun_monster(dir, power);
4382                         }
4383                 }
4384                 break;
4385
4386         case 7:
4387 #ifdef JP
4388                 if (name) return "¥¢¥ó¥Ç¥Ã¥É½¾Â°";
4389                 if (desc) return "¥¢¥ó¥Ç¥Ã¥É1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4390 #else
4391                 if (name) return "Enslave Undead";
4392                 if (desc) return "Attempts to charm an undead monster.";
4393 #endif
4394     
4395                 {
4396                         int power = plev;
4397
4398                         if (info) return info_power(power);
4399
4400                         if (cast)
4401                         {
4402                                 if (!get_aim_dir(&dir)) return NULL;
4403
4404                                 control_one_undead(dir, power);
4405                         }
4406                 }
4407                 break;
4408
4409         case 8:
4410 #ifdef JP
4411                 if (name) return "¥¨¥ó¥È¥í¥Ô¡¼¤Îµå";
4412                 if (desc) return "À¸Ì¿¤Î¤¢¤ë¼Ô¤Ë¸ú²Ì¤Î¤¢¤ëµå¤òÊü¤Ä¡£";
4413 #else
4414                 if (name) return "Orb of Entropy";
4415                 if (desc) return "Fires a ball which damages living monsters.";
4416 #endif
4417     
4418                 {
4419                         int dice = 3;
4420                         int sides = 6;
4421                         int rad = (plev < 30) ? 2 : 3;
4422                         int base;
4423
4424                         if (p_ptr->pclass == CLASS_MAGE ||
4425                             p_ptr->pclass == CLASS_HIGH_MAGE ||
4426                             p_ptr->pclass == CLASS_SORCERER)
4427                                 base = plev + plev / 2;
4428                         else
4429                                 base = plev + plev / 4;
4430
4431
4432                         if (info) return info_damage(dice, sides, base);
4433
4434                         if (cast)
4435                         {
4436                                 if (!get_aim_dir(&dir)) return NULL;
4437
4438                                 fire_ball(GF_OLD_DRAIN, dir, damroll(dice, dice) + base, rad);
4439                         }
4440                 }
4441                 break;
4442
4443         case 9:
4444 #ifdef JP
4445                 if (name) return "ÃϹö¤ÎÌð";
4446                 if (desc) return "ÃϹö¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
4447 #else
4448                 if (name) return "Nether Bolt";
4449                 if (desc) return "Fires a bolt or beam of nether.";
4450 #endif
4451     
4452                 {
4453                         int dice = 8 + (plev - 5) / 4;
4454                         int sides = 8;
4455
4456                         if (info) return info_damage(dice, sides, 0);
4457
4458                         if (cast)
4459                         {
4460                                 if (!get_aim_dir(&dir)) return NULL;
4461
4462                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
4463                         }
4464                 }
4465                 break;
4466
4467         case 10:
4468 #ifdef JP
4469                 if (name) return "»¦Ù¤±À";
4470                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿ÆǤεå¤òȯÀ¸¤µ¤»¤ë¡£";
4471 #else
4472                 if (name) return "Cloud kill";
4473                 if (desc) return "Generate a ball of poison centered on you.";
4474 #endif
4475     
4476                 {
4477                         int dam = (30 + plev) * 2;
4478                         int rad = plev / 10 + 2;
4479
4480                         if (info) return info_damage(0, 0, dam/2);
4481
4482                         if (cast)
4483                         {
4484                                 project(0, rad, py, px, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);
4485                         }
4486                 }
4487                 break;
4488
4489         case 11:
4490 #ifdef JP
4491                 if (name) return "¥â¥ó¥¹¥¿¡¼¾ÃÌÇ";
4492                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¾Ã¤·µî¤ë¡£·Ð¸³Ãͤ䥢¥¤¥Æ¥à¤Ï¼ê¤ËÆþ¤é¤Ê¤¤¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4493 #else
4494                 if (name) return "Genocide One";
4495                 if (desc) return "Attempts to vanish a monster.";
4496 #endif
4497     
4498                 {
4499                         int power = plev + 50;
4500
4501                         if (info) return info_power(power);
4502
4503                         if (cast)
4504                         {
4505                                 if (!get_aim_dir(&dir)) return NULL;
4506
4507                                 fire_ball_hide(GF_GENOCIDE, dir, power, 0);
4508                         }
4509                 }
4510                 break;
4511
4512         case 12:
4513 #ifdef JP
4514                 if (name) return "ÆǤοÏ";
4515                 if (desc) return "Éð´ï¤ËÆǤΰÀ­¤ò¤Ä¤±¤ë¡£";
4516 #else
4517                 if (name) return "Poison Branding";
4518                 if (desc) return "Makes current weapon poison branded.";
4519 #endif
4520     
4521                 {
4522                         if (cast)
4523                         {
4524                                 brand_weapon(3);
4525                         }
4526                 }
4527                 break;
4528
4529         case 13:
4530 #ifdef JP
4531                 if (name) return "µÛ·ì¥É¥ì¥¤¥ó";
4532                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤ«¤éÀ¸Ì¿ÎϤòµÛ¤¤¤È¤ë¡£µÛ¤¤¤È¤Ã¤¿À¸Ì¿ÎϤˤè¤Ã¤ÆËþÊ¢ÅÙ¤¬¾å¤¬¤ë¡£";
4533 #else
4534                 if (name) return "Vampiric Drain";
4535                 if (desc) return "Absorbs some HP from a monster and gives them to you. You will also gain nutritional sustenance from this.";
4536 #endif
4537     
4538                 {
4539                         int dice = 1;
4540                         int sides = plev * 2;
4541                         int base = plev * 2;
4542
4543                         if (info) return info_damage(dice, sides, base);
4544
4545                         if (cast)
4546                         {
4547                                 int dam = base + damroll(dice, sides);
4548
4549                                 if (!get_aim_dir(&dir)) return NULL;
4550
4551                                 if (drain_life(dir, dam))
4552                                 {
4553                                         chg_virtue(V_SACRIFICE, -1);
4554                                         chg_virtue(V_VITALITY, -1);
4555
4556                                         hp_player(dam);
4557
4558                                         /*
4559                                          * Gain nutritional sustenance:
4560                                          * 150/hp drained
4561                                          *
4562                                          * A Food ration gives 5000
4563                                          * food points (by contrast)
4564                                          * Don't ever get more than
4565                                          * "Full" this way But if we
4566                                          * ARE Gorged, it won't cure
4567                                          * us
4568                                          */
4569                                         dam = p_ptr->food + MIN(5000, 100 * dam);
4570
4571                                         /* Not gorged already */
4572                                         if (p_ptr->food < PY_FOOD_MAX)
4573                                                 set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);
4574                                 }
4575                         }
4576                 }
4577                 break;
4578
4579         case 14:
4580 #ifdef JP
4581                 if (name) return "È¿º²¤Î½Ñ";
4582                 if (desc) return "¼þ°Ï¤Î»àÂΤä¹ü¤òÀ¸¤­ÊÖ¤¹¡£";
4583 #else
4584                 if (name) return "Animate dead";
4585                 if (desc) return "Resurrects nearby corpse and skeletons. And makes these your pets.";
4586 #endif
4587     
4588                 {
4589                         if (cast)
4590                         {
4591                                 animate_dead(0, py, px);
4592                         }
4593                 }
4594                 break;
4595
4596         case 15:
4597 #ifdef JP
4598                 if (name) return "Ëõ»¦";
4599                 if (desc) return "»ØÄꤷ¤¿Ê¸»ú¤Î¥â¥ó¥¹¥¿¡¼¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4600 #else
4601                 if (name) return "Genocide";
4602                 if (desc) return "Eliminates an entire class of monster, exhausting you.  Powerful or unique monsters may resist.";
4603 #endif
4604     
4605                 {
4606                         int power = plev+50;
4607
4608                         if (info) return info_power(power);
4609
4610                         if (cast)
4611                         {
4612                                 symbol_genocide(power, TRUE);
4613                         }
4614                 }
4615                 break;
4616
4617         case 16:
4618 #ifdef JP
4619                 if (name) return "¶¸Àï»Î²½";
4620                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤¹¤ë¡£";
4621 #else
4622                 if (name) return "Berserk";
4623                 if (desc) return "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.";
4624 #endif
4625     
4626                 {
4627                         int base = 25;
4628
4629                         if (info) return info_duration(base, base);
4630
4631                         if (cast)
4632                         {
4633                                 set_shero(randint1(base) + base, FALSE);
4634                                 hp_player(30);
4635                                 set_afraid(0);
4636                         }
4637                 }
4638                 break;
4639
4640         case 17:
4641 #ifdef JP
4642                 if (name) return "°­Î´­";
4643                 if (desc) return "¥é¥ó¥À¥à¤ÇÍÍ¡¹¤Ê¸ú²Ì¤¬µ¯¤³¤ë¡£";
4644 #else
4645                 if (name) return "Invoke Spirits";
4646                 if (desc) return "Causes random effects.";
4647 #endif
4648     
4649                 {
4650                         if (info) return s_random;
4651
4652                         if (cast)
4653                         {
4654                                 if (!get_aim_dir(&dir)) return NULL;
4655
4656                                 cast_invoke_spirits(dir);
4657                         }
4658                 }
4659                 break;
4660
4661         case 18:
4662 #ifdef JP
4663                 if (name) return "°Å¹õ¤ÎÌð";
4664                 if (desc) return "°Å¹õ¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
4665 #else
4666                 if (name) return "Dark Bolt";
4667                 if (desc) return "Fires a bolt or beam of darkness.";
4668 #endif
4669     
4670                 {
4671                         int dice = 4 + (plev - 5) / 4;
4672                         int sides = 8;
4673
4674                         if (info) return info_damage(dice, sides, 0);
4675
4676                         if (cast)
4677                         {
4678                                 if (!get_aim_dir(&dir)) return NULL;
4679
4680                                 fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));
4681                         }
4682                 }
4683                 break;
4684
4685         case 19:
4686 #ifdef JP
4687                 if (name) return "¶¸ÍðÀï»Î";
4688                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤·¡¢²Ã®¤¹¤ë¡£";
4689 #else
4690                 if (name) return "Battle Frenzy";
4691                 if (desc) return "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.";
4692 #endif
4693     
4694                 {
4695                         int b_base = 25;
4696                         int sp_base = plev / 2;
4697                         int sp_sides = 20 + plev / 2;
4698
4699                         if (info) return info_duration(b_base, b_base);
4700
4701                         if (cast)
4702                         {
4703                                 set_shero(randint1(25) + 25, FALSE);
4704                                 hp_player(30);
4705                                 set_afraid(0);
4706                                 set_fast(randint1(sp_sides) + sp_base, FALSE);
4707                         }
4708                 }
4709                 break;
4710
4711         case 20:
4712 #ifdef JP
4713                 if (name) return "µÛ·ì¤Î¿Ï";
4714                 if (desc) return "Éð´ï¤ËµÛ·ì¤Î°À­¤ò¤Ä¤±¤ë¡£";
4715 #else
4716                 if (name) return "Vampiric Branding";
4717                 if (desc) return "Makes current weapon Vampiric.";
4718 #endif
4719     
4720                 {
4721                         if (cast)
4722                         {
4723                                 brand_weapon(4);
4724                         }
4725                 }
4726                 break;
4727
4728         case 21:
4729 #ifdef JP
4730                 if (name) return "¿¿¡¦µÛ·ì";
4731                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤ«¤éÀ¸Ì¿ÎϤòµÛ¤¤¤È¤ë¡£µÛ¤¤¤È¤Ã¤¿À¸Ì¿ÎϤˤè¤Ã¤ÆÂÎÎϤ¬²óÉü¤¹¤ë¡£";
4732 #else
4733                 if (name) return "Vampirism True";
4734                 if (desc) return "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.";
4735 #endif
4736     
4737                 {
4738                         int dam = 100;
4739
4740                         if (info) return format("%s3*%d", s_dam, dam);
4741
4742                         if (cast)
4743                         {
4744                                 int i;
4745
4746                                 if (!get_aim_dir(&dir)) return NULL;
4747
4748                                 chg_virtue(V_SACRIFICE, -1);
4749                                 chg_virtue(V_VITALITY, -1);
4750
4751                                 for (i = 0; i < 3; i++)
4752                                 {
4753                                         if (drain_life(dir, dam))
4754                                                 hp_player(dam);
4755                                 }
4756                         }
4757                 }
4758                 break;
4759
4760         case 22:
4761 #ifdef JP
4762                 if (name) return "»à¤Î¸Àº²";
4763                 if (desc) return "»ë³¦Æâ¤ÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
4764 #else
4765                 if (name) return "Nether Wave";
4766                 if (desc) return "Damages all living monsters in sight.";
4767 #endif
4768     
4769                 {
4770                         int sides = plev * 3;
4771
4772                         if (info) return info_damage(1, sides, 0);
4773
4774                         if (cast)
4775                         {
4776                                 dispel_living(randint1(sides));
4777                         }
4778                 }
4779                 break;
4780
4781         case 23:
4782 #ifdef JP
4783                 if (name) return "°Å¹õ¤ÎÍò";
4784                 if (desc) return "µðÂç¤Ê°Å¹õ¤Îµå¤òÊü¤Ä¡£";
4785 #else
4786                 if (name) return "Darkness Storm";
4787                 if (desc) return "Fires a huge ball of darkness.";
4788 #endif
4789     
4790                 {
4791                         int dam = 100 + plev * 2;
4792                         int rad = 4;
4793
4794                         if (info) return info_damage(0, 0, dam);
4795
4796                         if (cast)
4797                         {
4798                                 if (!get_aim_dir(&dir)) return NULL;
4799
4800                                 fire_ball(GF_DARK, dir, dam, rad);
4801                         }
4802                 }
4803                 break;
4804
4805         case 24:
4806 #ifdef JP
4807                 if (name) return "»à¤Î¸÷Àþ";
4808                 if (desc) return "»à¤Î¸÷Àþ¤òÊü¤Ä¡£";
4809 #else
4810                 if (name) return "Death Ray";
4811                 if (desc) return "Fires a beam of death.";
4812 #endif
4813     
4814                 {
4815                         if (cast)
4816                         {
4817                                 if (!get_aim_dir(&dir)) return NULL;
4818
4819                                 death_ray(dir, plev);
4820                         }
4821                 }
4822                 break;
4823
4824         case 25:
4825 #ifdef JP
4826                 if (name) return "»à¼Ô¾¤´­";
4827                 if (desc) return "1ÂΤΥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
4828 #else
4829                 if (name) return "Raise the Dead";
4830                 if (desc) return "Summons an undead monster.";
4831 #endif
4832     
4833                 {
4834                         if (cast)
4835                         {
4836                                 int type;
4837                                 bool pet = one_in_(3);
4838                                 u32b mode = 0L;
4839
4840                                 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
4841
4842                                 if (!pet || (pet && (plev > 24) && one_in_(3)))
4843                                         mode |= PM_ALLOW_GROUP;
4844
4845                                 if (pet) mode |= PM_FORCE_PET;
4846                                 else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
4847
4848                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, type, mode))
4849                                 {
4850 #ifdef JP
4851                                         msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤­»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½­¤ò±¿¤ó¤Ç¤¤¤ë...");
4852 #else
4853                                         msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
4854 #endif
4855
4856
4857                                         if (pet)
4858                                         {
4859 #ifdef JP
4860                                                 msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
4861 #else
4862                                                 msg_print("Ancient, long-dead forms arise from the ground to serve you!");
4863 #endif
4864                                         }
4865                                         else
4866                                         {
4867 #ifdef JP
4868                                                 msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
4869 #else
4870                                                 msg_print("'The dead arise... to punish you for disturbing them!'");
4871 #endif
4872                                         }
4873
4874                                         chg_virtue(V_UNLIFE, 1);
4875                                 }
4876                         }
4877                 }
4878                 break;
4879
4880         case 26:
4881 #ifdef JP
4882                 if (name) return "»à¼Ô¤ÎÈëÅÁ";
4883                 if (desc) return "¥¢¥¤¥Æ¥à¤ò1¤Ä¼±Ê̤¹¤ë¡£¥ì¥Ù¥ë¤¬¹â¤¤¤È¥¢¥¤¥Æ¥à¤ÎǽÎϤò´°Á´¤ËÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£";
4884 #else
4885                 if (name) return "Esoteria";
4886                 if (desc) return "Identifies an item. Or *identifies* an item at higher level.";
4887 #endif
4888     
4889                 {
4890                         if (cast)
4891                         {
4892                                 if (randint1(50) > plev)
4893                                 {
4894                                         if (!ident_spell(FALSE)) return NULL;
4895                                 }
4896                                 else
4897                                 {
4898                                         if (!identify_fully(FALSE)) return NULL;
4899                                 }
4900                         }
4901                 }
4902                 break;
4903
4904         case 27:
4905 #ifdef JP
4906                 if (name) return "µÛ·ìµ´ÊѲ½";
4907                 if (desc) return "°ìÄê»þ´Ö¡¢µÛ·ìµ´¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤ËµÛ·ìµ´¤È¤·¤Æ¤ÎǽÎϤòÆÀ¤ë¡£";
4908 #else
4909                 if (name) return "Polymorph Vampire";
4910                 if (desc) return "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.";
4911 #endif
4912     
4913                 {
4914                         int base = 10 + plev / 2;
4915
4916                         if (info) return info_duration(base, base);
4917
4918                         if (cast)
4919                         {
4920                                 set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);
4921                         }
4922                 }
4923                 break;
4924
4925         case 28:
4926 #ifdef JP
4927                 if (name) return "À¸Ì¿ÎÏÉü³è";
4928                 if (desc) return "¼º¤Ã¤¿·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
4929 #else
4930                 if (name) return "Restore Life";
4931                 if (desc) return "Restore lost experience.";
4932 #endif
4933     
4934                 {
4935                         if (cast)
4936                         {
4937                                 restore_level();
4938                         }
4939                 }
4940                 break;
4941
4942         case 29:
4943 #ifdef JP
4944                 if (name) return "¼þÊÕËõ»¦";
4945                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4946 #else
4947                 if (name) return "Mass Genocide";
4948                 if (desc) return "Eliminates all nearby monsters, exhausting you.  Powerful or unique monsters may be able to resist.";
4949 #endif
4950     
4951                 {
4952                         int power = plev + 50;
4953
4954                         if (info) return info_power(power);
4955
4956                         if (cast)
4957                         {
4958                                 mass_genocide(power, TRUE);
4959                         }
4960                 }
4961                 break;
4962
4963         case 30:
4964 #ifdef JP
4965                 if (name) return "ÃϹö¤Î¹å²Ð";
4966                 if (desc) return "¼Ù°­¤ÊÎϤò»ý¤ÄÊõ¼î¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
4967 #else
4968                 if (name) return "Hellfire";
4969                 if (desc) return "Fires a powerful ball of evil power. Hurts good monsters greatly.";
4970 #endif
4971     
4972                 {
4973                         int dam = 666;
4974                         int rad = 3;
4975
4976                         if (info) return info_damage(0, 0, dam);
4977
4978                         if (cast)
4979                         {
4980                                 if (!get_aim_dir(&dir)) return NULL;
4981
4982                                 fire_ball(GF_HELL_FIRE, dir, dam, rad);
4983 #ifdef JP
4984                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "ÃϹö¤Î¹å²Ð¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
4985 #else
4986                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "the strain of casting Hellfire", -1);
4987 #endif
4988                         }
4989                 }
4990                 break;
4991
4992         case 31:
4993 #ifdef JP
4994                 if (name) return "Í©Âβ½";
4995                 if (desc) return "°ìÄê»þ´Ö¡¢ÊɤòÄ̤êÈ´¤±¤ë¤³¤È¤¬¤Ç¤­¼õ¤±¤ë¥À¥á¡¼¥¸¤¬·Ú¸º¤µ¤ì¤ëÍ©ÂΤξõÂÖ¤ËÊѿȤ¹¤ë¡£";
4996 #else
4997                 if (name) return "Wraithform";
4998                 if (desc) return "Becomes wraith form which gives ability to pass walls and makes all damages half.";
4999 #endif
5000     
5001                 {
5002                         int base = plev / 2;
5003
5004                         if (info) return info_duration(base, base);
5005
5006                         if (cast)
5007                         {
5008                                 set_wraith_form(randint1(base) + base, FALSE);
5009                         }
5010                 }
5011                 break;
5012         }
5013
5014         return "";
5015 }
5016
5017
5018 static cptr do_trump_spell(int spell, int mode)
5019 {
5020         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
5021         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
5022         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
5023         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
5024         bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
5025
5026 #ifdef JP
5027         static const char s_random[] = "¥é¥ó¥À¥à";
5028 #else
5029         static const char s_random[] = "random";
5030 #endif
5031
5032         int dir;
5033         int plev = p_ptr->lev;
5034
5035         switch (spell)
5036         {
5037         case 0:
5038 #ifdef JP
5039                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
5040                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
5041 #else
5042                 if (name) return "Phase Door";
5043                 if (desc) return "Teleport short distance.";
5044 #endif
5045     
5046                 {
5047                         int range = 10;
5048
5049                         if (info) return info_range(range);
5050
5051                         if (cast)
5052                         {
5053                                 teleport_player(range, 0L);
5054                         }
5055                 }
5056                 break;
5057
5058         case 1:
5059 #ifdef JP
5060                 if (name) return "ÃØéá¤Î¥«¡¼¥É";
5061                 if (desc) return "ÃØéá¤ò¾¤´­¤¹¤ë¡£";
5062 #else
5063                 if (name) return "Trump Spiders";
5064                 if (desc) return "Summons spiders.";
5065 #endif
5066     
5067                 {
5068                         if (cast || fail)
5069                         {
5070 #ifdef JP
5071                                 msg_print("¤¢¤Ê¤¿¤ÏÃØéá¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5072 #else
5073                                 msg_print("You concentrate on the trump of an spider...");
5074 #endif
5075
5076                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))
5077                                 {
5078                                         if (fail)
5079                                         {
5080 #ifdef JP
5081                                                 msg_print("¾¤´­¤µ¤ì¤¿ÃØéá¤ÏÅܤäƤ¤¤ë¡ª");
5082 #else
5083                                                 msg_print("The summoned spiders get angry!");
5084 #endif
5085                                         }
5086                                 }
5087                         }
5088                 }
5089                 break;
5090
5091         case 2:
5092 #ifdef JP
5093                 if (name) return "¥·¥ã¥Ã¥Õ¥ë";
5094                 if (desc) return "¥«¡¼¥É¤ÎÀꤤ¤ò¤¹¤ë¡£";
5095 #else
5096                 if (name) return "Shuffle";
5097                 if (desc) return "Causes random effects.";
5098 #endif
5099     
5100                 {
5101                         if (info) return s_random;
5102
5103                         if (cast)
5104                         {
5105                                 cast_shuffle();
5106                         }
5107                 }
5108                 break;
5109
5110         case 3:
5111 #ifdef JP
5112                 if (name) return "¥Õ¥í¥¢¡¦¥ê¥»¥Ã¥È";
5113                 if (desc) return "ºÇ¿¼³¬¤òÊѹ¹¤¹¤ë¡£";
5114 #else
5115                 if (name) return "Reset Recall";
5116                 if (desc) return "Resets the 'deepest' level for recall spell.";
5117 #endif
5118     
5119                 {
5120                         if (cast)
5121                         {
5122                                 if (!reset_recall()) return NULL;
5123                         }
5124                 }
5125                 break;
5126
5127         case 4:
5128 #ifdef JP
5129                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
5130                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
5131 #else
5132                 if (name) return "Teleport";
5133                 if (desc) return "Teleport long distance.";
5134 #endif
5135     
5136                 {
5137                         int range = plev * 4;
5138
5139                         if (info) return info_range(range);
5140
5141                         if (cast)
5142                         {
5143                                 teleport_player(range, 0L);
5144                         }
5145                 }
5146                 break;
5147
5148         case 5:
5149 #ifdef JP
5150                 if (name) return "´¶ÃΤΥ«¡¼¥É";
5151                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
5152 #else
5153                 if (name) return "Trump Spying";
5154                 if (desc) return "Gives telepathy for a while.";
5155 #endif
5156     
5157                 {
5158                         int base = 25;
5159                         int sides = 30;
5160
5161                         if (info) return info_duration(base, sides);
5162
5163                         if (cast)
5164                         {
5165                                 set_tim_esp(randint1(sides) + base, FALSE);
5166                         }
5167                 }
5168                 break;
5169
5170         case 6:
5171 #ifdef JP
5172                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
5173                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
5174 #else
5175                 if (name) return "Teleport Away";
5176                 if (desc) return "Teleports all monsters on the line away unless resisted.";
5177 #endif
5178     
5179                 {
5180                         int power = plev;
5181
5182                         if (info) return info_power(power);
5183
5184                         if (cast)
5185                         {
5186                                 if (!get_aim_dir(&dir)) return NULL;
5187
5188                                 fire_beam(GF_AWAY_ALL, dir, power);
5189                         }
5190                 }
5191                 break;
5192
5193         case 7:
5194 #ifdef JP
5195                 if (name) return "ưʪ¤Î¥«¡¼¥É";
5196                 if (desc) return "1ÂΤÎưʪ¤ò¾¤´­¤¹¤ë¡£";
5197 #else
5198                 if (name) return "Trump Animals";
5199                 if (desc) return "Summons an animal.";
5200 #endif
5201     
5202                 {
5203                         if (cast || fail)
5204                         {
5205                                 int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
5206
5207 #ifdef JP
5208                                 msg_print("¤¢¤Ê¤¿¤Ïưʪ¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5209 #else
5210                                 msg_print("You concentrate on the trump of an animal...");
5211 #endif
5212
5213                                 if (trump_summoning(1, !fail, py, px, 0, type, 0L))
5214                                 {
5215                                         if (fail)
5216                                         {
5217 #ifdef JP
5218                                                 msg_print("¾¤´­¤µ¤ì¤¿Æ°Êª¤ÏÅܤäƤ¤¤ë¡ª");
5219 #else
5220                                                 msg_print("The summoned animal gets angry!");
5221 #endif
5222                                         }
5223                                 }
5224                         }
5225                 }
5226                 break;
5227
5228         case 8:
5229 #ifdef JP
5230                 if (name) return "°ÜÆ°¤Î¥«¡¼¥É";
5231                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼«Ê¬¤Î­¸µ¤Ø°ÜÆ°¤µ¤»¤ë¡£";
5232 #else
5233                 if (name) return "Trump Reach";
5234                 if (desc) return "Pulls a distant item close to you.";
5235 #endif
5236     
5237                 {
5238                         int weight = plev * 15;
5239
5240                         if (info) return info_weight(weight);
5241
5242                         if (cast)
5243                         {
5244                                 if (!get_aim_dir(&dir)) return NULL;
5245
5246                                 fetch(dir, weight, FALSE);
5247                         }
5248                 }
5249                 break;
5250
5251         case 9:
5252 #ifdef JP
5253                 if (name) return "¥«¥ß¥«¥¼¤Î¥«¡¼¥É";
5254                 if (desc) return "Ê£¿ô¤ÎÇúȯ¤¹¤ë¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤¹¤ë¡£";
5255 #else
5256                 if (name) return "Trump Kamikaze";
5257                 if (desc) return "Summons monsters which explode by itself.";
5258 #endif
5259     
5260                 {
5261                         if (cast || fail)
5262                         {
5263                                 int x, y;
5264                                 int type;
5265
5266                                 if (cast)
5267                                 {
5268                                         if (!target_set(TARGET_KILL)) return NULL;
5269                                         x = target_col;
5270                                         y = target_row;
5271                                 }
5272                                 else
5273                                 {
5274                                         /* Summons near player when failed */
5275                                         x = px;
5276                                         y = py;
5277                                 }
5278
5279                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
5280                                         type = SUMMON_KAMIKAZE_LIVING;
5281                                 else
5282                                         type = SUMMON_KAMIKAZE;
5283
5284 #ifdef JP
5285                                 msg_print("¤¢¤Ê¤¿¤Ï¥«¥ß¥«¥¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5286 #else
5287                                 msg_print("You concentrate on several trumps at once...");
5288 #endif
5289
5290                                 if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))
5291                                 {
5292                                         if (fail)
5293                                         {
5294 #ifdef JP
5295                                                 msg_print("¾¤´­¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
5296 #else
5297                                                 msg_print("The summoned creatures get angry!");
5298 #endif
5299                                         }
5300                                 }
5301                         }
5302                 }
5303                 break;
5304
5305         case 10:
5306 #ifdef JP
5307                 if (name) return "¸¸Î´­";
5308                 if (desc) return "1ÂΤÎÍ©Îî¤ò¾¤´­¤¹¤ë¡£";
5309 #else
5310                 if (name) return "Phantasmal Servant";
5311                 if (desc) return "Summons a ghost.";
5312 #endif
5313     
5314                 {
5315                         /* Phantasmal Servant is not summoned as enemy when failed */
5316                         if (cast)
5317                         {
5318                                 int summon_lev = plev * 2 / 3 + randint1(plev / 2);
5319
5320                                 if (trump_summoning(1, !fail, py, px, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))
5321                                 {
5322 #ifdef JP
5323                                         msg_print("¸æÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¸æ¼ç¿ÍÍÍ¡©");
5324 #else
5325                                         msg_print("'Your wish, master?'");
5326 #endif
5327                                 }
5328                         }
5329                 }
5330                 break;
5331
5332         case 11:
5333 #ifdef JP
5334                 if (name) return "¥¹¥Ô¡¼¥É¡¦¥â¥ó¥¹¥¿¡¼";
5335                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò²Ã®¤µ¤»¤ë¡£";
5336 #else
5337                 if (name) return "Haste Monster";
5338                 if (desc) return "Hastes a monster.";
5339 #endif
5340     
5341                 {
5342                         if (cast)
5343                         {
5344                                 bool result;
5345
5346                                 /* Temporary enable target_pet option */
5347                                 bool old_target_pet = target_pet;
5348                                 target_pet = TRUE;
5349
5350                                 result = get_aim_dir(&dir);
5351
5352                                 /* Restore target_pet option */
5353                                 target_pet = old_target_pet;
5354
5355                                 if (!result) return NULL;
5356
5357                                 speed_monster(dir);
5358                         }
5359                 }
5360                 break;
5361
5362         case 12:
5363 #ifdef JP
5364                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
5365                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
5366 #else
5367                 if (name) return "Teleport Level";
5368                 if (desc) return "Teleport to up or down stairs in a moment.";
5369 #endif
5370     
5371                 {
5372                         if (cast)
5373                         {
5374 #ifdef JP
5375                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
5376 #else
5377                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
5378 #endif
5379                                 teleport_level(0);
5380                         }
5381                 }
5382                 break;
5383
5384         case 13:
5385 #ifdef JP
5386                 if (name) return "¼¡¸µ¤ÎÈâ";
5387                 if (desc) return "ûµ÷Î¥Æâ¤Î»ØÄꤷ¤¿¾ì½ê¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
5388 #else
5389                 if (name) return "Dimension Door";
5390                 if (desc) return "Teleport to given location.";
5391 #endif
5392     
5393                 {
5394                         int range = plev / 2 + 10;
5395
5396                         if (info) return info_range(range);
5397
5398                         if (cast)
5399                         {
5400 #ifdef JP
5401                                 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
5402 #else
5403                                 msg_print("You open a dimensional gate. Choose a destination.");
5404 #endif
5405
5406                                 if (!dimension_door()) return NULL;
5407                         }
5408                 }
5409                 break;
5410
5411         case 14:
5412 #ifdef JP
5413                 if (name) return "µ¢´Ô¤Î¼öʸ";
5414                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
5415 #else
5416                 if (name) return "Word of Recall";
5417                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
5418 #endif
5419     
5420                 {
5421                         int base = 15;
5422                         int sides = 20;
5423
5424                         if (info) return info_delay(base, sides);
5425
5426                         if (cast)
5427                         {
5428                                 if (!word_of_recall()) return NULL;
5429                         }
5430                 }
5431                 break;
5432
5433         case 15:
5434 #ifdef JP
5435                 if (name) return "²øʪÄÉÊü";
5436                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
5437 #else
5438                 if (name) return "Banish";
5439                 if (desc) return "Teleports all monsters in sight away unless resisted.";
5440 #endif
5441     
5442                 {
5443                         int power = plev * 4;
5444
5445                         if (info) return info_power(power);
5446
5447                         if (cast)
5448                         {
5449                                 banish_monsters(power);
5450                         }
5451                 }
5452                 break;
5453
5454         case 16:
5455 #ifdef JP
5456                 if (name) return "°ÌÃÖ¸ò´¹¤Î¥«¡¼¥É";
5457                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤È°ÌÃÖ¤ò¸ò´¹¤¹¤ë¡£";
5458 #else
5459                 if (name) return "Swap Position";
5460                 if (desc) return "Swap positions of you and a monster.";
5461 #endif
5462     
5463                 {
5464                         if (cast)
5465                         {
5466                                 bool result;
5467
5468                                 /* HACK -- No range limit */
5469                                 project_length = -1;
5470
5471                                 result = get_aim_dir(&dir);
5472
5473                                 /* Restore range to default */
5474                                 project_length = 0;
5475
5476                                 if (!result) return NULL;
5477
5478                                 teleport_swap(dir);
5479                         }
5480                 }
5481                 break;
5482
5483         case 17:
5484 #ifdef JP
5485                 if (name) return "¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É";
5486                 if (desc) return "1ÂΤΥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
5487 #else
5488                 if (name) return "Trump Undead";
5489                 if (desc) return "Summons an undead monster.";
5490 #endif
5491     
5492                 {
5493                         if (cast || fail)
5494                         {
5495 #ifdef JP
5496                                 msg_print("¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5497 #else
5498                                 msg_print("You concentrate on the trump of an undead creature...");
5499 #endif
5500
5501                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_UNDEAD, 0L))
5502                                 {
5503                                         if (fail)
5504                                         {
5505 #ifdef JP
5506                                                 msg_print("¾¤´­¤µ¤ì¤¿¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
5507 #else
5508                                                 msg_print("The summoned undead creature gets angry!");
5509 #endif
5510                                         }
5511                                 }
5512                         }
5513                 }
5514                 break;
5515
5516         case 18:
5517 #ifdef JP
5518                 if (name) return "à¨ÃîÎà¤Î¥«¡¼¥É";
5519                 if (desc) return "1ÂΤΥҥɥé¤ò¾¤´­¤¹¤ë¡£";
5520 #else
5521                 if (name) return "Trump Reptiles";
5522                 if (desc) return "Summons a hydra.";
5523 #endif
5524     
5525                 {
5526                         if (cast || fail)
5527                         {
5528 #ifdef JP
5529                                 msg_print("¤¢¤Ê¤¿¤Ïà¨ÃîÎà¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5530 #else
5531                                 msg_print("You concentrate on the trump of a reptile...");
5532 #endif
5533
5534                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HYDRA, 0L))
5535                                 {
5536                                         if (fail)
5537                                         {
5538 #ifdef JP
5539                                                 msg_print("¾¤´­¤µ¤ì¤¿à¨ÃîÎà¤ÏÅܤäƤ¤¤ë¡ª");
5540 #else
5541                                                 msg_print("The summoned reptile gets angry!");
5542 #endif
5543                                         }
5544                                 }
5545                         }
5546                 }
5547                 break;
5548
5549         case 19:
5550 #ifdef JP
5551                 if (name) return "¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É";
5552                 if (desc) return "Ê£¿ô¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤¹¤ë¡£";
5553 #else
5554                 if (name) return "Trump Monsters";
5555                 if (desc) return "Summons some monsters.";
5556 #endif
5557     
5558                 {
5559                         if (cast || fail)
5560                         {
5561                                 int type;
5562
5563 #ifdef JP
5564                                 msg_print("¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5565 #else
5566                                 msg_print("You concentrate on several trumps at once...");
5567 #endif
5568
5569                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
5570                                         type = SUMMON_LIVING;
5571                                 else
5572                                         type = 0;
5573
5574                                 if (trump_summoning((1 + (plev - 15)/ 10), !fail, py, px, 0, type, 0L))
5575                                 {
5576                                         if (fail)
5577                                         {
5578 #ifdef JP
5579                                                 msg_print("¾¤´­¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
5580 #else
5581                                                 msg_print("The summoned creatures get angry!");
5582 #endif
5583                                         }
5584                                 }
5585
5586                         }
5587                 }
5588                 break;
5589
5590         case 20:
5591 #ifdef JP
5592                 if (name) return "¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É";
5593                 if (desc) return "1¥°¥ë¡¼¥×¤Î¥Ï¥¦¥ó¥É¤ò¾¤´­¤¹¤ë¡£";
5594 #else
5595                 if (name) return "Trump Hounds";
5596                 if (desc) return "Summons a group of hounds.";
5597 #endif
5598     
5599                 {
5600                         if (cast || fail)
5601                         {
5602 #ifdef JP
5603                                 msg_print("¤¢¤Ê¤¿¤Ï¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5604 #else
5605                                 msg_print("You concentrate on the trump of a hound...");
5606 #endif
5607
5608                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HOUND, PM_ALLOW_GROUP))
5609                                 {
5610                                         if (fail)
5611                                         {
5612 #ifdef JP
5613                                                 msg_print("¾¤´­¤µ¤ì¤¿¥Ï¥¦¥ó¥É¤ÏÅܤäƤ¤¤ë¡ª");
5614 #else
5615                                                 msg_print("The summoned hounds get angry!");
5616 #endif
5617                                         }
5618                                 }
5619                         }
5620                 }
5621                 break;
5622
5623         case 21:
5624 #ifdef JP
5625                 if (name) return "¥È¥é¥ó¥×¤Î¿Ï";
5626                 if (desc) return "Éð´ï¤Ë¥È¥é¥ó¥×¤Î°À­¤ò¤Ä¤±¤ë¡£";
5627 #else
5628                 if (name) return "Trump Branding";
5629                 if (desc) return "Makes current weapon a Trump weapon.";
5630 #endif
5631     
5632                 {
5633                         if (cast)
5634                         {
5635                                 brand_weapon(5);
5636                         }
5637                 }
5638                 break;
5639
5640         case 22:
5641 #ifdef JP
5642                 if (name) return "¿Í´Ö¥È¥é¥ó¥×";
5643                 if (desc) return "¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤«¡¢¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤¬¿È¤Ë¤Ä¤¯¡£";
5644 #else
5645                 if (name) return "Living Trump";
5646                 if (desc) return "Gives mutation which makes you teleport randomly or makes you able to teleport at will.";
5647 #endif
5648     
5649                 {
5650                         if (cast)
5651                         {
5652                                 int mutation;
5653
5654                                 if (one_in_(7))
5655                                         /* Teleport control */
5656                                         mutation = 12;
5657                                 else
5658                                         /* Random teleportation (uncontrolled) */
5659                                         mutation = 77;
5660
5661                                 /* Gain the mutation */
5662                                 if (gain_random_mutation(mutation))
5663                                 {
5664 #ifdef JP
5665                                         msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤­¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
5666 #else
5667                                         msg_print("You have turned into a Living Trump.");
5668 #endif
5669                                 }
5670                         }
5671                 }
5672                 break;
5673
5674         case 23:
5675 #ifdef JP
5676                 if (name) return "¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É";
5677                 if (desc) return "1ÂΤΥµ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤¹¤ë¡£";
5678 #else
5679                 if (name) return "Trump Cyberdemon";
5680                 if (desc) return "Summons a cyber demon.";
5681 #endif
5682     
5683                 {
5684                         if (cast || fail)
5685                         {
5686 #ifdef JP
5687                                 msg_print("¤¢¤Ê¤¿¤Ï¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5688 #else
5689                                 msg_print("You concentrate on the trump of a Cyberdemon...");
5690 #endif
5691
5692                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_CYBER, 0L))
5693                                 {
5694                                         if (fail)
5695                                         {
5696 #ifdef JP
5697                                                 msg_print("¾¤´­¤µ¤ì¤¿¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5698 #else
5699                                                 msg_print("The summoned Cyberdemon gets angry!");
5700 #endif
5701                                         }
5702                                 }
5703                         }
5704                 }
5705                 break;
5706
5707         case 24:
5708 #ifdef JP
5709                 if (name) return "ͽ¸«¤Î¥«¡¼¥É";
5710                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
5711 #else
5712                 if (name) return "Trump Divination";
5713                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
5714 #endif
5715     
5716                 {
5717                         int rad = DETECT_RAD_DEFAULT;
5718
5719                         if (info) return info_radius(rad);
5720
5721                         if (cast)
5722                         {
5723                                 detect_all(rad);
5724                         }
5725                 }
5726                 break;
5727
5728         case 25:
5729 #ifdef JP
5730                 if (name) return "Ãμ±¤Î¥«¡¼¥É";
5731                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
5732 #else
5733                 if (name) return "Trump Lore";
5734                 if (desc) return "*Identifies* an item.";
5735 #endif
5736     
5737                 {
5738                         if (cast)
5739                         {
5740                                 if (!identify_fully(FALSE)) return NULL;
5741                         }
5742                 }
5743                 break;
5744
5745         case 26:
5746 #ifdef JP
5747                 if (name) return "²óÉü¥â¥ó¥¹¥¿¡¼";
5748                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤÎÂÎÎϤò²óÉü¤µ¤»¤ë¡£";
5749 #else
5750                 if (name) return "Heal Monster";
5751                 if (desc) return "Heal a monster.";
5752 #endif
5753     
5754                 {
5755                         int heal = plev * 10 + 200;
5756
5757                         if (info) return info_heal(0, 0, heal);
5758
5759                         if (cast)
5760                         {
5761                                 bool result;
5762
5763                                 /* Temporary enable target_pet option */
5764                                 bool old_target_pet = target_pet;
5765                                 target_pet = TRUE;
5766
5767                                 result = get_aim_dir(&dir);
5768
5769                                 /* Restore target_pet option */
5770                                 target_pet = old_target_pet;
5771
5772                                 if (!result) return NULL;
5773
5774                                 heal_monster(dir, heal);
5775                         }
5776                 }
5777                 break;
5778
5779         case 27:
5780 #ifdef JP
5781                 if (name) return "¥É¥é¥´¥ó¤Î¥«¡¼¥É";
5782                 if (desc) return "1ÂΤΥɥ饴¥ó¤ò¾¤´­¤¹¤ë¡£";
5783 #else
5784                 if (name) return "Trump Dragon";
5785                 if (desc) return "Summons a dragon.";
5786 #endif
5787     
5788                 {
5789                         if (cast || fail)
5790                         {
5791 #ifdef JP
5792                                 msg_print("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5793 #else
5794                                 msg_print("You concentrate on the trump of a dragon...");
5795 #endif
5796
5797                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_DRAGON, 0L))
5798                                 {
5799                                         if (fail)
5800                                         {
5801 #ifdef JP
5802                                                 msg_print("¾¤´­¤µ¤ì¤¿¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5803 #else
5804                                                 msg_print("The summoned dragon gets angry!");
5805 #endif
5806                                         }
5807                                 }
5808                         }
5809                 }
5810                 break;
5811
5812         case 28:
5813 #ifdef JP
5814                 if (name) return "ð¨ÀФΥ«¡¼¥É";
5815                 if (desc) return "¼«Ê¬¤Î¼þÊÕ¤Ëð¨ÀФòÍî¤È¤¹¡£";
5816 #else
5817                 if (name) return "Trump Meteor";
5818                 if (desc) return "Makes meteor balls fall down to nearby random locations.";
5819 #endif
5820     
5821                 {
5822                         int dam = plev * 2;
5823                         int rad = 2;
5824
5825                         if (info) return info_multi_damage(dam);
5826
5827                         if (cast)
5828                         {
5829                                 cast_meteor(dam, rad);
5830                         }
5831                 }
5832                 break;
5833
5834         case 29:
5835 #ifdef JP
5836                 if (name) return "¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É";
5837                 if (desc) return "1ÂΤΰ­Ëâ¤ò¾¤´­¤¹¤ë¡£";
5838 #else
5839                 if (name) return "Trump Demon";
5840                 if (desc) return "Summons a demon.";
5841 #endif
5842     
5843                 {
5844                         if (cast || fail)
5845                         {
5846 #ifdef JP
5847                                 msg_print("¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5848 #else
5849                                 msg_print("You concentrate on the trump of a demon...");
5850 #endif
5851
5852                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_DEMON, 0L))
5853                                 {
5854                                         if (fail)
5855                                         {
5856 #ifdef JP
5857                                                 msg_print("¾¤´­¤µ¤ì¤¿¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5858 #else
5859                                                 msg_print("The summoned demon gets angry!");
5860 #endif
5861                                         }
5862                                 }
5863                         }
5864                 }
5865                 break;
5866
5867         case 30:
5868 #ifdef JP
5869                 if (name) return "ÃϹö¤Î¥«¡¼¥É";
5870                 if (desc) return "1ÂΤξåµé¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
5871 #else
5872                 if (name) return "Trump Greater Undead";
5873                 if (desc) return "Summons a greater undead.";
5874 #endif
5875     
5876                 {
5877                         if (cast || fail)
5878                         {
5879 #ifdef JP
5880                                 msg_print("¤¢¤Ê¤¿¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5881 #else
5882                                 msg_print("You concentrate on the trump of a greater undead being...");
5883 #endif
5884                                 /* May allow unique depend on level and dice roll */
5885                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))
5886                                 {
5887                                         if (fail)
5888                                         {
5889 #ifdef JP
5890                                                 msg_print("¾¤´­¤µ¤ì¤¿¾åµé¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
5891 #else
5892                                                 msg_print("The summoned greater undead creature gets angry!");
5893 #endif
5894                                         }
5895                                 }
5896                         }
5897                 }
5898                 break;
5899
5900         case 31:
5901 #ifdef JP
5902                 if (name) return "¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É";
5903                 if (desc) return "1ÂΤθÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤¹¤ë¡£";
5904 #else
5905                 if (name) return "Trump Ancient Dragon";
5906                 if (desc) return "Summons an ancient dragon.";
5907 #endif
5908     
5909                 {
5910                         if (cast)
5911                         {
5912                                 int type;
5913
5914                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
5915                                         type = SUMMON_HI_DRAGON_LIVING;
5916                                 else
5917                                         type = SUMMON_HI_DRAGON;
5918
5919 #ifdef JP
5920                                 msg_print("¤¢¤Ê¤¿¤Ï¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5921 #else
5922                                 msg_print("You concentrate on the trump of an ancient dragon...");
5923 #endif
5924
5925                                 /* May allow unique depend on level and dice roll */
5926                                 if (trump_summoning(1, !fail, py, px, 0, type, PM_ALLOW_UNIQUE))
5927                                 {
5928                                         if (fail)
5929                                         {
5930 #ifdef JP
5931                                                 msg_print("¾¤´­¤µ¤ì¤¿¸ÅÂå¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5932 #else
5933                                                 msg_print("The summoned ancient dragon gets angry!");
5934 #endif
5935                                         }
5936                                 }
5937                         }
5938                 }
5939                 break;
5940         }
5941
5942         return "";
5943 }
5944
5945
5946 static cptr do_arcane_spell(int spell, int mode)
5947 {
5948         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
5949         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
5950         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
5951         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
5952
5953         int dir;
5954         int plev = p_ptr->lev;
5955
5956         switch (spell)
5957         {
5958         case 0:
5959 #ifdef JP
5960                 if (name) return "ÅÅ·â";
5961                 if (desc) return "ÅÅ·â¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
5962 #else
5963                 if (name) return "Zap";
5964                 if (desc) return "Fires a bolt or beam of lightning.";
5965 #endif
5966     
5967                 {
5968                         int dice = 3 + (plev - 1) / 5;
5969                         int sides = 3;
5970
5971                         if (info) return info_damage(dice, sides, 0);
5972
5973                         if (cast)
5974                         {
5975                                 if (!get_aim_dir(&dir)) return NULL;
5976
5977                                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
5978                         }
5979                 }
5980                 break;
5981
5982         case 1:
5983 #ifdef JP
5984                 if (name) return "ËâË¡¤Î»Ü¾û";
5985                 if (desc) return "Èâ¤Ë¸°¤ò¤«¤±¤ë¡£";
5986 #else
5987                 if (name) return "Wizard Lock";
5988                 if (desc) return "Locks a door.";
5989 #endif
5990     
5991                 {
5992                         if (cast)
5993                         {
5994                                 if (!get_aim_dir(&dir)) return NULL;
5995
5996                                 wizard_lock(dir);
5997                         }
5998                 }
5999                 break;
6000
6001         case 2:
6002 #ifdef JP
6003                 if (name) return "Æ©ÌÀÂδ¶ÃÎ";
6004                 if (desc) return "¶á¤¯¤ÎÆ©ÌÀ¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
6005 #else
6006                 if (name) return "Detect Invisibility";
6007                 if (desc) return "Detects all invisible monsters in your vicinity.";
6008 #endif
6009     
6010                 {
6011                         int rad = DETECT_RAD_DEFAULT;
6012
6013                         if (info) return info_radius(rad);
6014
6015                         if (cast)
6016                         {
6017                                 detect_monsters_invis(rad);
6018                         }
6019                 }
6020                 break;
6021
6022         case 3:
6023 #ifdef JP
6024                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
6025                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
6026 #else
6027                 if (name) return "Detect Monsters";
6028                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
6029 #endif
6030     
6031                 {
6032                         int rad = DETECT_RAD_DEFAULT;
6033
6034                         if (info) return info_radius(rad);
6035
6036                         if (cast)
6037                         {
6038                                 detect_monsters_normal(rad);
6039                         }
6040                 }
6041                 break;
6042
6043         case 4:
6044 #ifdef JP
6045                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
6046                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
6047 #else
6048                 if (name) return "Blink";
6049                 if (desc) return "Teleport short distance.";
6050 #endif
6051     
6052                 {
6053                         int range = 10;
6054
6055                         if (info) return info_range(range);
6056
6057                         if (cast)
6058                         {
6059                                 teleport_player(range, 0L);
6060                         }
6061                 }
6062                 break;
6063
6064         case 5:
6065 #ifdef JP
6066                 if (name) return "¥é¥¤¥È¡¦¥¨¥ê¥¢";
6067                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
6068 #else
6069                 if (name) return "Light Area";
6070                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
6071 #endif
6072     
6073                 {
6074                         int dice = 2;
6075                         int sides = plev / 2;
6076                         int rad = plev / 10 + 1;
6077
6078                         if (info) return info_damage(dice, sides, 0);
6079
6080                         if (cast)
6081                         {
6082                                 lite_area(damroll(dice, sides), rad);
6083                         }
6084                 }
6085                 break;
6086
6087         case 6:
6088 #ifdef JP
6089                 if (name) return "櫤ÈÈâ Ç˲õ";
6090                 if (desc) return "°ìľÀþ¾å¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
6091 #else
6092                 if (name) return "Trap & Door Destruction";
6093                 if (desc) return "Fires a beam which destroy traps and doors.";
6094 #endif
6095     
6096                 {
6097                         if (cast)
6098                         {
6099                                 if (!get_aim_dir(&dir)) return NULL;
6100
6101                                 destroy_door(dir);
6102                         }
6103                 }
6104                 break;
6105
6106         case 7:
6107 #ifdef JP
6108                 if (name) return "·Ú½ý¤Î¼£Ìþ";
6109                 if (desc) return "²ø²æ¤ÈÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
6110 #else
6111                 if (name) return "Cure Light Wounds";
6112                 if (desc) return "Heals cut and HP a little.";
6113 #endif
6114     
6115                 {
6116                         int dice = 2;
6117                         int sides = 8;
6118
6119                         if (info) return info_heal(dice, sides, 0);
6120
6121                         if (cast)
6122                         {
6123                                 hp_player(damroll(dice, sides));
6124                                 set_cut(p_ptr->cut - 10);
6125                         }
6126                 }
6127                 break;
6128
6129         case 8:
6130 #ifdef JP
6131                 if (name) return "櫤ÈÈâ ´¶ÃÎ";
6132                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤È³¬Ãʤò´¶ÃΤ¹¤ë¡£";
6133 #else
6134                 if (name) return "Detect Doors & Traps";
6135                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
6136 #endif
6137     
6138                 {
6139                         int rad = DETECT_RAD_DEFAULT;
6140
6141                         if (info) return info_radius(rad);
6142
6143                         if (cast)
6144                         {
6145                                 detect_traps(rad, TRUE);
6146                                 detect_doors(rad);
6147                                 detect_stairs(rad);
6148                         }
6149                 }
6150                 break;
6151
6152         case 9:
6153 #ifdef JP
6154                 if (name) return "dzÁÇ";
6155                 if (desc) return "¸÷¸»¤ËdzÎÁ¤òÊäµë¤¹¤ë¡£";
6156 #else
6157                 if (name) return "Phlogiston";
6158                 if (desc) return "Adds more turns of light to a lantern or torch.";
6159 #endif
6160     
6161                 {
6162                         if (cast)
6163                         {
6164                                 phlogiston();
6165                         }
6166                 }
6167                 break;
6168
6169         case 10:
6170 #ifdef JP
6171                 if (name) return "ºâÊõ´¶ÃÎ";
6172                 if (desc) return "¶á¤¯¤ÎºâÊõ¤ò´¶ÃΤ¹¤ë¡£";
6173 #else
6174                 if (name) return "Detect Treasure";
6175                 if (desc) return "Detects all treasures in your vicinity.";
6176 #endif
6177     
6178                 {
6179                         int rad = DETECT_RAD_DEFAULT;
6180
6181                         if (info) return info_radius(rad);
6182
6183                         if (cast)
6184                         {
6185                                 detect_treasure(rad);
6186                                 detect_objects_gold(rad);
6187                         }
6188                 }
6189                 break;
6190
6191         case 11:
6192 #ifdef JP
6193                 if (name) return "ËâË¡ ´¶ÃÎ";
6194                 if (desc) return "¶á¤¯¤ÎËâË¡¤¬¤«¤«¤Ã¤¿¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6195 #else
6196                 if (name) return "Detect Enchantment";
6197                 if (desc) return "Detects all magical items in your vicinity.";
6198 #endif
6199     
6200                 {
6201                         int rad = DETECT_RAD_DEFAULT;
6202
6203                         if (info) return info_radius(rad);
6204
6205                         if (cast)
6206                         {
6207                                 detect_objects_magic(rad);
6208                         }
6209                 }
6210                 break;
6211
6212         case 12:
6213 #ifdef JP
6214                 if (name) return "¥¢¥¤¥Æ¥à´¶ÃÎ";
6215                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6216 #else
6217                 if (name) return "Detect Objects";
6218                 if (desc) return "Detects all items in your vicinity.";
6219 #endif
6220     
6221                 {
6222                         int rad = DETECT_RAD_DEFAULT;
6223
6224                         if (info) return info_radius(rad);
6225
6226                         if (cast)
6227                         {
6228                                 detect_objects_normal(rad);
6229                         }
6230                 }
6231                 break;
6232
6233         case 13:
6234 #ifdef JP
6235                 if (name) return "²òÆÇ";
6236                 if (desc) return "ÆǤòÂÎÆ⤫¤é´°Á´¤Ë¼è¤ê½ü¤¯¡£";
6237 #else
6238                 if (name) return "Cure Poison";
6239                 if (desc) return "Cures poison status.";
6240 #endif
6241     
6242                 {
6243                         if (cast)
6244                         {
6245                                 set_poisoned(0);
6246                         }
6247                 }
6248                 break;
6249
6250         case 14:
6251 #ifdef JP
6252                 if (name) return "ÂÑÎä";
6253                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6254 #else
6255                 if (name) return "Resist Cold";
6256                 if (desc) return "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.";
6257 #endif
6258     
6259                 {
6260                         int base = 20;
6261
6262                         if (info) return info_duration(base, base);
6263
6264                         if (cast)
6265                         {
6266                                 set_oppose_cold(randint1(base) + base, FALSE);
6267                         }
6268                 }
6269                 break;
6270
6271         case 15:
6272 #ifdef JP
6273                 if (name) return "ÂѲÐ";
6274                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6275 #else
6276                 if (name) return "Resist Fire";
6277                 if (desc) return "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.";
6278 #endif
6279     
6280                 {
6281                         int base = 20;
6282
6283                         if (info) return info_duration(base, base);
6284
6285                         if (cast)
6286                         {
6287                                 set_oppose_fire(randint1(base) + base, FALSE);
6288                         }
6289                 }
6290                 break;
6291
6292         case 16:
6293 #ifdef JP
6294                 if (name) return "ÂÑÅÅ";
6295                 if (desc) return "°ìÄê»þ´Ö¡¢ÅÅ·â¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6296 #else
6297                 if (name) return "Resist Lightning";
6298                 if (desc) return "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.";
6299 #endif
6300     
6301                 {
6302                         int base = 20;
6303
6304                         if (info) return info_duration(base, base);
6305
6306                         if (cast)
6307                         {
6308                                 set_oppose_elec(randint1(base) + base, FALSE);
6309                         }
6310                 }
6311                 break;
6312
6313         case 17:
6314 #ifdef JP
6315                 if (name) return "ÂÑ»À";
6316                 if (desc) return "°ìÄê»þ´Ö¡¢»À¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6317 #else
6318                 if (name) return "Resist Acid";
6319                 if (desc) return "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.";
6320 #endif
6321     
6322                 {
6323                         int base = 20;
6324
6325                         if (info) return info_duration(base, base);
6326
6327                         if (cast)
6328                         {
6329                                 set_oppose_acid(randint1(base) + base, FALSE);
6330                         }
6331                 }
6332                 break;
6333
6334         case 18:
6335 #ifdef JP
6336                 if (name) return "½Å½ý¤Î¼£Ìþ";
6337                 if (desc) return "²ø²æ¤ÈÂÎÎϤòÃæÄøÅÙ²óÉü¤µ¤»¤ë¡£";
6338 #else
6339                 if (name) return "Cure Medium Wounds";
6340                 if (desc) return "Heals cut and HP more.";
6341 #endif
6342     
6343                 {
6344                         int dice = 4;
6345                         int sides = 8;
6346
6347                         if (info) return info_heal(dice, sides, 0);
6348
6349                         if (cast)
6350                         {
6351                                 hp_player(damroll(dice, sides));
6352                                 set_cut((p_ptr->cut / 2) - 50);
6353                         }
6354                 }
6355                 break;
6356
6357         case 19:
6358 #ifdef JP
6359                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
6360                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
6361 #else
6362                 if (name) return "Teleport";
6363                 if (desc) return "Teleport long distance.";
6364 #endif
6365     
6366                 {
6367                         int range = plev * 5;
6368
6369                         if (info) return info_range(range);
6370
6371                         if (cast)
6372                         {
6373                                 teleport_player(range, 0L);
6374                         }
6375                 }
6376                 break;
6377
6378         case 20:
6379 #ifdef JP
6380                 if (name) return "´ÕÄê";
6381                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
6382 #else
6383                 if (name) return "Identify";
6384                 if (desc) return "Identifies an item.";
6385 #endif
6386     
6387                 {
6388                         if (cast)
6389                         {
6390                                 if (!ident_spell(FALSE)) return NULL;
6391                         }
6392                 }
6393                 break;
6394
6395         case 21:
6396 #ifdef JP
6397                 if (name) return "´äÀÐÍϲò";
6398                 if (desc) return "ÊɤòÍϤ«¤·¤Æ¾²¤Ë¤¹¤ë¡£";
6399 #else
6400                 if (name) return "Stone to Mud";
6401                 if (desc) return "Turns one rock square to mud.";
6402 #endif
6403     
6404                 {
6405                         int dice = 1;
6406                         int sides = 30;
6407                         int base = 20;
6408
6409                         if (info) return info_damage(dice, sides, base);
6410
6411                         if (cast)
6412                         {
6413                                 if (!get_aim_dir(&dir)) return NULL;
6414
6415                                 wall_to_mud(dir);
6416                         }
6417                 }
6418                 break;
6419
6420         case 22:
6421 #ifdef JP
6422                 if (name) return "Á®¸÷";
6423                 if (desc) return "¸÷Àþ¤òÊü¤Ä¡£¸÷¤ê¤ò·ù¤¦¥â¥ó¥¹¥¿¡¼¤Ë¸ú²Ì¤¬¤¢¤ë¡£";
6424 #else
6425                 if (name) return "Ray of Light";
6426                 if (desc) return "Fires a beam of light which damages to light-sensitive monsters.";
6427 #endif
6428     
6429                 {
6430                         int dice = 6;
6431                         int sides = 8;
6432
6433                         if (info) return info_damage(dice, sides, 0);
6434
6435                         if (cast)
6436                         {
6437                                 if (!get_aim_dir(&dir)) return NULL;
6438
6439 #ifdef JP
6440                                 msg_print("¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
6441 #else
6442                                 msg_print("A line of light appears.");
6443 #endif
6444
6445                                 lite_line(dir);
6446                         }
6447                 }
6448                 break;
6449
6450         case 23:
6451 #ifdef JP
6452                 if (name) return "¶õÊ¢½¼Â­";
6453                 if (desc) return "ËþÊ¢¤Ë¤¹¤ë¡£";
6454 #else
6455                 if (name) return "Satisfy Hunger";
6456                 if (desc) return "Satisfies hunger.";
6457 #endif
6458     
6459                 {
6460                         if (cast)
6461                         {
6462                                 set_food(PY_FOOD_MAX - 1);
6463                         }
6464                 }
6465                 break;
6466
6467         case 24:
6468 #ifdef JP
6469                 if (name) return "Æ©ÌÀ»ëǧ";
6470                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
6471 #else
6472                 if (name) return "See Invisible";
6473                 if (desc) return "Gives see invisible for a while.";
6474 #endif
6475     
6476                 {
6477                         int base = 24;
6478
6479                         if (info) return info_duration(base, base);
6480
6481                         if (cast)
6482                         {
6483                                 set_tim_invis(randint1(base) + base, FALSE);
6484                         }
6485                 }
6486                 break;
6487
6488         case 25:
6489 #ifdef JP
6490                 if (name) return "¥¨¥ì¥á¥ó¥¿¥ë¾¤´­";
6491                 if (desc) return "1ÂΤΥ¨¥ì¥á¥ó¥¿¥ë¤ò¾¤´­¤¹¤ë¡£";
6492 #else
6493                 if (name) return "Conjure Elemental";
6494                 if (desc) return "Summons an elemental.";
6495 #endif
6496     
6497                 {
6498                         if (cast)
6499                         {
6500                                 if (!summon_specific(-1, py, px, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))
6501                                 {
6502 #ifdef JP
6503                                         msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
6504 #else
6505                                         msg_print("No Elementals arrive.");
6506 #endif
6507                                 }
6508                         }
6509                 }
6510                 break;
6511
6512         case 26:
6513 #ifdef JP
6514                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
6515                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
6516 #else
6517                 if (name) return "Teleport Level";
6518                 if (desc) return "Teleport to up or down stairs in a moment.";
6519 #endif
6520     
6521                 {
6522                         if (cast)
6523                         {
6524 #ifdef JP
6525                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
6526 #else
6527                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
6528 #endif
6529                                 teleport_level(0);
6530                         }
6531                 }
6532                 break;
6533
6534         case 27:
6535 #ifdef JP
6536                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
6537                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
6538 #else
6539                 if (name) return "Teleport Away";
6540                 if (desc) return "Teleports all monsters on the line away unless resisted.";
6541 #endif
6542     
6543                 {
6544                         int power = plev;
6545
6546                         if (info) return info_power(power);
6547
6548                         if (cast)
6549                         {
6550                                 if (!get_aim_dir(&dir)) return NULL;
6551
6552                                 fire_beam(GF_AWAY_ALL, dir, power);
6553                         }
6554                 }
6555                 break;
6556
6557         case 28:
6558 #ifdef JP
6559                 if (name) return "¸µÁǤεå";
6560                 if (desc) return "±ê¡¢ÅÅ·â¡¢Î䵤¡¢»À¤Î¤É¤ì¤«¤Îµå¤òÊü¤Ä¡£";
6561 #else
6562                 if (name) return "Elemental Ball";
6563                 if (desc) return "Fires a ball of some elements.";
6564 #endif
6565     
6566                 {
6567                         int dam = 75 + plev;
6568                         int rad = 2;
6569
6570                         if (info) return info_damage(0, 0, dam);
6571
6572                         if (cast)
6573                         {
6574                                 int type;
6575
6576                                 if (!get_aim_dir(&dir)) return NULL;
6577
6578                                 switch (randint1(4))
6579                                 {
6580                                         case 1:  type = GF_FIRE;break;
6581                                         case 2:  type = GF_ELEC;break;
6582                                         case 3:  type = GF_COLD;break;
6583                                         default: type = GF_ACID;break;
6584                                 }
6585
6586                                 fire_ball(type, dir, dam, rad);
6587                         }
6588                 }
6589                 break;
6590
6591         case 29:
6592 #ifdef JP
6593                 if (name) return "Á´´¶ÃÎ";
6594                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6595 #else
6596                 if (name) return "Detection";
6597                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
6598 #endif
6599     
6600                 {
6601                         int rad = DETECT_RAD_DEFAULT;
6602
6603                         if (info) return info_radius(rad);
6604
6605                         if (cast)
6606                         {
6607                                 detect_all(rad);
6608                         }
6609                 }
6610                 break;
6611
6612         case 30:
6613 #ifdef JP
6614                 if (name) return "µ¢´Ô¤Î¼öʸ";
6615                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
6616 #else
6617                 if (name) return "Word of Recall";
6618                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
6619 #endif
6620     
6621                 {
6622                         int base = 15;
6623                         int sides = 20;
6624
6625                         if (info) return info_delay(base, sides);
6626
6627                         if (cast)
6628                         {
6629                                 if (!word_of_recall()) return NULL;
6630                         }
6631                 }
6632                 break;
6633
6634         case 31:
6635 #ifdef JP
6636                 if (name) return "ÀéΤ´ã";
6637                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤µ¤é¤Ë¡¢°ìÄê»þ´Ö¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
6638 #else
6639                 if (name) return "Clairvoyance";
6640                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
6641 #endif
6642     
6643                 {
6644                         int base = 25;
6645                         int sides = 30;
6646
6647                         if (info) return info_duration(base, sides);
6648
6649                         if (cast)
6650                         {
6651                                 chg_virtue(V_KNOWLEDGE, 1);
6652                                 chg_virtue(V_ENLIGHTEN, 1);
6653
6654                                 wiz_lite(FALSE);
6655
6656                                 if (!p_ptr->telepathy)
6657                                 {
6658                                         set_tim_esp(randint1(sides) + base, FALSE);
6659                                 }
6660                         }
6661                 }
6662                 break;
6663         }
6664
6665         return "";
6666 }
6667
6668
6669 static cptr do_craft_spell(int spell, int mode)
6670 {
6671         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
6672         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
6673         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
6674         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
6675
6676         int plev = p_ptr->lev;
6677
6678         switch (spell)
6679         {
6680         case 0:
6681 #ifdef JP
6682                 if (name) return "ÀÖ³°Àþ»ëÎÏ";
6683                 if (desc) return "°ìÄê»þ´Ö¡¢ÀÖ³°Àþ»ëÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
6684 #else
6685                 if (name) return "Infravision";
6686                 if (desc) return "Gives infravision for a while.";
6687 #endif
6688     
6689                 {
6690                         int base = 100;
6691
6692                         if (info) return info_duration(base, base);
6693
6694                         if (cast)
6695                         {
6696                                 set_tim_infra(base + randint1(base), FALSE);
6697                         }
6698                 }
6699                 break;
6700
6701         case 1:
6702 #ifdef JP
6703                 if (name) return "²óÉüÎ϶¯²½";
6704                 if (desc) return "°ìÄê»þ´Ö¡¢²óÉüÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
6705 #else
6706                 if (name) return "Regeneration";
6707                 if (desc) return "Gives regeneration ability for a while.";
6708 #endif
6709     
6710                 {
6711                         int base = 80;
6712
6713                         if (info) return info_duration(base, base);
6714
6715                         if (cast)
6716                         {
6717                                 set_tim_regen(base + randint1(base), FALSE);
6718                         }
6719                 }
6720                 break;
6721
6722         case 2:
6723 #ifdef JP
6724                 if (name) return "¶õÊ¢½¼Â­";
6725                 if (desc) return "ËþÊ¢¤Ë¤Ê¤ë¡£";
6726 #else
6727                 if (name) return "Satisfy Hunger";
6728                 if (desc) return "Satisfies hunger.";
6729 #endif
6730     
6731                 {
6732                         if (cast)
6733                         {
6734                                 set_food(PY_FOOD_MAX - 1);
6735                         }
6736                 }
6737                 break;
6738
6739         case 3:
6740 #ifdef JP
6741                 if (name) return "ÂÑÎ䵤";
6742                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6743 #else
6744                 if (name) return "Resist Cold";
6745                 if (desc) return "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.";
6746 #endif
6747     
6748                 {
6749                         int base = 20;
6750
6751                         if (info) return info_duration(base, base);
6752
6753                         if (cast)
6754                         {
6755                                 set_oppose_cold(randint1(base) + base, FALSE);
6756                         }
6757                 }
6758                 break;
6759
6760         case 4:
6761 #ifdef JP
6762                 if (name) return "ÂѲбê";
6763                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6764 #else
6765                 if (name) return "Resist Fire";
6766                 if (desc) return "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.";
6767 #endif
6768     
6769                 {
6770                         int base = 20;
6771
6772                         if (info) return info_duration(base, base);
6773
6774                         if (cast)
6775                         {
6776                                 set_oppose_fire(randint1(base) + base, FALSE);
6777                         }
6778                 }
6779                 break;
6780
6781         case 5:
6782 #ifdef JP
6783                 if (name) return "»Îµ¤¹âÍÈ";
6784                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
6785 #else
6786                 if (name) return "Heroism";
6787                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
6788 #endif
6789     
6790                 {
6791                         int base = 25;
6792
6793                         if (info) return info_duration(base, base);
6794
6795                         if (cast)
6796                         {
6797                                 set_hero(randint1(base) + base, FALSE);
6798                                 hp_player(10);
6799                                 set_afraid(0);
6800                         }
6801                 }
6802                 break;
6803
6804         case 6:
6805 #ifdef JP
6806                 if (name) return "ÂÑÅÅ·â";
6807                 if (desc) return "°ìÄê»þ´Ö¡¢ÅÅ·â¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6808 #else
6809                 if (name) return "Resist Lightning";
6810                 if (desc) return "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.";
6811 #endif
6812     
6813                 {
6814                         int base = 20;
6815
6816                         if (info) return info_duration(base, base);
6817
6818                         if (cast)
6819                         {
6820                                 set_oppose_elec(randint1(base) + base, FALSE);
6821                         }
6822                 }
6823                 break;
6824
6825         case 7:
6826 #ifdef JP
6827                 if (name) return "ÂÑ»À";
6828                 if (desc) return "°ìÄê»þ´Ö¡¢»À¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6829 #else
6830                 if (name) return "Resist Acid";
6831                 if (desc) return "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.";
6832 #endif
6833     
6834                 {
6835                         int base = 20;
6836
6837                         if (info) return info_duration(base, base);
6838
6839                         if (cast)
6840                         {
6841                                 set_oppose_acid(randint1(base) + base, FALSE);
6842                         }
6843                 }
6844                 break;
6845
6846         case 8:
6847 #ifdef JP
6848                 if (name) return "Æ©ÌÀ»ëǧ";
6849                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
6850 #else
6851                 if (name) return "See Invisibility";
6852                 if (desc) return "Gives see invisible for a while.";
6853 #endif
6854     
6855                 {
6856                         int base = 24;
6857
6858                         if (info) return info_duration(base, base);
6859
6860                         if (cast)
6861                         {
6862                                 set_tim_invis(randint1(base) + base, FALSE);
6863                         }
6864                 }
6865                 break;
6866
6867         case 9:
6868 #ifdef JP
6869                 if (name) return "²ò¼ö";
6870                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
6871 #else
6872                 if (name) return "Remove Curse";
6873                 if (desc) return "Removes normal curses from equipped items.";
6874 #endif
6875     
6876                 {
6877                         if (cast)
6878                         {
6879                                 if (remove_curse())
6880                                 {
6881 #ifdef JP
6882                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
6883 #else
6884                                         msg_print("You feel as if someone is watching over you.");
6885 #endif
6886                                 }
6887                         }
6888                 }
6889                 break;
6890
6891         case 10:
6892 #ifdef JP
6893                 if (name) return "ÂÑÆÇ";
6894                 if (desc) return "°ìÄê»þ´Ö¡¢ÆǤؤÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6895 #else
6896                 if (name) return "Resist Poison";
6897                 if (desc) return "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.";
6898 #endif
6899     
6900                 {
6901                         int base = 20;
6902
6903                         if (info) return info_duration(base, base);
6904
6905                         if (cast)
6906                         {
6907                                 set_oppose_pois(randint1(base) + base, FALSE);
6908                         }
6909                 }
6910                 break;
6911
6912         case 11:
6913 #ifdef JP
6914                 if (name) return "¶¸Àï»Î²½";
6915                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤¹¤ë¡£";
6916 #else
6917                 if (name) return "Berserk";
6918                 if (desc) return "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.";
6919 #endif
6920     
6921                 {
6922                         int base = 25;
6923
6924                         if (info) return info_duration(base, base);
6925
6926                         if (cast)
6927                         {
6928                                 set_shero(randint1(base) + base, FALSE);
6929                                 hp_player(30);
6930                                 set_afraid(0);
6931                         }
6932                 }
6933                 break;
6934
6935         case 12:
6936 #ifdef JP
6937                 if (name) return "¼«¸ÊʬÀÏ";
6938                 if (desc) return "¸½ºß¤Î¼«Ê¬¤Î¾õÂÖ¤ò´°Á´¤ËÃΤ롣";
6939 #else
6940                 if (name) return "Self Knowledge";
6941                 if (desc) return "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.";
6942 #endif
6943     
6944                 {
6945                         if (cast)
6946                         {
6947                                 self_knowledge();
6948                         }
6949                 }
6950                 break;
6951
6952         case 13:
6953 #ifdef JP
6954                 if (name) return "Âмٰ­·ë³¦";
6955                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Î¹¶·â¤òËɤ°¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
6956 #else
6957                 if (name) return "Protection from Evil";
6958                 if (desc) return "Gives aura which protect you from evil monster's physical attack.";
6959 #endif
6960     
6961                 {
6962                         int base = 3 * plev;
6963                         int sides = 25;
6964
6965                         if (info) return info_duration(base, sides);
6966
6967                         if (cast)
6968                         {
6969                                 set_protevil(randint1(sides) + base, FALSE);
6970                         }
6971                 }
6972                 break;
6973
6974         case 14:
6975 #ifdef JP
6976                 if (name) return "Ìþ¤·";
6977                 if (desc) return "ÆÇ¡¢Û¯Û°¾õÂÖ¡¢Éé½ý¤òÁ´²÷¤µ¤»¡¢¸¸³Ð¤òľ¤¹¡£";
6978 #else
6979                 if (name) return "Cure";
6980                 if (desc) return "Heals poison, stun, cut and hallucination completely.";
6981 #endif
6982     
6983                 {
6984                         if (cast)
6985                         {
6986                                 set_poisoned(0);
6987                                 set_stun(0);
6988                                 set_cut(0);
6989                                 set_image(0);
6990                         }
6991                 }
6992                 break;
6993
6994         case 15:
6995 #ifdef JP
6996                 if (name) return "ËâË¡·õ";
6997                 if (desc) return "°ìÄê»þ´Ö¡¢Éð´ï¤ËÎ䵤¡¢±ê¡¢ÅÅ·â¡¢»À¡¢ÆǤΤ¤¤º¤ì¤«¤Î°À­¤ò¤Ä¤±¤ë¡£Éð´ï¤ò»ý¤¿¤Ê¤¤¤È»È¤¨¤Ê¤¤¡£";
6998 #else
6999                 if (name) return "Mana Branding";
7000                 if (desc) return "Makes current weapon some elemental branded. You must wield weapons.";
7001 #endif
7002     
7003                 {
7004                         int base = plev / 2;
7005
7006                         if (info) return info_duration(base, base);
7007
7008                         if (cast)
7009                         {
7010                                 if (!choose_ele_attack()) return NULL;
7011                         }
7012                 }
7013                 break;
7014
7015         case 16:
7016 #ifdef JP
7017                 if (name) return "¥Æ¥ì¥Ñ¥·¡¼";
7018                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
7019 #else
7020                 if (name) return "Telepathy";
7021                 if (desc) return "Gives telepathy for a while.";
7022 #endif
7023     
7024                 {
7025                         int base = 25;
7026                         int sides = 30;
7027
7028                         if (info) return info_duration(base, sides);
7029
7030                         if (cast)
7031                         {
7032                                 set_tim_esp(randint1(sides) + base, FALSE);
7033                         }
7034                 }
7035                 break;
7036
7037         case 17:
7038 #ifdef JP
7039                 if (name) return "È©Àв½";
7040                 if (desc) return "°ìÄê»þ´Ö¡¢AC¤ò¾å¾º¤µ¤»¤ë¡£";
7041 #else
7042                 if (name) return "Stone Skin";
7043                 if (desc) return "Gives bonus to AC for a while.";
7044 #endif
7045     
7046                 {
7047                         int base = 30;
7048                         int sides = 20;
7049
7050                         if (info) return info_duration(base, sides);
7051
7052                         if (cast)
7053                         {
7054                                 set_shield(randint1(sides) + base, FALSE);
7055                         }
7056                 }
7057                 break;
7058
7059         case 18:
7060 #ifdef JP
7061                 if (name) return "Á´ÂÑÀ­";
7062                 if (desc) return "°ìÄê»þ´Ö¡¢»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7063 #else
7064                 if (name) return "Resistance";
7065                 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.";
7066 #endif
7067     
7068                 {
7069                         int base = 20;
7070
7071                         if (info) return info_duration(base, base);
7072
7073                         if (cast)
7074                         {
7075                                 set_oppose_acid(randint1(base) + base, FALSE);
7076                                 set_oppose_elec(randint1(base) + base, FALSE);
7077                                 set_oppose_fire(randint1(base) + base, FALSE);
7078                                 set_oppose_cold(randint1(base) + base, FALSE);
7079                                 set_oppose_pois(randint1(base) + base, FALSE);
7080                         }
7081                 }
7082                 break;
7083
7084         case 19:
7085 #ifdef JP
7086                 if (name) return "¥¹¥Ô¡¼¥É";
7087                 if (desc) return "°ìÄê»þ´Ö¡¢²Ã®¤¹¤ë¡£";
7088 #else
7089                 if (name) return "Haste Self";
7090                 if (desc) return "Hastes you for a while.";
7091 #endif
7092     
7093                 {
7094                         int base = plev;
7095                         int sides = 20 + plev;
7096
7097                         if (info) return info_duration(base, sides);
7098
7099                         if (cast)
7100                         {
7101                                 set_fast(randint1(sides) + base, FALSE);
7102                         }
7103                 }
7104                 break;
7105
7106         case 20:
7107 #ifdef JP
7108                 if (name) return "ÊÉÈ´¤±";
7109                 if (desc) return "°ìÄê»þ´Ö¡¢È¾Êª¼Á²½¤·ÊɤòÄ̤êÈ´¤±¤é¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
7110 #else
7111                 if (name) return "Walk through Wall";
7112                 if (desc) return "Gives ability to pass walls for a while.";
7113 #endif
7114     
7115                 {
7116                         int base = plev / 2;
7117
7118                         if (info) return info_duration(base, base);
7119
7120                         if (cast)
7121                         {
7122                                 set_kabenuke(randint1(base) + base, FALSE);
7123                         }
7124                 }
7125                 break;
7126
7127         case 21:
7128 #ifdef JP
7129                 if (name) return "½âË᤭";
7130                 if (desc) return "½â¤ËÈ¿¼Í¤Î°À­¤ò¤Ä¤±¤ë¡£";
7131 #else
7132                 if (name) return "Polish Shield";
7133                 if (desc) return "Makes a shield a shield of reflection.";
7134 #endif
7135     
7136                 {
7137                         if (cast)
7138                         {
7139                                 pulish_shield();
7140                         }
7141                 }
7142                 break;
7143
7144         case 22:
7145 #ifdef JP
7146                 if (name) return "¥´¡¼¥ì¥àÀ½Â¤";
7147                 if (desc) return "1ÂΤΥ´¡¼¥ì¥à¤òÀ½Â¤¤¹¤ë¡£";
7148 #else
7149                 if (name) return "Create Golem";
7150                 if (desc) return "Creates a golem.";
7151 #endif
7152     
7153                 {
7154                         if (cast)
7155                         {
7156                                 if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, PM_FORCE_PET))
7157                                 {
7158 #ifdef JP
7159                                         msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
7160 #else
7161                                         msg_print("You make a golem.");
7162 #endif
7163                                 }
7164                                 else
7165                                 {
7166 #ifdef JP
7167                                         msg_print("¤¦¤Þ¤¯¥´¡¼¥ì¥à¤òºî¤ì¤Ê¤«¤Ã¤¿¡£");
7168 #else
7169                                         msg_print("No Golems arrive.");
7170 #endif
7171                                 }
7172                         }
7173                 }
7174                 break;
7175
7176         case 23:
7177 #ifdef JP
7178                 if (name) return "ËâË¡¤Î³»";
7179                 if (desc) return "°ìÄê»þ´Ö¡¢ËâË¡ËɸæÎϤÈAC¤¬¾å¤¬¤ê¡¢º®Íð¤ÈÌÕÌܤÎÂÑÀ­¡¢È¿¼ÍǽÎÏ¡¢ËãáãÃΤ餺¡¢ÉâÍ·¤òÆÀ¤ë¡£";
7180 #else
7181                 if (name) return "Magical armor";
7182                 if (desc) return "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.";
7183 #endif
7184     
7185                 {
7186                         int base = 20;
7187
7188                         if (info) return info_duration(base, base);
7189
7190                         if (cast)
7191                         {
7192                                 set_magicdef(randint1(base) + base, FALSE);
7193                         }
7194                 }
7195                 break;
7196
7197         case 24:
7198 #ifdef JP
7199                 if (name) return "ÁõÈ÷̵Îϲ½";
7200                 if (desc) return "Éð´ï¡¦Ëɶñ¤Ë¤«¤±¤é¤ì¤¿¤¢¤é¤æ¤ëËâÎϤò´°Á´¤Ë²ò½ü¤¹¤ë¡£";
7201 #else
7202                 if (name) return "Remove Enchantment";
7203                 if (desc) return "Removes all magics completely from any weapon or armor.";
7204 #endif
7205     
7206                 {
7207                         if (cast)
7208                         {
7209                                 if (!mundane_spell(TRUE)) return NULL;
7210                         }
7211                 }
7212                 break;
7213
7214         case 25:
7215 #ifdef JP
7216                 if (name) return "¼ö¤¤Ê´ºÕ";
7217                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
7218 #else
7219                 if (name) return "Remove All Curse";
7220                 if (desc) return "Removes normal and heavy curse from equipped items.";
7221 #endif
7222     
7223                 {
7224                         if (cast)
7225                         {
7226                                 if (remove_all_curse())
7227                                 {
7228 #ifdef JP
7229                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
7230 #else
7231                                         msg_print("You feel as if someone is watching over you.");
7232 #endif
7233                                 }
7234                         }
7235                 }
7236                 break;
7237
7238         case 26:
7239 #ifdef JP
7240                 if (name) return "´°Á´¤Ê¤ëÃμ±";
7241                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
7242 #else
7243                 if (name) return "Knowledge True";
7244                 if (desc) return "*Identifies* an item.";
7245 #endif
7246     
7247                 {
7248                         if (cast)
7249                         {
7250                                 if (!identify_fully(FALSE)) return NULL;
7251                         }
7252                 }
7253                 break;
7254
7255         case 27:
7256 #ifdef JP
7257                 if (name) return "Éð´ï¶¯²½";
7258                 if (desc) return "Éð´ï¤ÎÌ¿ÃæΨ½¤Àµ¤È¥À¥á¡¼¥¸½¤Àµ¤ò¶¯²½¤¹¤ë¡£";
7259 #else
7260                 if (name) return "Enchant Weapon";
7261                 if (desc) return "Attempts to increase +to-hit, +to-dam of a weapon.";
7262 #endif
7263     
7264                 {
7265                         if (cast)
7266                         {
7267                                 if (!enchant_spell(randint0(4) + 1, randint0(4) + 1, 0)) return NULL;
7268                         }
7269                 }
7270                 break;
7271
7272         case 28:
7273 #ifdef JP
7274                 if (name) return "Ëɶñ¶¯²½";
7275                 if (desc) return "³»¤ÎËɸ潤Àµ¤ò¶¯²½¤¹¤ë¡£";
7276 #else
7277                 if (name) return "Enchant Armor";
7278                 if (desc) return "Attempts to increase +AC of an armor.";
7279 #endif
7280     
7281                 {
7282                         if (cast)
7283                         {
7284                                 if (!enchant_spell(0, 0, randint0(3) + 2)) return NULL;
7285                         }
7286                 }
7287                 break;
7288
7289         case 29:
7290 #ifdef JP
7291                 if (name) return "Éð´ï°À­ÉÕÍ¿";
7292                 if (desc) return "Éð´ï¤Ë¥é¥ó¥À¥à¤Ë°À­¤ò¤Ä¤±¤ë¡£";
7293 #else
7294                 if (name) return "Brand Weapon";
7295                 if (desc) return "Makes current weapon a random ego weapon.";
7296 #endif
7297     
7298                 {
7299                         if (cast)
7300                         {
7301                                 brand_weapon(randint0(18));
7302                         }
7303                 }
7304                 break;
7305
7306         case 30:
7307 #ifdef JP
7308                 if (name) return "¿Í´Ö¥È¥é¥ó¥×";
7309                 if (desc) return "¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤«¡¢¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤¬¿È¤Ë¤Ä¤¯¡£";
7310 #else
7311                 if (name) return "Living Trump";
7312                 if (desc) return "Gives mutation which makes you teleport randomly or makes you able to teleport at will.";
7313 #endif
7314     
7315                 {
7316                         if (cast)
7317                         {
7318                                 int mutation;
7319
7320                                 if (one_in_(7))
7321                                         /* Teleport control */
7322                                         mutation = 12;
7323                                 else
7324                                         /* Random teleportation (uncontrolled) */
7325                                         mutation = 77;
7326
7327                                 /* Gain the mutation */
7328                                 if (gain_random_mutation(mutation))
7329                                 {
7330 #ifdef JP
7331                                         msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤­¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
7332 #else
7333                                         msg_print("You have turned into a Living Trump.");
7334 #endif
7335                                 }
7336                         }
7337                 }
7338                 break;
7339
7340         case 31:
7341 #ifdef JP
7342                 if (name) return "°À­¤Ø¤ÎÌȱÖ";
7343                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¡¢±ê¡¢ÅÅ·â¡¢»À¤Î¤¤¤º¤ì¤«¤ËÂФ¹¤ëÌȱ֤òÆÀ¤ë¡£";
7344 #else
7345                 if (name) return "Immunity";
7346                 if (desc) return "Gives an immunity to fire, cold, electricity or acid for a while.";
7347 #endif
7348     
7349                 {
7350                         int base = 13;
7351
7352                         if (info) return info_duration(base, base);
7353
7354                         if (cast)
7355                         {
7356                                 if (!choose_ele_immune(base + randint1(base))) return NULL;
7357                         }
7358                 }
7359                 break;
7360         }
7361
7362         return "";
7363 }
7364
7365
7366 static cptr do_daemon_spell(int spell, int mode)
7367 {
7368         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
7369         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
7370         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
7371         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
7372
7373 #ifdef JP
7374         static const char s_dam[] = "»½ý:";
7375 #else
7376         static const char s_dam[] = "dam ";
7377 #endif
7378
7379         int dir;
7380         int plev = p_ptr->lev;
7381
7382         switch (spell)
7383         {
7384         case 0:
7385 #ifdef JP
7386                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë";
7387                 if (desc) return "¼å¤¤ËâË¡¤ÎÌð¤òÊü¤Ä¡£";
7388 #else
7389                 if (name) return "Magic Missile";
7390                 if (desc) return "Fires a weak bolt of magic.";
7391 #endif
7392     
7393                 {
7394                         int dice = 3 + (plev - 1) / 5;
7395                         int sides = 4;
7396
7397                         if (info) return info_damage(dice, sides, 0);
7398
7399                         if (cast)
7400                         {
7401                                 if (!get_aim_dir(&dir)) return NULL;
7402
7403                                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
7404                         }
7405                 }
7406                 break;
7407
7408         case 1:
7409 #ifdef JP
7410                 if (name) return "̵À¸Ì¿´¶ÃÎ";
7411                 if (desc) return "¶á¤¯¤ÎÀ¸Ì¿¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
7412 #else
7413                 if (name) return "Detect Unlife";
7414                 if (desc) return "Detects all nonliving monsters in your vicinity.";
7415 #endif
7416     
7417                 {
7418                         int rad = DETECT_RAD_DEFAULT;
7419
7420                         if (info) return info_radius(rad);
7421
7422                         if (cast)
7423                         {
7424                                 detect_monsters_nonliving(rad);
7425                         }
7426                 }
7427                 break;
7428
7429         case 2:
7430 #ifdef JP
7431                 if (name) return "¼Ù¤Ê¤ë½ËÊ¡";
7432                 if (desc) return "°ìÄê»þ´Ö¡¢Ì¿ÃæΨ¤ÈAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
7433 #else
7434                 if (name) return "Evil Bless";
7435                 if (desc) return "Gives bonus to hit and AC for a few turns.";
7436 #endif
7437     
7438                 {
7439                         int base = 12;
7440
7441                         if (info) return info_duration(base, base);
7442
7443                         if (cast)
7444                         {
7445                                 set_blessed(randint1(base) + base, FALSE);
7446                         }
7447                 }
7448                 break;
7449
7450         case 3:
7451 #ifdef JP
7452                 if (name) return "ÂѲбê";
7453                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7454 #else
7455                 if (name) return "Resist Fire";
7456                 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.";
7457 #endif
7458     
7459                 {
7460                         int base = 20;
7461
7462                         if (info) return info_duration(base, base);
7463
7464                         if (cast)
7465                         {
7466                                 set_oppose_fire(randint1(base) + base, FALSE);
7467                         }
7468                 }
7469                 break;
7470
7471         case 4:
7472 #ifdef JP
7473                 if (name) return "¶²¹²";
7474                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¡¢Û¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
7475 #else
7476                 if (name) return "Horrify";
7477                 if (desc) return "Attempts to scare and stun a monster.";
7478 #endif
7479     
7480                 {
7481                         int power = plev;
7482
7483                         if (info) return info_power(power);
7484
7485                         if (cast)
7486                         {
7487                                 if (!get_aim_dir(&dir)) return NULL;
7488
7489                                 fear_monster(dir, power);
7490                                 stun_monster(dir, power);
7491                         }
7492                 }
7493                 break;
7494
7495         case 5:
7496 #ifdef JP
7497                 if (name) return "ÃϹö¤ÎÌð";
7498                 if (desc) return "ÃϹö¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
7499 #else
7500                 if (name) return "Nether Bolt";
7501                 if (desc) return "Fires a bolt or beam of nether.";
7502 #endif
7503     
7504                 {
7505                         int dice = 6 + (plev - 5) / 4;
7506                         int sides = 8;
7507
7508                         if (info) return info_damage(dice, sides, 0);
7509
7510                         if (cast)
7511                         {
7512                                 if (!get_aim_dir(&dir)) return NULL;
7513
7514                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
7515                         }
7516                 }
7517                 break;
7518
7519         case 6:
7520 #ifdef JP
7521                 if (name) return "¸ÅÂå¤Î»àÎ´­";
7522                 if (desc) return "¸ÅÂå¤Î»àÎî¤ò¾¤´­¤¹¤ë¡£";
7523 #else
7524                 if (name) return "Summon Manes";
7525                 if (desc) return "Summons a manes.";
7526 #endif
7527     
7528                 {
7529                         if (cast)
7530                         {
7531                                 if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))
7532                                 {
7533 #ifdef JP
7534                                         msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
7535 #else
7536                                         msg_print("No Manes arrive.");
7537 #endif
7538                                 }
7539                         }
7540                 }
7541                 break;
7542
7543         case 7:
7544 #ifdef JP
7545                 if (name) return "ÃϹö¤Î±ë";
7546                 if (desc) return "¼Ù°­¤ÊÎϤò»ý¤Ä¥Ü¡¼¥ë¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
7547 #else
7548                 if (name) return "Hellish Flame";
7549                 if (desc) return "Fires a ball of evil power. Hurts good monsters greatly.";
7550 #endif
7551     
7552                 {
7553                         int dice = 3;
7554                         int sides = 6;
7555                         int rad = (plev < 30) ? 2 : 3;
7556                         int base;
7557
7558                         if (p_ptr->pclass == CLASS_MAGE ||
7559                             p_ptr->pclass == CLASS_HIGH_MAGE ||
7560                             p_ptr->pclass == CLASS_SORCERER)
7561                                 base = plev + plev / 2;
7562                         else
7563                                 base = plev + plev / 4;
7564
7565
7566                         if (info) return info_damage(dice, sides, base);
7567
7568                         if (cast)
7569                         {
7570                                 if (!get_aim_dir(&dir)) return NULL;
7571
7572                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides) + base, rad);
7573                         }
7574                 }
7575                 break;
7576
7577         case 8:
7578 #ifdef JP
7579                 if (name) return "¥Ç¡¼¥â¥ó»ÙÇÛ";
7580                 if (desc) return "°­Ëâ1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú";
7581 #else
7582                 if (name) return "Dominate Demon";
7583                 if (desc) return "Attempts to charm a demon.";
7584 #endif
7585     
7586                 {
7587                         int power = plev;
7588
7589                         if (info) return info_power(power);
7590
7591                         if (cast)
7592                         {
7593                                 if (!get_aim_dir(&dir)) return NULL;
7594
7595                                 control_one_demon(dir, power);
7596                         }
7597                 }
7598                 break;
7599
7600         case 9:
7601 #ifdef JP
7602                 if (name) return "¥Ó¥¸¥ç¥ó";
7603                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
7604 #else
7605                 if (name) return "Vision";
7606                 if (desc) return "Maps nearby area.";
7607 #endif
7608     
7609                 {
7610                         int rad = DETECT_RAD_MAP;
7611
7612                         if (info) return info_radius(rad);
7613
7614                         if (cast)
7615                         {
7616                                 map_area(rad);
7617                         }
7618                 }
7619                 break;
7620
7621         case 10:
7622 #ifdef JP
7623                 if (name) return "ÂÑÃϹö";
7624                 if (desc) return "°ìÄê»þ´Ö¡¢ÃϹö¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£";
7625 #else
7626                 if (name) return "Resist Nether";
7627                 if (desc) return "Gives resistance to nether for a while.";
7628 #endif
7629     
7630                 {
7631                         int base = 20;
7632
7633                         if (info) return info_duration(base, base);
7634
7635                         if (cast)
7636                         {
7637                                 set_tim_res_nether(randint1(base) + base, FALSE);
7638                         }
7639                 }
7640                 break;
7641
7642         case 11:
7643 #ifdef JP
7644                 if (name) return "¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È";
7645                 if (desc) return "¥×¥é¥º¥Þ¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
7646 #else
7647                 if (name) return "Plasma bolt";
7648                 if (desc) return "Fires a bolt or beam of plasma.";
7649 #endif
7650     
7651                 {
7652                         int dice = 11 + (plev - 5) / 4;
7653                         int sides = 8;
7654
7655                         if (info) return info_damage(dice, sides, 0);
7656
7657                         if (cast)
7658                         {
7659                                 if (!get_aim_dir(&dir)) return NULL;
7660
7661                                 fire_bolt_or_beam(beam_chance(), GF_PLASMA, dir, damroll(dice, sides));
7662                         }
7663                 }
7664                 break;
7665
7666         case 12:
7667 #ifdef JP
7668                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";
7669                 if (desc) return "±ê¤Îµå¤òÊü¤Ä¡£";
7670 #else
7671                 if (name) return "Fire Ball";
7672                 if (desc) return "Fires a ball of fire.";
7673 #endif
7674     
7675                 {
7676                         int dam = plev + 55;
7677                         int rad = 2;
7678
7679                         if (info) return info_damage(0, 0, dam);
7680
7681                         if (cast)
7682                         {
7683                                 if (!get_aim_dir(&dir)) return NULL;
7684
7685                                 fire_ball(GF_FIRE, dir, dam, rad);
7686                         }
7687                 }
7688                 break;
7689
7690         case 13:
7691 #ifdef JP
7692                 if (name) return "±ê¤Î¿Ï";
7693                 if (desc) return "Éð´ï¤Ë±ê¤Î°À­¤ò¤Ä¤±¤ë¡£";
7694 #else
7695                 if (name) return "Fire Branding";
7696                 if (desc) return "Makes current weapon fire branded.";
7697 #endif
7698     
7699                 {
7700                         if (cast)
7701                         {
7702                                 brand_weapon(1);
7703                         }
7704                 }
7705                 break;
7706
7707         case 14:
7708 #ifdef JP
7709                 if (name) return "ÃϹöµå";
7710                 if (desc) return "Â礭¤ÊÃϹö¤Îµå¤òÊü¤Ä¡£";
7711 #else
7712                 if (name) return "Nether Ball";
7713                 if (desc) return "Fires a huge ball of nether.";
7714 #endif
7715     
7716                 {
7717                         int dam = plev * 3 / 2 + 100;
7718                         int rad = plev / 20 + 2;
7719
7720                         if (info) return info_damage(0, 0, dam);
7721
7722                         if (cast)
7723                         {
7724                                 if (!get_aim_dir(&dir)) return NULL;
7725
7726                                 fire_ball(GF_NETHER, dir, dam, rad);
7727                         }
7728                 }
7729                 break;
7730
7731         case 15:
7732 #ifdef JP
7733                 if (name) return "¥Ç¡¼¥â¥ó¾¤´­";
7734                 if (desc) return "°­Ëâ1ÂΤò¾¤´­¤¹¤ë¡£";
7735 #else
7736                 if (name) return "Summon Demon";
7737                 if (desc) return "Summons a demon.";
7738 #endif
7739     
7740                 {
7741                         if (cast)
7742                         {
7743                                 bool pet = !one_in_(3);
7744                                 u32b mode = 0L;
7745
7746                                 if (pet) mode |= PM_FORCE_PET;
7747                                 else mode |= PM_NO_PET;
7748                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
7749
7750                                 if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint1(plev/2), SUMMON_DEMON, mode))
7751                                 {
7752 #ifdef JP
7753                                         msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
7754 #else
7755                                         msg_print("The area fills with a stench of sulphur and brimstone.");
7756 #endif
7757
7758
7759                                         if (pet)
7760                                         {
7761 #ifdef JP
7762                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
7763 #else
7764                                                 msg_print("'What is thy bidding... Master?'");
7765 #endif
7766                                         }
7767                                         else
7768                                         {
7769 #ifdef JP
7770                                                 msg_print("¡ÖÈܤ·¤­¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
7771 #else
7772                                                 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
7773 #endif
7774                                         }
7775                                 }
7776                                 else
7777                                 {
7778 #ifdef JP
7779                                         msg_print("°­Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
7780 #else
7781                                         msg_print("No demons arrive.");
7782 #endif
7783                                 }
7784                                 break;
7785                         }
7786                 }
7787                 break;
7788
7789         case 16:
7790 #ifdef JP
7791                 if (name) return "°­Ëâ¤ÎÌÜ";
7792                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
7793 #else
7794                 if (name) return "Devilish Eye";
7795                 if (desc) return "Gives telepathy for a while.";
7796 #endif
7797     
7798                 {
7799                         int base = 30;
7800                         int sides = 25;
7801
7802                         if (info) return info_duration(base, sides);
7803
7804                         if (cast)
7805                         {
7806                                 set_tim_esp(randint1(base) + sides, FALSE);
7807                         }
7808                 }
7809                 break;
7810
7811         case 17:
7812 #ifdef JP
7813                 if (name) return "°­Ëâ¤Î¥¯¥í¡¼¥¯";
7814                 if (desc) return "¶²Éݤò¼è¤ê½ü¤­¡¢°ìÄê»þ´Ö¡¢±ê¤ÈÎ䵤¤ÎÂÑÀ­¡¢±ê¤Î¥ª¡¼¥é¤òÆÀ¤ë¡£ÂÑÀ­¤ÏÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7815 #else
7816                 if (name) return "Devil Cloak";
7817                 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.";
7818 #endif
7819     
7820                 {
7821                         int base = 20;
7822
7823                         if (info) return info_duration(base, base);
7824
7825                         if (cast)
7826                         {
7827                                 int dur = randint1(base) + base;
7828                                         
7829                                 set_oppose_fire(dur, FALSE);
7830                                 set_oppose_cold(dur, FALSE);
7831                                 set_tim_sh_fire(dur, FALSE);
7832                                 set_afraid(0);
7833                                 break;
7834                         }
7835                 }
7836                 break;
7837
7838         case 18:
7839 #ifdef JP
7840                 if (name) return "ÍÏ´äή";
7841                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿±ê¤Îµå¤òºî¤ê½Ð¤·¡¢¾²¤òÍÏ´ä¤ËÊѤ¨¤ë¡£";
7842 #else
7843                 if (name) return "The Flow of Lava";
7844                 if (desc) return "Generates a ball of fire centered on you which transforms floors to magma.";
7845 #endif
7846     
7847                 {
7848                         int dam = (55 + plev) * 2;
7849                         int rad = 3;
7850
7851                         if (info) return info_damage(0, 0, dam/2);
7852
7853                         if (cast)
7854                         {
7855                                 fire_ball(GF_FIRE, 0, dam, rad);
7856                                 fire_ball_hide(GF_LAVA_FLOW, 0, 2 + randint1(2), rad);
7857                         }
7858                 }
7859                 break;
7860
7861         case 19:
7862 #ifdef JP
7863                 if (name) return "¥×¥é¥º¥Þµå";
7864                 if (desc) return "¥×¥é¥º¥Þ¤Îµå¤òÊü¤Ä¡£";
7865 #else
7866                 if (name) return "Plasma Ball";
7867                 if (desc) return "Fires a ball of plasma.";
7868 #endif
7869     
7870                 {
7871                         int dam = plev * 3 / 2 + 80;
7872                         int rad = 2 + plev / 40;
7873
7874                         if (info) return info_damage(0, 0, dam);
7875
7876                         if (cast)
7877                         {
7878                                 if (!get_aim_dir(&dir)) return NULL;
7879
7880                                 fire_ball(GF_PLASMA, dir, dam, rad);
7881                         }
7882                 }
7883                 break;
7884
7885         case 20:
7886 #ifdef JP
7887                 if (name) return "°­ËâÊѲ½";
7888                 if (desc) return "°ìÄê»þ´Ö¡¢°­Ëâ¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤Ë°­Ëâ¤È¤·¤Æ¤ÎǽÎϤòÆÀ¤ë¡£";
7889 #else
7890                 if (name) return "Polymorph Demon";
7891                 if (desc) return "Mimic a demon for a while. Loses abilities of original race and gets abilities as a demon.";
7892 #endif
7893     
7894                 {
7895                         int base = 10 + plev / 2;
7896
7897                         if (info) return info_duration(base, base);
7898
7899                         if (cast)
7900                         {
7901                                 set_mimic(base + randint1(base), MIMIC_DEMON, FALSE);
7902                         }
7903                 }
7904                 break;
7905
7906         case 21:
7907 #ifdef JP
7908                 if (name) return "ÃϹö¤ÎÇÈÆ°";
7909                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤ËÆäËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
7910 #else
7911                 if (name) return "Nather Wave";
7912                 if (desc) return "Damages all monsters in sight. Hurts good monsters greatly.";
7913 #endif
7914     
7915                 {
7916                         int sides1 = plev * 2;
7917                         int sides2 = plev * 2;
7918
7919                         if (info) return format("%sd%d+d%d", s_dam, sides1, sides2);
7920
7921                         if (cast)
7922                         {
7923                                 dispel_monsters(randint1(sides1));
7924                                 dispel_good(randint1(sides2));
7925                         }
7926                 }
7927                 break;
7928
7929         case 22:
7930 #ifdef JP
7931                 if (name) return "¥µ¥­¥å¥Ð¥¹¤ÎÀÜÊ­";
7932                 if (desc) return "°ø²Ìº®Íð¤Îµå¤òÊü¤Ä¡£";
7933 #else
7934                 if (name) return "Kiss of Succubus";
7935                 if (desc) return "Fires a ball of nexus.";
7936 #endif
7937     
7938                 {
7939                         int dam = 100 + plev * 2;
7940                         int rad = 4;
7941
7942                         if (info) return info_damage(0, 0, dam);
7943
7944                         if (cast)
7945                         {
7946                                 if (!get_aim_dir(&dir)) return NULL;
7947                                 fire_ball(GF_NEXUS, dir, dam, rad);
7948                         }
7949                 }
7950                 break;
7951
7952         case 23:
7953 #ifdef JP
7954                 if (name) return "ÇËÌǤμê";
7955                 if (desc) return "ÇËÌǤμê¤òÊü¤Ä¡£¿©¤é¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤Ï¤½¤Î¤È¤­¤ÎHP¤ÎȾʬÁ°¸å¤Î¥À¥á¡¼¥¸¤ò¼õ¤±¤ë¡£";
7956 #else
7957                 if (name) return "Doom Hand";
7958                 if (desc) return "Attempts to make a monster's HP almost half.";
7959 #endif
7960     
7961                 {
7962                         if (cast)
7963                         {
7964                                 if (!get_aim_dir(&dir)) return NULL;
7965 #ifdef JP
7966                                 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
7967 #else
7968                                 else msg_print("You invoke the Hand of Doom!");
7969 #endif
7970
7971                                 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
7972                         }
7973                 }
7974                 break;
7975
7976         case 24:
7977 #ifdef JP
7978                 if (name) return "»Îµ¤¹âÍÈ";
7979                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
7980 #else
7981                 if (name) return "Raise the Morale";
7982                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
7983 #endif
7984     
7985                 {
7986                         int base = 25;
7987
7988                         if (info) return info_duration(base, base);
7989
7990                         if (cast)
7991                         {
7992                                 set_hero(randint1(base) + base, FALSE);
7993                                 hp_player(10);
7994                                 set_afraid(0);
7995                         }
7996                 }
7997                 break;
7998
7999         case 25:
8000 #ifdef JP
8001                 if (name) return "ÉÔÌǤÎÆùÂÎ";
8002                 if (desc) return "°ìÄê»þ´Ö¡¢»þ´ÖµÕž¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£";
8003 #else
8004                 if (name) return "Immortal Body";
8005                 if (desc) return "Gives resistance to time for a while.";
8006 #endif
8007     
8008                 {
8009                         int base = 20;
8010
8011                         if (info) return info_duration(base, base);
8012
8013                         if (cast)
8014                         {
8015                                 set_tim_res_time(randint1(base)+base, FALSE);
8016                         }
8017                 }
8018                 break;
8019
8020         case 26:
8021 #ifdef JP
8022                 if (name) return "¶¸µ¤¤Î±ß´Ä";
8023                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¥«¥ª¥¹¤Îµå¡¢º®Íð¤Îµå¤òȯÀ¸¤µ¤»¡¢¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£";
8024 #else
8025                 if (name) return "Insanity Circle";
8026                 if (desc) return "Generate balls of chaos, confusion and charm centered on you.";
8027 #endif
8028     
8029                 {
8030                         int dam = 50 + plev;
8031                         int power = 20 + plev;
8032                         int rad = 3 + plev / 20;
8033
8034                         if (info) return format("%s%d+%d", s_dam, dam/2, dam/2);
8035
8036                         if (cast)
8037                         {
8038                                 fire_ball(GF_CHAOS, 0, dam, rad);
8039                                 fire_ball(GF_CONFUSION, 0, dam, rad);
8040                                 fire_ball(GF_CHARM, 0, power, rad);
8041                         }
8042                 }
8043                 break;
8044
8045         case 27:
8046 #ifdef JP
8047                 if (name) return "¥Ú¥Ã¥ÈÇúÇË";
8048                 if (desc) return "Á´¤Æ¤Î¥Ú¥Ã¥È¤ò¶¯À©Åª¤ËÇúÇˤµ¤»¤ë¡£";
8049 #else
8050                 if (name) return "Explode Pets";
8051                 if (desc) return "Makes all pets explode.";
8052 #endif
8053     
8054                 {
8055                         if (cast)
8056                         {
8057                                 discharge_minion();
8058                         }
8059                 }
8060                 break;
8061
8062         case 28:
8063 #ifdef JP
8064                 if (name) return "¥°¥ì¡¼¥¿¡¼¥Ç¡¼¥â¥ó¾¤´­";
8065                 if (desc) return "¾åµé¥Ç¡¼¥â¥ó¤ò¾¤´­¤¹¤ë¡£¾¤´­¤¹¤ë¤Ë¤Ï¿Í´Ö('p','h','t'¤Çɽ¤µ¤ì¤ë¥â¥ó¥¹¥¿¡¼)¤Î»àÂΤòÊû¤²¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£";
8066 #else
8067                 if (name) return "Summon Greater Demon";
8068                 if (desc) return "Summons greater demon. It need to sacrifice a corpse of human ('p','h' or 't').";
8069 #endif
8070     
8071                 {
8072                         if (cast)
8073                         {
8074                                 if (!cast_summon_greater_demon()) return NULL;
8075                         }
8076                 }
8077                 break;
8078
8079         case 29:
8080 #ifdef JP
8081                 if (name) return "ÃϹöÍò";
8082                 if (desc) return "ĶµðÂç¤ÊÃϹö¤Îµå¤òÊü¤Ä¡£";
8083 #else
8084                 if (name) return "Nether Storm";
8085                 if (desc) return "Generate a huge ball of nether.";
8086 #endif
8087     
8088                 {
8089                         int dam = plev * 15;
8090                         int rad = plev / 5;
8091
8092                         if (info) return info_damage(0, 0, dam);
8093
8094                         if (cast)
8095                         {
8096                                 if (!get_aim_dir(&dir)) return NULL;
8097
8098                                 fire_ball(GF_NETHER, dir, dam, rad);
8099                         }
8100                 }
8101                 break;
8102
8103         case 30:
8104 #ifdef JP
8105                 if (name) return "·ì¤Î¼ö¤¤";
8106                 if (desc) return "¼«Ê¬¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤ë¤³¤È¤Ë¤è¤Ã¤ÆÂоݤ˼ö¤¤¤ò¤«¤±¡¢¥À¥á¡¼¥¸¤òÍ¿¤¨ÍÍ¡¹¤Ê¸ú²Ì¤ò°ú¤­µ¯¤³¤¹¡£";
8107 #else
8108                 if (name) return "Bloody Curse";
8109                 if (desc) return "Puts blood curse which damages and causes various effects on a monster. You also take damage.";
8110 #endif
8111     
8112                 {
8113                         int dam = 600;
8114                         int rad = 0;
8115
8116                         if (info) return info_damage(0, 0, dam);
8117
8118                         if (cast)
8119                         {
8120                                 if (!get_aim_dir(&dir)) return NULL;
8121
8122                                 fire_ball_hide(GF_BLOOD_CURSE, dir, dam, rad);
8123 #ifdef JP
8124                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "·ì¤Î¼ö¤¤", -1);
8125 #else
8126                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "Blood curse", -1);
8127 #endif
8128                         }
8129                 }
8130                 break;
8131
8132         case 31:
8133 #ifdef JP
8134                 if (name) return "ËⲦÊѲ½";
8135                 if (desc) return "°­Ëâ¤Î²¦¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤Ë°­Ëâ¤Î²¦¤È¤·¤Æ¤ÎǽÎϤòÆÀ¡¢ÊɤòÇ˲õ¤·¤Ê¤¬¤éÊ⤯¡£";
8136 #else
8137                 if (name) return "Polymorph Demonlord";
8138                 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.";
8139 #endif
8140     
8141                 {
8142                         int base = 15;
8143
8144                         if (info) return info_duration(base, base);
8145
8146                         if (cast)
8147                         {
8148                                 set_mimic(base + randint1(base), MIMIC_DEMON_LORD, FALSE);
8149                         }
8150                 }
8151                 break;
8152         }
8153
8154         return "";
8155 }
8156
8157
8158 static cptr do_crusade_spell(int spell, int mode)
8159 {
8160         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
8161         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
8162         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
8163         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
8164
8165         int dir;
8166         int plev = p_ptr->lev;
8167
8168         switch (spell)
8169         {
8170         case 0:
8171 #ifdef JP
8172                 if (name) return "Ĩȳ";
8173                 if (desc) return "ÅÅ·â¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
8174 #else
8175                 if (name) return "Punishment";
8176                 if (desc) return "Fires a bolt or beam of lightning.";
8177 #endif
8178     
8179                 {
8180                         int dice = 3 + (plev - 1) / 5;
8181                         int sides = 4;
8182
8183                         if (info) return info_damage(dice, sides, 0);
8184
8185                         if (cast)
8186                         {
8187                                 if (!get_aim_dir(&dir)) return NULL;
8188
8189                                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
8190                         }
8191                 }
8192                 break;
8193
8194         case 1:
8195 #ifdef JP
8196                 if (name) return "¼Ù°­Â¸ºß´¶ÃÎ";
8197                 if (desc) return "¶á¤¯¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
8198 #else
8199                 if (name) return "Detect Evil";
8200                 if (desc) return "Detects all evil monsters in your vicinity.";
8201 #endif
8202     
8203                 {
8204                         int rad = DETECT_RAD_DEFAULT;
8205
8206                         if (info) return info_radius(rad);
8207
8208                         if (cast)
8209                         {
8210                                 detect_monsters_evil(rad);
8211                         }
8212                 }
8213                 break;
8214
8215         case 2:
8216 #ifdef JP
8217                 if (name) return "¶²Éݽüµî";
8218                 if (desc) return "¶²Éݤò¼è¤ê½ü¤¯¡£";
8219 #else
8220                 if (name) return "Remove Fear";
8221                 if (desc) return "Removes fear.";
8222 #endif
8223     
8224                 {
8225                         if (cast)
8226                         {
8227                                 set_afraid(0);
8228                         }
8229                 }
8230                 break;
8231
8232         case 3:
8233 #ifdef JP
8234                 if (name) return "°Ò°µ";
8235                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8236 #else
8237                 if (name) return "Scare Monster";
8238                 if (desc) return "Attempts to scare a monster.";
8239 #endif
8240     
8241                 {
8242                         int power = plev;
8243
8244                         if (info) return info_power(power);
8245
8246                         if (cast)
8247                         {
8248                                 if (!get_aim_dir(&dir)) return NULL;
8249
8250                                 fear_monster(dir, power);
8251                         }
8252                 }
8253                 break;
8254
8255         case 4:
8256 #ifdef JP
8257                 if (name) return "À»°è";
8258                 if (desc) return "ÎÙÀܤ·¤¿Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8259 #else
8260                 if (name) return "Sanctuary";
8261                 if (desc) return "Attempts to sleep monsters in the adjacent squares.";
8262 #endif
8263     
8264                 {
8265                         int power = plev;
8266
8267                         if (info) return info_power(power);
8268
8269                         if (cast)
8270                         {
8271                                 sleep_monsters_touch();
8272                         }
8273                 }
8274                 break;
8275
8276         case 5:
8277 #ifdef JP
8278                 if (name) return "Æþ¸ý";
8279                 if (desc) return "Ãæµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
8280 #else
8281                 if (name) return "Portal";
8282                 if (desc) return "Teleport medium distance.";
8283 #endif
8284     
8285                 {
8286                         int range = 25 + plev / 2;
8287
8288                         if (info) return info_range(range);
8289
8290                         if (cast)
8291                         {
8292                                 teleport_player(range, 0L);
8293                         }
8294                 }
8295                 break;
8296
8297         case 6:
8298 #ifdef JP
8299                 if (name) return "¥¹¥¿¡¼¥À¥¹¥È";
8300                 if (desc) return "¥¿¡¼¥²¥Ã¥ÈÉÕ¶á¤ËÁ®¸÷¤Î¥Ü¥ë¥È¤òÏ¢¼Í¤¹¤ë¡£";
8301 #else
8302                 if (name) return "Star Dust";
8303                 if (desc) return "Fires many bolts of light near the target.";
8304 #endif
8305     
8306                 {
8307                         int dice = 3 + (plev - 1) / 9;
8308                         int sides = 2;
8309
8310                         if (info) return info_multi_damage_dice(dice, sides);
8311
8312                         if (cast)
8313                         {
8314                                 if (!get_aim_dir(&dir)) return NULL;
8315                                 fire_blast(GF_LITE, dir, dice, sides, 10, 3);
8316                         }
8317                 }
8318                 break;
8319
8320         case 7:
8321 #ifdef JP
8322                 if (name) return "¿ÈÂξô²½";
8323                 if (desc) return "½ý¡¢ÆÇ¡¢Û¯Û°¤«¤éÁ´²÷¤¹¤ë¡£";
8324 #else
8325                 if (name) return "Purify";
8326                 if (desc) return "Heals all cut, stun and poison status.";
8327 #endif
8328     
8329                 {
8330                         if (cast)
8331                         {
8332                                 set_cut(0);
8333                                 set_poisoned(0);
8334                                 set_stun(0);
8335                         }
8336                 }
8337                 break;
8338
8339         case 8:
8340 #ifdef JP
8341                 if (name) return "¼Ù°­Èô¤Ð¤·";
8342                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼1ÂΤò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8343 #else
8344                 if (name) return "Scatter Evil";
8345                 if (desc) return "Attempts to teleport an evil monster away.";
8346 #endif
8347     
8348                 {
8349                         int power = MAX_SIGHT * 5;
8350
8351                         if (info) return info_power(power);
8352
8353                         if (cast)
8354                         {
8355                                 if (!get_aim_dir(&dir)) return NULL;
8356                                 fire_ball(GF_AWAY_EVIL, dir, power, 0);
8357                         }
8358                 }
8359                 break;
8360
8361         case 9:
8362 #ifdef JP
8363                 if (name) return "À»¤Ê¤ë¸÷µå";
8364                 if (desc) return "À»¤Ê¤ëÎϤò¤â¤ÄÊõ¼î¤òÊü¤Ä¡£¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤¬¡¢Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡£";
8365 #else
8366                 if (name) return "Holy Orb";
8367                 if (desc) return "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good monsters.";
8368 #endif
8369     
8370                 {
8371                         int dice = 3;
8372                         int sides = 6;
8373                         int rad = (plev < 30) ? 2 : 3;
8374                         int base;
8375
8376                         if (p_ptr->pclass == CLASS_PRIEST ||
8377                             p_ptr->pclass == CLASS_HIGH_MAGE ||
8378                             p_ptr->pclass == CLASS_SORCERER)
8379                                 base = plev + plev / 2;
8380                         else
8381                                 base = plev + plev / 4;
8382
8383
8384                         if (info) return info_damage(dice, sides, base);
8385
8386                         if (cast)
8387                         {
8388                                 if (!get_aim_dir(&dir)) return NULL;
8389
8390                                 fire_ball(GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);
8391                         }
8392                 }
8393                 break;
8394
8395         case 10:
8396 #ifdef JP
8397                 if (name) return "°­Ëâʧ¤¤";
8398                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥ÉµÚ¤Ó°­Ëâ¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£";
8399 #else
8400                 if (name) return "Exorcism";
8401                 if (desc) return "Damages all undead and demons in sight, and scares all evil monsters in sight.";
8402 #endif
8403     
8404                 {
8405                         int sides = plev;
8406                         int power = plev;
8407
8408                         if (info) return info_damage(1, sides, 0);
8409
8410                         if (cast)
8411                         {
8412                                 dispel_undead(randint1(sides));
8413                                 dispel_demons(randint1(sides));
8414                                 turn_evil(power);
8415                         }
8416                 }
8417                 break;
8418
8419         case 11:
8420 #ifdef JP
8421                 if (name) return "²ò¼ö";
8422                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
8423 #else
8424                 if (name) return "Remove Curse";
8425                 if (desc) return "Removes normal curses from equipped items.";
8426 #endif
8427     
8428                 {
8429                         if (cast)
8430                         {
8431                                 if (remove_curse())
8432                                 {
8433 #ifdef JP
8434                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
8435 #else
8436                                         msg_print("You feel as if someone is watching over you.");
8437 #endif
8438                                 }
8439                         }
8440                 }
8441                 break;
8442
8443         case 12:
8444 #ifdef JP
8445                 if (name) return "Æ©ÌÀ»ëǧ";
8446                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
8447 #else
8448                 if (name) return "Sense Unseen";
8449                 if (desc) return "Gives see invisible for a while.";
8450 #endif
8451     
8452                 {
8453                         int base = 24;
8454
8455                         if (info) return info_duration(base, base);
8456
8457                         if (cast)
8458                         {
8459                                 set_tim_invis(randint1(base) + base, FALSE);
8460                         }
8461                 }
8462                 break;
8463
8464         case 13:
8465 #ifdef JP
8466                 if (name) return "Âмٰ­·ë³¦";
8467                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Î¹¶·â¤òËɤ°¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
8468 #else
8469                 if (name) return "Protection from Evil";
8470                 if (desc) return "Gives aura which protect you from evil monster's physical attack.";
8471 #endif
8472     
8473                 {
8474                         int base = 25;
8475                         int sides = 3 * plev;
8476
8477                         if (info) return info_duration(base, sides);
8478
8479                         if (cast)
8480                         {
8481                                 set_protevil(randint1(sides) + sides, FALSE);
8482                         }
8483                 }
8484                 break;
8485
8486         case 14:
8487 #ifdef JP
8488                 if (name) return "ºÛ¤­¤ÎÍë";
8489                 if (desc) return "¶¯ÎϤÊÅÅ·â¤Î¥Ü¥ë¥È¤òÊü¤Ä¡£";
8490 #else
8491                 if (name) return "Judgment Thunder";
8492                 if (desc) return "Fires a powerful bolt of lightning.";
8493 #endif
8494     
8495                 {
8496                         int dam = plev * 5;
8497
8498                         if (info) return info_damage(0, 0, dam);
8499
8500                         if (cast)
8501                         {
8502                                 if (!get_aim_dir(&dir)) return NULL;
8503                                 fire_bolt(GF_ELEC, dir, dam);
8504                         }
8505                 }
8506                 break;
8507
8508         case 15:
8509 #ifdef JP
8510                 if (name) return "À»¤Ê¤ë¸æ¸ÀÍÕ";
8511                 if (desc) return "»ë³¦Æâ¤Î¼Ù°­¤Ê¸ºß¤ËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢ÂÎÎϤò²óÉü¤·¡¢ÆÇ¡¢¶²ÉÝ¡¢Û¯Û°¾õÂÖ¡¢Éé½ý¤«¤éÁ´²÷¤¹¤ë¡£";
8512 #else
8513                 if (name) return "Holy Word";
8514                 if (desc) return "Damages all evil monsters in sight, heals HP somewhat, and completely heals poison, fear, stun and cut status.";
8515 #endif
8516     
8517                 {
8518                         int dam_sides = plev * 6;
8519                         int heal = 100;
8520
8521 #ifdef JP
8522                         if (info) return format("»:1d%d/²ó%d", dam_sides, heal);
8523 #else
8524                         if (info) return format("dam:d%d/h%d", dam_sides, heal);
8525 #endif
8526
8527                         if (cast)
8528                         {
8529                                 dispel_evil(randint1(dam_sides));
8530                                 hp_player(heal);
8531                                 set_afraid(0);
8532                                 set_poisoned(0);
8533                                 set_stun(0);
8534                                 set_cut(0);
8535                         }
8536                 }
8537                 break;
8538
8539         case 16:
8540 #ifdef JP
8541                 if (name) return "³«¤«¤ì¤¿Æ»";
8542                 if (desc) return "°ìľÀþ¾å¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
8543 #else
8544                 if (name) return "Unbarring Ways";
8545                 if (desc) return "Fires a beam which destroy traps and doors.";
8546 #endif
8547     
8548                 {
8549                         if (cast)
8550                         {
8551                                 if (!get_aim_dir(&dir)) return NULL;
8552
8553                                 destroy_door(dir);
8554                         }
8555                 }
8556                 break;
8557
8558         case 17:
8559 #ifdef JP
8560                 if (name) return "ÉõËâ";
8561                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ÎÆ°¤­¤ò»ß¤á¤ë¡£";
8562 #else
8563                 if (name) return "Arrest";
8564                 if (desc) return "Attempts to paralyze an evil monster.";
8565 #endif
8566     
8567                 {
8568                         int power = plev * 2;
8569
8570                         if (info) return info_power(power);
8571
8572                         if (cast)
8573                         {
8574                                 if (!get_aim_dir(&dir)) return NULL;
8575                                 stasis_evil(dir);
8576                         }
8577                 }
8578                 break;
8579
8580         case 18:
8581 #ifdef JP
8582                 if (name) return "À»¤Ê¤ë¥ª¡¼¥é";
8583                 if (desc) return "°ìÄê»þ´Ö¡¢¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò½ý¤Ä¤±¤ëÀ»¤Ê¤ë¥ª¡¼¥é¤òÆÀ¤ë¡£";
8584 #else
8585                 if (name) return "Holy Aura";
8586                 if (desc) return "Gives aura of holy power which injures evil monsters which attacked you for a while.";
8587 #endif
8588     
8589                 {
8590                         int base = 20;
8591
8592                         if (info) return info_duration(base, base);
8593
8594                         if (cast)
8595                         {
8596                                 set_tim_sh_holy(randint1(base) + base, FALSE);
8597                         }
8598                 }
8599                 break;
8600
8601         case 19:
8602 #ifdef JP
8603                 if (name) return "¥¢¥ó¥Ç¥Ã¥É&°­ËâÂ໶";
8604                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥ÉµÚ¤Ó°­Ëâ¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8605 #else
8606                 if (name) return "Dispel Undead & Demons";
8607                 if (desc) return "Damages all undead and demons in sight.";
8608 #endif
8609     
8610                 {
8611                         int sides = plev * 4;
8612
8613                         if (info) return info_damage(1, sides, 0);
8614
8615                         if (cast)
8616                         {
8617                                 dispel_undead(randint1(sides));
8618                                 dispel_demons(randint1(sides));
8619                         }
8620                 }
8621                 break;
8622
8623         case 20:
8624 #ifdef JP
8625                 if (name) return "¼Ù°­Â໶";
8626                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8627 #else
8628                 if (name) return "Dispel Evil";
8629                 if (desc) return "Damages all evil monsters in sight.";
8630 #endif
8631     
8632                 {
8633                         int sides = plev * 4;
8634
8635                         if (info) return info_damage(1, sides, 0);
8636
8637                         if (cast)
8638                         {
8639                                 dispel_evil(randint1(sides));
8640                         }
8641                 }
8642                 break;
8643
8644         case 21:
8645 #ifdef JP
8646                 if (name) return "À»¤Ê¤ë¿Ï";
8647                 if (desc) return "Ä̾ï¤ÎÉð´ï¤ËÌǼ٤ΰÀ­¤ò¤Ä¤±¤ë¡£";
8648 #else
8649                 if (name) return "Holy Blade";
8650                 if (desc) return "Makes current weapon especially deadly against evil monsters.";
8651 #endif
8652     
8653                 {
8654                         if (cast)
8655                         {
8656                                 brand_weapon(13);
8657                         }
8658                 }
8659                 break;
8660
8661         case 22:
8662 #ifdef JP
8663                 if (name) return "¥¹¥¿¡¼¥Ð¡¼¥¹¥È";
8664                 if (desc) return "µðÂç¤ÊÁ®¸÷¤Îµå¤òÊü¤Ä¡£";
8665 #else
8666                 if (name) return "Star Burst";
8667                 if (desc) return "Fires a huge ball of powerful light.";
8668 #endif
8669     
8670                 {
8671                         int dam = 100 + plev * 2;
8672                         int rad = 4;
8673
8674                         if (info) return info_damage(0, 0, dam);
8675
8676                         if (cast)
8677                         {
8678                                 if (!get_aim_dir(&dir)) return NULL;
8679
8680                                 fire_ball(GF_LITE, dir, dam, rad);
8681                         }
8682                 }
8683                 break;
8684
8685         case 23:
8686 #ifdef JP
8687                 if (name) return "Å·»È¾¤´­";
8688                 if (desc) return "Å·»È¤ò1Âξ¤´­¤¹¤ë¡£";
8689 #else
8690                 if (name) return "Summon Angel";
8691                 if (desc) return "Summons an angel.";
8692 #endif
8693     
8694                 {
8695                         if (cast)
8696                         {
8697                                 bool pet = !one_in_(3);
8698                                 u32b mode = 0L;
8699
8700                                 if (pet) mode |= PM_FORCE_PET;
8701                                 else mode |= PM_NO_PET;
8702                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
8703
8704                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_ANGEL, mode))
8705                                 {
8706                                         if (pet)
8707                                         {
8708 #ifdef JP
8709                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
8710 #else
8711                                                 msg_print("'What is thy bidding... Master?'");
8712 #endif
8713                                         }
8714                                         else
8715                                         {
8716 #ifdef JP
8717                                                 msg_print("¡Ö²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª °­¹Ô¼Ô¤è¡¢²ù¤¤²þ¤á¤è¡ª¡×");
8718 #else
8719                                                 msg_print("Mortal! Repent of thy impiousness.");
8720 #endif
8721                                         }
8722                                 }
8723                         }
8724                 }
8725                 break;
8726
8727         case 24:
8728 #ifdef JP
8729                 if (name) return "»Îµ¤¹âÍÈ";
8730                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
8731 #else
8732                 if (name) return "Heroism";
8733                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
8734 #endif
8735     
8736                 {
8737                         int base = 25;
8738
8739                         if (info) return info_duration(base, base);
8740
8741                         if (cast)
8742                         {
8743                                 set_hero(randint1(base) + base, FALSE);
8744                                 hp_player(10);
8745                                 set_afraid(0);
8746                         }
8747                 }
8748                 break;
8749
8750         case 25:
8751 #ifdef JP
8752                 if (name) return "¼ö¤¤Â໶";
8753                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
8754 #else
8755                 if (name) return "Dispel Curse";
8756                 if (desc) return "Removes normal and heavy curse from equipped items.";
8757 #endif
8758     
8759                 {
8760                         if (cast)
8761                         {
8762                                 if (remove_all_curse())
8763                                 {
8764 #ifdef JP
8765                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
8766 #else
8767                                         msg_print("You feel as if someone is watching over you.");
8768 #endif
8769                                 }
8770                         }
8771                 }
8772                 break;
8773
8774         case 26:
8775 #ifdef JP
8776                 if (name) return "¼Ù°­ÄÉÊü";
8777                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8778 #else
8779                 if (name) return "Banish Evil";
8780                 if (desc) return "Teleports all evil monsters in sight away unless resisted.";
8781 #endif
8782     
8783                 {
8784                         int power = 100;
8785
8786                         if (info) return info_power(power);
8787
8788                         if (cast)
8789                         {
8790                                 if (banish_evil(power))
8791                                 {
8792 #ifdef JP
8793                                         msg_print("¿ÀÀ»¤ÊÎϤ¬¼Ù°­¤òÂǤÁʧ¤Ã¤¿¡ª");
8794 #else
8795                                         msg_print("The holy power banishes evil!");
8796 #endif
8797
8798                                 }
8799                         }
8800                 }
8801                 break;
8802
8803         case 27:
8804 #ifdef JP
8805                 if (name) return "¥Ï¥ë¥Þ¥²¥É¥ó";
8806                 if (desc) return "¼þÊդΥ¢¥¤¥Æ¥à¡¢¥â¥ó¥¹¥¿¡¼¡¢ÃÏ·Á¤òÇ˲õ¤¹¤ë¡£";
8807 #else
8808                 if (name) return "Armageddon";
8809                 if (desc) return "Destroy everything in nearby area.";
8810 #endif
8811     
8812                 {
8813                         int base = 12;
8814                         int sides = 4;
8815
8816                         if (cast)
8817                         {
8818                                 destroy_area(py, px, base + randint1(sides), FALSE);
8819                         }
8820                 }
8821                 break;
8822
8823         case 28:
8824 #ifdef JP
8825                 if (name) return "ÌܤˤÏÌܤò";
8826                 if (desc) return "°ìÄê»þ´Ö¡¢¼«Ê¬¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤¿¤È¤­¤Ë¹¶·â¤ò¹Ô¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆƱÅù¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8827 #else
8828                 if (name) return "An Eye for an Eye";
8829                 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.";
8830 #endif
8831     
8832                 {
8833                         int base = 10;
8834
8835                         if (info) return info_duration(base, base);
8836
8837                         if (cast)
8838                         {
8839                                 set_tim_eyeeye(randint1(base) + base, FALSE);
8840                         }
8841                 }
8842                 break;
8843
8844         case 29:
8845 #ifdef JP
8846                 if (name) return "¿À¤ÎÅܤê";
8847                 if (desc) return "¥¿¡¼¥²¥Ã¥È¤Î¼þ°Ï¤Ëʬ²ò¤Îµå¤ò¿¿ôÍî¤È¤¹¡£";
8848 #else
8849                 if (name) return "Wrath of the God";
8850                 if (desc) return "Drops many balls of disintegration near the target.";
8851 #endif
8852     
8853                 {
8854                         int dam = plev * 3 + 25;
8855                         int rad = 2;
8856
8857                         if (info) return info_multi_damage(dam);
8858
8859                         if (cast)
8860                         {
8861                                 if (!cast_wrath_of_the_god(dam, rad)) return NULL;
8862                         }
8863                 }
8864                 break;
8865
8866         case 30:
8867 #ifdef JP
8868                 if (name) return "¿À°Ò";
8869                 if (desc) return "ÎÙÀܤ¹¤ë¥â¥ó¥¹¥¿¡¼¤ËÀ»¤Ê¤ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¡¢¸ºÂ®¡¢Û¯Û°¡¢º®Í𡢶²ÉÝ¡¢Ì²¤ê¤òÍ¿¤¨¤ë¡£¤µ¤é¤ËÂÎÎϤò²óÉü¤¹¤ë¡£";
8870 #else
8871                 if (name) return "Divine Intervention";
8872                 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.";
8873 #endif
8874     
8875                 {
8876                         int b_dam = plev * 11;
8877                         int d_dam = plev * 4;
8878                         int heal = 100;
8879                         int power = plev * 4;
8880
8881 #ifdef JP
8882                         if (info) return format("²ó%d/»%d+%d", heal, d_dam, b_dam/2);
8883 #else
8884                         if (info) return format("h%d/dm%d+%d", heal, d_dam, b_dam/2);
8885 #endif
8886
8887                         if (cast)
8888                         {
8889                                 project(0, 1, py, px, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
8890                                 dispel_monsters(d_dam);
8891                                 slow_monsters();
8892                                 stun_monsters(power);
8893                                 confuse_monsters(power);
8894                                 turn_monsters(power);
8895                                 stasis_monsters(power);
8896                                 hp_player(heal);
8897                         }
8898                 }
8899                 break;
8900
8901         case 31:
8902 #ifdef JP
8903                 if (name) return "À»Àï";
8904                 if (desc) return "»ë³¦Æâ¤ÎÁ±Îɤʥâ¥ó¥¹¥¿¡¼¤ò¥Ú¥Ã¥È¤Ë¤·¤è¤¦¤È¤·¡¢¤Ê¤é¤Ê¤«¤Ã¤¿¾ì¹çµÚ¤ÓÁ±ÎɤǤʤ¤¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£¤µ¤é¤Ë¿¿ô¤Î²Ã®¤µ¤ì¤¿µ³»Î¤ò¾¤´­¤·¡¢¥Ò¡¼¥í¡¼¡¢½ËÊ¡¡¢²Ã®¡¢Âмٰ­·ë³¦¤òÆÀ¤ë¡£";
8905 #else
8906                 if (name) return "Crusade";
8907                 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.";
8908 #endif
8909     
8910                 {
8911                         if (cast)
8912                         {
8913                                 int base = 25;
8914                                 int sp_sides = 20 + plev;
8915                                 int sp_base = plev;
8916
8917                                 int i;
8918                                 crusade();
8919                                 for (i = 0; i < 12; i++)
8920                                 {
8921                                         int attempt = 10;
8922                                         int my, mx;
8923
8924                                         while (attempt--)
8925                                         {
8926                                                 scatter(&my, &mx, py, px, 4, 0);
8927
8928                                                 /* Require empty grids */
8929                                                 if (cave_empty_bold2(my, mx)) break;
8930                                         }
8931                                         if (attempt < 0) continue;
8932                                         summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
8933                                 }
8934                                 set_hero(randint1(base) + base, FALSE);
8935                                 set_blessed(randint1(base) + base, FALSE);
8936                                 set_fast(randint1(sp_sides) + sp_base, FALSE);
8937                                 set_protevil(randint1(base) + base, FALSE);
8938                                 set_afraid(0);
8939                         }
8940                 }
8941                 break;
8942         }
8943
8944         return "";
8945 }
8946
8947
8948 static cptr do_music_spell(int spell, int mode)
8949 {
8950         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
8951         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
8952         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
8953         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
8954         bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
8955         bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
8956         bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
8957
8958 #ifdef JP
8959         static const char s_dam[] = "»½ý:";
8960 #else
8961         static const char s_dam[] = "dam ";
8962 #endif
8963
8964         int dir;
8965         int plev = p_ptr->lev;
8966
8967         switch (spell)
8968         {
8969         case 0:
8970 #ifdef JP
8971                 if (name) return "ÃÙÆߤβÎ";
8972                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8973 #else
8974                 if (name) return "Song of Holding";
8975                 if (desc) return "Attempts to slow all monsters in sight.";
8976 #endif
8977     
8978                 /* Stop singing before start another */
8979                 if (cast || fail) stop_singing();
8980
8981                 if (cast)
8982                 {
8983 #ifdef JP
8984                         msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
8985 #else
8986                         msg_print("You start humming a slow, steady melody...");
8987 #endif
8988                         start_singing(spell, MUSIC_SLOW);
8989                 }
8990
8991                 {
8992                         int power = plev;
8993
8994                         if (info) return info_power(power);
8995
8996                         if (cont)
8997                         {
8998                                 slow_monsters();
8999                         }
9000                 }
9001                 break;
9002
9003         case 1:
9004 #ifdef JP
9005                 if (name) return "½ËÊ¡¤Î²Î";
9006                 if (desc) return "Ì¿ÃæΨ¤ÈAC¤Î¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
9007 #else
9008                 if (name) return "Song of Blessing";
9009                 if (desc) return "Gives bonus to hit and AC for a few turns.";
9010 #endif
9011     
9012                 /* Stop singing before start another */
9013                 if (cast || fail) stop_singing();
9014
9015                 if (cast)
9016                 {
9017 #ifdef JP
9018                         msg_print("¸·¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9019 #else
9020                         msg_print("The holy power of the Music of the Ainur enters you...");
9021 #endif
9022                         start_singing(spell, MUSIC_BLESS);
9023                 }
9024
9025                 if (stop)
9026                 {
9027                         if (!p_ptr->blessed)
9028                         {
9029 #ifdef JP
9030                                 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9031 #else
9032                                 msg_print("The prayer has expired.");
9033 #endif
9034                         }
9035                 }
9036
9037                 break;
9038
9039         case 2:
9040 #ifdef JP
9041                 if (name) return "Êø²õ¤Î²»¿§";
9042                 if (desc) return "¹ì²»¤Î¥Ü¥ë¥È¤òÊü¤Ä¡£";
9043 #else
9044                 if (name) return "Wrecking Note";
9045                 if (desc) return "Fires a bolt of sound.";
9046 #endif
9047     
9048                 /* Stop singing before start another */
9049                 if (cast || fail) stop_singing();
9050
9051                 {
9052                         int dice = 4 + (plev - 1) / 5;
9053                         int sides = 4;
9054
9055                         if (info) return info_damage(dice, sides, 0);
9056
9057                         if (cast)
9058                         {
9059                                 if (!get_aim_dir(&dir)) return NULL;
9060
9061                                 fire_bolt(GF_SOUND, dir, damroll(dice, sides));
9062                         }
9063                 }
9064                 break;
9065
9066         case 3:
9067 #ifdef JP
9068                 if (name) return "Û¯Û°¤ÎÀûΧ";
9069                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òÛ¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9070 #else
9071                 if (name) return "Stun Pattern";
9072                 if (desc) return "Attempts to stun all monsters in sight.";
9073 #endif
9074     
9075                 /* Stop singing before start another */
9076                 if (cast || fail) stop_singing();
9077
9078                 if (cast)
9079                 {
9080 #ifdef JP
9081                         msg_print("âÁÏǤµ¤»¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9082 #else
9083                         msg_print("You weave a pattern of sounds to bewilder and daze...");
9084 #endif
9085                         start_singing(spell, MUSIC_STUN);
9086                 }
9087
9088                 {
9089                         int dice = plev / 10;
9090                         int sides = 2;
9091
9092                         if (info) return info_power_dice(dice, sides);
9093
9094                         if (cont)
9095                         {
9096                                 stun_monsters(damroll(dice, sides));
9097                         }
9098                 }
9099
9100                 break;
9101
9102         case 4:
9103 #ifdef JP
9104                 if (name) return "À¸Ì¿¤Îή¤ì";
9105                 if (desc) return "ÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
9106 #else
9107                 if (name) return "Flow of Life";
9108                 if (desc) return "Heals HP a little.";
9109 #endif
9110     
9111                 /* Stop singing before start another */
9112                 if (cast || fail) stop_singing();
9113
9114                 if (cast)
9115                 {
9116 #ifdef JP
9117                         msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤­¤¿¡¥¡¥¡¥");
9118 #else
9119                         msg_print("Life flows through you as you sing a song of healing...");
9120 #endif
9121                         start_singing(spell, MUSIC_L_LIFE);
9122                 }
9123
9124                 {
9125                         int dice = 2;
9126                         int sides = 6;
9127
9128                         if (info) return info_heal(dice, sides, 0);
9129
9130                         if (cont)
9131                         {
9132                                 hp_player(damroll(dice, sides));
9133                         }
9134                 }
9135
9136                 break;
9137
9138         case 5:
9139 #ifdef JP
9140                 if (name) return "ÂÀÍۤβÎ";
9141                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
9142 #else
9143                 if (name) return "Song of the Sun";
9144                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
9145 #endif
9146     
9147                 /* Stop singing before start another */
9148                 if (cast || fail) stop_singing();
9149
9150                 {
9151                         int dice = 2;
9152                         int sides = plev / 2;
9153                         int rad = plev / 10 + 1;
9154
9155                         if (info) return info_damage(dice, sides, 0);
9156
9157                         if (cast)
9158                         {
9159 #ifdef JP
9160                                 msg_print("¸÷¤êµ±¤¯²Î¤¬ÊÕ¤ê¤ò¾È¤é¤·¤¿¡£");
9161 #else
9162                                 msg_print("Your uplifting song brings brightness to dark places...");
9163 #endif
9164
9165                                 lite_area(damroll(dice, sides), rad);
9166                         }
9167                 }
9168                 break;
9169
9170         case 6:
9171 #ifdef JP
9172                 if (name) return "¶²ÉݤβÎ";
9173                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9174 #else
9175                 if (name) return "Song of Fear";
9176                 if (desc) return "Attempts to scare all monsters in sight.";
9177 #endif
9178     
9179                 /* Stop singing before start another */
9180                 if (cast || fail) stop_singing();
9181
9182                 if (cast)
9183                 {
9184 #ifdef JP
9185                         msg_print("¤ª¤É¤í¤ª¤É¤í¤·¤¤¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9186 #else
9187                         msg_print("You start weaving a fearful pattern...");
9188 #endif
9189                         start_singing(spell, MUSIC_FEAR);                       
9190                 }
9191
9192                 {
9193                         int power = plev;
9194
9195                         if (info) return info_power(power);
9196
9197                         if (cont)
9198                         {
9199                                 project_hack(GF_TURN_ALL, power);
9200                         }
9201                 }
9202
9203                 break;
9204
9205         case 7:
9206 #ifdef JP
9207                 if (name) return "À襤¤Î²Î";
9208                 if (desc) return "¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
9209 #else
9210                 if (name) return "Heroic Ballad";
9211                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
9212 #endif
9213
9214                 /* Stop singing before start another */
9215                 if (cast || fail) stop_singing();
9216
9217                 if (cast)
9218                 {
9219 #ifdef JP
9220                         msg_print("·ã¤·¤¤À襤¤Î²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
9221 #else
9222                         msg_print("You start singing a song of intense fighting...");
9223 #endif
9224
9225                         (void)hp_player(10);
9226                         (void)set_afraid(0);
9227
9228                         /* Recalculate hitpoints */
9229                         p_ptr->update |= (PU_HP);
9230
9231                         start_singing(spell, MUSIC_HERO);
9232                 }
9233
9234                 if (stop)
9235                 {
9236                         if (!p_ptr->hero)
9237                         {
9238 #ifdef JP
9239                                 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9240 #else
9241                                 msg_print("The heroism wears off.");
9242 #endif
9243                                 /* Recalculate hitpoints */
9244                                 p_ptr->update |= (PU_HP);
9245                         }
9246                 }
9247
9248                 break;
9249
9250         case 8:
9251 #ifdef JP
9252                 if (name) return "ÎîŪÃγÐ";
9253                 if (desc) return "¶á¤¯¤Îæ«/Èâ/³¬Ãʤò´¶ÃΤ¹¤ë¡£¥ì¥Ù¥ë15¤ÇÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢20¤ÇºâÊõ¤È¥¢¥¤¥Æ¥à¤ò´¶ÃΤǤ­¤ë¤è¤¦¤Ë¤Ê¤ë¡£¥ì¥Ù¥ë25¤Ç¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ·¡¢40¤Ç¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆâ¤Î¤¹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤³¤Î¸ú²Ì¤Ï²Î¤¤Â³¤±¤ë¤³¤È¤Ç½ç¤Ëµ¯¤³¤ë¡£";
9254 #else
9255                 if (name) return "Clairaudience";
9256                 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.";
9257 #endif
9258     
9259                 /* Stop singing before start another */
9260                 if (cast || fail) stop_singing();
9261
9262                 if (cast)
9263                 {
9264 #ifdef JP
9265                         msg_print("ÀŤ«¤Ê²»³Ú¤¬´¶³Ð¤ò¸¦¤®À¡¤Þ¤µ¤»¤¿¡¥¡¥¡¥");
9266 #else
9267                         msg_print("Your quiet music sharpens your sense of hearing...");
9268 #endif
9269
9270                         /* Hack -- Initialize the turn count */
9271                         p_ptr->magic_num1[2] = 0;
9272
9273                         start_singing(spell, MUSIC_DETECT);
9274                 }
9275
9276                 {
9277                         int rad = DETECT_RAD_DEFAULT;
9278
9279                         if (info) return info_radius(rad);
9280
9281                         if (cont)
9282                         {
9283                                 int count = p_ptr->magic_num1[2];
9284
9285                                 if (count >= 19) wiz_lite(FALSE);
9286                                 if (count >= 11)
9287                                 {
9288                                         map_area(rad);
9289                                         if (plev > 39 && count < 19)
9290                                                 p_ptr->magic_num1[2] = count + 1;
9291                                 }
9292                                 if (count >= 6)
9293                                 {
9294                                         /* There are too many hidden treasure.  So... */
9295                                         /* detect_treasure(rad); */
9296                                         detect_objects_gold(rad);
9297                                         detect_objects_normal(rad);
9298
9299                                         if (plev > 24 && count < 11)
9300                                                 p_ptr->magic_num1[2] = count + 1;
9301                                 }
9302                                 if (count >= 3)
9303                                 {
9304                                         detect_monsters_invis(rad);
9305                                         detect_monsters_normal(rad);
9306
9307                                         if (plev > 19 && count < 6)
9308                                                 p_ptr->magic_num1[2] = count + 1;
9309                                 }
9310                                 detect_traps(rad, TRUE);
9311                                 detect_doors(rad);
9312                                 detect_stairs(rad);
9313
9314                                 if (plev > 14 && count < 3)
9315                                         p_ptr->magic_num1[2] = count + 1;
9316                         }
9317                 }
9318
9319                 break;
9320
9321         case 9:
9322 #ifdef JP
9323                 if (name) return "º²¤Î²Î";
9324                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆÀº¿À¹¶·â¤ò¹Ô¤¦¡£";
9325 #else
9326                 if (name) return "Soul Shriek";
9327                 if (desc) return "Damages all monsters in sight with PSI damages.";
9328 #endif
9329
9330                 /* Stop singing before start another */
9331                 if (cast || fail) stop_singing();
9332
9333                 if (cast)
9334                 {
9335 #ifdef JP
9336                         msg_print("Àº¿À¤òDZ¤¸¶Ê¤²¤ë²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
9337 #else
9338                         msg_print("You start singing a song of soul in pain...");
9339 #endif
9340                         start_singing(spell, MUSIC_PSI);
9341                 }
9342
9343                 {
9344                         int dice = 1;
9345                         int sides = plev * 3 / 2;
9346
9347                         if (info) return info_damage(dice, sides, 0);
9348
9349                         if (cont)
9350                         {
9351                                 project_hack(GF_PSI, damroll(dice, sides));
9352                         }
9353                 }
9354
9355                 break;
9356
9357         case 10:
9358 #ifdef JP
9359                 if (name) return "Ãμ±¤Î²Î";
9360                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¥Þ¥¹¤ÈÎÙ¤ê¤Î¥Þ¥¹¤ËÍî¤Á¤Æ¤¤¤ë¥¢¥¤¥Æ¥à¤ò´ÕÄꤹ¤ë¡£";
9361 #else
9362                 if (name) return "Song of Lore";
9363                 if (desc) return "Identifies all items which are in the adjacent squares.";
9364 #endif
9365     
9366                 /* Stop singing before start another */
9367                 if (cast || fail) stop_singing();
9368
9369                 if (cast)
9370                 {
9371 #ifdef JP
9372                         msg_print("¤³¤ÎÀ¤³¦¤ÎÃ챤¬Î®¤ì¹þ¤ó¤Ç¤­¤¿¡¥¡¥¡¥");
9373 #else
9374                         msg_print("You recall the rich lore of the world...");
9375 #endif
9376                         start_singing(spell, MUSIC_ID);
9377                 }
9378
9379                 {
9380                         int rad = 1;
9381
9382                         if (info) return info_radius(rad);
9383
9384                         /*
9385                          * ²Î¤Î³«»Ï»þ¤Ë¤â¸ú²Ìȯư¡§
9386                          * MPÉÔ­¤Ç´ÕÄ꤬ȯư¤µ¤ì¤ëÁ°¤Ë²Î¤¬ÃæÃǤ·¤Æ¤·¤Þ¤¦¤Î¤òËɻߡ£
9387                          */
9388                         if (cont || cast)
9389                         {
9390                                 project(0, rad, py, px, 0, GF_IDENTIFY, PROJECT_ITEM, -1);
9391                         }
9392                 }
9393
9394                 break;
9395
9396         case 11:
9397 #ifdef JP
9398                 if (name) return "±£ÆۤβÎ";
9399                 if (desc) return "±£Ì©¹ÔưǽÎϤò¾å¾º¤µ¤»¤ë¡£";
9400 #else
9401                 if (name) return "Hiding Tune";
9402                 if (desc) return "Gives improved stealth.";
9403 #endif
9404
9405                 /* Stop singing before start another */
9406                 if (cast || fail) stop_singing();
9407
9408                 if (cast)
9409                 {
9410 #ifdef JP
9411                         msg_print("¤¢¤Ê¤¿¤Î»Ñ¤¬·Ê¿§¤Ë¤È¤±¤³¤ó¤Ç¤¤¤Ã¤¿¡¥¡¥¡¥");
9412 #else
9413                         msg_print("Your song carries you beyond the sight of mortal eyes...");
9414 #endif
9415                         start_singing(spell, MUSIC_STEALTH);
9416                 }
9417
9418                 if (stop)
9419                 {
9420                         if (!p_ptr->tim_stealth)
9421                         {
9422 #ifdef JP
9423                                 msg_print("»Ñ¤¬¤Ï¤Ã¤­¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
9424 #else
9425                                 msg_print("You are no longer hided.");
9426 #endif
9427                         }
9428                 }
9429
9430                 break;
9431
9432         case 12:
9433 #ifdef JP
9434                 if (name) return "¸¸±Æ¤ÎÀûΧ";
9435                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òº®Í𤵤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9436 #else
9437                 if (name) return "Illusion Pattern";
9438                 if (desc) return "Attempts to confuse all monsters in sight.";
9439 #endif
9440     
9441                 /* Stop singing before start another */
9442                 if (cast || fail) stop_singing();
9443
9444                 if (cast)
9445                 {
9446 #ifdef JP
9447                         msg_print("ÊÕ¤ê°ìÌ̤˸¸±Æ¤¬¸½¤ì¤¿¡¥¡¥¡¥");
9448 #else
9449                         msg_print("You weave a pattern of sounds to beguile and confuse...");
9450 #endif
9451                         start_singing(spell, MUSIC_CONF);
9452                 }
9453
9454                 {
9455                         int power = plev * 2;
9456
9457                         if (info) return info_power(power);
9458
9459                         if (cont)
9460                         {
9461                                 confuse_monsters(power);
9462                         }
9463                 }
9464
9465                 break;
9466
9467         case 13:
9468 #ifdef JP
9469                 if (name) return "ÇËÌǤ櫤Ó";
9470                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤Æ¹ì²»¹¶·â¤ò¹Ô¤¦¡£";
9471 #else
9472                 if (name) return "Doomcall";
9473                 if (desc) return "Damages all monsters in sight with booming sound.";
9474 #endif
9475     
9476                 /* Stop singing before start another */
9477                 if (cast || fail) stop_singing();
9478
9479                 if (cast)
9480                 {
9481 #ifdef JP
9482                         msg_print("¹ì²»¤¬¶Á¤¤¤¿¡¥¡¥¡¥");
9483 #else
9484                         msg_print("The fury of the Downfall of Numenor lashes out...");
9485 #endif
9486                         start_singing(spell, MUSIC_SOUND);
9487                 }
9488
9489                 {
9490                         int dice = 10 + plev / 5;
9491                         int sides = 7;
9492
9493                         if (info) return info_damage(dice, sides, 0);
9494
9495                         if (cont)
9496                         {
9497                                 project_hack(GF_SOUND, damroll(dice, sides));
9498                         }
9499                 }
9500
9501                 break;
9502
9503         case 14:
9504 #ifdef JP
9505                 if (name) return "¥Õ¥£¥ê¥¨¥ë¤Î²Î";
9506                 if (desc) return "¼þ°Ï¤Î»àÂΤä¹ü¤òÀ¸¤­ÊÖ¤¹¡£";
9507 #else
9508                 if (name) return "Firiel's Song";
9509                 if (desc) return "Resurrects nearby corpse and skeletons. And makes these your pets.";
9510 #endif
9511     
9512                 {
9513                         /* Stop singing before start another */
9514                         if (cast || fail) stop_singing();
9515
9516                         if (cast)
9517                         {
9518 #ifdef JP
9519                                 msg_print("À¸Ì¿¤ÈÉü³è¤Î¥Æ¡¼¥Þ¤òÁդǻϤ᤿¡¥¡¥¡¥");
9520 #else
9521                                 msg_print("The themes of life and revival are woven into your song...");
9522 #endif
9523
9524                                 animate_dead(0, py, px);
9525                         }
9526                 }
9527                 break;
9528
9529         case 15:
9530 #ifdef JP
9531                 if (name) return "ι¤ÎÃç´Ö";
9532                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9533 #else
9534                 if (name) return "Fellowship Chant";
9535                 if (desc) return "Attempts to charm all monsters in sight.";
9536 #endif
9537
9538                 /* Stop singing before start another */
9539                 if (cast || fail) stop_singing();
9540
9541                 if (cast)
9542                 {
9543 #ifdef JP
9544                         msg_print("°Â¤é¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9545 #else
9546                         msg_print("You weave a slow, soothing melody of imploration...");
9547 #endif
9548                         start_singing(spell, MUSIC_CHARM);
9549                 }
9550
9551                 {
9552                         int dice = 10 + plev / 15;
9553                         int sides = 6;
9554
9555                         if (info) return info_power_dice(dice, sides);
9556
9557                         if (cont)
9558                         {
9559                                 charm_monsters(damroll(dice, sides));
9560                         }
9561                 }
9562
9563                 break;
9564
9565         case 16:
9566 #ifdef JP
9567                 if (name) return "ʬ²ò²»ÇÈ";
9568                 if (desc) return "Êɤò·¡¤ê¿Ê¤à¡£¼«Ê¬¤Î­¸µ¤Î¥¢¥¤¥Æ¥à¤Ï¾øȯ¤¹¤ë¡£";
9569 #else
9570                 if (name) return "Sound of disintegration";
9571                 if (desc) return "Makes you be able to burrow into walls. Objects under your feet evaporate.";
9572 #endif
9573
9574                 /* Stop singing before start another */
9575                 if (cast || fail) stop_singing();
9576
9577                 if (cast)
9578                 {
9579 #ifdef JP
9580                         msg_print("Ê´ºÕ¤¹¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9581 #else
9582                         msg_print("You weave a violent pattern of sounds to break wall.");
9583 #endif
9584                         start_singing(spell, MUSIC_WALL);
9585                 }
9586
9587                 {
9588                         /*
9589                          * ²Î¤Î³«»Ï»þ¤Ë¤â¸ú²Ìȯư¡§
9590                          * MPÉÔ­¤Ç¸ú²Ì¤¬È¯Æ°¤µ¤ì¤ëÁ°¤Ë²Î¤¬ÃæÃǤ·¤Æ¤·¤Þ¤¦¤Î¤òËɻߡ£
9591                          */
9592                         if (cont || cast)
9593                         {
9594                                 project(0, 0, py, px,
9595                                         0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
9596                         }
9597                 }
9598                 break;
9599
9600         case 17:
9601 #ifdef JP
9602                 if (name) return "¸µÁÇÂÑÀ­";
9603                 if (desc) return "»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
9604 #else
9605                 if (name) return "Finrod's Resistance";
9606                 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.";
9607 #endif
9608     
9609                 /* Stop singing before start another */
9610                 if (cast || fail) stop_singing();
9611
9612                 if (cast)
9613                 {
9614 #ifdef JP
9615                         msg_print("¸µÁǤÎÎϤËÂФ¹¤ëǦÂѤβΤò²Î¤Ã¤¿¡£");
9616 #else
9617                         msg_print("You sing a song of perseverance against powers...");
9618 #endif
9619                         start_singing(spell, MUSIC_RESIST);
9620                 }
9621
9622                 if (stop)
9623                 {
9624                         if (!p_ptr->oppose_acid)
9625                         {
9626 #ifdef JP
9627                                 msg_print("»À¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9628 #else
9629                                 msg_print("You feel less resistant to acid.");
9630 #endif
9631                         }
9632
9633                         if (!p_ptr->oppose_elec)
9634                         {
9635 #ifdef JP
9636                                 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9637 #else
9638                                 msg_print("You feel less resistant to elec.");
9639 #endif
9640                         }
9641
9642                         if (!p_ptr->oppose_fire)
9643                         {
9644 #ifdef JP
9645                                 msg_print("²Ð¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9646 #else
9647                                 msg_print("You feel less resistant to fire.");
9648 #endif
9649                         }
9650
9651                         if (!p_ptr->oppose_cold)
9652                         {
9653 #ifdef JP
9654                                 msg_print("Î䵤¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9655 #else
9656                                 msg_print("You feel less resistant to cold.");
9657 #endif
9658                         }
9659
9660                         if (!p_ptr->oppose_pois)
9661                         {
9662 #ifdef JP
9663                                 msg_print("ÆǤؤÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9664 #else
9665                                 msg_print("You feel less resistant to pois.");
9666 #endif
9667                         }
9668                 }
9669
9670                 break;
9671
9672         case 18:
9673 #ifdef JP
9674                 if (name) return "¥Û¥Ó¥Ã¥È¤Î¥á¥í¥Ç¥£";
9675                 if (desc) return "²Ã®¤¹¤ë¡£";
9676 #else
9677                 if (name) return "Hobbit Melodies";
9678                 if (desc) return "Hastes you.";
9679 #endif
9680
9681                 /* Stop singing before start another */
9682                 if (cast || fail) stop_singing();
9683
9684                 if (cast)
9685                 {
9686 #ifdef JP
9687                         msg_print("·Ú²÷¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
9688 #else
9689                         msg_print("You start singing joyful pop song...");
9690 #endif
9691                         start_singing(spell, MUSIC_SPEED);
9692                 }
9693
9694                 if (stop)
9695                 {
9696                         if (!p_ptr->fast)
9697                         {
9698 #ifdef JP
9699                                 msg_print("Æ°¤­¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
9700 #else
9701                                 msg_print("You feel yourself slow down.");
9702 #endif
9703                         }
9704                 }
9705
9706                 break;
9707
9708         case 19:
9709 #ifdef JP
9710                 if (name) return "ÏĤó¤ÀÀ¤³¦";
9711                 if (desc) return "¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9712 #else
9713                 if (name) return "World Contortion";
9714                 if (desc) return "Teleports all nearby monsters away unless resisted.";
9715 #endif
9716     
9717                 {
9718                         int rad = plev / 15 + 1;
9719                         int power = plev * 3 + 1;
9720
9721                         if (info) return info_radius(rad);
9722
9723                         /* Stop singing before start another */
9724                         if (cast || fail) stop_singing();
9725
9726                         if (cast)
9727                         {
9728 #ifdef JP
9729                                 msg_print("²Î¤¬¶õ´Ö¤òÏĤ᤿¡¥¡¥¡¥");
9730 #else
9731                                 msg_print("Reality whirls wildly as you sing a dizzying melody...");
9732 #endif
9733
9734                                 project(0, rad, py, px, power, GF_AWAY_ALL, PROJECT_KILL, -1);
9735                         }
9736                 }
9737                 break;
9738
9739         case 20:
9740 #ifdef JP
9741                 if (name) return "Â໶¤Î²Î";
9742                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÆäËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
9743 #else
9744                 if (name) return "Dispelling chant";
9745                 if (desc) return "Damages all monsters in sight. Hurts evil monsters greatly.";
9746 #endif
9747     
9748                 /* Stop singing before start another */
9749                 if (cast || fail) stop_singing();
9750
9751                 if (cast)
9752                 {
9753 #ifdef JP
9754                         msg_print("ÂѤ¨¤é¤ì¤Ê¤¤ÉÔ¶¨Ï²»¤¬Å¨¤òÀÕ¤áΩ¤Æ¤¿¡¥¡¥¡¥");
9755 #else
9756                         msg_print("You cry out in an ear-wracking voice...");
9757 #endif
9758                         start_singing(spell, MUSIC_DISPEL);
9759                 }
9760
9761                 {
9762                         int m_sides = plev * 3;
9763                         int e_sides = plev * 3;
9764
9765                         if (info) return format("%s1d%d+1d%d", s_dam, m_sides, e_sides);
9766
9767                         if (cont)
9768                         {
9769                                 dispel_monsters(randint1(m_sides));
9770                                 dispel_evil(randint1(e_sides));
9771                         }
9772                 }
9773                 break;
9774
9775         case 21:
9776 #ifdef JP
9777                 if (name) return "¥µ¥ë¥Þ¥ó¤Î´Å¸À";
9778                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¡¢Ì²¤é¤»¤è¤¦¤È¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9779 #else
9780                 if (name) return "The Voice of Saruman";
9781                 if (desc) return "Attempts to slow and sleep all monsters in sight.";
9782 #endif
9783     
9784                 /* Stop singing before start another */
9785                 if (cast || fail) stop_singing();
9786
9787                 if (cast)
9788                 {
9789 #ifdef JP
9790                         msg_print("Í¥¤·¤¯¡¢Ì¥ÎÏŪ¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
9791 #else
9792                         msg_print("You start humming a gentle and attractive song...");
9793 #endif
9794                         start_singing(spell, MUSIC_SARUMAN);
9795                 }
9796
9797                 {
9798                         int power = plev;
9799
9800                         if (info) return info_power(power);
9801
9802                         if (cont)
9803                         {
9804                                 slow_monsters();
9805                                 sleep_monsters();
9806                         }
9807                 }
9808
9809                 break;
9810
9811         case 22:
9812 #ifdef JP
9813                 if (name) return "Íò¤Î²»¿§";
9814                 if (desc) return "¹ì²»¤Î¥Ó¡¼¥à¤òÊü¤Ä¡£";
9815 #else
9816                 if (name) return "Song of the Tempest";
9817                 if (desc) return "Fires a beam of sound.";
9818 #endif
9819     
9820                 {
9821                         int dice = 15 + (plev - 1) / 2;
9822                         int sides = 10;
9823
9824                         if (info) return info_damage(dice, sides, 0);
9825
9826                         /* Stop singing before start another */
9827                         if (cast || fail) stop_singing();
9828
9829                         if (cast)
9830                         {
9831                                 if (!get_aim_dir(&dir)) return NULL;
9832
9833                                 fire_beam(GF_SOUND, dir, damroll(dice, sides));
9834                         }
9835                 }
9836                 break;
9837
9838         case 23:
9839 #ifdef JP
9840                 if (name) return "¤â¤¦°ì¤Ä¤ÎÀ¤³¦";
9841                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
9842 #else
9843                 if (name) return "Ambarkanta";
9844                 if (desc) return "Recreates current dungeon level.";
9845 #endif
9846     
9847                 {
9848                         int base = 15;
9849                         int sides = 20;
9850
9851                         if (info) return info_delay(base, sides);
9852
9853                         /* Stop singing before start another */
9854                         if (cast || fail) stop_singing();
9855
9856                         if (cast)
9857                         {
9858 #ifdef JP
9859                                 msg_print("¼þ°Ï¤¬ÊѲ½¤·»Ï¤á¤¿¡¥¡¥¡¥");
9860 #else
9861                                 msg_print("You sing of the primeval shaping of Middle-earth...");
9862 #endif
9863
9864                                 alter_reality();
9865                         }
9866                 }
9867                 break;
9868
9869         case 24:
9870 #ifdef JP
9871                 if (name) return "Ç˲õ¤ÎÀûΧ";
9872                 if (desc) return "¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÍɤ餷¡¢ÊɤȾ²¤ò¥é¥ó¥À¥à¤ËÆþ¤ìÊѤ¨¤ë¡£";
9873 #else
9874                 if (name) return "Wrecking Pattern";
9875                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
9876 #endif
9877
9878                 /* Stop singing before start another */
9879                 if (cast || fail) stop_singing();
9880
9881                 if (cast)
9882                 {
9883 #ifdef JP
9884                         msg_print("Ç˲õŪ¤Ê²Î¤¬¶Á¤­¤ï¤¿¤Ã¤¿¡¥¡¥¡¥");
9885 #else
9886                         msg_print("You weave a pattern of sounds to contort and shatter...");
9887 #endif
9888                         start_singing(spell, MUSIC_QUAKE);
9889                 }
9890
9891                 {
9892                         int rad = 10;
9893
9894                         if (info) return info_radius(rad);
9895
9896                         if (cont)
9897                         {
9898                                 earthquake(py, px, 10);
9899                         }
9900                 }
9901
9902                 break;
9903
9904
9905         case 25:
9906 #ifdef JP
9907                 if (name) return "ÄäÂڤβÎ";
9908                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òËãá㤵¤»¤è¤¦¤È¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9909 #else
9910                 if (name) return "Stationary Shriek";
9911                 if (desc) return "Attempts to freeze all monsters in sight.";
9912 #endif
9913     
9914                 /* Stop singing before start another */
9915                 if (cast || fail) stop_singing();
9916
9917                 if (cast)
9918                 {
9919 #ifdef JP
9920                         msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9921 #else
9922                         msg_print("You weave a very slow pattern which is almost likely to stop...");
9923 #endif
9924                         start_singing(spell, MUSIC_STASIS);
9925                 }
9926
9927                 {
9928                         int power = plev * 4;
9929
9930                         if (info) return info_power(power);
9931
9932                         if (cont)
9933                         {
9934                                 stasis_monsters(power);
9935                         }
9936                 }
9937
9938                 break;
9939
9940         case 26:
9941 #ifdef JP
9942                 if (name) return "¼é¤ê¤Î²Î";
9943                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
9944 #else
9945                 if (name) return "Endurance";
9946                 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.";
9947 #endif
9948     
9949                 {
9950                         /* Stop singing before start another */
9951                         if (cast || fail) stop_singing();
9952
9953                         if (cast)
9954                         {
9955 #ifdef JP
9956                                 msg_print("²Î¤¬¿ÀÀ»¤Ê¾ì¤òºî¤ê½Ð¤·¤¿¡¥¡¥¡¥");
9957 #else
9958                                 msg_print("The holy power of the Music is creating sacred field...");
9959 #endif
9960
9961                                 warding_glyph();
9962                         }
9963                 }
9964                 break;
9965
9966         case 27:
9967 #ifdef JP
9968                 if (name) return "±Ñͺ¤Î»í";
9969                 if (desc) return "²Ã®¤·¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ê¡¢»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
9970 #else
9971                 if (name) return "The Hero's Poem";
9972                 if (desc) return "Hastes you. Gives heroism. Damages all monsters in sight.";
9973 #endif
9974     
9975                 /* Stop singing before start another */
9976                 if (cast || fail) stop_singing();
9977
9978                 if (cast)
9979                 {
9980 #ifdef JP
9981                         msg_print("±Ñͺ¤Î²Î¤ò¸ý¤º¤µ¤ó¤À¡¥¡¥¡¥");
9982 #else
9983                         msg_print("You chant a powerful, heroic call to arms...");
9984 #endif
9985                         (void)hp_player(10);
9986                         (void)set_afraid(0);
9987
9988                         /* Recalculate hitpoints */
9989                         p_ptr->update |= (PU_HP);
9990
9991                         start_singing(spell, MUSIC_SHERO);
9992                 }
9993
9994                 if (stop)
9995                 {
9996                         if (!p_ptr->hero)
9997                         {
9998 #ifdef JP
9999                                 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
10000 #else
10001                                 msg_print("The heroism wears off.");
10002 #endif
10003                                 /* Recalculate hitpoints */
10004                                 p_ptr->update |= (PU_HP);
10005                         }
10006
10007                         if (!p_ptr->fast)
10008                         {
10009 #ifdef JP
10010                                 msg_print("Æ°¤­¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
10011 #else
10012                                 msg_print("You feel yourself slow down.");
10013 #endif
10014                         }
10015                 }
10016
10017                 {
10018                         int dice = 1;
10019                         int sides = plev * 3;
10020
10021                         if (info) return info_damage(dice, sides, 0);
10022
10023                         if (cont)
10024                         {
10025                                 dispel_monsters(damroll(dice, sides));
10026                         }
10027                 }
10028                 break;
10029
10030         case 28:
10031 #ifdef JP
10032                 if (name) return "¥ä¥ô¥¡¥ó¥Ê¤Î½õ¤±";
10033                 if (desc) return "¶¯ÎϤʲóÉü¤Î²Î¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
10034 #else
10035                 if (name) return "Relief of Yavanna";
10036                 if (desc) return "Powerful healing song. Also heals cut and stun completely.";
10037 #endif
10038     
10039                 /* Stop singing before start another */
10040                 if (cast || fail) stop_singing();
10041
10042                 if (cast)
10043                 {
10044 #ifdef JP
10045                         msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤­¤¿¡¥¡¥¡¥");
10046 #else
10047                         msg_print("Life flows through you as you sing the song...");
10048 #endif
10049                         start_singing(spell, MUSIC_H_LIFE);
10050                 }
10051
10052                 {
10053                         int dice = 15;
10054                         int sides = 10;
10055
10056                         if (info) return info_heal(dice, sides, 0);
10057
10058                         if (cont)
10059                         {
10060                                 hp_player(damroll(dice, sides));
10061                                 set_stun(0);
10062                                 set_cut(0);
10063                         }
10064                 }
10065
10066                 break;
10067
10068         case 29:
10069 #ifdef JP
10070                 if (name) return "ºÆÀ¸¤Î²Î";
10071                 if (desc) return "¤¹¤Ù¤Æ¤Î¥¹¥Æ¡¼¥¿¥¹¤È·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
10072 #else
10073                 if (name) return "Goddess' rebirth";
10074                 if (desc) return "Restores all stats and experience.";
10075 #endif
10076     
10077                 {
10078                         /* Stop singing before start another */
10079                         if (cast || fail) stop_singing();
10080
10081                         if (cast)
10082                         {
10083 #ifdef JP
10084                                 msg_print("°Å¹õ¤ÎÃæ¤Ë¸÷¤ÈÈþ¤ò¤Õ¤ê¤Þ¤¤¤¿¡£ÂΤ¬¸µ¤Î³èÎϤò¼è¤êÌᤷ¤¿¡£");
10085 #else
10086                                 msg_print("You strewed light and beauty in the dark as you sing. You feel refreshed.");
10087 #endif
10088                                 (void)do_res_stat(A_STR);
10089                                 (void)do_res_stat(A_INT);
10090                                 (void)do_res_stat(A_WIS);
10091                                 (void)do_res_stat(A_DEX);
10092                                 (void)do_res_stat(A_CON);
10093                                 (void)do_res_stat(A_CHR);
10094                                 (void)restore_level();
10095                         }
10096                 }
10097                 break;
10098
10099         case 30:
10100 #ifdef JP
10101                 if (name) return "¥µ¥¦¥í¥ó¤ÎËâ½Ñ";
10102                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤǤ´¤¯¾®¤µ¤¤¹ì²»¤Îµå¤òÊü¤Ä¡£";
10103 #else
10104                 if (name) return "Wizardry of Sauron";
10105                 if (desc) return "Fires an extremely powerful tiny ball of sound.";
10106 #endif
10107     
10108                 {
10109                         int dice = 50 + plev;
10110                         int sides = 10;
10111                         int rad = 0;
10112
10113                         if (info) return info_damage(dice, sides, 0);
10114
10115                         /* Stop singing before start another */
10116                         if (cast || fail) stop_singing();
10117
10118                         if (cast)
10119                         {
10120                                 if (!get_aim_dir(&dir)) return NULL;
10121
10122                                 fire_ball(GF_SOUND, dir, damroll(dice, sides), rad);
10123                         }
10124                 }
10125                 break;
10126
10127         case 31:
10128 #ifdef JP
10129                 if (name) return "¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤ÎÄ©Àï";
10130                 if (desc) return "¥À¥á¡¼¥¸¤ò¼õ¤±¤Ê¤¯¤Ê¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
10131 #else
10132                 if (name) return "Fingolfin's Challenge";
10133                 if (desc) return "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks.";
10134 #endif
10135     
10136                 /* Stop singing before start another */
10137                 if (cast || fail) stop_singing();
10138
10139                 if (cast)
10140                 {
10141 #ifdef JP
10142                                 msg_print("¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤Î̽²¦¤Ø¤ÎÄ©Àï¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
10143 #else
10144                                 msg_print("You recall the valor of Fingolfin's challenge to the Dark Lord...");
10145 #endif
10146
10147                                 /* Redraw map */
10148                                 p_ptr->redraw |= (PR_MAP);
10149                 
10150                                 /* Update monsters */
10151                                 p_ptr->update |= (PU_MONSTERS);
10152                 
10153                                 /* Window stuff */
10154                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
10155
10156                                 start_singing(spell, MUSIC_INVULN);
10157                 }
10158
10159                 if (stop)
10160                 {
10161                         if (!p_ptr->invuln)
10162                         {
10163 #ifdef JP
10164                                 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
10165 #else
10166                                 msg_print("The invulnerability wears off.");
10167 #endif
10168                                 /* Redraw map */
10169                                 p_ptr->redraw |= (PR_MAP);
10170
10171                                 /* Update monsters */
10172                                 p_ptr->update |= (PU_MONSTERS);
10173
10174                                 /* Window stuff */
10175                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
10176                         }
10177                 }
10178
10179                 break;
10180         }
10181
10182         return "";
10183 }
10184
10185
10186 static cptr do_hissatsu_spell(int spell, int mode)
10187 {
10188         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
10189         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
10190         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
10191
10192         int dir;
10193         int plev = p_ptr->lev;
10194
10195         switch (spell)
10196         {
10197         case 0:
10198 #ifdef JP
10199                 if (name) return "ÈôÈÓ¹Ë";
10200                 if (desc) return "2¥Þ¥¹Î¥¤ì¤¿¤È¤³¤í¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¡£";
10201 #else
10202                 if (name) return "Tobi-Izuna";
10203                 if (desc) return "Attacks a two squares distant monster.";
10204 #endif
10205     
10206                 if (cast)
10207                 {
10208                         project_length = 2;
10209                         if (!get_aim_dir(&dir)) return NULL;
10210
10211                         project_hook(GF_ATTACK, dir, HISSATSU_2, PROJECT_STOP | PROJECT_KILL);
10212                 }
10213                 break;
10214
10215         case 1:
10216 #ifdef JP
10217                 if (name) return "¸Þ·î±«»Â¤ê";
10218                 if (desc) return "3Êý¸þ¤ËÂФ·¤Æ¹¶·â¤¹¤ë¡£";
10219 #else
10220                 if (name) return "3-Way Attack";
10221                 if (desc) return "Attacks in 3 directions in one time.";
10222 #endif
10223     
10224                 if (cast)
10225                 {
10226                         int cdir;
10227                         int y, x;
10228
10229                         if (!get_rep_dir2(&dir)) return NULL;
10230                         if (dir == 5) return NULL;
10231
10232                         for (cdir = 0;cdir < 8; cdir++)
10233                         {
10234                                 if (cdd[cdir] == dir) break;
10235                         }
10236
10237                         if (cdir == 8) return NULL;
10238
10239                         y = py + ddy_cdd[cdir];
10240                         x = px + ddx_cdd[cdir];
10241                         if (cave[y][x].m_idx)
10242                                 py_attack(y, x, 0);
10243                         else
10244 #ifdef JP
10245                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10246 #else
10247                                 msg_print("You attack the empty air.");
10248 #endif
10249                         y = py + ddy_cdd[(cdir + 7) % 8];
10250                         x = px + ddx_cdd[(cdir + 7) % 8];
10251                         if (cave[y][x].m_idx)
10252                                 py_attack(y, x, 0);
10253                         else
10254 #ifdef JP
10255                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10256 #else
10257                                 msg_print("You attack the empty air.");
10258 #endif
10259                         y = py + ddy_cdd[(cdir + 1) % 8];
10260                         x = px + ddx_cdd[(cdir + 1) % 8];
10261                         if (cave[y][x].m_idx)
10262                                 py_attack(y, x, 0);
10263                         else
10264 #ifdef JP
10265                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10266 #else
10267                                 msg_print("You attack the empty air.");
10268 #endif
10269                 }
10270                 break;
10271
10272         case 2:
10273 #ifdef JP
10274                 if (name) return "¥Ö¡¼¥á¥é¥ó";
10275                 if (desc) return "Éð´ï¤ò¼ê¸µ¤ËÌá¤Ã¤Æ¤¯¤ë¤è¤¦¤ËÅꤲ¤ë¡£Ìá¤Ã¤Æ¤³¤Ê¤¤¤³¤È¤â¤¢¤ë¡£";
10276 #else
10277                 if (name) return "Boomerang";
10278                 if (desc) return "Throws current weapon. And it'll return to your hand unless failed.";
10279 #endif
10280     
10281                 if (cast)
10282                 {
10283                         if (!do_cmd_throw_aux(1, TRUE, -1)) return NULL;
10284                 }
10285                 break;
10286
10287         case 3:
10288 #ifdef JP
10289                 if (name) return "±ëÎî";
10290                 if (desc) return "²Ð±êÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10291 #else
10292                 if (name) return "Burning Strike";
10293                 if (desc) return "Attacks a monster with more damage unless it has resistance to fire.";
10294 #endif
10295     
10296                 if (cast)
10297                 {
10298                         int y, x;
10299
10300                         if (!get_rep_dir2(&dir)) return NULL;
10301                         if (dir == 5) return NULL;
10302
10303                         y = py + ddy[dir];
10304                         x = px + ddx[dir];
10305
10306                         if (cave[y][x].m_idx)
10307                                 py_attack(y, x, HISSATSU_FIRE);
10308                         else
10309                         {
10310 #ifdef JP
10311                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10312 #else
10313                                 msg_print("There is no monster.");
10314 #endif
10315                                 return NULL;
10316                         }
10317                 }
10318                 break;
10319
10320         case 4:
10321 #ifdef JP
10322                 if (name) return "»¦µ¤´¶ÃÎ";
10323                 if (desc) return "¶á¤¯¤Î»×¹Í¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
10324 #else
10325                 if (name) return "Detect Ferocity";
10326                 if (desc) return "Detects all monsters except mindless in your vicinity.";
10327 #endif
10328     
10329                 if (cast)
10330                 {
10331                         detect_monsters_mind(DETECT_RAD_DEFAULT);
10332                 }
10333                 break;
10334
10335         case 5:
10336 #ifdef JP
10337                 if (name) return "¤ß¤ÍÂǤÁ";
10338                 if (desc) return "Áê¼ê¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤Ê¤¤¤¬¡¢Û¯Û°¤È¤µ¤»¤ë¡£";
10339 #else
10340                 if (name) return "Strike to Stun";
10341                 if (desc) return "Attempts to stun a monster in the adjacent.";
10342 #endif
10343     
10344                 if (cast)
10345                 {
10346                         int y, x;
10347
10348                         if (!get_rep_dir2(&dir)) return NULL;
10349                         if (dir == 5) return NULL;
10350
10351                         y = py + ddy[dir];
10352                         x = px + ddx[dir];
10353
10354                         if (cave[y][x].m_idx)
10355                                 py_attack(y, x, HISSATSU_MINEUCHI);
10356                         else
10357                         {
10358 #ifdef JP
10359                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10360 #else
10361                                 msg_print("There is no monster.");
10362 #endif
10363                                 return NULL;
10364                         }
10365                 }
10366                 break;
10367
10368         case 6:
10369 #ifdef JP
10370                 if (name) return "¥«¥¦¥ó¥¿¡¼";
10371                 if (desc) return "Áê¼ê¤Ë¹¶·â¤µ¤ì¤¿¤È¤­¤ËÈ¿·â¤¹¤ë¡£È¿·â¤¹¤ë¤¿¤Ó¤ËMP¤ò¾ÃÈñ¡£";
10372 #else
10373                 if (name) return "Counter";
10374                 if (desc) return "Prepares to counterattack. When attack by a monster, strikes back using SP each time.";
10375 #endif
10376     
10377                 if (cast)
10378                 {
10379                         if (p_ptr->riding)
10380                         {
10381 #ifdef JP
10382                                 msg_print("¾èÇÏÃæ¤Ë¤Ï̵Íý¤À¡£");
10383 #else
10384                                 msg_print("You cannot do it when riding.");
10385 #endif
10386                                 return NULL;
10387                         }
10388 #ifdef JP
10389                         msg_print("Áê¼ê¤Î¹¶·â¤ËÂФ·¤Æ¿È¹½¤¨¤¿¡£");
10390 #else
10391                         msg_print("You prepare to counter blow.");
10392 #endif
10393                         p_ptr->counter = TRUE;
10394                 }
10395                 break;
10396
10397         case 7:
10398 #ifdef JP
10399                 if (name) return "ʧ¤¤È´¤±";
10400                 if (desc) return "¹¶·â¤·¤¿¸å¡¢È¿ÂЦ¤ËÈ´¤±¤ë¡£";
10401 #else
10402                 if (name) return "Harainuke";
10403                 if (desc) return "Attacks monster with your weapons normally, then move through counter side of the monster.";
10404 #endif
10405     
10406                 if (cast)
10407                 {
10408                         int y, x;
10409
10410                         if (p_ptr->riding)
10411                         {
10412 #ifdef JP
10413                                 msg_print("¾èÇÏÃæ¤Ë¤Ï̵Íý¤À¡£");
10414 #else
10415                                 msg_print("You cannot do it when riding.");
10416 #endif
10417                                 return NULL;
10418                         }
10419         
10420                         if (!get_rep_dir2(&dir)) return NULL;
10421         
10422                         if (dir == 5) return NULL;
10423                         y = py + ddy[dir];
10424                         x = px + ddx[dir];
10425         
10426                         if (!cave[y][x].m_idx)
10427                         {
10428 #ifdef JP
10429                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10430 #else
10431                                 msg_print("There is no monster.");
10432 #endif
10433                                 return NULL;
10434                         }
10435         
10436                         py_attack(y, x, 0);
10437         
10438                         if (!player_can_enter(cave[y][x].feat, 0) || is_trap(cave[y][x].feat))
10439                                 break;
10440         
10441                         y += ddy[dir];
10442                         x += ddx[dir];
10443         
10444                         if (player_can_enter(cave[y][x].feat, 0) && !is_trap(cave[y][x].feat) && !cave[y][x].m_idx)
10445                         {
10446                                 msg_print(NULL);
10447         
10448                                 /* Move the player */
10449                                 (void)move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
10450                         }
10451                 }
10452                 break;
10453
10454         case 8:
10455 #ifdef JP
10456                 if (name) return "¥µ¡¼¥Ú¥ó¥Ä¥¿¥ó";
10457                 if (desc) return "ÆÇÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10458 #else
10459                 if (name) return "Serpent's Tongue";
10460                 if (desc) return "Attacks a monster with more damage unless it has resistance to poison.";
10461 #endif
10462     
10463                 if (cast)
10464                 {
10465                         int y, x;
10466
10467                         if (!get_rep_dir2(&dir)) return NULL;
10468                         if (dir == 5) return NULL;
10469
10470                         y = py + ddy[dir];
10471                         x = px + ddx[dir];
10472
10473                         if (cave[y][x].m_idx)
10474                                 py_attack(y, x, HISSATSU_POISON);
10475                         else
10476                         {
10477 #ifdef JP
10478                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10479 #else
10480                                 msg_print("There is no monster.");
10481 #endif
10482                                 return NULL;
10483                         }
10484                 }
10485                 break;
10486
10487         case 9:
10488 #ifdef JP
10489                 if (name) return "»ÂËâ·õÆõ¤ÎÂÀÅá";
10490                 if (desc) return "À¸Ì¿¤Î¤Ê¤¤¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤¬¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤ÏÁ´¤¯¸ú²Ì¤¬¤Ê¤¤¡£";
10491 #else
10492                 if (name) return "Zammaken";
10493                 if (desc) return "Attacks an evil unliving monster with great damage. No effect to other  monsters.";
10494 #endif
10495     
10496                 if (cast)
10497                 {
10498                         int y, x;
10499
10500                         if (!get_rep_dir2(&dir)) return NULL;
10501                         if (dir == 5) return NULL;
10502
10503                         y = py + ddy[dir];
10504                         x = px + ddx[dir];
10505
10506                         if (cave[y][x].m_idx)
10507                                 py_attack(y, x, HISSATSU_ZANMA);
10508                         else
10509                         {
10510 #ifdef JP
10511                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10512 #else
10513                                 msg_print("There is no monster.");
10514 #endif
10515                                 return NULL;
10516                         }
10517                 }
10518                 break;
10519
10520         case 10:
10521 #ifdef JP
10522                 if (name) return "ÎöÉ÷·õ";
10523                 if (desc) return "¹¶·â¤·¤¿Áê¼ê¤ò¸åÊý¤Ø¿á¤­Èô¤Ð¤¹¡£";
10524 #else
10525                 if (name) return "Wind Blast";
10526                 if (desc) return "Attacks an adjacent monster, and blow it away.";
10527 #endif
10528     
10529                 if (cast)
10530                 {
10531                         int y, x;
10532
10533                         if (!get_rep_dir2(&dir)) return NULL;
10534                         if (dir == 5) return NULL;
10535
10536                         y = py + ddy[dir];
10537                         x = px + ddx[dir];
10538
10539                         if (cave[y][x].m_idx)
10540                                 py_attack(y, x, 0);
10541                         else
10542                         {
10543 #ifdef JP
10544                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10545 #else
10546                                 msg_print("There is no monster.");
10547 #endif
10548                                 return NULL;
10549                         }
10550                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
10551                         {
10552                                 return "";
10553                         }
10554                         if (cave[y][x].m_idx)
10555                         {
10556                                 int i;
10557                                 int ty = y, tx = x;
10558                                 int oy = y, ox = x;
10559                                 int m_idx = cave[y][x].m_idx;
10560                                 monster_type *m_ptr = &m_list[m_idx];
10561                                 char m_name[80];
10562         
10563                                 monster_desc(m_name, m_ptr, 0);
10564         
10565                                 for (i = 0; i < 5; i++)
10566                                 {
10567                                         y += ddy[dir];
10568                                         x += ddx[dir];
10569                                         if (cave_empty_bold(y, x))
10570                                         {
10571                                                 ty = y;
10572                                                 tx = x;
10573                                         }
10574                                         else break;
10575                                 }
10576                                 if ((ty != oy) || (tx != ox))
10577                                 {
10578 #ifdef JP
10579                                         msg_format("%s¤ò¿á¤­Èô¤Ð¤·¤¿¡ª", m_name);
10580 #else
10581                                         msg_format("You blow %s away!", m_name);
10582 #endif
10583                                         cave[oy][ox].m_idx = 0;
10584                                         cave[ty][tx].m_idx = m_idx;
10585                                         m_ptr->fy = ty;
10586                                         m_ptr->fx = tx;
10587         
10588                                         update_mon(m_idx, TRUE);
10589                                         lite_spot(oy, ox);
10590                                         lite_spot(ty, tx);
10591         
10592                                         if (r_info[m_ptr->r_idx].flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
10593                                                 p_ptr->update |= (PU_MON_LITE);
10594                                 }
10595                         }
10596                 }
10597                 break;
10598
10599         case 11:
10600 #ifdef JP
10601                 if (name) return "Åá¾¢¤ÎÌÜÍø¤­";
10602                 if (desc) return "Éð´ï¡¦Ëɶñ¤ò1¤Ä¼±Ê̤¹¤ë¡£¥ì¥Ù¥ë45°Ê¾å¤ÇÉð´ï¡¦Ëɶñ¤ÎǽÎϤò´°Á´¤ËÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£";
10603 #else
10604                 if (name) return "Judge";
10605                 if (desc) return "Identifies a weapon or armor. Or *identifies* these at level 45.";
10606 #endif
10607     
10608                 if (cast)
10609                 {
10610                         if (plev > 44)
10611                         {
10612                                 if (!identify_fully(TRUE)) return NULL;
10613                         }
10614                         else
10615                         {
10616                                 if (!ident_spell(TRUE)) return NULL;
10617                         }
10618                 }
10619                 break;
10620
10621         case 12:
10622 #ifdef JP
10623                 if (name) return "ÇË´ä»Â";
10624                 if (desc) return "´ä¤ò²õ¤·¡¢´äÀзϤΥâ¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10625 #else
10626                 if (name) return "Rock Smash";
10627                 if (desc) return "Breaks rock. Or greatly damage a monster made by rocks.";
10628 #endif
10629     
10630                 if (cast)
10631                 {
10632                         int y, x;
10633
10634                         if (!get_rep_dir2(&dir)) return NULL;
10635                         if (dir == 5) return NULL;
10636
10637                         y = py + ddy[dir];
10638                         x = px + ddx[dir];
10639
10640                         if (cave[y][x].m_idx)
10641                                 py_attack(y, x, HISSATSU_HAGAN);
10642         
10643                         if (!cave_have_flag_bold(y, x, FF_HURT_ROCK)) break;
10644         
10645                         /* Destroy the feature */
10646                         cave_alter_feat(y, x, FF_HURT_ROCK);
10647         
10648                         /* Update some things */
10649                         p_ptr->update |= (PU_FLOW);
10650                 }
10651                 break;
10652
10653         case 13:
10654 #ifdef JP
10655                 if (name) return "Íð¤ìÀã·î²Ö";
10656                 if (desc) return "¹¶·â²ó¿ô¤¬Áý¤¨¡¢Î䵤ÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10657 #else
10658                 if (name) return "Midare-Setsugekka";
10659                 if (desc) return "Attacks a monster with increased number of attacks and more damage unless it has resistance to cold.";
10660 #endif
10661     
10662                 if (cast)
10663                 {
10664                         int y, x;
10665
10666                         if (!get_rep_dir2(&dir)) return NULL;
10667                         if (dir == 5) return NULL;
10668
10669                         y = py + ddy[dir];
10670                         x = px + ddx[dir];
10671
10672                         if (cave[y][x].m_idx)
10673                                 py_attack(y, x, HISSATSU_COLD);
10674                         else
10675                         {
10676 #ifdef JP
10677                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10678 #else
10679                                 msg_print("There is no monster.");
10680 #endif
10681                                 return NULL;
10682                         }
10683                 }
10684                 break;
10685
10686         case 14:
10687 #ifdef JP
10688                 if (name) return "µÞ½êÆͤ­";
10689                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò°ì·â¤ÇÅݤ¹¹¶·â¤ò·«¤ê½Ð¤¹¡£¼ºÇÔ¤¹¤ë¤È1ÅÀ¤·¤«¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤Ê¤¤¡£";
10690 #else
10691                 if (name) return "Spot Aiming";
10692                 if (desc) return "Attempts to kill a monster instantly. If failed cause only 1HP of damage.";
10693 #endif
10694     
10695                 if (cast)
10696                 {
10697                         int y, x;
10698
10699                         if (!get_rep_dir2(&dir)) return NULL;
10700                         if (dir == 5) return NULL;
10701
10702                         y = py + ddy[dir];
10703                         x = px + ddx[dir];
10704
10705                         if (cave[y][x].m_idx)
10706                                 py_attack(y, x, HISSATSU_KYUSHO);
10707                         else
10708                         {
10709 #ifdef JP
10710                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10711 #else
10712                                 msg_print("There is no monster.");
10713 #endif
10714                                 return NULL;
10715                         }
10716                 }
10717                 break;
10718
10719         case 15:
10720 #ifdef JP
10721                 if (name) return "Ëâ¿À»Â¤ê";
10722                 if (desc) return "²ñ¿´¤Î°ì·â¤Ç¹¶·â¤¹¤ë¡£¹¶·â¤¬¤«¤ï¤µ¤ì¤ä¤¹¤¤¡£";
10723 #else
10724                 if (name) return "Majingiri";
10725                 if (desc) return "Attempts to attack with critical hit. But this attack is easy to evade for a monster.";
10726 #endif
10727     
10728                 if (cast)
10729                 {
10730                         int y, x;
10731
10732                         if (!get_rep_dir2(&dir)) return NULL;
10733                         if (dir == 5) return NULL;
10734
10735                         y = py + ddy[dir];
10736                         x = px + ddx[dir];
10737
10738                         if (cave[y][x].m_idx)
10739                                 py_attack(y, x, HISSATSU_MAJIN);
10740                         else
10741                         {
10742 #ifdef JP
10743                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10744 #else
10745                                 msg_print("There is no monster.");
10746 #endif
10747                                 return NULL;
10748                         }
10749                 }
10750                 break;
10751
10752         case 16:
10753 #ifdef JP
10754                 if (name) return "¼Î¤Æ¿È";
10755                 if (desc) return "¶¯ÎϤʹ¶·â¤ò·«¤ê½Ð¤¹¡£¼¡¤Î¥¿¡¼¥ó¤Þ¤Ç¤Î´Ö¡¢¿©¤é¤¦¥À¥á¡¼¥¸¤¬Áý¤¨¤ë¡£";
10756 #else
10757                 if (name) return "Desperate Attack";
10758                 if (desc) return "Attacks with all of your power. But all damages you take will be doubled for one turn.";
10759 #endif
10760     
10761                 if (cast)
10762                 {
10763                         int y, x;
10764
10765                         if (!get_rep_dir2(&dir)) return NULL;
10766                         if (dir == 5) return NULL;
10767
10768                         y = py + ddy[dir];
10769                         x = px + ddx[dir];
10770
10771                         if (cave[y][x].m_idx)
10772                                 py_attack(y, x, HISSATSU_SUTEMI);
10773                         else
10774                         {
10775 #ifdef JP
10776                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10777 #else
10778                                 msg_print("There is no monster.");
10779 #endif
10780                                 return NULL;
10781                         }
10782                         p_ptr->sutemi = TRUE;
10783                 }
10784                 break;
10785
10786         case 17:
10787 #ifdef JP
10788                 if (name) return "Íë·âÏÉÄÞ»Â";
10789                 if (desc) return "ÅÅ·âÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÈó¾ï¤ËÂ礭¤¤¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10790 #else
10791                 if (name) return "Lightning Eagle";
10792                 if (desc) return "Attacks a monster with more damage unless it has resistance to electricity.";
10793 #endif
10794     
10795                 if (cast)
10796                 {
10797                         int y, x;
10798
10799                         if (!get_rep_dir2(&dir)) return NULL;
10800                         if (dir == 5) return NULL;
10801
10802                         y = py + ddy[dir];
10803                         x = px + ddx[dir];
10804
10805                         if (cave[y][x].m_idx)
10806                                 py_attack(y, x, HISSATSU_ELEC);
10807                         else
10808                         {
10809 #ifdef JP
10810                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10811 #else
10812                                 msg_print("There is no monster.");
10813 #endif
10814                                 return NULL;
10815                         }
10816                 }
10817                 break;
10818
10819         case 18:
10820 #ifdef JP
10821                 if (name) return "Æþ¿È";
10822                 if (desc) return "ÁÇÁ᤯Áê¼ê¤Ë¶á´ó¤ê¹¶·â¤¹¤ë¡£";
10823 #else
10824                 if (name) return "Rush Attack";
10825                 if (desc) return "Steps close to a monster and attacks at a time.";
10826 #endif
10827     
10828                 if (cast)
10829                 {
10830                         if (!rush_attack(NULL)) return NULL;
10831                 }
10832                 break;
10833
10834         case 19:
10835 #ifdef JP
10836                 if (name) return "ÀÖή±²";
10837                 if (desc) return "¼«Ê¬¼«¿È¤â½ý¤òºî¤ê¤Ä¤Ä¡¢¤½¤Î½ý¤¬¿¼¤¤¤Û¤ÉÂ礭¤¤°ÒÎϤÇÁ´Êý¸þ¤ÎŨ¤ò¹¶·â¤Ç¤­¤ë¡£À¸¤­¤Æ¤¤¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡£";
10838 #else
10839                 if (name) return "Bloody Maelstrom";
10840                 if (desc) return "Attacks all adjacent monsters with power corresponding to your cut status. Then increases your cut status. No effect to unliving monsters.";
10841 #endif
10842     
10843                 if (cast)
10844                 {
10845                         int y = 0, x = 0;
10846
10847                         cave_type       *c_ptr;
10848                         monster_type    *m_ptr;
10849         
10850                         if (p_ptr->cut < 300)
10851                                 set_cut(p_ptr->cut + 300);
10852                         else
10853                                 set_cut(p_ptr->cut * 2);
10854         
10855                         for (dir = 0; dir < 8; dir++)
10856                         {
10857                                 y = py + ddy_ddd[dir];
10858                                 x = px + ddx_ddd[dir];
10859                                 c_ptr = &cave[y][x];
10860         
10861                                 /* Get the monster */
10862                                 m_ptr = &m_list[c_ptr->m_idx];
10863         
10864                                 /* Hack -- attack monsters */
10865                                 if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
10866                                 {
10867                                         if (!monster_living(&r_info[m_ptr->r_idx]))
10868                                         {
10869                                                 char m_name[80];
10870         
10871                                                 monster_desc(m_name, m_ptr, 0);
10872 #ifdef JP
10873                                                 msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡ª", m_name);
10874 #else
10875                                                 msg_format("%s is unharmed!", m_name);
10876 #endif
10877                                         }
10878                                         else py_attack(y, x, HISSATSU_SEKIRYUKA);
10879                                 }
10880                         }
10881                 }
10882                 break;
10883
10884         case 20:
10885 #ifdef JP
10886                 if (name) return "·ã¿Ì·â";
10887                 if (desc) return "ÃϿ̤òµ¯¤³¤¹¡£";
10888 #else
10889                 if (name) return "Earthquake Blow";
10890                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
10891 #endif
10892     
10893                 if (cast)
10894                 {
10895                         int y,x;
10896
10897                         if (!get_rep_dir2(&dir)) return NULL;
10898                         if (dir == 5) return NULL;
10899
10900                         y = py + ddy[dir];
10901                         x = px + ddx[dir];
10902
10903                         if (cave[y][x].m_idx)
10904                                 py_attack(y, x, HISSATSU_QUAKE);
10905                         else
10906                                 earthquake(py, px, 10);
10907                 }
10908                 break;
10909
10910         case 21:
10911 #ifdef JP
10912                 if (name) return "ÃÏÁö¤ê";
10913                 if (desc) return "¾×·âÇȤΥӡ¼¥à¤òÊü¤Ä¡£";
10914 #else
10915                 if (name) return "Crack";
10916                 if (desc) return "Fires a beam of shock wave.";
10917 #endif
10918     
10919                 if (cast)
10920                 {
10921                         int total_damage = 0, basedam, i;
10922                         u32b flgs[TR_FLAG_SIZE];
10923                         object_type *o_ptr;
10924                         if (!get_aim_dir(&dir)) return NULL;
10925 #ifdef JP
10926                         msg_print("Éð´ï¤òÂ礭¤¯¿¶¤ê²¼¤í¤·¤¿¡£");
10927 #else
10928                         msg_print("You swing your weapon downward.");
10929 #endif
10930                         for (i = 0; i < 2; i++)
10931                         {
10932                                 int damage;
10933         
10934                                 if (!buki_motteruka(INVEN_RARM+i)) break;
10935                                 o_ptr = &inventory[INVEN_RARM+i];
10936                                 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
10937                                 damage = o_ptr->to_d * 100;
10938                                 object_flags(o_ptr, flgs);
10939                                 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
10940                                 {
10941                                         /* vorpal blade */
10942                                         basedam *= 5;
10943                                         basedam /= 3;
10944                                 }
10945                                 else if (have_flag(flgs, TR_VORPAL))
10946                                 {
10947                                         /* vorpal flag only */
10948                                         basedam *= 11;
10949                                         basedam /= 9;
10950                                 }
10951                                 damage += basedam;
10952                                 damage *= p_ptr->num_blow[i];
10953                                 total_damage += damage / 200;
10954                                 if (i) total_damage = total_damage*7/10;
10955                         }
10956                         fire_beam(GF_FORCE, dir, total_damage);
10957                 }
10958                 break;
10959
10960         case 22:
10961 #ifdef JP
10962                 if (name) return "µ¤Ç÷¤Îͺ¶«¤Ó";
10963                 if (desc) return "»ë³¦Æâ¤ÎÁ´¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤Æ¹ì²»¤Î¹¶·â¤ò¹Ô¤¦¡£¤µ¤é¤Ë¡¢¶á¤¯¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤ë¡£";
10964 #else
10965                 if (name) return "War Cry";
10966                 if (desc) return "Damages all monsters in sight with sound. Aggravate nearby monsters.";
10967 #endif
10968     
10969                 if (cast)
10970                 {
10971 #ifdef JP
10972                         msg_print("ͺ¶«¤Ó¤ò¤¢¤²¤¿¡ª");
10973 #else
10974                         msg_print("You roar out!");
10975 #endif
10976                         project_hack(GF_SOUND, randint1(plev * 3));
10977                         aggravate_monsters(0);
10978                 }
10979                 break;
10980
10981         case 23:
10982 #ifdef JP
10983                 if (name) return "̵Áл°ÃÊ";
10984                 if (desc) return "¶¯ÎϤÊ3Ãʹ¶·â¤ò·«¤ê½Ð¤¹¡£";
10985 #else
10986                 if (name) return "Musou-Sandan";
10987                 if (desc) return "Attacks with powerful 3 strikes.";
10988 #endif
10989     
10990                 if (cast)
10991                 {
10992                         int i;
10993
10994                         if (!get_rep_dir2(&dir)) return NULL;
10995                         if (dir == 5) return NULL;
10996
10997                         for (i = 0; i < 3; i++)
10998                         {
10999                                 int y, x;
11000                                 int ny, nx;
11001                                 int m_idx;
11002                                 cave_type *c_ptr;
11003                                 monster_type *m_ptr;
11004         
11005                                 y = py + ddy[dir];
11006                                 x = px + ddx[dir];
11007                                 c_ptr = &cave[y][x];
11008         
11009                                 if (c_ptr->m_idx)
11010                                         py_attack(y, x, HISSATSU_3DAN);
11011                                 else
11012                                 {
11013 #ifdef JP
11014                                         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11015 #else
11016                                         msg_print("There is no monster.");
11017 #endif
11018                                         return NULL;
11019                                 }
11020         
11021                                 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
11022                                 {
11023                                         return "";
11024                                 }
11025         
11026                                 /* Monster is dead? */
11027                                 if (!c_ptr->m_idx) break;
11028         
11029                                 ny = y + ddy[dir];
11030                                 nx = x + ddx[dir];
11031                                 m_idx = c_ptr->m_idx;
11032                                 m_ptr = &m_list[m_idx];
11033         
11034                                 /* Monster cannot move back? */
11035                                 if (!monster_can_enter(ny, nx, &r_info[m_ptr->r_idx], 0))
11036                                 {
11037                                         /* -more- */
11038                                         if (i < 2) msg_print(NULL);
11039                                         continue;
11040                                 }
11041         
11042                                 c_ptr->m_idx = 0;
11043                                 cave[ny][nx].m_idx = m_idx;
11044                                 m_ptr->fy = ny;
11045                                 m_ptr->fx = nx;
11046         
11047                                 update_mon(m_idx, TRUE);
11048         
11049                                 /* Redraw the old spot */
11050                                 lite_spot(y, x);
11051         
11052                                 /* Redraw the new spot */
11053                                 lite_spot(ny, nx);
11054         
11055                                 /* Player can move forward? */
11056                                 if (player_can_enter(c_ptr->feat, 0))
11057                                 {
11058                                         /* Move the player */
11059                                         if (!move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP)) break;
11060                                 }
11061                                 else
11062                                 {
11063                                         break;
11064                                 }
11065
11066                                 /* -more- */
11067                                 if (i < 2) msg_print(NULL);
11068                         }
11069                 }
11070                 break;
11071
11072         case 24:
11073 #ifdef JP
11074                 if (name) return "µÛ·ìµ´¤Î²ç";
11075                 if (desc) return "¹¶·â¤·¤¿Áê¼ê¤ÎÂÎÎϤòµÛ¤¤¤È¤ê¡¢¼«Ê¬¤ÎÂÎÎϤò²óÉü¤µ¤»¤ë¡£À¸Ì¿¤ò»ý¤¿¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Ë¤ÏÄ̤¸¤Ê¤¤¡£";
11076 #else
11077                 if (name) return "Vampire's Fang";
11078                 if (desc) return "Attacks with vampiric strikes which absorbs HP from a monster and gives them to you. No effect to unliving monsters.";
11079 #endif
11080     
11081                 if (cast)
11082                 {
11083                         int y, x;
11084
11085                         if (!get_rep_dir2(&dir)) return NULL;
11086                         if (dir == 5) return NULL;
11087
11088                         y = py + ddy[dir];
11089                         x = px + ddx[dir];
11090
11091                         if (cave[y][x].m_idx)
11092                                 py_attack(y, x, HISSATSU_DRAIN);
11093                         else
11094                         {
11095 #ifdef JP
11096                                         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11097 #else
11098                                         msg_print("There is no monster.");
11099 #endif
11100                                 return NULL;
11101                         }
11102                 }
11103                 break;
11104
11105         case 25:
11106 #ifdef JP
11107                 if (name) return "¸¸ÏÇ";
11108                 if (desc) return "»ë³¦Æâ¤Îµ¯¤­¤Æ¤¤¤ëÁ´¥â¥ó¥¹¥¿¡¼¤ËÛ¯Û°¡¢º®Íð¡¢Ì²¤ê¤òÍ¿¤¨¤è¤¦¤È¤¹¤ë¡£";
11109 #else
11110                 if (name) return "Moon Dazzling";
11111                 if (desc) return "Attempts to stun, confuse and sleep all waking monsters.";
11112 #endif
11113     
11114                 if (cast)
11115                 {
11116 #ifdef JP
11117                         msg_print("Éð´ï¤òÉÔµ¬Â§¤ËÍɤ餷¤¿¡¥¡¥¡¥");
11118 #else
11119                         msg_print("You irregularly wave your weapon...");
11120 #endif
11121                         project_hack(GF_ENGETSU, plev * 4);
11122                         project_hack(GF_ENGETSU, plev * 4);
11123                         project_hack(GF_ENGETSU, plev * 4);
11124                 }
11125                 break;
11126
11127         case 26:
11128 #ifdef JP
11129                 if (name) return "É´¿Í»Â¤ê";
11130                 if (desc) return "Ϣ³¤·¤ÆÆþ¿È¤Ç¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¡£¹¶·â¤¹¤ë¤¿¤Ó¤ËMP¤ò¾ÃÈñ¡£MP¤¬¤Ê¤¯¤Ê¤ë¤«¡¢¥â¥ó¥¹¥¿¡¼¤òÅݤ»¤Ê¤«¤Ã¤¿¤éÉ´¿Í»Â¤ê¤Ï½ªÎ»¤¹¤ë¡£";
11131 #else
11132                 if (name) return "Hundred Slaughter";
11133                 if (desc) return "Performs a series of rush attacks. The series continues while killing each monster in a time and SP remains.";
11134 #endif
11135     
11136                 if (cast)
11137                 {
11138                         const int mana_cost_per_monster = 8;
11139                         bool new = TRUE;
11140                         bool mdeath;
11141
11142                         do
11143                         {
11144                                 if (!rush_attack(&mdeath)) break;
11145                                 if (new)
11146                                 {
11147                                         /* Reserve needed mana point */
11148                                         p_ptr->csp -= technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
11149                                         new = FALSE;
11150                                 }
11151                                 else
11152                                         p_ptr->csp -= mana_cost_per_monster;
11153
11154                                 if (!mdeath) break;
11155                                 command_dir = 0;
11156
11157                                 p_ptr->redraw |= PR_MANA;
11158                                 handle_stuff();
11159                         }
11160                         while (p_ptr->csp > mana_cost_per_monster);
11161
11162                         if (new) return NULL;
11163         
11164                         /* Restore reserved mana */
11165                         p_ptr->csp += technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
11166                 }
11167                 break;
11168
11169         case 27:
11170 #ifdef JP
11171                 if (name) return "Å·æÆζÁ®";
11172                 if (desc) return "»ë³¦Æâ¤Î¾ì½ê¤ò»ØÄꤷ¤Æ¡¢¤½¤Î¾ì½ê¤È¼«Ê¬¤Î´Ö¤Ë¤¤¤ëÁ´¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤·¡¢¤½¤Î¾ì½ê¤Ë°ÜÆ°¤¹¤ë¡£";
11173 #else
11174                 if (name) return "Dragonic Flash";
11175                 if (desc) return "Runs toward given location while attacking all monsters on the path.";
11176 #endif
11177     
11178                 if (cast)
11179                 {
11180                         int y, x;
11181
11182                         if (!tgt_pt(&x, &y)) return NULL;
11183
11184                         if (!cave_player_teleportable_bold(y, x, 0L) ||
11185                             (distance(y, x, py, px) > MAX_SIGHT / 2) ||
11186                             !projectable(py, px, y, x))
11187                         {
11188 #ifdef JP
11189                                 msg_print("¼ºÇÔ¡ª");
11190 #else
11191                                 msg_print("You cannot move to that place!");
11192 #endif
11193                                 break;
11194                         }
11195                         if (p_ptr->anti_tele)
11196                         {
11197 #ifdef JP
11198                                 msg_print("ÉԻ׵ĤÊÎϤ¬¥Æ¥ì¥Ý¡¼¥È¤òËɤ¤¤À¡ª");
11199 #else
11200                                 msg_print("A mysterious force prevents you from teleporting!");
11201 #endif
11202         
11203                                 break;
11204                         }
11205                         project(0, 0, y, x, HISSATSU_ISSEN, GF_ATTACK, PROJECT_BEAM | PROJECT_KILL, -1);
11206                         teleport_player_to(y, x, 0L);
11207                 }
11208                 break;
11209
11210         case 28:
11211 #ifdef JP
11212                 if (name) return "Æó½Å¤Î·õ·â";
11213                 if (desc) return "1¥¿¡¼¥ó¤Ç2ÅÙ¹¶·â¤ò¹Ô¤¦¡£";
11214 #else
11215                 if (name) return "Twin Slash";
11216                 if (desc) return "double attacks at a time.";
11217 #endif
11218     
11219                 if (cast)
11220                 {
11221                         int x, y;
11222         
11223                         if (!get_rep_dir(&dir, FALSE)) return NULL;
11224
11225                         y = py + ddy[dir];
11226                         x = px + ddx[dir];
11227
11228                         if (cave[y][x].m_idx)
11229                         {
11230                                 py_attack(y, x, 0);
11231                                 if (cave[y][x].m_idx)
11232                                 {
11233                                         handle_stuff();
11234                                         py_attack(y, x, 0);
11235                                 }
11236                         }
11237                         else
11238                         {
11239 #ifdef JP
11240         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11241 #else
11242                                 msg_print("You don't see any monster in this direction");
11243 #endif
11244                                 return NULL;
11245                         }
11246                 }
11247                 break;
11248
11249         case 29:
11250 #ifdef JP
11251                 if (name) return "¸×ÉúÀäÅáÀª";
11252                 if (desc) return "¶¯ÎϤʹ¶·â¤ò¹Ô¤¤¡¢¶á¤¯¤Î¾ì½ê¤Ë¤â¸ú²Ì¤¬µÚ¤Ö¡£";
11253 #else
11254                 if (name) return "Kofuku-Zettousei";
11255                 if (desc) return "Performs a powerful attack which even effect nearby monsters.";
11256 #endif
11257     
11258                 if (cast)
11259                 {
11260                         int total_damage = 0, basedam, i;
11261                         int y, x;
11262                         u32b flgs[TR_FLAG_SIZE];
11263                         object_type *o_ptr;
11264         
11265                         if (!get_rep_dir2(&dir)) return NULL;
11266                         if (dir == 5) return NULL;
11267
11268                         y = py + ddy[dir];
11269                         x = px + ddx[dir];
11270
11271                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
11272                         {
11273 #ifdef JP
11274                                 msg_print("¤Ê¤¼¤«¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£");
11275 #else
11276                                 msg_print("Something prevent you from attacking.");
11277 #endif
11278                                 return "";
11279                         }
11280 #ifdef JP
11281                         msg_print("Éð´ï¤òÂ礭¤¯¿¶¤ê²¼¤í¤·¤¿¡£");
11282 #else
11283                         msg_print("You swing your weapon downward.");
11284 #endif
11285                         for (i = 0; i < 2; i++)
11286                         {
11287                                 int damage;
11288                                 if (!buki_motteruka(INVEN_RARM+i)) break;
11289                                 o_ptr = &inventory[INVEN_RARM+i];
11290                                 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
11291                                 damage = o_ptr->to_d * 100;
11292                                 object_flags(o_ptr, flgs);
11293                                 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
11294                                 {
11295                                         /* vorpal blade */
11296                                         basedam *= 5;
11297                                         basedam /= 3;
11298                                 }
11299                                 else if (have_flag(flgs, TR_VORPAL))
11300                                 {
11301                                         /* vorpal flag only */
11302                                         basedam *= 11;
11303                                         basedam /= 9;
11304                                 }
11305                                 damage += basedam;
11306                                 damage += p_ptr->to_d[i] * 100;
11307                                 damage *= p_ptr->num_blow[i];
11308                                 total_damage += (damage / 100);
11309                         }
11310                         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);
11311                 }
11312                 break;
11313
11314         case 30:
11315 #ifdef JP
11316                 if (name) return "·Ä±Àµ´Ç¦·õ";
11317                 if (desc) return "¼«Ê¬¤â¥À¥á¡¼¥¸¤ò¤¯¤é¤¦¤¬¡¢Áê¼ê¤ËÈó¾ï¤ËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£¥¢¥ó¥Ç¥Ã¥É¤Ë¤ÏÆä˸ú²Ì¤¬¤¢¤ë¡£";
11318 #else
11319                 if (name) return "Keiun-Kininken";
11320                 if (desc) return "Attacks a monster with extremely powerful damage. But you also takes some damages. Hurts a undead monster greatly.";
11321 #endif
11322     
11323                 if (cast)
11324                 {
11325                         int y, x;
11326
11327                         if (!get_rep_dir2(&dir)) return NULL;
11328                         if (dir == 5) return NULL;
11329
11330                         y = py + ddy[dir];
11331                         x = px + ddx[dir];
11332
11333                         if (cave[y][x].m_idx)
11334                                 py_attack(y, x, HISSATSU_UNDEAD);
11335                         else
11336                         {
11337 #ifdef JP
11338                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11339 #else
11340                                 msg_print("There is no monster.");
11341 #endif
11342                                 return NULL;
11343                         }
11344 #ifdef JP
11345                         take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), "·Ä±Àµ´Ç¦·õ¤ò»È¤Ã¤¿¾×·â", -1);
11346 #else
11347                         take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), "exhaustion on using Keiun-Kininken", -1);
11348 #endif
11349                 }
11350                 break;
11351
11352         case 31:
11353 #ifdef JP
11354                 if (name) return "ÀÚÊ¢";
11355                 if (desc) return "¡ÖÉð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£¡×";
11356 #else
11357                 if (name) return "Harakiri";
11358                 if (desc) return "'Busido is found in death'";
11359 #endif
11360
11361                 if (cast)
11362                 {
11363                         int i;
11364 #ifdef JP
11365         if (!get_check("ËÜÅö¤Ë¼«»¦¤·¤Þ¤¹¤«¡©")) return NULL;
11366 #else
11367                         if (!get_check("Do you really want to commit suicide? ")) return NULL;
11368 #endif
11369                                 /* Special Verification for suicide */
11370 #ifdef JP
11371         prt("³Îǧ¤Î¤¿¤á '@' ¤ò²¡¤·¤Æ²¼¤µ¤¤¡£", 0, 0);
11372 #else
11373                         prt("Please verify SUICIDE by typing the '@' sign: ", 0, 0);
11374 #endif
11375         
11376                         flush();
11377                         i = inkey();
11378                         prt("", 0, 0);
11379                         if (i != '@') return NULL;
11380                         if (p_ptr->total_winner)
11381                         {
11382                                 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
11383                                 p_ptr->total_winner = TRUE;
11384                         }
11385                         else
11386                         {
11387 #ifdef JP
11388                                 msg_print("Éð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£");
11389 #else
11390                                 msg_print("Meaning of Bushi-do is found in the death.");
11391 #endif
11392                                 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
11393                         }
11394                 }
11395                 break;
11396         }
11397
11398         return "";
11399 }
11400
11401
11402 /* Hex */
11403 static bool item_tester_hook_weapon_except_bow(object_type *o_ptr)
11404 {
11405         switch (o_ptr->tval)
11406         {
11407                 case TV_SWORD:
11408                 case TV_HAFTED:
11409                 case TV_POLEARM:
11410                 case TV_DIGGING:
11411                 {
11412                         return (TRUE);
11413                 }
11414         }
11415
11416         return (FALSE);
11417 }
11418
11419 static bool item_tester_hook_cursed(object_type *o_ptr)
11420 {
11421         return (bool)(object_is_cursed(o_ptr));
11422 }
11423
11424 static cptr do_hex_spell(int spell, int mode)
11425 {
11426         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
11427         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
11428         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
11429         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
11430         bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
11431         bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
11432         bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
11433
11434         bool add = TRUE;
11435
11436         int plev = p_ptr->lev;
11437         int power;
11438
11439         switch (spell)
11440         {
11441         /*** 1st book (0-7) ***/
11442         case 0:
11443 #ifdef JP
11444                 if (name) return "¼Ù¤Ê¤ë½ËÊ¡";
11445                 if (desc) return "½ËÊ¡¤Ë¤è¤ê¹¶·âÀºÅÙ¤ÈËɸæÎϤ¬¾å¤¬¤ë¡£";
11446 #else
11447                 if (name) return "Evily blessing";
11448                 if (desc) return "Attempts to increase +to_hit of a weapon and AC";
11449 #endif
11450                 if (cast)
11451                 {
11452                         if (!p_ptr->blessed)
11453                         {
11454 #ifdef JP
11455                                 msg_print("¹â·é¤Êµ¤Ê¬¤Ë¤Ê¤Ã¤¿¡ª");
11456 #else
11457                                 msg_print("You feel righteous!");
11458 #endif
11459                         }
11460                 }
11461                 if (stop)
11462                 {
11463                         if (!p_ptr->blessed)
11464                         {
11465 #ifdef JP
11466                                 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
11467 #else
11468                                 msg_print("The prayer has expired.");
11469 #endif
11470                         }
11471                 }
11472                 break;
11473
11474         case 1:
11475 #ifdef JP
11476                 if (name) return "·Ú½ý¤Î¼£Ìþ";
11477                 if (desc) return "HP¤ä½ý¤ò¾¯¤·²óÉü¤µ¤»¤ë¡£";
11478 #else
11479                 if (name) return "Cure light wounds";
11480                 if (desc) return "Heals cut and HP a little.";
11481 #endif
11482                 if (info) return info_heal(1, 10, 0);
11483                 if (cast)
11484                 {
11485 #ifdef JP
11486                         msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
11487 #else
11488                         msg_print("You feel better and better.");
11489 #endif
11490                 }
11491                 if (cast || cont)
11492                 {
11493                         hp_player(damroll(1, 10));
11494                         set_cut(p_ptr->cut - 10);
11495                 }
11496                 break;
11497
11498         case 2:
11499 #ifdef JP
11500                 if (name) return "°­Ëâ¤Î¥ª¡¼¥é";
11501                 if (desc) return "±ê¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢²óÉü®ÅÙ¤¬Â®¤¯¤Ê¤ë¡£";
11502 #else
11503                 if (name) return "Demonic aura";
11504                 if (desc) return "Gives fire aura and regeneration.";
11505 #endif
11506                 if (cast)
11507                 {
11508 #ifdef JP
11509                         msg_print("ÂΤ¬±ê¤Î¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£");
11510 #else
11511                         msg_print("You have enveloped by fiery aura!");
11512 #endif
11513                 }
11514                 if (stop)
11515                 {
11516 #ifdef JP
11517                         msg_print("±ê¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
11518 #else
11519                         msg_print("Fiery aura disappeared.");
11520 #endif
11521                 }
11522                 break;
11523
11524         case 3:
11525 #ifdef JP
11526                 if (name) return "°­½­Ì¸";
11527                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÈù¼åÎ̤ÎÆǤΥÀ¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
11528 #else
11529                 if (name) return "Stinking mist";
11530                 if (desc) return "Deals few damages of poison to all monsters in your sight.";
11531 #endif
11532                 power = plev / 2 + 5;
11533                 if (info) return info_damage(1, power, 0);
11534                 if (cast || cont)
11535                 {
11536                         project_hack(GF_POIS, randint1(power));
11537                 }
11538                 break;
11539
11540         case 4:
11541 #ifdef JP
11542                 if (name) return "ÏÓÎ϶¯²½";
11543                 if (desc) return "½Ñ¼Ô¤ÎÏÓÎϤò¾å¾º¤µ¤»¤ë¡£";
11544 #else
11545                 if (name) return "Extra might";
11546                 if (desc) return "Attempts to increase your strength.";
11547 #endif
11548                 if (cast)
11549                 {
11550 #ifdef JP
11551                         msg_print("²¿¤À¤«ÎϤ¬Í¯¤¤¤ÆÍè¤ë¡£");
11552 #else
11553                         msg_print("You feel you get stronger.");
11554 #endif
11555                 }
11556                 break;
11557
11558         case 5:
11559 #ifdef JP
11560                 if (name) return "Éð´ï¼öÇû";
11561                 if (desc) return "ÁõÈ÷¤·¤Æ¤¤¤ëÉð´ï¤ò¼ö¤¦¡£";
11562 #else
11563                 if (name) return "Curse weapon";
11564                 if (desc) return "Curses your weapon.";
11565 #endif
11566                 if (cast)
11567                 {
11568                         int item;
11569                         char *q, *s;
11570                         char o_name[MAX_NLEN];
11571                         object_type *o_ptr;
11572                         u32b f[TR_FLAG_SIZE];
11573
11574                         item_tester_hook = item_tester_hook_weapon_except_bow;
11575 #ifdef JP
11576                         q = "¤É¤ì¤ò¼ö¤¤¤Þ¤¹¤«¡©";
11577                         s = "Éð´ï¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
11578 #else
11579                         q = "Which weapon do you curse?";
11580                         s = "You wield no weapons.";
11581 #endif
11582
11583                         if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
11584
11585                         o_ptr = &inventory[item];
11586                         object_desc(o_name, o_ptr, OD_NAME_ONLY);
11587                         object_flags(o_ptr, f);
11588
11589 #ifdef JP
11590                         if (!get_check(format("ËÜÅö¤Ë %s ¤ò¼ö¤¤¤Þ¤¹¤«¡©", o_name))) return FALSE;
11591 #else
11592                         if (!get_check(format("Do you curse %s, really¡©", o_name))) return FALSE;
11593 #endif
11594
11595                         if (!one_in_(3) &&
11596                                 (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
11597                         {
11598 #ifdef JP
11599                                 msg_format("%s ¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡£", o_name);
11600 #else
11601                                 msg_format("%s resists the effect.", o_name);
11602 #endif
11603                                 if (one_in_(3))
11604                                 {
11605                                         if (o_ptr->to_d > 0)
11606                                         {
11607                                                 o_ptr->to_d -= randint1(3) % 2;
11608                                                 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
11609                                         }
11610                                         if (o_ptr->to_h > 0)
11611                                         {
11612                                                 o_ptr->to_h -= randint1(3) % 2;
11613                                                 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
11614                                         }
11615                                         if (o_ptr->to_a > 0)
11616                                         {
11617                                                 o_ptr->to_a -= randint1(3) % 2;
11618                                                 if (o_ptr->to_a < 0) o_ptr->to_a = 0;
11619                                         }
11620 #ifdef JP
11621                                         msg_format("%s ¤ÏÎô²½¤·¤Æ¤·¤Þ¤Ã¤¿¡£", o_name);
11622 #else
11623                                         msg_format("Your %s was disenchanted!", o_name);
11624 #endif
11625                                 }
11626                         }
11627                         else
11628                         {
11629                                 int power = 0;
11630 #ifdef JP
11631                                 msg_format("¶²ÉݤΰŹõ¥ª¡¼¥é¤¬¤¢¤Ê¤¿¤Î%s¤òÊñ¤ß¹þ¤ó¤À¡ª", o_name);
11632 #else
11633                                 msg_format("A terrible black aura blasts your %s!", o_name);
11634 #endif
11635                                 o_ptr->curse_flags |= (TRC_CURSED);
11636
11637                                 if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
11638                                 {
11639
11640                                         if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
11641                                         if (one_in_(666))
11642                                         {
11643                                                 o_ptr->curse_flags |= (TRC_TY_CURSE);
11644                                                 if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
11645
11646                                                 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
11647                                                 add_flag(o_ptr->art_flags, TR_VORPAL);
11648                                                 add_flag(o_ptr->art_flags, TR_VAMPIRIC);
11649 #ifdef JP
11650                                                 msg_print("·ì¤À¡ª·ì¤À¡ª·ì¤À¡ª");
11651 #else
11652                                                 msg_print("Blood, Blood, Blood!");
11653 #endif
11654                                                 power = 2;
11655                                         }
11656                                 }
11657
11658                                 o_ptr->curse_flags |= get_curse(power, o_ptr);
11659                         }
11660
11661                         p_ptr->update |= (PU_BONUS);
11662                         add = FALSE;
11663                 }
11664                 break;
11665
11666         case 6:
11667 #ifdef JP
11668                 if (name) return "¼Ù°­´¶ÃÎ";
11669                 if (desc) return "¼þ°Ï¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
11670 #else
11671                 if (name) return "Evil detection";
11672                 if (desc) return "Detects evil monsters.";
11673 #endif
11674                 if (info) return info_range(MAX_SIGHT);
11675                 if (cast)
11676                 {
11677 #ifdef JP
11678                         msg_print("¼Ù°­¤ÊÀ¸Êª¤Î¸ºß¤ò´¶¤¸¼è¤í¤¦¤È¤·¤¿¡£");
11679 #else
11680                         msg_print("You attend to the presence of evil creatures.");
11681 #endif
11682                 }
11683                 break;
11684
11685         case 7:
11686 #ifdef JP
11687                 if (name) return "²æËý";
11688                 if (desc) return "¿ô¥¿¡¼¥ó¹¶·â¤òÂѤ¨¤¿¸å¡¢¼õ¤±¤¿¥À¥á¡¼¥¸¤òÃϹö¤Î¶È²Ð¤È¤·¤Æ¼þ°Ï¤ËÊü½Ð¤¹¤ë¡£";
11689 #else
11690                 if (name) return "Patience";
11691                 if (desc) return "Bursts hell fire strongly after patients any damage while few turns.";
11692 #endif
11693                 power = MIN(200, (p_ptr->magic_num1[2] * 2));
11694                 if (info) return info_damage(0, 0, power);
11695                 if (cast)
11696                 {
11697                         int a = 3 - (p_ptr->pspeed - 100) / 10;
11698                         int r = 3 + randint1(3) + MAX(0, MIN(3, a));
11699
11700                         if (p_ptr->magic_num2[2] > 0)
11701                         {
11702 #ifdef JP
11703                                 msg_print("¤¹¤Ç¤Ë²æËý¤ò¤·¤Æ¤¤¤ë¡£");
11704 #else
11705                                 msg_print("You are already patienting.");
11706 #endif
11707                                 return NULL;
11708                         }
11709
11710                         p_ptr->magic_num2[1] = 1;
11711                         p_ptr->magic_num2[2] = r;
11712                         p_ptr->magic_num1[2] = 0;
11713 #ifdef JP
11714                         msg_print("¤¸¤Ã¤ÈÂѤ¨¤ë¤³¤È¤Ë¤·¤¿¡£");
11715 #else
11716                         msg_print("You decide to patient all damages.");
11717 #endif
11718                         add = FALSE;
11719                 }
11720                 if (cont)
11721                 {
11722                         int rad = 2 + (power / 50);
11723
11724                         p_ptr->magic_num2[2]--;
11725
11726                         if ((p_ptr->magic_num2[2] <= 0) || (power >= 200))
11727                         {
11728 #ifdef JP
11729                                 msg_print("²æËý¤¬²ò¤«¤ì¤¿¡ª");
11730 #else
11731                                 msg_print("Time for end of patioence!");
11732 #endif
11733                                 if (power)
11734                                 {
11735                                         project(0, rad, py, px, power, GF_HELL_FIRE,
11736                                                 (PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
11737                                 }
11738                                 if (p_ptr->wizard)
11739                                 {
11740 #ifdef JP
11741                                         msg_format("%dÅÀ¤Î¥À¥á¡¼¥¸¤òÊÖ¤·¤¿¡£", power);
11742 #else
11743                                         msg_format("You return %d damages.", power);
11744 #endif
11745                                 }
11746
11747                                 /* Reset */
11748                                 p_ptr->magic_num2[1] = 0;
11749                                 p_ptr->magic_num2[2] = 0;
11750                                 p_ptr->magic_num1[2] = 0;
11751                         }
11752                 }
11753                 break;
11754
11755         /*** 2nd book (8-15) ***/
11756         case 8:
11757 #ifdef JP
11758                 if (name) return "ɹ¤Î³»";
11759                 if (desc) return "ɹ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢ËɸæÎϤ¬¾å¾º¤¹¤ë¡£";
11760 #else
11761                 if (name) return "Ice armor";
11762                 if (desc) return "Gives fire aura and bonus to AC.";
11763 #endif
11764                 if (cast)
11765                 {
11766 #ifdef JP
11767                         msg_print("ÂΤ¬É¹¤Î³»¤Çʤ¤ï¤ì¤¿¡£");
11768 #else
11769                         msg_print("You have enveloped by ice armor!");
11770 #endif
11771                 }
11772                 if (stop)
11773                 {
11774 #ifdef JP
11775                         msg_print("ɹ¤Î³»¤¬¾Ã¤¨µî¤Ã¤¿¡£");
11776 #else
11777                         msg_print("Ice armor disappeared.");
11778 #endif
11779                 }
11780                 break;
11781
11782         case 9:
11783 #ifdef JP
11784                 if (name) return "½Å½ý¤Î¼£Ìþ";
11785                 if (desc) return "ÂÎÎϤä½ý¤ò¿¾¯²óÉü¤µ¤»¤ë¡£";
11786 #else
11787                 if (name) return "Cure serious wounds";
11788                 if (desc) return "Heals cut and HP more.";
11789 #endif
11790                 if (info) return info_heal(2, 10, 0);
11791                 if (cast)
11792                 {
11793 #ifdef JP
11794                         msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
11795 #else
11796                         msg_print("You feel better and better.");
11797 #endif
11798                 }
11799                 if (cast || cont)
11800                 {
11801                         hp_player(damroll(2, 10));
11802                         set_cut((p_ptr->cut / 2) - 10);
11803                 }
11804                 break;
11805
11806         case 10:
11807 #ifdef JP
11808                 if (name) return "ÌôÉʵÛÆþ";
11809                 if (desc) return "¼öʸ±Ó¾§¤òÃæ»ß¤¹¤ë¤³¤È¤Ê¤¯¡¢Ìô¤Î¸ú²Ì¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
11810 #else
11811                 if (name) return "Inhail potion";
11812                 if (desc) return "Quaffs a potion without canceling of casting a spell.";
11813 #endif
11814                 if (cast)
11815                 {
11816                         p_ptr->magic_num1[0] |= (1L << HEX_INHAIL);
11817                         do_cmd_quaff_potion();
11818                         p_ptr->magic_num1[0] &= ~(1L << HEX_INHAIL);
11819                         add = FALSE;
11820                 }
11821                 break;
11822
11823         case 11:
11824 #ifdef JP
11825                 if (name) return "µÛ·ì̸";
11826                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÈù¼åÎ̤ÎÀ¸Ì¿Îϵۼý¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Í¿¤¨¤¿¥À¥á¡¼¥¸¤Îʬ¡¢ÂÎÎϤ¬²óÉü¤¹¤ë¡£";
11827 #else
11828                 if (name) return "Vampiric mist";
11829                 if (desc) return "Deals few dameges of drain life to all monsters in your sight.";
11830 #endif
11831                 power = (plev / 2) + 5;
11832                 if (info) return info_damage(1, power, 0);
11833                 if (cast || cont)
11834                 {
11835                         project_hack(GF_OLD_DRAIN, randint1(power));
11836                 }
11837                 break;
11838
11839         case 12:
11840 #ifdef JP
11841                 if (name) return "Ëâ·õ²½";
11842                 if (desc) return "Éð´ï¤Î¹¶·âÎϤò¾å¤²¤ë¡£ÀÚ¤ìÌ£¤òÆÀ¡¢¼ö¤¤¤Ë±þ¤¸¤ÆÍ¿¤¨¤ë¥À¥á¡¼¥¸¤¬¾å¾º¤·¡¢Á±Îɤʥâ¥ó¥¹¥¿¡¼¤ËÂФ¹¤ë¥À¥á¡¼¥¸¤¬2Çܤˤʤ롣";
11843 #else
11844                 if (name) return "Swords to runeswords";
11845                 if (desc) return "Gives vorpal ability to your weapon. Increases damages by your weapon acccording to curse of your weapon.";
11846 #endif
11847                 if (cast)
11848                 {
11849 #ifdef JP
11850                         msg_print("¤¢¤Ê¤¿¤ÎÉð´ï¤¬¹õ¤¯µ±¤¤¤¿¡£");
11851 #else
11852                         if (!empty_hands(FALSE))
11853                                 msg_print("Your weapons glow bright black.");
11854                         else
11855                                 msg_print("Your weapon glows bright black.");
11856 #endif
11857                 }
11858                 if (stop)
11859                 {
11860 #ifdef JP
11861                         msg_print("Éð´ï¤Îµ±¤­¤¬¾Ã¤¨µî¤Ã¤¿¡£");
11862 #else
11863                         msg_format("Brightness of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
11864 #endif
11865                 }
11866                 break;
11867
11868         case 13:
11869 #ifdef JP
11870                 if (name) return "º®Íð¤Î¼ê";
11871                 if (desc) return "¹¶·â¤·¤¿ºÝ¥â¥ó¥¹¥¿¡¼¤òº®Í𤵤»¤ë¡£";
11872 #else
11873                 if (name) return "Touch of confusion";
11874                 if (desc) return "Confuses a monster when you attack.";
11875 #endif
11876                 if (cast)
11877                 {
11878 #ifdef JP
11879                         msg_print("¤¢¤Ê¤¿¤Î¼ê¤¬ÀÖ¤¯µ±¤­»Ï¤á¤¿¡£");
11880 #else
11881                         msg_print("Your hands glow bright red.");
11882 #endif
11883                 }
11884                 if (stop)
11885                 {
11886 #ifdef JP
11887                         msg_print("¼ê¤Îµ±¤­¤¬¤Ê¤¯¤Ê¤Ã¤¿¡£");
11888 #else
11889                         msg_print("Brightness on your hands disappeard.");
11890 #endif
11891                 }
11892                 break;
11893
11894         case 14:
11895 #ifdef JP
11896                 if (name) return "ÆùÂζ¯²½";
11897                 if (desc) return "½Ñ¼Ô¤ÎÏÓÎÏ¡¢´ïÍѤµ¡¢Âѵ×ÎϤò¾å¾º¤µ¤»¤ë¡£¹¶·â²ó¿ô¤Î¾å¸Â¤ò 1 Áý²Ã¤µ¤»¤ë¡£";
11898 #else
11899                 if (name) return "Building up";
11900                 if (desc) return "Attempts to increases your strength, dexterity and constitusion.";
11901 #endif
11902                 if (cast)
11903                 {
11904 #ifdef JP
11905                         msg_print("¿ÈÂΤ¬¶¯¤¯¤Ê¤Ã¤¿µ¤¤¬¤·¤¿¡£");
11906 #else
11907                         msg_print("You feel your body is developed more now.");
11908 #endif
11909                 }
11910                 break;
11911
11912         case 15:
11913 #ifdef JP
11914                 if (name) return "È¿¥Æ¥ì¥Ý¡¼¥È·ë³¦";
11915                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤Î¥Æ¥ì¥Ý¡¼¥È¤òÁ˳²¤¹¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
11916 #else
11917                 if (name) return "Anti teleport barrier";
11918                 if (desc) return "Obstructs all teleportations by monsters in your sight.";
11919 #endif
11920                 power = plev * 3 / 2;
11921                 if (info) return info_power(power);
11922                 if (cast)
11923                 {
11924 #ifdef JP
11925                         msg_print("¥Æ¥ì¥Ý¡¼¥È¤òËɤ°¼ö¤¤¤ò¤«¤±¤¿¡£");
11926 #else
11927                         msg_print("You feel anyone can not teleport except you.");
11928 #endif
11929                 }
11930                 break;
11931
11932         /*** 3rd book (16-23) ***/
11933         case 16:
11934 #ifdef JP
11935                 if (name) return "¾×·â¤Î¥¯¥í¡¼¥¯";
11936                 if (desc) return "Åŵ¤¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢Æ°¤­¤¬Â®¤¯¤Ê¤ë¡£";
11937 #else
11938                 if (name) return "Cloak of shock";
11939                 if (desc) return "Gives lightning aura and a bonus to speed.";
11940 #endif
11941                 if (cast)
11942                 {
11943 #ifdef JP
11944                         msg_print("ÂΤ¬°ðºÊ¤Î¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£");
11945 #else
11946                         msg_print("You have enveloped by electrical aura!");
11947 #endif
11948                 }
11949                 if (stop)
11950                 {
11951 #ifdef JP
11952                         msg_print("°ðºÊ¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
11953 #else
11954                         msg_print("Electrical aura disappeared.");
11955 #endif
11956                 }
11957                 break;
11958
11959         case 17:
11960 #ifdef JP
11961                 if (name) return "Ã×Ì¿½ý¤Î¼£Ìþ";
11962                 if (desc) return "ÂÎÎϤä½ý¤ò²óÉü¤µ¤»¤ë¡£";
11963 #else
11964                 if (name) return "Cure critical wounds";
11965                 if (desc) return "Heals cut and HP greatry.";
11966 #endif
11967                 if (info) return info_heal(4, 10, 0);
11968                 if (cast)
11969                 {
11970 #ifdef JP
11971                         msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
11972 #else
11973                         msg_print("You feel better and better.");
11974 #endif
11975                 }
11976                 if (cast || cont)
11977                 {
11978                         hp_player(damroll(4, 10));
11979                         set_stun(0);
11980                         set_cut(0);
11981                         set_poisoned(0);
11982                 }
11983                 break;
11984
11985         case 18:
11986 #ifdef JP
11987                 if (name) return "¼öÎÏÉõÆþ";
11988                 if (desc) return "ËâË¡¤ÎÆ»¶ñ¤ËËâÎϤòºÆ½¼Å¶¤¹¤ë¡£";
11989 #else
11990                 if (name) return "Recharging";
11991                 if (desc) return "Recharges a magic device.";
11992 #endif
11993                 power = plev * 2;
11994                 if (info) return info_power(power);
11995                 if (cast)
11996                 {
11997                         if (!recharge(power)) return NULL;
11998                         add = FALSE;
11999                 }
12000                 break;
12001
12002         case 19:
12003 #ifdef JP
12004                 if (name) return "»à¼ÔÉü³è";
12005                 if (desc) return "»àÂΤòÁɤ餻¤Æ¥Ú¥Ã¥È¤Ë¤¹¤ë¡£";
12006 #else
12007                 if (name) return "Animate Dead";
12008                 if (desc) return "Raises corpses and skeletons from dead.";
12009 #endif
12010                 if (cast)
12011                 {
12012 #ifdef JP
12013                         msg_print("»à¼Ô¤Ø¤Î¸Æ¤Ó¤«¤±¤ò»Ï¤á¤¿¡£");
12014 #else
12015                         msg_print("You start to call deads.!");
12016 #endif
12017                 }
12018                 if (cast || cont)
12019                 {
12020                         animate_dead(0, py, px);
12021                 }
12022                 break;
12023
12024         case 20:
12025 #ifdef JP
12026                 if (name) return "Ëɶñ¼öÇû";
12027                 if (desc) return "ÁõÈ÷¤·¤Æ¤¤¤ëËɶñ¤Ë¼ö¤¤¤ò¤«¤±¤ë¡£";
12028 #else
12029                 if (name) return "Curse armor";
12030                 if (desc) return "Curse a piece of armour that you wielding.";
12031 #endif
12032                 if (cast)
12033                 {
12034                         int item;
12035                         char *q, *s;
12036                         char o_name[MAX_NLEN];
12037                         object_type *o_ptr;
12038                         u32b f[TR_FLAG_SIZE];
12039
12040                         item_tester_hook = object_is_armour;
12041 #ifdef JP
12042                         q = "¤É¤ì¤ò¼ö¤¤¤Þ¤¹¤«¡©";
12043                         s = "Ëɶñ¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
12044 #else
12045                         q = "Which piece of armour do you curse?";
12046                         s = "You wield no piece of armours.";
12047 #endif
12048
12049                         if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
12050
12051                         o_ptr = &inventory[item];
12052                         object_desc(o_name, o_ptr, OD_NAME_ONLY);
12053                         object_flags(o_ptr, f);
12054
12055 #ifdef JP
12056                         if (!get_check(format("ËÜÅö¤Ë %s ¤ò¼ö¤¤¤Þ¤¹¤«¡©", o_name))) return FALSE;
12057 #else
12058                         if (!get_check(format("Do you curse %s, really¡©", o_name))) return FALSE;
12059 #endif
12060
12061                         if (!one_in_(3) &&
12062                                 (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
12063                         {
12064 #ifdef JP
12065                                 msg_format("%s ¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡£", o_name);
12066 #else
12067                                 msg_format("%s resists the effect.", o_name);
12068 #endif
12069                                 if (one_in_(3))
12070                                 {
12071                                         if (o_ptr->to_d > 0)
12072                                         {
12073                                                 o_ptr->to_d -= randint1(3) % 2;
12074                                                 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
12075                                         }
12076                                         if (o_ptr->to_h > 0)
12077                                         {
12078                                                 o_ptr->to_h -= randint1(3) % 2;
12079                                                 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
12080                                         }
12081                                         if (o_ptr->to_a > 0)
12082                                         {
12083                                                 o_ptr->to_a -= randint1(3) % 2;
12084                                                 if (o_ptr->to_a < 0) o_ptr->to_a = 0;
12085                                         }
12086 #ifdef JP
12087                                         msg_format("%s ¤ÏÎô²½¤·¤Æ¤·¤Þ¤Ã¤¿¡£", o_name);
12088 #else
12089                                         msg_format("Your %s was disenchanted!", o_name);
12090 #endif
12091                                 }
12092                         }
12093                         else
12094                         {
12095                                 int power = 0;
12096 #ifdef JP
12097                                 msg_format("¶²ÉݤΰŹõ¥ª¡¼¥é¤¬¤¢¤Ê¤¿¤Î%s¤òÊñ¤ß¹þ¤ó¤À¡ª", o_name);
12098 #else
12099                                 msg_format("A terrible black aura blasts your %s!", o_name);
12100 #endif
12101                                 o_ptr->curse_flags |= (TRC_CURSED);
12102
12103                                 if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
12104                                 {
12105
12106                                         if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
12107                                         if (one_in_(666))
12108                                         {
12109                                                 o_ptr->curse_flags |= (TRC_TY_CURSE);
12110                                                 if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
12111
12112                                                 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
12113                                                 add_flag(o_ptr->art_flags, TR_RES_POIS);
12114                                                 add_flag(o_ptr->art_flags, TR_RES_DARK);
12115                                                 add_flag(o_ptr->art_flags, TR_RES_NETHER);
12116 #ifdef JP
12117                                                 msg_print("·ì¤À¡ª·ì¤À¡ª·ì¤À¡ª");
12118 #else
12119                                                 msg_print("Blood, Blood, Blood!");
12120 #endif
12121                                                 power = 2;
12122                                         }
12123                                 }
12124
12125                                 o_ptr->curse_flags |= get_curse(power, o_ptr);
12126                         }
12127
12128                         p_ptr->update |= (PU_BONUS);
12129                         add = FALSE;
12130                 }
12131                 break;
12132
12133         case 21:
12134 #ifdef JP
12135                 if (name) return "±Æ¤Î¥¯¥í¡¼¥¯";
12136                 if (desc) return "±Æ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢Å¨¤Ë±Æ¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
12137 #else
12138                 if (name) return "Cloak of shadow";
12139                 if (desc) return "Gives aura of shadow.";
12140 #endif
12141                 if (cast)
12142                 {
12143                         object_type *o_ptr = &inventory[INVEN_OUTER];
12144
12145                         if (!o_ptr->k_idx)
12146                         {
12147 #ifdef JP
12148                                 msg_print("¥¯¥í¡¼¥¯¤ò¿È¤Ë¤Ä¤±¤Æ¤¤¤Ê¤¤¡ª");
12149 #else
12150                                 msg_print("You don't ware any cloak.");
12151 #endif
12152                                 return NULL;
12153                         }
12154                         else if (!object_is_cursed(o_ptr))
12155                         {
12156 #ifdef JP
12157                                 msg_print("¥¯¥í¡¼¥¯¤Ï¼ö¤ï¤ì¤Æ¤¤¤Ê¤¤¡ª");
12158 #else
12159                                 msg_print("Your cloak is not cursed.");
12160 #endif
12161                                 return NULL;
12162                         }
12163                         else
12164                         {
12165 #ifdef JP
12166                                 msg_print("±Æ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤Ã¤¿¡£");
12167 #else
12168                                 msg_print("You have enveloped by shadow aura!");
12169 #endif
12170                         }
12171                 }
12172                 if (cont)
12173                 {
12174                         object_type *o_ptr = &inventory[INVEN_OUTER];
12175
12176                         if ((!o_ptr->k_idx) || (!object_is_cursed(o_ptr)))
12177                         {
12178                                 do_spell(REALM_HEX, spell, SPELL_STOP);
12179                                 p_ptr->magic_num1[0] &= ~(1L << spell);
12180                                 p_ptr->magic_num2[0]--;
12181                                 if (!p_ptr->magic_num2[0]) set_action(ACTION_NONE);
12182                         }
12183                 }
12184                 if (stop)
12185                 {
12186 #ifdef JP
12187                         msg_print("±Æ¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
12188 #else
12189                         msg_print("Shadow aura disappeared.");
12190 #endif
12191                 }
12192                 break;
12193
12194         case 22:
12195 #ifdef JP
12196                 if (name) return "¶ìÄˤòËâÎϤË";
12197                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÀº¿À¥À¥á¡¼¥¸Í¿¤¨¡¢ËâÎϤòµÛ¤¤¼è¤ë¡£";
12198 #else
12199                 if (name) return "Pains to mana";
12200                 if (desc) return "Deals psychic damages to all monsters in sight, and drains some mana.";
12201 #endif
12202                 power = plev * 3 / 2;
12203                 if (info) return info_damage(1, power, 0);
12204                 if (cast || cont)
12205                 {
12206                         project_hack(GF_PSI_DRAIN, randint1(power));
12207                 }
12208                 break;
12209
12210         case 23:
12211 #ifdef JP
12212                 if (name) return "ÌܤˤÏÌܤò";
12213                 if (desc) return "ÂÇ·â¤äËâË¡¤Ç¼õ¤±¤¿¥À¥á¡¼¥¸¤ò¡¢¹¶·â¸µ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤âÍ¿¤¨¤ë¡£";
12214 #else
12215                 if (name) return "Eye for an eye";
12216                 if (desc) return "Returns same damage which you got to the monster which damaged you.";
12217 #endif
12218                 if (cast)
12219                 {
12220 #ifdef JP
12221                         msg_print("Éü½²¤·¤¿¤¤Íß˾¤Ë¤«¤é¤ì¤¿¡£");
12222 #else
12223                         msg_print("You wish strongly you want to revenge anything.");
12224 #endif
12225                 }
12226                 break;
12227
12228         /*** 4th book (24-31) ***/
12229         case 24:
12230 #ifdef JP
12231                 if (name) return "È¿Áý¿£·ë³¦";
12232                 if (desc) return "¤½¤Î³¬¤ÎÁý¿£¤¹¤ë¥â¥ó¥¹¥¿¡¼¤ÎÁý¿£¤òÁ˻ߤ¹¤ë¡£";
12233 #else
12234                 if (name) return "Anti multiply barrier";
12235                 if (desc) return "Obstructs all multiplying by monsters in entire floor.";
12236 #endif
12237                 if (cast)
12238                 {
12239 #ifdef JP
12240                         msg_print("Áý¿£¤òÁ˻ߤ¹¤ë¼ö¤¤¤ò¤«¤±¤¿¡£");
12241 #else
12242                         msg_print("You feel anyone can not already multiply.");
12243 #endif
12244                 }
12245                 break;
12246
12247         case 25:
12248 #ifdef JP
12249                 if (name) return "À¸Ì¿ÎÏÉü³è";
12250                 if (desc) return "·Ð¸³Ãͤò½ù¡¹¤ËÉü³è¤·¡¢¸º¾¯¤·¤¿Ç½ÎÏÃͤò²óÉü¤µ¤»¤ë¡£";
12251 #else
12252                 if (name) return "Restore life";
12253                 if (desc) return "Restores life energy and status.";
12254 #endif
12255                 if (cast)
12256                 {
12257 #ifdef JP
12258                         msg_print("À¸Ì¿ÎϤ¬Ìá¤ê»Ï¤á¤¿¡£");
12259 #else
12260                         msg_print("You feel your life energy starting to return.");
12261 #endif
12262                 }
12263                 if (cast || cont)
12264                 {
12265                         bool flag = FALSE;
12266                         int d = (p_ptr->max_exp - p_ptr->exp);
12267                         int r = (p_ptr->exp / 20);
12268                         int i;
12269
12270                         if (d > 0)
12271                         {
12272                                 if (d < r)
12273                                         p_ptr->exp = p_ptr->max_exp;
12274                                 else
12275                                         p_ptr->exp += r;
12276
12277                                 /* Check the experience */
12278                                 check_experience();
12279
12280                                 flag = TRUE;
12281                         }
12282                         for (i = A_STR; i < 6; i ++)
12283                         {
12284                                 if (p_ptr->stat_cur[i] < p_ptr->stat_max[i])
12285                                 {
12286                                         if (p_ptr->stat_cur[i] < 18)
12287                                                 p_ptr->stat_cur[i]++;
12288                                         else
12289                                                 p_ptr->stat_cur[i] += 10;
12290
12291                                         if (p_ptr->stat_cur[i] > p_ptr->stat_max[i])
12292                                                 p_ptr->stat_cur[i] = p_ptr->stat_max[i];
12293
12294                                         /* Recalculate bonuses */
12295                                         p_ptr->update |= (PU_BONUS);
12296
12297                                         flag = TRUE;
12298                                 }
12299                         }
12300
12301                         if (!flag)
12302                         {
12303 #ifdef JP
12304                                 msg_format("%s¤Î¼öʸ¤Î±Ó¾§¤ò¤ä¤á¤¿¡£", do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME));
12305 #else
12306                                 msg_format("Finish casting '%^s'.", do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME));
12307 #endif
12308                                 p_ptr->magic_num1[0] &= ~(1L << HEX_RESTORE);
12309                                 if (cont) p_ptr->magic_num2[0]--;
12310                                 if (p_ptr->magic_num2) p_ptr->action = ACTION_NONE;
12311
12312                                 /* Redraw status */
12313                                 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
12314                                 p_ptr->redraw |= (PR_EXTRA);
12315
12316                                 return "";
12317                         }
12318                 }
12319                 break;
12320
12321         case 26:
12322 #ifdef JP
12323                 if (name) return "¼öÎϵۼý";
12324                 if (desc) return "¼ö¤ï¤ì¤¿Éð´ï¤Î¼ö¤¤¤òµÛ¼ý¤·¤ÆËâÎϤò²óÉü¤¹¤ë¡£";
12325 #else
12326                 if (name) return "Drain curse power";
12327                 if (desc) return "Drains curse on your weapon and heals SP a little.";
12328 #endif
12329                 if (cast)
12330                 {
12331                         int item;
12332                         char *s, *q;
12333                         u32b f[TR_FLAG_SIZE];
12334                         object_type *o_ptr;
12335
12336                         item_tester_hook = item_tester_hook_cursed;
12337 #ifdef JP
12338                         q = "¤É¤ÎÁõÈ÷Éʤ«¤éµÛ¼ý¤·¤Þ¤¹¤«¡©";
12339                         s = "¼ö¤ï¤ì¤¿¥¢¥¤¥Æ¥à¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
12340 #else
12341                         q = "Which cursed equipment do you drain mana from?";
12342                         s = "You have no cursed equipment.";
12343 #endif
12344
12345                         if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
12346
12347                         o_ptr = &inventory[item];
12348                         object_flags(o_ptr, f);
12349
12350                         p_ptr->csp += (p_ptr->lev / 5) + randint1(p_ptr->lev / 5);
12351                         if (have_flag(f, TR_TY_CURSE) || (o_ptr->curse_flags & TRC_TY_CURSE)) p_ptr->csp += randint1(5);
12352                         if (p_ptr->csp > p_ptr->msp) p_ptr->csp = p_ptr->msp;
12353
12354                         if (o_ptr->curse_flags & TRC_PERMA_CURSE)
12355                         {
12356                                 /* Nothing */
12357                         }
12358                         else if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
12359                         {
12360                                 if (one_in_(7))
12361                                 {
12362 #ifdef JP
12363                                         msg_print("¼ö¤¤¤òÁ´¤ÆµÛ¤¤¼è¤Ã¤¿¡£");
12364 #else
12365                                         msg_print("Heavy curse vanished away.");
12366 #endif
12367                                         o_ptr->curse_flags = 0L;
12368                                 }
12369                         }
12370                         else if ((o_ptr->curse_flags & (TRC_CURSED)) && one_in_(3))
12371                         {
12372 #ifdef JP
12373                                 msg_print("¼ö¤¤¤òÁ´¤ÆµÛ¤¤¼è¤Ã¤¿¡£");
12374 #else
12375                                 msg_print("Curse vanished away.");
12376 #endif
12377                                 o_ptr->curse_flags = 0L;
12378                         }
12379
12380                         add = FALSE;
12381                 }
12382                 break;
12383
12384         case 27:
12385 #ifdef JP
12386                 if (name) return "µÛ·ì¤Î¿Ï";
12387                 if (desc) return "µÛ·ì°À­¤Ç¹¶·â¤¹¤ë¡£";
12388 #else
12389                 if (name) return "Swords to vampires";
12390                 if (desc) return "Gives vampiric ability to your weapon.";
12391 #endif
12392                 if (cast)
12393                 {
12394 #ifdef JP
12395                         msg_print("¤¢¤Ê¤¿¤ÎÉð´ï¤¬·ì¤òÍߤ·¤Æ¤¤¤ë¡£");
12396 #else
12397                         if (!empty_hands(FALSE))
12398                                 msg_print("Your weapons want more blood now.");
12399                         else
12400                                 msg_print("Your weapon wants more blood now.");
12401 #endif
12402                 }
12403                 if (stop)
12404                 {
12405 #ifdef JP
12406                         msg_print("Éð´ï¤Î³é˾¤¬¾Ã¤¨µî¤Ã¤¿¡£");
12407 #else
12408                         msg_format("Thirsty of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
12409 #endif
12410                 }
12411                 break;
12412
12413         case 28:
12414 #ifdef JP
12415                 if (name) return "Û¯Û°¤Î¸ÀÍÕ";
12416                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤òÛ¯Û°¤È¤µ¤»¤ë¡£";
12417 #else
12418                 if (name) return "Word of stun";
12419                 if (desc) return "Stuns all monsters in your sight.";
12420 #endif
12421                 power = plev * 4;
12422                 if (info) return info_power(power);
12423                 if (cast || cont)
12424                 {
12425                         stun_monsters(power);
12426                 }
12427                 break;
12428
12429         case 29:
12430 #ifdef JP
12431                 if (name) return "±Æ°ÜÆ°";
12432                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ÎÎ٤Υޥ¹¤Ë½Ö´Ö°ÜÆ°¤¹¤ë¡£";
12433 #else
12434                 if (name) return "Moving into shadow";
12435                 if (desc) return "Teleports you close to a monster.";
12436 #endif
12437                 if (cast)
12438                 {
12439                         int i, y, x, dir;
12440                         bool flag;
12441
12442                         for (i = 0; i < 3; i++)
12443                         {
12444                                 if (!tgt_pt(&x, &y)) return FALSE;
12445
12446                                 flag = FALSE;
12447
12448                                 for (dir = 0; dir < 8; dir++)
12449                                 {
12450                                         int dy = y + ddy_ddd[dir];
12451                                         int dx = x + ddx_ddd[dir];
12452                                         if (dir == 5) continue;
12453                                         if(cave[dy][dx].m_idx) flag = TRUE;
12454                                 }
12455
12456                                 if (!cave_empty_bold(y, x) || (cave[y][x].info & CAVE_ICKY) ||
12457                                         (distance(y, x, py, px) > plev + 2))
12458                                 {
12459 #ifdef JP
12460                                         msg_print("¤½¤³¤Ë¤Ï°ÜÆ°¤Ç¤­¤Ê¤¤¡£");
12461 #else
12462                                         msg_print("Can not teleport to there.");
12463 #endif
12464                                         continue;
12465                                 }
12466                                 break;
12467                         }
12468
12469                         if (flag && randint0(plev * plev / 2))
12470                         {
12471                                 teleport_player_to(y, x, 0L);
12472                         }
12473                         else
12474                         {
12475 #ifdef JP
12476                                 msg_print("¤ª¤Ã¤È¡ª");
12477 #else
12478                                 msg_print("Oops!");
12479 #endif
12480                                 teleport_player(30, 0L);
12481                         }
12482
12483                         add = FALSE;
12484                 }
12485                 break;
12486
12487         case 30:
12488 #ifdef JP
12489                 if (name) return "È¿ËâË¡·ë³¦";
12490                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ÎËâË¡¤òÁ˳²¤¹¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
12491 #else
12492                 if (name) return "Anti magic barrier";
12493                 if (desc) return "Obstructs all magic spell of monsters in your sight.";
12494 #endif
12495                 power = plev * 3 / 2;
12496                 if (info) return info_power(power);
12497                 if (cast)
12498                 {
12499 #ifdef JP
12500                         msg_print("ËâË¡¤òËɤ°¼ö¤¤¤ò¤«¤±¤¿¡£");
12501 #else
12502                         msg_print("You feel anyone can not cast spells except you.");
12503 #endif
12504                 }
12505                 break;
12506
12507         case 31:
12508 #ifdef JP
12509                 if (name) return "Éü½²¤ÎÀë¹ð";
12510                 if (desc) return "¿ô¥¿¡¼¥ó¸å¤Ë¤½¤ì¤Þ¤Ç¼õ¤±¤¿¥À¥á¡¼¥¸¤Ë±þ¤¸¤¿°ÒÎϤÎÃϹö¤Î¹å²Ð¤ÎÃƤòÊü¤Ä¡£";
12511 #else
12512                 if (name) return "Revenge sentence";
12513                 if (desc) return "Fires  a ball of hell fire to try revenging after few turns.";
12514 #endif
12515                 power = p_ptr->magic_num1[2];
12516                 if (info) return info_damage(0, 0, power);
12517                 if (cast)
12518                 {
12519                         int r;
12520                         int a = 3 - (p_ptr->pspeed - 100) / 10;
12521                         r = 1 + randint1(2) + MAX(0, MIN(3, a));
12522
12523                         if (p_ptr->magic_num2[2] > 0)
12524                         {
12525 #ifdef JP
12526                                 msg_print("¤¹¤Ç¤ËÉü½²¤ÏÀë¹ðºÑ¤ß¤À¡£");
12527 #else
12528                                 msg_print("You already pronounced your revenge.");
12529 #endif
12530                                 return NULL;
12531                         }
12532
12533                         p_ptr->magic_num2[1] = 2;
12534                         p_ptr->magic_num2[2] = r;
12535 #ifdef JP
12536                         msg_format("¤¢¤Ê¤¿¤ÏÉü½²¤òÀë¹ð¤·¤¿¡£¤¢¤È %d ¥¿¡¼¥ó¡£", r);
12537 #else
12538                         msg_format("You pronounce your revenge. %d turns left.", r);
12539 #endif
12540                         add = FALSE;
12541                 }
12542                 if (cont)
12543                 {
12544                         p_ptr->magic_num2[2]--;
12545
12546                         if (p_ptr->magic_num2[2] <= 0)
12547                         {
12548                                 int dir;
12549
12550                                 if (power)
12551                                 {
12552                                         command_dir = 0;
12553
12554                                         do
12555                                         {
12556 #ifdef JP
12557                                                 msg_print("Éü½²¤Î»þ¤À¡ª");
12558 #else
12559                                                 msg_print("Time to revenge!");
12560 #endif
12561                                         }
12562                                         while (!get_aim_dir(&dir));
12563
12564                                         fire_ball(GF_HELL_FIRE, dir, power, 1);
12565
12566                                         if (p_ptr->wizard)
12567                                         {
12568 #ifdef JP
12569                                                 msg_format("%dÅÀ¤Î¥À¥á¡¼¥¸¤òÊÖ¤·¤¿¡£", power);
12570 #else
12571                                                 msg_format("You return %d damages.", power);
12572 #endif
12573                                         }
12574                                 }
12575                                 else
12576                                 {
12577 #ifdef JP
12578                                         msg_print("Éü½²¤¹¤ëµ¤¤¬¼º¤»¤¿¡£");
12579 #else
12580                                         msg_print("You are not a mood to revenge.");
12581 #endif
12582                                 }
12583                                 p_ptr->magic_num1[2] = 0;
12584                         }
12585                 }
12586                 break;
12587         }
12588
12589         /* start casting */
12590         if ((cast) && (add))
12591         {
12592                 /* add spell */
12593                 p_ptr->magic_num1[0] |= 1L << (spell);
12594                 p_ptr->magic_num2[0]++;
12595
12596                 if (p_ptr->action != ACTION_SPELL) set_action(ACTION_SPELL);
12597         }
12598
12599         /* Redraw status */
12600         if (!info)
12601         {
12602                 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
12603                 p_ptr->redraw |= (PR_EXTRA | PR_HP | PR_MANA);
12604         }
12605
12606         return "";
12607 }
12608
12609
12610 /*
12611  * Do everything for each spell
12612  */
12613 cptr do_spell(int realm, int spell, int mode)
12614 {
12615         switch (realm)
12616         {
12617         case REALM_LIFE:     return do_life_spell(spell, mode);
12618         case REALM_SORCERY:  return do_sorcery_spell(spell, mode);
12619         case REALM_NATURE:   return do_nature_spell(spell, mode);
12620         case REALM_CHAOS:    return do_chaos_spell(spell, mode);
12621         case REALM_DEATH:    return do_death_spell(spell, mode);
12622         case REALM_TRUMP:    return do_trump_spell(spell, mode);
12623         case REALM_ARCANE:   return do_arcane_spell(spell, mode);
12624         case REALM_CRAFT:    return do_craft_spell(spell, mode);
12625         case REALM_DAEMON:   return do_daemon_spell(spell, mode);
12626         case REALM_CRUSADE:  return do_crusade_spell(spell, mode);
12627         case REALM_MUSIC:    return do_music_spell(spell, mode);
12628         case REALM_HISSATSU: return do_hissatsu_spell(spell, mode);
12629         case REALM_HEX:      return do_hex_spell(spell, mode);
12630         }
12631
12632         return NULL;
12633 }