OSDN Git Service

a8f11128c1668c0e546dbe28bc78ff4afe5db952
[hengband/hengband.git] / src / do-spell.c
1 /*!
2     @file do-spell.c
3     @brief ËâË¡¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Èȯư / Purpose: Do everything for each spell
4     @date 2013/12/31
5     @author
6     2013 Deskull rearranged comment for Doxygen.
7  */
8
9 #include "angband.h"
10
11
12 /*!
13  * @brief
14  * ËâË¡¤Î¸ú²Ì¤ò¡Ö¥­¥ã¥×¥·¥ç¥ó:¥À¥¤¥¹¡ÜÄê¿ôÃ͡פΥե©¡¼¥Þ¥Ã¥È¤Ç½ÐÎϤ¹¤ë / Generate dice info string such as "foo 2d10"
15  * @param str ¥­¥ã¥×¥·¥ç¥ó
16  * @param dice ¥À¥¤¥¹¿ô
17  * @param sides ¥À¥¤¥¹ÌÜ
18  * @param base ¸ÇÄêÃÍ
19  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
20  */
21 static cptr info_string_dice(cptr str, int dice, int sides, int base)
22 {
23         /* Fix value */
24         if (!dice)
25                 return format("%s%d", str, base);
26
27         /* Dice only */
28         else if (!base)
29                 return format("%s%dd%d", str, dice, sides);
30
31         /* Dice plus base value */
32         else
33                 return format("%s%dd%d%+d", str, dice, sides, base);
34 }
35
36
37 /*!
38  * @brief ËâË¡¤Ë¤è¤ë¥À¥á¡¼¥¸¤ò½ÐÎϤ¹¤ë / Generate damage-dice info string such as "dam 2d10"
39  * @param dice ¥À¥¤¥¹¿ô
40  * @param sides ¥À¥¤¥¹ÌÜ
41  * @param base ¸ÇÄêÃÍ
42  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
43  */
44 static cptr info_damage(int dice, int sides, int base)
45 {
46 #ifdef JP
47         return info_string_dice("»½ý:", dice, sides, base);
48 #else
49         return info_string_dice("dam ", dice, sides, base);
50 #endif
51 }
52
53 /*!
54  * @brief ËâË¡¤Î¸ú²Ì»þ´Ö¤ò½ÐÎϤ¹¤ë / Generate duration info string such as "dur 20+1d20"
55  * @param base ¸ÇÄêÃÍ
56  * @param sides ¥À¥¤¥¹ÌÜ
57  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
58  */
59 static cptr info_duration(int base, int sides)
60 {
61 #ifdef JP
62         return format("´ü´Ö:%d+1d%d", base, sides);
63 #else
64         return format("dur %d+1d%d", base, sides);
65 #endif
66 }
67
68 /*!
69  * @brief ËâË¡¤Î¸ú²ÌÈϰϤò½ÐÎϤ¹¤ë / Generate range info string such as "range 5"
70  * @param range ¸ú²ÌÈÏ°Ï
71  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
72  */
73 static cptr info_range(int range)
74 {
75 #ifdef JP
76         return format("ÈÏ°Ï:%d", range);
77 #else
78         return format("range %d", range);
79 #endif
80 }
81
82 /*!
83  * @brief ËâË¡¤Ë¤è¤ë²óÉüÎ̤ò½ÐÎϤ¹¤ë / Generate heal info string such as "heal 2d8"
84  * @param dice ¥À¥¤¥¹¿ô
85  * @param sides ¥À¥¤¥¹ÌÜ
86  * @param base ¸ÇÄêÃÍ
87  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
88  */
89 static cptr info_heal(int dice, int sides, int base)
90 {
91 #ifdef JP
92         return info_string_dice("²óÉü:", dice, sides, base);
93 #else
94         return info_string_dice("heal ", dice, sides, base);
95 #endif
96 }
97
98 /*!
99  * @brief ËâË¡¸ú²Ìȯư¤Þ¤Ç¤ÎÃٱ䥿¡¼¥ó¤ò½ÐÎϤ¹¤ë / Generate delay info string such as "delay 15+1d15"
100  * @param base ¸ÇÄêÃÍ
101  * @param sides ¥À¥¤¥¹ÌÜ
102  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
103  */
104 static cptr info_delay(int base, int sides)
105 {
106 #ifdef JP
107         return format("ÃÙ±ä:%d+1d%d", base, sides);
108 #else
109         return format("delay %d+1d%d", base, sides);
110 #endif
111 }
112
113
114 /*!
115  * @brief ËâË¡¤Ë¤è¤ë¥À¥á¡¼¥¸¤ò½ÐÎϤ¹¤ë(¸ÇÄêÃÍ¡õÊ£¿ô²ó½èÍý) / Generate multiple-damage info string such as "dam 25 each"
116  * @param dam ¸ÇÄêÃÍ
117  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
118  */
119 static cptr info_multi_damage(int dam)
120 {
121 #ifdef JP
122         return format("»½ý:³Æ%d", dam);
123 #else
124         return format("dam %d each", dam);
125 #endif
126 }
127
128
129 /*!
130  * @brief ËâË¡¤Ë¤è¤ë¥À¥á¡¼¥¸¤ò½ÐÎϤ¹¤ë(¥À¥¤¥¹¤Î¤ß¡õÊ£¿ô²ó½èÍý) / Generate multiple-damage-dice info string such as "dam 5d2 each"
131  * @param dice ¥À¥¤¥¹¿ô
132  * @param sides ¥À¥¤¥¹ÌÜ
133  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
134  */
135 static cptr info_multi_damage_dice(int dice, int sides)
136 {
137 #ifdef JP
138         return format("»½ý:³Æ%dd%d", dice, sides);
139 #else
140         return format("dam %dd%d each", dice, sides);
141 #endif
142 }
143
144 /*!
145  * @brief ËâË¡¤Ë¤è¤ë°ìÈÌŪ¤Ê¸úÎÏÃͤò½ÐÎϤ¹¤ë¡Ê¸ÇÄêÃÍ¡Ë / Generate power info string such as "power 100"
146  * @param power ¸ÇÄêÃÍ
147  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
148  */
149 static cptr info_power(int power)
150 {
151 #ifdef JP
152         return format("¸úÎÏ:%d", power);
153 #else
154         return format("power %d", power);
155 #endif
156 }
157
158
159 /*!
160  * @brief ËâË¡¤Ë¤è¤ë°ìÈÌŪ¤Ê¸úÎÏÃͤò½ÐÎϤ¹¤ë¡Ê¥À¥¤¥¹ÃÍ¡Ë / Generate power info string such as "power 100"
161  * @param dice ¥À¥¤¥¹¿ô
162  * @param sides ¥À¥¤¥¹ÌÜ
163  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
164  */
165 /*
166  * Generate power info string such as "power 1d100"
167  */
168 static cptr info_power_dice(int dice, int sides)
169 {
170 #ifdef JP
171         return format("¸úÎÏ:%dd%d", dice, sides);
172 #else
173         return format("power %dd%d", dice, sides);
174 #endif
175 }
176
177
178 /*!
179  * @brief ËâË¡¤Î¸ú²ÌȾ·Â¤ò½ÐÎϤ¹¤ë / Generate radius info string such as "rad 100"
180  * @param rad ¸ú²ÌȾ·Â
181  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
182  */
183 static cptr info_radius(int rad)
184 {
185 #ifdef JP
186         return format("Ⱦ·Â:%d", rad);
187 #else
188         return format("rad %d", rad);
189 #endif
190 }
191
192
193 /*!
194  * @brief ËâË¡¸ú²Ì¤Î¸Â³¦½ÅÎ̤ò½ÐÎϤ¹¤ë / Generate weight info string such as "max wgt 15"
195  * @param weight ºÇÂç½ÅÎÌ
196  * @return ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë½¾¤¤À°·Á¤µ¤ì¤¿Ê¸»úÎó
197  */
198 static cptr info_weight(int weight)
199 {
200 #ifdef JP
201         return format("ºÇÂç½ÅÎÌ:%d.%dkg", lbtokg1(weight), lbtokg2(weight));
202 #else
203         return format("max wgt %d", weight/10);
204 #endif
205 }
206
207
208 /*
209  * Prepare standard probability to become beam for fire_bolt_or_beam()
210  */
211 static int beam_chance(void)
212 {
213         if (p_ptr->pclass == CLASS_MAGE)
214                 return p_ptr->lev;
215         if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER)
216                 return p_ptr->lev + 10;
217
218         return p_ptr->lev / 2;
219 }
220
221
222 /*
223  * Handle summoning and failure of trump spells
224  */
225 static bool trump_summoning(int num, bool pet, int y, int x, int lev, int type, u32b mode)
226 {
227         int plev = p_ptr->lev;
228
229         int who;
230         int i;
231         bool success = FALSE;
232
233         /* Default level */
234         if (!lev) lev = plev * 2 / 3 + randint1(plev / 2);
235
236         if (pet)
237         {
238                 /* Become pet */
239                 mode |= PM_FORCE_PET;
240
241                 /* Only sometimes allow unique monster */
242                 if (mode & PM_ALLOW_UNIQUE)
243                 {
244                         /* Forbid often */
245                         if (randint1(50 + plev) >= plev / 10)
246                                 mode &= ~PM_ALLOW_UNIQUE;
247                 }
248
249                 /* Player is who summons */
250                 who = -1;
251         }
252         else
253         {
254                 /* Prevent taming, allow unique monster */
255                 mode |= PM_NO_PET;
256
257                 /* Behave as if they appear by themselfs */
258                 who = 0;
259         }
260
261         for (i = 0; i < num; i++)
262         {
263                 if (summon_specific(who, y, x, lev, type, mode))
264                         success = TRUE;
265         }
266
267         if (!success)
268         {
269 #ifdef JP
270                 msg_print("ï¤â¤¢¤Ê¤¿¤Î¥«¡¼¥É¤Î¸Æ¤ÓÀ¼¤ËÅú¤¨¤Ê¤¤¡£");
271 #else
272                 msg_print("Nobody answers to your Trump call.");
273 #endif
274         }
275
276         return success;
277 }
278
279
280 /*
281  * This spell should become more useful (more controlled) as the
282  * player gains experience levels.  Thus, add 1/5 of the player's
283  * level to the die roll.  This eliminates the worst effects later on,
284  * while keeping the results quite random.  It also allows some potent
285  * effects only at high level.
286  */
287 static void cast_wonder(int dir)
288 {
289         int plev = p_ptr->lev;
290         int die = randint1(100) + plev / 5;
291         int vir = virtue_number(V_CHANCE);
292
293         if (vir)
294         {
295                 if (p_ptr->virtues[vir - 1] > 0)
296                 {
297                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
298                 }
299                 else
300                 {
301                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
302                 }
303         }
304
305         if (die < 26)
306                 chg_virtue(V_CHANCE, 1);
307
308         if (die > 100)
309         {
310 #ifdef JP
311                 msg_print("¤¢¤Ê¤¿¤ÏÎϤ¬¤ß¤Ê¤®¤ë¤Î¤ò´¶¤¸¤¿¡ª");
312 #else
313                 msg_print("You feel a surge of power!");
314 #endif
315         }
316
317         if (die < 8) clone_monster(dir);
318         else if (die < 14) speed_monster(dir, plev);
319         else if (die < 26) heal_monster(dir, damroll(4, 6));
320         else if (die < 31) poly_monster(dir, plev);
321         else if (die < 36)
322                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir,
323                                   damroll(3 + ((plev - 1) / 5), 4));
324         else if (die < 41) confuse_monster(dir, plev);
325         else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
326         else if (die < 51) (void)lite_line(dir, damroll(6, 8));
327         else if (die < 56)
328                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir,
329                                   damroll(3 + ((plev - 5) / 4), 8));
330         else if (die < 61)
331                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir,
332                                   damroll(5 + ((plev - 5) / 4), 8));
333         else if (die < 66)
334                 fire_bolt_or_beam(beam_chance(), GF_ACID, dir,
335                                   damroll(6 + ((plev - 5) / 4), 8));
336         else if (die < 71)
337                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir,
338                                   damroll(8 + ((plev - 5) / 4), 8));
339         else if (die < 76) drain_life(dir, 75);
340         else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
341         else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2);
342         else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3);
343         else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3);
344         else if (die < 101) drain_life(dir, 100 + plev);
345         else if (die < 104)
346         {
347                 earthquake(py, px, 12);
348         }
349         else if (die < 106)
350         {
351                 (void)destroy_area(py, px, 13 + randint0(5), FALSE);
352         }
353         else if (die < 108)
354         {
355                 symbol_genocide(plev+50, TRUE);
356         }
357         else if (die < 110) dispel_monsters(120);
358         else /* RARE */
359         {
360                 dispel_monsters(150);
361                 slow_monsters(plev);
362                 sleep_monsters(plev);
363                 hp_player(300);
364         }
365 }
366
367
368 static void cast_invoke_spirits(int dir)
369 {
370         int plev = p_ptr->lev;
371         int die = randint1(100) + plev / 5;
372         int vir = virtue_number(V_CHANCE);
373
374         if (vir)
375         {
376                 if (p_ptr->virtues[vir - 1] > 0)
377                 {
378                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
379                 }
380                 else
381                 {
382                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
383                 }
384         }
385
386 #ifdef JP
387         msg_print("¤¢¤Ê¤¿¤Ï»à¼Ô¤¿¤Á¤ÎÎϤò¾·½¸¤·¤¿...");
388 #else
389         msg_print("You call on the power of the dead...");
390 #endif
391         if (die < 26)
392                 chg_virtue(V_CHANCE, 1);
393
394         if (die > 100)
395         {
396 #ifdef JP
397                 msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤ÎϤΤ¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
398 #else
399                 msg_print("You feel a surge of eldritch force!");
400 #endif
401         }
402
403
404         if (die < 8)
405         {
406 #ifdef JP
407                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¤¢¤Ê¤¿¤Î¼þ¤ê¤ÎÃÏÌ̤«¤éµà¤Á¤¿¿Í±Æ¤¬Î©¤Á¾å¤¬¤Ã¤Æ¤­¤¿¡ª");
408 #else
409                 msg_print("Oh no! Mouldering forms rise from the earth around you!");
410 #endif
411
412                 (void)summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
413                 chg_virtue(V_UNLIFE, 1);
414         }
415         else if (die < 14)
416         {
417 #ifdef JP
418                 msg_print("̾¾õ¤·Æñ¤¤¼Ù°­¤Ê¸ºß¤¬¤¢¤Ê¤¿¤Î¿´¤òÄ̤ê²á¤®¤Æ¹Ô¤Ã¤¿...");
419 #else
420                 msg_print("An unnamable evil brushes against your mind...");
421 #endif
422
423                 set_afraid(p_ptr->afraid + randint1(4) + 4);
424         }
425         else if (die < 26)
426         {
427 #ifdef JP
428                 msg_print("¤¢¤Ê¤¿¤ÎƬ¤ËÂçÎ̤ÎÍ©Î¤Á¤ÎÁû¡¹¤·¤¤À¼¤¬²¡¤·´ó¤»¤Æ¤­¤¿...");
429 #else
430                 msg_print("Your head is invaded by a horde of gibbering spectral voices...");
431 #endif
432
433                 set_confused(p_ptr->confused + randint1(4) + 4);
434         }
435         else if (die < 31)
436         {
437                 poly_monster(dir, plev);
438         }
439         else if (die < 36)
440         {
441                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir,
442                                   damroll(3 + ((plev - 1) / 5), 4));
443         }
444         else if (die < 41)
445         {
446                 confuse_monster (dir, plev);
447         }
448         else if (die < 46)
449         {
450                 fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
451         }
452         else if (die < 51)
453         {
454                 (void)lite_line(dir, damroll(6, 8));
455         }
456         else if (die < 56)
457         {
458                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir,
459                                   damroll(3+((plev-5)/4),8));
460         }
461         else if (die < 61)
462         {
463                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir,
464                                   damroll(5+((plev-5)/4),8));
465         }
466         else if (die < 66)
467         {
468                 fire_bolt_or_beam(beam_chance(), GF_ACID, dir,
469                                   damroll(6+((plev-5)/4),8));
470         }
471         else if (die < 71)
472         {
473                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir,
474                                   damroll(8+((plev-5)/4),8));
475         }
476         else if (die < 76)
477         {
478                 drain_life(dir, 75);
479         }
480         else if (die < 81)
481         {
482                 fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
483         }
484         else if (die < 86)
485         {
486                 fire_ball(GF_ACID, dir, 40 + plev, 2);
487         }
488         else if (die < 91)
489         {
490                 fire_ball(GF_ICE, dir, 70 + plev, 3);
491         }
492         else if (die < 96)
493         {
494                 fire_ball(GF_FIRE, dir, 80 + plev, 3);
495         }
496         else if (die < 101)
497         {
498                 drain_life(dir, 100 + plev);
499         }
500         else if (die < 104)
501         {
502                 earthquake(py, px, 12);
503         }
504         else if (die < 106)
505         {
506                 (void)destroy_area(py, px, 13 + randint0(5), FALSE);
507         }
508         else if (die < 108)
509         {
510                 symbol_genocide(plev+50, TRUE);
511         }
512         else if (die < 110)
513         {
514                 dispel_monsters(120);
515         }
516         else
517         { /* RARE */
518                 dispel_monsters(150);
519                 slow_monsters(plev);
520                 sleep_monsters(plev);
521                 hp_player(300);
522         }
523
524         if (die < 31)
525         {
526 #ifdef JP
527                 msg_print("±¢±µ¤ÊÀ¼¤¬¥¯¥¹¥¯¥¹¾Ð¤¦¡£¡Ö¤â¤¦¤¹¤°¤ª¤Þ¤¨¤Ï²æ¡¹¤ÎÃç´Ö¤Ë¤Ê¤ë¤À¤í¤¦¡£¼å¤­¼Ô¤è¡£¡×");
528 #else
529                 msg_print("Sepulchral voices chuckle. 'Soon you will join us, mortal.'");
530 #endif
531         }
532 }
533
534
535 static void wild_magic(int spell)
536 {
537         int counter = 0;
538         int type = SUMMON_BIZARRE1 + randint0(6);
539
540         if (type < SUMMON_BIZARRE1) type = SUMMON_BIZARRE1;
541         else if (type > SUMMON_BIZARRE6) type = SUMMON_BIZARRE6;
542
543         switch (randint1(spell) + randint1(8) + 1)
544         {
545         case 1:
546         case 2:
547         case 3:
548                 teleport_player(10, TELEPORT_PASSIVE);
549                 break;
550         case 4:
551         case 5:
552         case 6:
553                 teleport_player(100, TELEPORT_PASSIVE);
554                 break;
555         case 7:
556         case 8:
557                 teleport_player(200, TELEPORT_PASSIVE);
558                 break;
559         case 9:
560         case 10:
561         case 11:
562                 unlite_area(10, 3);
563                 break;
564         case 12:
565         case 13:
566         case 14:
567                 lite_area(damroll(2, 3), 2);
568                 break;
569         case 15:
570                 destroy_doors_touch();
571                 break;
572         case 16: case 17:
573                 wall_breaker();
574         case 18:
575                 sleep_monsters_touch();
576                 break;
577         case 19:
578         case 20:
579                 trap_creation(py, px);
580                 break;
581         case 21:
582         case 22:
583                 door_creation();
584                 break;
585         case 23:
586         case 24:
587         case 25:
588                 aggravate_monsters(0);
589                 break;
590         case 26:
591                 earthquake(py, px, 5);
592                 break;
593         case 27:
594         case 28:
595                 (void)gain_random_mutation(0);
596                 break;
597         case 29:
598         case 30:
599                 apply_disenchant(1);
600                 break;
601         case 31:
602                 lose_all_info();
603                 break;
604         case 32:
605                 fire_ball(GF_CHAOS, 0, spell + 5, 1 + (spell / 10));
606                 break;
607         case 33:
608                 wall_stone();
609                 break;
610         case 34:
611         case 35:
612                 while (counter++ < 8)
613                 {
614                         (void)summon_specific(0, py, px, (dun_level * 3) / 2, type, (PM_ALLOW_GROUP | PM_NO_PET));
615                 }
616                 break;
617         case 36:
618         case 37:
619                 activate_hi_summon(py, px, FALSE);
620                 break;
621         case 38:
622                 (void)summon_cyber(-1, py, px);
623                 break;
624         default:
625                 {
626                         int count = 0;
627                         (void)activate_ty_curse(FALSE, &count);
628                         break;
629                 }
630         }
631 }
632
633
634 static void cast_shuffle(void)
635 {
636         int plev = p_ptr->lev;
637         int dir;
638         int die;
639         int vir = virtue_number(V_CHANCE);
640         int i;
641
642         /* Card sharks and high mages get a level bonus */
643         if ((p_ptr->pclass == CLASS_ROGUE) ||
644             (p_ptr->pclass == CLASS_HIGH_MAGE) ||
645             (p_ptr->pclass == CLASS_SORCERER))
646                 die = (randint1(110)) + plev / 5;
647         else
648                 die = randint1(120);
649
650
651         if (vir)
652         {
653                 if (p_ptr->virtues[vir - 1] > 0)
654                 {
655                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
656                 }
657                 else
658                 {
659                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
660                 }
661         }
662
663 #ifdef JP
664         msg_print("¤¢¤Ê¤¿¤Ï¥«¡¼¥É¤òÀڤäưìËç°ú¤¤¤¿...");
665 #else
666         msg_print("You shuffle the deck and draw a card...");
667 #endif
668
669         if (die < 30)
670                 chg_virtue(V_CHANCE, 1);
671
672         if (die < 7)
673         {
674 #ifdef JP
675                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô»à¡Õ¤À¡ª");
676 #else
677                 msg_print("Oh no! It's Death!");
678 #endif
679
680                 for (i = 0; i < randint1(3); i++)
681                         activate_hi_summon(py, px, FALSE);
682         }
683         else if (die < 14)
684         {
685 #ifdef JP
686                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô°­Ëâ¡Õ¤À¡ª");
687 #else
688                 msg_print("Oh no! It's the Devil!");
689 #endif
690
691                 summon_specific(0, py, px, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
692         }
693         else if (die < 18)
694         {
695                 int count = 0;
696 #ifdef JP
697                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡ÔÄߤé¤ì¤¿ÃË¡Õ¤À¡ª");
698 #else
699                 msg_print("Oh no! It's the Hanged Man.");
700 #endif
701
702                 activate_ty_curse(FALSE, &count);
703         }
704         else if (die < 22)
705         {
706 #ifdef JP
707                 msg_print("¡ÔÉÔĴϤηõ¡Õ¤À¡£");
708 #else
709                 msg_print("It's the swords of discord.");
710 #endif
711
712                 aggravate_monsters(0);
713         }
714         else if (die < 26)
715         {
716 #ifdef JP
717                 msg_print("¡Ô¶ò¼Ô¡Õ¤À¡£");
718 #else
719                 msg_print("It's the Fool.");
720 #endif
721
722                 do_dec_stat(A_INT);
723                 do_dec_stat(A_WIS);
724         }
725         else if (die < 30)
726         {
727 #ifdef JP
728                 msg_print("´ñ̯¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
729 #else
730                 msg_print("It's the picture of a strange monster.");
731 #endif
732
733                 trump_summoning(1, FALSE, py, px, (dun_level * 3 / 2), (32 + randint1(6)), PM_ALLOW_GROUP | PM_ALLOW_UNIQUE);
734         }
735         else if (die < 33)
736         {
737 #ifdef JP
738                 msg_print("¡Ô·î¡Õ¤À¡£");
739 #else
740                 msg_print("It's the Moon.");
741 #endif
742
743                 unlite_area(10, 3);
744         }
745         else if (die < 38)
746         {
747 #ifdef JP
748                 msg_print("¡Ô±¿Ì¿¤ÎÎØ¡Õ¤À¡£");
749 #else
750                 msg_print("It's the Wheel of Fortune.");
751 #endif
752
753                 wild_magic(randint0(32));
754         }
755         else if (die < 40)
756         {
757 #ifdef JP
758                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
759 #else
760                 msg_print("It's a teleport trump card.");
761 #endif
762
763                 teleport_player(10, TELEPORT_PASSIVE);
764         }
765         else if (die < 42)
766         {
767 #ifdef JP
768                 msg_print("¡ÔÀµµÁ¡Õ¤À¡£");
769 #else
770                 msg_print("It's Justice.");
771 #endif
772
773                 set_blessed(p_ptr->lev, FALSE);
774         }
775         else if (die < 47)
776         {
777 #ifdef JP
778                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
779 #else
780                 msg_print("It's a teleport trump card.");
781 #endif
782
783                 teleport_player(100, TELEPORT_PASSIVE);
784         }
785         else if (die < 52)
786         {
787 #ifdef JP
788                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
789 #else
790                 msg_print("It's a teleport trump card.");
791 #endif
792
793                 teleport_player(200, TELEPORT_PASSIVE);
794         }
795         else if (die < 60)
796         {
797 #ifdef JP
798                 msg_print("¡ÔÅã¡Õ¤À¡£");
799 #else
800                 msg_print("It's the Tower.");
801 #endif
802
803                 wall_breaker();
804         }
805         else if (die < 72)
806         {
807 #ifdef JP
808                 msg_print("¡ÔÀáÀ©¡Õ¤À¡£");
809 #else
810                 msg_print("It's Temperance.");
811 #endif
812
813                 sleep_monsters_touch();
814         }
815         else if (die < 80)
816         {
817 #ifdef JP
818                 msg_print("¡ÔÅã¡Õ¤À¡£");
819 #else
820                 msg_print("It's the Tower.");
821 #endif
822
823                 earthquake(py, px, 5);
824         }
825         else if (die < 82)
826         {
827 #ifdef JP
828                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
829 #else
830                 msg_print("It's the picture of a friendly monster.");
831 #endif
832
833                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE1, 0L);
834         }
835         else if (die < 84)
836         {
837 #ifdef JP
838                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
839 #else
840                 msg_print("It's the picture of a friendly monster.");
841 #endif
842
843                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE2, 0L);
844         }
845         else if (die < 86)
846         {
847 #ifdef JP
848                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
849 #else
850                 msg_print("It's the picture of a friendly monster.");
851 #endif
852
853                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE4, 0L);
854         }
855         else if (die < 88)
856         {
857 #ifdef JP
858                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
859 #else
860                 msg_print("It's the picture of a friendly monster.");
861 #endif
862
863                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE5, 0L);
864         }
865         else if (die < 96)
866         {
867 #ifdef JP
868                 msg_print("¡ÔÎø¿Í¡Õ¤À¡£");
869 #else
870                 msg_print("It's the Lovers.");
871 #endif
872
873                 if (get_aim_dir(&dir))
874                         charm_monster(dir, MIN(p_ptr->lev, 20));
875         }
876         else if (die < 101)
877         {
878 #ifdef JP
879                 msg_print("¡Ô±£¼Ô¡Õ¤À¡£");
880 #else
881                 msg_print("It's the Hermit.");
882 #endif
883
884                 wall_stone();
885         }
886         else if (die < 111)
887         {
888 #ifdef JP
889                 msg_print("¡Ô¿³È½¡Õ¤À¡£");
890 #else
891                 msg_print("It's the Judgement.");
892 #endif
893
894                 do_cmd_rerate(FALSE);
895                 if (p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3)
896                 {
897 #ifdef JP
898                         msg_print("Á´¤Æ¤ÎÆÍÁ³ÊÑ°Û¤¬¼£¤Ã¤¿¡£");
899 #else
900                         msg_print("You are cured of all mutations.");
901 #endif
902
903                         p_ptr->muta1 = p_ptr->muta2 = p_ptr->muta3 = 0;
904                         p_ptr->update |= PU_BONUS;
905                         handle_stuff();
906                 }
907         }
908         else if (die < 120)
909         {
910 #ifdef JP
911                 msg_print("¡ÔÂÀÍÛ¡Õ¤À¡£");
912 #else
913                 msg_print("It's the Sun.");
914 #endif
915
916                 chg_virtue(V_KNOWLEDGE, 1);
917                 chg_virtue(V_ENLIGHTEN, 1);
918                 wiz_lite(FALSE);
919         }
920         else
921         {
922 #ifdef JP
923                 msg_print("¡ÔÀ¤³¦¡Õ¤À¡£");
924 #else
925                 msg_print("It's the World.");
926 #endif
927
928                 if (p_ptr->exp < PY_MAX_EXP)
929                 {
930                         s32b ee = (p_ptr->exp / 25) + 1;
931                         if (ee > 5000) ee = 5000;
932 #ifdef JP
933                         msg_print("¹¹¤Ë·Ð¸³¤òÀѤó¤À¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
934 #else
935                         msg_print("You feel more experienced.");
936 #endif
937
938                         gain_exp(ee);
939                 }
940         }
941 }
942
943
944 /*
945  * Drop 10+1d10 meteor ball at random places near the player
946  */
947 static void cast_meteor(int dam, int rad)
948 {
949         int i;
950         int b = 10 + randint1(10);
951
952         for (i = 0; i < b; i++)
953         {
954                 int y, x;
955                 int count;
956
957                 for (count = 0; count <= 20; count++)
958                 {
959                         int dy, dx, d;
960
961                         x = px - 8 + randint0(17);
962                         y = py - 8 + randint0(17);
963
964                         dx = (px > x) ? (px - x) : (x - px);
965                         dy = (py > y) ? (py - y) : (y - py);
966
967                         /* Approximate distance */
968                         d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
969
970                         if (d >= 9) continue;
971
972                         if (!in_bounds(y, x) || !projectable(py, px, y, x)
973                             || !cave_have_flag_bold(y, x, FF_PROJECT)) continue;
974
975                         /* Valid position */
976                         break;
977                 }
978
979                 if (count > 20) continue;
980
981                 project(0, rad, y, x, dam, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
982         }
983 }
984
985
986 /*
987  * Drop 10+1d10 disintegration ball at random places near the target
988  */
989 static bool cast_wrath_of_the_god(int dam, int rad)
990 {
991         int x, y, tx, ty;
992         int nx, ny;
993         int dir, i;
994         int b = 10 + randint1(10);
995
996         if (!get_aim_dir(&dir)) return FALSE;
997
998         /* Use the given direction */
999         tx = px + 99 * ddx[dir];
1000         ty = py + 99 * ddy[dir];
1001
1002         /* Hack -- Use an actual "target" */
1003         if ((dir == 5) && target_okay())
1004         {
1005                 tx = target_col;
1006                 ty = target_row;
1007         }
1008
1009         x = px;
1010         y = py;
1011
1012         while (1)
1013         {
1014                 /* Hack -- Stop at the target */
1015                 if ((y == ty) && (x == tx)) break;
1016
1017                 ny = y;
1018                 nx = x;
1019                 mmove2(&ny, &nx, py, px, ty, tx);
1020
1021                 /* Stop at maximum range */
1022                 if (MAX_RANGE <= distance(py, px, ny, nx)) break;
1023
1024                 /* Stopped by walls/doors */
1025                 if (!cave_have_flag_bold(ny, nx, FF_PROJECT)) break;
1026
1027                 /* Stopped by monsters */
1028                 if ((dir != 5) && cave[ny][nx].m_idx != 0) break;
1029
1030                 /* Save the new location */
1031                 x = nx;
1032                 y = ny;
1033         }
1034         tx = x;
1035         ty = y;
1036
1037         for (i = 0; i < b; i++)
1038         {
1039                 int count = 20, d = 0;
1040
1041                 while (count--)
1042                 {
1043                         int dx, dy;
1044
1045                         x = tx - 5 + randint0(11);
1046                         y = ty - 5 + randint0(11);
1047
1048                         dx = (tx > x) ? (tx - x) : (x - tx);
1049                         dy = (ty > y) ? (ty - y) : (y - ty);
1050
1051                         /* Approximate distance */
1052                         d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
1053                         /* Within the radius */
1054                         if (d < 5) break;
1055                 }
1056
1057                 if (count < 0) continue;
1058
1059                 /* Cannot penetrate perm walls */
1060                 if (!in_bounds(y,x) ||
1061                     cave_stop_disintegration(y,x) ||
1062                     !in_disintegration_range(ty, tx, y, x))
1063                         continue;
1064
1065                 project(0, rad, y, x, dam, GF_DISINTEGRATE, PROJECT_JUMP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1);
1066         }
1067
1068         return TRUE;
1069 }
1070
1071
1072 /*
1073  * An "item_tester_hook" for offer
1074  */
1075 static bool item_tester_offer(object_type *o_ptr)
1076 {
1077         /* Flasks of oil are okay */
1078         if (o_ptr->tval != TV_CORPSE) return (FALSE);
1079
1080         if (o_ptr->sval != SV_CORPSE) return (FALSE);
1081
1082         if (my_strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
1083
1084         /* Assume not okay */
1085         return (FALSE);
1086 }
1087
1088
1089 /*
1090  * Daemon spell Summon Greater Demon
1091  */
1092 static bool cast_summon_greater_demon(void)
1093 {
1094         int plev = p_ptr->lev;
1095         int item;
1096         cptr q, s;
1097         int summon_lev;
1098         object_type *o_ptr;
1099
1100         item_tester_hook = item_tester_offer;
1101 #ifdef JP
1102         q = "¤É¤Î»àÂΤòÊû¤²¤Þ¤¹¤«? ";
1103         s = "Êû¤²¤é¤ì¤ë»àÂΤò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
1104 #else
1105         q = "Sacrifice which corpse? ";
1106         s = "You have nothing to scrifice.";
1107 #endif
1108         if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
1109
1110         /* Get the item (in the pack) */
1111         if (item >= 0)
1112         {
1113                 o_ptr = &inventory[item];
1114         }
1115
1116         /* Get the item (on the floor) */
1117         else
1118         {
1119                 o_ptr = &o_list[0 - item];
1120         }
1121
1122         summon_lev = plev * 2 / 3 + r_info[o_ptr->pval].level;
1123
1124         if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET)))
1125         {
1126 #ifdef JP
1127                 msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
1128 #else
1129                 msg_print("The area fills with a stench of sulphur and brimstone.");
1130 #endif
1131
1132
1133 #ifdef JP
1134                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
1135 #else
1136                 msg_print("'What is thy bidding... Master?'");
1137 #endif
1138
1139                 /* Decrease the item (from the pack) */
1140                 if (item >= 0)
1141                 {
1142                         inven_item_increase(item, -1);
1143                         inven_item_describe(item);
1144                         inven_item_optimize(item);
1145                 }
1146
1147                 /* Decrease the item (from the floor) */
1148                 else
1149                 {
1150                         floor_item_increase(0 - item, -1);
1151                         floor_item_describe(0 - item);
1152                         floor_item_optimize(0 - item);
1153                 }
1154         }
1155         else
1156         {
1157 #ifdef JP
1158                 msg_print("°­Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
1159 #else
1160                 msg_print("No Greater Demon arrive.");
1161 #endif
1162         }
1163
1164         return TRUE;
1165 }
1166
1167
1168 /*
1169  * Start singing if the player is a Bard 
1170  */
1171 static void start_singing(int spell, int song)
1172 {
1173         /* Remember the song index */
1174         p_ptr->magic_num1[0] = song;
1175
1176         /* Remember the index of the spell which activated the song */
1177         p_ptr->magic_num2[0] = spell;
1178
1179
1180         /* Now the player is singing */
1181         set_action(ACTION_SING);
1182
1183
1184         /* Recalculate bonuses */
1185         p_ptr->update |= (PU_BONUS);
1186
1187         /* Redraw status bar */
1188         p_ptr->redraw |= (PR_STATUS);
1189 }
1190
1191
1192 /*
1193  * Stop singing if the player is a Bard 
1194  */
1195 void stop_singing(void)
1196 {
1197         if (p_ptr->pclass != CLASS_BARD) return;
1198
1199         /* Are there interupted song? */
1200         if (p_ptr->magic_num1[1])
1201         {
1202                 /* Forget interupted song */
1203                 p_ptr->magic_num1[1] = 0;
1204                 return;
1205         }
1206
1207         /* The player is singing? */
1208         if (!p_ptr->magic_num1[0]) return;
1209
1210         /* Hack -- if called from set_action(), avoid recursive loop */
1211         if (p_ptr->action == ACTION_SING) set_action(ACTION_NONE);
1212
1213         /* Message text of each song or etc. */
1214         do_spell(REALM_MUSIC, p_ptr->magic_num2[0], SPELL_STOP);
1215
1216         p_ptr->magic_num1[0] = MUSIC_NONE;
1217         p_ptr->magic_num2[0] = 0;
1218
1219         /* Recalculate bonuses */
1220         p_ptr->update |= (PU_BONUS);
1221
1222         /* Redraw status bar */
1223         p_ptr->redraw |= (PR_STATUS);
1224 }
1225
1226
1227 static cptr do_life_spell(int spell, int mode)
1228 {
1229         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
1230         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
1231         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
1232         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
1233
1234         int dir;
1235         int plev = p_ptr->lev;
1236
1237         switch (spell)
1238         {
1239         case 0:
1240 #ifdef JP
1241                 if (name) return "·Ú½ý¤Î¼£Ìþ";
1242                 if (desc) return "²ø²æ¤ÈÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
1243 #else
1244                 if (name) return "Cure Light Wounds";
1245                 if (desc) return "Heals cut and HP a little.";
1246 #endif
1247     
1248                 {
1249                         int dice = 2;
1250                         int sides = 10;
1251
1252                         if (info) return info_heal(dice, sides, 0);
1253
1254                         if (cast)
1255                         {
1256                                 hp_player(damroll(dice, sides));
1257                                 set_cut(p_ptr->cut - 10);
1258                         }
1259                 }
1260                 break;
1261
1262         case 1:
1263 #ifdef JP
1264                 if (name) return "½ËÊ¡";
1265                 if (desc) return "°ìÄê»þ´Ö¡¢Ì¿ÃæΨ¤ÈAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
1266 #else
1267                 if (name) return "Bless";
1268                 if (desc) return "Gives bonus to hit and AC for a few turns.";
1269 #endif
1270     
1271                 {
1272                         int base = 12;
1273
1274                         if (info) return info_duration(base, base);
1275
1276                         if (cast)
1277                         {
1278                                 set_blessed(randint1(base) + base, FALSE);
1279                         }
1280                 }
1281                 break;
1282
1283         case 2:
1284 #ifdef JP
1285                 if (name) return "·Ú½ý";
1286                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤Ë¾®¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1287 #else
1288                 if (name) return "Cause Light Wounds";
1289                 if (desc) return "Wounds a monster a little unless resisted.";
1290 #endif
1291     
1292                 {
1293                         int dice = 3 + (plev - 1) / 5;
1294                         int sides = 4;
1295
1296                         if (info) return info_damage(dice, sides, 0);
1297
1298                         if (cast)
1299                         {
1300                                 if (!get_aim_dir(&dir)) return NULL;
1301                                 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
1302                         }
1303                 }
1304                 break;
1305
1306         case 3:
1307 #ifdef JP
1308                 if (name) return "¸÷¤Î¾¤´­";
1309                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
1310 #else
1311                 if (name) return "Call Light";
1312                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
1313 #endif
1314     
1315                 {
1316                         int dice = 2;
1317                         int sides = plev / 2;
1318                         int rad = plev / 10 + 1;
1319
1320                         if (info) return info_damage(dice, sides, 0);
1321
1322                         if (cast)
1323                         {
1324                                 lite_area(damroll(dice, sides), rad);
1325                         }
1326                 }
1327                 break;
1328
1329         case 4:
1330 #ifdef JP
1331                 if (name) return "æ« & ±£¤·Èâ´¶ÃÎ";
1332                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤È³¬Ãʤò´¶ÃΤ¹¤ë¡£";
1333 #else
1334                 if (name) return "Detect Doors & Traps";
1335                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
1336 #endif
1337     
1338                 {
1339                         int rad = DETECT_RAD_DEFAULT;
1340
1341                         if (info) return info_radius(rad);
1342
1343                         if (cast)
1344                         {
1345                                 detect_traps(rad, TRUE);
1346                                 detect_doors(rad);
1347                                 detect_stairs(rad);
1348                         }
1349                 }
1350                 break;
1351
1352         case 5:
1353 #ifdef JP
1354                 if (name) return "½Å½ý¤Î¼£Ìþ";
1355                 if (desc) return "²ø²æ¤ÈÂÎÎϤòÃæÄøÅÙ²óÉü¤µ¤»¤ë¡£";
1356 #else
1357                 if (name) return "Cure Medium Wounds";
1358                 if (desc) return "Heals cut and HP more.";
1359 #endif
1360     
1361                 {
1362                         int dice = 4;
1363                         int sides = 10;
1364
1365                         if (info) return info_heal(dice, sides, 0);
1366
1367                         if (cast)
1368                         {
1369                                 hp_player(damroll(dice, sides));
1370                                 set_cut((p_ptr->cut / 2) - 20);
1371                         }
1372                 }
1373                 break;
1374
1375         case 6:
1376 #ifdef JP
1377                 if (name) return "²òÆÇ";
1378                 if (desc) return "ÂÎÆâ¤ÎÆǤò¼è¤ê½ü¤¯¡£";
1379 #else
1380                 if (name) return "Cure Poison";
1381                 if (desc) return "Cure poison status.";
1382 #endif
1383     
1384                 {
1385                         if (cast)
1386                         {
1387                                 set_poisoned(0);
1388                         }
1389                 }
1390                 break;
1391
1392         case 7:
1393 #ifdef JP
1394                 if (name) return "¶õÊ¢½¼Â­";
1395                 if (desc) return "ËþÊ¢¤Ë¤¹¤ë¡£";
1396 #else
1397                 if (name) return "Satisfy Hunger";
1398                 if (desc) return "Satisfies hunger.";
1399 #endif
1400     
1401                 {
1402                         if (cast)
1403                         {
1404                                 set_food(PY_FOOD_MAX - 1);
1405                         }
1406                 }
1407                 break;
1408
1409         case 8:
1410 #ifdef JP
1411                 if (name) return "²ò¼ö";
1412                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
1413 #else
1414                 if (name) return "Remove Curse";
1415                 if (desc) return "Removes normal curses from equipped items.";
1416 #endif
1417
1418                 {
1419                         if (cast)
1420                         {
1421                                 if (remove_curse())
1422                                 {
1423 #ifdef JP
1424                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1425 #else
1426                                         msg_print("You feel as if someone is watching over you.");
1427 #endif
1428                                 }
1429                         }
1430                 }
1431                 break;
1432
1433         case 9:
1434 #ifdef JP
1435                 if (name) return "½Å½ý";
1436                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ËÃæ¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1437 #else
1438                 if (name) return "Cause Medium Wounds";
1439                 if (desc) return "Wounds a monster unless resisted.";
1440 #endif
1441     
1442                 {
1443                         int sides = 8 + (plev - 5) / 4;
1444                         int dice = 8;
1445
1446                         if (info) return info_damage(dice, sides, 0);
1447
1448                         if (cast)
1449                         {
1450                                 if (!get_aim_dir(&dir)) return NULL;
1451                                 fire_ball_hide(GF_WOUNDS, dir, damroll(sides, dice), 0);
1452                         }
1453                 }
1454                 break;
1455
1456         case 10:
1457 #ifdef JP
1458                 if (name) return "Ã×Ì¿½ý¤Î¼£Ìþ";
1459                 if (desc) return "ÂÎÎϤòÂçÉý¤Ë²óÉü¤µ¤»¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1460 #else
1461                 if (name) return "Cure Critical Wounds";
1462                 if (desc) return "Heals cut, stun and HP greatly.";
1463 #endif
1464     
1465                 {
1466                         int dice = 8;
1467                         int sides = 10;
1468
1469                         if (info) return info_heal(dice, sides, 0);
1470
1471                         if (cast)
1472                         {
1473                                 hp_player(damroll(dice, sides));
1474                                 set_stun(0);
1475                                 set_cut(0);
1476                         }
1477                 }
1478                 break;
1479
1480         case 11:
1481 #ifdef JP
1482                 if (name) return "ÂÑÇ®ÂÑ´¨";
1483                 if (desc) return "°ìÄê»þ´Ö¡¢²Ð±ê¤ÈÎ䵤¤ËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
1484 #else
1485                 if (name) return "Resist Heat and Cold";
1486                 if (desc) return "Gives resistance to fire and cold. These resistances can be added to which from equipment for more powerful resistances.";
1487 #endif
1488     
1489                 {
1490                         int base = 20;
1491
1492                         if (info) return info_duration(base, base);
1493
1494                         if (cast)
1495                         {
1496                                 set_oppose_cold(randint1(base) + base, FALSE);
1497                                 set_oppose_fire(randint1(base) + base, FALSE);
1498                         }
1499                 }
1500                 break;
1501
1502         case 12:
1503 #ifdef JP
1504                 if (name) return "¼þÊÕ´¶ÃÎ";
1505                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
1506 #else
1507                 if (name) return "Sense Surroundings";
1508                 if (desc) return "Maps nearby area.";
1509 #endif
1510     
1511                 {
1512                         int rad = DETECT_RAD_MAP;
1513
1514                         if (info) return info_radius(rad);
1515
1516                         if (cast)
1517                         {
1518                                 map_area(rad);
1519                         }
1520                 }
1521                 break;
1522
1523         case 13:
1524 #ifdef JP
1525                 if (name) return "¥Ñ¥Ë¥Ã¥¯¡¦¥¢¥ó¥Ç¥Ã¥É";
1526                 if (desc) return "»ë³¦Æâ¤Î¥¢¥ó¥Ç¥Ã¥É¤ò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1527 #else
1528                 if (name) return "Turn Undead";
1529                 if (desc) return "Attempts to scare undead monsters in sight.";
1530 #endif
1531     
1532                 {
1533                         if (cast)
1534                         {
1535                                 turn_undead();
1536                         }
1537                 }
1538                 break;
1539
1540         case 14:
1541 #ifdef JP
1542                 if (name) return "ÂÎÎϲóÉü";
1543                 if (desc) return "¶Ë¤á¤Æ¶¯ÎϤʲóÉü¼öʸ¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1544 #else
1545                 if (name) return "Healing";
1546                 if (desc) return "Much powerful healing magic, and heals cut and stun completely.";
1547 #endif
1548     
1549                 {
1550                         int heal = 300;
1551
1552                         if (info) return info_heal(0, 0, heal);
1553
1554                         if (cast)
1555                         {
1556                                 hp_player(heal);
1557                                 set_stun(0);
1558                                 set_cut(0);
1559                         }
1560                 }
1561                 break;
1562
1563         case 15:
1564 #ifdef JP
1565                 if (name) return "·ë³¦¤ÎÌæ¾Ï";
1566                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
1567 #else
1568                 if (name) return "Glyph of Warding";
1569                 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.";
1570 #endif
1571     
1572                 {
1573                         if (cast)
1574                         {
1575                                 warding_glyph();
1576                         }
1577                 }
1578                 break;
1579
1580         case 16:
1581 #ifdef JP
1582                 if (name) return "*²ò¼ö*";
1583                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
1584 #else
1585                 if (name) return "Dispel Curse";
1586                 if (desc) return "Removes normal and heavy curse from equipped items.";
1587 #endif
1588     
1589                 {
1590                         if (cast)
1591                         {
1592                                 if (remove_all_curse())
1593                                 {
1594 #ifdef JP
1595                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1596 #else
1597                                         msg_print("You feel as if someone is watching over you.");
1598 #endif
1599                                 }
1600                         }
1601                 }
1602                 break;
1603
1604         case 17:
1605 #ifdef JP
1606                 if (name) return "´Õ¼±";
1607                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
1608 #else
1609                 if (name) return "Perception";
1610                 if (desc) return "Identifies an item.";
1611 #endif
1612     
1613                 {
1614                         if (cast)
1615                         {
1616                                 if (!ident_spell(FALSE)) return NULL;
1617                         }
1618                 }
1619                 break;
1620
1621         case 18:
1622 #ifdef JP
1623                 if (name) return "¥¢¥ó¥Ç¥Ã¥ÉÂ໶";
1624                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥É¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
1625 #else
1626                 if (name) return "Dispel Undead";
1627                 if (desc) return "Damages all undead monsters in sight.";
1628 #endif
1629     
1630                 {
1631                         int dice = 1;
1632                         int sides = plev * 5;
1633
1634                         if (info) return info_damage(dice, sides, 0);
1635
1636                         if (cast)
1637                         {
1638                                 dispel_undead(damroll(dice, sides));
1639                         }
1640                 }
1641                 break;
1642
1643         case 19:
1644 #ifdef JP
1645                 if (name) return "Æä¤Î¹ï";
1646                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1647 #else
1648                 if (name) return "Day of the Dove";
1649                 if (desc) return "Attempts to charm all monsters in sight.";
1650 #endif
1651     
1652                 {
1653                         int power = plev * 2;
1654
1655                         if (info) return info_power(power);
1656
1657                         if (cast)
1658                         {
1659                                 charm_monsters(power);
1660                         }
1661                 }
1662                 break;
1663
1664         case 20:
1665 #ifdef JP
1666                 if (name) return "Ã×Ì¿½ý";
1667                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1668 #else
1669                 if (name) return "Cause Critical Wounds";
1670                 if (desc) return "Wounds a monster critically unless resisted.";
1671 #endif
1672     
1673                 {
1674                         int dice = 5 + (plev - 5) / 3;
1675                         int sides = 15;
1676
1677                         if (info) return info_damage(dice, sides, 0);
1678
1679                         if (cast)
1680                         {
1681                                 if (!get_aim_dir(&dir)) return NULL;
1682                                 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
1683                         }
1684                 }
1685                 break;
1686
1687         case 21:
1688 #ifdef JP
1689                 if (name) return "µ¢´Ô¤Î¾Û";
1690                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
1691 #else
1692                 if (name) return "Word of Recall";
1693                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
1694 #endif
1695     
1696                 {
1697                         int base = 15;
1698                         int sides = 20;
1699
1700                         if (info) return info_delay(base, sides);
1701
1702                         if (cast)
1703                         {
1704                                 if (!word_of_recall()) return NULL;
1705                         }
1706                 }
1707                 break;
1708
1709         case 22:
1710 #ifdef JP
1711                 if (name) return "¿¿¼Â¤Îº×ÃÅ";
1712                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
1713 #else
1714                 if (name) return "Alter Reality";
1715                 if (desc) return "Recreates current dungeon level.";
1716 #endif
1717     
1718                 {
1719                         int base = 15;
1720                         int sides = 20;
1721
1722                         if (info) return info_delay(base, sides);
1723
1724                         if (cast)
1725                         {
1726                                 alter_reality();
1727                         }
1728                 }
1729                 break;
1730
1731         case 23:
1732 #ifdef JP
1733                 if (name) return "¿¿¡¦·ë³¦";
1734                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤È¼þ°Ï8¥Þ¥¹¤Î¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
1735 #else
1736                 if (name) return "Warding True";
1737                 if (desc) return "Creates glyphs in all adjacent squares and under you.";
1738 #endif
1739     
1740                 {
1741                         int rad = 1;
1742
1743                         if (info) return info_radius(rad);
1744
1745                         if (cast)
1746                         {
1747                                 warding_glyph();
1748                                 glyph_creation();
1749                         }
1750                 }
1751                 break;
1752
1753         case 24:
1754 #ifdef JP
1755                 if (name) return "ÉÔÌÓ²½";
1756                 if (desc) return "¤³¤Î³¬¤ÎÁý¿£¤¹¤ë¥â¥ó¥¹¥¿¡¼¤¬Áý¿£¤Ç¤­¤Ê¤¯¤Ê¤ë¡£";
1757 #else
1758                 if (name) return "Sterilization";
1759                 if (desc) return "Prevents any breeders on current level from breeding.";
1760 #endif
1761     
1762                 {
1763                         if (cast)
1764                         {
1765                                 num_repro += MAX_REPRO;
1766                         }
1767                 }
1768                 break;
1769
1770         case 25:
1771 #ifdef JP
1772                 if (name) return "Á´´¶ÃÎ";
1773                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
1774 #else
1775                 if (name) return "Detection";
1776                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
1777 #endif
1778
1779                 {
1780                         int rad = DETECT_RAD_DEFAULT;
1781
1782                         if (info) return info_radius(rad);
1783
1784                         if (cast)
1785                         {
1786                                 detect_all(rad);
1787                         }
1788                 }
1789                 break;
1790
1791         case 26:
1792 #ifdef JP
1793                 if (name) return "¥¢¥ó¥Ç¥Ã¥É¾ÃÌÇ";
1794                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë¤¤¤ë¥¢¥ó¥Ç¥Ã¥É¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1795 #else
1796                 if (name) return "Annihilate Undead";
1797                 if (desc) return "Eliminates all nearby undead monsters, exhausting you.  Powerful or unique monsters may be able to resist.";
1798 #endif
1799     
1800                 {
1801                         int power = plev + 50;
1802
1803                         if (info) return info_power(power);
1804
1805                         if (cast)
1806                         {
1807                                 mass_genocide_undead(power, TRUE);
1808                         }
1809                 }
1810                 break;
1811
1812         case 27:
1813 #ifdef JP
1814                 if (name) return "ÀéΤ´ã";
1815                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
1816 #else
1817                 if (name) return "Clairvoyance";
1818                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
1819 #endif
1820     
1821                 {
1822                         if (cast)
1823                         {
1824                                 wiz_lite(FALSE);
1825                         }
1826                 }
1827                 break;
1828
1829         case 28:
1830 #ifdef JP
1831                 if (name) return "Á´Éü³è";
1832                 if (desc) return "¤¹¤Ù¤Æ¤Î¥¹¥Æ¡¼¥¿¥¹¤È·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
1833 #else
1834                 if (name) return "Restoration";
1835                 if (desc) return "Restores all stats and experience.";
1836 #endif
1837     
1838                 {
1839                         if (cast)
1840                         {
1841                                 do_res_stat(A_STR);
1842                                 do_res_stat(A_INT);
1843                                 do_res_stat(A_WIS);
1844                                 do_res_stat(A_DEX);
1845                                 do_res_stat(A_CON);
1846                                 do_res_stat(A_CHR);
1847                                 restore_level();
1848                         }
1849                 }
1850                 break;
1851
1852         case 29:
1853 #ifdef JP
1854                 if (name) return "*ÂÎÎϲóÉü*";
1855                 if (desc) return "ºÇ¶¯¤Î¼£Ìþ¤ÎËâË¡¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1856 #else
1857                 if (name) return "Healing True";
1858                 if (desc) return "The greatest healing magic. Heals all HP, cut and stun.";
1859 #endif
1860     
1861                 {
1862                         int heal = 2000;
1863
1864                         if (info) return info_heal(0, 0, heal);
1865
1866                         if (cast)
1867                         {
1868                                 hp_player(heal);
1869                                 set_stun(0);
1870                                 set_cut(0);
1871                         }
1872                 }
1873                 break;
1874
1875         case 30:
1876 #ifdef JP
1877                 if (name) return "À»¤Ê¤ë¥Ó¥¸¥ç¥ó";
1878                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
1879 #else
1880                 if (name) return "Holy Vision";
1881                 if (desc) return "*Identifies* an item.";
1882 #endif
1883     
1884                 {
1885                         if (cast)
1886                         {
1887                                 if (!identify_fully(FALSE)) return NULL;
1888                         }
1889                 }
1890                 break;
1891
1892         case 31:
1893 #ifdef JP
1894                 if (name) return "µæ¶Ë¤ÎÂÑÀ­";
1895                 if (desc) return "°ìÄê»þ´Ö¡¢¤¢¤é¤æ¤ëÂÑÀ­¤òÉÕ¤±¡¢AC¤ÈËâË¡ËɸæǽÎϤò¾å¾º¤µ¤»¤ë¡£";
1896 #else
1897                 if (name) return "Ultimate Resistance";
1898                 if (desc) return "Gives ultimate resistance, bonus to AC and speed.";
1899 #endif
1900     
1901                 {
1902                         int base = plev / 2;
1903
1904                         if (info) return info_duration(base, base);
1905
1906                         if (cast)
1907                         {
1908                                 int v = randint1(base) + base;
1909                                 set_fast(v, FALSE);
1910                                 set_oppose_acid(v, FALSE);
1911                                 set_oppose_elec(v, FALSE);
1912                                 set_oppose_fire(v, FALSE);
1913                                 set_oppose_cold(v, FALSE);
1914                                 set_oppose_pois(v, FALSE);
1915                                 set_ultimate_res(v, FALSE);
1916                         }
1917                 }
1918                 break;
1919         }
1920
1921         return "";
1922 }
1923
1924
1925 static cptr do_sorcery_spell(int spell, int mode)
1926 {
1927         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
1928         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
1929         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
1930         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
1931
1932         int dir;
1933         int plev = p_ptr->lev;
1934
1935         switch (spell)
1936         {
1937         case 0:
1938 #ifdef JP
1939                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
1940                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
1941 #else
1942                 if (name) return "Detect Monsters";
1943                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
1944 #endif
1945     
1946                 {
1947                         int rad = DETECT_RAD_DEFAULT;
1948
1949                         if (info) return info_radius(rad);
1950
1951                         if (cast)
1952                         {
1953                                 detect_monsters_normal(rad);
1954                         }
1955                 }
1956                 break;
1957
1958         case 1:
1959 #ifdef JP
1960                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
1961                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
1962 #else
1963                 if (name) return "Phase Door";
1964                 if (desc) return "Teleport short distance.";
1965 #endif
1966     
1967                 {
1968                         int range = 10;
1969
1970                         if (info) return info_range(range);
1971
1972                         if (cast)
1973                         {
1974                                 teleport_player(range, 0L);
1975                         }
1976                 }
1977                 break;
1978
1979         case 2:
1980 #ifdef JP
1981                 if (name) return "櫤ÈÈâ´¶ÃÎ";
1982                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤ÎÈâ¤È櫤ò´¶ÃΤ¹¤ë¡£";
1983 #else
1984                 if (name) return "Detect Doors and Traps";
1985                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
1986 #endif
1987     
1988                 {
1989                         int rad = DETECT_RAD_DEFAULT;
1990
1991                         if (info) return info_radius(rad);
1992
1993                         if (cast)
1994                         {
1995                                 detect_traps(rad, TRUE);
1996                                 detect_doors(rad);
1997                                 detect_stairs(rad);
1998                         }
1999                 }
2000                 break;
2001
2002         case 3:
2003 #ifdef JP
2004                 if (name) return "¥é¥¤¥È¡¦¥¨¥ê¥¢";
2005                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
2006 #else
2007                 if (name) return "Light Area";
2008                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
2009 #endif
2010     
2011                 {
2012                         int dice = 2;
2013                         int sides = plev / 2;
2014                         int rad = plev / 10 + 1;
2015
2016                         if (info) return info_damage(dice, sides, 0);
2017
2018                         if (cast)
2019                         {
2020                                 lite_area(damroll(dice, sides), rad);
2021                         }
2022                 }
2023                 break;
2024
2025         case 4:
2026 #ifdef JP
2027                 if (name) return "¥Ñ¥Ë¥Ã¥¯¡¦¥â¥ó¥¹¥¿¡¼";
2028                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤòº®Í𤵤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2029 #else
2030                 if (name) return "Confuse Monster";
2031                 if (desc) return "Attempts to confuse a monster.";
2032 #endif
2033     
2034                 {
2035                         int power = (plev * 3) / 2;
2036
2037                         if (info) return info_power(power);
2038
2039                         if (cast)
2040                         {
2041                                 if (!get_aim_dir(&dir)) return NULL;
2042
2043                                 confuse_monster(dir, power);
2044                         }
2045                 }
2046                 break;
2047
2048         case 5:
2049 #ifdef JP
2050                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
2051                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
2052 #else
2053                 if (name) return "Teleport";
2054                 if (desc) return "Teleport long distance.";
2055 #endif
2056     
2057                 {
2058                         int range = plev * 5;
2059
2060                         if (info) return info_range(range);
2061
2062                         if (cast)
2063                         {
2064                                 teleport_player(range, 0L);
2065                         }
2066                 }
2067                 break;
2068
2069         case 6:
2070 #ifdef JP
2071                 if (name) return "¥¹¥ê¡¼¥×¡¦¥â¥ó¥¹¥¿¡¼";
2072                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2073 #else
2074                 if (name) return "Sleep Monster";
2075                 if (desc) return "Attempts to sleep a monster.";
2076 #endif
2077     
2078                 {
2079                         int power = plev;
2080
2081                         if (info) return info_power(power);
2082
2083                         if (cast)
2084                         {
2085                                 if (!get_aim_dir(&dir)) return NULL;
2086
2087                                 sleep_monster(dir, plev);
2088                         }
2089                 }
2090                 break;
2091
2092         case 7:
2093 #ifdef JP
2094                 if (name) return "ËâÎϽ¼Å¶";
2095                 if (desc) return "¾ó/ËâË¡ËÀ¤Î½¼Å¶²ó¿ô¤òÁý¤ä¤¹¤«¡¢½¼Å¶Ãæ¤Î¥í¥Ã¥É¤Î½¼Å¶»þ´Ö¤ò¸º¤é¤¹¡£";
2096 #else
2097                 if (name) return "Recharging";
2098                 if (desc) return "Recharges staffs, wands or rods.";
2099 #endif
2100     
2101                 {
2102                         int power = plev * 4;
2103
2104                         if (info) return info_power(power);
2105
2106                         if (cast)
2107                         {
2108                                 if (!recharge(power)) return NULL;
2109                         }
2110                 }
2111                 break;
2112
2113         case 8:
2114 #ifdef JP
2115                 if (name) return "ËâË¡¤ÎÃÏ¿Þ";
2116                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
2117 #else
2118                 if (name) return "Magic Mapping";
2119                 if (desc) return "Maps nearby area.";
2120 #endif
2121     
2122                 {
2123                         int rad = DETECT_RAD_MAP;
2124
2125                         if (info) return info_radius(rad);
2126
2127                         if (cast)
2128                         {
2129                                 map_area(rad);
2130                         }
2131                 }
2132                 break;
2133
2134         case 9:
2135 #ifdef JP
2136                 if (name) return "´ÕÄê";
2137                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
2138 #else
2139                 if (name) return "Identify";
2140                 if (desc) return "Identifies an item.";
2141 #endif
2142     
2143                 {
2144                         if (cast)
2145                         {
2146                                 if (!ident_spell(FALSE)) return NULL;
2147                         }
2148                 }
2149                 break;
2150
2151         case 10:
2152 #ifdef JP
2153                 if (name) return "¥¹¥í¥¦¡¦¥â¥ó¥¹¥¿¡¼";
2154                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¸ºÂ®¤µ¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2155 #else
2156                 if (name) return "Slow Monster";
2157                 if (desc) return "Attempts to slow a monster.";
2158 #endif
2159     
2160                 {
2161                         int power = plev;
2162
2163                         if (info) return info_power(power);
2164
2165                         if (cast)
2166                         {
2167                                 if (!get_aim_dir(&dir)) return NULL;
2168
2169                                 slow_monster(dir, plev);
2170                         }
2171                 }
2172                 break;
2173
2174         case 11:
2175 #ifdef JP
2176                 if (name) return "¼þÊÕ¥¹¥ê¡¼¥×";
2177                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2178 #else
2179                 if (name) return "Mass Sleep";
2180                 if (desc) return "Attempts to sleep all monsters in sight.";
2181 #endif
2182     
2183                 {
2184                         int power = plev;
2185
2186                         if (info) return info_power(power);
2187
2188                         if (cast)
2189                         {
2190                                 sleep_monsters(plev);
2191                         }
2192                 }
2193                 break;
2194
2195         case 12:
2196 #ifdef JP
2197                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
2198                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2199 #else
2200                 if (name) return "Teleport Away";
2201                 if (desc) return "Teleports all monsters on the line away unless resisted.";
2202 #endif
2203     
2204                 {
2205                         int power = plev;
2206
2207                         if (info) return info_power(power);
2208
2209                         if (cast)
2210                         {
2211                                 if (!get_aim_dir(&dir)) return NULL;
2212
2213                                 fire_beam(GF_AWAY_ALL, dir, power);
2214                         }
2215                 }
2216                 break;
2217
2218         case 13:
2219 #ifdef JP
2220                 if (name) return "¥¹¥Ô¡¼¥É";
2221                 if (desc) return "°ìÄê»þ´Ö¡¢²Ã®¤¹¤ë¡£";
2222 #else
2223                 if (name) return "Haste Self";
2224                 if (desc) return "Hastes you for a while.";
2225 #endif
2226     
2227                 {
2228                         int base = plev;
2229                         int sides = 20 + plev;
2230
2231                         if (info) return info_duration(base, sides);
2232
2233                         if (cast)
2234                         {
2235                                 set_fast(randint1(sides) + base, FALSE);
2236                         }
2237                 }
2238                 break;
2239
2240         case 14:
2241 #ifdef JP
2242                 if (name) return "¿¿¡¦´¶ÃÎ";
2243                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
2244 #else
2245                 if (name) return "Detection True";
2246                 if (desc) return "Detects all monsters, traps, doors, stairs, 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_all(rad);
2257                         }
2258                 }
2259                 break;
2260
2261         case 15:
2262 #ifdef JP
2263                 if (name) return "¿¿¡¦´ÕÄê";
2264                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
2265 #else
2266                 if (name) return "Identify True";
2267                 if (desc) return "*Identifies* an item.";
2268 #endif
2269     
2270                 {
2271                         if (cast)
2272                         {
2273                                 if (!identify_fully(FALSE)) return NULL;
2274                         }
2275                 }
2276                 break;
2277
2278         case 16:
2279 #ifdef JP
2280                 if (name) return "ʪÂΤȺâÊõ´¶ÃÎ";
2281                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥¢¥¤¥Æ¥à¤ÈºâÊõ¤ò´¶ÃΤ¹¤ë¡£";
2282 #else
2283                 if (name) return "Detect items and Treasure";
2284                 if (desc) return "Detects all treasures and items in your vicinity.";
2285 #endif
2286     
2287                 {
2288                         int rad = DETECT_RAD_DEFAULT;
2289
2290                         if (info) return info_radius(rad);
2291
2292                         if (cast)
2293                         {
2294                                 detect_objects_normal(rad);
2295                                 detect_treasure(rad);
2296                                 detect_objects_gold(rad);
2297                         }
2298                 }
2299                 break;
2300
2301         case 17:
2302 #ifdef JP
2303                 if (name) return "¥Á¥ã¡¼¥à¡¦¥â¥ó¥¹¥¿¡¼";
2304                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2305 #else
2306                 if (name) return "Charm Monster";
2307                 if (desc) return "Attempts to charm a monster.";
2308 #endif
2309     
2310                 {
2311                         int power = plev;
2312
2313                         if (info) return info_power(power);
2314
2315                         if (cast)
2316                         {
2317                                 if (!get_aim_dir(&dir)) return NULL;
2318
2319                                 charm_monster(dir, power);
2320                         }
2321                 }
2322                 break;
2323
2324         case 18:
2325 #ifdef JP
2326                 if (name) return "Àº¿À´¶ÃÎ";
2327                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
2328 #else
2329                 if (name) return "Sense Minds";
2330                 if (desc) return "Gives telepathy for a while.";
2331 #endif
2332     
2333                 {
2334                         int base = 25;
2335                         int sides = 30;
2336
2337                         if (info) return info_duration(base, sides);
2338
2339                         if (cast)
2340                         {
2341                                 set_tim_esp(randint1(sides) + base, FALSE);
2342                         }
2343                 }
2344                 break;
2345
2346         case 19:
2347 #ifdef JP
2348                 if (name) return "³¹°ÜÆ°";
2349                 if (desc) return "³¹¤Ø°ÜÆ°¤¹¤ë¡£ÃϾå¤Ë¤¤¤ë¤È¤­¤·¤«»È¤¨¤Ê¤¤¡£";
2350 #else
2351                 if (name) return "Teleport to town";
2352                 if (desc) return "Teleport to a town which you choose in a moment. Can only be used outdoors.";
2353 #endif
2354     
2355                 {
2356                         if (cast)
2357                         {
2358                                 if (!tele_town()) return NULL;
2359                         }
2360                 }
2361                 break;
2362
2363         case 20:
2364 #ifdef JP
2365                 if (name) return "¼«¸ÊʬÀÏ";
2366                 if (desc) return "¸½ºß¤Î¼«Ê¬¤Î¾õÂÖ¤ò´°Á´¤ËÃΤ롣";
2367 #else
2368                 if (name) return "Self Knowledge";
2369                 if (desc) return "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.";
2370 #endif
2371     
2372                 {
2373                         if (cast)
2374                         {
2375                                 self_knowledge();
2376                         }
2377                 }
2378                 break;
2379
2380         case 21:
2381 #ifdef JP
2382                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
2383                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
2384 #else
2385                 if (name) return "Teleport Level";
2386                 if (desc) return "Teleport to up or down stairs in a moment.";
2387 #endif
2388     
2389                 {
2390                         if (cast)
2391                         {
2392 #ifdef JP
2393                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
2394 #else
2395                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
2396 #endif
2397                                 teleport_level(0);
2398                         }
2399                 }
2400                 break;
2401
2402         case 22:
2403 #ifdef JP
2404                 if (name) return "µ¢´Ô¤Î¼öʸ";
2405                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
2406 #else
2407                 if (name) return "Word of Recall";
2408                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
2409 #endif
2410     
2411                 {
2412                         int base = 15;
2413                         int sides = 20;
2414
2415                         if (info) return info_delay(base, sides);
2416
2417                         if (cast)
2418                         {
2419                                 if (!word_of_recall()) return NULL;
2420                         }
2421                 }
2422                 break;
2423
2424         case 23:
2425 #ifdef JP
2426                 if (name) return "¼¡¸µ¤ÎÈâ";
2427                 if (desc) return "ûµ÷Î¥Æâ¤Î»ØÄꤷ¤¿¾ì½ê¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
2428 #else
2429                 if (name) return "Dimension Door";
2430                 if (desc) return "Teleport to given location.";
2431 #endif
2432     
2433                 {
2434                         int range = plev / 2 + 10;
2435
2436                         if (info) return info_range(range);
2437
2438                         if (cast)
2439                         {
2440 #ifdef JP
2441                                 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
2442 #else
2443                                 msg_print("You open a dimensional gate. Choose a destination.");
2444 #endif
2445
2446                                 if (!dimension_door()) return NULL;
2447                         }
2448                 }
2449                 break;
2450
2451         case 24:
2452 #ifdef JP
2453                 if (name) return "Ä´ºº";
2454                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤Î°À­¡¢»Ä¤êÂÎÎÏ¡¢ºÇÂçÂÎÎÏ¡¢¥¹¥Ô¡¼¥É¡¢ÀµÂΤòÃΤ롣";
2455 #else
2456                 if (name) return "Probing";
2457                 if (desc) return "Proves all monsters' alignment, HP, speed and their true character.";
2458 #endif
2459     
2460                 {
2461                         if (cast)
2462                         {
2463                                 probing();
2464                         }
2465                 }
2466                 break;
2467
2468         case 25:
2469 #ifdef JP
2470                 if (name) return "Çúȯ¤Î¥ë¡¼¥ó";
2471                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤ë¤ÈÇúȯ¤·¤Æ¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
2472 #else
2473                 if (name) return "Explosive Rune";
2474                 if (desc) return "Sets a glyph under you. The glyph will explode when a monster moves on it.";
2475 #endif
2476     
2477                 {
2478                         int dice = 7;
2479                         int sides = 7;
2480                         int base = plev;
2481
2482                         if (info) return info_damage(dice, sides, base);
2483
2484                         if (cast)
2485                         {
2486                                 explosive_rune();
2487                         }
2488                 }
2489                 break;
2490
2491         case 26:
2492 #ifdef JP
2493                 if (name) return "Ç°Æ°ÎÏ";
2494                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼«Ê¬¤Î­¸µ¤Ø°ÜÆ°¤µ¤»¤ë¡£";
2495 #else
2496                 if (name) return "Telekinesis";
2497                 if (desc) return "Pulls a distant item close to you.";
2498 #endif
2499     
2500                 {
2501                         int weight = plev * 15;
2502
2503                         if (info) return info_weight(weight);
2504
2505                         if (cast)
2506                         {
2507                                 if (!get_aim_dir(&dir)) return NULL;
2508
2509                                 fetch(dir, weight, FALSE);
2510                         }
2511                 }
2512                 break;
2513
2514         case 27:
2515 #ifdef JP
2516                 if (name) return "ÀéΤ´ã";
2517                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤µ¤é¤Ë¡¢°ìÄê»þ´Ö¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
2518 #else
2519                 if (name) return "Clairvoyance";
2520                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
2521 #endif
2522     
2523                 {
2524                         int base = 25;
2525                         int sides = 30;
2526
2527                         if (info) return info_duration(base, sides);
2528
2529                         if (cast)
2530                         {
2531                                 chg_virtue(V_KNOWLEDGE, 1);
2532                                 chg_virtue(V_ENLIGHTEN, 1);
2533
2534                                 wiz_lite(FALSE);
2535
2536                                 if (!p_ptr->telepathy)
2537                                 {
2538                                         set_tim_esp(randint1(sides) + base, FALSE);
2539                                 }
2540                         }
2541                 }
2542                 break;
2543
2544         case 28:
2545 #ifdef JP
2546                 if (name) return "̥λ¤Î»ëÀþ";
2547                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2548 #else
2549                 if (name) return "Charm monsters";
2550                 if (desc) return "Attempts to charm all monsters in sight.";
2551 #endif
2552     
2553                 {
2554                         int power = plev * 2;
2555
2556                         if (info) return info_power(power);
2557
2558                         if (cast)
2559                         {
2560                                 charm_monsters(power);
2561                         }
2562                 }
2563                 break;
2564
2565         case 29:
2566 #ifdef JP
2567                 if (name) return "Ï£¶â½Ñ";
2568                 if (desc) return "¥¢¥¤¥Æ¥à1¤Ä¤ò¤ª¶â¤ËÊѤ¨¤ë¡£";
2569 #else
2570                 if (name) return "Alchemy";
2571                 if (desc) return "Turns an item into 1/3 of its value in gold.";
2572 #endif
2573     
2574                 {
2575                         if (cast)
2576                         {
2577                                 if (!alchemy()) return NULL;
2578                         }
2579                 }
2580                 break;
2581
2582         case 30:
2583 #ifdef JP
2584                 if (name) return "²øʪÄÉÊü";
2585                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2586 #else
2587                 if (name) return "Banishment";
2588                 if (desc) return "Teleports all monsters in sight away unless resisted.";
2589 #endif
2590     
2591                 {
2592                         int power = plev * 4;
2593
2594                         if (info) return info_power(power);
2595
2596                         if (cast)
2597                         {
2598                                 banish_monsters(power);
2599                         }
2600                 }
2601                 break;
2602
2603         case 31:
2604 #ifdef JP
2605                 if (name) return "̵½ý¤Îµå";
2606                 if (desc) return "°ìÄê»þ´Ö¡¢¥À¥á¡¼¥¸¤ò¼õ¤±¤Ê¤¯¤Ê¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£Àڤ줿½Ö´Ö¤Ë¾¯¤·¥¿¡¼¥ó¤ò¾ÃÈñ¤¹¤ë¤Î¤ÇÃí°Õ¡£";
2607 #else
2608                 if (name) return "Globe of Invulnerability";
2609                 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.";
2610 #endif
2611     
2612                 {
2613                         int base = 4;
2614
2615                         if (info) return info_duration(base, base);
2616
2617                         if (cast)
2618                         {
2619                                 set_invuln(randint1(base) + base, FALSE);
2620                         }
2621                 }
2622                 break;
2623         }
2624
2625         return "";
2626 }
2627
2628
2629 static cptr do_nature_spell(int spell, int mode)
2630 {
2631         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
2632         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
2633         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
2634         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
2635
2636 #ifdef JP
2637         static const char s_dam[] = "»½ý:";
2638         static const char s_rng[] = "¼ÍÄø";
2639 #else
2640         static const char s_dam[] = "dam ";
2641         static const char s_rng[] = "rng ";
2642 #endif
2643
2644         int dir;
2645         int plev = p_ptr->lev;
2646
2647         switch (spell)
2648         {
2649         case 0:
2650 #ifdef JP
2651                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
2652                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
2653 #else
2654                 if (name) return "Detect Creatures";
2655                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
2656 #endif
2657     
2658                 {
2659                         int rad = DETECT_RAD_DEFAULT;
2660
2661                         if (info) return info_radius(rad);
2662
2663                         if (cast)
2664                         {
2665                                 detect_monsters_normal(rad);
2666                         }
2667                 }
2668                 break;
2669
2670         case 1:
2671 #ifdef JP
2672                 if (name) return "°ðºÊ";
2673                 if (desc) return "ÅÅ·â¤Îû¤¤¥Ó¡¼¥à¤òÊü¤Ä¡£";
2674 #else
2675                 if (name) return "Lightning";
2676                 if (desc) return "Fires a short beam of lightning.";
2677 #endif
2678     
2679                 {
2680                         int dice = 3 + (plev - 1) / 5;
2681                         int sides = 4;
2682                         int range = plev / 6 + 2;
2683
2684                         if (info) return format("%s%dd%d %s%d", s_dam, dice, sides, s_rng, range);
2685
2686                         if (cast)
2687                         {
2688                                 project_length = range;
2689
2690                                 if (!get_aim_dir(&dir)) return NULL;
2691
2692                                 fire_beam(GF_ELEC, dir, damroll(dice, sides));
2693                         }
2694                 }
2695                 break;
2696
2697         case 2:
2698 #ifdef JP
2699                 if (name) return "櫤ÈÈâ´¶ÃÎ";
2700                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤ò´¶ÃΤ¹¤ë¡£";
2701 #else
2702                 if (name) return "Detect Doors and Traps";
2703                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
2704 #endif
2705     
2706                 {
2707                         int rad = DETECT_RAD_DEFAULT;
2708
2709                         if (info) return info_radius(rad);
2710
2711                         if (cast)
2712                         {
2713                                 detect_traps(rad, TRUE);
2714                                 detect_doors(rad);
2715                                 detect_stairs(rad);
2716                         }
2717                 }
2718                 break;
2719
2720         case 3:
2721 #ifdef JP
2722                 if (name) return "¿©ÎÈÀ¸À®";
2723                 if (desc) return "¿©ÎÁ¤ò°ì¤Äºî¤ê½Ð¤¹¡£";
2724 #else
2725                 if (name) return "Produce Food";
2726                 if (desc) return "Produces a Ration of Food.";
2727 #endif
2728     
2729                 {
2730                         if (cast)
2731                         {
2732                                 object_type forge, *q_ptr = &forge;
2733
2734 #ifdef JP
2735                                 msg_print("¿©ÎÁ¤òÀ¸À®¤·¤¿¡£");
2736 #else
2737                                 msg_print("A food ration is produced.");
2738 #endif
2739
2740                                 /* Create the food ration */
2741                                 object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
2742
2743                                 /* Drop the object from heaven */
2744                                 drop_near(q_ptr, -1, py, px);
2745                         }
2746                 }
2747                 break;
2748
2749         case 4:
2750 #ifdef JP
2751                 if (name) return "Æü¤Î¸÷";
2752                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
2753 #else
2754                 if (name) return "Daylight";
2755                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
2756 #endif
2757     
2758                 {
2759                         int dice = 2;
2760                         int sides = plev / 2;
2761                         int rad = (plev / 10) + 1;
2762
2763                         if (info) return info_damage(dice, sides, 0);
2764
2765                         if (cast)
2766                         {
2767                                 lite_area(damroll(dice, sides), rad);
2768
2769                                 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
2770                                 {
2771 #ifdef JP
2772                                         msg_print("Æü¤Î¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
2773 #else
2774                                         msg_print("The daylight scorches your flesh!");
2775 #endif
2776
2777 #ifdef JP
2778                                         take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "Æü¤Î¸÷", -1);
2779 #else
2780                                         take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "daylight", -1);
2781 #endif
2782                                 }
2783                         }
2784                 }
2785                 break;
2786
2787         case 5:
2788 #ifdef JP
2789                 if (name) return "ưʪ½¬¤·";
2790                 if (desc) return "ưʪ1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2791 #else
2792                 if (name) return "Animal Taming";
2793                 if (desc) return "Attempts to charm an animal.";
2794 #endif
2795     
2796                 {
2797                         int power = plev;
2798
2799                         if (info) return info_power(power);
2800
2801                         if (cast)
2802                         {
2803                                 if (!get_aim_dir(&dir)) return NULL;
2804
2805                                 charm_animal(dir, power);
2806                         }
2807                 }
2808                 break;
2809
2810         case 6:
2811 #ifdef JP
2812                 if (name) return "´Ä¶­¤Ø¤ÎÂÑÀ­";
2813                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¡¢±ê¡¢ÅÅ·â¤ËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
2814 #else
2815                 if (name) return "Resist Environment";
2816                 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.";
2817 #endif
2818     
2819                 {
2820                         int base = 20;
2821
2822                         if (info) return info_duration(base, base);
2823
2824                         if (cast)
2825                         {
2826                                 set_oppose_cold(randint1(base) + base, FALSE);
2827                                 set_oppose_fire(randint1(base) + base, FALSE);
2828                                 set_oppose_elec(randint1(base) + base, FALSE);
2829                         }
2830                 }
2831                 break;
2832
2833         case 7:
2834 #ifdef JP
2835                 if (name) return "½ý¤ÈÆǼ£ÎÅ";
2836                 if (desc) return "²ø²æ¤òÁ´²÷¤µ¤»¡¢ÆǤòÂΤ«¤é´°Á´¤Ë¼è¤ê½ü¤­¡¢ÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
2837 #else
2838                 if (name) return "Cure Wounds & Poison";
2839                 if (desc) return "Heals all cut and poison status. Heals HP a little.";
2840 #endif
2841     
2842                 {
2843                         int dice = 2;
2844                         int sides = 8;
2845
2846                         if (info) return info_heal(dice, sides, 0);
2847
2848                         if (cast)
2849                         {
2850                                 hp_player(damroll(dice, sides));
2851                                 set_cut(0);
2852                                 set_poisoned(0);
2853                         }
2854                 }
2855                 break;
2856
2857         case 8:
2858 #ifdef JP
2859                 if (name) return "´äÀÐÍϲò";
2860                 if (desc) return "ÊɤòÍϤ«¤·¤Æ¾²¤Ë¤¹¤ë¡£";
2861 #else
2862                 if (name) return "Stone to Mud";
2863                 if (desc) return "Turns one rock square to mud.";
2864 #endif
2865     
2866                 {
2867                         int dice = 1;
2868                         int sides = 30;
2869                         int base = 20;
2870
2871                         if (info) return info_damage(dice, sides, base);
2872
2873                         if (cast)
2874                         {
2875                                 if (!get_aim_dir(&dir)) return NULL;
2876
2877                                 wall_to_mud(dir, 20 + randint1(30));
2878                         }
2879                 }
2880                 break;
2881
2882         case 9:
2883 #ifdef JP
2884                 if (name) return "¥¢¥¤¥¹¡¦¥Ü¥ë¥È";
2885                 if (desc) return "Î䵤¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
2886 #else
2887                 if (name) return "Frost Bolt";
2888                 if (desc) return "Fires a bolt or beam of cold.";
2889 #endif
2890     
2891                 {
2892                         int dice = 3 + (plev - 5) / 4;
2893                         int sides = 8;
2894
2895                         if (info) return info_damage(dice, sides, 0);
2896
2897                         if (cast)
2898                         {
2899                                 if (!get_aim_dir(&dir)) return NULL;
2900                                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir, damroll(dice, sides));
2901                         }
2902                 }
2903                 break;
2904
2905         case 10:
2906 #ifdef JP
2907                 if (name) return "¼«Á³¤Î³ÐÀÃ";
2908                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ·¡¢¶á¤¯¤Îæ«¡¢Èâ¡¢³¬ÃÊ¡¢Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
2909 #else
2910                 if (name) return "Nature Awareness";
2911                 if (desc) return "Maps nearby area. Detects all monsters, traps, doors and stairs.";
2912 #endif
2913     
2914                 {
2915                         int rad1 = DETECT_RAD_MAP;
2916                         int rad2 = DETECT_RAD_DEFAULT;
2917
2918                         if (info) return info_radius(MAX(rad1, rad2));
2919
2920                         if (cast)
2921                         {
2922                                 map_area(rad1);
2923                                 detect_traps(rad2, TRUE);
2924                                 detect_doors(rad2);
2925                                 detect_stairs(rad2);
2926                                 detect_monsters_normal(rad2);
2927                         }
2928                 }
2929                 break;
2930
2931         case 11:
2932 #ifdef JP
2933                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";
2934                 if (desc) return "²Ð±ê¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
2935 #else
2936                 if (name) return "Fire Bolt";
2937                 if (desc) return "Fires a bolt or beam of fire.";
2938 #endif
2939     
2940                 {
2941                         int dice = 5 + (plev - 5) / 4;
2942                         int sides = 8;
2943
2944                         if (info) return info_damage(dice, sides, 0);
2945
2946                         if (cast)
2947                         {
2948                                 if (!get_aim_dir(&dir)) return NULL;
2949                                 fire_bolt_or_beam(beam_chance() - 10, GF_FIRE, dir, damroll(dice, sides));
2950                         }
2951                 }
2952                 break;
2953
2954         case 12:
2955 #ifdef JP
2956                 if (name) return "ÂÀÍÛ¸÷Àþ";
2957                 if (desc) return "¸÷Àþ¤òÊü¤Ä¡£¸÷¤ê¤ò·ù¤¦¥â¥ó¥¹¥¿¡¼¤Ë¸ú²Ì¤¬¤¢¤ë¡£";
2958 #else
2959                 if (name) return "Ray of Sunlight";
2960                 if (desc) return "Fires a beam of light which damages to light-sensitive monsters.";
2961 #endif
2962     
2963                 {
2964                         int dice = 6;
2965                         int sides = 8;
2966
2967                         if (info) return info_damage(dice, sides, 0);
2968
2969                         if (cast)
2970                         {
2971                                 if (!get_aim_dir(&dir)) return NULL;
2972 #ifdef JP
2973                                 msg_print("ÂÀÍÛ¸÷Àþ¤¬¸½¤ì¤¿¡£");
2974 #else
2975                                 msg_print("A line of sunlight appears.");
2976 #endif
2977
2978                                 lite_line(dir, damroll(6, 8));
2979                         }
2980                 }
2981                 break;
2982
2983         case 13:
2984 #ifdef JP
2985                 if (name) return "­¤«¤»";
2986                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2987 #else
2988                 if (name) return "Entangle";
2989                 if (desc) return "Attempts to slow all monsters in sight.";
2990 #endif
2991     
2992                 {
2993                         int power = plev;
2994
2995                         if (info) return info_power(power);
2996
2997                         if (cast)
2998                         {
2999                                 slow_monsters(plev);
3000                         }
3001                 }
3002                 break;
3003
3004         case 14:
3005 #ifdef JP
3006                 if (name) return "ưʪ¾¤´­";
3007                 if (desc) return "ưʪ¤ò1Âξ¤´­¤¹¤ë¡£";
3008 #else
3009                 if (name) return "Summon Animal";
3010                 if (desc) return "Summons an animal.";
3011 #endif
3012     
3013                 {
3014                         if (cast)
3015                         {
3016                                 if (!(summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))
3017                                 {
3018 #ifdef JP
3019                                         msg_print("ưʪ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3020 #else
3021                                         msg_print("No animals arrive.");
3022 #endif
3023                                 }
3024                                 break;
3025                         }
3026                 }
3027                 break;
3028
3029         case 15:
3030 #ifdef JP
3031                 if (name) return "ÌôÁð¼£ÎÅ";
3032                 if (desc) return "ÂÎÎϤòÂçÉý¤Ë²óÉü¤µ¤»¡¢Éé½ý¡¢Û¯Û°¾õÂÖ¡¢ÆǤ«¤éÁ´²÷¤¹¤ë¡£";
3033 #else
3034                 if (name) return "Herbal Healing";
3035                 if (desc) return "Heals HP greatly. And heals cut, stun and poison completely.";
3036 #endif
3037     
3038                 {
3039                         int heal = 500;
3040
3041                         if (info) return info_heal(0, 0, heal);
3042
3043                         if (cast)
3044                         {
3045                                 hp_player(heal);
3046                                 set_stun(0);
3047                                 set_cut(0);
3048                                 set_poisoned(0);
3049                         }
3050                 }
3051                 break;
3052
3053         case 16:
3054 #ifdef JP
3055                 if (name) return "³¬ÃÊÀ¸À®";
3056                 if (desc) return "¼«Ê¬¤Î¤¤¤ë°ÌÃ֤˳¬Ãʤòºî¤ë¡£";
3057 #else
3058                 if (name) return "Stair Building";
3059                 if (desc) return "Creates a stair which goes down or up.";
3060 #endif
3061     
3062                 {
3063                         if (cast)
3064                         {
3065                                 stair_creation();
3066                         }
3067                 }
3068                 break;
3069
3070         case 17:
3071 #ifdef JP
3072                 if (name) return "È©Àв½";
3073                 if (desc) return "°ìÄê»þ´Ö¡¢AC¤ò¾å¾º¤µ¤»¤ë¡£";
3074 #else
3075                 if (name) return "Stone Skin";
3076                 if (desc) return "Gives bonus to AC for a while.";
3077 #endif
3078     
3079                 {
3080                         int base = 20;
3081                         int sides = 30;
3082
3083                         if (info) return info_duration(base, sides);
3084
3085                         if (cast)
3086                         {
3087                                 set_shield(randint1(sides) + base, FALSE);
3088                         }
3089                 }
3090                 break;
3091
3092         case 18:
3093 #ifdef JP
3094                 if (name) return "¿¿¡¦ÂÑÀ­";
3095                 if (desc) return "°ìÄê»þ´Ö¡¢»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
3096 #else
3097                 if (name) return "Resistance True";
3098                 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.";
3099 #endif
3100     
3101                 {
3102                         int base = 20;
3103
3104                         if (info) return info_duration(base, base);
3105
3106                         if (cast)
3107                         {
3108                                 set_oppose_acid(randint1(base) + base, FALSE);
3109                                 set_oppose_elec(randint1(base) + base, FALSE);
3110                                 set_oppose_fire(randint1(base) + base, FALSE);
3111                                 set_oppose_cold(randint1(base) + base, FALSE);
3112                                 set_oppose_pois(randint1(base) + base, FALSE);
3113                         }
3114                 }
3115                 break;
3116
3117         case 19:
3118 #ifdef JP
3119                 if (name) return "¿¹ÎÓÁϤ";
3120                 if (desc) return "¼þ°Ï¤ËÌÚ¤òºî¤ê½Ð¤¹¡£";
3121 #else
3122                 if (name) return "Forest Creation";
3123                 if (desc) return "Creates trees in all adjacent squares.";
3124 #endif
3125     
3126                 {
3127                         if (cast)
3128                         {
3129                                 tree_creation();
3130                         }
3131                 }
3132                 break;
3133
3134         case 20:
3135 #ifdef JP
3136                 if (name) return "ưʪͧÏÂ";
3137                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Îưʪ¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3138 #else
3139                 if (name) return "Animal Friendship";
3140                 if (desc) return "Attempts to charm all animals in sight.";
3141 #endif
3142     
3143                 {
3144                         int power = plev * 2;
3145
3146                         if (info) return info_power(power);
3147
3148                         if (cast)
3149                         {
3150                                 charm_animals(power);
3151                         }
3152                 }
3153                 break;
3154
3155         case 21:
3156 #ifdef JP
3157                 if (name) return "»î¶âÀÐ";
3158                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
3159 #else
3160                 if (name) return "Stone Tell";
3161                 if (desc) return "*Identifies* an item.";
3162 #endif
3163     
3164                 {
3165                         if (cast)
3166                         {
3167                                 if (!identify_fully(FALSE)) return NULL;
3168                         }
3169                 }
3170                 break;
3171
3172         case 22:
3173 #ifdef JP
3174                 if (name) return "ÀФÎÊÉ";
3175                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë²ÖÖ¾´ä¤ÎÊɤòºî¤ë¡£";
3176 #else
3177                 if (name) return "Wall of Stone";
3178                 if (desc) return "Creates granite walls in all adjacent squares.";
3179 #endif
3180     
3181                 {
3182                         if (cast)
3183                         {
3184                                 wall_stone();
3185                         }
3186                 }
3187                 break;
3188
3189         case 23:
3190 #ifdef JP
3191                 if (name) return "Éå¿©ËÉ»ß";
3192                 if (desc) return "¥¢¥¤¥Æ¥à¤ò»À¤Ç½ý¤Ä¤«¤Ê¤¤¤è¤¦²Ã¹©¤¹¤ë¡£";
3193 #else
3194                 if (name) return "Protect from Corrosion";
3195                 if (desc) return "Makes an equipment acid-proof.";
3196 #endif
3197     
3198                 {
3199                         if (cast)
3200                         {
3201                                 if (!rustproof()) return NULL;
3202                         }
3203                 }
3204                 break;
3205
3206         case 24:
3207 #ifdef JP
3208                 if (name) return "ÃÏ¿Ì";
3209                 if (desc) return "¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÍɤ餷¡¢ÊɤȾ²¤ò¥é¥ó¥À¥à¤ËÆþ¤ìÊѤ¨¤ë¡£";
3210 #else
3211                 if (name) return "Earthquake";
3212                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
3213 #endif
3214     
3215                 {
3216                         int rad = 10;
3217
3218                         if (info) return info_radius(rad);
3219
3220                         if (cast)
3221                         {
3222                                 earthquake(py, px, rad);
3223                         }
3224                 }
3225                 break;
3226
3227         case 25:
3228 #ifdef JP
3229                 if (name) return "¥«¥Þ¥¤¥¿¥Á";
3230                 if (desc) return "Á´Êý¸þ¤Ë¸þ¤«¤Ã¤Æ¹¶·â¤¹¤ë¡£";
3231 #else
3232                 if (name) return "Cyclone";
3233                 if (desc) return "Attacks all adjacent monsters.";
3234 #endif
3235     
3236                 {
3237                         if (cast)
3238                         {
3239                                 int y = 0, x = 0;
3240                                 cave_type       *c_ptr;
3241                                 monster_type    *m_ptr;
3242
3243                                 for (dir = 0; dir < 8; dir++)
3244                                 {
3245                                         y = py + ddy_ddd[dir];
3246                                         x = px + ddx_ddd[dir];
3247                                         c_ptr = &cave[y][x];
3248
3249                                         /* Get the monster */
3250                                         m_ptr = &m_list[c_ptr->m_idx];
3251
3252                                         /* Hack -- attack monsters */
3253                                         if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
3254                                                 py_attack(y, x, 0);
3255                                 }
3256                         }
3257                 }
3258                 break;
3259
3260         case 26:
3261 #ifdef JP
3262                 if (name) return "¥Ö¥ê¥¶¡¼¥É";
3263                 if (desc) return "µðÂç¤ÊÎ䵤¤Îµå¤òÊü¤Ä¡£";
3264 #else
3265                 if (name) return "Blizzard";
3266                 if (desc) return "Fires a huge ball of cold.";
3267 #endif
3268     
3269                 {
3270                         int dam = 70 + plev * 3 / 2;
3271                         int rad = plev / 12 + 1;
3272
3273                         if (info) return info_damage(0, 0, dam);
3274
3275                         if (cast)
3276                         {
3277                                 if (!get_aim_dir(&dir)) return NULL;
3278
3279                                 fire_ball(GF_COLD, dir, dam, rad);
3280                         }
3281                 }
3282                 break;
3283
3284         case 27:
3285 #ifdef JP
3286                 if (name) return "°ðºÊÍò";
3287                 if (desc) return "µðÂç¤ÊÅÅ·â¤Îµå¤òÊü¤Ä¡£";
3288 #else
3289                 if (name) return "Lightning Storm";
3290                 if (desc) return "Fires a huge electric ball.";
3291 #endif
3292     
3293                 {
3294                         int dam = 90 + plev * 3 / 2;
3295                         int rad = plev / 12 + 1;
3296
3297                         if (info) return info_damage(0, 0, dam);
3298
3299                         if (cast)
3300                         {
3301                                 if (!get_aim_dir(&dir)) return NULL;
3302                                 fire_ball(GF_ELEC, dir, dam, rad);
3303                                 break;
3304                         }
3305                 }
3306                 break;
3307
3308         case 28:
3309 #ifdef JP
3310                 if (name) return "±²Ä¬";
3311                 if (desc) return "µðÂç¤Ê¿å¤Îµå¤òÊü¤Ä¡£";
3312 #else
3313                 if (name) return "Whirlpool";
3314                 if (desc) return "Fires a huge ball of water.";
3315 #endif
3316     
3317                 {
3318                         int dam = 100 + plev * 3 / 2;
3319                         int rad = plev / 12 + 1;
3320
3321                         if (info) return info_damage(0, 0, dam);
3322
3323                         if (cast)
3324                         {
3325                                 if (!get_aim_dir(&dir)) return NULL;
3326                                 fire_ball(GF_WATER, dir, dam, rad);
3327                         }
3328                 }
3329                 break;
3330
3331         case 29:
3332 #ifdef JP
3333                 if (name) return "ÍÛ¸÷¾¤´­";
3334                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¸÷¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£¤µ¤é¤Ë¡¢¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
3335 #else
3336                 if (name) return "Call Sunlight";
3337                 if (desc) return "Generates ball of light centered on you. Maps and lights whole dungeon level. Knows all objects location.";
3338 #endif
3339     
3340                 {
3341                         int dam = 150;
3342                         int rad = 8;
3343
3344                         if (info) return info_damage(0, 0, dam/2);
3345
3346                         if (cast)
3347                         {
3348                                 fire_ball(GF_LITE, 0, dam, rad);
3349                                 chg_virtue(V_KNOWLEDGE, 1);
3350                                 chg_virtue(V_ENLIGHTEN, 1);
3351                                 wiz_lite(FALSE);
3352
3353                                 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
3354                                 {
3355 #ifdef JP
3356                                         msg_print("Æü¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
3357 #else
3358                                         msg_print("The sunlight scorches your flesh!");
3359 #endif
3360
3361 #ifdef JP
3362                                         take_hit(DAMAGE_NOESCAPE, 50, "Æü¸÷", -1);
3363 #else
3364                                         take_hit(DAMAGE_NOESCAPE, 50, "sunlight", -1);
3365 #endif
3366                                 }
3367                         }
3368                 }
3369                 break;
3370
3371         case 30:
3372 #ifdef JP
3373                 if (name) return "ÀºÎî¤Î¿Ï";
3374                 if (desc) return "Éð´ï¤Ë±ê¤«Î䵤¤Î°À­¤ò¤Ä¤±¤ë¡£";
3375 #else
3376                 if (name) return "Elemental Branding";
3377                 if (desc) return "Makes current weapon fire or frost branded.";
3378 #endif
3379     
3380                 {
3381                         if (cast)
3382                         {
3383                                 brand_weapon(randint0(2));
3384                         }
3385                 }
3386                 break;
3387
3388         case 31:
3389 #ifdef JP
3390                 if (name) return "¼«Á³¤Î¶¼°Ò";
3391                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢ÃϿ̤òµ¯¤³¤·¡¢¼«Ê¬¤òÃæ¿´¤È¤·¤¿Ê¬²ò¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
3392 #else
3393                 if (name) return "Nature's Wrath";
3394                 if (desc) return "Damages all monsters in sight. Makes quake. Generates disintegration ball centered on you.";
3395 #endif
3396     
3397                 {
3398                         int d_dam = 4 * plev;
3399                         int b_dam = (100 + plev) * 2;
3400                         int b_rad = 1 + plev / 12;
3401                         int q_rad = 20 + plev / 2;
3402
3403                         if (info) return format("%s%d+%d", s_dam, d_dam, b_dam/2);
3404
3405                         if (cast)
3406                         {
3407                                 dispel_monsters(d_dam);
3408                                 earthquake(py, px, q_rad);
3409                                 project(0, b_rad, py, px, b_dam, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);
3410                         }
3411                 }
3412                 break;
3413         }
3414
3415         return "";
3416 }
3417
3418
3419 static cptr do_chaos_spell(int spell, int mode)
3420 {
3421         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
3422         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
3423         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
3424         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
3425
3426 #ifdef JP
3427         static const char s_dam[] = "»½ý:";
3428         static const char s_random[] = "¥é¥ó¥À¥à";
3429 #else
3430         static const char s_dam[] = "dam ";
3431         static const char s_random[] = "random";
3432 #endif
3433
3434         int dir;
3435         int plev = p_ptr->lev;
3436
3437         switch (spell)
3438         {
3439         case 0:
3440 #ifdef JP
3441                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë";
3442                 if (desc) return "¼å¤¤ËâË¡¤ÎÌð¤òÊü¤Ä¡£";
3443 #else
3444                 if (name) return "Magic Missile";
3445                 if (desc) return "Fires a weak bolt of magic.";
3446 #endif
3447     
3448                 {
3449                         int dice = 3 + ((plev - 1) / 5);
3450                         int sides = 4;
3451
3452                         if (info) return info_damage(dice, sides, 0);
3453
3454                         if (cast)
3455                         {
3456                                 if (!get_aim_dir(&dir)) return NULL;
3457
3458                                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
3459                         }
3460                 }
3461                 break;
3462
3463         case 1:
3464 #ifdef JP
3465                 if (name) return "¥È¥é¥Ã¥×/¥É¥¢Ç˲õ";
3466                 if (desc) return "ÎÙÀܤ¹¤ë櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
3467 #else
3468                 if (name) return "Trap / Door Destruction";
3469                 if (desc) return "Destroys all traps in adjacent squares.";
3470 #endif
3471     
3472                 {
3473                         int rad = 1;
3474
3475                         if (info) return info_radius(rad);
3476
3477                         if (cast)
3478                         {
3479                                 destroy_doors_touch();
3480                         }
3481                 }
3482                 break;
3483
3484         case 2:
3485 #ifdef JP
3486                 if (name) return "Á®¸÷";
3487                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
3488 #else
3489                 if (name) return "Flash of Light";
3490                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
3491 #endif
3492     
3493                 {
3494                         int dice = 2;
3495                         int sides = plev / 2;
3496                         int rad = (plev / 10) + 1;
3497
3498                         if (info) return info_damage(dice, sides, 0);
3499
3500                         if (cast)
3501                         {
3502                                 lite_area(damroll(dice, sides), rad);
3503                         }
3504                 }
3505                 break;
3506
3507         case 3:
3508 #ifdef JP
3509                 if (name) return "º®Íð¤Î¼ê";
3510                 if (desc) return "Áê¼ê¤òº®Í𤵤»¤ë¹¶·â¤ò¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¡£";
3511 #else
3512                 if (name) return "Touch of Confusion";
3513                 if (desc) return "Attempts to confuse the next monster that you hit.";
3514 #endif
3515     
3516                 {
3517                         if (cast)
3518                         {
3519                                 if (!(p_ptr->special_attack & ATTACK_CONFUSE))
3520                                 {
3521 #ifdef JP
3522                                         msg_print("¤¢¤Ê¤¿¤Î¼ê¤Ï¸÷¤ê»Ï¤á¤¿¡£");
3523 #else
3524                                         msg_print("Your hands start glowing.");
3525 #endif
3526
3527                                         p_ptr->special_attack |= ATTACK_CONFUSE;
3528                                         p_ptr->redraw |= (PR_STATUS);
3529                                 }
3530                         }
3531                 }
3532                 break;
3533
3534         case 4:
3535 #ifdef JP
3536                 if (name) return "ËâÎÏßÚÎö";
3537                 if (desc) return "ËâË¡¤Îµå¤òÊü¤Ä¡£";
3538 #else
3539                 if (name) return "Mana Burst";
3540                 if (desc) return "Fires a ball of magic.";
3541 #endif
3542     
3543                 {
3544                         int dice = 3;
3545                         int sides = 5;
3546                         int rad = (plev < 30) ? 2 : 3;
3547                         int base;
3548
3549                         if (p_ptr->pclass == CLASS_MAGE ||
3550                             p_ptr->pclass == CLASS_HIGH_MAGE ||
3551                             p_ptr->pclass == CLASS_SORCERER)
3552                                 base = plev + plev / 2;
3553                         else
3554                                 base = plev + plev / 4;
3555
3556
3557                         if (info) return info_damage(dice, sides, base);
3558
3559                         if (cast)
3560                         {
3561                                 if (!get_aim_dir(&dir)) return NULL;
3562
3563                                 fire_ball(GF_MISSILE, dir, damroll(dice, sides) + base, rad);
3564
3565                                 /*
3566                                  * Shouldn't actually use GF_MANA, as
3567                                  * it will destroy all items on the
3568                                  * floor
3569                                  */
3570                         }
3571                 }
3572                 break;
3573
3574         case 5:
3575 #ifdef JP
3576                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";
3577                 if (desc) return "±ê¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
3578 #else
3579                 if (name) return "Fire Bolt";
3580                 if (desc) return "Fires a bolt or beam of fire.";
3581 #endif
3582     
3583                 {
3584                         int dice = 8 + (plev - 5) / 4;
3585                         int sides = 8;
3586
3587                         if (info) return info_damage(dice, sides, 0);
3588
3589                         if (cast)
3590                         {
3591                                 if (!get_aim_dir(&dir)) return NULL;
3592
3593                                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir, damroll(dice, sides));
3594                         }
3595                 }
3596                 break;
3597
3598         case 6:
3599 #ifdef JP
3600                 if (name) return "ÎϤηý";
3601                 if (desc) return "¤´¤¯¾®¤µ¤Êʬ²ò¤Îµå¤òÊü¤Ä¡£";
3602 #else
3603                 if (name) return "Fist of Force";
3604                 if (desc) return "Fires a tiny ball of disintegration.";
3605 #endif
3606     
3607                 {
3608                         int dice = 8 + ((plev - 5) / 4);
3609                         int sides = 8;
3610
3611                         if (info) return info_damage(dice, sides, 0);
3612
3613                         if (cast)
3614                         {
3615                                 if (!get_aim_dir(&dir)) return NULL;
3616
3617                                 fire_ball(GF_DISINTEGRATE, dir,
3618                                         damroll(dice, sides), 0);
3619                         }
3620                 }
3621                 break;
3622
3623         case 7:
3624 #ifdef JP
3625                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
3626                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
3627 #else
3628                 if (name) return "Teleport Self";
3629                 if (desc) return "Teleport long distance.";
3630 #endif
3631     
3632                 {
3633                         int range = plev * 5;
3634
3635                         if (info) return info_range(range);
3636
3637                         if (cast)
3638                         {
3639                                 teleport_player(range, 0L);
3640                         }
3641                 }
3642                 break;
3643
3644         case 8:
3645 #ifdef JP
3646                 if (name) return "¥ï¥ó¥À¡¼";
3647                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤Ë¥é¥ó¥À¥à¤Ê¸ú²Ì¤òÍ¿¤¨¤ë¡£";
3648 #else
3649                 if (name) return "Wonder";
3650                 if (desc) return "Fires something with random effects.";
3651 #endif
3652     
3653                 {
3654                         if (info) return s_random;
3655
3656                         if (cast)
3657                         {
3658
3659                                 if (!get_aim_dir(&dir)) return NULL;
3660
3661                                 cast_wonder(dir);
3662                         }
3663                 }
3664                 break;
3665
3666         case 9:
3667 #ifdef JP
3668                 if (name) return "¥«¥ª¥¹¡¦¥Ü¥ë¥È";
3669                 if (desc) return "¥«¥ª¥¹¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
3670 #else
3671                 if (name) return "Chaos Bolt";
3672                 if (desc) return "Fires a bolt or ball of chaos.";
3673 #endif
3674     
3675                 {
3676                         int dice = 10 + (plev - 5) / 4;
3677                         int sides = 8;
3678
3679                         if (info) return info_damage(dice, sides, 0);
3680
3681                         if (cast)
3682                         {
3683                                 if (!get_aim_dir(&dir)) return NULL;
3684
3685                                 fire_bolt_or_beam(beam_chance(), GF_CHAOS, dir, damroll(dice, sides));
3686                         }
3687                 }
3688                 break;
3689
3690         case 10:
3691 #ifdef JP
3692                 if (name) return "¥½¥Ë¥Ã¥¯¡¦¥Ö¡¼¥à";
3693                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¹ì²»¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
3694 #else
3695                 if (name) return "Sonic Boom";
3696                 if (desc) return "Generates a ball of sound centered on you.";
3697 #endif
3698     
3699                 {
3700                         int dam = 60 + plev;
3701                         int rad = plev / 10 + 2;
3702
3703                         if (info) return info_damage(0, 0, dam/2);
3704
3705                         if (cast)
3706                         {
3707 #ifdef JP
3708                                 msg_print("¥É¡¼¥ó¡ªÉô²°¤¬Íɤ줿¡ª");
3709 #else
3710                                 msg_print("BOOM! Shake the room!");
3711 #endif
3712
3713                                 project(0, rad, py, px, dam, GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
3714                         }
3715                 }
3716                 break;
3717
3718         case 11:
3719 #ifdef JP
3720                 if (name) return "ÇËÌǤÎÌð";
3721                 if (desc) return "½ã¿è¤ÊËâÎϤΥӡ¼¥à¤òÊü¤Ä¡£";
3722 #else
3723                 if (name) return "Doom Bolt";
3724                 if (desc) return "Fires a beam of pure mana.";
3725 #endif
3726     
3727                 {
3728                         int dice = 11 + (plev - 5) / 4;
3729                         int sides = 8;
3730
3731                         if (info) return info_damage(dice, sides, 0);
3732
3733                         if (cast)
3734                         {
3735                                 if (!get_aim_dir(&dir)) return NULL;
3736
3737                                 fire_beam(GF_MANA, dir, damroll(dice, sides));
3738                         }
3739                 }
3740                 break;
3741
3742         case 12:
3743 #ifdef JP
3744                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";
3745                 if (desc) return "±ê¤Îµå¤òÊü¤Ä¡£";
3746 #else
3747                 if (name) return "Fire Ball";
3748                 if (desc) return "Fires a ball of fire.";
3749 #endif
3750     
3751                 {
3752                         int dam = plev + 55;
3753                         int rad = 2;
3754
3755                         if (info) return info_damage(0, 0, dam);
3756
3757                         if (cast)
3758                         {
3759                                 if (!get_aim_dir(&dir)) return NULL;
3760
3761                                 fire_ball(GF_FIRE, dir, dam, rad);
3762                         }
3763                 }
3764                 break;
3765
3766         case 13:
3767 #ifdef JP
3768                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥¢¥¦¥§¥¤";
3769                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3770 #else
3771                 if (name) return "Teleport Other";
3772                 if (desc) return "Teleports all monsters on the line away unless resisted.";
3773 #endif
3774     
3775                 {
3776                         int power = plev;
3777
3778                         if (info) return info_power(power);
3779
3780                         if (cast)
3781                         {
3782                                 if (!get_aim_dir(&dir)) return NULL;
3783
3784                                 fire_beam(GF_AWAY_ALL, dir, power);
3785                         }
3786                 }
3787                 break;
3788
3789         case 14:
3790 #ifdef JP
3791                 if (name) return "Ç˲õ¤Î¸ÀÍÕ";
3792                 if (desc) return "¼þÊդΥ¢¥¤¥Æ¥à¡¢¥â¥ó¥¹¥¿¡¼¡¢ÃÏ·Á¤òÇ˲õ¤¹¤ë¡£";
3793 #else
3794                 if (name) return "Word of Destruction";
3795                 if (desc) return "Destroy everything in nearby area.";
3796 #endif
3797     
3798                 {
3799                         int base = 12;
3800                         int sides = 4;
3801
3802                         if (cast)
3803                         {
3804                                 destroy_area(py, px, base + randint1(sides), FALSE);
3805                         }
3806                 }
3807                 break;
3808
3809         case 15:
3810 #ifdef JP
3811                 if (name) return "¥í¥°¥ë¥¹È¯Æ°";
3812                 if (desc) return "µðÂç¤Ê¥«¥ª¥¹¤Îµå¤òÊü¤Ä¡£";
3813 #else
3814                 if (name) return "Invoke Logrus";
3815                 if (desc) return "Fires a huge ball of chaos.";
3816 #endif
3817     
3818                 {
3819                         int dam = plev * 2 + 99;
3820                         int rad = plev / 5;
3821
3822                         if (info) return info_damage(0, 0, dam);
3823
3824                         if (cast)
3825                         {
3826                                 if (!get_aim_dir(&dir)) return NULL;
3827
3828                                 fire_ball(GF_CHAOS, dir, dam, rad);
3829                         }
3830                 }
3831                 break;
3832
3833         case 16:
3834 #ifdef JP
3835                 if (name) return "¾¼ÔÊÑÍÆ";
3836                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤòÊѿȤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3837 #else
3838                 if (name) return "Polymorph Other";
3839                 if (desc) return "Attempts to polymorph a monster.";
3840 #endif
3841     
3842                 {
3843                         int power = plev;
3844
3845                         if (info) return info_power(power);
3846
3847                         if (cast)
3848                         {
3849                                 if (!get_aim_dir(&dir)) return NULL;
3850
3851                                 poly_monster(dir, plev);
3852                         }
3853                 }
3854                 break;
3855
3856         case 17:
3857 #ifdef JP
3858                 if (name) return "Ï¢º¿°ðºÊ";
3859                 if (desc) return "Á´Êý¸þ¤ËÂФ·¤ÆÅÅ·â¤Î¥Ó¡¼¥à¤òÊü¤Ä¡£";
3860 #else
3861                 if (name) return "Chain Lightning";
3862                 if (desc) return "Fires lightning beams in all directions.";
3863 #endif
3864     
3865                 {
3866                         int dice = 5 + plev / 10;
3867                         int sides = 8;
3868
3869                         if (info) return info_damage(dice, sides, 0);
3870
3871                         if (cast)
3872                         {
3873                                 for (dir = 0; dir <= 9; dir++)
3874                                         fire_beam(GF_ELEC, dir, damroll(dice, sides));
3875                         }
3876                 }
3877                 break;
3878
3879         case 18:
3880 #ifdef JP
3881                 if (name) return "ËâÎÏÉõÆþ";
3882                 if (desc) return "¾ó/ËâË¡ËÀ¤Î½¼Å¶²ó¿ô¤òÁý¤ä¤¹¤«¡¢½¼Å¶Ãæ¤Î¥í¥Ã¥É¤Î½¼Å¶»þ´Ö¤ò¸º¤é¤¹¡£";
3883 #else
3884                 if (name) return "Arcane Binding";
3885                 if (desc) return "Recharges staffs, wands or rods.";
3886 #endif
3887     
3888                 {
3889                         int power = 90;
3890
3891                         if (info) return info_power(power);
3892
3893                         if (cast)
3894                         {
3895                                 if (!recharge(power)) return NULL;
3896                         }
3897                 }
3898                 break;
3899
3900         case 19:
3901 #ifdef JP
3902                 if (name) return "¸¶»Òʬ²ò";
3903                 if (desc) return "µðÂç¤Êʬ²ò¤Îµå¤òÊü¤Ä¡£";
3904 #else
3905                 if (name) return "Disintegrate";
3906                 if (desc) return "Fires a huge ball of disintegration.";
3907 #endif
3908     
3909                 {
3910                         int dam = plev + 70;
3911                         int rad = 3 + plev / 40;
3912
3913                         if (info) return info_damage(0, 0, dam);
3914
3915                         if (cast)
3916                         {
3917                                 if (!get_aim_dir(&dir)) return NULL;
3918
3919                                 fire_ball(GF_DISINTEGRATE, dir, dam, rad);
3920                         }
3921                 }
3922                 break;
3923
3924         case 20:
3925 #ifdef JP
3926                 if (name) return "¸½¼ÂÊÑÍÆ";
3927                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
3928 #else
3929                 if (name) return "Alter Reality";
3930                 if (desc) return "Recreates current dungeon level.";
3931 #endif
3932     
3933                 {
3934                         int base = 15;
3935                         int sides = 20;
3936
3937                         if (info) return info_delay(base, sides);
3938
3939                         if (cast)
3940                         {
3941                                 alter_reality();
3942                         }
3943                 }
3944                 break;
3945
3946         case 21:
3947 #ifdef JP
3948                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥í¥±¥Ã¥È";
3949                 if (desc) return "¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë¡£";
3950 #else
3951                 if (name) return "Magic Rocket";
3952                 if (desc) return "Fires a magic rocket.";
3953 #endif
3954     
3955                 {
3956                         int dam = 120 + plev * 2;
3957                         int rad = 2;
3958
3959                         if (info) return info_damage(0, 0, dam);
3960
3961                         if (cast)
3962                         {
3963                                 if (!get_aim_dir(&dir)) return NULL;
3964
3965 #ifdef JP
3966                                 msg_print("¥í¥±¥Ã¥Èȯ¼Í¡ª");
3967 #else
3968                                 msg_print("You launch a rocket!");
3969 #endif
3970
3971                                 fire_rocket(GF_ROCKET, dir, dam, rad);
3972                         }
3973                 }
3974                 break;
3975
3976         case 22:
3977 #ifdef JP
3978                 if (name) return "º®Æ٤οÏ";
3979                 if (desc) return "Éð´ï¤Ë¥«¥ª¥¹¤Î°À­¤ò¤Ä¤±¤ë¡£";
3980 #else
3981                 if (name) return "Chaos Branding";
3982                 if (desc) return "Makes current weapon a Chaotic weapon.";
3983 #endif
3984     
3985                 {
3986                         if (cast)
3987                         {
3988                                 brand_weapon(2);
3989                         }
3990                 }
3991                 break;
3992
3993         case 23:
3994 #ifdef JP
3995                 if (name) return "°­Ë⾤´­";
3996                 if (desc) return "°­Ëâ¤ò1Âξ¤´­¤¹¤ë¡£";
3997 #else
3998                 if (name) return "Summon Demon";
3999                 if (desc) return "Summons a demon.";
4000 #endif
4001     
4002                 {
4003                         if (cast)
4004                         {
4005                                 u32b mode = 0L;
4006                                 bool pet = !one_in_(3);
4007
4008                                 if (pet) mode |= PM_FORCE_PET;
4009                                 else mode |= PM_NO_PET;
4010                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
4011
4012                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_DEMON, mode))
4013                                 {
4014 #ifdef JP
4015                                         msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
4016 #else
4017                                         msg_print("The area fills with a stench of sulphur and brimstone.");
4018 #endif
4019
4020                                         if (pet)
4021                                         {
4022 #ifdef JP
4023                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
4024 #else
4025                                                 msg_print("'What is thy bidding... Master?'");
4026 #endif
4027                                         }
4028                                         else
4029                                         {
4030 #ifdef JP
4031                                                 msg_print("¡ÖÈܤ·¤­¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
4032 #else
4033                                                 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
4034 #endif
4035                                         }
4036                                 }
4037                         }
4038                 }
4039                 break;
4040
4041         case 24:
4042 #ifdef JP
4043                 if (name) return "½ÅÎϸ÷Àþ";
4044                 if (desc) return "½ÅÎϤΥӡ¼¥à¤òÊü¤Ä¡£";
4045 #else
4046                 if (name) return "Beam of Gravity";
4047                 if (desc) return "Fires a beam of gravity.";
4048 #endif
4049     
4050                 {
4051                         int dice = 9 + (plev - 5) / 4;
4052                         int sides = 8;
4053
4054                         if (info) return info_damage(dice, sides, 0);
4055
4056                         if (cast)
4057                         {
4058                                 if (!get_aim_dir(&dir)) return NULL;
4059
4060                                 fire_beam(GF_GRAVITY, dir, damroll(dice, sides));
4061                         }
4062                 }
4063                 break;
4064
4065         case 25:
4066 #ifdef JP
4067                 if (name) return "ήÀ±·²";
4068                 if (desc) return "¼«Ê¬¤Î¼þÊÕ¤Ëð¨ÀФòÍî¤È¤¹¡£";
4069 #else
4070                 if (name) return "Meteor Swarm";
4071                 if (desc) return "Makes meteor balls fall down to nearby random locations.";
4072 #endif
4073     
4074                 {
4075                         int dam = plev * 2;
4076                         int rad = 2;
4077
4078                         if (info) return info_multi_damage(dam);
4079
4080                         if (cast)
4081                         {
4082                                 cast_meteor(dam, rad);
4083                         }
4084                 }
4085                 break;
4086
4087         case 26:
4088 #ifdef JP
4089                 if (name) return "±ë¤Î°ì·â";
4090                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿Ä¶µðÂç¤Ê±ê¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
4091 #else
4092                 if (name) return "Flame Strike";
4093                 if (desc) return "Generate a huge ball of fire centered on you.";
4094 #endif
4095     
4096                 {
4097                         int dam = 300 + 3 * plev;
4098                         int rad = 8;
4099
4100                         if (info) return info_damage(0, 0, dam/2);
4101
4102                         if (cast)
4103                         {
4104                                 fire_ball(GF_FIRE, 0, dam, rad);
4105                         }
4106                 }
4107                 break;
4108
4109         case 27:
4110 #ifdef JP
4111                 if (name) return "º®ÆÙ¾¤Íè";
4112                 if (desc) return "¥é¥ó¥À¥à¤Ê°À­¤Îµå¤ä¥Ó¡¼¥à¤òȯÀ¸¤µ¤»¤ë¡£";
4113 #else
4114                 if (name) return "Call Chaos";
4115                 if (desc) return "Generate random kind of balls or beams.";
4116 #endif
4117     
4118                 {
4119                         if (info) return format("%s150 / 250", s_dam);
4120
4121                         if (cast)
4122                         {
4123                                 call_chaos();
4124                         }
4125                 }
4126                 break;
4127
4128         case 28:
4129 #ifdef JP
4130                 if (name) return "¼«¸ÊÊÑÍÆ";
4131                 if (desc) return "¼«Ê¬¤òÊѿȤµ¤»¤è¤¦¤È¤¹¤ë¡£";
4132 #else
4133                 if (name) return "Polymorph Self";
4134                 if (desc) return "Polymorphs yourself.";
4135 #endif
4136     
4137                 {
4138                         if (cast)
4139                         {
4140 #ifdef JP
4141                                 if (!get_check("ÊѿȤ·¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) return NULL;
4142 #else
4143                                 if (!get_check("You will polymorph yourself. Are you sure? ")) return NULL;
4144 #endif
4145                                 do_poly_self();
4146                         }
4147                 }
4148                 break;
4149
4150         case 29:
4151 #ifdef JP
4152                 if (name) return "ËâÎϤÎÍò";
4153                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤǵðÂç¤Ê½ã¿è¤ÊËâÎϤεå¤òÊü¤Ä¡£";
4154 #else
4155                 if (name) return "Mana Storm";
4156                 if (desc) return "Fires an extremely powerful huge ball of pure mana.";
4157 #endif
4158     
4159                 {
4160                         int dam = 300 + plev * 4;
4161                         int rad = 4;
4162
4163                         if (info) return info_damage(0, 0, dam);
4164
4165                         if (cast)
4166                         {
4167                                 if (!get_aim_dir(&dir)) return NULL;
4168
4169                                 fire_ball(GF_MANA, dir, dam, rad);
4170                         }
4171                 }
4172                 break;
4173
4174         case 30:
4175 #ifdef JP
4176                 if (name) return "¥í¥°¥ë¥¹¤Î¥Ö¥ì¥¹";
4177                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤʥ«¥ª¥¹¤Îµå¤òÊü¤Ä¡£";
4178 #else
4179                 if (name) return "Breathe Logrus";
4180                 if (desc) return "Fires an extremely powerful ball of chaos.";
4181 #endif
4182     
4183                 {
4184                         int dam = p_ptr->chp;
4185                         int rad = 2;
4186
4187                         if (info) return info_damage(0, 0, dam);
4188
4189                         if (cast)
4190                         {
4191                                 if (!get_aim_dir(&dir)) return NULL;
4192
4193                                 fire_ball(GF_CHAOS, dir, dam, rad);
4194                         }
4195                 }
4196                 break;
4197
4198         case 31:
4199 #ifdef JP
4200                 if (name) return "µõ̵¾¤Íè";
4201                 if (desc) return "¼«Ê¬¤Ë¼þ°Ï¤Ë¸þ¤«¤Ã¤Æ¡¢¥í¥±¥Ã¥È¡¢½ã¿è¤ÊËâÎϤε塢Êü¼ÍÀ­ÇÑ´þʪ¤Îµå¤òÊü¤Ä¡£¤¿¤À¤·¡¢ÊɤËÎÙÀܤ·¤Æ»ÈÍѤ¹¤ë¤È¹­ÈϰϤòÇ˲õ¤¹¤ë¡£";
4202 #else
4203                 if (name) return "Call the Void";
4204                 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.";
4205 #endif
4206     
4207                 {
4208                         if (info) return format("%s3 * 175", s_dam);
4209
4210                         if (cast)
4211                         {
4212                                 call_the_();
4213                         }
4214                 }
4215                 break;
4216         }
4217
4218         return "";
4219 }
4220
4221
4222 static cptr do_death_spell(int spell, int mode)
4223 {
4224         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
4225         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
4226         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
4227         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
4228
4229 #ifdef JP
4230         static const char s_dam[] = "»½ý:";
4231         static const char s_random[] = "¥é¥ó¥À¥à";
4232 #else
4233         static const char s_dam[] = "dam ";
4234         static const char s_random[] = "random";
4235 #endif
4236
4237         int dir;
4238         int plev = p_ptr->lev;
4239
4240         switch (spell)
4241         {
4242         case 0:
4243 #ifdef JP
4244                 if (name) return "̵À¸Ì¿´¶ÃÎ";
4245                 if (desc) return "¶á¤¯¤ÎÀ¸Ì¿¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
4246 #else
4247                 if (name) return "Detect Unlife";
4248                 if (desc) return "Detects all nonliving monsters in your vicinity.";
4249 #endif
4250     
4251                 {
4252                         int rad = DETECT_RAD_DEFAULT;
4253
4254                         if (info) return info_radius(rad);
4255
4256                         if (cast)
4257                         {
4258                                 detect_monsters_nonliving(rad);
4259                         }
4260                 }
4261                 break;
4262
4263         case 1:
4264 #ifdef JP
4265                 if (name) return "¼ö»¦ÃÆ";
4266                 if (desc) return "¤´¤¯¾®¤µ¤Ê¼Ù°­¤ÊÎϤò»ý¤Ä¥Ü¡¼¥ë¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
4267 #else
4268                 if (name) return "Malediction";
4269                 if (desc) return "Fires a tiny ball of evil power which hurts good monsters greatly.";
4270 #endif
4271     
4272                 {
4273                         int dice = 3 + (plev - 1) / 5;
4274                         int sides = 4;
4275                         int rad = 0;
4276
4277                         if (info) return info_damage(dice, sides, 0);
4278
4279                         if (cast)
4280                         {
4281                                 if (!get_aim_dir(&dir)) return NULL;
4282
4283                                 /*
4284                                  * A radius-0 ball may (1) be aimed at
4285                                  * objects etc., and will affect them;
4286                                  * (2) may be aimed at ANY visible
4287                                  * monster, unlike a 'bolt' which must
4288                                  * travel to the monster.
4289                                  */
4290
4291                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides), rad);
4292
4293                                 if (one_in_(5))
4294                                 {
4295                                         /* Special effect first */
4296                                         int effect = randint1(1000);
4297
4298                                         if (effect == 666)
4299                                                 fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);
4300                                         else if (effect < 500)
4301                                                 fire_ball_hide(GF_TURN_ALL, dir, plev, 0);
4302                                         else if (effect < 800)
4303                                                 fire_ball_hide(GF_OLD_CONF, dir, plev, 0);
4304                                         else
4305                                                 fire_ball_hide(GF_STUN, dir, plev, 0);
4306                                 }
4307                         }
4308                 }
4309                 break;
4310
4311         case 2:
4312 #ifdef JP
4313                 if (name) return "¼Ù°­´¶ÃÎ";
4314                 if (desc) return "¶á¤¯¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
4315 #else
4316                 if (name) return "Detect Evil";
4317                 if (desc) return "Detects all evil monsters in your vicinity.";
4318 #endif
4319     
4320                 {
4321                         int rad = DETECT_RAD_DEFAULT;
4322
4323                         if (info) return info_radius(rad);
4324
4325                         if (cast)
4326                         {
4327                                 detect_monsters_evil(rad);
4328                         }
4329                 }
4330                 break;
4331
4332         case 3:
4333 #ifdef JP
4334                 if (name) return "°­½­±À";
4335                 if (desc) return "ÆǤεå¤òÊü¤Ä¡£";
4336 #else
4337                 if (name) return "Stinking Cloud";
4338                 if (desc) return "Fires a ball of poison.";
4339 #endif
4340     
4341                 {
4342                         int dam = 10 + plev / 2;
4343                         int rad = 2;
4344
4345                         if (info) return info_damage(0, 0, dam);
4346
4347                         if (cast)
4348                         {
4349                                 if (!get_aim_dir(&dir)) return NULL;
4350
4351                                 fire_ball(GF_POIS, dir, dam, rad);
4352                         }
4353                 }
4354                 break;
4355
4356         case 4:
4357 #ifdef JP
4358                 if (name) return "¹õ¤¤Ì²¤ê";
4359                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4360 #else
4361                 if (name) return "Black Sleep";
4362                 if (desc) return "Attempts to sleep a monster.";
4363 #endif
4364     
4365                 {
4366                         int power = plev;
4367
4368                         if (info) return info_power(power);
4369
4370                         if (cast)
4371                         {
4372                                 if (!get_aim_dir(&dir)) return NULL;
4373
4374                                 sleep_monster(dir, plev);
4375                         }
4376                 }
4377                 break;
4378
4379         case 5:
4380 #ifdef JP
4381                 if (name) return "ÂÑÆÇ";
4382                 if (desc) return "°ìÄê»þ´Ö¡¢ÆǤؤÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
4383 #else
4384                 if (name) return "Resist Poison";
4385                 if (desc) return "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.";
4386 #endif
4387     
4388                 {
4389                         int base = 20;
4390
4391                         if (info) return info_duration(base, base);
4392
4393                         if (cast)
4394                         {
4395                                 set_oppose_pois(randint1(base) + base, FALSE);
4396                         }
4397                 }
4398                 break;
4399
4400         case 6:
4401 #ifdef JP
4402                 if (name) return "¶²¹²";
4403                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¡¢Û¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4404 #else
4405                 if (name) return "Horrify";
4406                 if (desc) return "Attempts to scare and stun a monster.";
4407 #endif
4408     
4409                 {
4410                         int power = plev;
4411
4412                         if (info) return info_power(power);
4413
4414                         if (cast)
4415                         {
4416                                 if (!get_aim_dir(&dir)) return NULL;
4417
4418                                 fear_monster(dir, power);
4419                                 stun_monster(dir, power);
4420                         }
4421                 }
4422                 break;
4423
4424         case 7:
4425 #ifdef JP
4426                 if (name) return "¥¢¥ó¥Ç¥Ã¥É½¾Â°";
4427                 if (desc) return "¥¢¥ó¥Ç¥Ã¥É1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4428 #else
4429                 if (name) return "Enslave Undead";
4430                 if (desc) return "Attempts to charm an undead monster.";
4431 #endif
4432     
4433                 {
4434                         int power = plev;
4435
4436                         if (info) return info_power(power);
4437
4438                         if (cast)
4439                         {
4440                                 if (!get_aim_dir(&dir)) return NULL;
4441
4442                                 control_one_undead(dir, power);
4443                         }
4444                 }
4445                 break;
4446
4447         case 8:
4448 #ifdef JP
4449                 if (name) return "¥¨¥ó¥È¥í¥Ô¡¼¤Îµå";
4450                 if (desc) return "À¸Ì¿¤Î¤¢¤ë¼Ô¤Ë¸ú²Ì¤Î¤¢¤ëµå¤òÊü¤Ä¡£";
4451 #else
4452                 if (name) return "Orb of Entropy";
4453                 if (desc) return "Fires a ball which damages living monsters.";
4454 #endif
4455     
4456                 {
4457                         int dice = 3;
4458                         int sides = 6;
4459                         int rad = (plev < 30) ? 2 : 3;
4460                         int base;
4461
4462                         if (p_ptr->pclass == CLASS_MAGE ||
4463                             p_ptr->pclass == CLASS_HIGH_MAGE ||
4464                             p_ptr->pclass == CLASS_SORCERER)
4465                                 base = plev + plev / 2;
4466                         else
4467                                 base = plev + plev / 4;
4468
4469
4470                         if (info) return info_damage(dice, sides, base);
4471
4472                         if (cast)
4473                         {
4474                                 if (!get_aim_dir(&dir)) return NULL;
4475
4476                                 fire_ball(GF_OLD_DRAIN, dir, damroll(dice, dice) + base, rad);
4477                         }
4478                 }
4479                 break;
4480
4481         case 9:
4482 #ifdef JP
4483                 if (name) return "ÃϹö¤ÎÌð";
4484                 if (desc) return "ÃϹö¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
4485 #else
4486                 if (name) return "Nether Bolt";
4487                 if (desc) return "Fires a bolt or beam of nether.";
4488 #endif
4489     
4490                 {
4491                         int dice = 8 + (plev - 5) / 4;
4492                         int sides = 8;
4493
4494                         if (info) return info_damage(dice, sides, 0);
4495
4496                         if (cast)
4497                         {
4498                                 if (!get_aim_dir(&dir)) return NULL;
4499
4500                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
4501                         }
4502                 }
4503                 break;
4504
4505         case 10:
4506 #ifdef JP
4507                 if (name) return "»¦Ù¤±À";
4508                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿ÆǤεå¤òȯÀ¸¤µ¤»¤ë¡£";
4509 #else
4510                 if (name) return "Cloud kill";
4511                 if (desc) return "Generate a ball of poison centered on you.";
4512 #endif
4513     
4514                 {
4515                         int dam = (30 + plev) * 2;
4516                         int rad = plev / 10 + 2;
4517
4518                         if (info) return info_damage(0, 0, dam/2);
4519
4520                         if (cast)
4521                         {
4522                                 project(0, rad, py, px, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);
4523                         }
4524                 }
4525                 break;
4526
4527         case 11:
4528 #ifdef JP
4529                 if (name) return "¥â¥ó¥¹¥¿¡¼¾ÃÌÇ";
4530                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¾Ã¤·µî¤ë¡£·Ð¸³Ãͤ䥢¥¤¥Æ¥à¤Ï¼ê¤ËÆþ¤é¤Ê¤¤¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4531 #else
4532                 if (name) return "Genocide One";
4533                 if (desc) return "Attempts to vanish a monster.";
4534 #endif
4535     
4536                 {
4537                         int power = plev + 50;
4538
4539                         if (info) return info_power(power);
4540
4541                         if (cast)
4542                         {
4543                                 if (!get_aim_dir(&dir)) return NULL;
4544
4545                                 fire_ball_hide(GF_GENOCIDE, dir, power, 0);
4546                         }
4547                 }
4548                 break;
4549
4550         case 12:
4551 #ifdef JP
4552                 if (name) return "ÆǤοÏ";
4553                 if (desc) return "Éð´ï¤ËÆǤΰÀ­¤ò¤Ä¤±¤ë¡£";
4554 #else
4555                 if (name) return "Poison Branding";
4556                 if (desc) return "Makes current weapon poison branded.";
4557 #endif
4558     
4559                 {
4560                         if (cast)
4561                         {
4562                                 brand_weapon(3);
4563                         }
4564                 }
4565                 break;
4566
4567         case 13:
4568 #ifdef JP
4569                 if (name) return "µÛ·ì¥É¥ì¥¤¥ó";
4570                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤ«¤éÀ¸Ì¿ÎϤòµÛ¤¤¤È¤ë¡£µÛ¤¤¤È¤Ã¤¿À¸Ì¿ÎϤˤè¤Ã¤ÆËþÊ¢ÅÙ¤¬¾å¤¬¤ë¡£";
4571 #else
4572                 if (name) return "Vampiric Drain";
4573                 if (desc) return "Absorbs some HP from a monster and gives them to you. You will also gain nutritional sustenance from this.";
4574 #endif
4575     
4576                 {
4577                         int dice = 1;
4578                         int sides = plev * 2;
4579                         int base = plev * 2;
4580
4581                         if (info) return info_damage(dice, sides, base);
4582
4583                         if (cast)
4584                         {
4585                                 int dam = base + damroll(dice, sides);
4586
4587                                 if (!get_aim_dir(&dir)) return NULL;
4588
4589                                 if (drain_life(dir, dam))
4590                                 {
4591                                         chg_virtue(V_SACRIFICE, -1);
4592                                         chg_virtue(V_VITALITY, -1);
4593
4594                                         hp_player(dam);
4595
4596                                         /*
4597                                          * Gain nutritional sustenance:
4598                                          * 150/hp drained
4599                                          *
4600                                          * A Food ration gives 5000
4601                                          * food points (by contrast)
4602                                          * Don't ever get more than
4603                                          * "Full" this way But if we
4604                                          * ARE Gorged, it won't cure
4605                                          * us
4606                                          */
4607                                         dam = p_ptr->food + MIN(5000, 100 * dam);
4608
4609                                         /* Not gorged already */
4610                                         if (p_ptr->food < PY_FOOD_MAX)
4611                                                 set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);
4612                                 }
4613                         }
4614                 }
4615                 break;
4616
4617         case 14:
4618 #ifdef JP
4619                 if (name) return "È¿º²¤Î½Ñ";
4620                 if (desc) return "¼þ°Ï¤Î»àÂΤä¹ü¤òÀ¸¤­ÊÖ¤¹¡£";
4621 #else
4622                 if (name) return "Animate dead";
4623                 if (desc) return "Resurrects nearby corpse and skeletons. And makes these your pets.";
4624 #endif
4625     
4626                 {
4627                         if (cast)
4628                         {
4629                                 animate_dead(0, py, px);
4630                         }
4631                 }
4632                 break;
4633
4634         case 15:
4635 #ifdef JP
4636                 if (name) return "Ëõ»¦";
4637                 if (desc) return "»ØÄꤷ¤¿Ê¸»ú¤Î¥â¥ó¥¹¥¿¡¼¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4638 #else
4639                 if (name) return "Genocide";
4640                 if (desc) return "Eliminates an entire class of monster, exhausting you.  Powerful or unique monsters may resist.";
4641 #endif
4642     
4643                 {
4644                         int power = plev+50;
4645
4646                         if (info) return info_power(power);
4647
4648                         if (cast)
4649                         {
4650                                 symbol_genocide(power, TRUE);
4651                         }
4652                 }
4653                 break;
4654
4655         case 16:
4656 #ifdef JP
4657                 if (name) return "¶¸Àï»Î²½";
4658                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤¹¤ë¡£";
4659 #else
4660                 if (name) return "Berserk";
4661                 if (desc) return "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.";
4662 #endif
4663     
4664                 {
4665                         int base = 25;
4666
4667                         if (info) return info_duration(base, base);
4668
4669                         if (cast)
4670                         {
4671                                 set_shero(randint1(base) + base, FALSE);
4672                                 hp_player(30);
4673                                 set_afraid(0);
4674                         }
4675                 }
4676                 break;
4677
4678         case 17:
4679 #ifdef JP
4680                 if (name) return "°­Î´­";
4681                 if (desc) return "¥é¥ó¥À¥à¤ÇÍÍ¡¹¤Ê¸ú²Ì¤¬µ¯¤³¤ë¡£";
4682 #else
4683                 if (name) return "Invoke Spirits";
4684                 if (desc) return "Causes random effects.";
4685 #endif
4686     
4687                 {
4688                         if (info) return s_random;
4689
4690                         if (cast)
4691                         {
4692                                 if (!get_aim_dir(&dir)) return NULL;
4693
4694                                 cast_invoke_spirits(dir);
4695                         }
4696                 }
4697                 break;
4698
4699         case 18:
4700 #ifdef JP
4701                 if (name) return "°Å¹õ¤ÎÌð";
4702                 if (desc) return "°Å¹õ¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
4703 #else
4704                 if (name) return "Dark Bolt";
4705                 if (desc) return "Fires a bolt or beam of darkness.";
4706 #endif
4707     
4708                 {
4709                         int dice = 4 + (plev - 5) / 4;
4710                         int sides = 8;
4711
4712                         if (info) return info_damage(dice, sides, 0);
4713
4714                         if (cast)
4715                         {
4716                                 if (!get_aim_dir(&dir)) return NULL;
4717
4718                                 fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));
4719                         }
4720                 }
4721                 break;
4722
4723         case 19:
4724 #ifdef JP
4725                 if (name) return "¶¸ÍðÀï»Î";
4726                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤·¡¢²Ã®¤¹¤ë¡£";
4727 #else
4728                 if (name) return "Battle Frenzy";
4729                 if (desc) return "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.";
4730 #endif
4731     
4732                 {
4733                         int b_base = 25;
4734                         int sp_base = plev / 2;
4735                         int sp_sides = 20 + plev / 2;
4736
4737                         if (info) return info_duration(b_base, b_base);
4738
4739                         if (cast)
4740                         {
4741                                 set_shero(randint1(25) + 25, FALSE);
4742                                 hp_player(30);
4743                                 set_afraid(0);
4744                                 set_fast(randint1(sp_sides) + sp_base, FALSE);
4745                         }
4746                 }
4747                 break;
4748
4749         case 20:
4750 #ifdef JP
4751                 if (name) return "µÛ·ì¤Î¿Ï";
4752                 if (desc) return "Éð´ï¤ËµÛ·ì¤Î°À­¤ò¤Ä¤±¤ë¡£";
4753 #else
4754                 if (name) return "Vampiric Branding";
4755                 if (desc) return "Makes current weapon Vampiric.";
4756 #endif
4757     
4758                 {
4759                         if (cast)
4760                         {
4761                                 brand_weapon(4);
4762                         }
4763                 }
4764                 break;
4765
4766         case 21:
4767 #ifdef JP
4768                 if (name) return "¿¿¡¦µÛ·ì";
4769                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤ«¤éÀ¸Ì¿ÎϤòµÛ¤¤¤È¤ë¡£µÛ¤¤¤È¤Ã¤¿À¸Ì¿ÎϤˤè¤Ã¤ÆÂÎÎϤ¬²óÉü¤¹¤ë¡£";
4770 #else
4771                 if (name) return "Vampirism True";
4772                 if (desc) return "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.";
4773 #endif
4774     
4775                 {
4776                         int dam = 100;
4777
4778                         if (info) return format("%s3*%d", s_dam, dam);
4779
4780                         if (cast)
4781                         {
4782                                 int i;
4783
4784                                 if (!get_aim_dir(&dir)) return NULL;
4785
4786                                 chg_virtue(V_SACRIFICE, -1);
4787                                 chg_virtue(V_VITALITY, -1);
4788
4789                                 for (i = 0; i < 3; i++)
4790                                 {
4791                                         if (drain_life(dir, dam))
4792                                                 hp_player(dam);
4793                                 }
4794                         }
4795                 }
4796                 break;
4797
4798         case 22:
4799 #ifdef JP
4800                 if (name) return "»à¤Î¸Àº²";
4801                 if (desc) return "»ë³¦Æâ¤ÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
4802 #else
4803                 if (name) return "Nether Wave";
4804                 if (desc) return "Damages all living monsters in sight.";
4805 #endif
4806     
4807                 {
4808                         int sides = plev * 3;
4809
4810                         if (info) return info_damage(1, sides, 0);
4811
4812                         if (cast)
4813                         {
4814                                 dispel_living(randint1(sides));
4815                         }
4816                 }
4817                 break;
4818
4819         case 23:
4820 #ifdef JP
4821                 if (name) return "°Å¹õ¤ÎÍò";
4822                 if (desc) return "µðÂç¤Ê°Å¹õ¤Îµå¤òÊü¤Ä¡£";
4823 #else
4824                 if (name) return "Darkness Storm";
4825                 if (desc) return "Fires a huge ball of darkness.";
4826 #endif
4827     
4828                 {
4829                         int dam = 100 + plev * 2;
4830                         int rad = 4;
4831
4832                         if (info) return info_damage(0, 0, dam);
4833
4834                         if (cast)
4835                         {
4836                                 if (!get_aim_dir(&dir)) return NULL;
4837
4838                                 fire_ball(GF_DARK, dir, dam, rad);
4839                         }
4840                 }
4841                 break;
4842
4843         case 24:
4844 #ifdef JP
4845                 if (name) return "»à¤Î¸÷Àþ";
4846                 if (desc) return "»à¤Î¸÷Àþ¤òÊü¤Ä¡£";
4847 #else
4848                 if (name) return "Death Ray";
4849                 if (desc) return "Fires a beam of death.";
4850 #endif
4851     
4852                 {
4853                         if (cast)
4854                         {
4855                                 if (!get_aim_dir(&dir)) return NULL;
4856
4857                                 death_ray(dir, plev);
4858                         }
4859                 }
4860                 break;
4861
4862         case 25:
4863 #ifdef JP
4864                 if (name) return "»à¼Ô¾¤´­";
4865                 if (desc) return "1ÂΤΥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
4866 #else
4867                 if (name) return "Raise the Dead";
4868                 if (desc) return "Summons an undead monster.";
4869 #endif
4870     
4871                 {
4872                         if (cast)
4873                         {
4874                                 int type;
4875                                 bool pet = one_in_(3);
4876                                 u32b mode = 0L;
4877
4878                                 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
4879
4880                                 if (!pet || (pet && (plev > 24) && one_in_(3)))
4881                                         mode |= PM_ALLOW_GROUP;
4882
4883                                 if (pet) mode |= PM_FORCE_PET;
4884                                 else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
4885
4886                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, type, mode))
4887                                 {
4888 #ifdef JP
4889                                         msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤­»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½­¤ò±¿¤ó¤Ç¤¤¤ë...");
4890 #else
4891                                         msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
4892 #endif
4893
4894
4895                                         if (pet)
4896                                         {
4897 #ifdef JP
4898                                                 msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
4899 #else
4900                                                 msg_print("Ancient, long-dead forms arise from the ground to serve you!");
4901 #endif
4902                                         }
4903                                         else
4904                                         {
4905 #ifdef JP
4906                                                 msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
4907 #else
4908                                                 msg_print("'The dead arise... to punish you for disturbing them!'");
4909 #endif
4910                                         }
4911
4912                                         chg_virtue(V_UNLIFE, 1);
4913                                 }
4914                         }
4915                 }
4916                 break;
4917
4918         case 26:
4919 #ifdef JP
4920                 if (name) return "»à¼Ô¤ÎÈëÅÁ";
4921                 if (desc) return "¥¢¥¤¥Æ¥à¤ò1¤Ä¼±Ê̤¹¤ë¡£¥ì¥Ù¥ë¤¬¹â¤¤¤È¥¢¥¤¥Æ¥à¤ÎǽÎϤò´°Á´¤ËÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£";
4922 #else
4923                 if (name) return "Esoteria";
4924                 if (desc) return "Identifies an item. Or *identifies* an item at higher level.";
4925 #endif
4926     
4927                 {
4928                         if (cast)
4929                         {
4930                                 if (randint1(50) > plev)
4931                                 {
4932                                         if (!ident_spell(FALSE)) return NULL;
4933                                 }
4934                                 else
4935                                 {
4936                                         if (!identify_fully(FALSE)) return NULL;
4937                                 }
4938                         }
4939                 }
4940                 break;
4941
4942         case 27:
4943 #ifdef JP
4944                 if (name) return "µÛ·ìµ´ÊѲ½";
4945                 if (desc) return "°ìÄê»þ´Ö¡¢µÛ·ìµ´¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤ËµÛ·ìµ´¤È¤·¤Æ¤ÎǽÎϤòÆÀ¤ë¡£";
4946 #else
4947                 if (name) return "Polymorph Vampire";
4948                 if (desc) return "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.";
4949 #endif
4950     
4951                 {
4952                         int base = 10 + plev / 2;
4953
4954                         if (info) return info_duration(base, base);
4955
4956                         if (cast)
4957                         {
4958                                 set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);
4959                         }
4960                 }
4961                 break;
4962
4963         case 28:
4964 #ifdef JP
4965                 if (name) return "À¸Ì¿ÎÏÉü³è";
4966                 if (desc) return "¼º¤Ã¤¿·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
4967 #else
4968                 if (name) return "Restore Life";
4969                 if (desc) return "Restore lost experience.";
4970 #endif
4971     
4972                 {
4973                         if (cast)
4974                         {
4975                                 restore_level();
4976                         }
4977                 }
4978                 break;
4979
4980         case 29:
4981 #ifdef JP
4982                 if (name) return "¼þÊÕËõ»¦";
4983                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4984 #else
4985                 if (name) return "Mass Genocide";
4986                 if (desc) return "Eliminates all nearby monsters, exhausting you.  Powerful or unique monsters may be able to resist.";
4987 #endif
4988     
4989                 {
4990                         int power = plev + 50;
4991
4992                         if (info) return info_power(power);
4993
4994                         if (cast)
4995                         {
4996                                 mass_genocide(power, TRUE);
4997                         }
4998                 }
4999                 break;
5000
5001         case 30:
5002 #ifdef JP
5003                 if (name) return "ÃϹö¤Î¹å²Ð";
5004                 if (desc) return "¼Ù°­¤ÊÎϤò»ý¤ÄÊõ¼î¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
5005 #else
5006                 if (name) return "Hellfire";
5007                 if (desc) return "Fires a powerful ball of evil power. Hurts good monsters greatly.";
5008 #endif
5009     
5010                 {
5011                         int dam = 666;
5012                         int rad = 3;
5013
5014                         if (info) return info_damage(0, 0, dam);
5015
5016                         if (cast)
5017                         {
5018                                 if (!get_aim_dir(&dir)) return NULL;
5019
5020                                 fire_ball(GF_HELL_FIRE, dir, dam, rad);
5021 #ifdef JP
5022                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "ÃϹö¤Î¹å²Ð¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
5023 #else
5024                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "the strain of casting Hellfire", -1);
5025 #endif
5026                         }
5027                 }
5028                 break;
5029
5030         case 31:
5031 #ifdef JP
5032                 if (name) return "Í©Âβ½";
5033                 if (desc) return "°ìÄê»þ´Ö¡¢ÊɤòÄ̤êÈ´¤±¤ë¤³¤È¤¬¤Ç¤­¼õ¤±¤ë¥À¥á¡¼¥¸¤¬·Ú¸º¤µ¤ì¤ëÍ©ÂΤξõÂÖ¤ËÊѿȤ¹¤ë¡£";
5034 #else
5035                 if (name) return "Wraithform";
5036                 if (desc) return "Becomes wraith form which gives ability to pass walls and makes all damages half.";
5037 #endif
5038     
5039                 {
5040                         int base = plev / 2;
5041
5042                         if (info) return info_duration(base, base);
5043
5044                         if (cast)
5045                         {
5046                                 set_wraith_form(randint1(base) + base, FALSE);
5047                         }
5048                 }
5049                 break;
5050         }
5051
5052         return "";
5053 }
5054
5055
5056 static cptr do_trump_spell(int spell, int mode)
5057 {
5058         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
5059         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
5060         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
5061         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
5062         bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
5063
5064 #ifdef JP
5065         static const char s_random[] = "¥é¥ó¥À¥à";
5066 #else
5067         static const char s_random[] = "random";
5068 #endif
5069
5070         int dir;
5071         int plev = p_ptr->lev;
5072
5073         switch (spell)
5074         {
5075         case 0:
5076 #ifdef JP
5077                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
5078                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
5079 #else
5080                 if (name) return "Phase Door";
5081                 if (desc) return "Teleport short distance.";
5082 #endif
5083     
5084                 {
5085                         int range = 10;
5086
5087                         if (info) return info_range(range);
5088
5089                         if (cast)
5090                         {
5091                                 teleport_player(range, 0L);
5092                         }
5093                 }
5094                 break;
5095
5096         case 1:
5097 #ifdef JP
5098                 if (name) return "ÃØéá¤Î¥«¡¼¥É";
5099                 if (desc) return "ÃØéá¤ò¾¤´­¤¹¤ë¡£";
5100 #else
5101                 if (name) return "Trump Spiders";
5102                 if (desc) return "Summons spiders.";
5103 #endif
5104     
5105                 {
5106                         if (cast || fail)
5107                         {
5108 #ifdef JP
5109                                 msg_print("¤¢¤Ê¤¿¤ÏÃØéá¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5110 #else
5111                                 msg_print("You concentrate on the trump of an spider...");
5112 #endif
5113
5114                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))
5115                                 {
5116                                         if (fail)
5117                                         {
5118 #ifdef JP
5119                                                 msg_print("¾¤´­¤µ¤ì¤¿ÃØéá¤ÏÅܤäƤ¤¤ë¡ª");
5120 #else
5121                                                 msg_print("The summoned spiders get angry!");
5122 #endif
5123                                         }
5124                                 }
5125                         }
5126                 }
5127                 break;
5128
5129         case 2:
5130 #ifdef JP
5131                 if (name) return "¥·¥ã¥Ã¥Õ¥ë";
5132                 if (desc) return "¥«¡¼¥É¤ÎÀꤤ¤ò¤¹¤ë¡£";
5133 #else
5134                 if (name) return "Shuffle";
5135                 if (desc) return "Causes random effects.";
5136 #endif
5137     
5138                 {
5139                         if (info) return s_random;
5140
5141                         if (cast)
5142                         {
5143                                 cast_shuffle();
5144                         }
5145                 }
5146                 break;
5147
5148         case 3:
5149 #ifdef JP
5150                 if (name) return "¥Õ¥í¥¢¡¦¥ê¥»¥Ã¥È";
5151                 if (desc) return "ºÇ¿¼³¬¤òÊѹ¹¤¹¤ë¡£";
5152 #else
5153                 if (name) return "Reset Recall";
5154                 if (desc) return "Resets the 'deepest' level for recall spell.";
5155 #endif
5156     
5157                 {
5158                         if (cast)
5159                         {
5160                                 if (!reset_recall()) return NULL;
5161                         }
5162                 }
5163                 break;
5164
5165         case 4:
5166 #ifdef JP
5167                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
5168                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
5169 #else
5170                 if (name) return "Teleport";
5171                 if (desc) return "Teleport long distance.";
5172 #endif
5173     
5174                 {
5175                         int range = plev * 4;
5176
5177                         if (info) return info_range(range);
5178
5179                         if (cast)
5180                         {
5181                                 teleport_player(range, 0L);
5182                         }
5183                 }
5184                 break;
5185
5186         case 5:
5187 #ifdef JP
5188                 if (name) return "´¶ÃΤΥ«¡¼¥É";
5189                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
5190 #else
5191                 if (name) return "Trump Spying";
5192                 if (desc) return "Gives telepathy for a while.";
5193 #endif
5194     
5195                 {
5196                         int base = 25;
5197                         int sides = 30;
5198
5199                         if (info) return info_duration(base, sides);
5200
5201                         if (cast)
5202                         {
5203                                 set_tim_esp(randint1(sides) + base, FALSE);
5204                         }
5205                 }
5206                 break;
5207
5208         case 6:
5209 #ifdef JP
5210                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
5211                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
5212 #else
5213                 if (name) return "Teleport Away";
5214                 if (desc) return "Teleports all monsters on the line away unless resisted.";
5215 #endif
5216     
5217                 {
5218                         int power = plev;
5219
5220                         if (info) return info_power(power);
5221
5222                         if (cast)
5223                         {
5224                                 if (!get_aim_dir(&dir)) return NULL;
5225
5226                                 fire_beam(GF_AWAY_ALL, dir, power);
5227                         }
5228                 }
5229                 break;
5230
5231         case 7:
5232 #ifdef JP
5233                 if (name) return "ưʪ¤Î¥«¡¼¥É";
5234                 if (desc) return "1ÂΤÎưʪ¤ò¾¤´­¤¹¤ë¡£";
5235 #else
5236                 if (name) return "Trump Animals";
5237                 if (desc) return "Summons an animal.";
5238 #endif
5239     
5240                 {
5241                         if (cast || fail)
5242                         {
5243                                 int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
5244
5245 #ifdef JP
5246                                 msg_print("¤¢¤Ê¤¿¤Ïưʪ¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5247 #else
5248                                 msg_print("You concentrate on the trump of an animal...");
5249 #endif
5250
5251                                 if (trump_summoning(1, !fail, py, px, 0, type, 0L))
5252                                 {
5253                                         if (fail)
5254                                         {
5255 #ifdef JP
5256                                                 msg_print("¾¤´­¤µ¤ì¤¿Æ°Êª¤ÏÅܤäƤ¤¤ë¡ª");
5257 #else
5258                                                 msg_print("The summoned animal gets angry!");
5259 #endif
5260                                         }
5261                                 }
5262                         }
5263                 }
5264                 break;
5265
5266         case 8:
5267 #ifdef JP
5268                 if (name) return "°ÜÆ°¤Î¥«¡¼¥É";
5269                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼«Ê¬¤Î­¸µ¤Ø°ÜÆ°¤µ¤»¤ë¡£";
5270 #else
5271                 if (name) return "Trump Reach";
5272                 if (desc) return "Pulls a distant item close to you.";
5273 #endif
5274     
5275                 {
5276                         int weight = plev * 15;
5277
5278                         if (info) return info_weight(weight);
5279
5280                         if (cast)
5281                         {
5282                                 if (!get_aim_dir(&dir)) return NULL;
5283
5284                                 fetch(dir, weight, FALSE);
5285                         }
5286                 }
5287                 break;
5288
5289         case 9:
5290 #ifdef JP
5291                 if (name) return "¥«¥ß¥«¥¼¤Î¥«¡¼¥É";
5292                 if (desc) return "Ê£¿ô¤ÎÇúȯ¤¹¤ë¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤¹¤ë¡£";
5293 #else
5294                 if (name) return "Trump Kamikaze";
5295                 if (desc) return "Summons monsters which explode by itself.";
5296 #endif
5297     
5298                 {
5299                         if (cast || fail)
5300                         {
5301                                 int x, y;
5302                                 int type;
5303
5304                                 if (cast)
5305                                 {
5306                                         if (!target_set(TARGET_KILL)) return NULL;
5307                                         x = target_col;
5308                                         y = target_row;
5309                                 }
5310                                 else
5311                                 {
5312                                         /* Summons near player when failed */
5313                                         x = px;
5314                                         y = py;
5315                                 }
5316
5317                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
5318                                         type = SUMMON_KAMIKAZE_LIVING;
5319                                 else
5320                                         type = SUMMON_KAMIKAZE;
5321
5322 #ifdef JP
5323                                 msg_print("¤¢¤Ê¤¿¤Ï¥«¥ß¥«¥¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5324 #else
5325                                 msg_print("You concentrate on several trumps at once...");
5326 #endif
5327
5328                                 if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))
5329                                 {
5330                                         if (fail)
5331                                         {
5332 #ifdef JP
5333                                                 msg_print("¾¤´­¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
5334 #else
5335                                                 msg_print("The summoned creatures get angry!");
5336 #endif
5337                                         }
5338                                 }
5339                         }
5340                 }
5341                 break;
5342
5343         case 10:
5344 #ifdef JP
5345                 if (name) return "¸¸Î´­";
5346                 if (desc) return "1ÂΤÎÍ©Îî¤ò¾¤´­¤¹¤ë¡£";
5347 #else
5348                 if (name) return "Phantasmal Servant";
5349                 if (desc) return "Summons a ghost.";
5350 #endif
5351     
5352                 {
5353                         /* Phantasmal Servant is not summoned as enemy when failed */
5354                         if (cast)
5355                         {
5356                                 int summon_lev = plev * 2 / 3 + randint1(plev / 2);
5357
5358                                 if (trump_summoning(1, !fail, py, px, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))
5359                                 {
5360 #ifdef JP
5361                                         msg_print("¸æÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¸æ¼ç¿ÍÍÍ¡©");
5362 #else
5363                                         msg_print("'Your wish, master?'");
5364 #endif
5365                                 }
5366                         }
5367                 }
5368                 break;
5369
5370         case 11:
5371 #ifdef JP
5372                 if (name) return "¥¹¥Ô¡¼¥É¡¦¥â¥ó¥¹¥¿¡¼";
5373                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò²Ã®¤µ¤»¤ë¡£";
5374 #else
5375                 if (name) return "Haste Monster";
5376                 if (desc) return "Hastes a monster.";
5377 #endif
5378     
5379                 {
5380                         if (cast)
5381                         {
5382                                 bool result;
5383
5384                                 /* Temporary enable target_pet option */
5385                                 bool old_target_pet = target_pet;
5386                                 target_pet = TRUE;
5387
5388                                 result = get_aim_dir(&dir);
5389
5390                                 /* Restore target_pet option */
5391                                 target_pet = old_target_pet;
5392
5393                                 if (!result) return NULL;
5394
5395                                 speed_monster(dir, plev);
5396                         }
5397                 }
5398                 break;
5399
5400         case 12:
5401 #ifdef JP
5402                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
5403                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
5404 #else
5405                 if (name) return "Teleport Level";
5406                 if (desc) return "Teleport to up or down stairs in a moment.";
5407 #endif
5408     
5409                 {
5410                         if (cast)
5411                         {
5412 #ifdef JP
5413                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
5414 #else
5415                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
5416 #endif
5417                                 teleport_level(0);
5418                         }
5419                 }
5420                 break;
5421
5422         case 13:
5423 #ifdef JP
5424                 if (name) return "¼¡¸µ¤ÎÈâ";
5425                 if (desc) return "ûµ÷Î¥Æâ¤Î»ØÄꤷ¤¿¾ì½ê¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
5426 #else
5427                 if (name) return "Dimension Door";
5428                 if (desc) return "Teleport to given location.";
5429 #endif
5430     
5431                 {
5432                         int range = plev / 2 + 10;
5433
5434                         if (info) return info_range(range);
5435
5436                         if (cast)
5437                         {
5438 #ifdef JP
5439                                 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
5440 #else
5441                                 msg_print("You open a dimensional gate. Choose a destination.");
5442 #endif
5443
5444                                 if (!dimension_door()) return NULL;
5445                         }
5446                 }
5447                 break;
5448
5449         case 14:
5450 #ifdef JP
5451                 if (name) return "µ¢´Ô¤Î¼öʸ";
5452                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
5453 #else
5454                 if (name) return "Word of Recall";
5455                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
5456 #endif
5457     
5458                 {
5459                         int base = 15;
5460                         int sides = 20;
5461
5462                         if (info) return info_delay(base, sides);
5463
5464                         if (cast)
5465                         {
5466                                 if (!word_of_recall()) return NULL;
5467                         }
5468                 }
5469                 break;
5470
5471         case 15:
5472 #ifdef JP
5473                 if (name) return "²øʪÄÉÊü";
5474                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
5475 #else
5476                 if (name) return "Banish";
5477                 if (desc) return "Teleports all monsters in sight away unless resisted.";
5478 #endif
5479     
5480                 {
5481                         int power = plev * 4;
5482
5483                         if (info) return info_power(power);
5484
5485                         if (cast)
5486                         {
5487                                 banish_monsters(power);
5488                         }
5489                 }
5490                 break;
5491
5492         case 16:
5493 #ifdef JP
5494                 if (name) return "°ÌÃÖ¸ò´¹¤Î¥«¡¼¥É";
5495                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤È°ÌÃÖ¤ò¸ò´¹¤¹¤ë¡£";
5496 #else
5497                 if (name) return "Swap Position";
5498                 if (desc) return "Swap positions of you and a monster.";
5499 #endif
5500     
5501                 {
5502                         if (cast)
5503                         {
5504                                 bool result;
5505
5506                                 /* HACK -- No range limit */
5507                                 project_length = -1;
5508
5509                                 result = get_aim_dir(&dir);
5510
5511                                 /* Restore range to default */
5512                                 project_length = 0;
5513
5514                                 if (!result) return NULL;
5515
5516                                 teleport_swap(dir);
5517                         }
5518                 }
5519                 break;
5520
5521         case 17:
5522 #ifdef JP
5523                 if (name) return "¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É";
5524                 if (desc) return "1ÂΤΥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
5525 #else
5526                 if (name) return "Trump Undead";
5527                 if (desc) return "Summons an undead monster.";
5528 #endif
5529     
5530                 {
5531                         if (cast || fail)
5532                         {
5533 #ifdef JP
5534                                 msg_print("¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5535 #else
5536                                 msg_print("You concentrate on the trump of an undead creature...");
5537 #endif
5538
5539                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_UNDEAD, 0L))
5540                                 {
5541                                         if (fail)
5542                                         {
5543 #ifdef JP
5544                                                 msg_print("¾¤´­¤µ¤ì¤¿¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
5545 #else
5546                                                 msg_print("The summoned undead creature gets angry!");
5547 #endif
5548                                         }
5549                                 }
5550                         }
5551                 }
5552                 break;
5553
5554         case 18:
5555 #ifdef JP
5556                 if (name) return "à¨ÃîÎà¤Î¥«¡¼¥É";
5557                 if (desc) return "1ÂΤΥҥɥé¤ò¾¤´­¤¹¤ë¡£";
5558 #else
5559                 if (name) return "Trump Reptiles";
5560                 if (desc) return "Summons a hydra.";
5561 #endif
5562     
5563                 {
5564                         if (cast || fail)
5565                         {
5566 #ifdef JP
5567                                 msg_print("¤¢¤Ê¤¿¤Ïà¨ÃîÎà¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5568 #else
5569                                 msg_print("You concentrate on the trump of a reptile...");
5570 #endif
5571
5572                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HYDRA, 0L))
5573                                 {
5574                                         if (fail)
5575                                         {
5576 #ifdef JP
5577                                                 msg_print("¾¤´­¤µ¤ì¤¿à¨ÃîÎà¤ÏÅܤäƤ¤¤ë¡ª");
5578 #else
5579                                                 msg_print("The summoned reptile gets angry!");
5580 #endif
5581                                         }
5582                                 }
5583                         }
5584                 }
5585                 break;
5586
5587         case 19:
5588 #ifdef JP
5589                 if (name) return "¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É";
5590                 if (desc) return "Ê£¿ô¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤¹¤ë¡£";
5591 #else
5592                 if (name) return "Trump Monsters";
5593                 if (desc) return "Summons some monsters.";
5594 #endif
5595     
5596                 {
5597                         if (cast || fail)
5598                         {
5599                                 int type;
5600
5601 #ifdef JP
5602                                 msg_print("¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5603 #else
5604                                 msg_print("You concentrate on several trumps at once...");
5605 #endif
5606
5607                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
5608                                         type = SUMMON_LIVING;
5609                                 else
5610                                         type = 0;
5611
5612                                 if (trump_summoning((1 + (plev - 15)/ 10), !fail, py, px, 0, type, 0L))
5613                                 {
5614                                         if (fail)
5615                                         {
5616 #ifdef JP
5617                                                 msg_print("¾¤´­¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
5618 #else
5619                                                 msg_print("The summoned creatures get angry!");
5620 #endif
5621                                         }
5622                                 }
5623
5624                         }
5625                 }
5626                 break;
5627
5628         case 20:
5629 #ifdef JP
5630                 if (name) return "¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É";
5631                 if (desc) return "1¥°¥ë¡¼¥×¤Î¥Ï¥¦¥ó¥É¤ò¾¤´­¤¹¤ë¡£";
5632 #else
5633                 if (name) return "Trump Hounds";
5634                 if (desc) return "Summons a group of hounds.";
5635 #endif
5636     
5637                 {
5638                         if (cast || fail)
5639                         {
5640 #ifdef JP
5641                                 msg_print("¤¢¤Ê¤¿¤Ï¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5642 #else
5643                                 msg_print("You concentrate on the trump of a hound...");
5644 #endif
5645
5646                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HOUND, PM_ALLOW_GROUP))
5647                                 {
5648                                         if (fail)
5649                                         {
5650 #ifdef JP
5651                                                 msg_print("¾¤´­¤µ¤ì¤¿¥Ï¥¦¥ó¥É¤ÏÅܤäƤ¤¤ë¡ª");
5652 #else
5653                                                 msg_print("The summoned hounds get angry!");
5654 #endif
5655                                         }
5656                                 }
5657                         }
5658                 }
5659                 break;
5660
5661         case 21:
5662 #ifdef JP
5663                 if (name) return "¥È¥é¥ó¥×¤Î¿Ï";
5664                 if (desc) return "Éð´ï¤Ë¥È¥é¥ó¥×¤Î°À­¤ò¤Ä¤±¤ë¡£";
5665 #else
5666                 if (name) return "Trump Branding";
5667                 if (desc) return "Makes current weapon a Trump weapon.";
5668 #endif
5669     
5670                 {
5671                         if (cast)
5672                         {
5673                                 brand_weapon(5);
5674                         }
5675                 }
5676                 break;
5677
5678         case 22:
5679 #ifdef JP
5680                 if (name) return "¿Í´Ö¥È¥é¥ó¥×";
5681                 if (desc) return "¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤«¡¢¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤¬¿È¤Ë¤Ä¤¯¡£";
5682 #else
5683                 if (name) return "Living Trump";
5684                 if (desc) return "Gives mutation which makes you teleport randomly or makes you able to teleport at will.";
5685 #endif
5686     
5687                 {
5688                         if (cast)
5689                         {
5690                                 int mutation;
5691
5692                                 if (one_in_(7))
5693                                         /* Teleport control */
5694                                         mutation = 12;
5695                                 else
5696                                         /* Random teleportation (uncontrolled) */
5697                                         mutation = 77;
5698
5699                                 /* Gain the mutation */
5700                                 if (gain_random_mutation(mutation))
5701                                 {
5702 #ifdef JP
5703                                         msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤­¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
5704 #else
5705                                         msg_print("You have turned into a Living Trump.");
5706 #endif
5707                                 }
5708                         }
5709                 }
5710                 break;
5711
5712         case 23:
5713 #ifdef JP
5714                 if (name) return "¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É";
5715                 if (desc) return "1ÂΤΥµ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤¹¤ë¡£";
5716 #else
5717                 if (name) return "Trump Cyberdemon";
5718                 if (desc) return "Summons a cyber demon.";
5719 #endif
5720     
5721                 {
5722                         if (cast || fail)
5723                         {
5724 #ifdef JP
5725                                 msg_print("¤¢¤Ê¤¿¤Ï¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5726 #else
5727                                 msg_print("You concentrate on the trump of a Cyberdemon...");
5728 #endif
5729
5730                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_CYBER, 0L))
5731                                 {
5732                                         if (fail)
5733                                         {
5734 #ifdef JP
5735                                                 msg_print("¾¤´­¤µ¤ì¤¿¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5736 #else
5737                                                 msg_print("The summoned Cyberdemon gets angry!");
5738 #endif
5739                                         }
5740                                 }
5741                         }
5742                 }
5743                 break;
5744
5745         case 24:
5746 #ifdef JP
5747                 if (name) return "ͽ¸«¤Î¥«¡¼¥É";
5748                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
5749 #else
5750                 if (name) return "Trump Divination";
5751                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
5752 #endif
5753     
5754                 {
5755                         int rad = DETECT_RAD_DEFAULT;
5756
5757                         if (info) return info_radius(rad);
5758
5759                         if (cast)
5760                         {
5761                                 detect_all(rad);
5762                         }
5763                 }
5764                 break;
5765
5766         case 25:
5767 #ifdef JP
5768                 if (name) return "Ãμ±¤Î¥«¡¼¥É";
5769                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
5770 #else
5771                 if (name) return "Trump Lore";
5772                 if (desc) return "*Identifies* an item.";
5773 #endif
5774     
5775                 {
5776                         if (cast)
5777                         {
5778                                 if (!identify_fully(FALSE)) return NULL;
5779                         }
5780                 }
5781                 break;
5782
5783         case 26:
5784 #ifdef JP
5785                 if (name) return "²óÉü¥â¥ó¥¹¥¿¡¼";
5786                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤÎÂÎÎϤò²óÉü¤µ¤»¤ë¡£";
5787 #else
5788                 if (name) return "Heal Monster";
5789                 if (desc) return "Heal a monster.";
5790 #endif
5791     
5792                 {
5793                         int heal = plev * 10 + 200;
5794
5795                         if (info) return info_heal(0, 0, heal);
5796
5797                         if (cast)
5798                         {
5799                                 bool result;
5800
5801                                 /* Temporary enable target_pet option */
5802                                 bool old_target_pet = target_pet;
5803                                 target_pet = TRUE;
5804
5805                                 result = get_aim_dir(&dir);
5806
5807                                 /* Restore target_pet option */
5808                                 target_pet = old_target_pet;
5809
5810                                 if (!result) return NULL;
5811
5812                                 heal_monster(dir, heal);
5813                         }
5814                 }
5815                 break;
5816
5817         case 27:
5818 #ifdef JP
5819                 if (name) return "¥É¥é¥´¥ó¤Î¥«¡¼¥É";
5820                 if (desc) return "1ÂΤΥɥ饴¥ó¤ò¾¤´­¤¹¤ë¡£";
5821 #else
5822                 if (name) return "Trump Dragon";
5823                 if (desc) return "Summons a dragon.";
5824 #endif
5825     
5826                 {
5827                         if (cast || fail)
5828                         {
5829 #ifdef JP
5830                                 msg_print("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5831 #else
5832                                 msg_print("You concentrate on the trump of a dragon...");
5833 #endif
5834
5835                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_DRAGON, 0L))
5836                                 {
5837                                         if (fail)
5838                                         {
5839 #ifdef JP
5840                                                 msg_print("¾¤´­¤µ¤ì¤¿¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5841 #else
5842                                                 msg_print("The summoned dragon gets angry!");
5843 #endif
5844                                         }
5845                                 }
5846                         }
5847                 }
5848                 break;
5849
5850         case 28:
5851 #ifdef JP
5852                 if (name) return "ð¨ÀФΥ«¡¼¥É";
5853                 if (desc) return "¼«Ê¬¤Î¼þÊÕ¤Ëð¨ÀФòÍî¤È¤¹¡£";
5854 #else
5855                 if (name) return "Trump Meteor";
5856                 if (desc) return "Makes meteor balls fall down to nearby random locations.";
5857 #endif
5858     
5859                 {
5860                         int dam = plev * 2;
5861                         int rad = 2;
5862
5863                         if (info) return info_multi_damage(dam);
5864
5865                         if (cast)
5866                         {
5867                                 cast_meteor(dam, rad);
5868                         }
5869                 }
5870                 break;
5871
5872         case 29:
5873 #ifdef JP
5874                 if (name) return "¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É";
5875                 if (desc) return "1ÂΤΰ­Ëâ¤ò¾¤´­¤¹¤ë¡£";
5876 #else
5877                 if (name) return "Trump Demon";
5878                 if (desc) return "Summons a demon.";
5879 #endif
5880     
5881                 {
5882                         if (cast || fail)
5883                         {
5884 #ifdef JP
5885                                 msg_print("¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5886 #else
5887                                 msg_print("You concentrate on the trump of a demon...");
5888 #endif
5889
5890                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_DEMON, 0L))
5891                                 {
5892                                         if (fail)
5893                                         {
5894 #ifdef JP
5895                                                 msg_print("¾¤´­¤µ¤ì¤¿¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5896 #else
5897                                                 msg_print("The summoned demon gets angry!");
5898 #endif
5899                                         }
5900                                 }
5901                         }
5902                 }
5903                 break;
5904
5905         case 30:
5906 #ifdef JP
5907                 if (name) return "ÃϹö¤Î¥«¡¼¥É";
5908                 if (desc) return "1ÂΤξåµé¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
5909 #else
5910                 if (name) return "Trump Greater Undead";
5911                 if (desc) return "Summons a greater undead.";
5912 #endif
5913     
5914                 {
5915                         if (cast || fail)
5916                         {
5917 #ifdef JP
5918                                 msg_print("¤¢¤Ê¤¿¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5919 #else
5920                                 msg_print("You concentrate on the trump of a greater undead being...");
5921 #endif
5922                                 /* May allow unique depend on level and dice roll */
5923                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))
5924                                 {
5925                                         if (fail)
5926                                         {
5927 #ifdef JP
5928                                                 msg_print("¾¤´­¤µ¤ì¤¿¾åµé¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
5929 #else
5930                                                 msg_print("The summoned greater undead creature gets angry!");
5931 #endif
5932                                         }
5933                                 }
5934                         }
5935                 }
5936                 break;
5937
5938         case 31:
5939 #ifdef JP
5940                 if (name) return "¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É";
5941                 if (desc) return "1ÂΤθÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤¹¤ë¡£";
5942 #else
5943                 if (name) return "Trump Ancient Dragon";
5944                 if (desc) return "Summons an ancient dragon.";
5945 #endif
5946     
5947                 {
5948                         if (cast)
5949                         {
5950                                 int type;
5951
5952                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
5953                                         type = SUMMON_HI_DRAGON_LIVING;
5954                                 else
5955                                         type = SUMMON_HI_DRAGON;
5956
5957 #ifdef JP
5958                                 msg_print("¤¢¤Ê¤¿¤Ï¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5959 #else
5960                                 msg_print("You concentrate on the trump of an ancient dragon...");
5961 #endif
5962
5963                                 /* May allow unique depend on level and dice roll */
5964                                 if (trump_summoning(1, !fail, py, px, 0, type, PM_ALLOW_UNIQUE))
5965                                 {
5966                                         if (fail)
5967                                         {
5968 #ifdef JP
5969                                                 msg_print("¾¤´­¤µ¤ì¤¿¸ÅÂå¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5970 #else
5971                                                 msg_print("The summoned ancient dragon gets angry!");
5972 #endif
5973                                         }
5974                                 }
5975                         }
5976                 }
5977                 break;
5978         }
5979
5980         return "";
5981 }
5982
5983
5984 static cptr do_arcane_spell(int spell, int mode)
5985 {
5986         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
5987         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
5988         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
5989         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
5990
5991         int dir;
5992         int plev = p_ptr->lev;
5993
5994         switch (spell)
5995         {
5996         case 0:
5997 #ifdef JP
5998                 if (name) return "ÅÅ·â";
5999                 if (desc) return "ÅÅ·â¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
6000 #else
6001                 if (name) return "Zap";
6002                 if (desc) return "Fires a bolt or beam of lightning.";
6003 #endif
6004     
6005                 {
6006                         int dice = 3 + (plev - 1) / 5;
6007                         int sides = 3;
6008
6009                         if (info) return info_damage(dice, sides, 0);
6010
6011                         if (cast)
6012                         {
6013                                 if (!get_aim_dir(&dir)) return NULL;
6014
6015                                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
6016                         }
6017                 }
6018                 break;
6019
6020         case 1:
6021 #ifdef JP
6022                 if (name) return "ËâË¡¤Î»Ü¾û";
6023                 if (desc) return "Èâ¤Ë¸°¤ò¤«¤±¤ë¡£";
6024 #else
6025                 if (name) return "Wizard Lock";
6026                 if (desc) return "Locks a door.";
6027 #endif
6028     
6029                 {
6030                         if (cast)
6031                         {
6032                                 if (!get_aim_dir(&dir)) return NULL;
6033
6034                                 wizard_lock(dir);
6035                         }
6036                 }
6037                 break;
6038
6039         case 2:
6040 #ifdef JP
6041                 if (name) return "Æ©ÌÀÂδ¶ÃÎ";
6042                 if (desc) return "¶á¤¯¤ÎÆ©ÌÀ¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
6043 #else
6044                 if (name) return "Detect Invisibility";
6045                 if (desc) return "Detects all invisible monsters in your vicinity.";
6046 #endif
6047     
6048                 {
6049                         int rad = DETECT_RAD_DEFAULT;
6050
6051                         if (info) return info_radius(rad);
6052
6053                         if (cast)
6054                         {
6055                                 detect_monsters_invis(rad);
6056                         }
6057                 }
6058                 break;
6059
6060         case 3:
6061 #ifdef JP
6062                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
6063                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
6064 #else
6065                 if (name) return "Detect Monsters";
6066                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
6067 #endif
6068     
6069                 {
6070                         int rad = DETECT_RAD_DEFAULT;
6071
6072                         if (info) return info_radius(rad);
6073
6074                         if (cast)
6075                         {
6076                                 detect_monsters_normal(rad);
6077                         }
6078                 }
6079                 break;
6080
6081         case 4:
6082 #ifdef JP
6083                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
6084                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
6085 #else
6086                 if (name) return "Blink";
6087                 if (desc) return "Teleport short distance.";
6088 #endif
6089     
6090                 {
6091                         int range = 10;
6092
6093                         if (info) return info_range(range);
6094
6095                         if (cast)
6096                         {
6097                                 teleport_player(range, 0L);
6098                         }
6099                 }
6100                 break;
6101
6102         case 5:
6103 #ifdef JP
6104                 if (name) return "¥é¥¤¥È¡¦¥¨¥ê¥¢";
6105                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
6106 #else
6107                 if (name) return "Light Area";
6108                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
6109 #endif
6110     
6111                 {
6112                         int dice = 2;
6113                         int sides = plev / 2;
6114                         int rad = plev / 10 + 1;
6115
6116                         if (info) return info_damage(dice, sides, 0);
6117
6118                         if (cast)
6119                         {
6120                                 lite_area(damroll(dice, sides), rad);
6121                         }
6122                 }
6123                 break;
6124
6125         case 6:
6126 #ifdef JP
6127                 if (name) return "櫤ÈÈâ Ç˲õ";
6128                 if (desc) return "°ìľÀþ¾å¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
6129 #else
6130                 if (name) return "Trap & Door Destruction";
6131                 if (desc) return "Fires a beam which destroy traps and doors.";
6132 #endif
6133     
6134                 {
6135                         if (cast)
6136                         {
6137                                 if (!get_aim_dir(&dir)) return NULL;
6138
6139                                 destroy_door(dir);
6140                         }
6141                 }
6142                 break;
6143
6144         case 7:
6145 #ifdef JP
6146                 if (name) return "·Ú½ý¤Î¼£Ìþ";
6147                 if (desc) return "²ø²æ¤ÈÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
6148 #else
6149                 if (name) return "Cure Light Wounds";
6150                 if (desc) return "Heals cut and HP a little.";
6151 #endif
6152     
6153                 {
6154                         int dice = 2;
6155                         int sides = 8;
6156
6157                         if (info) return info_heal(dice, sides, 0);
6158
6159                         if (cast)
6160                         {
6161                                 hp_player(damroll(dice, sides));
6162                                 set_cut(p_ptr->cut - 10);
6163                         }
6164                 }
6165                 break;
6166
6167         case 8:
6168 #ifdef JP
6169                 if (name) return "櫤ÈÈâ ´¶ÃÎ";
6170                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤È³¬Ãʤò´¶ÃΤ¹¤ë¡£";
6171 #else
6172                 if (name) return "Detect Doors & Traps";
6173                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
6174 #endif
6175     
6176                 {
6177                         int rad = DETECT_RAD_DEFAULT;
6178
6179                         if (info) return info_radius(rad);
6180
6181                         if (cast)
6182                         {
6183                                 detect_traps(rad, TRUE);
6184                                 detect_doors(rad);
6185                                 detect_stairs(rad);
6186                         }
6187                 }
6188                 break;
6189
6190         case 9:
6191 #ifdef JP
6192                 if (name) return "dzÁÇ";
6193                 if (desc) return "¸÷¸»¤ËdzÎÁ¤òÊäµë¤¹¤ë¡£";
6194 #else
6195                 if (name) return "Phlogiston";
6196                 if (desc) return "Adds more turns of light to a lantern or torch.";
6197 #endif
6198     
6199                 {
6200                         if (cast)
6201                         {
6202                                 phlogiston();
6203                         }
6204                 }
6205                 break;
6206
6207         case 10:
6208 #ifdef JP
6209                 if (name) return "ºâÊõ´¶ÃÎ";
6210                 if (desc) return "¶á¤¯¤ÎºâÊõ¤ò´¶ÃΤ¹¤ë¡£";
6211 #else
6212                 if (name) return "Detect Treasure";
6213                 if (desc) return "Detects all treasures in your vicinity.";
6214 #endif
6215     
6216                 {
6217                         int rad = DETECT_RAD_DEFAULT;
6218
6219                         if (info) return info_radius(rad);
6220
6221                         if (cast)
6222                         {
6223                                 detect_treasure(rad);
6224                                 detect_objects_gold(rad);
6225                         }
6226                 }
6227                 break;
6228
6229         case 11:
6230 #ifdef JP
6231                 if (name) return "ËâË¡ ´¶ÃÎ";
6232                 if (desc) return "¶á¤¯¤ÎËâË¡¤¬¤«¤«¤Ã¤¿¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6233 #else
6234                 if (name) return "Detect Enchantment";
6235                 if (desc) return "Detects all magical items in your vicinity.";
6236 #endif
6237     
6238                 {
6239                         int rad = DETECT_RAD_DEFAULT;
6240
6241                         if (info) return info_radius(rad);
6242
6243                         if (cast)
6244                         {
6245                                 detect_objects_magic(rad);
6246                         }
6247                 }
6248                 break;
6249
6250         case 12:
6251 #ifdef JP
6252                 if (name) return "¥¢¥¤¥Æ¥à´¶ÃÎ";
6253                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6254 #else
6255                 if (name) return "Detect Objects";
6256                 if (desc) return "Detects all items in your vicinity.";
6257 #endif
6258     
6259                 {
6260                         int rad = DETECT_RAD_DEFAULT;
6261
6262                         if (info) return info_radius(rad);
6263
6264                         if (cast)
6265                         {
6266                                 detect_objects_normal(rad);
6267                         }
6268                 }
6269                 break;
6270
6271         case 13:
6272 #ifdef JP
6273                 if (name) return "²òÆÇ";
6274                 if (desc) return "ÆǤòÂÎÆ⤫¤é´°Á´¤Ë¼è¤ê½ü¤¯¡£";
6275 #else
6276                 if (name) return "Cure Poison";
6277                 if (desc) return "Cures poison status.";
6278 #endif
6279     
6280                 {
6281                         if (cast)
6282                         {
6283                                 set_poisoned(0);
6284                         }
6285                 }
6286                 break;
6287
6288         case 14:
6289 #ifdef JP
6290                 if (name) return "ÂÑÎä";
6291                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6292 #else
6293                 if (name) return "Resist Cold";
6294                 if (desc) return "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.";
6295 #endif
6296     
6297                 {
6298                         int base = 20;
6299
6300                         if (info) return info_duration(base, base);
6301
6302                         if (cast)
6303                         {
6304                                 set_oppose_cold(randint1(base) + base, FALSE);
6305                         }
6306                 }
6307                 break;
6308
6309         case 15:
6310 #ifdef JP
6311                 if (name) return "ÂѲÐ";
6312                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6313 #else
6314                 if (name) return "Resist Fire";
6315                 if (desc) return "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.";
6316 #endif
6317     
6318                 {
6319                         int base = 20;
6320
6321                         if (info) return info_duration(base, base);
6322
6323                         if (cast)
6324                         {
6325                                 set_oppose_fire(randint1(base) + base, FALSE);
6326                         }
6327                 }
6328                 break;
6329
6330         case 16:
6331 #ifdef JP
6332                 if (name) return "ÂÑÅÅ";
6333                 if (desc) return "°ìÄê»þ´Ö¡¢ÅÅ·â¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6334 #else
6335                 if (name) return "Resist Lightning";
6336                 if (desc) return "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.";
6337 #endif
6338     
6339                 {
6340                         int base = 20;
6341
6342                         if (info) return info_duration(base, base);
6343
6344                         if (cast)
6345                         {
6346                                 set_oppose_elec(randint1(base) + base, FALSE);
6347                         }
6348                 }
6349                 break;
6350
6351         case 17:
6352 #ifdef JP
6353                 if (name) return "ÂÑ»À";
6354                 if (desc) return "°ìÄê»þ´Ö¡¢»À¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6355 #else
6356                 if (name) return "Resist Acid";
6357                 if (desc) return "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.";
6358 #endif
6359     
6360                 {
6361                         int base = 20;
6362
6363                         if (info) return info_duration(base, base);
6364
6365                         if (cast)
6366                         {
6367                                 set_oppose_acid(randint1(base) + base, FALSE);
6368                         }
6369                 }
6370                 break;
6371
6372         case 18:
6373 #ifdef JP
6374                 if (name) return "½Å½ý¤Î¼£Ìþ";
6375                 if (desc) return "²ø²æ¤ÈÂÎÎϤòÃæÄøÅÙ²óÉü¤µ¤»¤ë¡£";
6376 #else
6377                 if (name) return "Cure Medium Wounds";
6378                 if (desc) return "Heals cut and HP more.";
6379 #endif
6380     
6381                 {
6382                         int dice = 4;
6383                         int sides = 8;
6384
6385                         if (info) return info_heal(dice, sides, 0);
6386
6387                         if (cast)
6388                         {
6389                                 hp_player(damroll(dice, sides));
6390                                 set_cut((p_ptr->cut / 2) - 50);
6391                         }
6392                 }
6393                 break;
6394
6395         case 19:
6396 #ifdef JP
6397                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
6398                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
6399 #else
6400                 if (name) return "Teleport";
6401                 if (desc) return "Teleport long distance.";
6402 #endif
6403     
6404                 {
6405                         int range = plev * 5;
6406
6407                         if (info) return info_range(range);
6408
6409                         if (cast)
6410                         {
6411                                 teleport_player(range, 0L);
6412                         }
6413                 }
6414                 break;
6415
6416         case 20:
6417 #ifdef JP
6418                 if (name) return "´ÕÄê";
6419                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
6420 #else
6421                 if (name) return "Identify";
6422                 if (desc) return "Identifies an item.";
6423 #endif
6424     
6425                 {
6426                         if (cast)
6427                         {
6428                                 if (!ident_spell(FALSE)) return NULL;
6429                         }
6430                 }
6431                 break;
6432
6433         case 21:
6434 #ifdef JP
6435                 if (name) return "´äÀÐÍϲò";
6436                 if (desc) return "ÊɤòÍϤ«¤·¤Æ¾²¤Ë¤¹¤ë¡£";
6437 #else
6438                 if (name) return "Stone to Mud";
6439                 if (desc) return "Turns one rock square to mud.";
6440 #endif
6441     
6442                 {
6443                         int dice = 1;
6444                         int sides = 30;
6445                         int base = 20;
6446
6447                         if (info) return info_damage(dice, sides, base);
6448
6449                         if (cast)
6450                         {
6451                                 if (!get_aim_dir(&dir)) return NULL;
6452
6453                                 wall_to_mud(dir, 20 + randint1(30));
6454                         }
6455                 }
6456                 break;
6457
6458         case 22:
6459 #ifdef JP
6460                 if (name) return "Á®¸÷";
6461                 if (desc) return "¸÷Àþ¤òÊü¤Ä¡£¸÷¤ê¤ò·ù¤¦¥â¥ó¥¹¥¿¡¼¤Ë¸ú²Ì¤¬¤¢¤ë¡£";
6462 #else
6463                 if (name) return "Ray of Light";
6464                 if (desc) return "Fires a beam of light which damages to light-sensitive monsters.";
6465 #endif
6466     
6467                 {
6468                         int dice = 6;
6469                         int sides = 8;
6470
6471                         if (info) return info_damage(dice, sides, 0);
6472
6473                         if (cast)
6474                         {
6475                                 if (!get_aim_dir(&dir)) return NULL;
6476
6477 #ifdef JP
6478                                 msg_print("¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
6479 #else
6480                                 msg_print("A line of light appears.");
6481 #endif
6482
6483                                 lite_line(dir, damroll(6, 8));
6484                         }
6485                 }
6486                 break;
6487
6488         case 23:
6489 #ifdef JP
6490                 if (name) return "¶õÊ¢½¼Â­";
6491                 if (desc) return "ËþÊ¢¤Ë¤¹¤ë¡£";
6492 #else
6493                 if (name) return "Satisfy Hunger";
6494                 if (desc) return "Satisfies hunger.";
6495 #endif
6496     
6497                 {
6498                         if (cast)
6499                         {
6500                                 set_food(PY_FOOD_MAX - 1);
6501                         }
6502                 }
6503                 break;
6504
6505         case 24:
6506 #ifdef JP
6507                 if (name) return "Æ©ÌÀ»ëǧ";
6508                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
6509 #else
6510                 if (name) return "See Invisible";
6511                 if (desc) return "Gives see invisible for a while.";
6512 #endif
6513     
6514                 {
6515                         int base = 24;
6516
6517                         if (info) return info_duration(base, base);
6518
6519                         if (cast)
6520                         {
6521                                 set_tim_invis(randint1(base) + base, FALSE);
6522                         }
6523                 }
6524                 break;
6525
6526         case 25:
6527 #ifdef JP
6528                 if (name) return "¥¨¥ì¥á¥ó¥¿¥ë¾¤´­";
6529                 if (desc) return "1ÂΤΥ¨¥ì¥á¥ó¥¿¥ë¤ò¾¤´­¤¹¤ë¡£";
6530 #else
6531                 if (name) return "Conjure Elemental";
6532                 if (desc) return "Summons an elemental.";
6533 #endif
6534     
6535                 {
6536                         if (cast)
6537                         {
6538                                 if (!summon_specific(-1, py, px, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))
6539                                 {
6540 #ifdef JP
6541                                         msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
6542 #else
6543                                         msg_print("No Elementals arrive.");
6544 #endif
6545                                 }
6546                         }
6547                 }
6548                 break;
6549
6550         case 26:
6551 #ifdef JP
6552                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
6553                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
6554 #else
6555                 if (name) return "Teleport Level";
6556                 if (desc) return "Teleport to up or down stairs in a moment.";
6557 #endif
6558     
6559                 {
6560                         if (cast)
6561                         {
6562 #ifdef JP
6563                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
6564 #else
6565                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
6566 #endif
6567                                 teleport_level(0);
6568                         }
6569                 }
6570                 break;
6571
6572         case 27:
6573 #ifdef JP
6574                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
6575                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
6576 #else
6577                 if (name) return "Teleport Away";
6578                 if (desc) return "Teleports all monsters on the line away unless resisted.";
6579 #endif
6580     
6581                 {
6582                         int power = plev;
6583
6584                         if (info) return info_power(power);
6585
6586                         if (cast)
6587                         {
6588                                 if (!get_aim_dir(&dir)) return NULL;
6589
6590                                 fire_beam(GF_AWAY_ALL, dir, power);
6591                         }
6592                 }
6593                 break;
6594
6595         case 28:
6596 #ifdef JP
6597                 if (name) return "¸µÁǤεå";
6598                 if (desc) return "±ê¡¢ÅÅ·â¡¢Î䵤¡¢»À¤Î¤É¤ì¤«¤Îµå¤òÊü¤Ä¡£";
6599 #else
6600                 if (name) return "Elemental Ball";
6601                 if (desc) return "Fires a ball of some elements.";
6602 #endif
6603     
6604                 {
6605                         int dam = 75 + plev;
6606                         int rad = 2;
6607
6608                         if (info) return info_damage(0, 0, dam);
6609
6610                         if (cast)
6611                         {
6612                                 int type;
6613
6614                                 if (!get_aim_dir(&dir)) return NULL;
6615
6616                                 switch (randint1(4))
6617                                 {
6618                                         case 1:  type = GF_FIRE;break;
6619                                         case 2:  type = GF_ELEC;break;
6620                                         case 3:  type = GF_COLD;break;
6621                                         default: type = GF_ACID;break;
6622                                 }
6623
6624                                 fire_ball(type, dir, dam, rad);
6625                         }
6626                 }
6627                 break;
6628
6629         case 29:
6630 #ifdef JP
6631                 if (name) return "Á´´¶ÃÎ";
6632                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6633 #else
6634                 if (name) return "Detection";
6635                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
6636 #endif
6637     
6638                 {
6639                         int rad = DETECT_RAD_DEFAULT;
6640
6641                         if (info) return info_radius(rad);
6642
6643                         if (cast)
6644                         {
6645                                 detect_all(rad);
6646                         }
6647                 }
6648                 break;
6649
6650         case 30:
6651 #ifdef JP
6652                 if (name) return "µ¢´Ô¤Î¼öʸ";
6653                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
6654 #else
6655                 if (name) return "Word of Recall";
6656                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
6657 #endif
6658     
6659                 {
6660                         int base = 15;
6661                         int sides = 20;
6662
6663                         if (info) return info_delay(base, sides);
6664
6665                         if (cast)
6666                         {
6667                                 if (!word_of_recall()) return NULL;
6668                         }
6669                 }
6670                 break;
6671
6672         case 31:
6673 #ifdef JP
6674                 if (name) return "ÀéΤ´ã";
6675                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤µ¤é¤Ë¡¢°ìÄê»þ´Ö¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
6676 #else
6677                 if (name) return "Clairvoyance";
6678                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
6679 #endif
6680     
6681                 {
6682                         int base = 25;
6683                         int sides = 30;
6684
6685                         if (info) return info_duration(base, sides);
6686
6687                         if (cast)
6688                         {
6689                                 chg_virtue(V_KNOWLEDGE, 1);
6690                                 chg_virtue(V_ENLIGHTEN, 1);
6691
6692                                 wiz_lite(FALSE);
6693
6694                                 if (!p_ptr->telepathy)
6695                                 {
6696                                         set_tim_esp(randint1(sides) + base, FALSE);
6697                                 }
6698                         }
6699                 }
6700                 break;
6701         }
6702
6703         return "";
6704 }
6705
6706
6707 static cptr do_craft_spell(int spell, int mode)
6708 {
6709         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
6710         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
6711         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
6712         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
6713
6714         int plev = p_ptr->lev;
6715
6716         switch (spell)
6717         {
6718         case 0:
6719 #ifdef JP
6720                 if (name) return "ÀÖ³°Àþ»ëÎÏ";
6721                 if (desc) return "°ìÄê»þ´Ö¡¢ÀÖ³°Àþ»ëÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
6722 #else
6723                 if (name) return "Infravision";
6724                 if (desc) return "Gives infravision for a while.";
6725 #endif
6726     
6727                 {
6728                         int base = 100;
6729
6730                         if (info) return info_duration(base, base);
6731
6732                         if (cast)
6733                         {
6734                                 set_tim_infra(base + randint1(base), FALSE);
6735                         }
6736                 }
6737                 break;
6738
6739         case 1:
6740 #ifdef JP
6741                 if (name) return "²óÉüÎ϶¯²½";
6742                 if (desc) return "°ìÄê»þ´Ö¡¢²óÉüÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
6743 #else
6744                 if (name) return "Regeneration";
6745                 if (desc) return "Gives regeneration ability for a while.";
6746 #endif
6747     
6748                 {
6749                         int base = 80;
6750
6751                         if (info) return info_duration(base, base);
6752
6753                         if (cast)
6754                         {
6755                                 set_tim_regen(base + randint1(base), FALSE);
6756                         }
6757                 }
6758                 break;
6759
6760         case 2:
6761 #ifdef JP
6762                 if (name) return "¶õÊ¢½¼Â­";
6763                 if (desc) return "ËþÊ¢¤Ë¤Ê¤ë¡£";
6764 #else
6765                 if (name) return "Satisfy Hunger";
6766                 if (desc) return "Satisfies hunger.";
6767 #endif
6768     
6769                 {
6770                         if (cast)
6771                         {
6772                                 set_food(PY_FOOD_MAX - 1);
6773                         }
6774                 }
6775                 break;
6776
6777         case 3:
6778 #ifdef JP
6779                 if (name) return "ÂÑÎ䵤";
6780                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6781 #else
6782                 if (name) return "Resist Cold";
6783                 if (desc) return "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.";
6784 #endif
6785     
6786                 {
6787                         int base = 20;
6788
6789                         if (info) return info_duration(base, base);
6790
6791                         if (cast)
6792                         {
6793                                 set_oppose_cold(randint1(base) + base, FALSE);
6794                         }
6795                 }
6796                 break;
6797
6798         case 4:
6799 #ifdef JP
6800                 if (name) return "ÂѲбê";
6801                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6802 #else
6803                 if (name) return "Resist Fire";
6804                 if (desc) return "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.";
6805 #endif
6806     
6807                 {
6808                         int base = 20;
6809
6810                         if (info) return info_duration(base, base);
6811
6812                         if (cast)
6813                         {
6814                                 set_oppose_fire(randint1(base) + base, FALSE);
6815                         }
6816                 }
6817                 break;
6818
6819         case 5:
6820 #ifdef JP
6821                 if (name) return "»Îµ¤¹âÍÈ";
6822                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
6823 #else
6824                 if (name) return "Heroism";
6825                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
6826 #endif
6827     
6828                 {
6829                         int base = 25;
6830
6831                         if (info) return info_duration(base, base);
6832
6833                         if (cast)
6834                         {
6835                                 set_hero(randint1(base) + base, FALSE);
6836                                 hp_player(10);
6837                                 set_afraid(0);
6838                         }
6839                 }
6840                 break;
6841
6842         case 6:
6843 #ifdef JP
6844                 if (name) return "ÂÑÅÅ·â";
6845                 if (desc) return "°ìÄê»þ´Ö¡¢ÅÅ·â¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6846 #else
6847                 if (name) return "Resist Lightning";
6848                 if (desc) return "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.";
6849 #endif
6850     
6851                 {
6852                         int base = 20;
6853
6854                         if (info) return info_duration(base, base);
6855
6856                         if (cast)
6857                         {
6858                                 set_oppose_elec(randint1(base) + base, FALSE);
6859                         }
6860                 }
6861                 break;
6862
6863         case 7:
6864 #ifdef JP
6865                 if (name) return "ÂÑ»À";
6866                 if (desc) return "°ìÄê»þ´Ö¡¢»À¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6867 #else
6868                 if (name) return "Resist Acid";
6869                 if (desc) return "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.";
6870 #endif
6871     
6872                 {
6873                         int base = 20;
6874
6875                         if (info) return info_duration(base, base);
6876
6877                         if (cast)
6878                         {
6879                                 set_oppose_acid(randint1(base) + base, FALSE);
6880                         }
6881                 }
6882                 break;
6883
6884         case 8:
6885 #ifdef JP
6886                 if (name) return "Æ©ÌÀ»ëǧ";
6887                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
6888 #else
6889                 if (name) return "See Invisibility";
6890                 if (desc) return "Gives see invisible for a while.";
6891 #endif
6892     
6893                 {
6894                         int base = 24;
6895
6896                         if (info) return info_duration(base, base);
6897
6898                         if (cast)
6899                         {
6900                                 set_tim_invis(randint1(base) + base, FALSE);
6901                         }
6902                 }
6903                 break;
6904
6905         case 9:
6906 #ifdef JP
6907                 if (name) return "²ò¼ö";
6908                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
6909 #else
6910                 if (name) return "Remove Curse";
6911                 if (desc) return "Removes normal curses from equipped items.";
6912 #endif
6913     
6914                 {
6915                         if (cast)
6916                         {
6917                                 if (remove_curse())
6918                                 {
6919 #ifdef JP
6920                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
6921 #else
6922                                         msg_print("You feel as if someone is watching over you.");
6923 #endif
6924                                 }
6925                         }
6926                 }
6927                 break;
6928
6929         case 10:
6930 #ifdef JP
6931                 if (name) return "ÂÑÆÇ";
6932                 if (desc) return "°ìÄê»þ´Ö¡¢ÆǤؤÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6933 #else
6934                 if (name) return "Resist Poison";
6935                 if (desc) return "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.";
6936 #endif
6937     
6938                 {
6939                         int base = 20;
6940
6941                         if (info) return info_duration(base, base);
6942
6943                         if (cast)
6944                         {
6945                                 set_oppose_pois(randint1(base) + base, FALSE);
6946                         }
6947                 }
6948                 break;
6949
6950         case 11:
6951 #ifdef JP
6952                 if (name) return "¶¸Àï»Î²½";
6953                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤¹¤ë¡£";
6954 #else
6955                 if (name) return "Berserk";
6956                 if (desc) return "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.";
6957 #endif
6958     
6959                 {
6960                         int base = 25;
6961
6962                         if (info) return info_duration(base, base);
6963
6964                         if (cast)
6965                         {
6966                                 set_shero(randint1(base) + base, FALSE);
6967                                 hp_player(30);
6968                                 set_afraid(0);
6969                         }
6970                 }
6971                 break;
6972
6973         case 12:
6974 #ifdef JP
6975                 if (name) return "¼«¸ÊʬÀÏ";
6976                 if (desc) return "¸½ºß¤Î¼«Ê¬¤Î¾õÂÖ¤ò´°Á´¤ËÃΤ롣";
6977 #else
6978                 if (name) return "Self Knowledge";
6979                 if (desc) return "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.";
6980 #endif
6981     
6982                 {
6983                         if (cast)
6984                         {
6985                                 self_knowledge();
6986                         }
6987                 }
6988                 break;
6989
6990         case 13:
6991 #ifdef JP
6992                 if (name) return "Âмٰ­·ë³¦";
6993                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Î¹¶·â¤òËɤ°¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
6994 #else
6995                 if (name) return "Protection from Evil";
6996                 if (desc) return "Gives aura which protect you from evil monster's physical attack.";
6997 #endif
6998     
6999                 {
7000                         int base = 3 * plev;
7001                         int sides = 25;
7002
7003                         if (info) return info_duration(base, sides);
7004
7005                         if (cast)
7006                         {
7007                                 set_protevil(randint1(sides) + base, FALSE);
7008                         }
7009                 }
7010                 break;
7011
7012         case 14:
7013 #ifdef JP
7014                 if (name) return "Ìþ¤·";
7015                 if (desc) return "ÆÇ¡¢Û¯Û°¾õÂÖ¡¢Éé½ý¤òÁ´²÷¤µ¤»¡¢¸¸³Ð¤òľ¤¹¡£";
7016 #else
7017                 if (name) return "Cure";
7018                 if (desc) return "Heals poison, stun, cut and hallucination completely.";
7019 #endif
7020     
7021                 {
7022                         if (cast)
7023                         {
7024                                 set_poisoned(0);
7025                                 set_stun(0);
7026                                 set_cut(0);
7027                                 set_image(0);
7028                         }
7029                 }
7030                 break;
7031
7032         case 15:
7033 #ifdef JP
7034                 if (name) return "ËâË¡·õ";
7035                 if (desc) return "°ìÄê»þ´Ö¡¢Éð´ï¤ËÎ䵤¡¢±ê¡¢ÅÅ·â¡¢»À¡¢ÆǤΤ¤¤º¤ì¤«¤Î°À­¤ò¤Ä¤±¤ë¡£Éð´ï¤ò»ý¤¿¤Ê¤¤¤È»È¤¨¤Ê¤¤¡£";
7036 #else
7037                 if (name) return "Mana Branding";
7038                 if (desc) return "Makes current weapon some elemental branded. You must wield weapons.";
7039 #endif
7040     
7041                 {
7042                         int base = plev / 2;
7043
7044                         if (info) return info_duration(base, base);
7045
7046                         if (cast)
7047                         {
7048                                 if (!choose_ele_attack()) return NULL;
7049                         }
7050                 }
7051                 break;
7052
7053         case 16:
7054 #ifdef JP
7055                 if (name) return "¥Æ¥ì¥Ñ¥·¡¼";
7056                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
7057 #else
7058                 if (name) return "Telepathy";
7059                 if (desc) return "Gives telepathy for a while.";
7060 #endif
7061     
7062                 {
7063                         int base = 25;
7064                         int sides = 30;
7065
7066                         if (info) return info_duration(base, sides);
7067
7068                         if (cast)
7069                         {
7070                                 set_tim_esp(randint1(sides) + base, FALSE);
7071                         }
7072                 }
7073                 break;
7074
7075         case 17:
7076 #ifdef JP
7077                 if (name) return "È©Àв½";
7078                 if (desc) return "°ìÄê»þ´Ö¡¢AC¤ò¾å¾º¤µ¤»¤ë¡£";
7079 #else
7080                 if (name) return "Stone Skin";
7081                 if (desc) return "Gives bonus to AC for a while.";
7082 #endif
7083     
7084                 {
7085                         int base = 30;
7086                         int sides = 20;
7087
7088                         if (info) return info_duration(base, sides);
7089
7090                         if (cast)
7091                         {
7092                                 set_shield(randint1(sides) + base, FALSE);
7093                         }
7094                 }
7095                 break;
7096
7097         case 18:
7098 #ifdef JP
7099                 if (name) return "Á´ÂÑÀ­";
7100                 if (desc) return "°ìÄê»þ´Ö¡¢»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7101 #else
7102                 if (name) return "Resistance";
7103                 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.";
7104 #endif
7105     
7106                 {
7107                         int base = 20;
7108
7109                         if (info) return info_duration(base, base);
7110
7111                         if (cast)
7112                         {
7113                                 set_oppose_acid(randint1(base) + base, FALSE);
7114                                 set_oppose_elec(randint1(base) + base, FALSE);
7115                                 set_oppose_fire(randint1(base) + base, FALSE);
7116                                 set_oppose_cold(randint1(base) + base, FALSE);
7117                                 set_oppose_pois(randint1(base) + base, FALSE);
7118                         }
7119                 }
7120                 break;
7121
7122         case 19:
7123 #ifdef JP
7124                 if (name) return "¥¹¥Ô¡¼¥É";
7125                 if (desc) return "°ìÄê»þ´Ö¡¢²Ã®¤¹¤ë¡£";
7126 #else
7127                 if (name) return "Haste Self";
7128                 if (desc) return "Hastes you for a while.";
7129 #endif
7130     
7131                 {
7132                         int base = plev;
7133                         int sides = 20 + plev;
7134
7135                         if (info) return info_duration(base, sides);
7136
7137                         if (cast)
7138                         {
7139                                 set_fast(randint1(sides) + base, FALSE);
7140                         }
7141                 }
7142                 break;
7143
7144         case 20:
7145 #ifdef JP
7146                 if (name) return "ÊÉÈ´¤±";
7147                 if (desc) return "°ìÄê»þ´Ö¡¢È¾Êª¼Á²½¤·ÊɤòÄ̤êÈ´¤±¤é¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
7148 #else
7149                 if (name) return "Walk through Wall";
7150                 if (desc) return "Gives ability to pass walls for a while.";
7151 #endif
7152     
7153                 {
7154                         int base = plev / 2;
7155
7156                         if (info) return info_duration(base, base);
7157
7158                         if (cast)
7159                         {
7160                                 set_kabenuke(randint1(base) + base, FALSE);
7161                         }
7162                 }
7163                 break;
7164
7165         case 21:
7166 #ifdef JP
7167                 if (name) return "½âË᤭";
7168                 if (desc) return "½â¤ËÈ¿¼Í¤Î°À­¤ò¤Ä¤±¤ë¡£";
7169 #else
7170                 if (name) return "Polish Shield";
7171                 if (desc) return "Makes a shield a shield of reflection.";
7172 #endif
7173     
7174                 {
7175                         if (cast)
7176                         {
7177                                 pulish_shield();
7178                         }
7179                 }
7180                 break;
7181
7182         case 22:
7183 #ifdef JP
7184                 if (name) return "¥´¡¼¥ì¥àÀ½Â¤";
7185                 if (desc) return "1ÂΤΥ´¡¼¥ì¥à¤òÀ½Â¤¤¹¤ë¡£";
7186 #else
7187                 if (name) return "Create Golem";
7188                 if (desc) return "Creates a golem.";
7189 #endif
7190     
7191                 {
7192                         if (cast)
7193                         {
7194                                 if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, PM_FORCE_PET))
7195                                 {
7196 #ifdef JP
7197                                         msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
7198 #else
7199                                         msg_print("You make a golem.");
7200 #endif
7201                                 }
7202                                 else
7203                                 {
7204 #ifdef JP
7205                                         msg_print("¤¦¤Þ¤¯¥´¡¼¥ì¥à¤òºî¤ì¤Ê¤«¤Ã¤¿¡£");
7206 #else
7207                                         msg_print("No Golems arrive.");
7208 #endif
7209                                 }
7210                         }
7211                 }
7212                 break;
7213
7214         case 23:
7215 #ifdef JP
7216                 if (name) return "ËâË¡¤Î³»";
7217                 if (desc) return "°ìÄê»þ´Ö¡¢ËâË¡ËɸæÎϤÈAC¤¬¾å¤¬¤ê¡¢º®Íð¤ÈÌÕÌܤÎÂÑÀ­¡¢È¿¼ÍǽÎÏ¡¢ËãáãÃΤ餺¡¢ÉâÍ·¤òÆÀ¤ë¡£";
7218 #else
7219                 if (name) return "Magical armor";
7220                 if (desc) return "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.";
7221 #endif
7222     
7223                 {
7224                         int base = 20;
7225
7226                         if (info) return info_duration(base, base);
7227
7228                         if (cast)
7229                         {
7230                                 set_magicdef(randint1(base) + base, FALSE);
7231                         }
7232                 }
7233                 break;
7234
7235         case 24:
7236 #ifdef JP
7237                 if (name) return "ÁõÈ÷̵Îϲ½";
7238                 if (desc) return "Éð´ï¡¦Ëɶñ¤Ë¤«¤±¤é¤ì¤¿¤¢¤é¤æ¤ëËâÎϤò´°Á´¤Ë²ò½ü¤¹¤ë¡£";
7239 #else
7240                 if (name) return "Remove Enchantment";
7241                 if (desc) return "Removes all magics completely from any weapon or armor.";
7242 #endif
7243     
7244                 {
7245                         if (cast)
7246                         {
7247                                 if (!mundane_spell(TRUE)) return NULL;
7248                         }
7249                 }
7250                 break;
7251
7252         case 25:
7253 #ifdef JP
7254                 if (name) return "¼ö¤¤Ê´ºÕ";
7255                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
7256 #else
7257                 if (name) return "Remove All Curse";
7258                 if (desc) return "Removes normal and heavy curse from equipped items.";
7259 #endif
7260     
7261                 {
7262                         if (cast)
7263                         {
7264                                 if (remove_all_curse())
7265                                 {
7266 #ifdef JP
7267                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
7268 #else
7269                                         msg_print("You feel as if someone is watching over you.");
7270 #endif
7271                                 }
7272                         }
7273                 }
7274                 break;
7275
7276         case 26:
7277 #ifdef JP
7278                 if (name) return "´°Á´¤Ê¤ëÃμ±";
7279                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
7280 #else
7281                 if (name) return "Knowledge True";
7282                 if (desc) return "*Identifies* an item.";
7283 #endif
7284     
7285                 {
7286                         if (cast)
7287                         {
7288                                 if (!identify_fully(FALSE)) return NULL;
7289                         }
7290                 }
7291                 break;
7292
7293         case 27:
7294 #ifdef JP
7295                 if (name) return "Éð´ï¶¯²½";
7296                 if (desc) return "Éð´ï¤ÎÌ¿ÃæΨ½¤Àµ¤È¥À¥á¡¼¥¸½¤Àµ¤ò¶¯²½¤¹¤ë¡£";
7297 #else
7298                 if (name) return "Enchant Weapon";
7299                 if (desc) return "Attempts to increase +to-hit, +to-dam of a weapon.";
7300 #endif
7301     
7302                 {
7303                         if (cast)
7304                         {
7305                                 if (!enchant_spell(randint0(4) + 1, randint0(4) + 1, 0)) return NULL;
7306                         }
7307                 }
7308                 break;
7309
7310         case 28:
7311 #ifdef JP
7312                 if (name) return "Ëɶñ¶¯²½";
7313                 if (desc) return "³»¤ÎËɸ潤Àµ¤ò¶¯²½¤¹¤ë¡£";
7314 #else
7315                 if (name) return "Enchant Armor";
7316                 if (desc) return "Attempts to increase +AC of an armor.";
7317 #endif
7318     
7319                 {
7320                         if (cast)
7321                         {
7322                                 if (!enchant_spell(0, 0, randint0(3) + 2)) return NULL;
7323                         }
7324                 }
7325                 break;
7326
7327         case 29:
7328 #ifdef JP
7329                 if (name) return "Éð´ï°À­ÉÕÍ¿";
7330                 if (desc) return "Éð´ï¤Ë¥é¥ó¥À¥à¤Ë°À­¤ò¤Ä¤±¤ë¡£";
7331 #else
7332                 if (name) return "Brand Weapon";
7333                 if (desc) return "Makes current weapon a random ego weapon.";
7334 #endif
7335     
7336                 {
7337                         if (cast)
7338                         {
7339                                 brand_weapon(randint0(18));
7340                         }
7341                 }
7342                 break;
7343
7344         case 30:
7345 #ifdef JP
7346                 if (name) return "¿Í´Ö¥È¥é¥ó¥×";
7347                 if (desc) return "¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤«¡¢¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤¬¿È¤Ë¤Ä¤¯¡£";
7348 #else
7349                 if (name) return "Living Trump";
7350                 if (desc) return "Gives mutation which makes you teleport randomly or makes you able to teleport at will.";
7351 #endif
7352     
7353                 {
7354                         if (cast)
7355                         {
7356                                 int mutation;
7357
7358                                 if (one_in_(7))
7359                                         /* Teleport control */
7360                                         mutation = 12;
7361                                 else
7362                                         /* Random teleportation (uncontrolled) */
7363                                         mutation = 77;
7364
7365                                 /* Gain the mutation */
7366                                 if (gain_random_mutation(mutation))
7367                                 {
7368 #ifdef JP
7369                                         msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤­¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
7370 #else
7371                                         msg_print("You have turned into a Living Trump.");
7372 #endif
7373                                 }
7374                         }
7375                 }
7376                 break;
7377
7378         case 31:
7379 #ifdef JP
7380                 if (name) return "°À­¤Ø¤ÎÌȱÖ";
7381                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¡¢±ê¡¢ÅÅ·â¡¢»À¤Î¤¤¤º¤ì¤«¤ËÂФ¹¤ëÌȱ֤òÆÀ¤ë¡£";
7382 #else
7383                 if (name) return "Immunity";
7384                 if (desc) return "Gives an immunity to fire, cold, electricity or acid for a while.";
7385 #endif
7386     
7387                 {
7388                         int base = 13;
7389
7390                         if (info) return info_duration(base, base);
7391
7392                         if (cast)
7393                         {
7394                                 if (!choose_ele_immune(base + randint1(base))) return NULL;
7395                         }
7396                 }
7397                 break;
7398         }
7399
7400         return "";
7401 }
7402
7403
7404 static cptr do_daemon_spell(int spell, int mode)
7405 {
7406         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
7407         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
7408         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
7409         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
7410
7411 #ifdef JP
7412         static const char s_dam[] = "»½ý:";
7413 #else
7414         static const char s_dam[] = "dam ";
7415 #endif
7416
7417         int dir;
7418         int plev = p_ptr->lev;
7419
7420         switch (spell)
7421         {
7422         case 0:
7423 #ifdef JP
7424                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë";
7425                 if (desc) return "¼å¤¤ËâË¡¤ÎÌð¤òÊü¤Ä¡£";
7426 #else
7427                 if (name) return "Magic Missile";
7428                 if (desc) return "Fires a weak bolt of magic.";
7429 #endif
7430     
7431                 {
7432                         int dice = 3 + (plev - 1) / 5;
7433                         int sides = 4;
7434
7435                         if (info) return info_damage(dice, sides, 0);
7436
7437                         if (cast)
7438                         {
7439                                 if (!get_aim_dir(&dir)) return NULL;
7440
7441                                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
7442                         }
7443                 }
7444                 break;
7445
7446         case 1:
7447 #ifdef JP
7448                 if (name) return "̵À¸Ì¿´¶ÃÎ";
7449                 if (desc) return "¶á¤¯¤ÎÀ¸Ì¿¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
7450 #else
7451                 if (name) return "Detect Unlife";
7452                 if (desc) return "Detects all nonliving monsters in your vicinity.";
7453 #endif
7454     
7455                 {
7456                         int rad = DETECT_RAD_DEFAULT;
7457
7458                         if (info) return info_radius(rad);
7459
7460                         if (cast)
7461                         {
7462                                 detect_monsters_nonliving(rad);
7463                         }
7464                 }
7465                 break;
7466
7467         case 2:
7468 #ifdef JP
7469                 if (name) return "¼Ù¤Ê¤ë½ËÊ¡";
7470                 if (desc) return "°ìÄê»þ´Ö¡¢Ì¿ÃæΨ¤ÈAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
7471 #else
7472                 if (name) return "Evil Bless";
7473                 if (desc) return "Gives bonus to hit and AC for a few turns.";
7474 #endif
7475     
7476                 {
7477                         int base = 12;
7478
7479                         if (info) return info_duration(base, base);
7480
7481                         if (cast)
7482                         {
7483                                 set_blessed(randint1(base) + base, FALSE);
7484                         }
7485                 }
7486                 break;
7487
7488         case 3:
7489 #ifdef JP
7490                 if (name) return "ÂѲбê";
7491                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7492 #else
7493                 if (name) return "Resist Fire";
7494                 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.";
7495 #endif
7496     
7497                 {
7498                         int base = 20;
7499
7500                         if (info) return info_duration(base, base);
7501
7502                         if (cast)
7503                         {
7504                                 set_oppose_fire(randint1(base) + base, FALSE);
7505                         }
7506                 }
7507                 break;
7508
7509         case 4:
7510 #ifdef JP
7511                 if (name) return "¶²¹²";
7512                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¡¢Û¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
7513 #else
7514                 if (name) return "Horrify";
7515                 if (desc) return "Attempts to scare and stun a monster.";
7516 #endif
7517     
7518                 {
7519                         int power = plev;
7520
7521                         if (info) return info_power(power);
7522
7523                         if (cast)
7524                         {
7525                                 if (!get_aim_dir(&dir)) return NULL;
7526
7527                                 fear_monster(dir, power);
7528                                 stun_monster(dir, power);
7529                         }
7530                 }
7531                 break;
7532
7533         case 5:
7534 #ifdef JP
7535                 if (name) return "ÃϹö¤ÎÌð";
7536                 if (desc) return "ÃϹö¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
7537 #else
7538                 if (name) return "Nether Bolt";
7539                 if (desc) return "Fires a bolt or beam of nether.";
7540 #endif
7541     
7542                 {
7543                         int dice = 6 + (plev - 5) / 4;
7544                         int sides = 8;
7545
7546                         if (info) return info_damage(dice, sides, 0);
7547
7548                         if (cast)
7549                         {
7550                                 if (!get_aim_dir(&dir)) return NULL;
7551
7552                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
7553                         }
7554                 }
7555                 break;
7556
7557         case 6:
7558 #ifdef JP
7559                 if (name) return "¸ÅÂå¤Î»àÎ´­";
7560                 if (desc) return "¸ÅÂå¤Î»àÎî¤ò¾¤´­¤¹¤ë¡£";
7561 #else
7562                 if (name) return "Summon Manes";
7563                 if (desc) return "Summons a manes.";
7564 #endif
7565     
7566                 {
7567                         if (cast)
7568                         {
7569                                 if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))
7570                                 {
7571 #ifdef JP
7572                                         msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
7573 #else
7574                                         msg_print("No Manes arrive.");
7575 #endif
7576                                 }
7577                         }
7578                 }
7579                 break;
7580
7581         case 7:
7582 #ifdef JP
7583                 if (name) return "ÃϹö¤Î±ë";
7584                 if (desc) return "¼Ù°­¤ÊÎϤò»ý¤Ä¥Ü¡¼¥ë¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
7585 #else
7586                 if (name) return "Hellish Flame";
7587                 if (desc) return "Fires a ball of evil power. Hurts good monsters greatly.";
7588 #endif
7589     
7590                 {
7591                         int dice = 3;
7592                         int sides = 6;
7593                         int rad = (plev < 30) ? 2 : 3;
7594                         int base;
7595
7596                         if (p_ptr->pclass == CLASS_MAGE ||
7597                             p_ptr->pclass == CLASS_HIGH_MAGE ||
7598                             p_ptr->pclass == CLASS_SORCERER)
7599                                 base = plev + plev / 2;
7600                         else
7601                                 base = plev + plev / 4;
7602
7603
7604                         if (info) return info_damage(dice, sides, base);
7605
7606                         if (cast)
7607                         {
7608                                 if (!get_aim_dir(&dir)) return NULL;
7609
7610                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides) + base, rad);
7611                         }
7612                 }
7613                 break;
7614
7615         case 8:
7616 #ifdef JP
7617                 if (name) return "¥Ç¡¼¥â¥ó»ÙÇÛ";
7618                 if (desc) return "°­Ëâ1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú";
7619 #else
7620                 if (name) return "Dominate Demon";
7621                 if (desc) return "Attempts to charm a demon.";
7622 #endif
7623     
7624                 {
7625                         int power = plev;
7626
7627                         if (info) return info_power(power);
7628
7629                         if (cast)
7630                         {
7631                                 if (!get_aim_dir(&dir)) return NULL;
7632
7633                                 control_one_demon(dir, power);
7634                         }
7635                 }
7636                 break;
7637
7638         case 9:
7639 #ifdef JP
7640                 if (name) return "¥Ó¥¸¥ç¥ó";
7641                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
7642 #else
7643                 if (name) return "Vision";
7644                 if (desc) return "Maps nearby area.";
7645 #endif
7646     
7647                 {
7648                         int rad = DETECT_RAD_MAP;
7649
7650                         if (info) return info_radius(rad);
7651
7652                         if (cast)
7653                         {
7654                                 map_area(rad);
7655                         }
7656                 }
7657                 break;
7658
7659         case 10:
7660 #ifdef JP
7661                 if (name) return "ÂÑÃϹö";
7662                 if (desc) return "°ìÄê»þ´Ö¡¢ÃϹö¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£";
7663 #else
7664                 if (name) return "Resist Nether";
7665                 if (desc) return "Gives resistance to nether for a while.";
7666 #endif
7667     
7668                 {
7669                         int base = 20;
7670
7671                         if (info) return info_duration(base, base);
7672
7673                         if (cast)
7674                         {
7675                                 set_tim_res_nether(randint1(base) + base, FALSE);
7676                         }
7677                 }
7678                 break;
7679
7680         case 11:
7681 #ifdef JP
7682                 if (name) return "¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È";
7683                 if (desc) return "¥×¥é¥º¥Þ¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
7684 #else
7685                 if (name) return "Plasma bolt";
7686                 if (desc) return "Fires a bolt or beam of plasma.";
7687 #endif
7688     
7689                 {
7690                         int dice = 11 + (plev - 5) / 4;
7691                         int sides = 8;
7692
7693                         if (info) return info_damage(dice, sides, 0);
7694
7695                         if (cast)
7696                         {
7697                                 if (!get_aim_dir(&dir)) return NULL;
7698
7699                                 fire_bolt_or_beam(beam_chance(), GF_PLASMA, dir, damroll(dice, sides));
7700                         }
7701                 }
7702                 break;
7703
7704         case 12:
7705 #ifdef JP
7706                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";
7707                 if (desc) return "±ê¤Îµå¤òÊü¤Ä¡£";
7708 #else
7709                 if (name) return "Fire Ball";
7710                 if (desc) return "Fires a ball of fire.";
7711 #endif
7712     
7713                 {
7714                         int dam = plev + 55;
7715                         int rad = 2;
7716
7717                         if (info) return info_damage(0, 0, dam);
7718
7719                         if (cast)
7720                         {
7721                                 if (!get_aim_dir(&dir)) return NULL;
7722
7723                                 fire_ball(GF_FIRE, dir, dam, rad);
7724                         }
7725                 }
7726                 break;
7727
7728         case 13:
7729 #ifdef JP
7730                 if (name) return "±ê¤Î¿Ï";
7731                 if (desc) return "Éð´ï¤Ë±ê¤Î°À­¤ò¤Ä¤±¤ë¡£";
7732 #else
7733                 if (name) return "Fire Branding";
7734                 if (desc) return "Makes current weapon fire branded.";
7735 #endif
7736     
7737                 {
7738                         if (cast)
7739                         {
7740                                 brand_weapon(1);
7741                         }
7742                 }
7743                 break;
7744
7745         case 14:
7746 #ifdef JP
7747                 if (name) return "ÃϹöµå";
7748                 if (desc) return "Â礭¤ÊÃϹö¤Îµå¤òÊü¤Ä¡£";
7749 #else
7750                 if (name) return "Nether Ball";
7751                 if (desc) return "Fires a huge ball of nether.";
7752 #endif
7753     
7754                 {
7755                         int dam = plev * 3 / 2 + 100;
7756                         int rad = plev / 20 + 2;
7757
7758                         if (info) return info_damage(0, 0, dam);
7759
7760                         if (cast)
7761                         {
7762                                 if (!get_aim_dir(&dir)) return NULL;
7763
7764                                 fire_ball(GF_NETHER, dir, dam, rad);
7765                         }
7766                 }
7767                 break;
7768
7769         case 15:
7770 #ifdef JP
7771                 if (name) return "¥Ç¡¼¥â¥ó¾¤´­";
7772                 if (desc) return "°­Ëâ1ÂΤò¾¤´­¤¹¤ë¡£";
7773 #else
7774                 if (name) return "Summon Demon";
7775                 if (desc) return "Summons a demon.";
7776 #endif
7777     
7778                 {
7779                         if (cast)
7780                         {
7781                                 bool pet = !one_in_(3);
7782                                 u32b mode = 0L;
7783
7784                                 if (pet) mode |= PM_FORCE_PET;
7785                                 else mode |= PM_NO_PET;
7786                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
7787
7788                                 if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint1(plev/2), SUMMON_DEMON, mode))
7789                                 {
7790 #ifdef JP
7791                                         msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
7792 #else
7793                                         msg_print("The area fills with a stench of sulphur and brimstone.");
7794 #endif
7795
7796
7797                                         if (pet)
7798                                         {
7799 #ifdef JP
7800                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
7801 #else
7802                                                 msg_print("'What is thy bidding... Master?'");
7803 #endif
7804                                         }
7805                                         else
7806                                         {
7807 #ifdef JP
7808                                                 msg_print("¡ÖÈܤ·¤­¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
7809 #else
7810                                                 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
7811 #endif
7812                                         }
7813                                 }
7814                                 else
7815                                 {
7816 #ifdef JP
7817                                         msg_print("°­Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
7818 #else
7819                                         msg_print("No demons arrive.");
7820 #endif
7821                                 }
7822                                 break;
7823                         }
7824                 }
7825                 break;
7826
7827         case 16:
7828 #ifdef JP
7829                 if (name) return "°­Ëâ¤ÎÌÜ";
7830                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
7831 #else
7832                 if (name) return "Devilish Eye";
7833                 if (desc) return "Gives telepathy for a while.";
7834 #endif
7835     
7836                 {
7837                         int base = 30;
7838                         int sides = 25;
7839
7840                         if (info) return info_duration(base, sides);
7841
7842                         if (cast)
7843                         {
7844                                 set_tim_esp(randint1(base) + sides, FALSE);
7845                         }
7846                 }
7847                 break;
7848
7849         case 17:
7850 #ifdef JP
7851                 if (name) return "°­Ëâ¤Î¥¯¥í¡¼¥¯";
7852                 if (desc) return "¶²Éݤò¼è¤ê½ü¤­¡¢°ìÄê»þ´Ö¡¢±ê¤ÈÎ䵤¤ÎÂÑÀ­¡¢±ê¤Î¥ª¡¼¥é¤òÆÀ¤ë¡£ÂÑÀ­¤ÏÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7853 #else
7854                 if (name) return "Devil Cloak";
7855                 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.";
7856 #endif
7857     
7858                 {
7859                         int base = 20;
7860
7861                         if (info) return info_duration(base, base);
7862
7863                         if (cast)
7864                         {
7865                                 int dur = randint1(base) + base;
7866                                         
7867                                 set_oppose_fire(dur, FALSE);
7868                                 set_oppose_cold(dur, FALSE);
7869                                 set_tim_sh_fire(dur, FALSE);
7870                                 set_afraid(0);
7871                                 break;
7872                         }
7873                 }
7874                 break;
7875
7876         case 18:
7877 #ifdef JP
7878                 if (name) return "ÍÏ´äή";
7879                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿±ê¤Îµå¤òºî¤ê½Ð¤·¡¢¾²¤òÍÏ´ä¤ËÊѤ¨¤ë¡£";
7880 #else
7881                 if (name) return "The Flow of Lava";
7882                 if (desc) return "Generates a ball of fire centered on you which transforms floors to magma.";
7883 #endif
7884     
7885                 {
7886                         int dam = (55 + plev) * 2;
7887                         int rad = 3;
7888
7889                         if (info) return info_damage(0, 0, dam/2);
7890
7891                         if (cast)
7892                         {
7893                                 fire_ball(GF_FIRE, 0, dam, rad);
7894                                 fire_ball_hide(GF_LAVA_FLOW, 0, 2 + randint1(2), rad);
7895                         }
7896                 }
7897                 break;
7898
7899         case 19:
7900 #ifdef JP
7901                 if (name) return "¥×¥é¥º¥Þµå";
7902                 if (desc) return "¥×¥é¥º¥Þ¤Îµå¤òÊü¤Ä¡£";
7903 #else
7904                 if (name) return "Plasma Ball";
7905                 if (desc) return "Fires a ball of plasma.";
7906 #endif
7907     
7908                 {
7909                         int dam = plev * 3 / 2 + 80;
7910                         int rad = 2 + plev / 40;
7911
7912                         if (info) return info_damage(0, 0, dam);
7913
7914                         if (cast)
7915                         {
7916                                 if (!get_aim_dir(&dir)) return NULL;
7917
7918                                 fire_ball(GF_PLASMA, dir, dam, rad);
7919                         }
7920                 }
7921                 break;
7922
7923         case 20:
7924 #ifdef JP
7925                 if (name) return "°­ËâÊѲ½";
7926                 if (desc) return "°ìÄê»þ´Ö¡¢°­Ëâ¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤Ë°­Ëâ¤È¤·¤Æ¤ÎǽÎϤòÆÀ¤ë¡£";
7927 #else
7928                 if (name) return "Polymorph Demon";
7929                 if (desc) return "Mimic a demon for a while. Loses abilities of original race and gets abilities as a demon.";
7930 #endif
7931     
7932                 {
7933                         int base = 10 + plev / 2;
7934
7935                         if (info) return info_duration(base, base);
7936
7937                         if (cast)
7938                         {
7939                                 set_mimic(base + randint1(base), MIMIC_DEMON, FALSE);
7940                         }
7941                 }
7942                 break;
7943
7944         case 21:
7945 #ifdef JP
7946                 if (name) return "ÃϹö¤ÎÇÈÆ°";
7947                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤ËÆäËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
7948 #else
7949                 if (name) return "Nather Wave";
7950                 if (desc) return "Damages all monsters in sight. Hurts good monsters greatly.";
7951 #endif
7952     
7953                 {
7954                         int sides1 = plev * 2;
7955                         int sides2 = plev * 2;
7956
7957                         if (info) return format("%sd%d+d%d", s_dam, sides1, sides2);
7958
7959                         if (cast)
7960                         {
7961                                 dispel_monsters(randint1(sides1));
7962                                 dispel_good(randint1(sides2));
7963                         }
7964                 }
7965                 break;
7966
7967         case 22:
7968 #ifdef JP
7969                 if (name) return "¥µ¥­¥å¥Ð¥¹¤ÎÀÜÊ­";
7970                 if (desc) return "°ø²Ìº®Íð¤Îµå¤òÊü¤Ä¡£";
7971 #else
7972                 if (name) return "Kiss of Succubus";
7973                 if (desc) return "Fires a ball of nexus.";
7974 #endif
7975     
7976                 {
7977                         int dam = 100 + plev * 2;
7978                         int rad = 4;
7979
7980                         if (info) return info_damage(0, 0, dam);
7981
7982                         if (cast)
7983                         {
7984                                 if (!get_aim_dir(&dir)) return NULL;
7985                                 fire_ball(GF_NEXUS, dir, dam, rad);
7986                         }
7987                 }
7988                 break;
7989
7990         case 23:
7991 #ifdef JP
7992                 if (name) return "ÇËÌǤμê";
7993                 if (desc) return "ÇËÌǤμê¤òÊü¤Ä¡£¿©¤é¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤Ï¤½¤Î¤È¤­¤ÎHP¤ÎȾʬÁ°¸å¤Î¥À¥á¡¼¥¸¤ò¼õ¤±¤ë¡£";
7994 #else
7995                 if (name) return "Doom Hand";
7996                 if (desc) return "Attempts to make a monster's HP almost half.";
7997 #endif
7998     
7999                 {
8000                         if (cast)
8001                         {
8002                                 if (!get_aim_dir(&dir)) return NULL;
8003 #ifdef JP
8004                                 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
8005 #else
8006                                 else msg_print("You invoke the Hand of Doom!");
8007 #endif
8008
8009                                 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
8010                         }
8011                 }
8012                 break;
8013
8014         case 24:
8015 #ifdef JP
8016                 if (name) return "»Îµ¤¹âÍÈ";
8017                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
8018 #else
8019                 if (name) return "Raise the Morale";
8020                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
8021 #endif
8022     
8023                 {
8024                         int base = 25;
8025
8026                         if (info) return info_duration(base, base);
8027
8028                         if (cast)
8029                         {
8030                                 set_hero(randint1(base) + base, FALSE);
8031                                 hp_player(10);
8032                                 set_afraid(0);
8033                         }
8034                 }
8035                 break;
8036
8037         case 25:
8038 #ifdef JP
8039                 if (name) return "ÉÔÌǤÎÆùÂÎ";
8040                 if (desc) return "°ìÄê»þ´Ö¡¢»þ´ÖµÕž¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£";
8041 #else
8042                 if (name) return "Immortal Body";
8043                 if (desc) return "Gives resistance to time for a while.";
8044 #endif
8045     
8046                 {
8047                         int base = 20;
8048
8049                         if (info) return info_duration(base, base);
8050
8051                         if (cast)
8052                         {
8053                                 set_tim_res_time(randint1(base)+base, FALSE);
8054                         }
8055                 }
8056                 break;
8057
8058         case 26:
8059 #ifdef JP
8060                 if (name) return "¶¸µ¤¤Î±ß´Ä";
8061                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¥«¥ª¥¹¤Îµå¡¢º®Íð¤Îµå¤òȯÀ¸¤µ¤»¡¢¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£";
8062 #else
8063                 if (name) return "Insanity Circle";
8064                 if (desc) return "Generate balls of chaos, confusion and charm centered on you.";
8065 #endif
8066     
8067                 {
8068                         int dam = 50 + plev;
8069                         int power = 20 + plev;
8070                         int rad = 3 + plev / 20;
8071
8072                         if (info) return format("%s%d+%d", s_dam, dam/2, dam/2);
8073
8074                         if (cast)
8075                         {
8076                                 fire_ball(GF_CHAOS, 0, dam, rad);
8077                                 fire_ball(GF_CONFUSION, 0, dam, rad);
8078                                 fire_ball(GF_CHARM, 0, power, rad);
8079                         }
8080                 }
8081                 break;
8082
8083         case 27:
8084 #ifdef JP
8085                 if (name) return "¥Ú¥Ã¥ÈÇúÇË";
8086                 if (desc) return "Á´¤Æ¤Î¥Ú¥Ã¥È¤ò¶¯À©Åª¤ËÇúÇˤµ¤»¤ë¡£";
8087 #else
8088                 if (name) return "Explode Pets";
8089                 if (desc) return "Makes all pets explode.";
8090 #endif
8091     
8092                 {
8093                         if (cast)
8094                         {
8095                                 discharge_minion();
8096                         }
8097                 }
8098                 break;
8099
8100         case 28:
8101 #ifdef JP
8102                 if (name) return "¥°¥ì¡¼¥¿¡¼¥Ç¡¼¥â¥ó¾¤´­";
8103                 if (desc) return "¾åµé¥Ç¡¼¥â¥ó¤ò¾¤´­¤¹¤ë¡£¾¤´­¤¹¤ë¤Ë¤Ï¿Í´Ö('p','h','t'¤Çɽ¤µ¤ì¤ë¥â¥ó¥¹¥¿¡¼)¤Î»àÂΤòÊû¤²¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£";
8104 #else
8105                 if (name) return "Summon Greater Demon";
8106                 if (desc) return "Summons greater demon. It need to sacrifice a corpse of human ('p','h' or 't').";
8107 #endif
8108     
8109                 {
8110                         if (cast)
8111                         {
8112                                 if (!cast_summon_greater_demon()) return NULL;
8113                         }
8114                 }
8115                 break;
8116
8117         case 29:
8118 #ifdef JP
8119                 if (name) return "ÃϹöÍò";
8120                 if (desc) return "ĶµðÂç¤ÊÃϹö¤Îµå¤òÊü¤Ä¡£";
8121 #else
8122                 if (name) return "Nether Storm";
8123                 if (desc) return "Generate a huge ball of nether.";
8124 #endif
8125     
8126                 {
8127                         int dam = plev * 15;
8128                         int rad = plev / 5;
8129
8130                         if (info) return info_damage(0, 0, dam);
8131
8132                         if (cast)
8133                         {
8134                                 if (!get_aim_dir(&dir)) return NULL;
8135
8136                                 fire_ball(GF_NETHER, dir, dam, rad);
8137                         }
8138                 }
8139                 break;
8140
8141         case 30:
8142 #ifdef JP
8143                 if (name) return "·ì¤Î¼ö¤¤";
8144                 if (desc) return "¼«Ê¬¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤ë¤³¤È¤Ë¤è¤Ã¤ÆÂоݤ˼ö¤¤¤ò¤«¤±¡¢¥À¥á¡¼¥¸¤òÍ¿¤¨ÍÍ¡¹¤Ê¸ú²Ì¤ò°ú¤­µ¯¤³¤¹¡£";
8145 #else
8146                 if (name) return "Bloody Curse";
8147                 if (desc) return "Puts blood curse which damages and causes various effects on a monster. You also take damage.";
8148 #endif
8149     
8150                 {
8151                         int dam = 600;
8152                         int rad = 0;
8153
8154                         if (info) return info_damage(0, 0, dam);
8155
8156                         if (cast)
8157                         {
8158                                 if (!get_aim_dir(&dir)) return NULL;
8159
8160                                 fire_ball_hide(GF_BLOOD_CURSE, dir, dam, rad);
8161 #ifdef JP
8162                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "·ì¤Î¼ö¤¤", -1);
8163 #else
8164                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "Blood curse", -1);
8165 #endif
8166                         }
8167                 }
8168                 break;
8169
8170         case 31:
8171 #ifdef JP
8172                 if (name) return "ËⲦÊѲ½";
8173                 if (desc) return "°­Ëâ¤Î²¦¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤Ë°­Ëâ¤Î²¦¤È¤·¤Æ¤ÎǽÎϤòÆÀ¡¢ÊɤòÇ˲õ¤·¤Ê¤¬¤éÊ⤯¡£";
8174 #else
8175                 if (name) return "Polymorph Demonlord";
8176                 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.";
8177 #endif
8178     
8179                 {
8180                         int base = 15;
8181
8182                         if (info) return info_duration(base, base);
8183
8184                         if (cast)
8185                         {
8186                                 set_mimic(base + randint1(base), MIMIC_DEMON_LORD, FALSE);
8187                         }
8188                 }
8189                 break;
8190         }
8191
8192         return "";
8193 }
8194
8195
8196 static cptr do_crusade_spell(int spell, int mode)
8197 {
8198         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
8199         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
8200         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
8201         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
8202
8203         int dir;
8204         int plev = p_ptr->lev;
8205
8206         switch (spell)
8207         {
8208         case 0:
8209 #ifdef JP
8210                 if (name) return "Ĩȳ";
8211                 if (desc) return "ÅÅ·â¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
8212 #else
8213                 if (name) return "Punishment";
8214                 if (desc) return "Fires a bolt or beam of lightning.";
8215 #endif
8216     
8217                 {
8218                         int dice = 3 + (plev - 1) / 5;
8219                         int sides = 4;
8220
8221                         if (info) return info_damage(dice, sides, 0);
8222
8223                         if (cast)
8224                         {
8225                                 if (!get_aim_dir(&dir)) return NULL;
8226
8227                                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
8228                         }
8229                 }
8230                 break;
8231
8232         case 1:
8233 #ifdef JP
8234                 if (name) return "¼Ù°­Â¸ºß´¶ÃÎ";
8235                 if (desc) return "¶á¤¯¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
8236 #else
8237                 if (name) return "Detect Evil";
8238                 if (desc) return "Detects all evil monsters in your vicinity.";
8239 #endif
8240     
8241                 {
8242                         int rad = DETECT_RAD_DEFAULT;
8243
8244                         if (info) return info_radius(rad);
8245
8246                         if (cast)
8247                         {
8248                                 detect_monsters_evil(rad);
8249                         }
8250                 }
8251                 break;
8252
8253         case 2:
8254 #ifdef JP
8255                 if (name) return "¶²Éݽüµî";
8256                 if (desc) return "¶²Éݤò¼è¤ê½ü¤¯¡£";
8257 #else
8258                 if (name) return "Remove Fear";
8259                 if (desc) return "Removes fear.";
8260 #endif
8261     
8262                 {
8263                         if (cast)
8264                         {
8265                                 set_afraid(0);
8266                         }
8267                 }
8268                 break;
8269
8270         case 3:
8271 #ifdef JP
8272                 if (name) return "°Ò°µ";
8273                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8274 #else
8275                 if (name) return "Scare Monster";
8276                 if (desc) return "Attempts to scare a monster.";
8277 #endif
8278     
8279                 {
8280                         int power = plev;
8281
8282                         if (info) return info_power(power);
8283
8284                         if (cast)
8285                         {
8286                                 if (!get_aim_dir(&dir)) return NULL;
8287
8288                                 fear_monster(dir, power);
8289                         }
8290                 }
8291                 break;
8292
8293         case 4:
8294 #ifdef JP
8295                 if (name) return "À»°è";
8296                 if (desc) return "ÎÙÀܤ·¤¿Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8297 #else
8298                 if (name) return "Sanctuary";
8299                 if (desc) return "Attempts to sleep monsters in the adjacent squares.";
8300 #endif
8301     
8302                 {
8303                         int power = plev;
8304
8305                         if (info) return info_power(power);
8306
8307                         if (cast)
8308                         {
8309                                 sleep_monsters_touch();
8310                         }
8311                 }
8312                 break;
8313
8314         case 5:
8315 #ifdef JP
8316                 if (name) return "Æþ¸ý";
8317                 if (desc) return "Ãæµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
8318 #else
8319                 if (name) return "Portal";
8320                 if (desc) return "Teleport medium distance.";
8321 #endif
8322     
8323                 {
8324                         int range = 25 + plev / 2;
8325
8326                         if (info) return info_range(range);
8327
8328                         if (cast)
8329                         {
8330                                 teleport_player(range, 0L);
8331                         }
8332                 }
8333                 break;
8334
8335         case 6:
8336 #ifdef JP
8337                 if (name) return "¥¹¥¿¡¼¥À¥¹¥È";
8338                 if (desc) return "¥¿¡¼¥²¥Ã¥ÈÉÕ¶á¤ËÁ®¸÷¤Î¥Ü¥ë¥È¤òÏ¢¼Í¤¹¤ë¡£";
8339 #else
8340                 if (name) return "Star Dust";
8341                 if (desc) return "Fires many bolts of light near the target.";
8342 #endif
8343     
8344                 {
8345                         int dice = 3 + (plev - 1) / 9;
8346                         int sides = 2;
8347
8348                         if (info) return info_multi_damage_dice(dice, sides);
8349
8350                         if (cast)
8351                         {
8352                                 if (!get_aim_dir(&dir)) return NULL;
8353                                 fire_blast(GF_LITE, dir, dice, sides, 10, 3);
8354                         }
8355                 }
8356                 break;
8357
8358         case 7:
8359 #ifdef JP
8360                 if (name) return "¿ÈÂξô²½";
8361                 if (desc) return "½ý¡¢ÆÇ¡¢Û¯Û°¤«¤éÁ´²÷¤¹¤ë¡£";
8362 #else
8363                 if (name) return "Purify";
8364                 if (desc) return "Heals all cut, stun and poison status.";
8365 #endif
8366     
8367                 {
8368                         if (cast)
8369                         {
8370                                 set_cut(0);
8371                                 set_poisoned(0);
8372                                 set_stun(0);
8373                         }
8374                 }
8375                 break;
8376
8377         case 8:
8378 #ifdef JP
8379                 if (name) return "¼Ù°­Èô¤Ð¤·";
8380                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼1ÂΤò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8381 #else
8382                 if (name) return "Scatter Evil";
8383                 if (desc) return "Attempts to teleport an evil monster away.";
8384 #endif
8385     
8386                 {
8387                         int power = MAX_SIGHT * 5;
8388
8389                         if (info) return info_power(power);
8390
8391                         if (cast)
8392                         {
8393                                 if (!get_aim_dir(&dir)) return NULL;
8394                                 fire_ball(GF_AWAY_EVIL, dir, power, 0);
8395                         }
8396                 }
8397                 break;
8398
8399         case 9:
8400 #ifdef JP
8401                 if (name) return "À»¤Ê¤ë¸÷µå";
8402                 if (desc) return "À»¤Ê¤ëÎϤò¤â¤ÄÊõ¼î¤òÊü¤Ä¡£¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤¬¡¢Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡£";
8403 #else
8404                 if (name) return "Holy Orb";
8405                 if (desc) return "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good monsters.";
8406 #endif
8407     
8408                 {
8409                         int dice = 3;
8410                         int sides = 6;
8411                         int rad = (plev < 30) ? 2 : 3;
8412                         int base;
8413
8414                         if (p_ptr->pclass == CLASS_PRIEST ||
8415                             p_ptr->pclass == CLASS_HIGH_MAGE ||
8416                             p_ptr->pclass == CLASS_SORCERER)
8417                                 base = plev + plev / 2;
8418                         else
8419                                 base = plev + plev / 4;
8420
8421
8422                         if (info) return info_damage(dice, sides, base);
8423
8424                         if (cast)
8425                         {
8426                                 if (!get_aim_dir(&dir)) return NULL;
8427
8428                                 fire_ball(GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);
8429                         }
8430                 }
8431                 break;
8432
8433         case 10:
8434 #ifdef JP
8435                 if (name) return "°­Ëâʧ¤¤";
8436                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥ÉµÚ¤Ó°­Ëâ¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£";
8437 #else
8438                 if (name) return "Exorcism";
8439                 if (desc) return "Damages all undead and demons in sight, and scares all evil monsters in sight.";
8440 #endif
8441     
8442                 {
8443                         int sides = plev;
8444                         int power = plev;
8445
8446                         if (info) return info_damage(1, sides, 0);
8447
8448                         if (cast)
8449                         {
8450                                 dispel_undead(randint1(sides));
8451                                 dispel_demons(randint1(sides));
8452                                 turn_evil(power);
8453                         }
8454                 }
8455                 break;
8456
8457         case 11:
8458 #ifdef JP
8459                 if (name) return "²ò¼ö";
8460                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
8461 #else
8462                 if (name) return "Remove Curse";
8463                 if (desc) return "Removes normal curses from equipped items.";
8464 #endif
8465     
8466                 {
8467                         if (cast)
8468                         {
8469                                 if (remove_curse())
8470                                 {
8471 #ifdef JP
8472                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
8473 #else
8474                                         msg_print("You feel as if someone is watching over you.");
8475 #endif
8476                                 }
8477                         }
8478                 }
8479                 break;
8480
8481         case 12:
8482 #ifdef JP
8483                 if (name) return "Æ©ÌÀ»ëǧ";
8484                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
8485 #else
8486                 if (name) return "Sense Unseen";
8487                 if (desc) return "Gives see invisible for a while.";
8488 #endif
8489     
8490                 {
8491                         int base = 24;
8492
8493                         if (info) return info_duration(base, base);
8494
8495                         if (cast)
8496                         {
8497                                 set_tim_invis(randint1(base) + base, FALSE);
8498                         }
8499                 }
8500                 break;
8501
8502         case 13:
8503 #ifdef JP
8504                 if (name) return "Âмٰ­·ë³¦";
8505                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Î¹¶·â¤òËɤ°¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
8506 #else
8507                 if (name) return "Protection from Evil";
8508                 if (desc) return "Gives aura which protect you from evil monster's physical attack.";
8509 #endif
8510     
8511                 {
8512                         int base = 25;
8513                         int sides = 3 * plev;
8514
8515                         if (info) return info_duration(base, sides);
8516
8517                         if (cast)
8518                         {
8519                                 set_protevil(randint1(sides) + sides, FALSE);
8520                         }
8521                 }
8522                 break;
8523
8524         case 14:
8525 #ifdef JP
8526                 if (name) return "ºÛ¤­¤ÎÍë";
8527                 if (desc) return "¶¯ÎϤÊÅÅ·â¤Î¥Ü¥ë¥È¤òÊü¤Ä¡£";
8528 #else
8529                 if (name) return "Judgment Thunder";
8530                 if (desc) return "Fires a powerful bolt of lightning.";
8531 #endif
8532     
8533                 {
8534                         int dam = plev * 5;
8535
8536                         if (info) return info_damage(0, 0, dam);
8537
8538                         if (cast)
8539                         {
8540                                 if (!get_aim_dir(&dir)) return NULL;
8541                                 fire_bolt(GF_ELEC, dir, dam);
8542                         }
8543                 }
8544                 break;
8545
8546         case 15:
8547 #ifdef JP
8548                 if (name) return "À»¤Ê¤ë¸æ¸ÀÍÕ";
8549                 if (desc) return "»ë³¦Æâ¤Î¼Ù°­¤Ê¸ºß¤ËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢ÂÎÎϤò²óÉü¤·¡¢ÆÇ¡¢¶²ÉÝ¡¢Û¯Û°¾õÂÖ¡¢Éé½ý¤«¤éÁ´²÷¤¹¤ë¡£";
8550 #else
8551                 if (name) return "Holy Word";
8552                 if (desc) return "Damages all evil monsters in sight, heals HP somewhat, and completely heals poison, fear, stun and cut status.";
8553 #endif
8554     
8555                 {
8556                         int dam_sides = plev * 6;
8557                         int heal = 100;
8558
8559 #ifdef JP
8560                         if (info) return format("»:1d%d/²ó%d", dam_sides, heal);
8561 #else
8562                         if (info) return format("dam:d%d/h%d", dam_sides, heal);
8563 #endif
8564
8565                         if (cast)
8566                         {
8567                                 dispel_evil(randint1(dam_sides));
8568                                 hp_player(heal);
8569                                 set_afraid(0);
8570                                 set_poisoned(0);
8571                                 set_stun(0);
8572                                 set_cut(0);
8573                         }
8574                 }
8575                 break;
8576
8577         case 16:
8578 #ifdef JP
8579                 if (name) return "³«¤«¤ì¤¿Æ»";
8580                 if (desc) return "°ìľÀþ¾å¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
8581 #else
8582                 if (name) return "Unbarring Ways";
8583                 if (desc) return "Fires a beam which destroy traps and doors.";
8584 #endif
8585     
8586                 {
8587                         if (cast)
8588                         {
8589                                 if (!get_aim_dir(&dir)) return NULL;
8590
8591                                 destroy_door(dir);
8592                         }
8593                 }
8594                 break;
8595
8596         case 17:
8597 #ifdef JP
8598                 if (name) return "ÉõËâ";
8599                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ÎÆ°¤­¤ò»ß¤á¤ë¡£";
8600 #else
8601                 if (name) return "Arrest";
8602                 if (desc) return "Attempts to paralyze an evil monster.";
8603 #endif
8604     
8605                 {
8606                         int power = plev * 2;
8607
8608                         if (info) return info_power(power);
8609
8610                         if (cast)
8611                         {
8612                                 if (!get_aim_dir(&dir)) return NULL;
8613                                 stasis_evil(dir);
8614                         }
8615                 }
8616                 break;
8617
8618         case 18:
8619 #ifdef JP
8620                 if (name) return "À»¤Ê¤ë¥ª¡¼¥é";
8621                 if (desc) return "°ìÄê»þ´Ö¡¢¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò½ý¤Ä¤±¤ëÀ»¤Ê¤ë¥ª¡¼¥é¤òÆÀ¤ë¡£";
8622 #else
8623                 if (name) return "Holy Aura";
8624                 if (desc) return "Gives aura of holy power which injures evil monsters which attacked you for a while.";
8625 #endif
8626     
8627                 {
8628                         int base = 20;
8629
8630                         if (info) return info_duration(base, base);
8631
8632                         if (cast)
8633                         {
8634                                 set_tim_sh_holy(randint1(base) + base, FALSE);
8635                         }
8636                 }
8637                 break;
8638
8639         case 19:
8640 #ifdef JP
8641                 if (name) return "¥¢¥ó¥Ç¥Ã¥É&°­ËâÂ໶";
8642                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥ÉµÚ¤Ó°­Ëâ¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8643 #else
8644                 if (name) return "Dispel Undead & Demons";
8645                 if (desc) return "Damages all undead and demons in sight.";
8646 #endif
8647     
8648                 {
8649                         int sides = plev * 4;
8650
8651                         if (info) return info_damage(1, sides, 0);
8652
8653                         if (cast)
8654                         {
8655                                 dispel_undead(randint1(sides));
8656                                 dispel_demons(randint1(sides));
8657                         }
8658                 }
8659                 break;
8660
8661         case 20:
8662 #ifdef JP
8663                 if (name) return "¼Ù°­Â໶";
8664                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8665 #else
8666                 if (name) return "Dispel Evil";
8667                 if (desc) return "Damages all evil monsters in sight.";
8668 #endif
8669     
8670                 {
8671                         int sides = plev * 4;
8672
8673                         if (info) return info_damage(1, sides, 0);
8674
8675                         if (cast)
8676                         {
8677                                 dispel_evil(randint1(sides));
8678                         }
8679                 }
8680                 break;
8681
8682         case 21:
8683 #ifdef JP
8684                 if (name) return "À»¤Ê¤ë¿Ï";
8685                 if (desc) return "Ä̾ï¤ÎÉð´ï¤ËÌǼ٤ΰÀ­¤ò¤Ä¤±¤ë¡£";
8686 #else
8687                 if (name) return "Holy Blade";
8688                 if (desc) return "Makes current weapon especially deadly against evil monsters.";
8689 #endif
8690     
8691                 {
8692                         if (cast)
8693                         {
8694                                 brand_weapon(13);
8695                         }
8696                 }
8697                 break;
8698
8699         case 22:
8700 #ifdef JP
8701                 if (name) return "¥¹¥¿¡¼¥Ð¡¼¥¹¥È";
8702                 if (desc) return "µðÂç¤ÊÁ®¸÷¤Îµå¤òÊü¤Ä¡£";
8703 #else
8704                 if (name) return "Star Burst";
8705                 if (desc) return "Fires a huge ball of powerful light.";
8706 #endif
8707     
8708                 {
8709                         int dam = 100 + plev * 2;
8710                         int rad = 4;
8711
8712                         if (info) return info_damage(0, 0, dam);
8713
8714                         if (cast)
8715                         {
8716                                 if (!get_aim_dir(&dir)) return NULL;
8717
8718                                 fire_ball(GF_LITE, dir, dam, rad);
8719                         }
8720                 }
8721                 break;
8722
8723         case 23:
8724 #ifdef JP
8725                 if (name) return "Å·»È¾¤´­";
8726                 if (desc) return "Å·»È¤ò1Âξ¤´­¤¹¤ë¡£";
8727 #else
8728                 if (name) return "Summon Angel";
8729                 if (desc) return "Summons an angel.";
8730 #endif
8731     
8732                 {
8733                         if (cast)
8734                         {
8735                                 bool pet = !one_in_(3);
8736                                 u32b mode = 0L;
8737
8738                                 if (pet) mode |= PM_FORCE_PET;
8739                                 else mode |= PM_NO_PET;
8740                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
8741
8742                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_ANGEL, mode))
8743                                 {
8744                                         if (pet)
8745                                         {
8746 #ifdef JP
8747                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
8748 #else
8749                                                 msg_print("'What is thy bidding... Master?'");
8750 #endif
8751                                         }
8752                                         else
8753                                         {
8754 #ifdef JP
8755                                                 msg_print("¡Ö²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª °­¹Ô¼Ô¤è¡¢²ù¤¤²þ¤á¤è¡ª¡×");
8756 #else
8757                                                 msg_print("Mortal! Repent of thy impiousness.");
8758 #endif
8759                                         }
8760                                 }
8761                         }
8762                 }
8763                 break;
8764
8765         case 24:
8766 #ifdef JP
8767                 if (name) return "»Îµ¤¹âÍÈ";
8768                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
8769 #else
8770                 if (name) return "Heroism";
8771                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
8772 #endif
8773     
8774                 {
8775                         int base = 25;
8776
8777                         if (info) return info_duration(base, base);
8778
8779                         if (cast)
8780                         {
8781                                 set_hero(randint1(base) + base, FALSE);
8782                                 hp_player(10);
8783                                 set_afraid(0);
8784                         }
8785                 }
8786                 break;
8787
8788         case 25:
8789 #ifdef JP
8790                 if (name) return "¼ö¤¤Â໶";
8791                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
8792 #else
8793                 if (name) return "Dispel Curse";
8794                 if (desc) return "Removes normal and heavy curse from equipped items.";
8795 #endif
8796     
8797                 {
8798                         if (cast)
8799                         {
8800                                 if (remove_all_curse())
8801                                 {
8802 #ifdef JP
8803                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
8804 #else
8805                                         msg_print("You feel as if someone is watching over you.");
8806 #endif
8807                                 }
8808                         }
8809                 }
8810                 break;
8811
8812         case 26:
8813 #ifdef JP
8814                 if (name) return "¼Ù°­ÄÉÊü";
8815                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8816 #else
8817                 if (name) return "Banish Evil";
8818                 if (desc) return "Teleports all evil monsters in sight away unless resisted.";
8819 #endif
8820     
8821                 {
8822                         int power = 100;
8823
8824                         if (info) return info_power(power);
8825
8826                         if (cast)
8827                         {
8828                                 if (banish_evil(power))
8829                                 {
8830 #ifdef JP
8831                                         msg_print("¿ÀÀ»¤ÊÎϤ¬¼Ù°­¤òÂǤÁʧ¤Ã¤¿¡ª");
8832 #else
8833                                         msg_print("The holy power banishes evil!");
8834 #endif
8835
8836                                 }
8837                         }
8838                 }
8839                 break;
8840
8841         case 27:
8842 #ifdef JP
8843                 if (name) return "¥Ï¥ë¥Þ¥²¥É¥ó";
8844                 if (desc) return "¼þÊդΥ¢¥¤¥Æ¥à¡¢¥â¥ó¥¹¥¿¡¼¡¢ÃÏ·Á¤òÇ˲õ¤¹¤ë¡£";
8845 #else
8846                 if (name) return "Armageddon";
8847                 if (desc) return "Destroy everything in nearby area.";
8848 #endif
8849     
8850                 {
8851                         int base = 12;
8852                         int sides = 4;
8853
8854                         if (cast)
8855                         {
8856                                 destroy_area(py, px, base + randint1(sides), FALSE);
8857                         }
8858                 }
8859                 break;
8860
8861         case 28:
8862 #ifdef JP
8863                 if (name) return "ÌܤˤÏÌܤò";
8864                 if (desc) return "°ìÄê»þ´Ö¡¢¼«Ê¬¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤¿¤È¤­¤Ë¹¶·â¤ò¹Ô¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆƱÅù¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8865 #else
8866                 if (name) return "An Eye for an Eye";
8867                 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.";
8868 #endif
8869     
8870                 {
8871                         int base = 10;
8872
8873                         if (info) return info_duration(base, base);
8874
8875                         if (cast)
8876                         {
8877                                 set_tim_eyeeye(randint1(base) + base, FALSE);
8878                         }
8879                 }
8880                 break;
8881
8882         case 29:
8883 #ifdef JP
8884                 if (name) return "¿À¤ÎÅܤê";
8885                 if (desc) return "¥¿¡¼¥²¥Ã¥È¤Î¼þ°Ï¤Ëʬ²ò¤Îµå¤ò¿¿ôÍî¤È¤¹¡£";
8886 #else
8887                 if (name) return "Wrath of the God";
8888                 if (desc) return "Drops many balls of disintegration near the target.";
8889 #endif
8890     
8891                 {
8892                         int dam = plev * 3 + 25;
8893                         int rad = 2;
8894
8895                         if (info) return info_multi_damage(dam);
8896
8897                         if (cast)
8898                         {
8899                                 if (!cast_wrath_of_the_god(dam, rad)) return NULL;
8900                         }
8901                 }
8902                 break;
8903
8904         case 30:
8905 #ifdef JP
8906                 if (name) return "¿À°Ò";
8907                 if (desc) return "ÎÙÀܤ¹¤ë¥â¥ó¥¹¥¿¡¼¤ËÀ»¤Ê¤ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¡¢¸ºÂ®¡¢Û¯Û°¡¢º®Í𡢶²ÉÝ¡¢Ì²¤ê¤òÍ¿¤¨¤ë¡£¤µ¤é¤ËÂÎÎϤò²óÉü¤¹¤ë¡£";
8908 #else
8909                 if (name) return "Divine Intervention";
8910                 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.";
8911 #endif
8912     
8913                 {
8914                         int b_dam = plev * 11;
8915                         int d_dam = plev * 4;
8916                         int heal = 100;
8917                         int power = plev * 4;
8918
8919 #ifdef JP
8920                         if (info) return format("²ó%d/»%d+%d", heal, d_dam, b_dam/2);
8921 #else
8922                         if (info) return format("h%d/dm%d+%d", heal, d_dam, b_dam/2);
8923 #endif
8924
8925                         if (cast)
8926                         {
8927                                 project(0, 1, py, px, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
8928                                 dispel_monsters(d_dam);
8929                                 slow_monsters(plev);
8930                                 stun_monsters(power);
8931                                 confuse_monsters(power);
8932                                 turn_monsters(power);
8933                                 stasis_monsters(power);
8934                                 hp_player(heal);
8935                         }
8936                 }
8937                 break;
8938
8939         case 31:
8940 #ifdef JP
8941                 if (name) return "À»Àï";
8942                 if (desc) return "»ë³¦Æâ¤ÎÁ±Îɤʥâ¥ó¥¹¥¿¡¼¤ò¥Ú¥Ã¥È¤Ë¤·¤è¤¦¤È¤·¡¢¤Ê¤é¤Ê¤«¤Ã¤¿¾ì¹çµÚ¤ÓÁ±ÎɤǤʤ¤¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£¤µ¤é¤Ë¿¿ô¤Î²Ã®¤µ¤ì¤¿µ³»Î¤ò¾¤´­¤·¡¢¥Ò¡¼¥í¡¼¡¢½ËÊ¡¡¢²Ã®¡¢Âмٰ­·ë³¦¤òÆÀ¤ë¡£";
8943 #else
8944                 if (name) return "Crusade";
8945                 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.";
8946 #endif
8947     
8948                 {
8949                         if (cast)
8950                         {
8951                                 int base = 25;
8952                                 int sp_sides = 20 + plev;
8953                                 int sp_base = plev;
8954
8955                                 int i;
8956                                 crusade();
8957                                 for (i = 0; i < 12; i++)
8958                                 {
8959                                         int attempt = 10;
8960                                         int my, mx;
8961
8962                                         while (attempt--)
8963                                         {
8964                                                 scatter(&my, &mx, py, px, 4, 0);
8965
8966                                                 /* Require empty grids */
8967                                                 if (cave_empty_bold2(my, mx)) break;
8968                                         }
8969                                         if (attempt < 0) continue;
8970                                         summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
8971                                 }
8972                                 set_hero(randint1(base) + base, FALSE);
8973                                 set_blessed(randint1(base) + base, FALSE);
8974                                 set_fast(randint1(sp_sides) + sp_base, FALSE);
8975                                 set_protevil(randint1(base) + base, FALSE);
8976                                 set_afraid(0);
8977                         }
8978                 }
8979                 break;
8980         }
8981
8982         return "";
8983 }
8984
8985
8986 static cptr do_music_spell(int spell, int mode)
8987 {
8988         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
8989         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
8990         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
8991         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
8992         bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
8993         bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
8994         bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
8995
8996 #ifdef JP
8997         static const char s_dam[] = "»½ý:";
8998 #else
8999         static const char s_dam[] = "dam ";
9000 #endif
9001
9002         int dir;
9003         int plev = p_ptr->lev;
9004
9005         switch (spell)
9006         {
9007         case 0:
9008 #ifdef JP
9009                 if (name) return "ÃÙÆߤβÎ";
9010                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9011 #else
9012                 if (name) return "Song of Holding";
9013                 if (desc) return "Attempts to slow all monsters in sight.";
9014 #endif
9015     
9016                 /* Stop singing before start another */
9017                 if (cast || fail) stop_singing();
9018
9019                 if (cast)
9020                 {
9021 #ifdef JP
9022                         msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
9023 #else
9024                         msg_print("You start humming a slow, steady melody...");
9025 #endif
9026                         start_singing(spell, MUSIC_SLOW);
9027                 }
9028
9029                 {
9030                         int power = plev;
9031
9032                         if (info) return info_power(power);
9033
9034                         if (cont)
9035                         {
9036                                 slow_monsters(plev);
9037                         }
9038                 }
9039                 break;
9040
9041         case 1:
9042 #ifdef JP
9043                 if (name) return "½ËÊ¡¤Î²Î";
9044                 if (desc) return "Ì¿ÃæΨ¤ÈAC¤Î¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
9045 #else
9046                 if (name) return "Song of Blessing";
9047                 if (desc) return "Gives bonus to hit and AC for a few turns.";
9048 #endif
9049     
9050                 /* Stop singing before start another */
9051                 if (cast || fail) stop_singing();
9052
9053                 if (cast)
9054                 {
9055 #ifdef JP
9056                         msg_print("¸·¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9057 #else
9058                         msg_print("The holy power of the Music of the Ainur enters you...");
9059 #endif
9060                         start_singing(spell, MUSIC_BLESS);
9061                 }
9062
9063                 if (stop)
9064                 {
9065                         if (!p_ptr->blessed)
9066                         {
9067 #ifdef JP
9068                                 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9069 #else
9070                                 msg_print("The prayer has expired.");
9071 #endif
9072                         }
9073                 }
9074
9075                 break;
9076
9077         case 2:
9078 #ifdef JP
9079                 if (name) return "Êø²õ¤Î²»¿§";
9080                 if (desc) return "¹ì²»¤Î¥Ü¥ë¥È¤òÊü¤Ä¡£";
9081 #else
9082                 if (name) return "Wrecking Note";
9083                 if (desc) return "Fires a bolt of sound.";
9084 #endif
9085     
9086                 /* Stop singing before start another */
9087                 if (cast || fail) stop_singing();
9088
9089                 {
9090                         int dice = 4 + (plev - 1) / 5;
9091                         int sides = 4;
9092
9093                         if (info) return info_damage(dice, sides, 0);
9094
9095                         if (cast)
9096                         {
9097                                 if (!get_aim_dir(&dir)) return NULL;
9098
9099                                 fire_bolt(GF_SOUND, dir, damroll(dice, sides));
9100                         }
9101                 }
9102                 break;
9103
9104         case 3:
9105 #ifdef JP
9106                 if (name) return "Û¯Û°¤ÎÀûΧ";
9107                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òÛ¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9108 #else
9109                 if (name) return "Stun Pattern";
9110                 if (desc) return "Attempts to stun all monsters in sight.";
9111 #endif
9112     
9113                 /* Stop singing before start another */
9114                 if (cast || fail) stop_singing();
9115
9116                 if (cast)
9117                 {
9118 #ifdef JP
9119                         msg_print("âÁÏǤµ¤»¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9120 #else
9121                         msg_print("You weave a pattern of sounds to bewilder and daze...");
9122 #endif
9123                         start_singing(spell, MUSIC_STUN);
9124                 }
9125
9126                 {
9127                         int dice = plev / 10;
9128                         int sides = 2;
9129
9130                         if (info) return info_power_dice(dice, sides);
9131
9132                         if (cont)
9133                         {
9134                                 stun_monsters(damroll(dice, sides));
9135                         }
9136                 }
9137
9138                 break;
9139
9140         case 4:
9141 #ifdef JP
9142                 if (name) return "À¸Ì¿¤Îή¤ì";
9143                 if (desc) return "ÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
9144 #else
9145                 if (name) return "Flow of Life";
9146                 if (desc) return "Heals HP a little.";
9147 #endif
9148     
9149                 /* Stop singing before start another */
9150                 if (cast || fail) stop_singing();
9151
9152                 if (cast)
9153                 {
9154 #ifdef JP
9155                         msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤­¤¿¡¥¡¥¡¥");
9156 #else
9157                         msg_print("Life flows through you as you sing a song of healing...");
9158 #endif
9159                         start_singing(spell, MUSIC_L_LIFE);
9160                 }
9161
9162                 {
9163                         int dice = 2;
9164                         int sides = 6;
9165
9166                         if (info) return info_heal(dice, sides, 0);
9167
9168                         if (cont)
9169                         {
9170                                 hp_player(damroll(dice, sides));
9171                         }
9172                 }
9173
9174                 break;
9175
9176         case 5:
9177 #ifdef JP
9178                 if (name) return "ÂÀÍۤβÎ";
9179                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
9180 #else
9181                 if (name) return "Song of the Sun";
9182                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
9183 #endif
9184     
9185                 /* Stop singing before start another */
9186                 if (cast || fail) stop_singing();
9187
9188                 {
9189                         int dice = 2;
9190                         int sides = plev / 2;
9191                         int rad = plev / 10 + 1;
9192
9193                         if (info) return info_damage(dice, sides, 0);
9194
9195                         if (cast)
9196                         {
9197 #ifdef JP
9198                                 msg_print("¸÷¤êµ±¤¯²Î¤¬ÊÕ¤ê¤ò¾È¤é¤·¤¿¡£");
9199 #else
9200                                 msg_print("Your uplifting song brings brightness to dark places...");
9201 #endif
9202
9203                                 lite_area(damroll(dice, sides), rad);
9204                         }
9205                 }
9206                 break;
9207
9208         case 6:
9209 #ifdef JP
9210                 if (name) return "¶²ÉݤβÎ";
9211                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9212 #else
9213                 if (name) return "Song of Fear";
9214                 if (desc) return "Attempts to scare all monsters in sight.";
9215 #endif
9216     
9217                 /* Stop singing before start another */
9218                 if (cast || fail) stop_singing();
9219
9220                 if (cast)
9221                 {
9222 #ifdef JP
9223                         msg_print("¤ª¤É¤í¤ª¤É¤í¤·¤¤¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9224 #else
9225                         msg_print("You start weaving a fearful pattern...");
9226 #endif
9227                         start_singing(spell, MUSIC_FEAR);                       
9228                 }
9229
9230                 {
9231                         int power = plev;
9232
9233                         if (info) return info_power(power);
9234
9235                         if (cont)
9236                         {
9237                                 project_hack(GF_TURN_ALL, power);
9238                         }
9239                 }
9240
9241                 break;
9242
9243         case 7:
9244 #ifdef JP
9245                 if (name) return "À襤¤Î²Î";
9246                 if (desc) return "¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
9247 #else
9248                 if (name) return "Heroic Ballad";
9249                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
9250 #endif
9251
9252                 /* Stop singing before start another */
9253                 if (cast || fail) stop_singing();
9254
9255                 if (cast)
9256                 {
9257 #ifdef JP
9258                         msg_print("·ã¤·¤¤À襤¤Î²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
9259 #else
9260                         msg_print("You start singing a song of intense fighting...");
9261 #endif
9262
9263                         (void)hp_player(10);
9264                         (void)set_afraid(0);
9265
9266                         /* Recalculate hitpoints */
9267                         p_ptr->update |= (PU_HP);
9268
9269                         start_singing(spell, MUSIC_HERO);
9270                 }
9271
9272                 if (stop)
9273                 {
9274                         if (!p_ptr->hero)
9275                         {
9276 #ifdef JP
9277                                 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9278 #else
9279                                 msg_print("The heroism wears off.");
9280 #endif
9281                                 /* Recalculate hitpoints */
9282                                 p_ptr->update |= (PU_HP);
9283                         }
9284                 }
9285
9286                 break;
9287
9288         case 8:
9289 #ifdef JP
9290                 if (name) return "ÎîŪÃγÐ";
9291                 if (desc) return "¶á¤¯¤Îæ«/Èâ/³¬Ãʤò´¶ÃΤ¹¤ë¡£¥ì¥Ù¥ë15¤ÇÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢20¤ÇºâÊõ¤È¥¢¥¤¥Æ¥à¤ò´¶ÃΤǤ­¤ë¤è¤¦¤Ë¤Ê¤ë¡£¥ì¥Ù¥ë25¤Ç¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ·¡¢40¤Ç¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆâ¤Î¤¹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤³¤Î¸ú²Ì¤Ï²Î¤¤Â³¤±¤ë¤³¤È¤Ç½ç¤Ëµ¯¤³¤ë¡£";
9292 #else
9293                 if (name) return "Clairaudience";
9294                 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.";
9295 #endif
9296     
9297                 /* Stop singing before start another */
9298                 if (cast || fail) stop_singing();
9299
9300                 if (cast)
9301                 {
9302 #ifdef JP
9303                         msg_print("ÀŤ«¤Ê²»³Ú¤¬´¶³Ð¤ò¸¦¤®À¡¤Þ¤µ¤»¤¿¡¥¡¥¡¥");
9304 #else
9305                         msg_print("Your quiet music sharpens your sense of hearing...");
9306 #endif
9307
9308                         /* Hack -- Initialize the turn count */
9309                         p_ptr->magic_num1[2] = 0;
9310
9311                         start_singing(spell, MUSIC_DETECT);
9312                 }
9313
9314                 {
9315                         int rad = DETECT_RAD_DEFAULT;
9316
9317                         if (info) return info_radius(rad);
9318
9319                         if (cont)
9320                         {
9321                                 int count = p_ptr->magic_num1[2];
9322
9323                                 if (count >= 19) wiz_lite(FALSE);
9324                                 if (count >= 11)
9325                                 {
9326                                         map_area(rad);
9327                                         if (plev > 39 && count < 19)
9328                                                 p_ptr->magic_num1[2] = count + 1;
9329                                 }
9330                                 if (count >= 6)
9331                                 {
9332                                         /* There are too many hidden treasure.  So... */
9333                                         /* detect_treasure(rad); */
9334                                         detect_objects_gold(rad);
9335                                         detect_objects_normal(rad);
9336
9337                                         if (plev > 24 && count < 11)
9338                                                 p_ptr->magic_num1[2] = count + 1;
9339                                 }
9340                                 if (count >= 3)
9341                                 {
9342                                         detect_monsters_invis(rad);
9343                                         detect_monsters_normal(rad);
9344
9345                                         if (plev > 19 && count < 6)
9346                                                 p_ptr->magic_num1[2] = count + 1;
9347                                 }
9348                                 detect_traps(rad, TRUE);
9349                                 detect_doors(rad);
9350                                 detect_stairs(rad);
9351
9352                                 if (plev > 14 && count < 3)
9353                                         p_ptr->magic_num1[2] = count + 1;
9354                         }
9355                 }
9356
9357                 break;
9358
9359         case 9:
9360 #ifdef JP
9361                 if (name) return "º²¤Î²Î";
9362                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆÀº¿À¹¶·â¤ò¹Ô¤¦¡£";
9363 #else
9364                 if (name) return "Soul Shriek";
9365                 if (desc) return "Damages all monsters in sight with PSI damages.";
9366 #endif
9367
9368                 /* Stop singing before start another */
9369                 if (cast || fail) stop_singing();
9370
9371                 if (cast)
9372                 {
9373 #ifdef JP
9374                         msg_print("Àº¿À¤òDZ¤¸¶Ê¤²¤ë²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
9375 #else
9376                         msg_print("You start singing a song of soul in pain...");
9377 #endif
9378                         start_singing(spell, MUSIC_PSI);
9379                 }
9380
9381                 {
9382                         int dice = 1;
9383                         int sides = plev * 3 / 2;
9384
9385                         if (info) return info_damage(dice, sides, 0);
9386
9387                         if (cont)
9388                         {
9389                                 project_hack(GF_PSI, damroll(dice, sides));
9390                         }
9391                 }
9392
9393                 break;
9394
9395         case 10:
9396 #ifdef JP
9397                 if (name) return "Ãμ±¤Î²Î";
9398                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¥Þ¥¹¤ÈÎÙ¤ê¤Î¥Þ¥¹¤ËÍî¤Á¤Æ¤¤¤ë¥¢¥¤¥Æ¥à¤ò´ÕÄꤹ¤ë¡£";
9399 #else
9400                 if (name) return "Song of Lore";
9401                 if (desc) return "Identifies all items which are in the adjacent squares.";
9402 #endif
9403     
9404                 /* Stop singing before start another */
9405                 if (cast || fail) stop_singing();
9406
9407                 if (cast)
9408                 {
9409 #ifdef JP
9410                         msg_print("¤³¤ÎÀ¤³¦¤ÎÃ챤¬Î®¤ì¹þ¤ó¤Ç¤­¤¿¡¥¡¥¡¥");
9411 #else
9412                         msg_print("You recall the rich lore of the world...");
9413 #endif
9414                         start_singing(spell, MUSIC_ID);
9415                 }
9416
9417                 {
9418                         int rad = 1;
9419
9420                         if (info) return info_radius(rad);
9421
9422                         /*
9423                          * ²Î¤Î³«»Ï»þ¤Ë¤â¸ú²Ìȯư¡§
9424                          * MPÉÔ­¤Ç´ÕÄ꤬ȯư¤µ¤ì¤ëÁ°¤Ë²Î¤¬ÃæÃǤ·¤Æ¤·¤Þ¤¦¤Î¤òËɻߡ£
9425                          */
9426                         if (cont || cast)
9427                         {
9428                                 project(0, rad, py, px, 0, GF_IDENTIFY, PROJECT_ITEM, -1);
9429                         }
9430                 }
9431
9432                 break;
9433
9434         case 11:
9435 #ifdef JP
9436                 if (name) return "±£ÆۤβÎ";
9437                 if (desc) return "±£Ì©¹ÔưǽÎϤò¾å¾º¤µ¤»¤ë¡£";
9438 #else
9439                 if (name) return "Hiding Tune";
9440                 if (desc) return "Gives improved stealth.";
9441 #endif
9442
9443                 /* Stop singing before start another */
9444                 if (cast || fail) stop_singing();
9445
9446                 if (cast)
9447                 {
9448 #ifdef JP
9449                         msg_print("¤¢¤Ê¤¿¤Î»Ñ¤¬·Ê¿§¤Ë¤È¤±¤³¤ó¤Ç¤¤¤Ã¤¿¡¥¡¥¡¥");
9450 #else
9451                         msg_print("Your song carries you beyond the sight of mortal eyes...");
9452 #endif
9453                         start_singing(spell, MUSIC_STEALTH);
9454                 }
9455
9456                 if (stop)
9457                 {
9458                         if (!p_ptr->tim_stealth)
9459                         {
9460 #ifdef JP
9461                                 msg_print("»Ñ¤¬¤Ï¤Ã¤­¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
9462 #else
9463                                 msg_print("You are no longer hided.");
9464 #endif
9465                         }
9466                 }
9467
9468                 break;
9469
9470         case 12:
9471 #ifdef JP
9472                 if (name) return "¸¸±Æ¤ÎÀûΧ";
9473                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òº®Í𤵤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9474 #else
9475                 if (name) return "Illusion Pattern";
9476                 if (desc) return "Attempts to confuse all monsters in sight.";
9477 #endif
9478     
9479                 /* Stop singing before start another */
9480                 if (cast || fail) stop_singing();
9481
9482                 if (cast)
9483                 {
9484 #ifdef JP
9485                         msg_print("ÊÕ¤ê°ìÌ̤˸¸±Æ¤¬¸½¤ì¤¿¡¥¡¥¡¥");
9486 #else
9487                         msg_print("You weave a pattern of sounds to beguile and confuse...");
9488 #endif
9489                         start_singing(spell, MUSIC_CONF);
9490                 }
9491
9492                 {
9493                         int power = plev * 2;
9494
9495                         if (info) return info_power(power);
9496
9497                         if (cont)
9498                         {
9499                                 confuse_monsters(power);
9500                         }
9501                 }
9502
9503                 break;
9504
9505         case 13:
9506 #ifdef JP
9507                 if (name) return "ÇËÌǤ櫤Ó";
9508                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤Æ¹ì²»¹¶·â¤ò¹Ô¤¦¡£";
9509 #else
9510                 if (name) return "Doomcall";
9511                 if (desc) return "Damages all monsters in sight with booming sound.";
9512 #endif
9513     
9514                 /* Stop singing before start another */
9515                 if (cast || fail) stop_singing();
9516
9517                 if (cast)
9518                 {
9519 #ifdef JP
9520                         msg_print("¹ì²»¤¬¶Á¤¤¤¿¡¥¡¥¡¥");
9521 #else
9522                         msg_print("The fury of the Downfall of Numenor lashes out...");
9523 #endif
9524                         start_singing(spell, MUSIC_SOUND);
9525                 }
9526
9527                 {
9528                         int dice = 10 + plev / 5;
9529                         int sides = 7;
9530
9531                         if (info) return info_damage(dice, sides, 0);
9532
9533                         if (cont)
9534                         {
9535                                 project_hack(GF_SOUND, damroll(dice, sides));
9536                         }
9537                 }
9538
9539                 break;
9540
9541         case 14:
9542 #ifdef JP
9543                 if (name) return "¥Õ¥£¥ê¥¨¥ë¤Î²Î";
9544                 if (desc) return "¼þ°Ï¤Î»àÂΤä¹ü¤òÀ¸¤­ÊÖ¤¹¡£";
9545 #else
9546                 if (name) return "Firiel's Song";
9547                 if (desc) return "Resurrects nearby corpse and skeletons. And makes these your pets.";
9548 #endif
9549     
9550                 {
9551                         /* Stop singing before start another */
9552                         if (cast || fail) stop_singing();
9553
9554                         if (cast)
9555                         {
9556 #ifdef JP
9557                                 msg_print("À¸Ì¿¤ÈÉü³è¤Î¥Æ¡¼¥Þ¤òÁդǻϤ᤿¡¥¡¥¡¥");
9558 #else
9559                                 msg_print("The themes of life and revival are woven into your song...");
9560 #endif
9561
9562                                 animate_dead(0, py, px);
9563                         }
9564                 }
9565                 break;
9566
9567         case 15:
9568 #ifdef JP
9569                 if (name) return "ι¤ÎÃç´Ö";
9570                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9571 #else
9572                 if (name) return "Fellowship Chant";
9573                 if (desc) return "Attempts to charm all monsters in sight.";
9574 #endif
9575
9576                 /* Stop singing before start another */
9577                 if (cast || fail) stop_singing();
9578
9579                 if (cast)
9580                 {
9581 #ifdef JP
9582                         msg_print("°Â¤é¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9583 #else
9584                         msg_print("You weave a slow, soothing melody of imploration...");
9585 #endif
9586                         start_singing(spell, MUSIC_CHARM);
9587                 }
9588
9589                 {
9590                         int dice = 10 + plev / 15;
9591                         int sides = 6;
9592
9593                         if (info) return info_power_dice(dice, sides);
9594
9595                         if (cont)
9596                         {
9597                                 charm_monsters(damroll(dice, sides));
9598                         }
9599                 }
9600
9601                 break;
9602
9603         case 16:
9604 #ifdef JP
9605                 if (name) return "ʬ²ò²»ÇÈ";
9606                 if (desc) return "Êɤò·¡¤ê¿Ê¤à¡£¼«Ê¬¤Î­¸µ¤Î¥¢¥¤¥Æ¥à¤Ï¾øȯ¤¹¤ë¡£";
9607 #else
9608                 if (name) return "Sound of disintegration";
9609                 if (desc) return "Makes you be able to burrow into walls. Objects under your feet evaporate.";
9610 #endif
9611
9612                 /* Stop singing before start another */
9613                 if (cast || fail) stop_singing();
9614
9615                 if (cast)
9616                 {
9617 #ifdef JP
9618                         msg_print("Ê´ºÕ¤¹¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9619 #else
9620                         msg_print("You weave a violent pattern of sounds to break wall.");
9621 #endif
9622                         start_singing(spell, MUSIC_WALL);
9623                 }
9624
9625                 {
9626                         /*
9627                          * ²Î¤Î³«»Ï»þ¤Ë¤â¸ú²Ìȯư¡§
9628                          * MPÉÔ­¤Ç¸ú²Ì¤¬È¯Æ°¤µ¤ì¤ëÁ°¤Ë²Î¤¬ÃæÃǤ·¤Æ¤·¤Þ¤¦¤Î¤òËɻߡ£
9629                          */
9630                         if (cont || cast)
9631                         {
9632                                 project(0, 0, py, px,
9633                                         0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
9634                         }
9635                 }
9636                 break;
9637
9638         case 17:
9639 #ifdef JP
9640                 if (name) return "¸µÁÇÂÑÀ­";
9641                 if (desc) return "»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
9642 #else
9643                 if (name) return "Finrod's Resistance";
9644                 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.";
9645 #endif
9646     
9647                 /* Stop singing before start another */
9648                 if (cast || fail) stop_singing();
9649
9650                 if (cast)
9651                 {
9652 #ifdef JP
9653                         msg_print("¸µÁǤÎÎϤËÂФ¹¤ëǦÂѤβΤò²Î¤Ã¤¿¡£");
9654 #else
9655                         msg_print("You sing a song of perseverance against powers...");
9656 #endif
9657                         start_singing(spell, MUSIC_RESIST);
9658                 }
9659
9660                 if (stop)
9661                 {
9662                         if (!p_ptr->oppose_acid)
9663                         {
9664 #ifdef JP
9665                                 msg_print("»À¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9666 #else
9667                                 msg_print("You feel less resistant to acid.");
9668 #endif
9669                         }
9670
9671                         if (!p_ptr->oppose_elec)
9672                         {
9673 #ifdef JP
9674                                 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9675 #else
9676                                 msg_print("You feel less resistant to elec.");
9677 #endif
9678                         }
9679
9680                         if (!p_ptr->oppose_fire)
9681                         {
9682 #ifdef JP
9683                                 msg_print("²Ð¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9684 #else
9685                                 msg_print("You feel less resistant to fire.");
9686 #endif
9687                         }
9688
9689                         if (!p_ptr->oppose_cold)
9690                         {
9691 #ifdef JP
9692                                 msg_print("Î䵤¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9693 #else
9694                                 msg_print("You feel less resistant to cold.");
9695 #endif
9696                         }
9697
9698                         if (!p_ptr->oppose_pois)
9699                         {
9700 #ifdef JP
9701                                 msg_print("ÆǤؤÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9702 #else
9703                                 msg_print("You feel less resistant to pois.");
9704 #endif
9705                         }
9706                 }
9707
9708                 break;
9709
9710         case 18:
9711 #ifdef JP
9712                 if (name) return "¥Û¥Ó¥Ã¥È¤Î¥á¥í¥Ç¥£";
9713                 if (desc) return "²Ã®¤¹¤ë¡£";
9714 #else
9715                 if (name) return "Hobbit Melodies";
9716                 if (desc) return "Hastes you.";
9717 #endif
9718
9719                 /* Stop singing before start another */
9720                 if (cast || fail) stop_singing();
9721
9722                 if (cast)
9723                 {
9724 #ifdef JP
9725                         msg_print("·Ú²÷¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
9726 #else
9727                         msg_print("You start singing joyful pop song...");
9728 #endif
9729                         start_singing(spell, MUSIC_SPEED);
9730                 }
9731
9732                 if (stop)
9733                 {
9734                         if (!p_ptr->fast)
9735                         {
9736 #ifdef JP
9737                                 msg_print("Æ°¤­¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
9738 #else
9739                                 msg_print("You feel yourself slow down.");
9740 #endif
9741                         }
9742                 }
9743
9744                 break;
9745
9746         case 19:
9747 #ifdef JP
9748                 if (name) return "ÏĤó¤ÀÀ¤³¦";
9749                 if (desc) return "¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9750 #else
9751                 if (name) return "World Contortion";
9752                 if (desc) return "Teleports all nearby monsters away unless resisted.";
9753 #endif
9754     
9755                 {
9756                         int rad = plev / 15 + 1;
9757                         int power = plev * 3 + 1;
9758
9759                         if (info) return info_radius(rad);
9760
9761                         /* Stop singing before start another */
9762                         if (cast || fail) stop_singing();
9763
9764                         if (cast)
9765                         {
9766 #ifdef JP
9767                                 msg_print("²Î¤¬¶õ´Ö¤òÏĤ᤿¡¥¡¥¡¥");
9768 #else
9769                                 msg_print("Reality whirls wildly as you sing a dizzying melody...");
9770 #endif
9771
9772                                 project(0, rad, py, px, power, GF_AWAY_ALL, PROJECT_KILL, -1);
9773                         }
9774                 }
9775                 break;
9776
9777         case 20:
9778 #ifdef JP
9779                 if (name) return "Â໶¤Î²Î";
9780                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÆäËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
9781 #else
9782                 if (name) return "Dispelling chant";
9783                 if (desc) return "Damages all monsters in sight. Hurts evil monsters greatly.";
9784 #endif
9785     
9786                 /* Stop singing before start another */
9787                 if (cast || fail) stop_singing();
9788
9789                 if (cast)
9790                 {
9791 #ifdef JP
9792                         msg_print("ÂѤ¨¤é¤ì¤Ê¤¤ÉÔ¶¨Ï²»¤¬Å¨¤òÀÕ¤áΩ¤Æ¤¿¡¥¡¥¡¥");
9793 #else
9794                         msg_print("You cry out in an ear-wracking voice...");
9795 #endif
9796                         start_singing(spell, MUSIC_DISPEL);
9797                 }
9798
9799                 {
9800                         int m_sides = plev * 3;
9801                         int e_sides = plev * 3;
9802
9803                         if (info) return format("%s1d%d+1d%d", s_dam, m_sides, e_sides);
9804
9805                         if (cont)
9806                         {
9807                                 dispel_monsters(randint1(m_sides));
9808                                 dispel_evil(randint1(e_sides));
9809                         }
9810                 }
9811                 break;
9812
9813         case 21:
9814 #ifdef JP
9815                 if (name) return "¥µ¥ë¥Þ¥ó¤Î´Å¸À";
9816                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¡¢Ì²¤é¤»¤è¤¦¤È¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9817 #else
9818                 if (name) return "The Voice of Saruman";
9819                 if (desc) return "Attempts to slow and sleep all monsters in sight.";
9820 #endif
9821     
9822                 /* Stop singing before start another */
9823                 if (cast || fail) stop_singing();
9824
9825                 if (cast)
9826                 {
9827 #ifdef JP
9828                         msg_print("Í¥¤·¤¯¡¢Ì¥ÎÏŪ¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
9829 #else
9830                         msg_print("You start humming a gentle and attractive song...");
9831 #endif
9832                         start_singing(spell, MUSIC_SARUMAN);
9833                 }
9834
9835                 {
9836                         int power = plev;
9837
9838                         if (info) return info_power(power);
9839
9840                         if (cont)
9841                         {
9842                                 slow_monsters(plev);
9843                                 sleep_monsters(plev);
9844                         }
9845                 }
9846
9847                 break;
9848
9849         case 22:
9850 #ifdef JP
9851                 if (name) return "Íò¤Î²»¿§";
9852                 if (desc) return "¹ì²»¤Î¥Ó¡¼¥à¤òÊü¤Ä¡£";
9853 #else
9854                 if (name) return "Song of the Tempest";
9855                 if (desc) return "Fires a beam of sound.";
9856 #endif
9857     
9858                 {
9859                         int dice = 15 + (plev - 1) / 2;
9860                         int sides = 10;
9861
9862                         if (info) return info_damage(dice, sides, 0);
9863
9864                         /* Stop singing before start another */
9865                         if (cast || fail) stop_singing();
9866
9867                         if (cast)
9868                         {
9869                                 if (!get_aim_dir(&dir)) return NULL;
9870
9871                                 fire_beam(GF_SOUND, dir, damroll(dice, sides));
9872                         }
9873                 }
9874                 break;
9875
9876         case 23:
9877 #ifdef JP
9878                 if (name) return "¤â¤¦°ì¤Ä¤ÎÀ¤³¦";
9879                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
9880 #else
9881                 if (name) return "Ambarkanta";
9882                 if (desc) return "Recreates current dungeon level.";
9883 #endif
9884     
9885                 {
9886                         int base = 15;
9887                         int sides = 20;
9888
9889                         if (info) return info_delay(base, sides);
9890
9891                         /* Stop singing before start another */
9892                         if (cast || fail) stop_singing();
9893
9894                         if (cast)
9895                         {
9896 #ifdef JP
9897                                 msg_print("¼þ°Ï¤¬ÊѲ½¤·»Ï¤á¤¿¡¥¡¥¡¥");
9898 #else
9899                                 msg_print("You sing of the primeval shaping of Middle-earth...");
9900 #endif
9901
9902                                 alter_reality();
9903                         }
9904                 }
9905                 break;
9906
9907         case 24:
9908 #ifdef JP
9909                 if (name) return "Ç˲õ¤ÎÀûΧ";
9910                 if (desc) return "¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÍɤ餷¡¢ÊɤȾ²¤ò¥é¥ó¥À¥à¤ËÆþ¤ìÊѤ¨¤ë¡£";
9911 #else
9912                 if (name) return "Wrecking Pattern";
9913                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
9914 #endif
9915
9916                 /* Stop singing before start another */
9917                 if (cast || fail) stop_singing();
9918
9919                 if (cast)
9920                 {
9921 #ifdef JP
9922                         msg_print("Ç˲õŪ¤Ê²Î¤¬¶Á¤­¤ï¤¿¤Ã¤¿¡¥¡¥¡¥");
9923 #else
9924                         msg_print("You weave a pattern of sounds to contort and shatter...");
9925 #endif
9926                         start_singing(spell, MUSIC_QUAKE);
9927                 }
9928
9929                 {
9930                         int rad = 10;
9931
9932                         if (info) return info_radius(rad);
9933
9934                         if (cont)
9935                         {
9936                                 earthquake(py, px, 10);
9937                         }
9938                 }
9939
9940                 break;
9941
9942
9943         case 25:
9944 #ifdef JP
9945                 if (name) return "ÄäÂڤβÎ";
9946                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òËãá㤵¤»¤è¤¦¤È¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9947 #else
9948                 if (name) return "Stationary Shriek";
9949                 if (desc) return "Attempts to freeze all monsters in sight.";
9950 #endif
9951     
9952                 /* Stop singing before start another */
9953                 if (cast || fail) stop_singing();
9954
9955                 if (cast)
9956                 {
9957 #ifdef JP
9958                         msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9959 #else
9960                         msg_print("You weave a very slow pattern which is almost likely to stop...");
9961 #endif
9962                         start_singing(spell, MUSIC_STASIS);
9963                 }
9964
9965                 {
9966                         int power = plev * 4;
9967
9968                         if (info) return info_power(power);
9969
9970                         if (cont)
9971                         {
9972                                 stasis_monsters(power);
9973                         }
9974                 }
9975
9976                 break;
9977
9978         case 26:
9979 #ifdef JP
9980                 if (name) return "¼é¤ê¤Î²Î";
9981                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
9982 #else
9983                 if (name) return "Endurance";
9984                 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.";
9985 #endif
9986     
9987                 {
9988                         /* Stop singing before start another */
9989                         if (cast || fail) stop_singing();
9990
9991                         if (cast)
9992                         {
9993 #ifdef JP
9994                                 msg_print("²Î¤¬¿ÀÀ»¤Ê¾ì¤òºî¤ê½Ð¤·¤¿¡¥¡¥¡¥");
9995 #else
9996                                 msg_print("The holy power of the Music is creating sacred field...");
9997 #endif
9998
9999                                 warding_glyph();
10000                         }
10001                 }
10002                 break;
10003
10004         case 27:
10005 #ifdef JP
10006                 if (name) return "±Ñͺ¤Î»í";
10007                 if (desc) return "²Ã®¤·¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ê¡¢»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10008 #else
10009                 if (name) return "The Hero's Poem";
10010                 if (desc) return "Hastes you. Gives heroism. Damages all monsters in sight.";
10011 #endif
10012     
10013                 /* Stop singing before start another */
10014                 if (cast || fail) stop_singing();
10015
10016                 if (cast)
10017                 {
10018 #ifdef JP
10019                         msg_print("±Ñͺ¤Î²Î¤ò¸ý¤º¤µ¤ó¤À¡¥¡¥¡¥");
10020 #else
10021                         msg_print("You chant a powerful, heroic call to arms...");
10022 #endif
10023                         (void)hp_player(10);
10024                         (void)set_afraid(0);
10025
10026                         /* Recalculate hitpoints */
10027                         p_ptr->update |= (PU_HP);
10028
10029                         start_singing(spell, MUSIC_SHERO);
10030                 }
10031
10032                 if (stop)
10033                 {
10034                         if (!p_ptr->hero)
10035                         {
10036 #ifdef JP
10037                                 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
10038 #else
10039                                 msg_print("The heroism wears off.");
10040 #endif
10041                                 /* Recalculate hitpoints */
10042                                 p_ptr->update |= (PU_HP);
10043                         }
10044
10045                         if (!p_ptr->fast)
10046                         {
10047 #ifdef JP
10048                                 msg_print("Æ°¤­¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
10049 #else
10050                                 msg_print("You feel yourself slow down.");
10051 #endif
10052                         }
10053                 }
10054
10055                 {
10056                         int dice = 1;
10057                         int sides = plev * 3;
10058
10059                         if (info) return info_damage(dice, sides, 0);
10060
10061                         if (cont)
10062                         {
10063                                 dispel_monsters(damroll(dice, sides));
10064                         }
10065                 }
10066                 break;
10067
10068         case 28:
10069 #ifdef JP
10070                 if (name) return "¥ä¥ô¥¡¥ó¥Ê¤Î½õ¤±";
10071                 if (desc) return "¶¯ÎϤʲóÉü¤Î²Î¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
10072 #else
10073                 if (name) return "Relief of Yavanna";
10074                 if (desc) return "Powerful healing song. Also heals cut and stun completely.";
10075 #endif
10076     
10077                 /* Stop singing before start another */
10078                 if (cast || fail) stop_singing();
10079
10080                 if (cast)
10081                 {
10082 #ifdef JP
10083                         msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤­¤¿¡¥¡¥¡¥");
10084 #else
10085                         msg_print("Life flows through you as you sing the song...");
10086 #endif
10087                         start_singing(spell, MUSIC_H_LIFE);
10088                 }
10089
10090                 {
10091                         int dice = 15;
10092                         int sides = 10;
10093
10094                         if (info) return info_heal(dice, sides, 0);
10095
10096                         if (cont)
10097                         {
10098                                 hp_player(damroll(dice, sides));
10099                                 set_stun(0);
10100                                 set_cut(0);
10101                         }
10102                 }
10103
10104                 break;
10105
10106         case 29:
10107 #ifdef JP
10108                 if (name) return "ºÆÀ¸¤Î²Î";
10109                 if (desc) return "¤¹¤Ù¤Æ¤Î¥¹¥Æ¡¼¥¿¥¹¤È·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
10110 #else
10111                 if (name) return "Goddess' rebirth";
10112                 if (desc) return "Restores all stats and experience.";
10113 #endif
10114     
10115                 {
10116                         /* Stop singing before start another */
10117                         if (cast || fail) stop_singing();
10118
10119                         if (cast)
10120                         {
10121 #ifdef JP
10122                                 msg_print("°Å¹õ¤ÎÃæ¤Ë¸÷¤ÈÈþ¤ò¤Õ¤ê¤Þ¤¤¤¿¡£ÂΤ¬¸µ¤Î³èÎϤò¼è¤êÌᤷ¤¿¡£");
10123 #else
10124                                 msg_print("You strewed light and beauty in the dark as you sing. You feel refreshed.");
10125 #endif
10126                                 (void)do_res_stat(A_STR);
10127                                 (void)do_res_stat(A_INT);
10128                                 (void)do_res_stat(A_WIS);
10129                                 (void)do_res_stat(A_DEX);
10130                                 (void)do_res_stat(A_CON);
10131                                 (void)do_res_stat(A_CHR);
10132                                 (void)restore_level();
10133                         }
10134                 }
10135                 break;
10136
10137         case 30:
10138 #ifdef JP
10139                 if (name) return "¥µ¥¦¥í¥ó¤ÎËâ½Ñ";
10140                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤǤ´¤¯¾®¤µ¤¤¹ì²»¤Îµå¤òÊü¤Ä¡£";
10141 #else
10142                 if (name) return "Wizardry of Sauron";
10143                 if (desc) return "Fires an extremely powerful tiny ball of sound.";
10144 #endif
10145     
10146                 {
10147                         int dice = 50 + plev;
10148                         int sides = 10;
10149                         int rad = 0;
10150
10151                         if (info) return info_damage(dice, sides, 0);
10152
10153                         /* Stop singing before start another */
10154                         if (cast || fail) stop_singing();
10155
10156                         if (cast)
10157                         {
10158                                 if (!get_aim_dir(&dir)) return NULL;
10159
10160                                 fire_ball(GF_SOUND, dir, damroll(dice, sides), rad);
10161                         }
10162                 }
10163                 break;
10164
10165         case 31:
10166 #ifdef JP
10167                 if (name) return "¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤ÎÄ©Àï";
10168                 if (desc) return "¥À¥á¡¼¥¸¤ò¼õ¤±¤Ê¤¯¤Ê¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
10169 #else
10170                 if (name) return "Fingolfin's Challenge";
10171                 if (desc) return "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks.";
10172 #endif
10173     
10174                 /* Stop singing before start another */
10175                 if (cast || fail) stop_singing();
10176
10177                 if (cast)
10178                 {
10179 #ifdef JP
10180                                 msg_print("¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤Î̽²¦¤Ø¤ÎÄ©Àï¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
10181 #else
10182                                 msg_print("You recall the valor of Fingolfin's challenge to the Dark Lord...");
10183 #endif
10184
10185                                 /* Redraw map */
10186                                 p_ptr->redraw |= (PR_MAP);
10187                 
10188                                 /* Update monsters */
10189                                 p_ptr->update |= (PU_MONSTERS);
10190                 
10191                                 /* Window stuff */
10192                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
10193
10194                                 start_singing(spell, MUSIC_INVULN);
10195                 }
10196
10197                 if (stop)
10198                 {
10199                         if (!p_ptr->invuln)
10200                         {
10201 #ifdef JP
10202                                 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
10203 #else
10204                                 msg_print("The invulnerability wears off.");
10205 #endif
10206                                 /* Redraw map */
10207                                 p_ptr->redraw |= (PR_MAP);
10208
10209                                 /* Update monsters */
10210                                 p_ptr->update |= (PU_MONSTERS);
10211
10212                                 /* Window stuff */
10213                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
10214                         }
10215                 }
10216
10217                 break;
10218         }
10219
10220         return "";
10221 }
10222
10223
10224 static cptr do_hissatsu_spell(int spell, int mode)
10225 {
10226         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
10227         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
10228         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
10229
10230         int dir;
10231         int plev = p_ptr->lev;
10232
10233         switch (spell)
10234         {
10235         case 0:
10236 #ifdef JP
10237                 if (name) return "ÈôÈÓ¹Ë";
10238                 if (desc) return "2¥Þ¥¹Î¥¤ì¤¿¤È¤³¤í¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¡£";
10239 #else
10240                 if (name) return "Tobi-Izuna";
10241                 if (desc) return "Attacks a two squares distant monster.";
10242 #endif
10243     
10244                 if (cast)
10245                 {
10246                         project_length = 2;
10247                         if (!get_aim_dir(&dir)) return NULL;
10248
10249                         project_hook(GF_ATTACK, dir, HISSATSU_2, PROJECT_STOP | PROJECT_KILL);
10250                 }
10251                 break;
10252
10253         case 1:
10254 #ifdef JP
10255                 if (name) return "¸Þ·î±«»Â¤ê";
10256                 if (desc) return "3Êý¸þ¤ËÂФ·¤Æ¹¶·â¤¹¤ë¡£";
10257 #else
10258                 if (name) return "3-Way Attack";
10259                 if (desc) return "Attacks in 3 directions in one time.";
10260 #endif
10261     
10262                 if (cast)
10263                 {
10264                         int cdir;
10265                         int y, x;
10266
10267                         if (!get_rep_dir2(&dir)) return NULL;
10268                         if (dir == 5) return NULL;
10269
10270                         for (cdir = 0;cdir < 8; cdir++)
10271                         {
10272                                 if (cdd[cdir] == dir) break;
10273                         }
10274
10275                         if (cdir == 8) return NULL;
10276
10277                         y = py + ddy_cdd[cdir];
10278                         x = px + ddx_cdd[cdir];
10279                         if (cave[y][x].m_idx)
10280                                 py_attack(y, x, 0);
10281                         else
10282 #ifdef JP
10283                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10284 #else
10285                                 msg_print("You attack the empty air.");
10286 #endif
10287                         y = py + ddy_cdd[(cdir + 7) % 8];
10288                         x = px + ddx_cdd[(cdir + 7) % 8];
10289                         if (cave[y][x].m_idx)
10290                                 py_attack(y, x, 0);
10291                         else
10292 #ifdef JP
10293                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10294 #else
10295                                 msg_print("You attack the empty air.");
10296 #endif
10297                         y = py + ddy_cdd[(cdir + 1) % 8];
10298                         x = px + ddx_cdd[(cdir + 1) % 8];
10299                         if (cave[y][x].m_idx)
10300                                 py_attack(y, x, 0);
10301                         else
10302 #ifdef JP
10303                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10304 #else
10305                                 msg_print("You attack the empty air.");
10306 #endif
10307                 }
10308                 break;
10309
10310         case 2:
10311 #ifdef JP
10312                 if (name) return "¥Ö¡¼¥á¥é¥ó";
10313                 if (desc) return "Éð´ï¤ò¼ê¸µ¤ËÌá¤Ã¤Æ¤¯¤ë¤è¤¦¤ËÅꤲ¤ë¡£Ìá¤Ã¤Æ¤³¤Ê¤¤¤³¤È¤â¤¢¤ë¡£";
10314 #else
10315                 if (name) return "Boomerang";
10316                 if (desc) return "Throws current weapon. And it'll return to your hand unless failed.";
10317 #endif
10318     
10319                 if (cast)
10320                 {
10321                         if (!do_cmd_throw_aux(1, TRUE, -1)) return NULL;
10322                 }
10323                 break;
10324
10325         case 3:
10326 #ifdef JP
10327                 if (name) return "±ëÎî";
10328                 if (desc) return "²Ð±êÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10329 #else
10330                 if (name) return "Burning Strike";
10331                 if (desc) return "Attacks a monster with more damage unless it has resistance to fire.";
10332 #endif
10333     
10334                 if (cast)
10335                 {
10336                         int y, x;
10337
10338                         if (!get_rep_dir2(&dir)) return NULL;
10339                         if (dir == 5) return NULL;
10340
10341                         y = py + ddy[dir];
10342                         x = px + ddx[dir];
10343
10344                         if (cave[y][x].m_idx)
10345                                 py_attack(y, x, HISSATSU_FIRE);
10346                         else
10347                         {
10348 #ifdef JP
10349                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10350 #else
10351                                 msg_print("There is no monster.");
10352 #endif
10353                                 return NULL;
10354                         }
10355                 }
10356                 break;
10357
10358         case 4:
10359 #ifdef JP
10360                 if (name) return "»¦µ¤´¶ÃÎ";
10361                 if (desc) return "¶á¤¯¤Î»×¹Í¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
10362 #else
10363                 if (name) return "Detect Ferocity";
10364                 if (desc) return "Detects all monsters except mindless in your vicinity.";
10365 #endif
10366     
10367                 if (cast)
10368                 {
10369                         detect_monsters_mind(DETECT_RAD_DEFAULT);
10370                 }
10371                 break;
10372
10373         case 5:
10374 #ifdef JP
10375                 if (name) return "¤ß¤ÍÂǤÁ";
10376                 if (desc) return "Áê¼ê¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤Ê¤¤¤¬¡¢Û¯Û°¤È¤µ¤»¤ë¡£";
10377 #else
10378                 if (name) return "Strike to Stun";
10379                 if (desc) return "Attempts to stun a monster in the adjacent.";
10380 #endif
10381     
10382                 if (cast)
10383                 {
10384                         int y, x;
10385
10386                         if (!get_rep_dir2(&dir)) return NULL;
10387                         if (dir == 5) return NULL;
10388
10389                         y = py + ddy[dir];
10390                         x = px + ddx[dir];
10391
10392                         if (cave[y][x].m_idx)
10393                                 py_attack(y, x, HISSATSU_MINEUCHI);
10394                         else
10395                         {
10396 #ifdef JP
10397                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10398 #else
10399                                 msg_print("There is no monster.");
10400 #endif
10401                                 return NULL;
10402                         }
10403                 }
10404                 break;
10405
10406         case 6:
10407 #ifdef JP
10408                 if (name) return "¥«¥¦¥ó¥¿¡¼";
10409                 if (desc) return "Áê¼ê¤Ë¹¶·â¤µ¤ì¤¿¤È¤­¤ËÈ¿·â¤¹¤ë¡£È¿·â¤¹¤ë¤¿¤Ó¤ËMP¤ò¾ÃÈñ¡£";
10410 #else
10411                 if (name) return "Counter";
10412                 if (desc) return "Prepares to counterattack. When attack by a monster, strikes back using SP each time.";
10413 #endif
10414     
10415                 if (cast)
10416                 {
10417                         if (p_ptr->riding)
10418                         {
10419 #ifdef JP
10420                                 msg_print("¾èÇÏÃæ¤Ë¤Ï̵Íý¤À¡£");
10421 #else
10422                                 msg_print("You cannot do it when riding.");
10423 #endif
10424                                 return NULL;
10425                         }
10426 #ifdef JP
10427                         msg_print("Áê¼ê¤Î¹¶·â¤ËÂФ·¤Æ¿È¹½¤¨¤¿¡£");
10428 #else
10429                         msg_print("You prepare to counter blow.");
10430 #endif
10431                         p_ptr->counter = TRUE;
10432                 }
10433                 break;
10434
10435         case 7:
10436 #ifdef JP
10437                 if (name) return "ʧ¤¤È´¤±";
10438                 if (desc) return "¹¶·â¤·¤¿¸å¡¢È¿ÂЦ¤ËÈ´¤±¤ë¡£";
10439 #else
10440                 if (name) return "Harainuke";
10441                 if (desc) return "Attacks monster with your weapons normally, then move through counter side of the monster.";
10442 #endif
10443     
10444                 if (cast)
10445                 {
10446                         int y, x;
10447
10448                         if (p_ptr->riding)
10449                         {
10450 #ifdef JP
10451                                 msg_print("¾èÇÏÃæ¤Ë¤Ï̵Íý¤À¡£");
10452 #else
10453                                 msg_print("You cannot do it when riding.");
10454 #endif
10455                                 return NULL;
10456                         }
10457         
10458                         if (!get_rep_dir2(&dir)) return NULL;
10459         
10460                         if (dir == 5) return NULL;
10461                         y = py + ddy[dir];
10462                         x = px + ddx[dir];
10463         
10464                         if (!cave[y][x].m_idx)
10465                         {
10466 #ifdef JP
10467                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10468 #else
10469                                 msg_print("There is no monster.");
10470 #endif
10471                                 return NULL;
10472                         }
10473         
10474                         py_attack(y, x, 0);
10475         
10476                         if (!player_can_enter(cave[y][x].feat, 0) || is_trap(cave[y][x].feat))
10477                                 break;
10478         
10479                         y += ddy[dir];
10480                         x += ddx[dir];
10481         
10482                         if (player_can_enter(cave[y][x].feat, 0) && !is_trap(cave[y][x].feat) && !cave[y][x].m_idx)
10483                         {
10484                                 msg_print(NULL);
10485         
10486                                 /* Move the player */
10487                                 (void)move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
10488                         }
10489                 }
10490                 break;
10491
10492         case 8:
10493 #ifdef JP
10494                 if (name) return "¥µ¡¼¥Ú¥ó¥Ä¥¿¥ó";
10495                 if (desc) return "ÆÇÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10496 #else
10497                 if (name) return "Serpent's Tongue";
10498                 if (desc) return "Attacks a monster with more damage unless it has resistance to poison.";
10499 #endif
10500     
10501                 if (cast)
10502                 {
10503                         int y, x;
10504
10505                         if (!get_rep_dir2(&dir)) return NULL;
10506                         if (dir == 5) return NULL;
10507
10508                         y = py + ddy[dir];
10509                         x = px + ddx[dir];
10510
10511                         if (cave[y][x].m_idx)
10512                                 py_attack(y, x, HISSATSU_POISON);
10513                         else
10514                         {
10515 #ifdef JP
10516                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10517 #else
10518                                 msg_print("There is no monster.");
10519 #endif
10520                                 return NULL;
10521                         }
10522                 }
10523                 break;
10524
10525         case 9:
10526 #ifdef JP
10527                 if (name) return "»ÂËâ·õÆõ¤ÎÂÀÅá";
10528                 if (desc) return "À¸Ì¿¤Î¤Ê¤¤¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤¬¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤ÏÁ´¤¯¸ú²Ì¤¬¤Ê¤¤¡£";
10529 #else
10530                 if (name) return "Zammaken";
10531                 if (desc) return "Attacks an evil unliving monster with great damage. No effect to other  monsters.";
10532 #endif
10533     
10534                 if (cast)
10535                 {
10536                         int y, x;
10537
10538                         if (!get_rep_dir2(&dir)) return NULL;
10539                         if (dir == 5) return NULL;
10540
10541                         y = py + ddy[dir];
10542                         x = px + ddx[dir];
10543
10544                         if (cave[y][x].m_idx)
10545                                 py_attack(y, x, HISSATSU_ZANMA);
10546                         else
10547                         {
10548 #ifdef JP
10549                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10550 #else
10551                                 msg_print("There is no monster.");
10552 #endif
10553                                 return NULL;
10554                         }
10555                 }
10556                 break;
10557
10558         case 10:
10559 #ifdef JP
10560                 if (name) return "ÎöÉ÷·õ";
10561                 if (desc) return "¹¶·â¤·¤¿Áê¼ê¤ò¸åÊý¤Ø¿á¤­Èô¤Ð¤¹¡£";
10562 #else
10563                 if (name) return "Wind Blast";
10564                 if (desc) return "Attacks an adjacent monster, and blow it away.";
10565 #endif
10566     
10567                 if (cast)
10568                 {
10569                         int y, x;
10570
10571                         if (!get_rep_dir2(&dir)) return NULL;
10572                         if (dir == 5) return NULL;
10573
10574                         y = py + ddy[dir];
10575                         x = px + ddx[dir];
10576
10577                         if (cave[y][x].m_idx)
10578                                 py_attack(y, x, 0);
10579                         else
10580                         {
10581 #ifdef JP
10582                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10583 #else
10584                                 msg_print("There is no monster.");
10585 #endif
10586                                 return NULL;
10587                         }
10588                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
10589                         {
10590                                 return "";
10591                         }
10592                         if (cave[y][x].m_idx)
10593                         {
10594                                 int i;
10595                                 int ty = y, tx = x;
10596                                 int oy = y, ox = x;
10597                                 int m_idx = cave[y][x].m_idx;
10598                                 monster_type *m_ptr = &m_list[m_idx];
10599                                 char m_name[80];
10600         
10601                                 monster_desc(m_name, m_ptr, 0);
10602         
10603                                 for (i = 0; i < 5; i++)
10604                                 {
10605                                         y += ddy[dir];
10606                                         x += ddx[dir];
10607                                         if (cave_empty_bold(y, x))
10608                                         {
10609                                                 ty = y;
10610                                                 tx = x;
10611                                         }
10612                                         else break;
10613                                 }
10614                                 if ((ty != oy) || (tx != ox))
10615                                 {
10616 #ifdef JP
10617                                         msg_format("%s¤ò¿á¤­Èô¤Ð¤·¤¿¡ª", m_name);
10618 #else
10619                                         msg_format("You blow %s away!", m_name);
10620 #endif
10621                                         cave[oy][ox].m_idx = 0;
10622                                         cave[ty][tx].m_idx = m_idx;
10623                                         m_ptr->fy = ty;
10624                                         m_ptr->fx = tx;
10625         
10626                                         update_mon(m_idx, TRUE);
10627                                         lite_spot(oy, ox);
10628                                         lite_spot(ty, tx);
10629         
10630                                         if (r_info[m_ptr->r_idx].flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
10631                                                 p_ptr->update |= (PU_MON_LITE);
10632                                 }
10633                         }
10634                 }
10635                 break;
10636
10637         case 11:
10638 #ifdef JP
10639                 if (name) return "Åá¾¢¤ÎÌÜÍø¤­";
10640                 if (desc) return "Éð´ï¡¦Ëɶñ¤ò1¤Ä¼±Ê̤¹¤ë¡£¥ì¥Ù¥ë45°Ê¾å¤ÇÉð´ï¡¦Ëɶñ¤ÎǽÎϤò´°Á´¤ËÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£";
10641 #else
10642                 if (name) return "Judge";
10643                 if (desc) return "Identifies a weapon or armor. Or *identifies* these at level 45.";
10644 #endif
10645     
10646                 if (cast)
10647                 {
10648                         if (plev > 44)
10649                         {
10650                                 if (!identify_fully(TRUE)) return NULL;
10651                         }
10652                         else
10653                         {
10654                                 if (!ident_spell(TRUE)) return NULL;
10655                         }
10656                 }
10657                 break;
10658
10659         case 12:
10660 #ifdef JP
10661                 if (name) return "ÇË´ä»Â";
10662                 if (desc) return "´ä¤ò²õ¤·¡¢´äÀзϤΥâ¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10663 #else
10664                 if (name) return "Rock Smash";
10665                 if (desc) return "Breaks rock. Or greatly damage a monster made by rocks.";
10666 #endif
10667     
10668                 if (cast)
10669                 {
10670                         int y, x;
10671
10672                         if (!get_rep_dir2(&dir)) return NULL;
10673                         if (dir == 5) return NULL;
10674
10675                         y = py + ddy[dir];
10676                         x = px + ddx[dir];
10677
10678                         if (cave[y][x].m_idx)
10679                                 py_attack(y, x, HISSATSU_HAGAN);
10680         
10681                         if (!cave_have_flag_bold(y, x, FF_HURT_ROCK)) break;
10682         
10683                         /* Destroy the feature */
10684                         cave_alter_feat(y, x, FF_HURT_ROCK);
10685         
10686                         /* Update some things */
10687                         p_ptr->update |= (PU_FLOW);
10688                 }
10689                 break;
10690
10691         case 13:
10692 #ifdef JP
10693                 if (name) return "Íð¤ìÀã·î²Ö";
10694                 if (desc) return "¹¶·â²ó¿ô¤¬Áý¤¨¡¢Î䵤ÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10695 #else
10696                 if (name) return "Midare-Setsugekka";
10697                 if (desc) return "Attacks a monster with increased number of attacks and more damage unless it has resistance to cold.";
10698 #endif
10699     
10700                 if (cast)
10701                 {
10702                         int y, x;
10703
10704                         if (!get_rep_dir2(&dir)) return NULL;
10705                         if (dir == 5) return NULL;
10706
10707                         y = py + ddy[dir];
10708                         x = px + ddx[dir];
10709
10710                         if (cave[y][x].m_idx)
10711                                 py_attack(y, x, HISSATSU_COLD);
10712                         else
10713                         {
10714 #ifdef JP
10715                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10716 #else
10717                                 msg_print("There is no monster.");
10718 #endif
10719                                 return NULL;
10720                         }
10721                 }
10722                 break;
10723
10724         case 14:
10725 #ifdef JP
10726                 if (name) return "µÞ½êÆͤ­";
10727                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò°ì·â¤ÇÅݤ¹¹¶·â¤ò·«¤ê½Ð¤¹¡£¼ºÇÔ¤¹¤ë¤È1ÅÀ¤·¤«¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤Ê¤¤¡£";
10728 #else
10729                 if (name) return "Spot Aiming";
10730                 if (desc) return "Attempts to kill a monster instantly. If failed cause only 1HP of damage.";
10731 #endif
10732     
10733                 if (cast)
10734                 {
10735                         int y, x;
10736
10737                         if (!get_rep_dir2(&dir)) return NULL;
10738                         if (dir == 5) return NULL;
10739
10740                         y = py + ddy[dir];
10741                         x = px + ddx[dir];
10742
10743                         if (cave[y][x].m_idx)
10744                                 py_attack(y, x, HISSATSU_KYUSHO);
10745                         else
10746                         {
10747 #ifdef JP
10748                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10749 #else
10750                                 msg_print("There is no monster.");
10751 #endif
10752                                 return NULL;
10753                         }
10754                 }
10755                 break;
10756
10757         case 15:
10758 #ifdef JP
10759                 if (name) return "Ëâ¿À»Â¤ê";
10760                 if (desc) return "²ñ¿´¤Î°ì·â¤Ç¹¶·â¤¹¤ë¡£¹¶·â¤¬¤«¤ï¤µ¤ì¤ä¤¹¤¤¡£";
10761 #else
10762                 if (name) return "Majingiri";
10763                 if (desc) return "Attempts to attack with critical hit. But this attack is easy to evade for a monster.";
10764 #endif
10765     
10766                 if (cast)
10767                 {
10768                         int y, x;
10769
10770                         if (!get_rep_dir2(&dir)) return NULL;
10771                         if (dir == 5) return NULL;
10772
10773                         y = py + ddy[dir];
10774                         x = px + ddx[dir];
10775
10776                         if (cave[y][x].m_idx)
10777                                 py_attack(y, x, HISSATSU_MAJIN);
10778                         else
10779                         {
10780 #ifdef JP
10781                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10782 #else
10783                                 msg_print("There is no monster.");
10784 #endif
10785                                 return NULL;
10786                         }
10787                 }
10788                 break;
10789
10790         case 16:
10791 #ifdef JP
10792                 if (name) return "¼Î¤Æ¿È";
10793                 if (desc) return "¶¯ÎϤʹ¶·â¤ò·«¤ê½Ð¤¹¡£¼¡¤Î¥¿¡¼¥ó¤Þ¤Ç¤Î´Ö¡¢¿©¤é¤¦¥À¥á¡¼¥¸¤¬Áý¤¨¤ë¡£";
10794 #else
10795                 if (name) return "Desperate Attack";
10796                 if (desc) return "Attacks with all of your power. But all damages you take will be doubled for one turn.";
10797 #endif
10798     
10799                 if (cast)
10800                 {
10801                         int y, x;
10802
10803                         if (!get_rep_dir2(&dir)) return NULL;
10804                         if (dir == 5) return NULL;
10805
10806                         y = py + ddy[dir];
10807                         x = px + ddx[dir];
10808
10809                         if (cave[y][x].m_idx)
10810                                 py_attack(y, x, HISSATSU_SUTEMI);
10811                         else
10812                         {
10813 #ifdef JP
10814                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10815 #else
10816                                 msg_print("There is no monster.");
10817 #endif
10818                                 return NULL;
10819                         }
10820                         p_ptr->sutemi = TRUE;
10821                 }
10822                 break;
10823
10824         case 17:
10825 #ifdef JP
10826                 if (name) return "Íë·âÏÉÄÞ»Â";
10827                 if (desc) return "ÅÅ·âÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÈó¾ï¤ËÂ礭¤¤¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10828 #else
10829                 if (name) return "Lightning Eagle";
10830                 if (desc) return "Attacks a monster with more damage unless it has resistance to electricity.";
10831 #endif
10832     
10833                 if (cast)
10834                 {
10835                         int y, x;
10836
10837                         if (!get_rep_dir2(&dir)) return NULL;
10838                         if (dir == 5) return NULL;
10839
10840                         y = py + ddy[dir];
10841                         x = px + ddx[dir];
10842
10843                         if (cave[y][x].m_idx)
10844                                 py_attack(y, x, HISSATSU_ELEC);
10845                         else
10846                         {
10847 #ifdef JP
10848                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10849 #else
10850                                 msg_print("There is no monster.");
10851 #endif
10852                                 return NULL;
10853                         }
10854                 }
10855                 break;
10856
10857         case 18:
10858 #ifdef JP
10859                 if (name) return "Æþ¿È";
10860                 if (desc) return "ÁÇÁ᤯Áê¼ê¤Ë¶á´ó¤ê¹¶·â¤¹¤ë¡£";
10861 #else
10862                 if (name) return "Rush Attack";
10863                 if (desc) return "Steps close to a monster and attacks at a time.";
10864 #endif
10865     
10866                 if (cast)
10867                 {
10868                         if (!rush_attack(NULL)) return NULL;
10869                 }
10870                 break;
10871
10872         case 19:
10873 #ifdef JP
10874                 if (name) return "ÀÖή±²";
10875                 if (desc) return "¼«Ê¬¼«¿È¤â½ý¤òºî¤ê¤Ä¤Ä¡¢¤½¤Î½ý¤¬¿¼¤¤¤Û¤ÉÂ礭¤¤°ÒÎϤÇÁ´Êý¸þ¤ÎŨ¤ò¹¶·â¤Ç¤­¤ë¡£À¸¤­¤Æ¤¤¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡£";
10876 #else
10877                 if (name) return "Bloody Maelstrom";
10878                 if (desc) return "Attacks all adjacent monsters with power corresponding to your cut status. Then increases your cut status. No effect to unliving monsters.";
10879 #endif
10880     
10881                 if (cast)
10882                 {
10883                         int y = 0, x = 0;
10884
10885                         cave_type       *c_ptr;
10886                         monster_type    *m_ptr;
10887         
10888                         if (p_ptr->cut < 300)
10889                                 set_cut(p_ptr->cut + 300);
10890                         else
10891                                 set_cut(p_ptr->cut * 2);
10892         
10893                         for (dir = 0; dir < 8; dir++)
10894                         {
10895                                 y = py + ddy_ddd[dir];
10896                                 x = px + ddx_ddd[dir];
10897                                 c_ptr = &cave[y][x];
10898         
10899                                 /* Get the monster */
10900                                 m_ptr = &m_list[c_ptr->m_idx];
10901         
10902                                 /* Hack -- attack monsters */
10903                                 if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
10904                                 {
10905                                         if (!monster_living(&r_info[m_ptr->r_idx]))
10906                                         {
10907                                                 char m_name[80];
10908         
10909                                                 monster_desc(m_name, m_ptr, 0);
10910 #ifdef JP
10911                                                 msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡ª", m_name);
10912 #else
10913                                                 msg_format("%s is unharmed!", m_name);
10914 #endif
10915                                         }
10916                                         else py_attack(y, x, HISSATSU_SEKIRYUKA);
10917                                 }
10918                         }
10919                 }
10920                 break;
10921
10922         case 20:
10923 #ifdef JP
10924                 if (name) return "·ã¿Ì·â";
10925                 if (desc) return "ÃϿ̤òµ¯¤³¤¹¡£";
10926 #else
10927                 if (name) return "Earthquake Blow";
10928                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
10929 #endif
10930     
10931                 if (cast)
10932                 {
10933                         int y,x;
10934
10935                         if (!get_rep_dir2(&dir)) return NULL;
10936                         if (dir == 5) return NULL;
10937
10938                         y = py + ddy[dir];
10939                         x = px + ddx[dir];
10940
10941                         if (cave[y][x].m_idx)
10942                                 py_attack(y, x, HISSATSU_QUAKE);
10943                         else
10944                                 earthquake(py, px, 10);
10945                 }
10946                 break;
10947
10948         case 21:
10949 #ifdef JP
10950                 if (name) return "ÃÏÁö¤ê";
10951                 if (desc) return "¾×·âÇȤΥӡ¼¥à¤òÊü¤Ä¡£";
10952 #else
10953                 if (name) return "Crack";
10954                 if (desc) return "Fires a beam of shock wave.";
10955 #endif
10956     
10957                 if (cast)
10958                 {
10959                         int total_damage = 0, basedam, i;
10960                         u32b flgs[TR_FLAG_SIZE];
10961                         object_type *o_ptr;
10962                         if (!get_aim_dir(&dir)) return NULL;
10963 #ifdef JP
10964                         msg_print("Éð´ï¤òÂ礭¤¯¿¶¤ê²¼¤í¤·¤¿¡£");
10965 #else
10966                         msg_print("You swing your weapon downward.");
10967 #endif
10968                         for (i = 0; i < 2; i++)
10969                         {
10970                                 int damage;
10971         
10972                                 if (!buki_motteruka(INVEN_RARM+i)) break;
10973                                 o_ptr = &inventory[INVEN_RARM+i];
10974                                 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
10975                                 damage = o_ptr->to_d * 100;
10976                                 object_flags(o_ptr, flgs);
10977                                 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
10978                                 {
10979                                         /* vorpal blade */
10980                                         basedam *= 5;
10981                                         basedam /= 3;
10982                                 }
10983                                 else if (have_flag(flgs, TR_VORPAL))
10984                                 {
10985                                         /* vorpal flag only */
10986                                         basedam *= 11;
10987                                         basedam /= 9;
10988                                 }
10989                                 damage += basedam;
10990                                 damage *= p_ptr->num_blow[i];
10991                                 total_damage += damage / 200;
10992                                 if (i) total_damage = total_damage*7/10;
10993                         }
10994                         fire_beam(GF_FORCE, dir, total_damage);
10995                 }
10996                 break;
10997
10998         case 22:
10999 #ifdef JP
11000                 if (name) return "µ¤Ç÷¤Îͺ¶«¤Ó";
11001                 if (desc) return "»ë³¦Æâ¤ÎÁ´¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤Æ¹ì²»¤Î¹¶·â¤ò¹Ô¤¦¡£¤µ¤é¤Ë¡¢¶á¤¯¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤ë¡£";
11002 #else
11003                 if (name) return "War Cry";
11004                 if (desc) return "Damages all monsters in sight with sound. Aggravate nearby monsters.";
11005 #endif
11006     
11007                 if (cast)
11008                 {
11009 #ifdef JP
11010                         msg_print("ͺ¶«¤Ó¤ò¤¢¤²¤¿¡ª");
11011 #else
11012                         msg_print("You roar out!");
11013 #endif
11014                         project_hack(GF_SOUND, randint1(plev * 3));
11015                         aggravate_monsters(0);
11016                 }
11017                 break;
11018
11019         case 23:
11020 #ifdef JP
11021                 if (name) return "̵Áл°ÃÊ";
11022                 if (desc) return "¶¯ÎϤÊ3Ãʹ¶·â¤ò·«¤ê½Ð¤¹¡£";
11023 #else
11024                 if (name) return "Musou-Sandan";
11025                 if (desc) return "Attacks with powerful 3 strikes.";
11026 #endif
11027     
11028                 if (cast)
11029                 {
11030                         int i;
11031
11032                         if (!get_rep_dir2(&dir)) return NULL;
11033                         if (dir == 5) return NULL;
11034
11035                         for (i = 0; i < 3; i++)
11036                         {
11037                                 int y, x;
11038                                 int ny, nx;
11039                                 int m_idx;
11040                                 cave_type *c_ptr;
11041                                 monster_type *m_ptr;
11042         
11043                                 y = py + ddy[dir];
11044                                 x = px + ddx[dir];
11045                                 c_ptr = &cave[y][x];
11046         
11047                                 if (c_ptr->m_idx)
11048                                         py_attack(y, x, HISSATSU_3DAN);
11049                                 else
11050                                 {
11051 #ifdef JP
11052                                         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11053 #else
11054                                         msg_print("There is no monster.");
11055 #endif
11056                                         return NULL;
11057                                 }
11058         
11059                                 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
11060                                 {
11061                                         return "";
11062                                 }
11063         
11064                                 /* Monster is dead? */
11065                                 if (!c_ptr->m_idx) break;
11066         
11067                                 ny = y + ddy[dir];
11068                                 nx = x + ddx[dir];
11069                                 m_idx = c_ptr->m_idx;
11070                                 m_ptr = &m_list[m_idx];
11071         
11072                                 /* Monster cannot move back? */
11073                                 if (!monster_can_enter(ny, nx, &r_info[m_ptr->r_idx], 0))
11074                                 {
11075                                         /* -more- */
11076                                         if (i < 2) msg_print(NULL);
11077                                         continue;
11078                                 }
11079         
11080                                 c_ptr->m_idx = 0;
11081                                 cave[ny][nx].m_idx = m_idx;
11082                                 m_ptr->fy = ny;
11083                                 m_ptr->fx = nx;
11084         
11085                                 update_mon(m_idx, TRUE);
11086         
11087                                 /* Redraw the old spot */
11088                                 lite_spot(y, x);
11089         
11090                                 /* Redraw the new spot */
11091                                 lite_spot(ny, nx);
11092         
11093                                 /* Player can move forward? */
11094                                 if (player_can_enter(c_ptr->feat, 0))
11095                                 {
11096                                         /* Move the player */
11097                                         if (!move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP)) break;
11098                                 }
11099                                 else
11100                                 {
11101                                         break;
11102                                 }
11103
11104                                 /* -more- */
11105                                 if (i < 2) msg_print(NULL);
11106                         }
11107                 }
11108                 break;
11109
11110         case 24:
11111 #ifdef JP
11112                 if (name) return "µÛ·ìµ´¤Î²ç";
11113                 if (desc) return "¹¶·â¤·¤¿Áê¼ê¤ÎÂÎÎϤòµÛ¤¤¤È¤ê¡¢¼«Ê¬¤ÎÂÎÎϤò²óÉü¤µ¤»¤ë¡£À¸Ì¿¤ò»ý¤¿¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Ë¤ÏÄ̤¸¤Ê¤¤¡£";
11114 #else
11115                 if (name) return "Vampire's Fang";
11116                 if (desc) return "Attacks with vampiric strikes which absorbs HP from a monster and gives them to you. No effect to unliving monsters.";
11117 #endif
11118     
11119                 if (cast)
11120                 {
11121                         int y, x;
11122
11123                         if (!get_rep_dir2(&dir)) return NULL;
11124                         if (dir == 5) return NULL;
11125
11126                         y = py + ddy[dir];
11127                         x = px + ddx[dir];
11128
11129                         if (cave[y][x].m_idx)
11130                                 py_attack(y, x, HISSATSU_DRAIN);
11131                         else
11132                         {
11133 #ifdef JP
11134                                         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11135 #else
11136                                         msg_print("There is no monster.");
11137 #endif
11138                                 return NULL;
11139                         }
11140                 }
11141                 break;
11142
11143         case 25:
11144 #ifdef JP
11145                 if (name) return "¸¸ÏÇ";
11146                 if (desc) return "»ë³¦Æâ¤Îµ¯¤­¤Æ¤¤¤ëÁ´¥â¥ó¥¹¥¿¡¼¤ËÛ¯Û°¡¢º®Íð¡¢Ì²¤ê¤òÍ¿¤¨¤è¤¦¤È¤¹¤ë¡£";
11147 #else
11148                 if (name) return "Moon Dazzling";
11149                 if (desc) return "Attempts to stun, confuse and sleep all waking monsters.";
11150 #endif
11151     
11152                 if (cast)
11153                 {
11154 #ifdef JP
11155                         msg_print("Éð´ï¤òÉÔµ¬Â§¤ËÍɤ餷¤¿¡¥¡¥¡¥");
11156 #else
11157                         msg_print("You irregularly wave your weapon...");
11158 #endif
11159                         project_hack(GF_ENGETSU, plev * 4);
11160                         project_hack(GF_ENGETSU, plev * 4);
11161                         project_hack(GF_ENGETSU, plev * 4);
11162                 }
11163                 break;
11164
11165         case 26:
11166 #ifdef JP
11167                 if (name) return "É´¿Í»Â¤ê";
11168                 if (desc) return "Ϣ³¤·¤ÆÆþ¿È¤Ç¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¡£¹¶·â¤¹¤ë¤¿¤Ó¤ËMP¤ò¾ÃÈñ¡£MP¤¬¤Ê¤¯¤Ê¤ë¤«¡¢¥â¥ó¥¹¥¿¡¼¤òÅݤ»¤Ê¤«¤Ã¤¿¤éÉ´¿Í»Â¤ê¤Ï½ªÎ»¤¹¤ë¡£";
11169 #else
11170                 if (name) return "Hundred Slaughter";
11171                 if (desc) return "Performs a series of rush attacks. The series continues while killing each monster in a time and SP remains.";
11172 #endif
11173     
11174                 if (cast)
11175                 {
11176                         const int mana_cost_per_monster = 8;
11177                         bool is_new = TRUE;
11178                         bool mdeath;
11179
11180                         do
11181                         {
11182                                 if (!rush_attack(&mdeath)) break;
11183                                 if (is_new)
11184                                 {
11185                                         /* Reserve needed mana point */
11186                                         p_ptr->csp -= technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
11187                                         is_new = FALSE;
11188                                 }
11189                                 else
11190                                         p_ptr->csp -= mana_cost_per_monster;
11191
11192                                 if (!mdeath) break;
11193                                 command_dir = 0;
11194
11195                                 p_ptr->redraw |= PR_MANA;
11196                                 handle_stuff();
11197                         }
11198                         while (p_ptr->csp > mana_cost_per_monster);
11199
11200                         if (is_new) return NULL;
11201         
11202                         /* Restore reserved mana */
11203                         p_ptr->csp += technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
11204                 }
11205                 break;
11206
11207         case 27:
11208 #ifdef JP
11209                 if (name) return "Å·æÆζÁ®";
11210                 if (desc) return "»ë³¦Æâ¤Î¾ì½ê¤ò»ØÄꤷ¤Æ¡¢¤½¤Î¾ì½ê¤È¼«Ê¬¤Î´Ö¤Ë¤¤¤ëÁ´¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤·¡¢¤½¤Î¾ì½ê¤Ë°ÜÆ°¤¹¤ë¡£";
11211 #else
11212                 if (name) return "Dragonic Flash";
11213                 if (desc) return "Runs toward given location while attacking all monsters on the path.";
11214 #endif
11215     
11216                 if (cast)
11217                 {
11218                         int y, x;
11219
11220                         if (!tgt_pt(&x, &y)) return NULL;
11221
11222                         if (!cave_player_teleportable_bold(y, x, 0L) ||
11223                             (distance(y, x, py, px) > MAX_SIGHT / 2) ||
11224                             !projectable(py, px, y, x))
11225                         {
11226 #ifdef JP
11227                                 msg_print("¼ºÇÔ¡ª");
11228 #else
11229                                 msg_print("You cannot move to that place!");
11230 #endif
11231                                 break;
11232                         }
11233                         if (p_ptr->anti_tele)
11234                         {
11235 #ifdef JP
11236                                 msg_print("ÉԻ׵ĤÊÎϤ¬¥Æ¥ì¥Ý¡¼¥È¤òËɤ¤¤À¡ª");
11237 #else
11238                                 msg_print("A mysterious force prevents you from teleporting!");
11239 #endif
11240         
11241                                 break;
11242                         }
11243                         project(0, 0, y, x, HISSATSU_ISSEN, GF_ATTACK, PROJECT_BEAM | PROJECT_KILL, -1);
11244                         teleport_player_to(y, x, 0L);
11245                 }
11246                 break;
11247
11248         case 28:
11249 #ifdef JP
11250                 if (name) return "Æó½Å¤Î·õ·â";
11251                 if (desc) return "1¥¿¡¼¥ó¤Ç2ÅÙ¹¶·â¤ò¹Ô¤¦¡£";
11252 #else
11253                 if (name) return "Twin Slash";
11254                 if (desc) return "double attacks at a time.";
11255 #endif
11256     
11257                 if (cast)
11258                 {
11259                         int x, y;
11260         
11261                         if (!get_rep_dir(&dir, FALSE)) return NULL;
11262
11263                         y = py + ddy[dir];
11264                         x = px + ddx[dir];
11265
11266                         if (cave[y][x].m_idx)
11267                         {
11268                                 py_attack(y, x, 0);
11269                                 if (cave[y][x].m_idx)
11270                                 {
11271                                         handle_stuff();
11272                                         py_attack(y, x, 0);
11273                                 }
11274                         }
11275                         else
11276                         {
11277 #ifdef JP
11278         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11279 #else
11280                                 msg_print("You don't see any monster in this direction");
11281 #endif
11282                                 return NULL;
11283                         }
11284                 }
11285                 break;
11286
11287         case 29:
11288 #ifdef JP
11289                 if (name) return "¸×ÉúÀäÅáÀª";
11290                 if (desc) return "¶¯ÎϤʹ¶·â¤ò¹Ô¤¤¡¢¶á¤¯¤Î¾ì½ê¤Ë¤â¸ú²Ì¤¬µÚ¤Ö¡£";
11291 #else
11292                 if (name) return "Kofuku-Zettousei";
11293                 if (desc) return "Performs a powerful attack which even effect nearby monsters.";
11294 #endif
11295     
11296                 if (cast)
11297                 {
11298                         int total_damage = 0, basedam, i;
11299                         int y, x;
11300                         u32b flgs[TR_FLAG_SIZE];
11301                         object_type *o_ptr;
11302         
11303                         if (!get_rep_dir2(&dir)) return NULL;
11304                         if (dir == 5) return NULL;
11305
11306                         y = py + ddy[dir];
11307                         x = px + ddx[dir];
11308
11309                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
11310                         {
11311 #ifdef JP
11312                                 msg_print("¤Ê¤¼¤«¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£");
11313 #else
11314                                 msg_print("Something prevent you from attacking.");
11315 #endif
11316                                 return "";
11317                         }
11318 #ifdef JP
11319                         msg_print("Éð´ï¤òÂ礭¤¯¿¶¤ê²¼¤í¤·¤¿¡£");
11320 #else
11321                         msg_print("You swing your weapon downward.");
11322 #endif
11323                         for (i = 0; i < 2; i++)
11324                         {
11325                                 int damage;
11326                                 if (!buki_motteruka(INVEN_RARM+i)) break;
11327                                 o_ptr = &inventory[INVEN_RARM+i];
11328                                 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
11329                                 damage = o_ptr->to_d * 100;
11330                                 object_flags(o_ptr, flgs);
11331                                 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
11332                                 {
11333                                         /* vorpal blade */
11334                                         basedam *= 5;
11335                                         basedam /= 3;
11336                                 }
11337                                 else if (have_flag(flgs, TR_VORPAL))
11338                                 {
11339                                         /* vorpal flag only */
11340                                         basedam *= 11;
11341                                         basedam /= 9;
11342                                 }
11343                                 damage += basedam;
11344                                 damage += p_ptr->to_d[i] * 100;
11345                                 damage *= p_ptr->num_blow[i];
11346                                 total_damage += (damage / 100);
11347                         }
11348                         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);
11349                 }
11350                 break;
11351
11352         case 30:
11353 #ifdef JP
11354                 if (name) return "·Ä±Àµ´Ç¦·õ";
11355                 if (desc) return "¼«Ê¬¤â¥À¥á¡¼¥¸¤ò¤¯¤é¤¦¤¬¡¢Áê¼ê¤ËÈó¾ï¤ËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£¥¢¥ó¥Ç¥Ã¥É¤Ë¤ÏÆä˸ú²Ì¤¬¤¢¤ë¡£";
11356 #else
11357                 if (name) return "Keiun-Kininken";
11358                 if (desc) return "Attacks a monster with extremely powerful damage. But you also takes some damages. Hurts a undead monster greatly.";
11359 #endif
11360     
11361                 if (cast)
11362                 {
11363                         int y, x;
11364
11365                         if (!get_rep_dir2(&dir)) return NULL;
11366                         if (dir == 5) return NULL;
11367
11368                         y = py + ddy[dir];
11369                         x = px + ddx[dir];
11370
11371                         if (cave[y][x].m_idx)
11372                                 py_attack(y, x, HISSATSU_UNDEAD);
11373                         else
11374                         {
11375 #ifdef JP
11376                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11377 #else
11378                                 msg_print("There is no monster.");
11379 #endif
11380                                 return NULL;
11381                         }
11382 #ifdef JP
11383                         take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), "·Ä±Àµ´Ç¦·õ¤ò»È¤Ã¤¿¾×·â", -1);
11384 #else
11385                         take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), "exhaustion on using Keiun-Kininken", -1);
11386 #endif
11387                 }
11388                 break;
11389
11390         case 31:
11391 #ifdef JP
11392                 if (name) return "ÀÚÊ¢";
11393                 if (desc) return "¡ÖÉð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£¡×";
11394 #else
11395                 if (name) return "Harakiri";
11396                 if (desc) return "'Busido is found in death'";
11397 #endif
11398
11399                 if (cast)
11400                 {
11401                         int i;
11402 #ifdef JP
11403         if (!get_check("ËÜÅö¤Ë¼«»¦¤·¤Þ¤¹¤«¡©")) return NULL;
11404 #else
11405                         if (!get_check("Do you really want to commit suicide? ")) return NULL;
11406 #endif
11407                                 /* Special Verification for suicide */
11408 #ifdef JP
11409         prt("³Îǧ¤Î¤¿¤á '@' ¤ò²¡¤·¤Æ²¼¤µ¤¤¡£", 0, 0);
11410 #else
11411                         prt("Please verify SUICIDE by typing the '@' sign: ", 0, 0);
11412 #endif
11413         
11414                         flush();
11415                         i = inkey();
11416                         prt("", 0, 0);
11417                         if (i != '@') return NULL;
11418                         if (p_ptr->total_winner)
11419                         {
11420                                 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
11421                                 p_ptr->total_winner = TRUE;
11422                         }
11423                         else
11424                         {
11425 #ifdef JP
11426                                 msg_print("Éð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£");
11427 #else
11428                                 msg_print("Meaning of Bushi-do is found in the death.");
11429 #endif
11430                                 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
11431                         }
11432                 }
11433                 break;
11434         }
11435
11436         return "";
11437 }
11438
11439
11440 /* Hex */
11441 static bool item_tester_hook_weapon_except_bow(object_type *o_ptr)
11442 {
11443         switch (o_ptr->tval)
11444         {
11445                 case TV_SWORD:
11446                 case TV_HAFTED:
11447                 case TV_POLEARM:
11448                 case TV_DIGGING:
11449                 {
11450                         return (TRUE);
11451                 }
11452         }
11453
11454         return (FALSE);
11455 }
11456
11457 static bool item_tester_hook_cursed(object_type *o_ptr)
11458 {
11459         return (bool)(object_is_cursed(o_ptr));
11460 }
11461
11462 static cptr do_hex_spell(int spell, int mode)
11463 {
11464         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
11465         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
11466         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
11467         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
11468         bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
11469         bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
11470
11471         bool add = TRUE;
11472
11473         int plev = p_ptr->lev;
11474         int power;
11475
11476         switch (spell)
11477         {
11478         /*** 1st book (0-7) ***/
11479         case 0:
11480 #ifdef JP
11481                 if (name) return "¼Ù¤Ê¤ë½ËÊ¡";
11482                 if (desc) return "½ËÊ¡¤Ë¤è¤ê¹¶·âÀºÅÙ¤ÈËɸæÎϤ¬¾å¤¬¤ë¡£";
11483 #else
11484                 if (name) return "Evily blessing";
11485                 if (desc) return "Attempts to increase +to_hit of a weapon and AC";
11486 #endif
11487                 if (cast)
11488                 {
11489                         if (!p_ptr->blessed)
11490                         {
11491 #ifdef JP
11492                                 msg_print("¹â·é¤Êµ¤Ê¬¤Ë¤Ê¤Ã¤¿¡ª");
11493 #else
11494                                 msg_print("You feel righteous!");
11495 #endif
11496                         }
11497                 }
11498                 if (stop)
11499                 {
11500                         if (!p_ptr->blessed)
11501                         {
11502 #ifdef JP
11503                                 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
11504 #else
11505                                 msg_print("The prayer has expired.");
11506 #endif
11507                         }
11508                 }
11509                 break;
11510
11511         case 1:
11512 #ifdef JP
11513                 if (name) return "·Ú½ý¤Î¼£Ìþ";
11514                 if (desc) return "HP¤ä½ý¤ò¾¯¤·²óÉü¤µ¤»¤ë¡£";
11515 #else
11516                 if (name) return "Cure light wounds";
11517                 if (desc) return "Heals cut and HP a little.";
11518 #endif
11519                 if (info) return info_heal(1, 10, 0);
11520                 if (cast)
11521                 {
11522 #ifdef JP
11523                         msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
11524 #else
11525                         msg_print("You feel better and better.");
11526 #endif
11527                 }
11528                 if (cast || cont)
11529                 {
11530                         hp_player(damroll(1, 10));
11531                         set_cut(p_ptr->cut - 10);
11532                 }
11533                 break;
11534
11535         case 2:
11536 #ifdef JP
11537                 if (name) return "°­Ëâ¤Î¥ª¡¼¥é";
11538                 if (desc) return "±ê¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢²óÉü®ÅÙ¤¬Â®¤¯¤Ê¤ë¡£";
11539 #else
11540                 if (name) return "Demonic aura";
11541                 if (desc) return "Gives fire aura and regeneration.";
11542 #endif
11543                 if (cast)
11544                 {
11545 #ifdef JP
11546                         msg_print("ÂΤ¬±ê¤Î¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£");
11547 #else
11548                         msg_print("You have enveloped by fiery aura!");
11549 #endif
11550                 }
11551                 if (stop)
11552                 {
11553 #ifdef JP
11554                         msg_print("±ê¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
11555 #else
11556                         msg_print("Fiery aura disappeared.");
11557 #endif
11558                 }
11559                 break;
11560
11561         case 3:
11562 #ifdef JP
11563                 if (name) return "°­½­Ì¸";
11564                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÈù¼åÎ̤ÎÆǤΥÀ¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
11565 #else
11566                 if (name) return "Stinking mist";
11567                 if (desc) return "Deals few damages of poison to all monsters in your sight.";
11568 #endif
11569                 power = plev / 2 + 5;
11570                 if (info) return info_damage(1, power, 0);
11571                 if (cast || cont)
11572                 {
11573                         project_hack(GF_POIS, randint1(power));
11574                 }
11575                 break;
11576
11577         case 4:
11578 #ifdef JP
11579                 if (name) return "ÏÓÎ϶¯²½";
11580                 if (desc) return "½Ñ¼Ô¤ÎÏÓÎϤò¾å¾º¤µ¤»¤ë¡£";
11581 #else
11582                 if (name) return "Extra might";
11583                 if (desc) return "Attempts to increase your strength.";
11584 #endif
11585                 if (cast)
11586                 {
11587 #ifdef JP
11588                         msg_print("²¿¤À¤«ÎϤ¬Í¯¤¤¤ÆÍè¤ë¡£");
11589 #else
11590                         msg_print("You feel you get stronger.");
11591 #endif
11592                 }
11593                 break;
11594
11595         case 5:
11596 #ifdef JP
11597                 if (name) return "Éð´ï¼öÇû";
11598                 if (desc) return "ÁõÈ÷¤·¤Æ¤¤¤ëÉð´ï¤ò¼ö¤¦¡£";
11599 #else
11600                 if (name) return "Curse weapon";
11601                 if (desc) return "Curses your weapon.";
11602 #endif
11603                 if (cast)
11604                 {
11605                         int item;
11606                         cptr q, s;
11607                         char o_name[MAX_NLEN];
11608                         object_type *o_ptr;
11609                         u32b f[TR_FLAG_SIZE];
11610
11611                         item_tester_hook = item_tester_hook_weapon_except_bow;
11612 #ifdef JP
11613                         q = "¤É¤ì¤ò¼ö¤¤¤Þ¤¹¤«¡©";
11614                         s = "Éð´ï¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
11615 #else
11616                         q = "Which weapon do you curse?";
11617                         s = "You wield no weapons.";
11618 #endif
11619
11620                         if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
11621
11622                         o_ptr = &inventory[item];
11623                         object_desc(o_name, o_ptr, OD_NAME_ONLY);
11624                         object_flags(o_ptr, f);
11625
11626 #ifdef JP
11627                         if (!get_check(format("ËÜÅö¤Ë %s ¤ò¼ö¤¤¤Þ¤¹¤«¡©", o_name))) return FALSE;
11628 #else
11629                         if (!get_check(format("Do you curse %s, really¡©", o_name))) return FALSE;
11630 #endif
11631
11632                         if (!one_in_(3) &&
11633                                 (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
11634                         {
11635 #ifdef JP
11636                                 msg_format("%s ¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡£", o_name);
11637 #else
11638                                 msg_format("%s resists the effect.", o_name);
11639 #endif
11640                                 if (one_in_(3))
11641                                 {
11642                                         if (o_ptr->to_d > 0)
11643                                         {
11644                                                 o_ptr->to_d -= randint1(3) % 2;
11645                                                 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
11646                                         }
11647                                         if (o_ptr->to_h > 0)
11648                                         {
11649                                                 o_ptr->to_h -= randint1(3) % 2;
11650                                                 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
11651                                         }
11652                                         if (o_ptr->to_a > 0)
11653                                         {
11654                                                 o_ptr->to_a -= randint1(3) % 2;
11655                                                 if (o_ptr->to_a < 0) o_ptr->to_a = 0;
11656                                         }
11657 #ifdef JP
11658                                         msg_format("%s ¤ÏÎô²½¤·¤Æ¤·¤Þ¤Ã¤¿¡£", o_name);
11659 #else
11660                                         msg_format("Your %s was disenchanted!", o_name);
11661 #endif
11662                                 }
11663                         }
11664                         else
11665                         {
11666                                 int power = 0;
11667 #ifdef JP
11668                                 msg_format("¶²ÉݤΰŹõ¥ª¡¼¥é¤¬¤¢¤Ê¤¿¤Î%s¤òÊñ¤ß¹þ¤ó¤À¡ª", o_name);
11669 #else
11670                                 msg_format("A terrible black aura blasts your %s!", o_name);
11671 #endif
11672                                 o_ptr->curse_flags |= (TRC_CURSED);
11673
11674                                 if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
11675                                 {
11676
11677                                         if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
11678                                         if (one_in_(666))
11679                                         {
11680                                                 o_ptr->curse_flags |= (TRC_TY_CURSE);
11681                                                 if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
11682
11683                                                 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
11684                                                 add_flag(o_ptr->art_flags, TR_VORPAL);
11685                                                 add_flag(o_ptr->art_flags, TR_VAMPIRIC);
11686 #ifdef JP
11687                                                 msg_print("·ì¤À¡ª·ì¤À¡ª·ì¤À¡ª");
11688 #else
11689                                                 msg_print("Blood, Blood, Blood!");
11690 #endif
11691                                                 power = 2;
11692                                         }
11693                                 }
11694
11695                                 o_ptr->curse_flags |= get_curse(power, o_ptr);
11696                         }
11697
11698                         p_ptr->update |= (PU_BONUS);
11699                         add = FALSE;
11700                 }
11701                 break;
11702
11703         case 6:
11704 #ifdef JP
11705                 if (name) return "¼Ù°­´¶ÃÎ";
11706                 if (desc) return "¼þ°Ï¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
11707 #else
11708                 if (name) return "Evil detection";
11709                 if (desc) return "Detects evil monsters.";
11710 #endif
11711                 if (info) return info_range(MAX_SIGHT);
11712                 if (cast)
11713                 {
11714 #ifdef JP
11715                         msg_print("¼Ù°­¤ÊÀ¸Êª¤Î¸ºß¤ò´¶¤¸¼è¤í¤¦¤È¤·¤¿¡£");
11716 #else
11717                         msg_print("You attend to the presence of evil creatures.");
11718 #endif
11719                 }
11720                 break;
11721
11722         case 7:
11723 #ifdef JP
11724                 if (name) return "²æËý";
11725                 if (desc) return "¿ô¥¿¡¼¥ó¹¶·â¤òÂѤ¨¤¿¸å¡¢¼õ¤±¤¿¥À¥á¡¼¥¸¤òÃϹö¤Î¶È²Ð¤È¤·¤Æ¼þ°Ï¤ËÊü½Ð¤¹¤ë¡£";
11726 #else
11727                 if (name) return "Patience";
11728                 if (desc) return "Bursts hell fire strongly after patients any damage while few turns.";
11729 #endif
11730                 power = MIN(200, (p_ptr->magic_num1[2] * 2));
11731                 if (info) return info_damage(0, 0, power);
11732                 if (cast)
11733                 {
11734                         int a = 3 - (p_ptr->pspeed - 100) / 10;
11735                         int r = 3 + randint1(3) + MAX(0, MIN(3, a));
11736
11737                         if (p_ptr->magic_num2[2] > 0)
11738                         {
11739 #ifdef JP
11740                                 msg_print("¤¹¤Ç¤Ë²æËý¤ò¤·¤Æ¤¤¤ë¡£");
11741 #else
11742                                 msg_print("You are already patienting.");
11743 #endif
11744                                 return NULL;
11745                         }
11746
11747                         p_ptr->magic_num2[1] = 1;
11748                         p_ptr->magic_num2[2] = r;
11749                         p_ptr->magic_num1[2] = 0;
11750 #ifdef JP
11751                         msg_print("¤¸¤Ã¤ÈÂѤ¨¤ë¤³¤È¤Ë¤·¤¿¡£");
11752 #else
11753                         msg_print("You decide to patient all damages.");
11754 #endif
11755                         add = FALSE;
11756                 }
11757                 if (cont)
11758                 {
11759                         int rad = 2 + (power / 50);
11760
11761                         p_ptr->magic_num2[2]--;
11762
11763                         if ((p_ptr->magic_num2[2] <= 0) || (power >= 200))
11764                         {
11765 #ifdef JP
11766                                 msg_print("²æËý¤¬²ò¤«¤ì¤¿¡ª");
11767 #else
11768                                 msg_print("Time for end of patioence!");
11769 #endif
11770                                 if (power)
11771                                 {
11772                                         project(0, rad, py, px, power, GF_HELL_FIRE,
11773                                                 (PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
11774                                 }
11775                                 if (p_ptr->wizard)
11776                                 {
11777 #ifdef JP
11778                                         msg_format("%dÅÀ¤Î¥À¥á¡¼¥¸¤òÊÖ¤·¤¿¡£", power);
11779 #else
11780                                         msg_format("You return %d damages.", power);
11781 #endif
11782                                 }
11783
11784                                 /* Reset */
11785                                 p_ptr->magic_num2[1] = 0;
11786                                 p_ptr->magic_num2[2] = 0;
11787                                 p_ptr->magic_num1[2] = 0;
11788                         }
11789                 }
11790                 break;
11791
11792         /*** 2nd book (8-15) ***/
11793         case 8:
11794 #ifdef JP
11795                 if (name) return "ɹ¤Î³»";
11796                 if (desc) return "ɹ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢ËɸæÎϤ¬¾å¾º¤¹¤ë¡£";
11797 #else
11798                 if (name) return "Ice armor";
11799                 if (desc) return "Gives fire aura and bonus to AC.";
11800 #endif
11801                 if (cast)
11802                 {
11803 #ifdef JP
11804                         msg_print("ÂΤ¬É¹¤Î³»¤Çʤ¤ï¤ì¤¿¡£");
11805 #else
11806                         msg_print("You have enveloped by ice armor!");
11807 #endif
11808                 }
11809                 if (stop)
11810                 {
11811 #ifdef JP
11812                         msg_print("ɹ¤Î³»¤¬¾Ã¤¨µî¤Ã¤¿¡£");
11813 #else
11814                         msg_print("Ice armor disappeared.");
11815 #endif
11816                 }
11817                 break;
11818
11819         case 9:
11820 #ifdef JP
11821                 if (name) return "½Å½ý¤Î¼£Ìþ";
11822                 if (desc) return "ÂÎÎϤä½ý¤ò¿¾¯²óÉü¤µ¤»¤ë¡£";
11823 #else
11824                 if (name) return "Cure serious wounds";
11825                 if (desc) return "Heals cut and HP more.";
11826 #endif
11827                 if (info) return info_heal(2, 10, 0);
11828                 if (cast)
11829                 {
11830 #ifdef JP
11831                         msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
11832 #else
11833                         msg_print("You feel better and better.");
11834 #endif
11835                 }
11836                 if (cast || cont)
11837                 {
11838                         hp_player(damroll(2, 10));
11839                         set_cut((p_ptr->cut / 2) - 10);
11840                 }
11841                 break;
11842
11843         case 10:
11844 #ifdef JP
11845                 if (name) return "ÌôÉʵÛÆþ";
11846                 if (desc) return "¼öʸ±Ó¾§¤òÃæ»ß¤¹¤ë¤³¤È¤Ê¤¯¡¢Ìô¤Î¸ú²Ì¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
11847 #else
11848                 if (name) return "Inhail potion";
11849                 if (desc) return "Quaffs a potion without canceling of casting a spell.";
11850 #endif
11851                 if (cast)
11852                 {
11853                         p_ptr->magic_num1[0] |= (1L << HEX_INHAIL);
11854                         do_cmd_quaff_potion();
11855                         p_ptr->magic_num1[0] &= ~(1L << HEX_INHAIL);
11856                         add = FALSE;
11857                 }
11858                 break;
11859
11860         case 11:
11861 #ifdef JP
11862                 if (name) return "µÛ·ì̸";
11863                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÈù¼åÎ̤ÎÀ¸Ì¿Îϵۼý¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Í¿¤¨¤¿¥À¥á¡¼¥¸¤Îʬ¡¢ÂÎÎϤ¬²óÉü¤¹¤ë¡£";
11864 #else
11865                 if (name) return "Vampiric mist";
11866                 if (desc) return "Deals few dameges of drain life to all monsters in your sight.";
11867 #endif
11868                 power = (plev / 2) + 5;
11869                 if (info) return info_damage(1, power, 0);
11870                 if (cast || cont)
11871                 {
11872                         project_hack(GF_OLD_DRAIN, randint1(power));
11873                 }
11874                 break;
11875
11876         case 12:
11877 #ifdef JP
11878                 if (name) return "Ëâ·õ²½";
11879                 if (desc) return "Éð´ï¤Î¹¶·âÎϤò¾å¤²¤ë¡£ÀÚ¤ìÌ£¤òÆÀ¡¢¼ö¤¤¤Ë±þ¤¸¤ÆÍ¿¤¨¤ë¥À¥á¡¼¥¸¤¬¾å¾º¤·¡¢Á±Îɤʥâ¥ó¥¹¥¿¡¼¤ËÂФ¹¤ë¥À¥á¡¼¥¸¤¬2Çܤˤʤ롣";
11880 #else
11881                 if (name) return "Swords to runeswords";
11882                 if (desc) return "Gives vorpal ability to your weapon. Increases damages by your weapon acccording to curse of your weapon.";
11883 #endif
11884                 if (cast)
11885                 {
11886 #ifdef JP
11887                         msg_print("¤¢¤Ê¤¿¤ÎÉð´ï¤¬¹õ¤¯µ±¤¤¤¿¡£");
11888 #else
11889                         if (!empty_hands(FALSE))
11890                                 msg_print("Your weapons glow bright black.");
11891                         else
11892                                 msg_print("Your weapon glows bright black.");
11893 #endif
11894                 }
11895                 if (stop)
11896                 {
11897 #ifdef JP
11898                         msg_print("Éð´ï¤Îµ±¤­¤¬¾Ã¤¨µî¤Ã¤¿¡£");
11899 #else
11900                         msg_format("Brightness of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
11901 #endif
11902                 }
11903                 break;
11904
11905         case 13:
11906 #ifdef JP
11907                 if (name) return "º®Íð¤Î¼ê";
11908                 if (desc) return "¹¶·â¤·¤¿ºÝ¥â¥ó¥¹¥¿¡¼¤òº®Í𤵤»¤ë¡£";
11909 #else
11910                 if (name) return "Touch of confusion";
11911                 if (desc) return "Confuses a monster when you attack.";
11912 #endif
11913                 if (cast)
11914                 {
11915 #ifdef JP
11916                         msg_print("¤¢¤Ê¤¿¤Î¼ê¤¬ÀÖ¤¯µ±¤­»Ï¤á¤¿¡£");
11917 #else
11918                         msg_print("Your hands glow bright red.");
11919 #endif
11920                 }
11921                 if (stop)
11922                 {
11923 #ifdef JP
11924                         msg_print("¼ê¤Îµ±¤­¤¬¤Ê¤¯¤Ê¤Ã¤¿¡£");
11925 #else
11926                         msg_print("Brightness on your hands disappeard.");
11927 #endif
11928                 }
11929                 break;
11930
11931         case 14:
11932 #ifdef JP
11933                 if (name) return "ÆùÂζ¯²½";
11934                 if (desc) return "½Ñ¼Ô¤ÎÏÓÎÏ¡¢´ïÍѤµ¡¢Âѵ×ÎϤò¾å¾º¤µ¤»¤ë¡£¹¶·â²ó¿ô¤Î¾å¸Â¤ò 1 Áý²Ã¤µ¤»¤ë¡£";
11935 #else
11936                 if (name) return "Building up";
11937                 if (desc) return "Attempts to increases your strength, dexterity and constitusion.";
11938 #endif
11939                 if (cast)
11940                 {
11941 #ifdef JP
11942                         msg_print("¿ÈÂΤ¬¶¯¤¯¤Ê¤Ã¤¿µ¤¤¬¤·¤¿¡£");
11943 #else
11944                         msg_print("You feel your body is developed more now.");
11945 #endif
11946                 }
11947                 break;
11948
11949         case 15:
11950 #ifdef JP
11951                 if (name) return "È¿¥Æ¥ì¥Ý¡¼¥È·ë³¦";
11952                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤Î¥Æ¥ì¥Ý¡¼¥È¤òÁ˳²¤¹¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
11953 #else
11954                 if (name) return "Anti teleport barrier";
11955                 if (desc) return "Obstructs all teleportations by monsters in your sight.";
11956 #endif
11957                 power = plev * 3 / 2;
11958                 if (info) return info_power(power);
11959                 if (cast)
11960                 {
11961 #ifdef JP
11962                         msg_print("¥Æ¥ì¥Ý¡¼¥È¤òËɤ°¼ö¤¤¤ò¤«¤±¤¿¡£");
11963 #else
11964                         msg_print("You feel anyone can not teleport except you.");
11965 #endif
11966                 }
11967                 break;
11968
11969         /*** 3rd book (16-23) ***/
11970         case 16:
11971 #ifdef JP
11972                 if (name) return "¾×·â¤Î¥¯¥í¡¼¥¯";
11973                 if (desc) return "Åŵ¤¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢Æ°¤­¤¬Â®¤¯¤Ê¤ë¡£";
11974 #else
11975                 if (name) return "Cloak of shock";
11976                 if (desc) return "Gives lightning aura and a bonus to speed.";
11977 #endif
11978                 if (cast)
11979                 {
11980 #ifdef JP
11981                         msg_print("ÂΤ¬°ðºÊ¤Î¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£");
11982 #else
11983                         msg_print("You have enveloped by electrical aura!");
11984 #endif
11985                 }
11986                 if (stop)
11987                 {
11988 #ifdef JP
11989                         msg_print("°ðºÊ¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
11990 #else
11991                         msg_print("Electrical aura disappeared.");
11992 #endif
11993                 }
11994                 break;
11995
11996         case 17:
11997 #ifdef JP
11998                 if (name) return "Ã×Ì¿½ý¤Î¼£Ìþ";
11999                 if (desc) return "ÂÎÎϤä½ý¤ò²óÉü¤µ¤»¤ë¡£";
12000 #else
12001                 if (name) return "Cure critical wounds";
12002                 if (desc) return "Heals cut and HP greatry.";
12003 #endif
12004                 if (info) return info_heal(4, 10, 0);
12005                 if (cast)
12006                 {
12007 #ifdef JP
12008                         msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
12009 #else
12010                         msg_print("You feel better and better.");
12011 #endif
12012                 }
12013                 if (cast || cont)
12014                 {
12015                         hp_player(damroll(4, 10));
12016                         set_stun(0);
12017                         set_cut(0);
12018                         set_poisoned(0);
12019                 }
12020                 break;
12021
12022         case 18:
12023 #ifdef JP
12024                 if (name) return "¼öÎÏÉõÆþ";
12025                 if (desc) return "ËâË¡¤ÎÆ»¶ñ¤ËËâÎϤòºÆ½¼Å¶¤¹¤ë¡£";
12026 #else
12027                 if (name) return "Recharging";
12028                 if (desc) return "Recharges a magic device.";
12029 #endif
12030                 power = plev * 2;
12031                 if (info) return info_power(power);
12032                 if (cast)
12033                 {
12034                         if (!recharge(power)) return NULL;
12035                         add = FALSE;
12036                 }
12037                 break;
12038
12039         case 19:
12040 #ifdef JP
12041                 if (name) return "»à¼ÔÉü³è";
12042                 if (desc) return "»àÂΤòÁɤ餻¤Æ¥Ú¥Ã¥È¤Ë¤¹¤ë¡£";
12043 #else
12044                 if (name) return "Animate Dead";
12045                 if (desc) return "Raises corpses and skeletons from dead.";
12046 #endif
12047                 if (cast)
12048                 {
12049 #ifdef JP
12050                         msg_print("»à¼Ô¤Ø¤Î¸Æ¤Ó¤«¤±¤ò»Ï¤á¤¿¡£");
12051 #else
12052                         msg_print("You start to call deads.!");
12053 #endif
12054                 }
12055                 if (cast || cont)
12056                 {
12057                         animate_dead(0, py, px);
12058                 }
12059                 break;
12060
12061         case 20:
12062 #ifdef JP
12063                 if (name) return "Ëɶñ¼öÇû";
12064                 if (desc) return "ÁõÈ÷¤·¤Æ¤¤¤ëËɶñ¤Ë¼ö¤¤¤ò¤«¤±¤ë¡£";
12065 #else
12066                 if (name) return "Curse armor";
12067                 if (desc) return "Curse a piece of armour that you wielding.";
12068 #endif
12069                 if (cast)
12070                 {
12071                         int item;
12072                         cptr q, s;
12073                         char o_name[MAX_NLEN];
12074                         object_type *o_ptr;
12075                         u32b f[TR_FLAG_SIZE];
12076
12077                         item_tester_hook = object_is_armour;
12078 #ifdef JP
12079                         q = "¤É¤ì¤ò¼ö¤¤¤Þ¤¹¤«¡©";
12080                         s = "Ëɶñ¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
12081 #else
12082                         q = "Which piece of armour do you curse?";
12083                         s = "You wield no piece of armours.";
12084 #endif
12085
12086                         if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
12087
12088                         o_ptr = &inventory[item];
12089                         object_desc(o_name, o_ptr, OD_NAME_ONLY);
12090                         object_flags(o_ptr, f);
12091
12092 #ifdef JP
12093                         if (!get_check(format("ËÜÅö¤Ë %s ¤ò¼ö¤¤¤Þ¤¹¤«¡©", o_name))) return FALSE;
12094 #else
12095                         if (!get_check(format("Do you curse %s, really¡©", o_name))) return FALSE;
12096 #endif
12097
12098                         if (!one_in_(3) &&
12099                                 (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
12100                         {
12101 #ifdef JP
12102                                 msg_format("%s ¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡£", o_name);
12103 #else
12104                                 msg_format("%s resists the effect.", o_name);
12105 #endif
12106                                 if (one_in_(3))
12107                                 {
12108                                         if (o_ptr->to_d > 0)
12109                                         {
12110                                                 o_ptr->to_d -= randint1(3) % 2;
12111                                                 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
12112                                         }
12113                                         if (o_ptr->to_h > 0)
12114                                         {
12115                                                 o_ptr->to_h -= randint1(3) % 2;
12116                                                 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
12117                                         }
12118                                         if (o_ptr->to_a > 0)
12119                                         {
12120                                                 o_ptr->to_a -= randint1(3) % 2;
12121                                                 if (o_ptr->to_a < 0) o_ptr->to_a = 0;
12122                                         }
12123 #ifdef JP
12124                                         msg_format("%s ¤ÏÎô²½¤·¤Æ¤·¤Þ¤Ã¤¿¡£", o_name);
12125 #else
12126                                         msg_format("Your %s was disenchanted!", o_name);
12127 #endif
12128                                 }
12129                         }
12130                         else
12131                         {
12132                                 int power = 0;
12133 #ifdef JP
12134                                 msg_format("¶²ÉݤΰŹõ¥ª¡¼¥é¤¬¤¢¤Ê¤¿¤Î%s¤òÊñ¤ß¹þ¤ó¤À¡ª", o_name);
12135 #else
12136                                 msg_format("A terrible black aura blasts your %s!", o_name);
12137 #endif
12138                                 o_ptr->curse_flags |= (TRC_CURSED);
12139
12140                                 if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
12141                                 {
12142
12143                                         if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
12144                                         if (one_in_(666))
12145                                         {
12146                                                 o_ptr->curse_flags |= (TRC_TY_CURSE);
12147                                                 if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
12148
12149                                                 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
12150                                                 add_flag(o_ptr->art_flags, TR_RES_POIS);
12151                                                 add_flag(o_ptr->art_flags, TR_RES_DARK);
12152                                                 add_flag(o_ptr->art_flags, TR_RES_NETHER);
12153 #ifdef JP
12154                                                 msg_print("·ì¤À¡ª·ì¤À¡ª·ì¤À¡ª");
12155 #else
12156                                                 msg_print("Blood, Blood, Blood!");
12157 #endif
12158                                                 power = 2;
12159                                         }
12160                                 }
12161
12162                                 o_ptr->curse_flags |= get_curse(power, o_ptr);
12163                         }
12164
12165                         p_ptr->update |= (PU_BONUS);
12166                         add = FALSE;
12167                 }
12168                 break;
12169
12170         case 21:
12171 #ifdef JP
12172                 if (name) return "±Æ¤Î¥¯¥í¡¼¥¯";
12173                 if (desc) return "±Æ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢Å¨¤Ë±Æ¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
12174 #else
12175                 if (name) return "Cloak of shadow";
12176                 if (desc) return "Gives aura of shadow.";
12177 #endif
12178                 if (cast)
12179                 {
12180                         object_type *o_ptr = &inventory[INVEN_OUTER];
12181
12182                         if (!o_ptr->k_idx)
12183                         {
12184 #ifdef JP
12185                                 msg_print("¥¯¥í¡¼¥¯¤ò¿È¤Ë¤Ä¤±¤Æ¤¤¤Ê¤¤¡ª");
12186 #else
12187                                 msg_print("You don't ware any cloak.");
12188 #endif
12189                                 return NULL;
12190                         }
12191                         else if (!object_is_cursed(o_ptr))
12192                         {
12193 #ifdef JP
12194                                 msg_print("¥¯¥í¡¼¥¯¤Ï¼ö¤ï¤ì¤Æ¤¤¤Ê¤¤¡ª");
12195 #else
12196                                 msg_print("Your cloak is not cursed.");
12197 #endif
12198                                 return NULL;
12199                         }
12200                         else
12201                         {
12202 #ifdef JP
12203                                 msg_print("±Æ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤Ã¤¿¡£");
12204 #else
12205                                 msg_print("You have enveloped by shadow aura!");
12206 #endif
12207                         }
12208                 }
12209                 if (cont)
12210                 {
12211                         object_type *o_ptr = &inventory[INVEN_OUTER];
12212
12213                         if ((!o_ptr->k_idx) || (!object_is_cursed(o_ptr)))
12214                         {
12215                                 do_spell(REALM_HEX, spell, SPELL_STOP);
12216                                 p_ptr->magic_num1[0] &= ~(1L << spell);
12217                                 p_ptr->magic_num2[0]--;
12218                                 if (!p_ptr->magic_num2[0]) set_action(ACTION_NONE);
12219                         }
12220                 }
12221                 if (stop)
12222                 {
12223 #ifdef JP
12224                         msg_print("±Æ¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
12225 #else
12226                         msg_print("Shadow aura disappeared.");
12227 #endif
12228                 }
12229                 break;
12230
12231         case 22:
12232 #ifdef JP
12233                 if (name) return "¶ìÄˤòËâÎϤË";
12234                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÀº¿À¥À¥á¡¼¥¸Í¿¤¨¡¢ËâÎϤòµÛ¤¤¼è¤ë¡£";
12235 #else
12236                 if (name) return "Pains to mana";
12237                 if (desc) return "Deals psychic damages to all monsters in sight, and drains some mana.";
12238 #endif
12239                 power = plev * 3 / 2;
12240                 if (info) return info_damage(1, power, 0);
12241                 if (cast || cont)
12242                 {
12243                         project_hack(GF_PSI_DRAIN, randint1(power));
12244                 }
12245                 break;
12246
12247         case 23:
12248 #ifdef JP
12249                 if (name) return "ÌܤˤÏÌܤò";
12250                 if (desc) return "ÂÇ·â¤äËâË¡¤Ç¼õ¤±¤¿¥À¥á¡¼¥¸¤ò¡¢¹¶·â¸µ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤âÍ¿¤¨¤ë¡£";
12251 #else
12252                 if (name) return "Eye for an eye";
12253                 if (desc) return "Returns same damage which you got to the monster which damaged you.";
12254 #endif
12255                 if (cast)
12256                 {
12257 #ifdef JP
12258                         msg_print("Éü½²¤·¤¿¤¤Íß˾¤Ë¤«¤é¤ì¤¿¡£");
12259 #else
12260                         msg_print("You wish strongly you want to revenge anything.");
12261 #endif
12262                 }
12263                 break;
12264
12265         /*** 4th book (24-31) ***/
12266         case 24:
12267 #ifdef JP
12268                 if (name) return "È¿Áý¿£·ë³¦";
12269                 if (desc) return "¤½¤Î³¬¤ÎÁý¿£¤¹¤ë¥â¥ó¥¹¥¿¡¼¤ÎÁý¿£¤òÁ˻ߤ¹¤ë¡£";
12270 #else
12271                 if (name) return "Anti multiply barrier";
12272                 if (desc) return "Obstructs all multiplying by monsters in entire floor.";
12273 #endif
12274                 if (cast)
12275                 {
12276 #ifdef JP
12277                         msg_print("Áý¿£¤òÁ˻ߤ¹¤ë¼ö¤¤¤ò¤«¤±¤¿¡£");
12278 #else
12279                         msg_print("You feel anyone can not already multiply.");
12280 #endif
12281                 }
12282                 break;
12283
12284         case 25:
12285 #ifdef JP
12286                 if (name) return "À¸Ì¿ÎÏÉü³è";
12287                 if (desc) return "·Ð¸³Ãͤò½ù¡¹¤ËÉü³è¤·¡¢¸º¾¯¤·¤¿Ç½ÎÏÃͤò²óÉü¤µ¤»¤ë¡£";
12288 #else
12289                 if (name) return "Restore life";
12290                 if (desc) return "Restores life energy and status.";
12291 #endif
12292                 if (cast)
12293                 {
12294 #ifdef JP
12295                         msg_print("À¸Ì¿ÎϤ¬Ìá¤ê»Ï¤á¤¿¡£");
12296 #else
12297                         msg_print("You feel your life energy starting to return.");
12298 #endif
12299                 }
12300                 if (cast || cont)
12301                 {
12302                         bool flag = FALSE;
12303                         int d = (p_ptr->max_exp - p_ptr->exp);
12304                         int r = (p_ptr->exp / 20);
12305                         int i;
12306
12307                         if (d > 0)
12308                         {
12309                                 if (d < r)
12310                                         p_ptr->exp = p_ptr->max_exp;
12311                                 else
12312                                         p_ptr->exp += r;
12313
12314                                 /* Check the experience */
12315                                 check_experience();
12316
12317                                 flag = TRUE;
12318                         }
12319                         for (i = A_STR; i < 6; i ++)
12320                         {
12321                                 if (p_ptr->stat_cur[i] < p_ptr->stat_max[i])
12322                                 {
12323                                         if (p_ptr->stat_cur[i] < 18)
12324                                                 p_ptr->stat_cur[i]++;
12325                                         else
12326                                                 p_ptr->stat_cur[i] += 10;
12327
12328                                         if (p_ptr->stat_cur[i] > p_ptr->stat_max[i])
12329                                                 p_ptr->stat_cur[i] = p_ptr->stat_max[i];
12330
12331                                         /* Recalculate bonuses */
12332                                         p_ptr->update |= (PU_BONUS);
12333
12334                                         flag = TRUE;
12335                                 }
12336                         }
12337
12338                         if (!flag)
12339                         {
12340 #ifdef JP
12341                                 msg_format("%s¤Î¼öʸ¤Î±Ó¾§¤ò¤ä¤á¤¿¡£", do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME));
12342 #else
12343                                 msg_format("Finish casting '%^s'.", do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME));
12344 #endif
12345                                 p_ptr->magic_num1[0] &= ~(1L << HEX_RESTORE);
12346                                 if (cont) p_ptr->magic_num2[0]--;
12347                                 if (p_ptr->magic_num2) p_ptr->action = ACTION_NONE;
12348
12349                                 /* Redraw status */
12350                                 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
12351                                 p_ptr->redraw |= (PR_EXTRA);
12352
12353                                 return "";
12354                         }
12355                 }
12356                 break;
12357
12358         case 26:
12359 #ifdef JP
12360                 if (name) return "¼öÎϵۼý";
12361                 if (desc) return "¼ö¤ï¤ì¤¿Éð´ï¤Î¼ö¤¤¤òµÛ¼ý¤·¤ÆËâÎϤò²óÉü¤¹¤ë¡£";
12362 #else
12363                 if (name) return "Drain curse power";
12364                 if (desc) return "Drains curse on your weapon and heals SP a little.";
12365 #endif
12366                 if (cast)
12367                 {
12368                         int item;
12369                         cptr s, q;
12370                         u32b f[TR_FLAG_SIZE];
12371                         object_type *o_ptr;
12372
12373                         item_tester_hook = item_tester_hook_cursed;
12374 #ifdef JP
12375                         q = "¤É¤ÎÁõÈ÷Éʤ«¤éµÛ¼ý¤·¤Þ¤¹¤«¡©";
12376                         s = "¼ö¤ï¤ì¤¿¥¢¥¤¥Æ¥à¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
12377 #else
12378                         q = "Which cursed equipment do you drain mana from?";
12379                         s = "You have no cursed equipment.";
12380 #endif
12381
12382                         if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
12383
12384                         o_ptr = &inventory[item];
12385                         object_flags(o_ptr, f);
12386
12387                         p_ptr->csp += (p_ptr->lev / 5) + randint1(p_ptr->lev / 5);
12388                         if (have_flag(f, TR_TY_CURSE) || (o_ptr->curse_flags & TRC_TY_CURSE)) p_ptr->csp += randint1(5);
12389                         if (p_ptr->csp > p_ptr->msp) p_ptr->csp = p_ptr->msp;
12390
12391                         if (o_ptr->curse_flags & TRC_PERMA_CURSE)
12392                         {
12393                                 /* Nothing */
12394                         }
12395                         else if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
12396                         {
12397                                 if (one_in_(7))
12398                                 {
12399 #ifdef JP
12400                                         msg_print("¼ö¤¤¤òÁ´¤ÆµÛ¤¤¼è¤Ã¤¿¡£");
12401 #else
12402                                         msg_print("Heavy curse vanished away.");
12403 #endif
12404                                         o_ptr->curse_flags = 0L;
12405                                 }
12406                         }
12407                         else if ((o_ptr->curse_flags & (TRC_CURSED)) && one_in_(3))
12408                         {
12409 #ifdef JP
12410                                 msg_print("¼ö¤¤¤òÁ´¤ÆµÛ¤¤¼è¤Ã¤¿¡£");
12411 #else
12412                                 msg_print("Curse vanished away.");
12413 #endif
12414                                 o_ptr->curse_flags = 0L;
12415                         }
12416
12417                         add = FALSE;
12418                 }
12419                 break;
12420
12421         case 27:
12422 #ifdef JP
12423                 if (name) return "µÛ·ì¤Î¿Ï";
12424                 if (desc) return "µÛ·ì°À­¤Ç¹¶·â¤¹¤ë¡£";
12425 #else
12426                 if (name) return "Swords to vampires";
12427                 if (desc) return "Gives vampiric ability to your weapon.";
12428 #endif
12429                 if (cast)
12430                 {
12431 #ifdef JP
12432                         msg_print("¤¢¤Ê¤¿¤ÎÉð´ï¤¬·ì¤òÍߤ·¤Æ¤¤¤ë¡£");
12433 #else
12434                         if (!empty_hands(FALSE))
12435                                 msg_print("Your weapons want more blood now.");
12436                         else
12437                                 msg_print("Your weapon wants more blood now.");
12438 #endif
12439                 }
12440                 if (stop)
12441                 {
12442 #ifdef JP
12443                         msg_print("Éð´ï¤Î³é˾¤¬¾Ã¤¨µî¤Ã¤¿¡£");
12444 #else
12445                         msg_format("Thirsty of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
12446 #endif
12447                 }
12448                 break;
12449
12450         case 28:
12451 #ifdef JP
12452                 if (name) return "Û¯Û°¤Î¸ÀÍÕ";
12453                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤òÛ¯Û°¤È¤µ¤»¤ë¡£";
12454 #else
12455                 if (name) return "Word of stun";
12456                 if (desc) return "Stuns all monsters in your sight.";
12457 #endif
12458                 power = plev * 4;
12459                 if (info) return info_power(power);
12460                 if (cast || cont)
12461                 {
12462                         stun_monsters(power);
12463                 }
12464                 break;
12465
12466         case 29:
12467 #ifdef JP
12468                 if (name) return "±Æ°ÜÆ°";
12469                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ÎÎ٤Υޥ¹¤Ë½Ö´Ö°ÜÆ°¤¹¤ë¡£";
12470 #else
12471                 if (name) return "Moving into shadow";
12472                 if (desc) return "Teleports you close to a monster.";
12473 #endif
12474                 if (cast)
12475                 {
12476                         int i, y, x, dir;
12477                         bool flag;
12478
12479                         for (i = 0; i < 3; i++)
12480                         {
12481                                 if (!tgt_pt(&x, &y)) return FALSE;
12482
12483                                 flag = FALSE;
12484
12485                                 for (dir = 0; dir < 8; dir++)
12486                                 {
12487                                         int dy = y + ddy_ddd[dir];
12488                                         int dx = x + ddx_ddd[dir];
12489                                         if (dir == 5) continue;
12490                                         if(cave[dy][dx].m_idx) flag = TRUE;
12491                                 }
12492
12493                                 if (!cave_empty_bold(y, x) || (cave[y][x].info & CAVE_ICKY) ||
12494                                         (distance(y, x, py, px) > plev + 2))
12495                                 {
12496 #ifdef JP
12497                                         msg_print("¤½¤³¤Ë¤Ï°ÜÆ°¤Ç¤­¤Ê¤¤¡£");
12498 #else
12499                                         msg_print("Can not teleport to there.");
12500 #endif
12501                                         continue;
12502                                 }
12503                                 break;
12504                         }
12505
12506                         if (flag && randint0(plev * plev / 2))
12507                         {
12508                                 teleport_player_to(y, x, 0L);
12509                         }
12510                         else
12511                         {
12512 #ifdef JP
12513                                 msg_print("¤ª¤Ã¤È¡ª");
12514 #else
12515                                 msg_print("Oops!");
12516 #endif
12517                                 teleport_player(30, 0L);
12518                         }
12519
12520                         add = FALSE;
12521                 }
12522                 break;
12523
12524         case 30:
12525 #ifdef JP
12526                 if (name) return "È¿ËâË¡·ë³¦";
12527                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ÎËâË¡¤òÁ˳²¤¹¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
12528 #else
12529                 if (name) return "Anti magic barrier";
12530                 if (desc) return "Obstructs all magic spell of monsters in your sight.";
12531 #endif
12532                 power = plev * 3 / 2;
12533                 if (info) return info_power(power);
12534                 if (cast)
12535                 {
12536 #ifdef JP
12537                         msg_print("ËâË¡¤òËɤ°¼ö¤¤¤ò¤«¤±¤¿¡£");
12538 #else
12539                         msg_print("You feel anyone can not cast spells except you.");
12540 #endif
12541                 }
12542                 break;
12543
12544         case 31:
12545 #ifdef JP
12546                 if (name) return "Éü½²¤ÎÀë¹ð";
12547                 if (desc) return "¿ô¥¿¡¼¥ó¸å¤Ë¤½¤ì¤Þ¤Ç¼õ¤±¤¿¥À¥á¡¼¥¸¤Ë±þ¤¸¤¿°ÒÎϤÎÃϹö¤Î¹å²Ð¤ÎÃƤòÊü¤Ä¡£";
12548 #else
12549                 if (name) return "Revenge sentence";
12550                 if (desc) return "Fires  a ball of hell fire to try revenging after few turns.";
12551 #endif
12552                 power = p_ptr->magic_num1[2];
12553                 if (info) return info_damage(0, 0, power);
12554                 if (cast)
12555                 {
12556                         int r;
12557                         int a = 3 - (p_ptr->pspeed - 100) / 10;
12558                         r = 1 + randint1(2) + MAX(0, MIN(3, a));
12559
12560                         if (p_ptr->magic_num2[2] > 0)
12561                         {
12562 #ifdef JP
12563                                 msg_print("¤¹¤Ç¤ËÉü½²¤ÏÀë¹ðºÑ¤ß¤À¡£");
12564 #else
12565                                 msg_print("You already pronounced your revenge.");
12566 #endif
12567                                 return NULL;
12568                         }
12569
12570                         p_ptr->magic_num2[1] = 2;
12571                         p_ptr->magic_num2[2] = r;
12572 #ifdef JP
12573                         msg_format("¤¢¤Ê¤¿¤ÏÉü½²¤òÀë¹ð¤·¤¿¡£¤¢¤È %d ¥¿¡¼¥ó¡£", r);
12574 #else
12575                         msg_format("You pronounce your revenge. %d turns left.", r);
12576 #endif
12577                         add = FALSE;
12578                 }
12579                 if (cont)
12580                 {
12581                         p_ptr->magic_num2[2]--;
12582
12583                         if (p_ptr->magic_num2[2] <= 0)
12584                         {
12585                                 int dir;
12586
12587                                 if (power)
12588                                 {
12589                                         command_dir = 0;
12590
12591                                         do
12592                                         {
12593 #ifdef JP
12594                                                 msg_print("Éü½²¤Î»þ¤À¡ª");
12595 #else
12596                                                 msg_print("Time to revenge!");
12597 #endif
12598                                         }
12599                                         while (!get_aim_dir(&dir));
12600
12601                                         fire_ball(GF_HELL_FIRE, dir, power, 1);
12602
12603                                         if (p_ptr->wizard)
12604                                         {
12605 #ifdef JP
12606                                                 msg_format("%dÅÀ¤Î¥À¥á¡¼¥¸¤òÊÖ¤·¤¿¡£", power);
12607 #else
12608                                                 msg_format("You return %d damages.", power);
12609 #endif
12610                                         }
12611                                 }
12612                                 else
12613                                 {
12614 #ifdef JP
12615                                         msg_print("Éü½²¤¹¤ëµ¤¤¬¼º¤»¤¿¡£");
12616 #else
12617                                         msg_print("You are not a mood to revenge.");
12618 #endif
12619                                 }
12620                                 p_ptr->magic_num1[2] = 0;
12621                         }
12622                 }
12623                 break;
12624         }
12625
12626         /* start casting */
12627         if ((cast) && (add))
12628         {
12629                 /* add spell */
12630                 p_ptr->magic_num1[0] |= 1L << (spell);
12631                 p_ptr->magic_num2[0]++;
12632
12633                 if (p_ptr->action != ACTION_SPELL) set_action(ACTION_SPELL);
12634         }
12635
12636         /* Redraw status */
12637         if (!info)
12638         {
12639                 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
12640                 p_ptr->redraw |= (PR_EXTRA | PR_HP | PR_MANA);
12641         }
12642
12643         return "";
12644 }
12645
12646
12647 /*
12648  * Do everything for each spell
12649  */
12650 cptr do_spell(int realm, int spell, int mode)
12651 {
12652         switch (realm)
12653         {
12654         case REALM_LIFE:     return do_life_spell(spell, mode);
12655         case REALM_SORCERY:  return do_sorcery_spell(spell, mode);
12656         case REALM_NATURE:   return do_nature_spell(spell, mode);
12657         case REALM_CHAOS:    return do_chaos_spell(spell, mode);
12658         case REALM_DEATH:    return do_death_spell(spell, mode);
12659         case REALM_TRUMP:    return do_trump_spell(spell, mode);
12660         case REALM_ARCANE:   return do_arcane_spell(spell, mode);
12661         case REALM_CRAFT:    return do_craft_spell(spell, mode);
12662         case REALM_DAEMON:   return do_daemon_spell(spell, mode);
12663         case REALM_CRUSADE:  return do_crusade_spell(spell, mode);
12664         case REALM_MUSIC:    return do_music_spell(spell, mode);
12665         case REALM_HISSATSU: return do_hissatsu_spell(spell, mode);
12666         case REALM_HEX:      return do_hex_spell(spell, mode);
12667         }
12668
12669         return NULL;
12670 }