OSDN Git Service

Add Doxygen comment to do-spell.c.
[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  * @brief °ìÉô¥Ü¥ë¥ÈËâË¡¤Î¥Ó¡¼¥à²½³ÎΨ¤ò»»½Ð¤¹¤ë / Prepare standard probability to become beam for fire_bolt_or_beam()
210  * @return ¥Ó¡¼¥à²½³ÎΨ(%)
211  * @details
212  * ¥Ï¡¼¥É¥³¡¼¥Æ¥£¥ó¥°¤Ë¤è¤ë¼ÂÁõ¤¬¹Ô¤ï¤ì¤Æ¤¤¤ë¡£
213  * ¥á¥¤¥¸¤Ï(¥ì¥Ù¥ë)%¡¢¥Ï¥¤¥á¥¤¥¸¡¢¥¹¥Ú¥ë¥Þ¥¹¥¿¡¼¤Ï(¥ì¥Ù¥ë)%¡¢¤½¤ì°Ê³°¤Î¿¦¶È¤Ï(¥ì¥Ù¥ë/2)%
214  */
215 static int beam_chance(void)
216 {
217         if (p_ptr->pclass == CLASS_MAGE)
218                 return p_ptr->lev;
219         if (p_ptr->pclass == CLASS_HIGH_MAGE || p_ptr->pclass == CLASS_SORCERER)
220                 return p_ptr->lev + 10;
221
222         return p_ptr->lev / 2;
223 }
224
225 /*!
226  * @brief ¥È¥é¥ó¥×ËâË¡Æȼ«¤Î¾¤´­½èÍý¤ò¹Ô¤¦ / Handle summoning and failure of trump spells
227  * @param num summon_specific()´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹²ó¿ô
228  * @param pet ¥Ú¥Ã¥È²½¤È¤·¤Æ¾¤´­¤µ¤ì¤ë¤«Èݤ«
229  * @param y ¾¤´­°ÌÃÖ¤ÎyºÂɸ
230  * @param x ¾¤´­°ÌÃÖ¤ÎxºÂɸ
231  * @param lev ¾¤´­¥ì¥Ù¥ë
232  * @param type ¾¤´­¾ò·ïID
233  * @param mode ¥â¥ó¥¹¥¿¡¼À¸À®¾ò·ï¥Õ¥é¥°
234  * @return ¥â¥ó¥¹¥¿¡¼¤¬¡ÊŨÂФâ´Þ¤á¤Æ¡Ë¾¤´Ô¤µ¤ì¤¿¤Ê¤é¤ÐTRUE¤òÊÖ¤¹¡£
235  */
236 static bool trump_summoning(int num, bool pet, int y, int x, int lev, int type, u32b mode)
237 {
238         int plev = p_ptr->lev;
239
240         int who;
241         int i;
242         bool success = FALSE;
243
244         /* Default level */
245         if (!lev) lev = plev * 2 / 3 + randint1(plev / 2);
246
247         if (pet)
248         {
249                 /* Become pet */
250                 mode |= PM_FORCE_PET;
251
252                 /* Only sometimes allow unique monster */
253                 if (mode & PM_ALLOW_UNIQUE)
254                 {
255                         /* Forbid often */
256                         if (randint1(50 + plev) >= plev / 10)
257                                 mode &= ~PM_ALLOW_UNIQUE;
258                 }
259
260                 /* Player is who summons */
261                 who = -1;
262         }
263         else
264         {
265                 /* Prevent taming, allow unique monster */
266                 mode |= PM_NO_PET;
267
268                 /* Behave as if they appear by themselfs */
269                 who = 0;
270         }
271
272         for (i = 0; i < num; i++)
273         {
274                 if (summon_specific(who, y, x, lev, type, mode))
275                         success = TRUE;
276         }
277
278         if (!success)
279         {
280 #ifdef JP
281                 msg_print("ï¤â¤¢¤Ê¤¿¤Î¥«¡¼¥É¤Î¸Æ¤ÓÀ¼¤ËÅú¤¨¤Ê¤¤¡£");
282 #else
283                 msg_print("Nobody answers to your Trump call.");
284 #endif
285         }
286
287         return success;
288 }
289
290
291 /*!
292  * @brief ¡Ö¥ï¥ó¥À¡¼¡×¤Î¥é¥ó¥À¥à¤Ê¸ú²Ì¤ò·èÄꤷ¤Æ½èÍý¤¹¤ë¡£
293  * @param dir Êý¸þID
294  * @return ¤Ê¤·
295  * @details
296  * This spell should become more useful (more controlled) as the\n
297  * player gains experience levels.  Thus, add 1/5 of the player's\n
298  * level to the die roll.  This eliminates the worst effects later on,\n
299  * while keeping the results quite random.  It also allows some potent\n
300  * effects only at high level.
301  */
302 static void cast_wonder(int dir)
303 {
304         int plev = p_ptr->lev;
305         int die = randint1(100) + plev / 5;
306         int vir = virtue_number(V_CHANCE);
307
308         if (vir)
309         {
310                 if (p_ptr->virtues[vir - 1] > 0)
311                 {
312                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
313                 }
314                 else
315                 {
316                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
317                 }
318         }
319
320         if (die < 26)
321                 chg_virtue(V_CHANCE, 1);
322
323         if (die > 100)
324         {
325 #ifdef JP
326                 msg_print("¤¢¤Ê¤¿¤ÏÎϤ¬¤ß¤Ê¤®¤ë¤Î¤ò´¶¤¸¤¿¡ª");
327 #else
328                 msg_print("You feel a surge of power!");
329 #endif
330         }
331
332         if (die < 8) clone_monster(dir);
333         else if (die < 14) speed_monster(dir, plev);
334         else if (die < 26) heal_monster(dir, damroll(4, 6));
335         else if (die < 31) poly_monster(dir, plev);
336         else if (die < 36)
337                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir,
338                                   damroll(3 + ((plev - 1) / 5), 4));
339         else if (die < 41) confuse_monster(dir, plev);
340         else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
341         else if (die < 51) (void)lite_line(dir, damroll(6, 8));
342         else if (die < 56)
343                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir,
344                                   damroll(3 + ((plev - 5) / 4), 8));
345         else if (die < 61)
346                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir,
347                                   damroll(5 + ((plev - 5) / 4), 8));
348         else if (die < 66)
349                 fire_bolt_or_beam(beam_chance(), GF_ACID, dir,
350                                   damroll(6 + ((plev - 5) / 4), 8));
351         else if (die < 71)
352                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir,
353                                   damroll(8 + ((plev - 5) / 4), 8));
354         else if (die < 76) drain_life(dir, 75);
355         else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
356         else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2);
357         else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3);
358         else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3);
359         else if (die < 101) drain_life(dir, 100 + plev);
360         else if (die < 104)
361         {
362                 earthquake(py, px, 12);
363         }
364         else if (die < 106)
365         {
366                 (void)destroy_area(py, px, 13 + randint0(5), FALSE);
367         }
368         else if (die < 108)
369         {
370                 symbol_genocide(plev+50, TRUE);
371         }
372         else if (die < 110) dispel_monsters(120);
373         else /* RARE */
374         {
375                 dispel_monsters(150);
376                 slow_monsters(plev);
377                 sleep_monsters(plev);
378                 hp_player(300);
379         }
380 }
381
382
383 /*!
384  * @brief ¡Ö°­Î´­¡×¤Î¥é¥ó¥À¥à¤Ê¸ú²Ì¤ò·èÄꤷ¤Æ½èÍý¤¹¤ë¡£
385  * @param dir Êý¸þID
386  * @return ¤Ê¤·
387  */
388 static void cast_invoke_spirits(int dir)
389 {
390         int plev = p_ptr->lev;
391         int die = randint1(100) + plev / 5;
392         int vir = virtue_number(V_CHANCE);
393
394         if (vir)
395         {
396                 if (p_ptr->virtues[vir - 1] > 0)
397                 {
398                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
399                 }
400                 else
401                 {
402                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
403                 }
404         }
405
406 #ifdef JP
407         msg_print("¤¢¤Ê¤¿¤Ï»à¼Ô¤¿¤Á¤ÎÎϤò¾·½¸¤·¤¿...");
408 #else
409         msg_print("You call on the power of the dead...");
410 #endif
411         if (die < 26)
412                 chg_virtue(V_CHANCE, 1);
413
414         if (die > 100)
415         {
416 #ifdef JP
417                 msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤ÎϤΤ¦¤Í¤ê¤ò´¶¤¸¤¿¡ª");
418 #else
419                 msg_print("You feel a surge of eldritch force!");
420 #endif
421         }
422
423
424         if (die < 8)
425         {
426 #ifdef JP
427                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¤¢¤Ê¤¿¤Î¼þ¤ê¤ÎÃÏÌ̤«¤éµà¤Á¤¿¿Í±Æ¤¬Î©¤Á¾å¤¬¤Ã¤Æ¤­¤¿¡ª");
428 #else
429                 msg_print("Oh no! Mouldering forms rise from the earth around you!");
430 #endif
431
432                 (void)summon_specific(0, py, px, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
433                 chg_virtue(V_UNLIFE, 1);
434         }
435         else if (die < 14)
436         {
437 #ifdef JP
438                 msg_print("̾¾õ¤·Æñ¤¤¼Ù°­¤Ê¸ºß¤¬¤¢¤Ê¤¿¤Î¿´¤òÄ̤ê²á¤®¤Æ¹Ô¤Ã¤¿...");
439 #else
440                 msg_print("An unnamable evil brushes against your mind...");
441 #endif
442
443                 set_afraid(p_ptr->afraid + randint1(4) + 4);
444         }
445         else if (die < 26)
446         {
447 #ifdef JP
448                 msg_print("¤¢¤Ê¤¿¤ÎƬ¤ËÂçÎ̤ÎÍ©Î¤Á¤ÎÁû¡¹¤·¤¤À¼¤¬²¡¤·´ó¤»¤Æ¤­¤¿...");
449 #else
450                 msg_print("Your head is invaded by a horde of gibbering spectral voices...");
451 #endif
452
453                 set_confused(p_ptr->confused + randint1(4) + 4);
454         }
455         else if (die < 31)
456         {
457                 poly_monster(dir, plev);
458         }
459         else if (die < 36)
460         {
461                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir,
462                                   damroll(3 + ((plev - 1) / 5), 4));
463         }
464         else if (die < 41)
465         {
466                 confuse_monster (dir, plev);
467         }
468         else if (die < 46)
469         {
470                 fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
471         }
472         else if (die < 51)
473         {
474                 (void)lite_line(dir, damroll(6, 8));
475         }
476         else if (die < 56)
477         {
478                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir,
479                                   damroll(3+((plev-5)/4),8));
480         }
481         else if (die < 61)
482         {
483                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir,
484                                   damroll(5+((plev-5)/4),8));
485         }
486         else if (die < 66)
487         {
488                 fire_bolt_or_beam(beam_chance(), GF_ACID, dir,
489                                   damroll(6+((plev-5)/4),8));
490         }
491         else if (die < 71)
492         {
493                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir,
494                                   damroll(8+((plev-5)/4),8));
495         }
496         else if (die < 76)
497         {
498                 drain_life(dir, 75);
499         }
500         else if (die < 81)
501         {
502                 fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
503         }
504         else if (die < 86)
505         {
506                 fire_ball(GF_ACID, dir, 40 + plev, 2);
507         }
508         else if (die < 91)
509         {
510                 fire_ball(GF_ICE, dir, 70 + plev, 3);
511         }
512         else if (die < 96)
513         {
514                 fire_ball(GF_FIRE, dir, 80 + plev, 3);
515         }
516         else if (die < 101)
517         {
518                 drain_life(dir, 100 + plev);
519         }
520         else if (die < 104)
521         {
522                 earthquake(py, px, 12);
523         }
524         else if (die < 106)
525         {
526                 (void)destroy_area(py, px, 13 + randint0(5), FALSE);
527         }
528         else if (die < 108)
529         {
530                 symbol_genocide(plev+50, TRUE);
531         }
532         else if (die < 110)
533         {
534                 dispel_monsters(120);
535         }
536         else
537         { /* RARE */
538                 dispel_monsters(150);
539                 slow_monsters(plev);
540                 sleep_monsters(plev);
541                 hp_player(300);
542         }
543
544         if (die < 31)
545         {
546 #ifdef JP
547                 msg_print("±¢±µ¤ÊÀ¼¤¬¥¯¥¹¥¯¥¹¾Ð¤¦¡£¡Ö¤â¤¦¤¹¤°¤ª¤Þ¤¨¤Ï²æ¡¹¤ÎÃç´Ö¤Ë¤Ê¤ë¤À¤í¤¦¡£¼å¤­¼Ô¤è¡£¡×");
548 #else
549                 msg_print("Sepulchral voices chuckle. 'Soon you will join us, mortal.'");
550 #endif
551         }
552 }
553
554 /*!
555  * @brief ¥«¥ª¥¹Åª¸ú²Ì¤¢¤ë¤¤¤ÏµÚ¤Ó¥·¥ã¥Ã¥Õ¥ë¤Î¡Ö±¿Ì¿¤ÎÎء׸ú²Ì¤ò°ú¿ô´ð½à¤Ë½èÍý¤¹¤ë¡£
556  * @param spell ´ð½à¤È¤Ê¤ë°ú¿ôID
557  * @return ¤Ê¤·
558  */
559 static void wild_magic(int spell)
560 {
561         int counter = 0;
562         int type = SUMMON_BIZARRE1 + randint0(6);
563
564         if (type < SUMMON_BIZARRE1) type = SUMMON_BIZARRE1;
565         else if (type > SUMMON_BIZARRE6) type = SUMMON_BIZARRE6;
566
567         switch (randint1(spell) + randint1(8) + 1)
568         {
569         case 1:
570         case 2:
571         case 3:
572                 teleport_player(10, TELEPORT_PASSIVE);
573                 break;
574         case 4:
575         case 5:
576         case 6:
577                 teleport_player(100, TELEPORT_PASSIVE);
578                 break;
579         case 7:
580         case 8:
581                 teleport_player(200, TELEPORT_PASSIVE);
582                 break;
583         case 9:
584         case 10:
585         case 11:
586                 unlite_area(10, 3);
587                 break;
588         case 12:
589         case 13:
590         case 14:
591                 lite_area(damroll(2, 3), 2);
592                 break;
593         case 15:
594                 destroy_doors_touch();
595                 break;
596         case 16: case 17:
597                 wall_breaker();
598         case 18:
599                 sleep_monsters_touch();
600                 break;
601         case 19:
602         case 20:
603                 trap_creation(py, px);
604                 break;
605         case 21:
606         case 22:
607                 door_creation();
608                 break;
609         case 23:
610         case 24:
611         case 25:
612                 aggravate_monsters(0);
613                 break;
614         case 26:
615                 earthquake(py, px, 5);
616                 break;
617         case 27:
618         case 28:
619                 (void)gain_random_mutation(0);
620                 break;
621         case 29:
622         case 30:
623                 apply_disenchant(1);
624                 break;
625         case 31:
626                 lose_all_info();
627                 break;
628         case 32:
629                 fire_ball(GF_CHAOS, 0, spell + 5, 1 + (spell / 10));
630                 break;
631         case 33:
632                 wall_stone();
633                 break;
634         case 34:
635         case 35:
636                 while (counter++ < 8)
637                 {
638                         (void)summon_specific(0, py, px, (dun_level * 3) / 2, type, (PM_ALLOW_GROUP | PM_NO_PET));
639                 }
640                 break;
641         case 36:
642         case 37:
643                 activate_hi_summon(py, px, FALSE);
644                 break;
645         case 38:
646                 (void)summon_cyber(-1, py, px);
647                 break;
648         default:
649                 {
650                         int count = 0;
651                         (void)activate_ty_curse(FALSE, &count);
652                         break;
653                 }
654         }
655 }
656
657 /*!
658  * @brief ¥È¥é¥ó¥×Îΰè¤Î¡Ö¥·¥ã¥Ã¥Õ¥ë¡×¤Î¸ú²Ì¤ò¥é¥ó¥À¥à¤Ë·è¤á¤Æ½èÍý¤¹¤ë¡£
659  * @return ¤Ê¤·
660  */
661 static void cast_shuffle(void)
662 {
663         int plev = p_ptr->lev;
664         int dir;
665         int die;
666         int vir = virtue_number(V_CHANCE);
667         int i;
668
669         /* Card sharks and high mages get a level bonus */
670         if ((p_ptr->pclass == CLASS_ROGUE) ||
671             (p_ptr->pclass == CLASS_HIGH_MAGE) ||
672             (p_ptr->pclass == CLASS_SORCERER))
673                 die = (randint1(110)) + plev / 5;
674         else
675                 die = randint1(120);
676
677
678         if (vir)
679         {
680                 if (p_ptr->virtues[vir - 1] > 0)
681                 {
682                         while (randint1(400) < p_ptr->virtues[vir - 1]) die++;
683                 }
684                 else
685                 {
686                         while (randint1(400) < (0-p_ptr->virtues[vir - 1])) die--;
687                 }
688         }
689
690 #ifdef JP
691         msg_print("¤¢¤Ê¤¿¤Ï¥«¡¼¥É¤òÀڤäưìËç°ú¤¤¤¿...");
692 #else
693         msg_print("You shuffle the deck and draw a card...");
694 #endif
695
696         if (die < 30)
697                 chg_virtue(V_CHANCE, 1);
698
699         if (die < 7)
700         {
701 #ifdef JP
702                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô»à¡Õ¤À¡ª");
703 #else
704                 msg_print("Oh no! It's Death!");
705 #endif
706
707                 for (i = 0; i < randint1(3); i++)
708                         activate_hi_summon(py, px, FALSE);
709         }
710         else if (die < 14)
711         {
712 #ifdef JP
713                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡Ô°­Ëâ¡Õ¤À¡ª");
714 #else
715                 msg_print("Oh no! It's the Devil!");
716 #endif
717
718                 summon_specific(0, py, px, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET));
719         }
720         else if (die < 18)
721         {
722                 int count = 0;
723 #ifdef JP
724                 msg_print("¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª¡ÔÄߤé¤ì¤¿ÃË¡Õ¤À¡ª");
725 #else
726                 msg_print("Oh no! It's the Hanged Man.");
727 #endif
728
729                 activate_ty_curse(FALSE, &count);
730         }
731         else if (die < 22)
732         {
733 #ifdef JP
734                 msg_print("¡ÔÉÔĴϤηõ¡Õ¤À¡£");
735 #else
736                 msg_print("It's the swords of discord.");
737 #endif
738
739                 aggravate_monsters(0);
740         }
741         else if (die < 26)
742         {
743 #ifdef JP
744                 msg_print("¡Ô¶ò¼Ô¡Õ¤À¡£");
745 #else
746                 msg_print("It's the Fool.");
747 #endif
748
749                 do_dec_stat(A_INT);
750                 do_dec_stat(A_WIS);
751         }
752         else if (die < 30)
753         {
754 #ifdef JP
755                 msg_print("´ñ̯¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
756 #else
757                 msg_print("It's the picture of a strange monster.");
758 #endif
759
760                 trump_summoning(1, FALSE, py, px, (dun_level * 3 / 2), (32 + randint1(6)), PM_ALLOW_GROUP | PM_ALLOW_UNIQUE);
761         }
762         else if (die < 33)
763         {
764 #ifdef JP
765                 msg_print("¡Ô·î¡Õ¤À¡£");
766 #else
767                 msg_print("It's the Moon.");
768 #endif
769
770                 unlite_area(10, 3);
771         }
772         else if (die < 38)
773         {
774 #ifdef JP
775                 msg_print("¡Ô±¿Ì¿¤ÎÎØ¡Õ¤À¡£");
776 #else
777                 msg_print("It's the Wheel of Fortune.");
778 #endif
779
780                 wild_magic(randint0(32));
781         }
782         else if (die < 40)
783         {
784 #ifdef JP
785                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
786 #else
787                 msg_print("It's a teleport trump card.");
788 #endif
789
790                 teleport_player(10, TELEPORT_PASSIVE);
791         }
792         else if (die < 42)
793         {
794 #ifdef JP
795                 msg_print("¡ÔÀµµÁ¡Õ¤À¡£");
796 #else
797                 msg_print("It's Justice.");
798 #endif
799
800                 set_blessed(p_ptr->lev, FALSE);
801         }
802         else if (die < 47)
803         {
804 #ifdef JP
805                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
806 #else
807                 msg_print("It's a teleport trump card.");
808 #endif
809
810                 teleport_player(100, TELEPORT_PASSIVE);
811         }
812         else if (die < 52)
813         {
814 #ifdef JP
815                 msg_print("¥Æ¥ì¥Ý¡¼¥È¡¦¥«¡¼¥É¤À¡£");
816 #else
817                 msg_print("It's a teleport trump card.");
818 #endif
819
820                 teleport_player(200, TELEPORT_PASSIVE);
821         }
822         else if (die < 60)
823         {
824 #ifdef JP
825                 msg_print("¡ÔÅã¡Õ¤À¡£");
826 #else
827                 msg_print("It's the Tower.");
828 #endif
829
830                 wall_breaker();
831         }
832         else if (die < 72)
833         {
834 #ifdef JP
835                 msg_print("¡ÔÀáÀ©¡Õ¤À¡£");
836 #else
837                 msg_print("It's Temperance.");
838 #endif
839
840                 sleep_monsters_touch();
841         }
842         else if (die < 80)
843         {
844 #ifdef JP
845                 msg_print("¡ÔÅã¡Õ¤À¡£");
846 #else
847                 msg_print("It's the Tower.");
848 #endif
849
850                 earthquake(py, px, 5);
851         }
852         else if (die < 82)
853         {
854 #ifdef JP
855                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
856 #else
857                 msg_print("It's the picture of a friendly monster.");
858 #endif
859
860                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE1, 0L);
861         }
862         else if (die < 84)
863         {
864 #ifdef JP
865                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
866 #else
867                 msg_print("It's the picture of a friendly monster.");
868 #endif
869
870                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE2, 0L);
871         }
872         else if (die < 86)
873         {
874 #ifdef JP
875                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
876 #else
877                 msg_print("It's the picture of a friendly monster.");
878 #endif
879
880                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE4, 0L);
881         }
882         else if (die < 88)
883         {
884 #ifdef JP
885                 msg_print("ͧ¹¥Åª¤Ê¥â¥ó¥¹¥¿¡¼¤Î³¨¤À¡£");
886 #else
887                 msg_print("It's the picture of a friendly monster.");
888 #endif
889
890                 trump_summoning(1, TRUE, py, px, (dun_level * 3 / 2), SUMMON_BIZARRE5, 0L);
891         }
892         else if (die < 96)
893         {
894 #ifdef JP
895                 msg_print("¡ÔÎø¿Í¡Õ¤À¡£");
896 #else
897                 msg_print("It's the Lovers.");
898 #endif
899
900                 if (get_aim_dir(&dir))
901                         charm_monster(dir, MIN(p_ptr->lev, 20));
902         }
903         else if (die < 101)
904         {
905 #ifdef JP
906                 msg_print("¡Ô±£¼Ô¡Õ¤À¡£");
907 #else
908                 msg_print("It's the Hermit.");
909 #endif
910
911                 wall_stone();
912         }
913         else if (die < 111)
914         {
915 #ifdef JP
916                 msg_print("¡Ô¿³È½¡Õ¤À¡£");
917 #else
918                 msg_print("It's the Judgement.");
919 #endif
920
921                 do_cmd_rerate(FALSE);
922                 if (p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3)
923                 {
924 #ifdef JP
925                         msg_print("Á´¤Æ¤ÎÆÍÁ³ÊÑ°Û¤¬¼£¤Ã¤¿¡£");
926 #else
927                         msg_print("You are cured of all mutations.");
928 #endif
929
930                         p_ptr->muta1 = p_ptr->muta2 = p_ptr->muta3 = 0;
931                         p_ptr->update |= PU_BONUS;
932                         handle_stuff();
933                 }
934         }
935         else if (die < 120)
936         {
937 #ifdef JP
938                 msg_print("¡ÔÂÀÍÛ¡Õ¤À¡£");
939 #else
940                 msg_print("It's the Sun.");
941 #endif
942
943                 chg_virtue(V_KNOWLEDGE, 1);
944                 chg_virtue(V_ENLIGHTEN, 1);
945                 wiz_lite(FALSE);
946         }
947         else
948         {
949 #ifdef JP
950                 msg_print("¡ÔÀ¤³¦¡Õ¤À¡£");
951 #else
952                 msg_print("It's the World.");
953 #endif
954
955                 if (p_ptr->exp < PY_MAX_EXP)
956                 {
957                         s32b ee = (p_ptr->exp / 25) + 1;
958                         if (ee > 5000) ee = 5000;
959 #ifdef JP
960                         msg_print("¹¹¤Ë·Ð¸³¤òÀѤó¤À¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
961 #else
962                         msg_print("You feel more experienced.");
963 #endif
964
965                         gain_exp(ee);
966                 }
967         }
968 }
969
970 /*!
971  * @brief ¥«¥ª¥¹ËâË¡¡ÖήÀ±·²¡×¤Î½èÍý¤È¤·¤Æ¥×¥ì¥¤¥ä¡¼¤òÃæ¿´¤Ëð¨ÀÐÍî²¼½èÍý¤ò10+1d10²ó·«¤êÊÖ¤¹¡£
972  * / Drop 10+1d10 meteor ball at random places near the player
973  * @param dam ¥À¥á¡¼¥¸
974  * @param rad ¸úÎϤÎȾ·Â
975  * @return ¤Ê¤·
976  */
977 static void cast_meteor(int dam, int rad)
978 {
979         int i;
980         int b = 10 + randint1(10);
981
982         for (i = 0; i < b; i++)
983         {
984                 int y, x;
985                 int count;
986
987                 for (count = 0; count <= 20; count++)
988                 {
989                         int dy, dx, d;
990
991                         x = px - 8 + randint0(17);
992                         y = py - 8 + randint0(17);
993
994                         dx = (px > x) ? (px - x) : (x - px);
995                         dy = (py > y) ? (py - y) : (y - py);
996
997                         /* Approximate distance */
998                         d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
999
1000                         if (d >= 9) continue;
1001
1002                         if (!in_bounds(y, x) || !projectable(py, px, y, x)
1003                             || !cave_have_flag_bold(y, x, FF_PROJECT)) continue;
1004
1005                         /* Valid position */
1006                         break;
1007                 }
1008
1009                 if (count > 20) continue;
1010
1011                 project(0, rad, y, x, dam, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1);
1012         }
1013 }
1014
1015
1016 /*!
1017  * @brief Ç˼ÙËâË¡¡Ö¿À¤ÎÅܤê¡×¤Î½èÍý¤È¤·¤Æ¥¿¡¼¥²¥Ã¥È¤ò»ØÄꤷ¤¿¸åʬ²ò¤Î¥Ü¡¼¥ë¤òºÇÂç20²óȯÀ¸¤µ¤»¤ë¡£
1018  * @param dam ¥À¥á¡¼¥¸
1019  * @param rad ¸úÎϤÎȾ·Â
1020  * @return ¥¿¡¼¥²¥Ã¥È¤ò»ØÄꤷ¡¢¼Â¹Ô¤·¤¿¤Ê¤é¤ÐTRUE¤òÊÖ¤¹¡£
1021  */
1022 static bool cast_wrath_of_the_god(int dam, int rad)
1023 {
1024         int x, y, tx, ty;
1025         int nx, ny;
1026         int dir, i;
1027         int b = 10 + randint1(10);
1028
1029         if (!get_aim_dir(&dir)) return FALSE;
1030
1031         /* Use the given direction */
1032         tx = px + 99 * ddx[dir];
1033         ty = py + 99 * ddy[dir];
1034
1035         /* Hack -- Use an actual "target" */
1036         if ((dir == 5) && target_okay())
1037         {
1038                 tx = target_col;
1039                 ty = target_row;
1040         }
1041
1042         x = px;
1043         y = py;
1044
1045         while (1)
1046         {
1047                 /* Hack -- Stop at the target */
1048                 if ((y == ty) && (x == tx)) break;
1049
1050                 ny = y;
1051                 nx = x;
1052                 mmove2(&ny, &nx, py, px, ty, tx);
1053
1054                 /* Stop at maximum range */
1055                 if (MAX_RANGE <= distance(py, px, ny, nx)) break;
1056
1057                 /* Stopped by walls/doors */
1058                 if (!cave_have_flag_bold(ny, nx, FF_PROJECT)) break;
1059
1060                 /* Stopped by monsters */
1061                 if ((dir != 5) && cave[ny][nx].m_idx != 0) break;
1062
1063                 /* Save the new location */
1064                 x = nx;
1065                 y = ny;
1066         }
1067         tx = x;
1068         ty = y;
1069
1070         for (i = 0; i < b; i++)
1071         {
1072                 int count = 20, d = 0;
1073
1074                 while (count--)
1075                 {
1076                         int dx, dy;
1077
1078                         x = tx - 5 + randint0(11);
1079                         y = ty - 5 + randint0(11);
1080
1081                         dx = (tx > x) ? (tx - x) : (x - tx);
1082                         dy = (ty > y) ? (ty - y) : (y - ty);
1083
1084                         /* Approximate distance */
1085                         d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1));
1086                         /* Within the radius */
1087                         if (d < 5) break;
1088                 }
1089
1090                 if (count < 0) continue;
1091
1092                 /* Cannot penetrate perm walls */
1093                 if (!in_bounds(y,x) ||
1094                     cave_stop_disintegration(y,x) ||
1095                     !in_disintegration_range(ty, tx, y, x))
1096                         continue;
1097
1098                 project(0, rad, y, x, dam, GF_DISINTEGRATE, PROJECT_JUMP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1);
1099         }
1100
1101         return TRUE;
1102 }
1103
1104 /*!
1105  * @brief °­ËâÎΰè¤Î¥°¥ì¡¼¥¿¡¼¥Ç¡¼¥â¥ó¾¤´­¤ËÍøÍѲÄǽ¤Ê»àÂΤ«¤É¤¦¤«¤òÊÖ¤¹¡£ / An "item_tester_hook" for offer
1106  * @param o_ptr ¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
1107  * @return À¸ìӤ˻ÈÍѲÄǽ¤Ê»àÂΤʤé¤ÐTRUE¤òÊÖ¤¹¡£
1108  */
1109 static bool item_tester_offer(object_type *o_ptr)
1110 {
1111         /* Flasks of oil are okay */
1112         if (o_ptr->tval != TV_CORPSE) return (FALSE);
1113
1114         if (o_ptr->sval != SV_CORPSE) return (FALSE);
1115
1116         if (my_strchr("pht", r_info[o_ptr->pval].d_char)) return (TRUE);
1117
1118         /* Assume not okay */
1119         return (FALSE);
1120 }
1121
1122 /*!
1123  * @brief °­ËâÎΰè¤Î¥°¥ì¡¼¥¿¡¼¥Ç¡¼¥â¥ó¾¤´­¤ò½èÍý¤¹¤ë / Daemon spell Summon Greater Demon
1124  * @return ½èÍý¤ò¼Â¹Ô¤·¤¿¤Ê¤é¤ÐTRUE¤òÊÖ¤¹¡£
1125  */
1126 static bool cast_summon_greater_demon(void)
1127 {
1128         int plev = p_ptr->lev;
1129         int item;
1130         cptr q, s;
1131         int summon_lev;
1132         object_type *o_ptr;
1133
1134         item_tester_hook = item_tester_offer;
1135 #ifdef JP
1136         q = "¤É¤Î»àÂΤòÊû¤²¤Þ¤¹¤«? ";
1137         s = "Êû¤²¤é¤ì¤ë»àÂΤò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
1138 #else
1139         q = "Sacrifice which corpse? ";
1140         s = "You have nothing to scrifice.";
1141 #endif
1142         if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
1143
1144         /* Get the item (in the pack) */
1145         if (item >= 0)
1146         {
1147                 o_ptr = &inventory[item];
1148         }
1149
1150         /* Get the item (on the floor) */
1151         else
1152         {
1153                 o_ptr = &o_list[0 - item];
1154         }
1155
1156         summon_lev = plev * 2 / 3 + r_info[o_ptr->pval].level;
1157
1158         if (summon_specific(-1, py, px, summon_lev, SUMMON_HI_DEMON, (PM_ALLOW_GROUP | PM_FORCE_PET)))
1159         {
1160 #ifdef JP
1161                 msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
1162 #else
1163                 msg_print("The area fills with a stench of sulphur and brimstone.");
1164 #endif
1165
1166
1167 #ifdef JP
1168                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
1169 #else
1170                 msg_print("'What is thy bidding... Master?'");
1171 #endif
1172
1173                 /* Decrease the item (from the pack) */
1174                 if (item >= 0)
1175                 {
1176                         inven_item_increase(item, -1);
1177                         inven_item_describe(item);
1178                         inven_item_optimize(item);
1179                 }
1180
1181                 /* Decrease the item (from the floor) */
1182                 else
1183                 {
1184                         floor_item_increase(0 - item, -1);
1185                         floor_item_describe(0 - item);
1186                         floor_item_optimize(0 - item);
1187                 }
1188         }
1189         else
1190         {
1191 #ifdef JP
1192                 msg_print("°­Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
1193 #else
1194                 msg_print("No Greater Demon arrive.");
1195 #endif
1196         }
1197
1198         return TRUE;
1199 }
1200
1201 /*!
1202  * @brief ²Î¤Î³«»Ï¤ò½èÍý¤¹¤ë / Start singing if the player is a Bard 
1203  * @param spell ÎΰèËâË¡¤È¤·¤Æ¤ÎID
1204  * @param song ËâË¡¸ú²Ì¤ÎID
1205  * @return ¤Ê¤·
1206  */
1207 static void start_singing(int spell, int song)
1208 {
1209         /* Remember the song index */
1210         p_ptr->magic_num1[0] = song;
1211
1212         /* Remember the index of the spell which activated the song */
1213         p_ptr->magic_num2[0] = spell;
1214
1215
1216         /* Now the player is singing */
1217         set_action(ACTION_SING);
1218
1219
1220         /* Recalculate bonuses */
1221         p_ptr->update |= (PU_BONUS);
1222
1223         /* Redraw status bar */
1224         p_ptr->redraw |= (PR_STATUS);
1225 }
1226
1227 /*!
1228  * @brief ²Î¤ÎÄä»ß¤ò½èÍý¤¹¤ë / Stop singing if the player is a Bard 
1229  * @return ¤Ê¤·
1230  */
1231 void stop_singing(void)
1232 {
1233         if (p_ptr->pclass != CLASS_BARD) return;
1234
1235         /* Are there interupted song? */
1236         if (p_ptr->magic_num1[1])
1237         {
1238                 /* Forget interupted song */
1239                 p_ptr->magic_num1[1] = 0;
1240                 return;
1241         }
1242
1243         /* The player is singing? */
1244         if (!p_ptr->magic_num1[0]) return;
1245
1246         /* Hack -- if called from set_action(), avoid recursive loop */
1247         if (p_ptr->action == ACTION_SING) set_action(ACTION_NONE);
1248
1249         /* Message text of each song or etc. */
1250         do_spell(REALM_MUSIC, p_ptr->magic_num2[0], SPELL_STOP);
1251
1252         p_ptr->magic_num1[0] = MUSIC_NONE;
1253         p_ptr->magic_num2[0] = 0;
1254
1255         /* Recalculate bonuses */
1256         p_ptr->update |= (PU_BONUS);
1257
1258         /* Redraw status bar */
1259         p_ptr->redraw |= (PR_STATUS);
1260 }
1261
1262
1263 /*!
1264  * @brief À¸Ì¿ÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
1265  * @param spell ËâË¡ID
1266  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
1267  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
1268  */
1269 static cptr do_life_spell(int spell, int mode)
1270 {
1271         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
1272         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
1273         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
1274         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
1275
1276         int dir;
1277         int plev = p_ptr->lev;
1278
1279         switch (spell)
1280         {
1281         case 0:
1282 #ifdef JP
1283                 if (name) return "·Ú½ý¤Î¼£Ìþ";
1284                 if (desc) return "²ø²æ¤ÈÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
1285 #else
1286                 if (name) return "Cure Light Wounds";
1287                 if (desc) return "Heals cut and HP a little.";
1288 #endif
1289     
1290                 {
1291                         int dice = 2;
1292                         int sides = 10;
1293
1294                         if (info) return info_heal(dice, sides, 0);
1295
1296                         if (cast)
1297                         {
1298                                 hp_player(damroll(dice, sides));
1299                                 set_cut(p_ptr->cut - 10);
1300                         }
1301                 }
1302                 break;
1303
1304         case 1:
1305 #ifdef JP
1306                 if (name) return "½ËÊ¡";
1307                 if (desc) return "°ìÄê»þ´Ö¡¢Ì¿ÃæΨ¤ÈAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
1308 #else
1309                 if (name) return "Bless";
1310                 if (desc) return "Gives bonus to hit and AC for a few turns.";
1311 #endif
1312     
1313                 {
1314                         int base = 12;
1315
1316                         if (info) return info_duration(base, base);
1317
1318                         if (cast)
1319                         {
1320                                 set_blessed(randint1(base) + base, FALSE);
1321                         }
1322                 }
1323                 break;
1324
1325         case 2:
1326 #ifdef JP
1327                 if (name) return "·Ú½ý";
1328                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤Ë¾®¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1329 #else
1330                 if (name) return "Cause Light Wounds";
1331                 if (desc) return "Wounds a monster a little unless resisted.";
1332 #endif
1333     
1334                 {
1335                         int dice = 3 + (plev - 1) / 5;
1336                         int sides = 4;
1337
1338                         if (info) return info_damage(dice, sides, 0);
1339
1340                         if (cast)
1341                         {
1342                                 if (!get_aim_dir(&dir)) return NULL;
1343                                 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
1344                         }
1345                 }
1346                 break;
1347
1348         case 3:
1349 #ifdef JP
1350                 if (name) return "¸÷¤Î¾¤´­";
1351                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
1352 #else
1353                 if (name) return "Call Light";
1354                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
1355 #endif
1356     
1357                 {
1358                         int dice = 2;
1359                         int sides = plev / 2;
1360                         int rad = plev / 10 + 1;
1361
1362                         if (info) return info_damage(dice, sides, 0);
1363
1364                         if (cast)
1365                         {
1366                                 lite_area(damroll(dice, sides), rad);
1367                         }
1368                 }
1369                 break;
1370
1371         case 4:
1372 #ifdef JP
1373                 if (name) return "æ« & ±£¤·Èâ´¶ÃÎ";
1374                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤È³¬Ãʤò´¶ÃΤ¹¤ë¡£";
1375 #else
1376                 if (name) return "Detect Doors & Traps";
1377                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
1378 #endif
1379     
1380                 {
1381                         int rad = DETECT_RAD_DEFAULT;
1382
1383                         if (info) return info_radius(rad);
1384
1385                         if (cast)
1386                         {
1387                                 detect_traps(rad, TRUE);
1388                                 detect_doors(rad);
1389                                 detect_stairs(rad);
1390                         }
1391                 }
1392                 break;
1393
1394         case 5:
1395 #ifdef JP
1396                 if (name) return "½Å½ý¤Î¼£Ìþ";
1397                 if (desc) return "²ø²æ¤ÈÂÎÎϤòÃæÄøÅÙ²óÉü¤µ¤»¤ë¡£";
1398 #else
1399                 if (name) return "Cure Medium Wounds";
1400                 if (desc) return "Heals cut and HP more.";
1401 #endif
1402     
1403                 {
1404                         int dice = 4;
1405                         int sides = 10;
1406
1407                         if (info) return info_heal(dice, sides, 0);
1408
1409                         if (cast)
1410                         {
1411                                 hp_player(damroll(dice, sides));
1412                                 set_cut((p_ptr->cut / 2) - 20);
1413                         }
1414                 }
1415                 break;
1416
1417         case 6:
1418 #ifdef JP
1419                 if (name) return "²òÆÇ";
1420                 if (desc) return "ÂÎÆâ¤ÎÆǤò¼è¤ê½ü¤¯¡£";
1421 #else
1422                 if (name) return "Cure Poison";
1423                 if (desc) return "Cure poison status.";
1424 #endif
1425     
1426                 {
1427                         if (cast)
1428                         {
1429                                 set_poisoned(0);
1430                         }
1431                 }
1432                 break;
1433
1434         case 7:
1435 #ifdef JP
1436                 if (name) return "¶õÊ¢½¼Â­";
1437                 if (desc) return "ËþÊ¢¤Ë¤¹¤ë¡£";
1438 #else
1439                 if (name) return "Satisfy Hunger";
1440                 if (desc) return "Satisfies hunger.";
1441 #endif
1442     
1443                 {
1444                         if (cast)
1445                         {
1446                                 set_food(PY_FOOD_MAX - 1);
1447                         }
1448                 }
1449                 break;
1450
1451         case 8:
1452 #ifdef JP
1453                 if (name) return "²ò¼ö";
1454                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
1455 #else
1456                 if (name) return "Remove Curse";
1457                 if (desc) return "Removes normal curses from equipped items.";
1458 #endif
1459
1460                 {
1461                         if (cast)
1462                         {
1463                                 if (remove_curse())
1464                                 {
1465 #ifdef JP
1466                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1467 #else
1468                                         msg_print("You feel as if someone is watching over you.");
1469 #endif
1470                                 }
1471                         }
1472                 }
1473                 break;
1474
1475         case 9:
1476 #ifdef JP
1477                 if (name) return "½Å½ý";
1478                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ËÃæ¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1479 #else
1480                 if (name) return "Cause Medium Wounds";
1481                 if (desc) return "Wounds a monster unless resisted.";
1482 #endif
1483     
1484                 {
1485                         int sides = 8 + (plev - 5) / 4;
1486                         int dice = 8;
1487
1488                         if (info) return info_damage(dice, sides, 0);
1489
1490                         if (cast)
1491                         {
1492                                 if (!get_aim_dir(&dir)) return NULL;
1493                                 fire_ball_hide(GF_WOUNDS, dir, damroll(sides, dice), 0);
1494                         }
1495                 }
1496                 break;
1497
1498         case 10:
1499 #ifdef JP
1500                 if (name) return "Ã×Ì¿½ý¤Î¼£Ìþ";
1501                 if (desc) return "ÂÎÎϤòÂçÉý¤Ë²óÉü¤µ¤»¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1502 #else
1503                 if (name) return "Cure Critical Wounds";
1504                 if (desc) return "Heals cut, stun and HP greatly.";
1505 #endif
1506     
1507                 {
1508                         int dice = 8;
1509                         int sides = 10;
1510
1511                         if (info) return info_heal(dice, sides, 0);
1512
1513                         if (cast)
1514                         {
1515                                 hp_player(damroll(dice, sides));
1516                                 set_stun(0);
1517                                 set_cut(0);
1518                         }
1519                 }
1520                 break;
1521
1522         case 11:
1523 #ifdef JP
1524                 if (name) return "ÂÑÇ®ÂÑ´¨";
1525                 if (desc) return "°ìÄê»þ´Ö¡¢²Ð±ê¤ÈÎ䵤¤ËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
1526 #else
1527                 if (name) return "Resist Heat and Cold";
1528                 if (desc) return "Gives resistance to fire and cold. These resistances can be added to which from equipment for more powerful resistances.";
1529 #endif
1530     
1531                 {
1532                         int base = 20;
1533
1534                         if (info) return info_duration(base, base);
1535
1536                         if (cast)
1537                         {
1538                                 set_oppose_cold(randint1(base) + base, FALSE);
1539                                 set_oppose_fire(randint1(base) + base, FALSE);
1540                         }
1541                 }
1542                 break;
1543
1544         case 12:
1545 #ifdef JP
1546                 if (name) return "¼þÊÕ´¶ÃÎ";
1547                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
1548 #else
1549                 if (name) return "Sense Surroundings";
1550                 if (desc) return "Maps nearby area.";
1551 #endif
1552     
1553                 {
1554                         int rad = DETECT_RAD_MAP;
1555
1556                         if (info) return info_radius(rad);
1557
1558                         if (cast)
1559                         {
1560                                 map_area(rad);
1561                         }
1562                 }
1563                 break;
1564
1565         case 13:
1566 #ifdef JP
1567                 if (name) return "¥Ñ¥Ë¥Ã¥¯¡¦¥¢¥ó¥Ç¥Ã¥É";
1568                 if (desc) return "»ë³¦Æâ¤Î¥¢¥ó¥Ç¥Ã¥É¤ò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1569 #else
1570                 if (name) return "Turn Undead";
1571                 if (desc) return "Attempts to scare undead monsters in sight.";
1572 #endif
1573     
1574                 {
1575                         if (cast)
1576                         {
1577                                 turn_undead();
1578                         }
1579                 }
1580                 break;
1581
1582         case 14:
1583 #ifdef JP
1584                 if (name) return "ÂÎÎϲóÉü";
1585                 if (desc) return "¶Ë¤á¤Æ¶¯ÎϤʲóÉü¼öʸ¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1586 #else
1587                 if (name) return "Healing";
1588                 if (desc) return "Much powerful healing magic, and heals cut and stun completely.";
1589 #endif
1590     
1591                 {
1592                         int heal = 300;
1593
1594                         if (info) return info_heal(0, 0, heal);
1595
1596                         if (cast)
1597                         {
1598                                 hp_player(heal);
1599                                 set_stun(0);
1600                                 set_cut(0);
1601                         }
1602                 }
1603                 break;
1604
1605         case 15:
1606 #ifdef JP
1607                 if (name) return "·ë³¦¤ÎÌæ¾Ï";
1608                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
1609 #else
1610                 if (name) return "Glyph of Warding";
1611                 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.";
1612 #endif
1613     
1614                 {
1615                         if (cast)
1616                         {
1617                                 warding_glyph();
1618                         }
1619                 }
1620                 break;
1621
1622         case 16:
1623 #ifdef JP
1624                 if (name) return "*²ò¼ö*";
1625                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
1626 #else
1627                 if (name) return "Dispel Curse";
1628                 if (desc) return "Removes normal and heavy curse from equipped items.";
1629 #endif
1630     
1631                 {
1632                         if (cast)
1633                         {
1634                                 if (remove_all_curse())
1635                                 {
1636 #ifdef JP
1637                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
1638 #else
1639                                         msg_print("You feel as if someone is watching over you.");
1640 #endif
1641                                 }
1642                         }
1643                 }
1644                 break;
1645
1646         case 17:
1647 #ifdef JP
1648                 if (name) return "´Õ¼±";
1649                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
1650 #else
1651                 if (name) return "Perception";
1652                 if (desc) return "Identifies an item.";
1653 #endif
1654     
1655                 {
1656                         if (cast)
1657                         {
1658                                 if (!ident_spell(FALSE)) return NULL;
1659                         }
1660                 }
1661                 break;
1662
1663         case 18:
1664 #ifdef JP
1665                 if (name) return "¥¢¥ó¥Ç¥Ã¥ÉÂ໶";
1666                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥É¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
1667 #else
1668                 if (name) return "Dispel Undead";
1669                 if (desc) return "Damages all undead monsters in sight.";
1670 #endif
1671     
1672                 {
1673                         int dice = 1;
1674                         int sides = plev * 5;
1675
1676                         if (info) return info_damage(dice, sides, 0);
1677
1678                         if (cast)
1679                         {
1680                                 dispel_undead(damroll(dice, sides));
1681                         }
1682                 }
1683                 break;
1684
1685         case 19:
1686 #ifdef JP
1687                 if (name) return "Æä¤Î¹ï";
1688                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1689 #else
1690                 if (name) return "Day of the Dove";
1691                 if (desc) return "Attempts to charm all monsters in sight.";
1692 #endif
1693     
1694                 {
1695                         int power = plev * 2;
1696
1697                         if (info) return info_power(power);
1698
1699                         if (cast)
1700                         {
1701                                 charm_monsters(power);
1702                         }
1703                 }
1704                 break;
1705
1706         case 20:
1707 #ifdef JP
1708                 if (name) return "Ã×Ì¿½ý";
1709                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1710 #else
1711                 if (name) return "Cause Critical Wounds";
1712                 if (desc) return "Wounds a monster critically unless resisted.";
1713 #endif
1714     
1715                 {
1716                         int dice = 5 + (plev - 5) / 3;
1717                         int sides = 15;
1718
1719                         if (info) return info_damage(dice, sides, 0);
1720
1721                         if (cast)
1722                         {
1723                                 if (!get_aim_dir(&dir)) return NULL;
1724                                 fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0);
1725                         }
1726                 }
1727                 break;
1728
1729         case 21:
1730 #ifdef JP
1731                 if (name) return "µ¢´Ô¤Î¾Û";
1732                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
1733 #else
1734                 if (name) return "Word of Recall";
1735                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
1736 #endif
1737     
1738                 {
1739                         int base = 15;
1740                         int sides = 20;
1741
1742                         if (info) return info_delay(base, sides);
1743
1744                         if (cast)
1745                         {
1746                                 if (!word_of_recall()) return NULL;
1747                         }
1748                 }
1749                 break;
1750
1751         case 22:
1752 #ifdef JP
1753                 if (name) return "¿¿¼Â¤Îº×ÃÅ";
1754                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
1755 #else
1756                 if (name) return "Alter Reality";
1757                 if (desc) return "Recreates current dungeon level.";
1758 #endif
1759     
1760                 {
1761                         int base = 15;
1762                         int sides = 20;
1763
1764                         if (info) return info_delay(base, sides);
1765
1766                         if (cast)
1767                         {
1768                                 alter_reality();
1769                         }
1770                 }
1771                 break;
1772
1773         case 23:
1774 #ifdef JP
1775                 if (name) return "¿¿¡¦·ë³¦";
1776                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤È¼þ°Ï8¥Þ¥¹¤Î¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
1777 #else
1778                 if (name) return "Warding True";
1779                 if (desc) return "Creates glyphs in all adjacent squares and under you.";
1780 #endif
1781     
1782                 {
1783                         int rad = 1;
1784
1785                         if (info) return info_radius(rad);
1786
1787                         if (cast)
1788                         {
1789                                 warding_glyph();
1790                                 glyph_creation();
1791                         }
1792                 }
1793                 break;
1794
1795         case 24:
1796 #ifdef JP
1797                 if (name) return "ÉÔÌÓ²½";
1798                 if (desc) return "¤³¤Î³¬¤ÎÁý¿£¤¹¤ë¥â¥ó¥¹¥¿¡¼¤¬Áý¿£¤Ç¤­¤Ê¤¯¤Ê¤ë¡£";
1799 #else
1800                 if (name) return "Sterilization";
1801                 if (desc) return "Prevents any breeders on current level from breeding.";
1802 #endif
1803     
1804                 {
1805                         if (cast)
1806                         {
1807                                 num_repro += MAX_REPRO;
1808                         }
1809                 }
1810                 break;
1811
1812         case 25:
1813 #ifdef JP
1814                 if (name) return "Á´´¶ÃÎ";
1815                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
1816 #else
1817                 if (name) return "Detection";
1818                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
1819 #endif
1820
1821                 {
1822                         int rad = DETECT_RAD_DEFAULT;
1823
1824                         if (info) return info_radius(rad);
1825
1826                         if (cast)
1827                         {
1828                                 detect_all(rad);
1829                         }
1830                 }
1831                 break;
1832
1833         case 26:
1834 #ifdef JP
1835                 if (name) return "¥¢¥ó¥Ç¥Ã¥É¾ÃÌÇ";
1836                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë¤¤¤ë¥¢¥ó¥Ç¥Ã¥É¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
1837 #else
1838                 if (name) return "Annihilate Undead";
1839                 if (desc) return "Eliminates all nearby undead monsters, exhausting you.  Powerful or unique monsters may be able to resist.";
1840 #endif
1841     
1842                 {
1843                         int power = plev + 50;
1844
1845                         if (info) return info_power(power);
1846
1847                         if (cast)
1848                         {
1849                                 mass_genocide_undead(power, TRUE);
1850                         }
1851                 }
1852                 break;
1853
1854         case 27:
1855 #ifdef JP
1856                 if (name) return "ÀéΤ´ã";
1857                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
1858 #else
1859                 if (name) return "Clairvoyance";
1860                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
1861 #endif
1862     
1863                 {
1864                         if (cast)
1865                         {
1866                                 wiz_lite(FALSE);
1867                         }
1868                 }
1869                 break;
1870
1871         case 28:
1872 #ifdef JP
1873                 if (name) return "Á´Éü³è";
1874                 if (desc) return "¤¹¤Ù¤Æ¤Î¥¹¥Æ¡¼¥¿¥¹¤È·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
1875 #else
1876                 if (name) return "Restoration";
1877                 if (desc) return "Restores all stats and experience.";
1878 #endif
1879     
1880                 {
1881                         if (cast)
1882                         {
1883                                 do_res_stat(A_STR);
1884                                 do_res_stat(A_INT);
1885                                 do_res_stat(A_WIS);
1886                                 do_res_stat(A_DEX);
1887                                 do_res_stat(A_CON);
1888                                 do_res_stat(A_CHR);
1889                                 restore_level();
1890                         }
1891                 }
1892                 break;
1893
1894         case 29:
1895 #ifdef JP
1896                 if (name) return "*ÂÎÎϲóÉü*";
1897                 if (desc) return "ºÇ¶¯¤Î¼£Ìþ¤ÎËâË¡¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
1898 #else
1899                 if (name) return "Healing True";
1900                 if (desc) return "The greatest healing magic. Heals all HP, cut and stun.";
1901 #endif
1902     
1903                 {
1904                         int heal = 2000;
1905
1906                         if (info) return info_heal(0, 0, heal);
1907
1908                         if (cast)
1909                         {
1910                                 hp_player(heal);
1911                                 set_stun(0);
1912                                 set_cut(0);
1913                         }
1914                 }
1915                 break;
1916
1917         case 30:
1918 #ifdef JP
1919                 if (name) return "À»¤Ê¤ë¥Ó¥¸¥ç¥ó";
1920                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
1921 #else
1922                 if (name) return "Holy Vision";
1923                 if (desc) return "*Identifies* an item.";
1924 #endif
1925     
1926                 {
1927                         if (cast)
1928                         {
1929                                 if (!identify_fully(FALSE)) return NULL;
1930                         }
1931                 }
1932                 break;
1933
1934         case 31:
1935 #ifdef JP
1936                 if (name) return "µæ¶Ë¤ÎÂÑÀ­";
1937                 if (desc) return "°ìÄê»þ´Ö¡¢¤¢¤é¤æ¤ëÂÑÀ­¤òÉÕ¤±¡¢AC¤ÈËâË¡ËɸæǽÎϤò¾å¾º¤µ¤»¤ë¡£";
1938 #else
1939                 if (name) return "Ultimate Resistance";
1940                 if (desc) return "Gives ultimate resistance, bonus to AC and speed.";
1941 #endif
1942     
1943                 {
1944                         int base = plev / 2;
1945
1946                         if (info) return info_duration(base, base);
1947
1948                         if (cast)
1949                         {
1950                                 int v = randint1(base) + base;
1951                                 set_fast(v, FALSE);
1952                                 set_oppose_acid(v, FALSE);
1953                                 set_oppose_elec(v, FALSE);
1954                                 set_oppose_fire(v, FALSE);
1955                                 set_oppose_cold(v, FALSE);
1956                                 set_oppose_pois(v, FALSE);
1957                                 set_ultimate_res(v, FALSE);
1958                         }
1959                 }
1960                 break;
1961         }
1962
1963         return "";
1964 }
1965
1966 /*!
1967  * @brief Àç½ÑÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
1968  * @param spell ËâË¡ID
1969  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
1970  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
1971  */
1972 static cptr do_sorcery_spell(int spell, int mode)
1973 {
1974         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
1975         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
1976         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
1977         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
1978
1979         int dir;
1980         int plev = p_ptr->lev;
1981
1982         switch (spell)
1983         {
1984         case 0:
1985 #ifdef JP
1986                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
1987                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
1988 #else
1989                 if (name) return "Detect Monsters";
1990                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
1991 #endif
1992     
1993                 {
1994                         int rad = DETECT_RAD_DEFAULT;
1995
1996                         if (info) return info_radius(rad);
1997
1998                         if (cast)
1999                         {
2000                                 detect_monsters_normal(rad);
2001                         }
2002                 }
2003                 break;
2004
2005         case 1:
2006 #ifdef JP
2007                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
2008                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
2009 #else
2010                 if (name) return "Phase Door";
2011                 if (desc) return "Teleport short distance.";
2012 #endif
2013     
2014                 {
2015                         int range = 10;
2016
2017                         if (info) return info_range(range);
2018
2019                         if (cast)
2020                         {
2021                                 teleport_player(range, 0L);
2022                         }
2023                 }
2024                 break;
2025
2026         case 2:
2027 #ifdef JP
2028                 if (name) return "櫤ÈÈâ´¶ÃÎ";
2029                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤ÎÈâ¤È櫤ò´¶ÃΤ¹¤ë¡£";
2030 #else
2031                 if (name) return "Detect Doors and Traps";
2032                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
2033 #endif
2034     
2035                 {
2036                         int rad = DETECT_RAD_DEFAULT;
2037
2038                         if (info) return info_radius(rad);
2039
2040                         if (cast)
2041                         {
2042                                 detect_traps(rad, TRUE);
2043                                 detect_doors(rad);
2044                                 detect_stairs(rad);
2045                         }
2046                 }
2047                 break;
2048
2049         case 3:
2050 #ifdef JP
2051                 if (name) return "¥é¥¤¥È¡¦¥¨¥ê¥¢";
2052                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
2053 #else
2054                 if (name) return "Light Area";
2055                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
2056 #endif
2057     
2058                 {
2059                         int dice = 2;
2060                         int sides = plev / 2;
2061                         int rad = plev / 10 + 1;
2062
2063                         if (info) return info_damage(dice, sides, 0);
2064
2065                         if (cast)
2066                         {
2067                                 lite_area(damroll(dice, sides), rad);
2068                         }
2069                 }
2070                 break;
2071
2072         case 4:
2073 #ifdef JP
2074                 if (name) return "¥Ñ¥Ë¥Ã¥¯¡¦¥â¥ó¥¹¥¿¡¼";
2075                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤòº®Í𤵤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2076 #else
2077                 if (name) return "Confuse Monster";
2078                 if (desc) return "Attempts to confuse a monster.";
2079 #endif
2080     
2081                 {
2082                         int power = (plev * 3) / 2;
2083
2084                         if (info) return info_power(power);
2085
2086                         if (cast)
2087                         {
2088                                 if (!get_aim_dir(&dir)) return NULL;
2089
2090                                 confuse_monster(dir, power);
2091                         }
2092                 }
2093                 break;
2094
2095         case 5:
2096 #ifdef JP
2097                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
2098                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
2099 #else
2100                 if (name) return "Teleport";
2101                 if (desc) return "Teleport long distance.";
2102 #endif
2103     
2104                 {
2105                         int range = plev * 5;
2106
2107                         if (info) return info_range(range);
2108
2109                         if (cast)
2110                         {
2111                                 teleport_player(range, 0L);
2112                         }
2113                 }
2114                 break;
2115
2116         case 6:
2117 #ifdef JP
2118                 if (name) return "¥¹¥ê¡¼¥×¡¦¥â¥ó¥¹¥¿¡¼";
2119                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2120 #else
2121                 if (name) return "Sleep Monster";
2122                 if (desc) return "Attempts to sleep a monster.";
2123 #endif
2124     
2125                 {
2126                         int power = plev;
2127
2128                         if (info) return info_power(power);
2129
2130                         if (cast)
2131                         {
2132                                 if (!get_aim_dir(&dir)) return NULL;
2133
2134                                 sleep_monster(dir, plev);
2135                         }
2136                 }
2137                 break;
2138
2139         case 7:
2140 #ifdef JP
2141                 if (name) return "ËâÎϽ¼Å¶";
2142                 if (desc) return "¾ó/ËâË¡ËÀ¤Î½¼Å¶²ó¿ô¤òÁý¤ä¤¹¤«¡¢½¼Å¶Ãæ¤Î¥í¥Ã¥É¤Î½¼Å¶»þ´Ö¤ò¸º¤é¤¹¡£";
2143 #else
2144                 if (name) return "Recharging";
2145                 if (desc) return "Recharges staffs, wands or rods.";
2146 #endif
2147     
2148                 {
2149                         int power = plev * 4;
2150
2151                         if (info) return info_power(power);
2152
2153                         if (cast)
2154                         {
2155                                 if (!recharge(power)) return NULL;
2156                         }
2157                 }
2158                 break;
2159
2160         case 8:
2161 #ifdef JP
2162                 if (name) return "ËâË¡¤ÎÃÏ¿Þ";
2163                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
2164 #else
2165                 if (name) return "Magic Mapping";
2166                 if (desc) return "Maps nearby area.";
2167 #endif
2168     
2169                 {
2170                         int rad = DETECT_RAD_MAP;
2171
2172                         if (info) return info_radius(rad);
2173
2174                         if (cast)
2175                         {
2176                                 map_area(rad);
2177                         }
2178                 }
2179                 break;
2180
2181         case 9:
2182 #ifdef JP
2183                 if (name) return "´ÕÄê";
2184                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
2185 #else
2186                 if (name) return "Identify";
2187                 if (desc) return "Identifies an item.";
2188 #endif
2189     
2190                 {
2191                         if (cast)
2192                         {
2193                                 if (!ident_spell(FALSE)) return NULL;
2194                         }
2195                 }
2196                 break;
2197
2198         case 10:
2199 #ifdef JP
2200                 if (name) return "¥¹¥í¥¦¡¦¥â¥ó¥¹¥¿¡¼";
2201                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¸ºÂ®¤µ¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2202 #else
2203                 if (name) return "Slow Monster";
2204                 if (desc) return "Attempts to slow a monster.";
2205 #endif
2206     
2207                 {
2208                         int power = plev;
2209
2210                         if (info) return info_power(power);
2211
2212                         if (cast)
2213                         {
2214                                 if (!get_aim_dir(&dir)) return NULL;
2215
2216                                 slow_monster(dir, plev);
2217                         }
2218                 }
2219                 break;
2220
2221         case 11:
2222 #ifdef JP
2223                 if (name) return "¼þÊÕ¥¹¥ê¡¼¥×";
2224                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2225 #else
2226                 if (name) return "Mass Sleep";
2227                 if (desc) return "Attempts to sleep all monsters in sight.";
2228 #endif
2229     
2230                 {
2231                         int power = plev;
2232
2233                         if (info) return info_power(power);
2234
2235                         if (cast)
2236                         {
2237                                 sleep_monsters(plev);
2238                         }
2239                 }
2240                 break;
2241
2242         case 12:
2243 #ifdef JP
2244                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
2245                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2246 #else
2247                 if (name) return "Teleport Away";
2248                 if (desc) return "Teleports all monsters on the line away unless resisted.";
2249 #endif
2250     
2251                 {
2252                         int power = plev;
2253
2254                         if (info) return info_power(power);
2255
2256                         if (cast)
2257                         {
2258                                 if (!get_aim_dir(&dir)) return NULL;
2259
2260                                 fire_beam(GF_AWAY_ALL, dir, power);
2261                         }
2262                 }
2263                 break;
2264
2265         case 13:
2266 #ifdef JP
2267                 if (name) return "¥¹¥Ô¡¼¥É";
2268                 if (desc) return "°ìÄê»þ´Ö¡¢²Ã®¤¹¤ë¡£";
2269 #else
2270                 if (name) return "Haste Self";
2271                 if (desc) return "Hastes you for a while.";
2272 #endif
2273     
2274                 {
2275                         int base = plev;
2276                         int sides = 20 + plev;
2277
2278                         if (info) return info_duration(base, sides);
2279
2280                         if (cast)
2281                         {
2282                                 set_fast(randint1(sides) + base, FALSE);
2283                         }
2284                 }
2285                 break;
2286
2287         case 14:
2288 #ifdef JP
2289                 if (name) return "¿¿¡¦´¶ÃÎ";
2290                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
2291 #else
2292                 if (name) return "Detection True";
2293                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
2294 #endif
2295     
2296                 {
2297                         int rad = DETECT_RAD_DEFAULT;
2298
2299                         if (info) return info_radius(rad);
2300
2301                         if (cast)
2302                         {
2303                                 detect_all(rad);
2304                         }
2305                 }
2306                 break;
2307
2308         case 15:
2309 #ifdef JP
2310                 if (name) return "¿¿¡¦´ÕÄê";
2311                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
2312 #else
2313                 if (name) return "Identify True";
2314                 if (desc) return "*Identifies* an item.";
2315 #endif
2316     
2317                 {
2318                         if (cast)
2319                         {
2320                                 if (!identify_fully(FALSE)) return NULL;
2321                         }
2322                 }
2323                 break;
2324
2325         case 16:
2326 #ifdef JP
2327                 if (name) return "ʪÂΤȺâÊõ´¶ÃÎ";
2328                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥¢¥¤¥Æ¥à¤ÈºâÊõ¤ò´¶ÃΤ¹¤ë¡£";
2329 #else
2330                 if (name) return "Detect items and Treasure";
2331                 if (desc) return "Detects all treasures and items in your vicinity.";
2332 #endif
2333     
2334                 {
2335                         int rad = DETECT_RAD_DEFAULT;
2336
2337                         if (info) return info_radius(rad);
2338
2339                         if (cast)
2340                         {
2341                                 detect_objects_normal(rad);
2342                                 detect_treasure(rad);
2343                                 detect_objects_gold(rad);
2344                         }
2345                 }
2346                 break;
2347
2348         case 17:
2349 #ifdef JP
2350                 if (name) return "¥Á¥ã¡¼¥à¡¦¥â¥ó¥¹¥¿¡¼";
2351                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2352 #else
2353                 if (name) return "Charm Monster";
2354                 if (desc) return "Attempts to charm a monster.";
2355 #endif
2356     
2357                 {
2358                         int power = plev;
2359
2360                         if (info) return info_power(power);
2361
2362                         if (cast)
2363                         {
2364                                 if (!get_aim_dir(&dir)) return NULL;
2365
2366                                 charm_monster(dir, power);
2367                         }
2368                 }
2369                 break;
2370
2371         case 18:
2372 #ifdef JP
2373                 if (name) return "Àº¿À´¶ÃÎ";
2374                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
2375 #else
2376                 if (name) return "Sense Minds";
2377                 if (desc) return "Gives telepathy for a while.";
2378 #endif
2379     
2380                 {
2381                         int base = 25;
2382                         int sides = 30;
2383
2384                         if (info) return info_duration(base, sides);
2385
2386                         if (cast)
2387                         {
2388                                 set_tim_esp(randint1(sides) + base, FALSE);
2389                         }
2390                 }
2391                 break;
2392
2393         case 19:
2394 #ifdef JP
2395                 if (name) return "³¹°ÜÆ°";
2396                 if (desc) return "³¹¤Ø°ÜÆ°¤¹¤ë¡£ÃϾå¤Ë¤¤¤ë¤È¤­¤·¤«»È¤¨¤Ê¤¤¡£";
2397 #else
2398                 if (name) return "Teleport to town";
2399                 if (desc) return "Teleport to a town which you choose in a moment. Can only be used outdoors.";
2400 #endif
2401     
2402                 {
2403                         if (cast)
2404                         {
2405                                 if (!tele_town()) return NULL;
2406                         }
2407                 }
2408                 break;
2409
2410         case 20:
2411 #ifdef JP
2412                 if (name) return "¼«¸ÊʬÀÏ";
2413                 if (desc) return "¸½ºß¤Î¼«Ê¬¤Î¾õÂÖ¤ò´°Á´¤ËÃΤ롣";
2414 #else
2415                 if (name) return "Self Knowledge";
2416                 if (desc) return "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.";
2417 #endif
2418     
2419                 {
2420                         if (cast)
2421                         {
2422                                 self_knowledge();
2423                         }
2424                 }
2425                 break;
2426
2427         case 21:
2428 #ifdef JP
2429                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
2430                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
2431 #else
2432                 if (name) return "Teleport Level";
2433                 if (desc) return "Teleport to up or down stairs in a moment.";
2434 #endif
2435     
2436                 {
2437                         if (cast)
2438                         {
2439 #ifdef JP
2440                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
2441 #else
2442                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
2443 #endif
2444                                 teleport_level(0);
2445                         }
2446                 }
2447                 break;
2448
2449         case 22:
2450 #ifdef JP
2451                 if (name) return "µ¢´Ô¤Î¼öʸ";
2452                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
2453 #else
2454                 if (name) return "Word of Recall";
2455                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
2456 #endif
2457     
2458                 {
2459                         int base = 15;
2460                         int sides = 20;
2461
2462                         if (info) return info_delay(base, sides);
2463
2464                         if (cast)
2465                         {
2466                                 if (!word_of_recall()) return NULL;
2467                         }
2468                 }
2469                 break;
2470
2471         case 23:
2472 #ifdef JP
2473                 if (name) return "¼¡¸µ¤ÎÈâ";
2474                 if (desc) return "ûµ÷Î¥Æâ¤Î»ØÄꤷ¤¿¾ì½ê¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
2475 #else
2476                 if (name) return "Dimension Door";
2477                 if (desc) return "Teleport to given location.";
2478 #endif
2479     
2480                 {
2481                         int range = plev / 2 + 10;
2482
2483                         if (info) return info_range(range);
2484
2485                         if (cast)
2486                         {
2487 #ifdef JP
2488                                 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
2489 #else
2490                                 msg_print("You open a dimensional gate. Choose a destination.");
2491 #endif
2492
2493                                 if (!dimension_door()) return NULL;
2494                         }
2495                 }
2496                 break;
2497
2498         case 24:
2499 #ifdef JP
2500                 if (name) return "Ä´ºº";
2501                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤Î°À­¡¢»Ä¤êÂÎÎÏ¡¢ºÇÂçÂÎÎÏ¡¢¥¹¥Ô¡¼¥É¡¢ÀµÂΤòÃΤ롣";
2502 #else
2503                 if (name) return "Probing";
2504                 if (desc) return "Proves all monsters' alignment, HP, speed and their true character.";
2505 #endif
2506     
2507                 {
2508                         if (cast)
2509                         {
2510                                 probing();
2511                         }
2512                 }
2513                 break;
2514
2515         case 25:
2516 #ifdef JP
2517                 if (name) return "Çúȯ¤Î¥ë¡¼¥ó";
2518                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤ë¤ÈÇúȯ¤·¤Æ¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
2519 #else
2520                 if (name) return "Explosive Rune";
2521                 if (desc) return "Sets a glyph under you. The glyph will explode when a monster moves on it.";
2522 #endif
2523     
2524                 {
2525                         int dice = 7;
2526                         int sides = 7;
2527                         int base = plev;
2528
2529                         if (info) return info_damage(dice, sides, base);
2530
2531                         if (cast)
2532                         {
2533                                 explosive_rune();
2534                         }
2535                 }
2536                 break;
2537
2538         case 26:
2539 #ifdef JP
2540                 if (name) return "Ç°Æ°ÎÏ";
2541                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼«Ê¬¤Î­¸µ¤Ø°ÜÆ°¤µ¤»¤ë¡£";
2542 #else
2543                 if (name) return "Telekinesis";
2544                 if (desc) return "Pulls a distant item close to you.";
2545 #endif
2546     
2547                 {
2548                         int weight = plev * 15;
2549
2550                         if (info) return info_weight(weight);
2551
2552                         if (cast)
2553                         {
2554                                 if (!get_aim_dir(&dir)) return NULL;
2555
2556                                 fetch(dir, weight, FALSE);
2557                         }
2558                 }
2559                 break;
2560
2561         case 27:
2562 #ifdef JP
2563                 if (name) return "ÀéΤ´ã";
2564                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤µ¤é¤Ë¡¢°ìÄê»þ´Ö¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
2565 #else
2566                 if (name) return "Clairvoyance";
2567                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
2568 #endif
2569     
2570                 {
2571                         int base = 25;
2572                         int sides = 30;
2573
2574                         if (info) return info_duration(base, sides);
2575
2576                         if (cast)
2577                         {
2578                                 chg_virtue(V_KNOWLEDGE, 1);
2579                                 chg_virtue(V_ENLIGHTEN, 1);
2580
2581                                 wiz_lite(FALSE);
2582
2583                                 if (!p_ptr->telepathy)
2584                                 {
2585                                         set_tim_esp(randint1(sides) + base, FALSE);
2586                                 }
2587                         }
2588                 }
2589                 break;
2590
2591         case 28:
2592 #ifdef JP
2593                 if (name) return "̥λ¤Î»ëÀþ";
2594                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2595 #else
2596                 if (name) return "Charm monsters";
2597                 if (desc) return "Attempts to charm all monsters in sight.";
2598 #endif
2599     
2600                 {
2601                         int power = plev * 2;
2602
2603                         if (info) return info_power(power);
2604
2605                         if (cast)
2606                         {
2607                                 charm_monsters(power);
2608                         }
2609                 }
2610                 break;
2611
2612         case 29:
2613 #ifdef JP
2614                 if (name) return "Ï£¶â½Ñ";
2615                 if (desc) return "¥¢¥¤¥Æ¥à1¤Ä¤ò¤ª¶â¤ËÊѤ¨¤ë¡£";
2616 #else
2617                 if (name) return "Alchemy";
2618                 if (desc) return "Turns an item into 1/3 of its value in gold.";
2619 #endif
2620     
2621                 {
2622                         if (cast)
2623                         {
2624                                 if (!alchemy()) return NULL;
2625                         }
2626                 }
2627                 break;
2628
2629         case 30:
2630 #ifdef JP
2631                 if (name) return "²øʪÄÉÊü";
2632                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2633 #else
2634                 if (name) return "Banishment";
2635                 if (desc) return "Teleports all monsters in sight away unless resisted.";
2636 #endif
2637     
2638                 {
2639                         int power = plev * 4;
2640
2641                         if (info) return info_power(power);
2642
2643                         if (cast)
2644                         {
2645                                 banish_monsters(power);
2646                         }
2647                 }
2648                 break;
2649
2650         case 31:
2651 #ifdef JP
2652                 if (name) return "̵½ý¤Îµå";
2653                 if (desc) return "°ìÄê»þ´Ö¡¢¥À¥á¡¼¥¸¤ò¼õ¤±¤Ê¤¯¤Ê¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£Àڤ줿½Ö´Ö¤Ë¾¯¤·¥¿¡¼¥ó¤ò¾ÃÈñ¤¹¤ë¤Î¤ÇÃí°Õ¡£";
2654 #else
2655                 if (name) return "Globe of Invulnerability";
2656                 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.";
2657 #endif
2658     
2659                 {
2660                         int base = 4;
2661
2662                         if (info) return info_duration(base, base);
2663
2664                         if (cast)
2665                         {
2666                                 set_invuln(randint1(base) + base, FALSE);
2667                         }
2668                 }
2669                 break;
2670         }
2671
2672         return "";
2673 }
2674
2675
2676 /*!
2677  * @brief ¼«Á³ÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
2678  * @param spell ËâË¡ID
2679  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
2680  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
2681  */
2682 static cptr do_nature_spell(int spell, int mode)
2683 {
2684         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
2685         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
2686         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
2687         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
2688
2689 #ifdef JP
2690         static const char s_dam[] = "»½ý:";
2691         static const char s_rng[] = "¼ÍÄø";
2692 #else
2693         static const char s_dam[] = "dam ";
2694         static const char s_rng[] = "rng ";
2695 #endif
2696
2697         int dir;
2698         int plev = p_ptr->lev;
2699
2700         switch (spell)
2701         {
2702         case 0:
2703 #ifdef JP
2704                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
2705                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
2706 #else
2707                 if (name) return "Detect Creatures";
2708                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
2709 #endif
2710     
2711                 {
2712                         int rad = DETECT_RAD_DEFAULT;
2713
2714                         if (info) return info_radius(rad);
2715
2716                         if (cast)
2717                         {
2718                                 detect_monsters_normal(rad);
2719                         }
2720                 }
2721                 break;
2722
2723         case 1:
2724 #ifdef JP
2725                 if (name) return "°ðºÊ";
2726                 if (desc) return "ÅÅ·â¤Îû¤¤¥Ó¡¼¥à¤òÊü¤Ä¡£";
2727 #else
2728                 if (name) return "Lightning";
2729                 if (desc) return "Fires a short beam of lightning.";
2730 #endif
2731     
2732                 {
2733                         int dice = 3 + (plev - 1) / 5;
2734                         int sides = 4;
2735                         int range = plev / 6 + 2;
2736
2737                         if (info) return format("%s%dd%d %s%d", s_dam, dice, sides, s_rng, range);
2738
2739                         if (cast)
2740                         {
2741                                 project_length = range;
2742
2743                                 if (!get_aim_dir(&dir)) return NULL;
2744
2745                                 fire_beam(GF_ELEC, dir, damroll(dice, sides));
2746                         }
2747                 }
2748                 break;
2749
2750         case 2:
2751 #ifdef JP
2752                 if (name) return "櫤ÈÈâ´¶ÃÎ";
2753                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤ò´¶ÃΤ¹¤ë¡£";
2754 #else
2755                 if (name) return "Detect Doors and Traps";
2756                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
2757 #endif
2758     
2759                 {
2760                         int rad = DETECT_RAD_DEFAULT;
2761
2762                         if (info) return info_radius(rad);
2763
2764                         if (cast)
2765                         {
2766                                 detect_traps(rad, TRUE);
2767                                 detect_doors(rad);
2768                                 detect_stairs(rad);
2769                         }
2770                 }
2771                 break;
2772
2773         case 3:
2774 #ifdef JP
2775                 if (name) return "¿©ÎÈÀ¸À®";
2776                 if (desc) return "¿©ÎÁ¤ò°ì¤Äºî¤ê½Ð¤¹¡£";
2777 #else
2778                 if (name) return "Produce Food";
2779                 if (desc) return "Produces a Ration of Food.";
2780 #endif
2781     
2782                 {
2783                         if (cast)
2784                         {
2785                                 object_type forge, *q_ptr = &forge;
2786
2787 #ifdef JP
2788                                 msg_print("¿©ÎÁ¤òÀ¸À®¤·¤¿¡£");
2789 #else
2790                                 msg_print("A food ration is produced.");
2791 #endif
2792
2793                                 /* Create the food ration */
2794                                 object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
2795
2796                                 /* Drop the object from heaven */
2797                                 drop_near(q_ptr, -1, py, px);
2798                         }
2799                 }
2800                 break;
2801
2802         case 4:
2803 #ifdef JP
2804                 if (name) return "Æü¤Î¸÷";
2805                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
2806 #else
2807                 if (name) return "Daylight";
2808                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
2809 #endif
2810     
2811                 {
2812                         int dice = 2;
2813                         int sides = plev / 2;
2814                         int rad = (plev / 10) + 1;
2815
2816                         if (info) return info_damage(dice, sides, 0);
2817
2818                         if (cast)
2819                         {
2820                                 lite_area(damroll(dice, sides), rad);
2821
2822                                 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
2823                                 {
2824 #ifdef JP
2825                                         msg_print("Æü¤Î¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
2826 #else
2827                                         msg_print("The daylight scorches your flesh!");
2828 #endif
2829
2830 #ifdef JP
2831                                         take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "Æü¤Î¸÷", -1);
2832 #else
2833                                         take_hit(DAMAGE_NOESCAPE, damroll(2, 2), "daylight", -1);
2834 #endif
2835                                 }
2836                         }
2837                 }
2838                 break;
2839
2840         case 5:
2841 #ifdef JP
2842                 if (name) return "ưʪ½¬¤·";
2843                 if (desc) return "ưʪ1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
2844 #else
2845                 if (name) return "Animal Taming";
2846                 if (desc) return "Attempts to charm an animal.";
2847 #endif
2848     
2849                 {
2850                         int power = plev;
2851
2852                         if (info) return info_power(power);
2853
2854                         if (cast)
2855                         {
2856                                 if (!get_aim_dir(&dir)) return NULL;
2857
2858                                 charm_animal(dir, power);
2859                         }
2860                 }
2861                 break;
2862
2863         case 6:
2864 #ifdef JP
2865                 if (name) return "´Ä¶­¤Ø¤ÎÂÑÀ­";
2866                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¡¢±ê¡¢ÅÅ·â¤ËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
2867 #else
2868                 if (name) return "Resist Environment";
2869                 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.";
2870 #endif
2871     
2872                 {
2873                         int base = 20;
2874
2875                         if (info) return info_duration(base, base);
2876
2877                         if (cast)
2878                         {
2879                                 set_oppose_cold(randint1(base) + base, FALSE);
2880                                 set_oppose_fire(randint1(base) + base, FALSE);
2881                                 set_oppose_elec(randint1(base) + base, FALSE);
2882                         }
2883                 }
2884                 break;
2885
2886         case 7:
2887 #ifdef JP
2888                 if (name) return "½ý¤ÈÆǼ£ÎÅ";
2889                 if (desc) return "²ø²æ¤òÁ´²÷¤µ¤»¡¢ÆǤòÂΤ«¤é´°Á´¤Ë¼è¤ê½ü¤­¡¢ÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
2890 #else
2891                 if (name) return "Cure Wounds & Poison";
2892                 if (desc) return "Heals all cut and poison status. Heals HP a little.";
2893 #endif
2894     
2895                 {
2896                         int dice = 2;
2897                         int sides = 8;
2898
2899                         if (info) return info_heal(dice, sides, 0);
2900
2901                         if (cast)
2902                         {
2903                                 hp_player(damroll(dice, sides));
2904                                 set_cut(0);
2905                                 set_poisoned(0);
2906                         }
2907                 }
2908                 break;
2909
2910         case 8:
2911 #ifdef JP
2912                 if (name) return "´äÀÐÍϲò";
2913                 if (desc) return "ÊɤòÍϤ«¤·¤Æ¾²¤Ë¤¹¤ë¡£";
2914 #else
2915                 if (name) return "Stone to Mud";
2916                 if (desc) return "Turns one rock square to mud.";
2917 #endif
2918     
2919                 {
2920                         int dice = 1;
2921                         int sides = 30;
2922                         int base = 20;
2923
2924                         if (info) return info_damage(dice, sides, base);
2925
2926                         if (cast)
2927                         {
2928                                 if (!get_aim_dir(&dir)) return NULL;
2929
2930                                 wall_to_mud(dir, 20 + randint1(30));
2931                         }
2932                 }
2933                 break;
2934
2935         case 9:
2936 #ifdef JP
2937                 if (name) return "¥¢¥¤¥¹¡¦¥Ü¥ë¥È";
2938                 if (desc) return "Î䵤¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
2939 #else
2940                 if (name) return "Frost Bolt";
2941                 if (desc) return "Fires a bolt or beam of cold.";
2942 #endif
2943     
2944                 {
2945                         int dice = 3 + (plev - 5) / 4;
2946                         int sides = 8;
2947
2948                         if (info) return info_damage(dice, sides, 0);
2949
2950                         if (cast)
2951                         {
2952                                 if (!get_aim_dir(&dir)) return NULL;
2953                                 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir, damroll(dice, sides));
2954                         }
2955                 }
2956                 break;
2957
2958         case 10:
2959 #ifdef JP
2960                 if (name) return "¼«Á³¤Î³ÐÀÃ";
2961                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ·¡¢¶á¤¯¤Îæ«¡¢Èâ¡¢³¬ÃÊ¡¢Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
2962 #else
2963                 if (name) return "Nature Awareness";
2964                 if (desc) return "Maps nearby area. Detects all monsters, traps, doors and stairs.";
2965 #endif
2966     
2967                 {
2968                         int rad1 = DETECT_RAD_MAP;
2969                         int rad2 = DETECT_RAD_DEFAULT;
2970
2971                         if (info) return info_radius(MAX(rad1, rad2));
2972
2973                         if (cast)
2974                         {
2975                                 map_area(rad1);
2976                                 detect_traps(rad2, TRUE);
2977                                 detect_doors(rad2);
2978                                 detect_stairs(rad2);
2979                                 detect_monsters_normal(rad2);
2980                         }
2981                 }
2982                 break;
2983
2984         case 11:
2985 #ifdef JP
2986                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";
2987                 if (desc) return "²Ð±ê¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
2988 #else
2989                 if (name) return "Fire Bolt";
2990                 if (desc) return "Fires a bolt or beam of fire.";
2991 #endif
2992     
2993                 {
2994                         int dice = 5 + (plev - 5) / 4;
2995                         int sides = 8;
2996
2997                         if (info) return info_damage(dice, sides, 0);
2998
2999                         if (cast)
3000                         {
3001                                 if (!get_aim_dir(&dir)) return NULL;
3002                                 fire_bolt_or_beam(beam_chance() - 10, GF_FIRE, dir, damroll(dice, sides));
3003                         }
3004                 }
3005                 break;
3006
3007         case 12:
3008 #ifdef JP
3009                 if (name) return "ÂÀÍÛ¸÷Àþ";
3010                 if (desc) return "¸÷Àþ¤òÊü¤Ä¡£¸÷¤ê¤ò·ù¤¦¥â¥ó¥¹¥¿¡¼¤Ë¸ú²Ì¤¬¤¢¤ë¡£";
3011 #else
3012                 if (name) return "Ray of Sunlight";
3013                 if (desc) return "Fires a beam of light which damages to light-sensitive monsters.";
3014 #endif
3015     
3016                 {
3017                         int dice = 6;
3018                         int sides = 8;
3019
3020                         if (info) return info_damage(dice, sides, 0);
3021
3022                         if (cast)
3023                         {
3024                                 if (!get_aim_dir(&dir)) return NULL;
3025 #ifdef JP
3026                                 msg_print("ÂÀÍÛ¸÷Àþ¤¬¸½¤ì¤¿¡£");
3027 #else
3028                                 msg_print("A line of sunlight appears.");
3029 #endif
3030
3031                                 lite_line(dir, damroll(6, 8));
3032                         }
3033                 }
3034                 break;
3035
3036         case 13:
3037 #ifdef JP
3038                 if (name) return "­¤«¤»";
3039                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3040 #else
3041                 if (name) return "Entangle";
3042                 if (desc) return "Attempts to slow all monsters in sight.";
3043 #endif
3044     
3045                 {
3046                         int power = plev;
3047
3048                         if (info) return info_power(power);
3049
3050                         if (cast)
3051                         {
3052                                 slow_monsters(plev);
3053                         }
3054                 }
3055                 break;
3056
3057         case 14:
3058 #ifdef JP
3059                 if (name) return "ưʪ¾¤´­";
3060                 if (desc) return "ưʪ¤ò1Âξ¤´­¤¹¤ë¡£";
3061 #else
3062                 if (name) return "Summon Animal";
3063                 if (desc) return "Summons an animal.";
3064 #endif
3065     
3066                 {
3067                         if (cast)
3068                         {
3069                                 if (!(summon_specific(-1, py, px, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))
3070                                 {
3071 #ifdef JP
3072                                         msg_print("ưʪ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
3073 #else
3074                                         msg_print("No animals arrive.");
3075 #endif
3076                                 }
3077                                 break;
3078                         }
3079                 }
3080                 break;
3081
3082         case 15:
3083 #ifdef JP
3084                 if (name) return "ÌôÁð¼£ÎÅ";
3085                 if (desc) return "ÂÎÎϤòÂçÉý¤Ë²óÉü¤µ¤»¡¢Éé½ý¡¢Û¯Û°¾õÂÖ¡¢ÆǤ«¤éÁ´²÷¤¹¤ë¡£";
3086 #else
3087                 if (name) return "Herbal Healing";
3088                 if (desc) return "Heals HP greatly. And heals cut, stun and poison completely.";
3089 #endif
3090     
3091                 {
3092                         int heal = 500;
3093
3094                         if (info) return info_heal(0, 0, heal);
3095
3096                         if (cast)
3097                         {
3098                                 hp_player(heal);
3099                                 set_stun(0);
3100                                 set_cut(0);
3101                                 set_poisoned(0);
3102                         }
3103                 }
3104                 break;
3105
3106         case 16:
3107 #ifdef JP
3108                 if (name) return "³¬ÃÊÀ¸À®";
3109                 if (desc) return "¼«Ê¬¤Î¤¤¤ë°ÌÃ֤˳¬Ãʤòºî¤ë¡£";
3110 #else
3111                 if (name) return "Stair Building";
3112                 if (desc) return "Creates a stair which goes down or up.";
3113 #endif
3114     
3115                 {
3116                         if (cast)
3117                         {
3118                                 stair_creation();
3119                         }
3120                 }
3121                 break;
3122
3123         case 17:
3124 #ifdef JP
3125                 if (name) return "È©Àв½";
3126                 if (desc) return "°ìÄê»þ´Ö¡¢AC¤ò¾å¾º¤µ¤»¤ë¡£";
3127 #else
3128                 if (name) return "Stone Skin";
3129                 if (desc) return "Gives bonus to AC for a while.";
3130 #endif
3131     
3132                 {
3133                         int base = 20;
3134                         int sides = 30;
3135
3136                         if (info) return info_duration(base, sides);
3137
3138                         if (cast)
3139                         {
3140                                 set_shield(randint1(sides) + base, FALSE);
3141                         }
3142                 }
3143                 break;
3144
3145         case 18:
3146 #ifdef JP
3147                 if (name) return "¿¿¡¦ÂÑÀ­";
3148                 if (desc) return "°ìÄê»þ´Ö¡¢»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
3149 #else
3150                 if (name) return "Resistance True";
3151                 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.";
3152 #endif
3153     
3154                 {
3155                         int base = 20;
3156
3157                         if (info) return info_duration(base, base);
3158
3159                         if (cast)
3160                         {
3161                                 set_oppose_acid(randint1(base) + base, FALSE);
3162                                 set_oppose_elec(randint1(base) + base, FALSE);
3163                                 set_oppose_fire(randint1(base) + base, FALSE);
3164                                 set_oppose_cold(randint1(base) + base, FALSE);
3165                                 set_oppose_pois(randint1(base) + base, FALSE);
3166                         }
3167                 }
3168                 break;
3169
3170         case 19:
3171 #ifdef JP
3172                 if (name) return "¿¹ÎÓÁϤ";
3173                 if (desc) return "¼þ°Ï¤ËÌÚ¤òºî¤ê½Ð¤¹¡£";
3174 #else
3175                 if (name) return "Forest Creation";
3176                 if (desc) return "Creates trees in all adjacent squares.";
3177 #endif
3178     
3179                 {
3180                         if (cast)
3181                         {
3182                                 tree_creation();
3183                         }
3184                 }
3185                 break;
3186
3187         case 20:
3188 #ifdef JP
3189                 if (name) return "ưʪͧÏÂ";
3190                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Îưʪ¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3191 #else
3192                 if (name) return "Animal Friendship";
3193                 if (desc) return "Attempts to charm all animals in sight.";
3194 #endif
3195     
3196                 {
3197                         int power = plev * 2;
3198
3199                         if (info) return info_power(power);
3200
3201                         if (cast)
3202                         {
3203                                 charm_animals(power);
3204                         }
3205                 }
3206                 break;
3207
3208         case 21:
3209 #ifdef JP
3210                 if (name) return "»î¶âÀÐ";
3211                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
3212 #else
3213                 if (name) return "Stone Tell";
3214                 if (desc) return "*Identifies* an item.";
3215 #endif
3216     
3217                 {
3218                         if (cast)
3219                         {
3220                                 if (!identify_fully(FALSE)) return NULL;
3221                         }
3222                 }
3223                 break;
3224
3225         case 22:
3226 #ifdef JP
3227                 if (name) return "ÀФÎÊÉ";
3228                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë²ÖÖ¾´ä¤ÎÊɤòºî¤ë¡£";
3229 #else
3230                 if (name) return "Wall of Stone";
3231                 if (desc) return "Creates granite walls in all adjacent squares.";
3232 #endif
3233     
3234                 {
3235                         if (cast)
3236                         {
3237                                 wall_stone();
3238                         }
3239                 }
3240                 break;
3241
3242         case 23:
3243 #ifdef JP
3244                 if (name) return "Éå¿©ËÉ»ß";
3245                 if (desc) return "¥¢¥¤¥Æ¥à¤ò»À¤Ç½ý¤Ä¤«¤Ê¤¤¤è¤¦²Ã¹©¤¹¤ë¡£";
3246 #else
3247                 if (name) return "Protect from Corrosion";
3248                 if (desc) return "Makes an equipment acid-proof.";
3249 #endif
3250     
3251                 {
3252                         if (cast)
3253                         {
3254                                 if (!rustproof()) return NULL;
3255                         }
3256                 }
3257                 break;
3258
3259         case 24:
3260 #ifdef JP
3261                 if (name) return "ÃÏ¿Ì";
3262                 if (desc) return "¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÍɤ餷¡¢ÊɤȾ²¤ò¥é¥ó¥À¥à¤ËÆþ¤ìÊѤ¨¤ë¡£";
3263 #else
3264                 if (name) return "Earthquake";
3265                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
3266 #endif
3267     
3268                 {
3269                         int rad = 10;
3270
3271                         if (info) return info_radius(rad);
3272
3273                         if (cast)
3274                         {
3275                                 earthquake(py, px, rad);
3276                         }
3277                 }
3278                 break;
3279
3280         case 25:
3281 #ifdef JP
3282                 if (name) return "¥«¥Þ¥¤¥¿¥Á";
3283                 if (desc) return "Á´Êý¸þ¤Ë¸þ¤«¤Ã¤Æ¹¶·â¤¹¤ë¡£";
3284 #else
3285                 if (name) return "Cyclone";
3286                 if (desc) return "Attacks all adjacent monsters.";
3287 #endif
3288     
3289                 {
3290                         if (cast)
3291                         {
3292                                 int y = 0, x = 0;
3293                                 cave_type       *c_ptr;
3294                                 monster_type    *m_ptr;
3295
3296                                 for (dir = 0; dir < 8; dir++)
3297                                 {
3298                                         y = py + ddy_ddd[dir];
3299                                         x = px + ddx_ddd[dir];
3300                                         c_ptr = &cave[y][x];
3301
3302                                         /* Get the monster */
3303                                         m_ptr = &m_list[c_ptr->m_idx];
3304
3305                                         /* Hack -- attack monsters */
3306                                         if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
3307                                                 py_attack(y, x, 0);
3308                                 }
3309                         }
3310                 }
3311                 break;
3312
3313         case 26:
3314 #ifdef JP
3315                 if (name) return "¥Ö¥ê¥¶¡¼¥É";
3316                 if (desc) return "µðÂç¤ÊÎ䵤¤Îµå¤òÊü¤Ä¡£";
3317 #else
3318                 if (name) return "Blizzard";
3319                 if (desc) return "Fires a huge ball of cold.";
3320 #endif
3321     
3322                 {
3323                         int dam = 70 + plev * 3 / 2;
3324                         int rad = plev / 12 + 1;
3325
3326                         if (info) return info_damage(0, 0, dam);
3327
3328                         if (cast)
3329                         {
3330                                 if (!get_aim_dir(&dir)) return NULL;
3331
3332                                 fire_ball(GF_COLD, dir, dam, rad);
3333                         }
3334                 }
3335                 break;
3336
3337         case 27:
3338 #ifdef JP
3339                 if (name) return "°ðºÊÍò";
3340                 if (desc) return "µðÂç¤ÊÅÅ·â¤Îµå¤òÊü¤Ä¡£";
3341 #else
3342                 if (name) return "Lightning Storm";
3343                 if (desc) return "Fires a huge electric ball.";
3344 #endif
3345     
3346                 {
3347                         int dam = 90 + plev * 3 / 2;
3348                         int rad = plev / 12 + 1;
3349
3350                         if (info) return info_damage(0, 0, dam);
3351
3352                         if (cast)
3353                         {
3354                                 if (!get_aim_dir(&dir)) return NULL;
3355                                 fire_ball(GF_ELEC, dir, dam, rad);
3356                                 break;
3357                         }
3358                 }
3359                 break;
3360
3361         case 28:
3362 #ifdef JP
3363                 if (name) return "±²Ä¬";
3364                 if (desc) return "µðÂç¤Ê¿å¤Îµå¤òÊü¤Ä¡£";
3365 #else
3366                 if (name) return "Whirlpool";
3367                 if (desc) return "Fires a huge ball of water.";
3368 #endif
3369     
3370                 {
3371                         int dam = 100 + plev * 3 / 2;
3372                         int rad = plev / 12 + 1;
3373
3374                         if (info) return info_damage(0, 0, dam);
3375
3376                         if (cast)
3377                         {
3378                                 if (!get_aim_dir(&dir)) return NULL;
3379                                 fire_ball(GF_WATER, dir, dam, rad);
3380                         }
3381                 }
3382                 break;
3383
3384         case 29:
3385 #ifdef JP
3386                 if (name) return "ÍÛ¸÷¾¤´­";
3387                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¸÷¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£¤µ¤é¤Ë¡¢¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
3388 #else
3389                 if (name) return "Call Sunlight";
3390                 if (desc) return "Generates ball of light centered on you. Maps and lights whole dungeon level. Knows all objects location.";
3391 #endif
3392     
3393                 {
3394                         int dam = 150;
3395                         int rad = 8;
3396
3397                         if (info) return info_damage(0, 0, dam/2);
3398
3399                         if (cast)
3400                         {
3401                                 fire_ball(GF_LITE, 0, dam, rad);
3402                                 chg_virtue(V_KNOWLEDGE, 1);
3403                                 chg_virtue(V_ENLIGHTEN, 1);
3404                                 wiz_lite(FALSE);
3405
3406                                 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
3407                                 {
3408 #ifdef JP
3409                                         msg_print("Æü¸÷¤¬¤¢¤Ê¤¿¤ÎÆùÂΤò¾Ç¤¬¤·¤¿¡ª");
3410 #else
3411                                         msg_print("The sunlight scorches your flesh!");
3412 #endif
3413
3414 #ifdef JP
3415                                         take_hit(DAMAGE_NOESCAPE, 50, "Æü¸÷", -1);
3416 #else
3417                                         take_hit(DAMAGE_NOESCAPE, 50, "sunlight", -1);
3418 #endif
3419                                 }
3420                         }
3421                 }
3422                 break;
3423
3424         case 30:
3425 #ifdef JP
3426                 if (name) return "ÀºÎî¤Î¿Ï";
3427                 if (desc) return "Éð´ï¤Ë±ê¤«Î䵤¤Î°À­¤ò¤Ä¤±¤ë¡£";
3428 #else
3429                 if (name) return "Elemental Branding";
3430                 if (desc) return "Makes current weapon fire or frost branded.";
3431 #endif
3432     
3433                 {
3434                         if (cast)
3435                         {
3436                                 brand_weapon(randint0(2));
3437                         }
3438                 }
3439                 break;
3440
3441         case 31:
3442 #ifdef JP
3443                 if (name) return "¼«Á³¤Î¶¼°Ò";
3444                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢ÃϿ̤òµ¯¤³¤·¡¢¼«Ê¬¤òÃæ¿´¤È¤·¤¿Ê¬²ò¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
3445 #else
3446                 if (name) return "Nature's Wrath";
3447                 if (desc) return "Damages all monsters in sight. Makes quake. Generates disintegration ball centered on you.";
3448 #endif
3449     
3450                 {
3451                         int d_dam = 4 * plev;
3452                         int b_dam = (100 + plev) * 2;
3453                         int b_rad = 1 + plev / 12;
3454                         int q_rad = 20 + plev / 2;
3455
3456                         if (info) return format("%s%d+%d", s_dam, d_dam, b_dam/2);
3457
3458                         if (cast)
3459                         {
3460                                 dispel_monsters(d_dam);
3461                                 earthquake(py, px, q_rad);
3462                                 project(0, b_rad, py, px, b_dam, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);
3463                         }
3464                 }
3465                 break;
3466         }
3467
3468         return "";
3469 }
3470
3471
3472 /*!
3473  * @brief ¥«¥ª¥¹ÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
3474  * @param spell ËâË¡ID
3475  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
3476  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
3477  */
3478 static cptr do_chaos_spell(int spell, int mode)
3479 {
3480         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
3481         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
3482         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
3483         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
3484
3485 #ifdef JP
3486         static const char s_dam[] = "»½ý:";
3487         static const char s_random[] = "¥é¥ó¥À¥à";
3488 #else
3489         static const char s_dam[] = "dam ";
3490         static const char s_random[] = "random";
3491 #endif
3492
3493         int dir;
3494         int plev = p_ptr->lev;
3495
3496         switch (spell)
3497         {
3498         case 0:
3499 #ifdef JP
3500                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë";
3501                 if (desc) return "¼å¤¤ËâË¡¤ÎÌð¤òÊü¤Ä¡£";
3502 #else
3503                 if (name) return "Magic Missile";
3504                 if (desc) return "Fires a weak bolt of magic.";
3505 #endif
3506     
3507                 {
3508                         int dice = 3 + ((plev - 1) / 5);
3509                         int sides = 4;
3510
3511                         if (info) return info_damage(dice, sides, 0);
3512
3513                         if (cast)
3514                         {
3515                                 if (!get_aim_dir(&dir)) return NULL;
3516
3517                                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
3518                         }
3519                 }
3520                 break;
3521
3522         case 1:
3523 #ifdef JP
3524                 if (name) return "¥È¥é¥Ã¥×/¥É¥¢Ç˲õ";
3525                 if (desc) return "ÎÙÀܤ¹¤ë櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
3526 #else
3527                 if (name) return "Trap / Door Destruction";
3528                 if (desc) return "Destroys all traps in adjacent squares.";
3529 #endif
3530     
3531                 {
3532                         int rad = 1;
3533
3534                         if (info) return info_radius(rad);
3535
3536                         if (cast)
3537                         {
3538                                 destroy_doors_touch();
3539                         }
3540                 }
3541                 break;
3542
3543         case 2:
3544 #ifdef JP
3545                 if (name) return "Á®¸÷";
3546                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
3547 #else
3548                 if (name) return "Flash of Light";
3549                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
3550 #endif
3551     
3552                 {
3553                         int dice = 2;
3554                         int sides = plev / 2;
3555                         int rad = (plev / 10) + 1;
3556
3557                         if (info) return info_damage(dice, sides, 0);
3558
3559                         if (cast)
3560                         {
3561                                 lite_area(damroll(dice, sides), rad);
3562                         }
3563                 }
3564                 break;
3565
3566         case 3:
3567 #ifdef JP
3568                 if (name) return "º®Íð¤Î¼ê";
3569                 if (desc) return "Áê¼ê¤òº®Í𤵤»¤ë¹¶·â¤ò¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¡£";
3570 #else
3571                 if (name) return "Touch of Confusion";
3572                 if (desc) return "Attempts to confuse the next monster that you hit.";
3573 #endif
3574     
3575                 {
3576                         if (cast)
3577                         {
3578                                 if (!(p_ptr->special_attack & ATTACK_CONFUSE))
3579                                 {
3580 #ifdef JP
3581                                         msg_print("¤¢¤Ê¤¿¤Î¼ê¤Ï¸÷¤ê»Ï¤á¤¿¡£");
3582 #else
3583                                         msg_print("Your hands start glowing.");
3584 #endif
3585
3586                                         p_ptr->special_attack |= ATTACK_CONFUSE;
3587                                         p_ptr->redraw |= (PR_STATUS);
3588                                 }
3589                         }
3590                 }
3591                 break;
3592
3593         case 4:
3594 #ifdef JP
3595                 if (name) return "ËâÎÏßÚÎö";
3596                 if (desc) return "ËâË¡¤Îµå¤òÊü¤Ä¡£";
3597 #else
3598                 if (name) return "Mana Burst";
3599                 if (desc) return "Fires a ball of magic.";
3600 #endif
3601     
3602                 {
3603                         int dice = 3;
3604                         int sides = 5;
3605                         int rad = (plev < 30) ? 2 : 3;
3606                         int base;
3607
3608                         if (p_ptr->pclass == CLASS_MAGE ||
3609                             p_ptr->pclass == CLASS_HIGH_MAGE ||
3610                             p_ptr->pclass == CLASS_SORCERER)
3611                                 base = plev + plev / 2;
3612                         else
3613                                 base = plev + plev / 4;
3614
3615
3616                         if (info) return info_damage(dice, sides, base);
3617
3618                         if (cast)
3619                         {
3620                                 if (!get_aim_dir(&dir)) return NULL;
3621
3622                                 fire_ball(GF_MISSILE, dir, damroll(dice, sides) + base, rad);
3623
3624                                 /*
3625                                  * Shouldn't actually use GF_MANA, as
3626                                  * it will destroy all items on the
3627                                  * floor
3628                                  */
3629                         }
3630                 }
3631                 break;
3632
3633         case 5:
3634 #ifdef JP
3635                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È";
3636                 if (desc) return "±ê¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
3637 #else
3638                 if (name) return "Fire Bolt";
3639                 if (desc) return "Fires a bolt or beam of fire.";
3640 #endif
3641     
3642                 {
3643                         int dice = 8 + (plev - 5) / 4;
3644                         int sides = 8;
3645
3646                         if (info) return info_damage(dice, sides, 0);
3647
3648                         if (cast)
3649                         {
3650                                 if (!get_aim_dir(&dir)) return NULL;
3651
3652                                 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir, damroll(dice, sides));
3653                         }
3654                 }
3655                 break;
3656
3657         case 6:
3658 #ifdef JP
3659                 if (name) return "ÎϤηý";
3660                 if (desc) return "¤´¤¯¾®¤µ¤Êʬ²ò¤Îµå¤òÊü¤Ä¡£";
3661 #else
3662                 if (name) return "Fist of Force";
3663                 if (desc) return "Fires a tiny ball of disintegration.";
3664 #endif
3665     
3666                 {
3667                         int dice = 8 + ((plev - 5) / 4);
3668                         int sides = 8;
3669
3670                         if (info) return info_damage(dice, sides, 0);
3671
3672                         if (cast)
3673                         {
3674                                 if (!get_aim_dir(&dir)) return NULL;
3675
3676                                 fire_ball(GF_DISINTEGRATE, dir,
3677                                         damroll(dice, sides), 0);
3678                         }
3679                 }
3680                 break;
3681
3682         case 7:
3683 #ifdef JP
3684                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
3685                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
3686 #else
3687                 if (name) return "Teleport Self";
3688                 if (desc) return "Teleport long distance.";
3689 #endif
3690     
3691                 {
3692                         int range = plev * 5;
3693
3694                         if (info) return info_range(range);
3695
3696                         if (cast)
3697                         {
3698                                 teleport_player(range, 0L);
3699                         }
3700                 }
3701                 break;
3702
3703         case 8:
3704 #ifdef JP
3705                 if (name) return "¥ï¥ó¥À¡¼";
3706                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤Ë¥é¥ó¥À¥à¤Ê¸ú²Ì¤òÍ¿¤¨¤ë¡£";
3707 #else
3708                 if (name) return "Wonder";
3709                 if (desc) return "Fires something with random effects.";
3710 #endif
3711     
3712                 {
3713                         if (info) return s_random;
3714
3715                         if (cast)
3716                         {
3717
3718                                 if (!get_aim_dir(&dir)) return NULL;
3719
3720                                 cast_wonder(dir);
3721                         }
3722                 }
3723                 break;
3724
3725         case 9:
3726 #ifdef JP
3727                 if (name) return "¥«¥ª¥¹¡¦¥Ü¥ë¥È";
3728                 if (desc) return "¥«¥ª¥¹¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
3729 #else
3730                 if (name) return "Chaos Bolt";
3731                 if (desc) return "Fires a bolt or ball of chaos.";
3732 #endif
3733     
3734                 {
3735                         int dice = 10 + (plev - 5) / 4;
3736                         int sides = 8;
3737
3738                         if (info) return info_damage(dice, sides, 0);
3739
3740                         if (cast)
3741                         {
3742                                 if (!get_aim_dir(&dir)) return NULL;
3743
3744                                 fire_bolt_or_beam(beam_chance(), GF_CHAOS, dir, damroll(dice, sides));
3745                         }
3746                 }
3747                 break;
3748
3749         case 10:
3750 #ifdef JP
3751                 if (name) return "¥½¥Ë¥Ã¥¯¡¦¥Ö¡¼¥à";
3752                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¹ì²»¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
3753 #else
3754                 if (name) return "Sonic Boom";
3755                 if (desc) return "Generates a ball of sound centered on you.";
3756 #endif
3757     
3758                 {
3759                         int dam = 60 + plev;
3760                         int rad = plev / 10 + 2;
3761
3762                         if (info) return info_damage(0, 0, dam/2);
3763
3764                         if (cast)
3765                         {
3766 #ifdef JP
3767                                 msg_print("¥É¡¼¥ó¡ªÉô²°¤¬Íɤ줿¡ª");
3768 #else
3769                                 msg_print("BOOM! Shake the room!");
3770 #endif
3771
3772                                 project(0, rad, py, px, dam, GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
3773                         }
3774                 }
3775                 break;
3776
3777         case 11:
3778 #ifdef JP
3779                 if (name) return "ÇËÌǤÎÌð";
3780                 if (desc) return "½ã¿è¤ÊËâÎϤΥӡ¼¥à¤òÊü¤Ä¡£";
3781 #else
3782                 if (name) return "Doom Bolt";
3783                 if (desc) return "Fires a beam of pure mana.";
3784 #endif
3785     
3786                 {
3787                         int dice = 11 + (plev - 5) / 4;
3788                         int sides = 8;
3789
3790                         if (info) return info_damage(dice, sides, 0);
3791
3792                         if (cast)
3793                         {
3794                                 if (!get_aim_dir(&dir)) return NULL;
3795
3796                                 fire_beam(GF_MANA, dir, damroll(dice, sides));
3797                         }
3798                 }
3799                 break;
3800
3801         case 12:
3802 #ifdef JP
3803                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";
3804                 if (desc) return "±ê¤Îµå¤òÊü¤Ä¡£";
3805 #else
3806                 if (name) return "Fire Ball";
3807                 if (desc) return "Fires a ball of fire.";
3808 #endif
3809     
3810                 {
3811                         int dam = plev + 55;
3812                         int rad = 2;
3813
3814                         if (info) return info_damage(0, 0, dam);
3815
3816                         if (cast)
3817                         {
3818                                 if (!get_aim_dir(&dir)) return NULL;
3819
3820                                 fire_ball(GF_FIRE, dir, dam, rad);
3821                         }
3822                 }
3823                 break;
3824
3825         case 13:
3826 #ifdef JP
3827                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥¢¥¦¥§¥¤";
3828                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3829 #else
3830                 if (name) return "Teleport Other";
3831                 if (desc) return "Teleports all monsters on the line away unless resisted.";
3832 #endif
3833     
3834                 {
3835                         int power = plev;
3836
3837                         if (info) return info_power(power);
3838
3839                         if (cast)
3840                         {
3841                                 if (!get_aim_dir(&dir)) return NULL;
3842
3843                                 fire_beam(GF_AWAY_ALL, dir, power);
3844                         }
3845                 }
3846                 break;
3847
3848         case 14:
3849 #ifdef JP
3850                 if (name) return "Ç˲õ¤Î¸ÀÍÕ";
3851                 if (desc) return "¼þÊդΥ¢¥¤¥Æ¥à¡¢¥â¥ó¥¹¥¿¡¼¡¢ÃÏ·Á¤òÇ˲õ¤¹¤ë¡£";
3852 #else
3853                 if (name) return "Word of Destruction";
3854                 if (desc) return "Destroy everything in nearby area.";
3855 #endif
3856     
3857                 {
3858                         int base = 12;
3859                         int sides = 4;
3860
3861                         if (cast)
3862                         {
3863                                 destroy_area(py, px, base + randint1(sides), FALSE);
3864                         }
3865                 }
3866                 break;
3867
3868         case 15:
3869 #ifdef JP
3870                 if (name) return "¥í¥°¥ë¥¹È¯Æ°";
3871                 if (desc) return "µðÂç¤Ê¥«¥ª¥¹¤Îµå¤òÊü¤Ä¡£";
3872 #else
3873                 if (name) return "Invoke Logrus";
3874                 if (desc) return "Fires a huge ball of chaos.";
3875 #endif
3876     
3877                 {
3878                         int dam = plev * 2 + 99;
3879                         int rad = plev / 5;
3880
3881                         if (info) return info_damage(0, 0, dam);
3882
3883                         if (cast)
3884                         {
3885                                 if (!get_aim_dir(&dir)) return NULL;
3886
3887                                 fire_ball(GF_CHAOS, dir, dam, rad);
3888                         }
3889                 }
3890                 break;
3891
3892         case 16:
3893 #ifdef JP
3894                 if (name) return "¾¼ÔÊÑÍÆ";
3895                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤòÊѿȤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
3896 #else
3897                 if (name) return "Polymorph Other";
3898                 if (desc) return "Attempts to polymorph a monster.";
3899 #endif
3900     
3901                 {
3902                         int power = plev;
3903
3904                         if (info) return info_power(power);
3905
3906                         if (cast)
3907                         {
3908                                 if (!get_aim_dir(&dir)) return NULL;
3909
3910                                 poly_monster(dir, plev);
3911                         }
3912                 }
3913                 break;
3914
3915         case 17:
3916 #ifdef JP
3917                 if (name) return "Ï¢º¿°ðºÊ";
3918                 if (desc) return "Á´Êý¸þ¤ËÂФ·¤ÆÅÅ·â¤Î¥Ó¡¼¥à¤òÊü¤Ä¡£";
3919 #else
3920                 if (name) return "Chain Lightning";
3921                 if (desc) return "Fires lightning beams in all directions.";
3922 #endif
3923     
3924                 {
3925                         int dice = 5 + plev / 10;
3926                         int sides = 8;
3927
3928                         if (info) return info_damage(dice, sides, 0);
3929
3930                         if (cast)
3931                         {
3932                                 for (dir = 0; dir <= 9; dir++)
3933                                         fire_beam(GF_ELEC, dir, damroll(dice, sides));
3934                         }
3935                 }
3936                 break;
3937
3938         case 18:
3939 #ifdef JP
3940                 if (name) return "ËâÎÏÉõÆþ";
3941                 if (desc) return "¾ó/ËâË¡ËÀ¤Î½¼Å¶²ó¿ô¤òÁý¤ä¤¹¤«¡¢½¼Å¶Ãæ¤Î¥í¥Ã¥É¤Î½¼Å¶»þ´Ö¤ò¸º¤é¤¹¡£";
3942 #else
3943                 if (name) return "Arcane Binding";
3944                 if (desc) return "Recharges staffs, wands or rods.";
3945 #endif
3946     
3947                 {
3948                         int power = 90;
3949
3950                         if (info) return info_power(power);
3951
3952                         if (cast)
3953                         {
3954                                 if (!recharge(power)) return NULL;
3955                         }
3956                 }
3957                 break;
3958
3959         case 19:
3960 #ifdef JP
3961                 if (name) return "¸¶»Òʬ²ò";
3962                 if (desc) return "µðÂç¤Êʬ²ò¤Îµå¤òÊü¤Ä¡£";
3963 #else
3964                 if (name) return "Disintegrate";
3965                 if (desc) return "Fires a huge ball of disintegration.";
3966 #endif
3967     
3968                 {
3969                         int dam = plev + 70;
3970                         int rad = 3 + plev / 40;
3971
3972                         if (info) return info_damage(0, 0, dam);
3973
3974                         if (cast)
3975                         {
3976                                 if (!get_aim_dir(&dir)) return NULL;
3977
3978                                 fire_ball(GF_DISINTEGRATE, dir, dam, rad);
3979                         }
3980                 }
3981                 break;
3982
3983         case 20:
3984 #ifdef JP
3985                 if (name) return "¸½¼ÂÊÑÍÆ";
3986                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
3987 #else
3988                 if (name) return "Alter Reality";
3989                 if (desc) return "Recreates current dungeon level.";
3990 #endif
3991     
3992                 {
3993                         int base = 15;
3994                         int sides = 20;
3995
3996                         if (info) return info_delay(base, sides);
3997
3998                         if (cast)
3999                         {
4000                                 alter_reality();
4001                         }
4002                 }
4003                 break;
4004
4005         case 21:
4006 #ifdef JP
4007                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥í¥±¥Ã¥È";
4008                 if (desc) return "¥í¥±¥Ã¥È¤òȯ¼Í¤¹¤ë¡£";
4009 #else
4010                 if (name) return "Magic Rocket";
4011                 if (desc) return "Fires a magic rocket.";
4012 #endif
4013     
4014                 {
4015                         int dam = 120 + plev * 2;
4016                         int rad = 2;
4017
4018                         if (info) return info_damage(0, 0, dam);
4019
4020                         if (cast)
4021                         {
4022                                 if (!get_aim_dir(&dir)) return NULL;
4023
4024 #ifdef JP
4025                                 msg_print("¥í¥±¥Ã¥Èȯ¼Í¡ª");
4026 #else
4027                                 msg_print("You launch a rocket!");
4028 #endif
4029
4030                                 fire_rocket(GF_ROCKET, dir, dam, rad);
4031                         }
4032                 }
4033                 break;
4034
4035         case 22:
4036 #ifdef JP
4037                 if (name) return "º®Æ٤οÏ";
4038                 if (desc) return "Éð´ï¤Ë¥«¥ª¥¹¤Î°À­¤ò¤Ä¤±¤ë¡£";
4039 #else
4040                 if (name) return "Chaos Branding";
4041                 if (desc) return "Makes current weapon a Chaotic weapon.";
4042 #endif
4043     
4044                 {
4045                         if (cast)
4046                         {
4047                                 brand_weapon(2);
4048                         }
4049                 }
4050                 break;
4051
4052         case 23:
4053 #ifdef JP
4054                 if (name) return "°­Ë⾤´­";
4055                 if (desc) return "°­Ëâ¤ò1Âξ¤´­¤¹¤ë¡£";
4056 #else
4057                 if (name) return "Summon Demon";
4058                 if (desc) return "Summons a demon.";
4059 #endif
4060     
4061                 {
4062                         if (cast)
4063                         {
4064                                 u32b mode = 0L;
4065                                 bool pet = !one_in_(3);
4066
4067                                 if (pet) mode |= PM_FORCE_PET;
4068                                 else mode |= PM_NO_PET;
4069                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
4070
4071                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_DEMON, mode))
4072                                 {
4073 #ifdef JP
4074                                         msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
4075 #else
4076                                         msg_print("The area fills with a stench of sulphur and brimstone.");
4077 #endif
4078
4079                                         if (pet)
4080                                         {
4081 #ifdef JP
4082                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
4083 #else
4084                                                 msg_print("'What is thy bidding... Master?'");
4085 #endif
4086                                         }
4087                                         else
4088                                         {
4089 #ifdef JP
4090                                                 msg_print("¡ÖÈܤ·¤­¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
4091 #else
4092                                                 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
4093 #endif
4094                                         }
4095                                 }
4096                         }
4097                 }
4098                 break;
4099
4100         case 24:
4101 #ifdef JP
4102                 if (name) return "½ÅÎϸ÷Àþ";
4103                 if (desc) return "½ÅÎϤΥӡ¼¥à¤òÊü¤Ä¡£";
4104 #else
4105                 if (name) return "Beam of Gravity";
4106                 if (desc) return "Fires a beam of gravity.";
4107 #endif
4108     
4109                 {
4110                         int dice = 9 + (plev - 5) / 4;
4111                         int sides = 8;
4112
4113                         if (info) return info_damage(dice, sides, 0);
4114
4115                         if (cast)
4116                         {
4117                                 if (!get_aim_dir(&dir)) return NULL;
4118
4119                                 fire_beam(GF_GRAVITY, dir, damroll(dice, sides));
4120                         }
4121                 }
4122                 break;
4123
4124         case 25:
4125 #ifdef JP
4126                 if (name) return "ήÀ±·²";
4127                 if (desc) return "¼«Ê¬¤Î¼þÊÕ¤Ëð¨ÀФòÍî¤È¤¹¡£";
4128 #else
4129                 if (name) return "Meteor Swarm";
4130                 if (desc) return "Makes meteor balls fall down to nearby random locations.";
4131 #endif
4132     
4133                 {
4134                         int dam = plev * 2;
4135                         int rad = 2;
4136
4137                         if (info) return info_multi_damage(dam);
4138
4139                         if (cast)
4140                         {
4141                                 cast_meteor(dam, rad);
4142                         }
4143                 }
4144                 break;
4145
4146         case 26:
4147 #ifdef JP
4148                 if (name) return "±ë¤Î°ì·â";
4149                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿Ä¶µðÂç¤Ê±ê¤Îµå¤òȯÀ¸¤µ¤»¤ë¡£";
4150 #else
4151                 if (name) return "Flame Strike";
4152                 if (desc) return "Generate a huge ball of fire centered on you.";
4153 #endif
4154     
4155                 {
4156                         int dam = 300 + 3 * plev;
4157                         int rad = 8;
4158
4159                         if (info) return info_damage(0, 0, dam/2);
4160
4161                         if (cast)
4162                         {
4163                                 fire_ball(GF_FIRE, 0, dam, rad);
4164                         }
4165                 }
4166                 break;
4167
4168         case 27:
4169 #ifdef JP
4170                 if (name) return "º®ÆÙ¾¤Íè";
4171                 if (desc) return "¥é¥ó¥À¥à¤Ê°À­¤Îµå¤ä¥Ó¡¼¥à¤òȯÀ¸¤µ¤»¤ë¡£";
4172 #else
4173                 if (name) return "Call Chaos";
4174                 if (desc) return "Generate random kind of balls or beams.";
4175 #endif
4176     
4177                 {
4178                         if (info) return format("%s150 / 250", s_dam);
4179
4180                         if (cast)
4181                         {
4182                                 call_chaos();
4183                         }
4184                 }
4185                 break;
4186
4187         case 28:
4188 #ifdef JP
4189                 if (name) return "¼«¸ÊÊÑÍÆ";
4190                 if (desc) return "¼«Ê¬¤òÊѿȤµ¤»¤è¤¦¤È¤¹¤ë¡£";
4191 #else
4192                 if (name) return "Polymorph Self";
4193                 if (desc) return "Polymorphs yourself.";
4194 #endif
4195     
4196                 {
4197                         if (cast)
4198                         {
4199 #ifdef JP
4200                                 if (!get_check("ÊѿȤ·¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) return NULL;
4201 #else
4202                                 if (!get_check("You will polymorph yourself. Are you sure? ")) return NULL;
4203 #endif
4204                                 do_poly_self();
4205                         }
4206                 }
4207                 break;
4208
4209         case 29:
4210 #ifdef JP
4211                 if (name) return "ËâÎϤÎÍò";
4212                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤǵðÂç¤Ê½ã¿è¤ÊËâÎϤεå¤òÊü¤Ä¡£";
4213 #else
4214                 if (name) return "Mana Storm";
4215                 if (desc) return "Fires an extremely powerful huge ball of pure mana.";
4216 #endif
4217     
4218                 {
4219                         int dam = 300 + plev * 4;
4220                         int rad = 4;
4221
4222                         if (info) return info_damage(0, 0, dam);
4223
4224                         if (cast)
4225                         {
4226                                 if (!get_aim_dir(&dir)) return NULL;
4227
4228                                 fire_ball(GF_MANA, dir, dam, rad);
4229                         }
4230                 }
4231                 break;
4232
4233         case 30:
4234 #ifdef JP
4235                 if (name) return "¥í¥°¥ë¥¹¤Î¥Ö¥ì¥¹";
4236                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤʥ«¥ª¥¹¤Îµå¤òÊü¤Ä¡£";
4237 #else
4238                 if (name) return "Breathe Logrus";
4239                 if (desc) return "Fires an extremely powerful ball of chaos.";
4240 #endif
4241     
4242                 {
4243                         int dam = p_ptr->chp;
4244                         int rad = 2;
4245
4246                         if (info) return info_damage(0, 0, dam);
4247
4248                         if (cast)
4249                         {
4250                                 if (!get_aim_dir(&dir)) return NULL;
4251
4252                                 fire_ball(GF_CHAOS, dir, dam, rad);
4253                         }
4254                 }
4255                 break;
4256
4257         case 31:
4258 #ifdef JP
4259                 if (name) return "µõ̵¾¤Íè";
4260                 if (desc) return "¼«Ê¬¤Ë¼þ°Ï¤Ë¸þ¤«¤Ã¤Æ¡¢¥í¥±¥Ã¥È¡¢½ã¿è¤ÊËâÎϤε塢Êü¼ÍÀ­ÇÑ´þʪ¤Îµå¤òÊü¤Ä¡£¤¿¤À¤·¡¢ÊɤËÎÙÀܤ·¤Æ»ÈÍѤ¹¤ë¤È¹­ÈϰϤòÇ˲õ¤¹¤ë¡£";
4261 #else
4262                 if (name) return "Call the Void";
4263                 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.";
4264 #endif
4265     
4266                 {
4267                         if (info) return format("%s3 * 175", s_dam);
4268
4269                         if (cast)
4270                         {
4271                                 call_the_();
4272                         }
4273                 }
4274                 break;
4275         }
4276
4277         return "";
4278 }
4279
4280 /*!
4281  * @brief °Å¹õÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
4282  * @param spell ËâË¡ID
4283  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
4284  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
4285  */
4286 static cptr do_death_spell(int spell, int mode)
4287 {
4288         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
4289         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
4290         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
4291         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
4292
4293 #ifdef JP
4294         static const char s_dam[] = "»½ý:";
4295         static const char s_random[] = "¥é¥ó¥À¥à";
4296 #else
4297         static const char s_dam[] = "dam ";
4298         static const char s_random[] = "random";
4299 #endif
4300
4301         int dir;
4302         int plev = p_ptr->lev;
4303
4304         switch (spell)
4305         {
4306         case 0:
4307 #ifdef JP
4308                 if (name) return "̵À¸Ì¿´¶ÃÎ";
4309                 if (desc) return "¶á¤¯¤ÎÀ¸Ì¿¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
4310 #else
4311                 if (name) return "Detect Unlife";
4312                 if (desc) return "Detects all nonliving monsters in your vicinity.";
4313 #endif
4314     
4315                 {
4316                         int rad = DETECT_RAD_DEFAULT;
4317
4318                         if (info) return info_radius(rad);
4319
4320                         if (cast)
4321                         {
4322                                 detect_monsters_nonliving(rad);
4323                         }
4324                 }
4325                 break;
4326
4327         case 1:
4328 #ifdef JP
4329                 if (name) return "¼ö»¦ÃÆ";
4330                 if (desc) return "¤´¤¯¾®¤µ¤Ê¼Ù°­¤ÊÎϤò»ý¤Ä¥Ü¡¼¥ë¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
4331 #else
4332                 if (name) return "Malediction";
4333                 if (desc) return "Fires a tiny ball of evil power which hurts good monsters greatly.";
4334 #endif
4335     
4336                 {
4337                         int dice = 3 + (plev - 1) / 5;
4338                         int sides = 4;
4339                         int rad = 0;
4340
4341                         if (info) return info_damage(dice, sides, 0);
4342
4343                         if (cast)
4344                         {
4345                                 if (!get_aim_dir(&dir)) return NULL;
4346
4347                                 /*
4348                                  * A radius-0 ball may (1) be aimed at
4349                                  * objects etc., and will affect them;
4350                                  * (2) may be aimed at ANY visible
4351                                  * monster, unlike a 'bolt' which must
4352                                  * travel to the monster.
4353                                  */
4354
4355                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides), rad);
4356
4357                                 if (one_in_(5))
4358                                 {
4359                                         /* Special effect first */
4360                                         int effect = randint1(1000);
4361
4362                                         if (effect == 666)
4363                                                 fire_ball_hide(GF_DEATH_RAY, dir, plev * 200, 0);
4364                                         else if (effect < 500)
4365                                                 fire_ball_hide(GF_TURN_ALL, dir, plev, 0);
4366                                         else if (effect < 800)
4367                                                 fire_ball_hide(GF_OLD_CONF, dir, plev, 0);
4368                                         else
4369                                                 fire_ball_hide(GF_STUN, dir, plev, 0);
4370                                 }
4371                         }
4372                 }
4373                 break;
4374
4375         case 2:
4376 #ifdef JP
4377                 if (name) return "¼Ù°­´¶ÃÎ";
4378                 if (desc) return "¶á¤¯¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
4379 #else
4380                 if (name) return "Detect Evil";
4381                 if (desc) return "Detects all evil monsters in your vicinity.";
4382 #endif
4383     
4384                 {
4385                         int rad = DETECT_RAD_DEFAULT;
4386
4387                         if (info) return info_radius(rad);
4388
4389                         if (cast)
4390                         {
4391                                 detect_monsters_evil(rad);
4392                         }
4393                 }
4394                 break;
4395
4396         case 3:
4397 #ifdef JP
4398                 if (name) return "°­½­±À";
4399                 if (desc) return "ÆǤεå¤òÊü¤Ä¡£";
4400 #else
4401                 if (name) return "Stinking Cloud";
4402                 if (desc) return "Fires a ball of poison.";
4403 #endif
4404     
4405                 {
4406                         int dam = 10 + plev / 2;
4407                         int rad = 2;
4408
4409                         if (info) return info_damage(0, 0, dam);
4410
4411                         if (cast)
4412                         {
4413                                 if (!get_aim_dir(&dir)) return NULL;
4414
4415                                 fire_ball(GF_POIS, dir, dam, rad);
4416                         }
4417                 }
4418                 break;
4419
4420         case 4:
4421 #ifdef JP
4422                 if (name) return "¹õ¤¤Ì²¤ê";
4423                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4424 #else
4425                 if (name) return "Black Sleep";
4426                 if (desc) return "Attempts to sleep a monster.";
4427 #endif
4428     
4429                 {
4430                         int power = plev;
4431
4432                         if (info) return info_power(power);
4433
4434                         if (cast)
4435                         {
4436                                 if (!get_aim_dir(&dir)) return NULL;
4437
4438                                 sleep_monster(dir, plev);
4439                         }
4440                 }
4441                 break;
4442
4443         case 5:
4444 #ifdef JP
4445                 if (name) return "ÂÑÆÇ";
4446                 if (desc) return "°ìÄê»þ´Ö¡¢ÆǤؤÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
4447 #else
4448                 if (name) return "Resist Poison";
4449                 if (desc) return "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.";
4450 #endif
4451     
4452                 {
4453                         int base = 20;
4454
4455                         if (info) return info_duration(base, base);
4456
4457                         if (cast)
4458                         {
4459                                 set_oppose_pois(randint1(base) + base, FALSE);
4460                         }
4461                 }
4462                 break;
4463
4464         case 6:
4465 #ifdef JP
4466                 if (name) return "¶²¹²";
4467                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¡¢Û¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4468 #else
4469                 if (name) return "Horrify";
4470                 if (desc) return "Attempts to scare and stun a monster.";
4471 #endif
4472     
4473                 {
4474                         int power = plev;
4475
4476                         if (info) return info_power(power);
4477
4478                         if (cast)
4479                         {
4480                                 if (!get_aim_dir(&dir)) return NULL;
4481
4482                                 fear_monster(dir, power);
4483                                 stun_monster(dir, power);
4484                         }
4485                 }
4486                 break;
4487
4488         case 7:
4489 #ifdef JP
4490                 if (name) return "¥¢¥ó¥Ç¥Ã¥É½¾Â°";
4491                 if (desc) return "¥¢¥ó¥Ç¥Ã¥É1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4492 #else
4493                 if (name) return "Enslave Undead";
4494                 if (desc) return "Attempts to charm an undead monster.";
4495 #endif
4496     
4497                 {
4498                         int power = plev;
4499
4500                         if (info) return info_power(power);
4501
4502                         if (cast)
4503                         {
4504                                 if (!get_aim_dir(&dir)) return NULL;
4505
4506                                 control_one_undead(dir, power);
4507                         }
4508                 }
4509                 break;
4510
4511         case 8:
4512 #ifdef JP
4513                 if (name) return "¥¨¥ó¥È¥í¥Ô¡¼¤Îµå";
4514                 if (desc) return "À¸Ì¿¤Î¤¢¤ë¼Ô¤Ë¸ú²Ì¤Î¤¢¤ëµå¤òÊü¤Ä¡£";
4515 #else
4516                 if (name) return "Orb of Entropy";
4517                 if (desc) return "Fires a ball which damages living monsters.";
4518 #endif
4519     
4520                 {
4521                         int dice = 3;
4522                         int sides = 6;
4523                         int rad = (plev < 30) ? 2 : 3;
4524                         int base;
4525
4526                         if (p_ptr->pclass == CLASS_MAGE ||
4527                             p_ptr->pclass == CLASS_HIGH_MAGE ||
4528                             p_ptr->pclass == CLASS_SORCERER)
4529                                 base = plev + plev / 2;
4530                         else
4531                                 base = plev + plev / 4;
4532
4533
4534                         if (info) return info_damage(dice, sides, base);
4535
4536                         if (cast)
4537                         {
4538                                 if (!get_aim_dir(&dir)) return NULL;
4539
4540                                 fire_ball(GF_OLD_DRAIN, dir, damroll(dice, dice) + base, rad);
4541                         }
4542                 }
4543                 break;
4544
4545         case 9:
4546 #ifdef JP
4547                 if (name) return "ÃϹö¤ÎÌð";
4548                 if (desc) return "ÃϹö¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
4549 #else
4550                 if (name) return "Nether Bolt";
4551                 if (desc) return "Fires a bolt or beam of nether.";
4552 #endif
4553     
4554                 {
4555                         int dice = 8 + (plev - 5) / 4;
4556                         int sides = 8;
4557
4558                         if (info) return info_damage(dice, sides, 0);
4559
4560                         if (cast)
4561                         {
4562                                 if (!get_aim_dir(&dir)) return NULL;
4563
4564                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
4565                         }
4566                 }
4567                 break;
4568
4569         case 10:
4570 #ifdef JP
4571                 if (name) return "»¦Ù¤±À";
4572                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿ÆǤεå¤òȯÀ¸¤µ¤»¤ë¡£";
4573 #else
4574                 if (name) return "Cloud kill";
4575                 if (desc) return "Generate a ball of poison centered on you.";
4576 #endif
4577     
4578                 {
4579                         int dam = (30 + plev) * 2;
4580                         int rad = plev / 10 + 2;
4581
4582                         if (info) return info_damage(0, 0, dam/2);
4583
4584                         if (cast)
4585                         {
4586                                 project(0, rad, py, px, dam, GF_POIS, PROJECT_KILL | PROJECT_ITEM, -1);
4587                         }
4588                 }
4589                 break;
4590
4591         case 11:
4592 #ifdef JP
4593                 if (name) return "¥â¥ó¥¹¥¿¡¼¾ÃÌÇ";
4594                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¾Ã¤·µî¤ë¡£·Ð¸³Ãͤ䥢¥¤¥Æ¥à¤Ï¼ê¤ËÆþ¤é¤Ê¤¤¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4595 #else
4596                 if (name) return "Genocide One";
4597                 if (desc) return "Attempts to vanish a monster.";
4598 #endif
4599     
4600                 {
4601                         int power = plev + 50;
4602
4603                         if (info) return info_power(power);
4604
4605                         if (cast)
4606                         {
4607                                 if (!get_aim_dir(&dir)) return NULL;
4608
4609                                 fire_ball_hide(GF_GENOCIDE, dir, power, 0);
4610                         }
4611                 }
4612                 break;
4613
4614         case 12:
4615 #ifdef JP
4616                 if (name) return "ÆǤοÏ";
4617                 if (desc) return "Éð´ï¤ËÆǤΰÀ­¤ò¤Ä¤±¤ë¡£";
4618 #else
4619                 if (name) return "Poison Branding";
4620                 if (desc) return "Makes current weapon poison branded.";
4621 #endif
4622     
4623                 {
4624                         if (cast)
4625                         {
4626                                 brand_weapon(3);
4627                         }
4628                 }
4629                 break;
4630
4631         case 13:
4632 #ifdef JP
4633                 if (name) return "µÛ·ì¥É¥ì¥¤¥ó";
4634                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤ«¤éÀ¸Ì¿ÎϤòµÛ¤¤¤È¤ë¡£µÛ¤¤¤È¤Ã¤¿À¸Ì¿ÎϤˤè¤Ã¤ÆËþÊ¢ÅÙ¤¬¾å¤¬¤ë¡£";
4635 #else
4636                 if (name) return "Vampiric Drain";
4637                 if (desc) return "Absorbs some HP from a monster and gives them to you. You will also gain nutritional sustenance from this.";
4638 #endif
4639     
4640                 {
4641                         int dice = 1;
4642                         int sides = plev * 2;
4643                         int base = plev * 2;
4644
4645                         if (info) return info_damage(dice, sides, base);
4646
4647                         if (cast)
4648                         {
4649                                 int dam = base + damroll(dice, sides);
4650
4651                                 if (!get_aim_dir(&dir)) return NULL;
4652
4653                                 if (drain_life(dir, dam))
4654                                 {
4655                                         chg_virtue(V_SACRIFICE, -1);
4656                                         chg_virtue(V_VITALITY, -1);
4657
4658                                         hp_player(dam);
4659
4660                                         /*
4661                                          * Gain nutritional sustenance:
4662                                          * 150/hp drained
4663                                          *
4664                                          * A Food ration gives 5000
4665                                          * food points (by contrast)
4666                                          * Don't ever get more than
4667                                          * "Full" this way But if we
4668                                          * ARE Gorged, it won't cure
4669                                          * us
4670                                          */
4671                                         dam = p_ptr->food + MIN(5000, 100 * dam);
4672
4673                                         /* Not gorged already */
4674                                         if (p_ptr->food < PY_FOOD_MAX)
4675                                                 set_food(dam >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dam);
4676                                 }
4677                         }
4678                 }
4679                 break;
4680
4681         case 14:
4682 #ifdef JP
4683                 if (name) return "È¿º²¤Î½Ñ";
4684                 if (desc) return "¼þ°Ï¤Î»àÂΤä¹ü¤òÀ¸¤­ÊÖ¤¹¡£";
4685 #else
4686                 if (name) return "Animate dead";
4687                 if (desc) return "Resurrects nearby corpse and skeletons. And makes these your pets.";
4688 #endif
4689     
4690                 {
4691                         if (cast)
4692                         {
4693                                 animate_dead(0, py, px);
4694                         }
4695                 }
4696                 break;
4697
4698         case 15:
4699 #ifdef JP
4700                 if (name) return "Ëõ»¦";
4701                 if (desc) return "»ØÄꤷ¤¿Ê¸»ú¤Î¥â¥ó¥¹¥¿¡¼¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
4702 #else
4703                 if (name) return "Genocide";
4704                 if (desc) return "Eliminates an entire class of monster, exhausting you.  Powerful or unique monsters may resist.";
4705 #endif
4706     
4707                 {
4708                         int power = plev+50;
4709
4710                         if (info) return info_power(power);
4711
4712                         if (cast)
4713                         {
4714                                 symbol_genocide(power, TRUE);
4715                         }
4716                 }
4717                 break;
4718
4719         case 16:
4720 #ifdef JP
4721                 if (name) return "¶¸Àï»Î²½";
4722                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤¹¤ë¡£";
4723 #else
4724                 if (name) return "Berserk";
4725                 if (desc) return "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.";
4726 #endif
4727     
4728                 {
4729                         int base = 25;
4730
4731                         if (info) return info_duration(base, base);
4732
4733                         if (cast)
4734                         {
4735                                 set_shero(randint1(base) + base, FALSE);
4736                                 hp_player(30);
4737                                 set_afraid(0);
4738                         }
4739                 }
4740                 break;
4741
4742         case 17:
4743 #ifdef JP
4744                 if (name) return "°­Î´­";
4745                 if (desc) return "¥é¥ó¥À¥à¤ÇÍÍ¡¹¤Ê¸ú²Ì¤¬µ¯¤³¤ë¡£";
4746 #else
4747                 if (name) return "Invoke Spirits";
4748                 if (desc) return "Causes random effects.";
4749 #endif
4750     
4751                 {
4752                         if (info) return s_random;
4753
4754                         if (cast)
4755                         {
4756                                 if (!get_aim_dir(&dir)) return NULL;
4757
4758                                 cast_invoke_spirits(dir);
4759                         }
4760                 }
4761                 break;
4762
4763         case 18:
4764 #ifdef JP
4765                 if (name) return "°Å¹õ¤ÎÌð";
4766                 if (desc) return "°Å¹õ¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
4767 #else
4768                 if (name) return "Dark Bolt";
4769                 if (desc) return "Fires a bolt or beam of darkness.";
4770 #endif
4771     
4772                 {
4773                         int dice = 4 + (plev - 5) / 4;
4774                         int sides = 8;
4775
4776                         if (info) return info_damage(dice, sides, 0);
4777
4778                         if (cast)
4779                         {
4780                                 if (!get_aim_dir(&dir)) return NULL;
4781
4782                                 fire_bolt_or_beam(beam_chance(), GF_DARK, dir, damroll(dice, sides));
4783                         }
4784                 }
4785                 break;
4786
4787         case 19:
4788 #ifdef JP
4789                 if (name) return "¶¸ÍðÀï»Î";
4790                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤·¡¢²Ã®¤¹¤ë¡£";
4791 #else
4792                 if (name) return "Battle Frenzy";
4793                 if (desc) return "Gives another bonus to hit and HP, immunity to fear for a while. Hastes you. But decreases AC.";
4794 #endif
4795     
4796                 {
4797                         int b_base = 25;
4798                         int sp_base = plev / 2;
4799                         int sp_sides = 20 + plev / 2;
4800
4801                         if (info) return info_duration(b_base, b_base);
4802
4803                         if (cast)
4804                         {
4805                                 set_shero(randint1(25) + 25, FALSE);
4806                                 hp_player(30);
4807                                 set_afraid(0);
4808                                 set_fast(randint1(sp_sides) + sp_base, FALSE);
4809                         }
4810                 }
4811                 break;
4812
4813         case 20:
4814 #ifdef JP
4815                 if (name) return "µÛ·ì¤Î¿Ï";
4816                 if (desc) return "Éð´ï¤ËµÛ·ì¤Î°À­¤ò¤Ä¤±¤ë¡£";
4817 #else
4818                 if (name) return "Vampiric Branding";
4819                 if (desc) return "Makes current weapon Vampiric.";
4820 #endif
4821     
4822                 {
4823                         if (cast)
4824                         {
4825                                 brand_weapon(4);
4826                         }
4827                 }
4828                 break;
4829
4830         case 21:
4831 #ifdef JP
4832                 if (name) return "¿¿¡¦µÛ·ì";
4833                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤ«¤éÀ¸Ì¿ÎϤòµÛ¤¤¤È¤ë¡£µÛ¤¤¤È¤Ã¤¿À¸Ì¿ÎϤˤè¤Ã¤ÆÂÎÎϤ¬²óÉü¤¹¤ë¡£";
4834 #else
4835                 if (name) return "Vampirism True";
4836                 if (desc) return "Fires 3 bolts. Each of the bolts absorbs some HP from a monster and gives them to you.";
4837 #endif
4838     
4839                 {
4840                         int dam = 100;
4841
4842                         if (info) return format("%s3*%d", s_dam, dam);
4843
4844                         if (cast)
4845                         {
4846                                 int i;
4847
4848                                 if (!get_aim_dir(&dir)) return NULL;
4849
4850                                 chg_virtue(V_SACRIFICE, -1);
4851                                 chg_virtue(V_VITALITY, -1);
4852
4853                                 for (i = 0; i < 3; i++)
4854                                 {
4855                                         if (drain_life(dir, dam))
4856                                                 hp_player(dam);
4857                                 }
4858                         }
4859                 }
4860                 break;
4861
4862         case 22:
4863 #ifdef JP
4864                 if (name) return "»à¤Î¸Àº²";
4865                 if (desc) return "»ë³¦Æâ¤ÎÀ¸Ì¿¤Î¤¢¤ë¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
4866 #else
4867                 if (name) return "Nether Wave";
4868                 if (desc) return "Damages all living monsters in sight.";
4869 #endif
4870     
4871                 {
4872                         int sides = plev * 3;
4873
4874                         if (info) return info_damage(1, sides, 0);
4875
4876                         if (cast)
4877                         {
4878                                 dispel_living(randint1(sides));
4879                         }
4880                 }
4881                 break;
4882
4883         case 23:
4884 #ifdef JP
4885                 if (name) return "°Å¹õ¤ÎÍò";
4886                 if (desc) return "µðÂç¤Ê°Å¹õ¤Îµå¤òÊü¤Ä¡£";
4887 #else
4888                 if (name) return "Darkness Storm";
4889                 if (desc) return "Fires a huge ball of darkness.";
4890 #endif
4891     
4892                 {
4893                         int dam = 100 + plev * 2;
4894                         int rad = 4;
4895
4896                         if (info) return info_damage(0, 0, dam);
4897
4898                         if (cast)
4899                         {
4900                                 if (!get_aim_dir(&dir)) return NULL;
4901
4902                                 fire_ball(GF_DARK, dir, dam, rad);
4903                         }
4904                 }
4905                 break;
4906
4907         case 24:
4908 #ifdef JP
4909                 if (name) return "»à¤Î¸÷Àþ";
4910                 if (desc) return "»à¤Î¸÷Àþ¤òÊü¤Ä¡£";
4911 #else
4912                 if (name) return "Death Ray";
4913                 if (desc) return "Fires a beam of death.";
4914 #endif
4915     
4916                 {
4917                         if (cast)
4918                         {
4919                                 if (!get_aim_dir(&dir)) return NULL;
4920
4921                                 death_ray(dir, plev);
4922                         }
4923                 }
4924                 break;
4925
4926         case 25:
4927 #ifdef JP
4928                 if (name) return "»à¼Ô¾¤´­";
4929                 if (desc) return "1ÂΤΥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
4930 #else
4931                 if (name) return "Raise the Dead";
4932                 if (desc) return "Summons an undead monster.";
4933 #endif
4934     
4935                 {
4936                         if (cast)
4937                         {
4938                                 int type;
4939                                 bool pet = one_in_(3);
4940                                 u32b mode = 0L;
4941
4942                                 type = (plev > 47 ? SUMMON_HI_UNDEAD : SUMMON_UNDEAD);
4943
4944                                 if (!pet || (pet && (plev > 24) && one_in_(3)))
4945                                         mode |= PM_ALLOW_GROUP;
4946
4947                                 if (pet) mode |= PM_FORCE_PET;
4948                                 else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
4949
4950                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, type, mode))
4951                                 {
4952 #ifdef JP
4953                                         msg_print("Î䤿¤¤É÷¤¬¤¢¤Ê¤¿¤Î¼þ¤ê¤Ë¿á¤­»Ï¤á¤¿¡£¤½¤ì¤ÏÉåÇÔ½­¤ò±¿¤ó¤Ç¤¤¤ë...");
4954 #else
4955                                         msg_print("Cold winds begin to blow around you, carrying with them the stench of decay...");
4956 #endif
4957
4958
4959                                         if (pet)
4960                                         {
4961 #ifdef JP
4962                                                 msg_print("¸Å¤¨¤Î»à¤»¤ë¼Ô¶¦¤¬¤¢¤Ê¤¿¤Ë»Å¤¨¤ë¤¿¤áÅÚ¤«¤éᴤä¿¡ª");
4963 #else
4964                                                 msg_print("Ancient, long-dead forms arise from the ground to serve you!");
4965 #endif
4966                                         }
4967                                         else
4968                                         {
4969 #ifdef JP
4970                                                 msg_print("»à¼Ô¤¬á´¤Ã¤¿¡£Ì²¤ê¤ò˸¤²¤ë¤¢¤Ê¤¿¤òȳ¤¹¤ë¤¿¤á¤Ë¡ª");
4971 #else
4972                                                 msg_print("'The dead arise... to punish you for disturbing them!'");
4973 #endif
4974                                         }
4975
4976                                         chg_virtue(V_UNLIFE, 1);
4977                                 }
4978                         }
4979                 }
4980                 break;
4981
4982         case 26:
4983 #ifdef JP
4984                 if (name) return "»à¼Ô¤ÎÈëÅÁ";
4985                 if (desc) return "¥¢¥¤¥Æ¥à¤ò1¤Ä¼±Ê̤¹¤ë¡£¥ì¥Ù¥ë¤¬¹â¤¤¤È¥¢¥¤¥Æ¥à¤ÎǽÎϤò´°Á´¤ËÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£";
4986 #else
4987                 if (name) return "Esoteria";
4988                 if (desc) return "Identifies an item. Or *identifies* an item at higher level.";
4989 #endif
4990     
4991                 {
4992                         if (cast)
4993                         {
4994                                 if (randint1(50) > plev)
4995                                 {
4996                                         if (!ident_spell(FALSE)) return NULL;
4997                                 }
4998                                 else
4999                                 {
5000                                         if (!identify_fully(FALSE)) return NULL;
5001                                 }
5002                         }
5003                 }
5004                 break;
5005
5006         case 27:
5007 #ifdef JP
5008                 if (name) return "µÛ·ìµ´ÊѲ½";
5009                 if (desc) return "°ìÄê»þ´Ö¡¢µÛ·ìµ´¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤ËµÛ·ìµ´¤È¤·¤Æ¤ÎǽÎϤòÆÀ¤ë¡£";
5010 #else
5011                 if (name) return "Polymorph Vampire";
5012                 if (desc) return "Mimic a vampire for a while. Loses abilities of original race and gets abilities as a vampire.";
5013 #endif
5014     
5015                 {
5016                         int base = 10 + plev / 2;
5017
5018                         if (info) return info_duration(base, base);
5019
5020                         if (cast)
5021                         {
5022                                 set_mimic(base + randint1(base), MIMIC_VAMPIRE, FALSE);
5023                         }
5024                 }
5025                 break;
5026
5027         case 28:
5028 #ifdef JP
5029                 if (name) return "À¸Ì¿ÎÏÉü³è";
5030                 if (desc) return "¼º¤Ã¤¿·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
5031 #else
5032                 if (name) return "Restore Life";
5033                 if (desc) return "Restore lost experience.";
5034 #endif
5035     
5036                 {
5037                         if (cast)
5038                         {
5039                                 restore_level();
5040                         }
5041                 }
5042                 break;
5043
5044         case 29:
5045 #ifdef JP
5046                 if (name) return "¼þÊÕËõ»¦";
5047                 if (desc) return "¼«Ê¬¤Î¼þ°Ï¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤ò¸½ºß¤Î³¬¤«¤é¾Ã¤·µî¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
5048 #else
5049                 if (name) return "Mass Genocide";
5050                 if (desc) return "Eliminates all nearby monsters, exhausting you.  Powerful or unique monsters may be able to resist.";
5051 #endif
5052     
5053                 {
5054                         int power = plev + 50;
5055
5056                         if (info) return info_power(power);
5057
5058                         if (cast)
5059                         {
5060                                 mass_genocide(power, TRUE);
5061                         }
5062                 }
5063                 break;
5064
5065         case 30:
5066 #ifdef JP
5067                 if (name) return "ÃϹö¤Î¹å²Ð";
5068                 if (desc) return "¼Ù°­¤ÊÎϤò»ý¤ÄÊõ¼î¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
5069 #else
5070                 if (name) return "Hellfire";
5071                 if (desc) return "Fires a powerful ball of evil power. Hurts good monsters greatly.";
5072 #endif
5073     
5074                 {
5075                         int dam = 666;
5076                         int rad = 3;
5077
5078                         if (info) return info_damage(0, 0, dam);
5079
5080                         if (cast)
5081                         {
5082                                 if (!get_aim_dir(&dir)) return NULL;
5083
5084                                 fire_ball(GF_HELL_FIRE, dir, dam, rad);
5085 #ifdef JP
5086                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "ÃϹö¤Î¹å²Ð¤Î¼öʸ¤ò¾§¤¨¤¿ÈèÏ«", -1);
5087 #else
5088                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "the strain of casting Hellfire", -1);
5089 #endif
5090                         }
5091                 }
5092                 break;
5093
5094         case 31:
5095 #ifdef JP
5096                 if (name) return "Í©Âβ½";
5097                 if (desc) return "°ìÄê»þ´Ö¡¢ÊɤòÄ̤êÈ´¤±¤ë¤³¤È¤¬¤Ç¤­¼õ¤±¤ë¥À¥á¡¼¥¸¤¬·Ú¸º¤µ¤ì¤ëÍ©ÂΤξõÂÖ¤ËÊѿȤ¹¤ë¡£";
5098 #else
5099                 if (name) return "Wraithform";
5100                 if (desc) return "Becomes wraith form which gives ability to pass walls and makes all damages half.";
5101 #endif
5102     
5103                 {
5104                         int base = plev / 2;
5105
5106                         if (info) return info_duration(base, base);
5107
5108                         if (cast)
5109                         {
5110                                 set_wraith_form(randint1(base) + base, FALSE);
5111                         }
5112                 }
5113                 break;
5114         }
5115
5116         return "";
5117 }
5118
5119
5120 /*!
5121  * @brief ¥È¥é¥ó¥×ÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
5122  * @param spell ËâË¡ID
5123  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
5124  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
5125  */
5126 static cptr do_trump_spell(int spell, int mode)
5127 {
5128         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
5129         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
5130         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
5131         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
5132         bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
5133
5134 #ifdef JP
5135         static const char s_random[] = "¥é¥ó¥À¥à";
5136 #else
5137         static const char s_random[] = "random";
5138 #endif
5139
5140         int dir;
5141         int plev = p_ptr->lev;
5142
5143         switch (spell)
5144         {
5145         case 0:
5146 #ifdef JP
5147                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
5148                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
5149 #else
5150                 if (name) return "Phase Door";
5151                 if (desc) return "Teleport short distance.";
5152 #endif
5153     
5154                 {
5155                         int range = 10;
5156
5157                         if (info) return info_range(range);
5158
5159                         if (cast)
5160                         {
5161                                 teleport_player(range, 0L);
5162                         }
5163                 }
5164                 break;
5165
5166         case 1:
5167 #ifdef JP
5168                 if (name) return "ÃØéá¤Î¥«¡¼¥É";
5169                 if (desc) return "ÃØéá¤ò¾¤´­¤¹¤ë¡£";
5170 #else
5171                 if (name) return "Trump Spiders";
5172                 if (desc) return "Summons spiders.";
5173 #endif
5174     
5175                 {
5176                         if (cast || fail)
5177                         {
5178 #ifdef JP
5179                                 msg_print("¤¢¤Ê¤¿¤ÏÃØéá¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5180 #else
5181                                 msg_print("You concentrate on the trump of an spider...");
5182 #endif
5183
5184                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_SPIDER, PM_ALLOW_GROUP))
5185                                 {
5186                                         if (fail)
5187                                         {
5188 #ifdef JP
5189                                                 msg_print("¾¤´­¤µ¤ì¤¿ÃØéá¤ÏÅܤäƤ¤¤ë¡ª");
5190 #else
5191                                                 msg_print("The summoned spiders get angry!");
5192 #endif
5193                                         }
5194                                 }
5195                         }
5196                 }
5197                 break;
5198
5199         case 2:
5200 #ifdef JP
5201                 if (name) return "¥·¥ã¥Ã¥Õ¥ë";
5202                 if (desc) return "¥«¡¼¥É¤ÎÀꤤ¤ò¤¹¤ë¡£";
5203 #else
5204                 if (name) return "Shuffle";
5205                 if (desc) return "Causes random effects.";
5206 #endif
5207     
5208                 {
5209                         if (info) return s_random;
5210
5211                         if (cast)
5212                         {
5213                                 cast_shuffle();
5214                         }
5215                 }
5216                 break;
5217
5218         case 3:
5219 #ifdef JP
5220                 if (name) return "¥Õ¥í¥¢¡¦¥ê¥»¥Ã¥È";
5221                 if (desc) return "ºÇ¿¼³¬¤òÊѹ¹¤¹¤ë¡£";
5222 #else
5223                 if (name) return "Reset Recall";
5224                 if (desc) return "Resets the 'deepest' level for recall spell.";
5225 #endif
5226     
5227                 {
5228                         if (cast)
5229                         {
5230                                 if (!reset_recall()) return NULL;
5231                         }
5232                 }
5233                 break;
5234
5235         case 4:
5236 #ifdef JP
5237                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
5238                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
5239 #else
5240                 if (name) return "Teleport";
5241                 if (desc) return "Teleport long distance.";
5242 #endif
5243     
5244                 {
5245                         int range = plev * 4;
5246
5247                         if (info) return info_range(range);
5248
5249                         if (cast)
5250                         {
5251                                 teleport_player(range, 0L);
5252                         }
5253                 }
5254                 break;
5255
5256         case 5:
5257 #ifdef JP
5258                 if (name) return "´¶ÃΤΥ«¡¼¥É";
5259                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
5260 #else
5261                 if (name) return "Trump Spying";
5262                 if (desc) return "Gives telepathy for a while.";
5263 #endif
5264     
5265                 {
5266                         int base = 25;
5267                         int sides = 30;
5268
5269                         if (info) return info_duration(base, sides);
5270
5271                         if (cast)
5272                         {
5273                                 set_tim_esp(randint1(sides) + base, FALSE);
5274                         }
5275                 }
5276                 break;
5277
5278         case 6:
5279 #ifdef JP
5280                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
5281                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
5282 #else
5283                 if (name) return "Teleport Away";
5284                 if (desc) return "Teleports all monsters on the line away unless resisted.";
5285 #endif
5286     
5287                 {
5288                         int power = plev;
5289
5290                         if (info) return info_power(power);
5291
5292                         if (cast)
5293                         {
5294                                 if (!get_aim_dir(&dir)) return NULL;
5295
5296                                 fire_beam(GF_AWAY_ALL, dir, power);
5297                         }
5298                 }
5299                 break;
5300
5301         case 7:
5302 #ifdef JP
5303                 if (name) return "ưʪ¤Î¥«¡¼¥É";
5304                 if (desc) return "1ÂΤÎưʪ¤ò¾¤´­¤¹¤ë¡£";
5305 #else
5306                 if (name) return "Trump Animals";
5307                 if (desc) return "Summons an animal.";
5308 #endif
5309     
5310                 {
5311                         if (cast || fail)
5312                         {
5313                                 int type = (!fail ? SUMMON_ANIMAL_RANGER : SUMMON_ANIMAL);
5314
5315 #ifdef JP
5316                                 msg_print("¤¢¤Ê¤¿¤Ïưʪ¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5317 #else
5318                                 msg_print("You concentrate on the trump of an animal...");
5319 #endif
5320
5321                                 if (trump_summoning(1, !fail, py, px, 0, type, 0L))
5322                                 {
5323                                         if (fail)
5324                                         {
5325 #ifdef JP
5326                                                 msg_print("¾¤´­¤µ¤ì¤¿Æ°Êª¤ÏÅܤäƤ¤¤ë¡ª");
5327 #else
5328                                                 msg_print("The summoned animal gets angry!");
5329 #endif
5330                                         }
5331                                 }
5332                         }
5333                 }
5334                 break;
5335
5336         case 8:
5337 #ifdef JP
5338                 if (name) return "°ÜÆ°¤Î¥«¡¼¥É";
5339                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼«Ê¬¤Î­¸µ¤Ø°ÜÆ°¤µ¤»¤ë¡£";
5340 #else
5341                 if (name) return "Trump Reach";
5342                 if (desc) return "Pulls a distant item close to you.";
5343 #endif
5344     
5345                 {
5346                         int weight = plev * 15;
5347
5348                         if (info) return info_weight(weight);
5349
5350                         if (cast)
5351                         {
5352                                 if (!get_aim_dir(&dir)) return NULL;
5353
5354                                 fetch(dir, weight, FALSE);
5355                         }
5356                 }
5357                 break;
5358
5359         case 9:
5360 #ifdef JP
5361                 if (name) return "¥«¥ß¥«¥¼¤Î¥«¡¼¥É";
5362                 if (desc) return "Ê£¿ô¤ÎÇúȯ¤¹¤ë¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤¹¤ë¡£";
5363 #else
5364                 if (name) return "Trump Kamikaze";
5365                 if (desc) return "Summons monsters which explode by itself.";
5366 #endif
5367     
5368                 {
5369                         if (cast || fail)
5370                         {
5371                                 int x, y;
5372                                 int type;
5373
5374                                 if (cast)
5375                                 {
5376                                         if (!target_set(TARGET_KILL)) return NULL;
5377                                         x = target_col;
5378                                         y = target_row;
5379                                 }
5380                                 else
5381                                 {
5382                                         /* Summons near player when failed */
5383                                         x = px;
5384                                         y = py;
5385                                 }
5386
5387                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
5388                                         type = SUMMON_KAMIKAZE_LIVING;
5389                                 else
5390                                         type = SUMMON_KAMIKAZE;
5391
5392 #ifdef JP
5393                                 msg_print("¤¢¤Ê¤¿¤Ï¥«¥ß¥«¥¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5394 #else
5395                                 msg_print("You concentrate on several trumps at once...");
5396 #endif
5397
5398                                 if (trump_summoning(2 + randint0(plev / 7), !fail, y, x, 0, type, 0L))
5399                                 {
5400                                         if (fail)
5401                                         {
5402 #ifdef JP
5403                                                 msg_print("¾¤´­¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
5404 #else
5405                                                 msg_print("The summoned creatures get angry!");
5406 #endif
5407                                         }
5408                                 }
5409                         }
5410                 }
5411                 break;
5412
5413         case 10:
5414 #ifdef JP
5415                 if (name) return "¸¸Î´­";
5416                 if (desc) return "1ÂΤÎÍ©Îî¤ò¾¤´­¤¹¤ë¡£";
5417 #else
5418                 if (name) return "Phantasmal Servant";
5419                 if (desc) return "Summons a ghost.";
5420 #endif
5421     
5422                 {
5423                         /* Phantasmal Servant is not summoned as enemy when failed */
5424                         if (cast)
5425                         {
5426                                 int summon_lev = plev * 2 / 3 + randint1(plev / 2);
5427
5428                                 if (trump_summoning(1, !fail, py, px, (summon_lev * 3 / 2), SUMMON_PHANTOM, 0L))
5429                                 {
5430 #ifdef JP
5431                                         msg_print("¸æÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¸æ¼ç¿ÍÍÍ¡©");
5432 #else
5433                                         msg_print("'Your wish, master?'");
5434 #endif
5435                                 }
5436                         }
5437                 }
5438                 break;
5439
5440         case 11:
5441 #ifdef JP
5442                 if (name) return "¥¹¥Ô¡¼¥É¡¦¥â¥ó¥¹¥¿¡¼";
5443                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò²Ã®¤µ¤»¤ë¡£";
5444 #else
5445                 if (name) return "Haste Monster";
5446                 if (desc) return "Hastes a monster.";
5447 #endif
5448     
5449                 {
5450                         if (cast)
5451                         {
5452                                 bool result;
5453
5454                                 /* Temporary enable target_pet option */
5455                                 bool old_target_pet = target_pet;
5456                                 target_pet = TRUE;
5457
5458                                 result = get_aim_dir(&dir);
5459
5460                                 /* Restore target_pet option */
5461                                 target_pet = old_target_pet;
5462
5463                                 if (!result) return NULL;
5464
5465                                 speed_monster(dir, plev);
5466                         }
5467                 }
5468                 break;
5469
5470         case 12:
5471 #ifdef JP
5472                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
5473                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
5474 #else
5475                 if (name) return "Teleport Level";
5476                 if (desc) return "Teleport to up or down stairs in a moment.";
5477 #endif
5478     
5479                 {
5480                         if (cast)
5481                         {
5482 #ifdef JP
5483                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
5484 #else
5485                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
5486 #endif
5487                                 teleport_level(0);
5488                         }
5489                 }
5490                 break;
5491
5492         case 13:
5493 #ifdef JP
5494                 if (name) return "¼¡¸µ¤ÎÈâ";
5495                 if (desc) return "ûµ÷Î¥Æâ¤Î»ØÄꤷ¤¿¾ì½ê¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
5496 #else
5497                 if (name) return "Dimension Door";
5498                 if (desc) return "Teleport to given location.";
5499 #endif
5500     
5501                 {
5502                         int range = plev / 2 + 10;
5503
5504                         if (info) return info_range(range);
5505
5506                         if (cast)
5507                         {
5508 #ifdef JP
5509                                 msg_print("¼¡¸µ¤ÎÈ⤬³«¤¤¤¿¡£ÌÜŪÃϤòÁª¤ó¤Ç²¼¤µ¤¤¡£");
5510 #else
5511                                 msg_print("You open a dimensional gate. Choose a destination.");
5512 #endif
5513
5514                                 if (!dimension_door()) return NULL;
5515                         }
5516                 }
5517                 break;
5518
5519         case 14:
5520 #ifdef JP
5521                 if (name) return "µ¢´Ô¤Î¼öʸ";
5522                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
5523 #else
5524                 if (name) return "Word of Recall";
5525                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
5526 #endif
5527     
5528                 {
5529                         int base = 15;
5530                         int sides = 20;
5531
5532                         if (info) return info_delay(base, sides);
5533
5534                         if (cast)
5535                         {
5536                                 if (!word_of_recall()) return NULL;
5537                         }
5538                 }
5539                 break;
5540
5541         case 15:
5542 #ifdef JP
5543                 if (name) return "²øʪÄÉÊü";
5544                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
5545 #else
5546                 if (name) return "Banish";
5547                 if (desc) return "Teleports all monsters in sight away unless resisted.";
5548 #endif
5549     
5550                 {
5551                         int power = plev * 4;
5552
5553                         if (info) return info_power(power);
5554
5555                         if (cast)
5556                         {
5557                                 banish_monsters(power);
5558                         }
5559                 }
5560                 break;
5561
5562         case 16:
5563 #ifdef JP
5564                 if (name) return "°ÌÃÖ¸ò´¹¤Î¥«¡¼¥É";
5565                 if (desc) return "1ÂΤΥâ¥ó¥¹¥¿¡¼¤È°ÌÃÖ¤ò¸ò´¹¤¹¤ë¡£";
5566 #else
5567                 if (name) return "Swap Position";
5568                 if (desc) return "Swap positions of you and a monster.";
5569 #endif
5570     
5571                 {
5572                         if (cast)
5573                         {
5574                                 bool result;
5575
5576                                 /* HACK -- No range limit */
5577                                 project_length = -1;
5578
5579                                 result = get_aim_dir(&dir);
5580
5581                                 /* Restore range to default */
5582                                 project_length = 0;
5583
5584                                 if (!result) return NULL;
5585
5586                                 teleport_swap(dir);
5587                         }
5588                 }
5589                 break;
5590
5591         case 17:
5592 #ifdef JP
5593                 if (name) return "¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É";
5594                 if (desc) return "1ÂΤΥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
5595 #else
5596                 if (name) return "Trump Undead";
5597                 if (desc) return "Summons an undead monster.";
5598 #endif
5599     
5600                 {
5601                         if (cast || fail)
5602                         {
5603 #ifdef JP
5604                                 msg_print("¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5605 #else
5606                                 msg_print("You concentrate on the trump of an undead creature...");
5607 #endif
5608
5609                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_UNDEAD, 0L))
5610                                 {
5611                                         if (fail)
5612                                         {
5613 #ifdef JP
5614                                                 msg_print("¾¤´­¤µ¤ì¤¿¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
5615 #else
5616                                                 msg_print("The summoned undead creature gets angry!");
5617 #endif
5618                                         }
5619                                 }
5620                         }
5621                 }
5622                 break;
5623
5624         case 18:
5625 #ifdef JP
5626                 if (name) return "à¨ÃîÎà¤Î¥«¡¼¥É";
5627                 if (desc) return "1ÂΤΥҥɥé¤ò¾¤´­¤¹¤ë¡£";
5628 #else
5629                 if (name) return "Trump Reptiles";
5630                 if (desc) return "Summons a hydra.";
5631 #endif
5632     
5633                 {
5634                         if (cast || fail)
5635                         {
5636 #ifdef JP
5637                                 msg_print("¤¢¤Ê¤¿¤Ïà¨ÃîÎà¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5638 #else
5639                                 msg_print("You concentrate on the trump of a reptile...");
5640 #endif
5641
5642                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HYDRA, 0L))
5643                                 {
5644                                         if (fail)
5645                                         {
5646 #ifdef JP
5647                                                 msg_print("¾¤´­¤µ¤ì¤¿à¨ÃîÎà¤ÏÅܤäƤ¤¤ë¡ª");
5648 #else
5649                                                 msg_print("The summoned reptile gets angry!");
5650 #endif
5651                                         }
5652                                 }
5653                         }
5654                 }
5655                 break;
5656
5657         case 19:
5658 #ifdef JP
5659                 if (name) return "¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É";
5660                 if (desc) return "Ê£¿ô¤Î¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤¹¤ë¡£";
5661 #else
5662                 if (name) return "Trump Monsters";
5663                 if (desc) return "Summons some monsters.";
5664 #endif
5665     
5666                 {
5667                         if (cast || fail)
5668                         {
5669                                 int type;
5670
5671 #ifdef JP
5672                                 msg_print("¤¢¤Ê¤¿¤Ï¥â¥ó¥¹¥¿¡¼¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5673 #else
5674                                 msg_print("You concentrate on several trumps at once...");
5675 #endif
5676
5677                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
5678                                         type = SUMMON_LIVING;
5679                                 else
5680                                         type = 0;
5681
5682                                 if (trump_summoning((1 + (plev - 15)/ 10), !fail, py, px, 0, type, 0L))
5683                                 {
5684                                         if (fail)
5685                                         {
5686 #ifdef JP
5687                                                 msg_print("¾¤´­¤µ¤ì¤¿¥â¥ó¥¹¥¿¡¼¤ÏÅܤäƤ¤¤ë¡ª");
5688 #else
5689                                                 msg_print("The summoned creatures get angry!");
5690 #endif
5691                                         }
5692                                 }
5693
5694                         }
5695                 }
5696                 break;
5697
5698         case 20:
5699 #ifdef JP
5700                 if (name) return "¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É";
5701                 if (desc) return "1¥°¥ë¡¼¥×¤Î¥Ï¥¦¥ó¥É¤ò¾¤´­¤¹¤ë¡£";
5702 #else
5703                 if (name) return "Trump Hounds";
5704                 if (desc) return "Summons a group of hounds.";
5705 #endif
5706     
5707                 {
5708                         if (cast || fail)
5709                         {
5710 #ifdef JP
5711                                 msg_print("¤¢¤Ê¤¿¤Ï¥Ï¥¦¥ó¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5712 #else
5713                                 msg_print("You concentrate on the trump of a hound...");
5714 #endif
5715
5716                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HOUND, PM_ALLOW_GROUP))
5717                                 {
5718                                         if (fail)
5719                                         {
5720 #ifdef JP
5721                                                 msg_print("¾¤´­¤µ¤ì¤¿¥Ï¥¦¥ó¥É¤ÏÅܤäƤ¤¤ë¡ª");
5722 #else
5723                                                 msg_print("The summoned hounds get angry!");
5724 #endif
5725                                         }
5726                                 }
5727                         }
5728                 }
5729                 break;
5730
5731         case 21:
5732 #ifdef JP
5733                 if (name) return "¥È¥é¥ó¥×¤Î¿Ï";
5734                 if (desc) return "Éð´ï¤Ë¥È¥é¥ó¥×¤Î°À­¤ò¤Ä¤±¤ë¡£";
5735 #else
5736                 if (name) return "Trump Branding";
5737                 if (desc) return "Makes current weapon a Trump weapon.";
5738 #endif
5739     
5740                 {
5741                         if (cast)
5742                         {
5743                                 brand_weapon(5);
5744                         }
5745                 }
5746                 break;
5747
5748         case 22:
5749 #ifdef JP
5750                 if (name) return "¿Í´Ö¥È¥é¥ó¥×";
5751                 if (desc) return "¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤«¡¢¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤¬¿È¤Ë¤Ä¤¯¡£";
5752 #else
5753                 if (name) return "Living Trump";
5754                 if (desc) return "Gives mutation which makes you teleport randomly or makes you able to teleport at will.";
5755 #endif
5756     
5757                 {
5758                         if (cast)
5759                         {
5760                                 int mutation;
5761
5762                                 if (one_in_(7))
5763                                         /* Teleport control */
5764                                         mutation = 12;
5765                                 else
5766                                         /* Random teleportation (uncontrolled) */
5767                                         mutation = 77;
5768
5769                                 /* Gain the mutation */
5770                                 if (gain_random_mutation(mutation))
5771                                 {
5772 #ifdef JP
5773                                         msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤­¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
5774 #else
5775                                         msg_print("You have turned into a Living Trump.");
5776 #endif
5777                                 }
5778                         }
5779                 }
5780                 break;
5781
5782         case 23:
5783 #ifdef JP
5784                 if (name) return "¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É";
5785                 if (desc) return "1ÂΤΥµ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤¹¤ë¡£";
5786 #else
5787                 if (name) return "Trump Cyberdemon";
5788                 if (desc) return "Summons a cyber demon.";
5789 #endif
5790     
5791                 {
5792                         if (cast || fail)
5793                         {
5794 #ifdef JP
5795                                 msg_print("¤¢¤Ê¤¿¤Ï¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5796 #else
5797                                 msg_print("You concentrate on the trump of a Cyberdemon...");
5798 #endif
5799
5800                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_CYBER, 0L))
5801                                 {
5802                                         if (fail)
5803                                         {
5804 #ifdef JP
5805                                                 msg_print("¾¤´­¤µ¤ì¤¿¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5806 #else
5807                                                 msg_print("The summoned Cyberdemon gets angry!");
5808 #endif
5809                                         }
5810                                 }
5811                         }
5812                 }
5813                 break;
5814
5815         case 24:
5816 #ifdef JP
5817                 if (name) return "ͽ¸«¤Î¥«¡¼¥É";
5818                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
5819 #else
5820                 if (name) return "Trump Divination";
5821                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
5822 #endif
5823     
5824                 {
5825                         int rad = DETECT_RAD_DEFAULT;
5826
5827                         if (info) return info_radius(rad);
5828
5829                         if (cast)
5830                         {
5831                                 detect_all(rad);
5832                         }
5833                 }
5834                 break;
5835
5836         case 25:
5837 #ifdef JP
5838                 if (name) return "Ãμ±¤Î¥«¡¼¥É";
5839                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
5840 #else
5841                 if (name) return "Trump Lore";
5842                 if (desc) return "*Identifies* an item.";
5843 #endif
5844     
5845                 {
5846                         if (cast)
5847                         {
5848                                 if (!identify_fully(FALSE)) return NULL;
5849                         }
5850                 }
5851                 break;
5852
5853         case 26:
5854 #ifdef JP
5855                 if (name) return "²óÉü¥â¥ó¥¹¥¿¡¼";
5856                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤÎÂÎÎϤò²óÉü¤µ¤»¤ë¡£";
5857 #else
5858                 if (name) return "Heal Monster";
5859                 if (desc) return "Heal a monster.";
5860 #endif
5861     
5862                 {
5863                         int heal = plev * 10 + 200;
5864
5865                         if (info) return info_heal(0, 0, heal);
5866
5867                         if (cast)
5868                         {
5869                                 bool result;
5870
5871                                 /* Temporary enable target_pet option */
5872                                 bool old_target_pet = target_pet;
5873                                 target_pet = TRUE;
5874
5875                                 result = get_aim_dir(&dir);
5876
5877                                 /* Restore target_pet option */
5878                                 target_pet = old_target_pet;
5879
5880                                 if (!result) return NULL;
5881
5882                                 heal_monster(dir, heal);
5883                         }
5884                 }
5885                 break;
5886
5887         case 27:
5888 #ifdef JP
5889                 if (name) return "¥É¥é¥´¥ó¤Î¥«¡¼¥É";
5890                 if (desc) return "1ÂΤΥɥ饴¥ó¤ò¾¤´­¤¹¤ë¡£";
5891 #else
5892                 if (name) return "Trump Dragon";
5893                 if (desc) return "Summons a dragon.";
5894 #endif
5895     
5896                 {
5897                         if (cast || fail)
5898                         {
5899 #ifdef JP
5900                                 msg_print("¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5901 #else
5902                                 msg_print("You concentrate on the trump of a dragon...");
5903 #endif
5904
5905                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_DRAGON, 0L))
5906                                 {
5907                                         if (fail)
5908                                         {
5909 #ifdef JP
5910                                                 msg_print("¾¤´­¤µ¤ì¤¿¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5911 #else
5912                                                 msg_print("The summoned dragon gets angry!");
5913 #endif
5914                                         }
5915                                 }
5916                         }
5917                 }
5918                 break;
5919
5920         case 28:
5921 #ifdef JP
5922                 if (name) return "ð¨ÀФΥ«¡¼¥É";
5923                 if (desc) return "¼«Ê¬¤Î¼þÊÕ¤Ëð¨ÀФòÍî¤È¤¹¡£";
5924 #else
5925                 if (name) return "Trump Meteor";
5926                 if (desc) return "Makes meteor balls fall down to nearby random locations.";
5927 #endif
5928     
5929                 {
5930                         int dam = plev * 2;
5931                         int rad = 2;
5932
5933                         if (info) return info_multi_damage(dam);
5934
5935                         if (cast)
5936                         {
5937                                 cast_meteor(dam, rad);
5938                         }
5939                 }
5940                 break;
5941
5942         case 29:
5943 #ifdef JP
5944                 if (name) return "¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É";
5945                 if (desc) return "1ÂΤΰ­Ëâ¤ò¾¤´­¤¹¤ë¡£";
5946 #else
5947                 if (name) return "Trump Demon";
5948                 if (desc) return "Summons a demon.";
5949 #endif
5950     
5951                 {
5952                         if (cast || fail)
5953                         {
5954 #ifdef JP
5955                                 msg_print("¤¢¤Ê¤¿¤Ï¥Ç¡¼¥â¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5956 #else
5957                                 msg_print("You concentrate on the trump of a demon...");
5958 #endif
5959
5960                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_DEMON, 0L))
5961                                 {
5962                                         if (fail)
5963                                         {
5964 #ifdef JP
5965                                                 msg_print("¾¤´­¤µ¤ì¤¿¥Ç¡¼¥â¥ó¤ÏÅܤäƤ¤¤ë¡ª");
5966 #else
5967                                                 msg_print("The summoned demon gets angry!");
5968 #endif
5969                                         }
5970                                 }
5971                         }
5972                 }
5973                 break;
5974
5975         case 30:
5976 #ifdef JP
5977                 if (name) return "ÃϹö¤Î¥«¡¼¥É";
5978                 if (desc) return "1ÂΤξåµé¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤¹¤ë¡£";
5979 #else
5980                 if (name) return "Trump Greater Undead";
5981                 if (desc) return "Summons a greater undead.";
5982 #endif
5983     
5984                 {
5985                         if (cast || fail)
5986                         {
5987 #ifdef JP
5988                                 msg_print("¤¢¤Ê¤¿¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
5989 #else
5990                                 msg_print("You concentrate on the trump of a greater undead being...");
5991 #endif
5992                                 /* May allow unique depend on level and dice roll */
5993                                 if (trump_summoning(1, !fail, py, px, 0, SUMMON_HI_UNDEAD, PM_ALLOW_UNIQUE))
5994                                 {
5995                                         if (fail)
5996                                         {
5997 #ifdef JP
5998                                                 msg_print("¾¤´­¤µ¤ì¤¿¾åµé¥¢¥ó¥Ç¥Ã¥É¤ÏÅܤäƤ¤¤ë¡ª");
5999 #else
6000                                                 msg_print("The summoned greater undead creature gets angry!");
6001 #endif
6002                                         }
6003                                 }
6004                         }
6005                 }
6006                 break;
6007
6008         case 31:
6009 #ifdef JP
6010                 if (name) return "¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É";
6011                 if (desc) return "1ÂΤθÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤¹¤ë¡£";
6012 #else
6013                 if (name) return "Trump Ancient Dragon";
6014                 if (desc) return "Summons an ancient dragon.";
6015 #endif
6016     
6017                 {
6018                         if (cast)
6019                         {
6020                                 int type;
6021
6022                                 if (p_ptr->pclass == CLASS_BEASTMASTER)
6023                                         type = SUMMON_HI_DRAGON_LIVING;
6024                                 else
6025                                         type = SUMMON_HI_DRAGON;
6026
6027 #ifdef JP
6028                                 msg_print("¤¢¤Ê¤¿¤Ï¸ÅÂå¥É¥é¥´¥ó¤Î¥«¡¼¥É¤Ë½¸Ã椹¤ë...");
6029 #else
6030                                 msg_print("You concentrate on the trump of an ancient dragon...");
6031 #endif
6032
6033                                 /* May allow unique depend on level and dice roll */
6034                                 if (trump_summoning(1, !fail, py, px, 0, type, PM_ALLOW_UNIQUE))
6035                                 {
6036                                         if (fail)
6037                                         {
6038 #ifdef JP
6039                                                 msg_print("¾¤´­¤µ¤ì¤¿¸ÅÂå¥É¥é¥´¥ó¤ÏÅܤäƤ¤¤ë¡ª");
6040 #else
6041                                                 msg_print("The summoned ancient dragon gets angry!");
6042 #endif
6043                                         }
6044                                 }
6045                         }
6046                 }
6047                 break;
6048         }
6049
6050         return "";
6051 }
6052
6053
6054 /*!
6055  * @brief Èë½ÑÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
6056  * @param spell ËâË¡ID
6057  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
6058  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
6059  */
6060 static cptr do_arcane_spell(int spell, int mode)
6061 {
6062         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
6063         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
6064         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
6065         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
6066
6067         int dir;
6068         int plev = p_ptr->lev;
6069
6070         switch (spell)
6071         {
6072         case 0:
6073 #ifdef JP
6074                 if (name) return "ÅÅ·â";
6075                 if (desc) return "ÅÅ·â¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
6076 #else
6077                 if (name) return "Zap";
6078                 if (desc) return "Fires a bolt or beam of lightning.";
6079 #endif
6080     
6081                 {
6082                         int dice = 3 + (plev - 1) / 5;
6083                         int sides = 3;
6084
6085                         if (info) return info_damage(dice, sides, 0);
6086
6087                         if (cast)
6088                         {
6089                                 if (!get_aim_dir(&dir)) return NULL;
6090
6091                                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
6092                         }
6093                 }
6094                 break;
6095
6096         case 1:
6097 #ifdef JP
6098                 if (name) return "ËâË¡¤Î»Ü¾û";
6099                 if (desc) return "Èâ¤Ë¸°¤ò¤«¤±¤ë¡£";
6100 #else
6101                 if (name) return "Wizard Lock";
6102                 if (desc) return "Locks a door.";
6103 #endif
6104     
6105                 {
6106                         if (cast)
6107                         {
6108                                 if (!get_aim_dir(&dir)) return NULL;
6109
6110                                 wizard_lock(dir);
6111                         }
6112                 }
6113                 break;
6114
6115         case 2:
6116 #ifdef JP
6117                 if (name) return "Æ©ÌÀÂδ¶ÃÎ";
6118                 if (desc) return "¶á¤¯¤ÎÆ©ÌÀ¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
6119 #else
6120                 if (name) return "Detect Invisibility";
6121                 if (desc) return "Detects all invisible monsters in your vicinity.";
6122 #endif
6123     
6124                 {
6125                         int rad = DETECT_RAD_DEFAULT;
6126
6127                         if (info) return info_radius(rad);
6128
6129                         if (cast)
6130                         {
6131                                 detect_monsters_invis(rad);
6132                         }
6133                 }
6134                 break;
6135
6136         case 3:
6137 #ifdef JP
6138                 if (name) return "¥â¥ó¥¹¥¿¡¼´¶ÃÎ";
6139                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¸«¤¨¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
6140 #else
6141                 if (name) return "Detect Monsters";
6142                 if (desc) return "Detects all monsters in your vicinity unless invisible.";
6143 #endif
6144     
6145                 {
6146                         int rad = DETECT_RAD_DEFAULT;
6147
6148                         if (info) return info_radius(rad);
6149
6150                         if (cast)
6151                         {
6152                                 detect_monsters_normal(rad);
6153                         }
6154                 }
6155                 break;
6156
6157         case 4:
6158 #ifdef JP
6159                 if (name) return "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È";
6160                 if (desc) return "¶áµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
6161 #else
6162                 if (name) return "Blink";
6163                 if (desc) return "Teleport short distance.";
6164 #endif
6165     
6166                 {
6167                         int range = 10;
6168
6169                         if (info) return info_range(range);
6170
6171                         if (cast)
6172                         {
6173                                 teleport_player(range, 0L);
6174                         }
6175                 }
6176                 break;
6177
6178         case 5:
6179 #ifdef JP
6180                 if (name) return "¥é¥¤¥È¡¦¥¨¥ê¥¢";
6181                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
6182 #else
6183                 if (name) return "Light Area";
6184                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
6185 #endif
6186     
6187                 {
6188                         int dice = 2;
6189                         int sides = plev / 2;
6190                         int rad = plev / 10 + 1;
6191
6192                         if (info) return info_damage(dice, sides, 0);
6193
6194                         if (cast)
6195                         {
6196                                 lite_area(damroll(dice, sides), rad);
6197                         }
6198                 }
6199                 break;
6200
6201         case 6:
6202 #ifdef JP
6203                 if (name) return "櫤ÈÈâ Ç˲õ";
6204                 if (desc) return "°ìľÀþ¾å¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
6205 #else
6206                 if (name) return "Trap & Door Destruction";
6207                 if (desc) return "Fires a beam which destroy traps and doors.";
6208 #endif
6209     
6210                 {
6211                         if (cast)
6212                         {
6213                                 if (!get_aim_dir(&dir)) return NULL;
6214
6215                                 destroy_door(dir);
6216                         }
6217                 }
6218                 break;
6219
6220         case 7:
6221 #ifdef JP
6222                 if (name) return "·Ú½ý¤Î¼£Ìþ";
6223                 if (desc) return "²ø²æ¤ÈÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
6224 #else
6225                 if (name) return "Cure Light Wounds";
6226                 if (desc) return "Heals cut and HP a little.";
6227 #endif
6228     
6229                 {
6230                         int dice = 2;
6231                         int sides = 8;
6232
6233                         if (info) return info_heal(dice, sides, 0);
6234
6235                         if (cast)
6236                         {
6237                                 hp_player(damroll(dice, sides));
6238                                 set_cut(p_ptr->cut - 10);
6239                         }
6240                 }
6241                 break;
6242
6243         case 8:
6244 #ifdef JP
6245                 if (name) return "櫤ÈÈâ ´¶ÃÎ";
6246                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤È³¬Ãʤò´¶ÃΤ¹¤ë¡£";
6247 #else
6248                 if (name) return "Detect Doors & Traps";
6249                 if (desc) return "Detects traps, doors, and stairs in your vicinity.";
6250 #endif
6251     
6252                 {
6253                         int rad = DETECT_RAD_DEFAULT;
6254
6255                         if (info) return info_radius(rad);
6256
6257                         if (cast)
6258                         {
6259                                 detect_traps(rad, TRUE);
6260                                 detect_doors(rad);
6261                                 detect_stairs(rad);
6262                         }
6263                 }
6264                 break;
6265
6266         case 9:
6267 #ifdef JP
6268                 if (name) return "dzÁÇ";
6269                 if (desc) return "¸÷¸»¤ËdzÎÁ¤òÊäµë¤¹¤ë¡£";
6270 #else
6271                 if (name) return "Phlogiston";
6272                 if (desc) return "Adds more turns of light to a lantern or torch.";
6273 #endif
6274     
6275                 {
6276                         if (cast)
6277                         {
6278                                 phlogiston();
6279                         }
6280                 }
6281                 break;
6282
6283         case 10:
6284 #ifdef JP
6285                 if (name) return "ºâÊõ´¶ÃÎ";
6286                 if (desc) return "¶á¤¯¤ÎºâÊõ¤ò´¶ÃΤ¹¤ë¡£";
6287 #else
6288                 if (name) return "Detect Treasure";
6289                 if (desc) return "Detects all treasures in your vicinity.";
6290 #endif
6291     
6292                 {
6293                         int rad = DETECT_RAD_DEFAULT;
6294
6295                         if (info) return info_radius(rad);
6296
6297                         if (cast)
6298                         {
6299                                 detect_treasure(rad);
6300                                 detect_objects_gold(rad);
6301                         }
6302                 }
6303                 break;
6304
6305         case 11:
6306 #ifdef JP
6307                 if (name) return "ËâË¡ ´¶ÃÎ";
6308                 if (desc) return "¶á¤¯¤ÎËâË¡¤¬¤«¤«¤Ã¤¿¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6309 #else
6310                 if (name) return "Detect Enchantment";
6311                 if (desc) return "Detects all magical items in your vicinity.";
6312 #endif
6313     
6314                 {
6315                         int rad = DETECT_RAD_DEFAULT;
6316
6317                         if (info) return info_radius(rad);
6318
6319                         if (cast)
6320                         {
6321                                 detect_objects_magic(rad);
6322                         }
6323                 }
6324                 break;
6325
6326         case 12:
6327 #ifdef JP
6328                 if (name) return "¥¢¥¤¥Æ¥à´¶ÃÎ";
6329                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6330 #else
6331                 if (name) return "Detect Objects";
6332                 if (desc) return "Detects all items in your vicinity.";
6333 #endif
6334     
6335                 {
6336                         int rad = DETECT_RAD_DEFAULT;
6337
6338                         if (info) return info_radius(rad);
6339
6340                         if (cast)
6341                         {
6342                                 detect_objects_normal(rad);
6343                         }
6344                 }
6345                 break;
6346
6347         case 13:
6348 #ifdef JP
6349                 if (name) return "²òÆÇ";
6350                 if (desc) return "ÆǤòÂÎÆ⤫¤é´°Á´¤Ë¼è¤ê½ü¤¯¡£";
6351 #else
6352                 if (name) return "Cure Poison";
6353                 if (desc) return "Cures poison status.";
6354 #endif
6355     
6356                 {
6357                         if (cast)
6358                         {
6359                                 set_poisoned(0);
6360                         }
6361                 }
6362                 break;
6363
6364         case 14:
6365 #ifdef JP
6366                 if (name) return "ÂÑÎä";
6367                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6368 #else
6369                 if (name) return "Resist Cold";
6370                 if (desc) return "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.";
6371 #endif
6372     
6373                 {
6374                         int base = 20;
6375
6376                         if (info) return info_duration(base, base);
6377
6378                         if (cast)
6379                         {
6380                                 set_oppose_cold(randint1(base) + base, FALSE);
6381                         }
6382                 }
6383                 break;
6384
6385         case 15:
6386 #ifdef JP
6387                 if (name) return "ÂѲÐ";
6388                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6389 #else
6390                 if (name) return "Resist Fire";
6391                 if (desc) return "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.";
6392 #endif
6393     
6394                 {
6395                         int base = 20;
6396
6397                         if (info) return info_duration(base, base);
6398
6399                         if (cast)
6400                         {
6401                                 set_oppose_fire(randint1(base) + base, FALSE);
6402                         }
6403                 }
6404                 break;
6405
6406         case 16:
6407 #ifdef JP
6408                 if (name) return "ÂÑÅÅ";
6409                 if (desc) return "°ìÄê»þ´Ö¡¢ÅÅ·â¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6410 #else
6411                 if (name) return "Resist Lightning";
6412                 if (desc) return "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.";
6413 #endif
6414     
6415                 {
6416                         int base = 20;
6417
6418                         if (info) return info_duration(base, base);
6419
6420                         if (cast)
6421                         {
6422                                 set_oppose_elec(randint1(base) + base, FALSE);
6423                         }
6424                 }
6425                 break;
6426
6427         case 17:
6428 #ifdef JP
6429                 if (name) return "ÂÑ»À";
6430                 if (desc) return "°ìÄê»þ´Ö¡¢»À¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6431 #else
6432                 if (name) return "Resist Acid";
6433                 if (desc) return "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.";
6434 #endif
6435     
6436                 {
6437                         int base = 20;
6438
6439                         if (info) return info_duration(base, base);
6440
6441                         if (cast)
6442                         {
6443                                 set_oppose_acid(randint1(base) + base, FALSE);
6444                         }
6445                 }
6446                 break;
6447
6448         case 18:
6449 #ifdef JP
6450                 if (name) return "½Å½ý¤Î¼£Ìþ";
6451                 if (desc) return "²ø²æ¤ÈÂÎÎϤòÃæÄøÅÙ²óÉü¤µ¤»¤ë¡£";
6452 #else
6453                 if (name) return "Cure Medium Wounds";
6454                 if (desc) return "Heals cut and HP more.";
6455 #endif
6456     
6457                 {
6458                         int dice = 4;
6459                         int sides = 8;
6460
6461                         if (info) return info_heal(dice, sides, 0);
6462
6463                         if (cast)
6464                         {
6465                                 hp_player(damroll(dice, sides));
6466                                 set_cut((p_ptr->cut / 2) - 50);
6467                         }
6468                 }
6469                 break;
6470
6471         case 19:
6472 #ifdef JP
6473                 if (name) return "¥Æ¥ì¥Ý¡¼¥È";
6474                 if (desc) return "±óµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
6475 #else
6476                 if (name) return "Teleport";
6477                 if (desc) return "Teleport long distance.";
6478 #endif
6479     
6480                 {
6481                         int range = plev * 5;
6482
6483                         if (info) return info_range(range);
6484
6485                         if (cast)
6486                         {
6487                                 teleport_player(range, 0L);
6488                         }
6489                 }
6490                 break;
6491
6492         case 20:
6493 #ifdef JP
6494                 if (name) return "´ÕÄê";
6495                 if (desc) return "¥¢¥¤¥Æ¥à¤ò¼±Ê̤¹¤ë¡£";
6496 #else
6497                 if (name) return "Identify";
6498                 if (desc) return "Identifies an item.";
6499 #endif
6500     
6501                 {
6502                         if (cast)
6503                         {
6504                                 if (!ident_spell(FALSE)) return NULL;
6505                         }
6506                 }
6507                 break;
6508
6509         case 21:
6510 #ifdef JP
6511                 if (name) return "´äÀÐÍϲò";
6512                 if (desc) return "ÊɤòÍϤ«¤·¤Æ¾²¤Ë¤¹¤ë¡£";
6513 #else
6514                 if (name) return "Stone to Mud";
6515                 if (desc) return "Turns one rock square to mud.";
6516 #endif
6517     
6518                 {
6519                         int dice = 1;
6520                         int sides = 30;
6521                         int base = 20;
6522
6523                         if (info) return info_damage(dice, sides, base);
6524
6525                         if (cast)
6526                         {
6527                                 if (!get_aim_dir(&dir)) return NULL;
6528
6529                                 wall_to_mud(dir, 20 + randint1(30));
6530                         }
6531                 }
6532                 break;
6533
6534         case 22:
6535 #ifdef JP
6536                 if (name) return "Á®¸÷";
6537                 if (desc) return "¸÷Àþ¤òÊü¤Ä¡£¸÷¤ê¤ò·ù¤¦¥â¥ó¥¹¥¿¡¼¤Ë¸ú²Ì¤¬¤¢¤ë¡£";
6538 #else
6539                 if (name) return "Ray of Light";
6540                 if (desc) return "Fires a beam of light which damages to light-sensitive monsters.";
6541 #endif
6542     
6543                 {
6544                         int dice = 6;
6545                         int sides = 8;
6546
6547                         if (info) return info_damage(dice, sides, 0);
6548
6549                         if (cast)
6550                         {
6551                                 if (!get_aim_dir(&dir)) return NULL;
6552
6553 #ifdef JP
6554                                 msg_print("¸÷Àþ¤¬Êü¤¿¤ì¤¿¡£");
6555 #else
6556                                 msg_print("A line of light appears.");
6557 #endif
6558
6559                                 lite_line(dir, damroll(6, 8));
6560                         }
6561                 }
6562                 break;
6563
6564         case 23:
6565 #ifdef JP
6566                 if (name) return "¶õÊ¢½¼Â­";
6567                 if (desc) return "ËþÊ¢¤Ë¤¹¤ë¡£";
6568 #else
6569                 if (name) return "Satisfy Hunger";
6570                 if (desc) return "Satisfies hunger.";
6571 #endif
6572     
6573                 {
6574                         if (cast)
6575                         {
6576                                 set_food(PY_FOOD_MAX - 1);
6577                         }
6578                 }
6579                 break;
6580
6581         case 24:
6582 #ifdef JP
6583                 if (name) return "Æ©ÌÀ»ëǧ";
6584                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
6585 #else
6586                 if (name) return "See Invisible";
6587                 if (desc) return "Gives see invisible for a while.";
6588 #endif
6589     
6590                 {
6591                         int base = 24;
6592
6593                         if (info) return info_duration(base, base);
6594
6595                         if (cast)
6596                         {
6597                                 set_tim_invis(randint1(base) + base, FALSE);
6598                         }
6599                 }
6600                 break;
6601
6602         case 25:
6603 #ifdef JP
6604                 if (name) return "¥¨¥ì¥á¥ó¥¿¥ë¾¤´­";
6605                 if (desc) return "1ÂΤΥ¨¥ì¥á¥ó¥¿¥ë¤ò¾¤´­¤¹¤ë¡£";
6606 #else
6607                 if (name) return "Conjure Elemental";
6608                 if (desc) return "Summons an elemental.";
6609 #endif
6610     
6611                 {
6612                         if (cast)
6613                         {
6614                                 if (!summon_specific(-1, py, px, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))
6615                                 {
6616 #ifdef JP
6617                                         msg_print("¥¨¥ì¥á¥ó¥¿¥ë¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
6618 #else
6619                                         msg_print("No Elementals arrive.");
6620 #endif
6621                                 }
6622                         }
6623                 }
6624                 break;
6625
6626         case 26:
6627 #ifdef JP
6628                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥ì¥Ù¥ë";
6629                 if (desc) return "½Ö»þ¤Ë¾å¤«²¼¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ë¡£";
6630 #else
6631                 if (name) return "Teleport Level";
6632                 if (desc) return "Teleport to up or down stairs in a moment.";
6633 #endif
6634     
6635                 {
6636                         if (cast)
6637                         {
6638 #ifdef JP
6639                                 if (!get_check("ËÜÅö¤Ë¾¤Î³¬¤Ë¥Æ¥ì¥Ý¡¼¥È¤·¤Þ¤¹¤«¡©")) return NULL;
6640 #else
6641                                 if (!get_check("Are you sure? (Teleport Level)")) return NULL;
6642 #endif
6643                                 teleport_level(0);
6644                         }
6645                 }
6646                 break;
6647
6648         case 27:
6649 #ifdef JP
6650                 if (name) return "¥Æ¥ì¥Ý¡¼¥È¡¦¥â¥ó¥¹¥¿¡¼";
6651                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¥Ó¡¼¥à¤òÊü¤Ä¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
6652 #else
6653                 if (name) return "Teleport Away";
6654                 if (desc) return "Teleports all monsters on the line away unless resisted.";
6655 #endif
6656     
6657                 {
6658                         int power = plev;
6659
6660                         if (info) return info_power(power);
6661
6662                         if (cast)
6663                         {
6664                                 if (!get_aim_dir(&dir)) return NULL;
6665
6666                                 fire_beam(GF_AWAY_ALL, dir, power);
6667                         }
6668                 }
6669                 break;
6670
6671         case 28:
6672 #ifdef JP
6673                 if (name) return "¸µÁǤεå";
6674                 if (desc) return "±ê¡¢ÅÅ·â¡¢Î䵤¡¢»À¤Î¤É¤ì¤«¤Îµå¤òÊü¤Ä¡£";
6675 #else
6676                 if (name) return "Elemental Ball";
6677                 if (desc) return "Fires a ball of some elements.";
6678 #endif
6679     
6680                 {
6681                         int dam = 75 + plev;
6682                         int rad = 2;
6683
6684                         if (info) return info_damage(0, 0, dam);
6685
6686                         if (cast)
6687                         {
6688                                 int type;
6689
6690                                 if (!get_aim_dir(&dir)) return NULL;
6691
6692                                 switch (randint1(4))
6693                                 {
6694                                         case 1:  type = GF_FIRE;break;
6695                                         case 2:  type = GF_ELEC;break;
6696                                         case 3:  type = GF_COLD;break;
6697                                         default: type = GF_ACID;break;
6698                                 }
6699
6700                                 fire_ball(type, dir, dam, rad);
6701                         }
6702                 }
6703                 break;
6704
6705         case 29:
6706 #ifdef JP
6707                 if (name) return "Á´´¶ÃÎ";
6708                 if (desc) return "¶á¤¯¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢æ«¡¢Èâ¡¢³¬ÃÊ¡¢ºâÊõ¡¢¤½¤·¤Æ¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£";
6709 #else
6710                 if (name) return "Detection";
6711                 if (desc) return "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.";
6712 #endif
6713     
6714                 {
6715                         int rad = DETECT_RAD_DEFAULT;
6716
6717                         if (info) return info_radius(rad);
6718
6719                         if (cast)
6720                         {
6721                                 detect_all(rad);
6722                         }
6723                 }
6724                 break;
6725
6726         case 30:
6727 #ifdef JP
6728                 if (name) return "µ¢´Ô¤Î¼öʸ";
6729                 if (desc) return "ÃϾå¤Ë¤¤¤ë¤È¤­¤Ï¥À¥ó¥¸¥ç¥ó¤ÎºÇ¿¼³¬¤Ø¡¢¥À¥ó¥¸¥ç¥ó¤Ë¤¤¤ë¤È¤­¤ÏÃϾå¤Ø¤È°ÜÆ°¤¹¤ë¡£";
6730 #else
6731                 if (name) return "Word of Recall";
6732                 if (desc) return "Recalls player from dungeon to town, or from town to the deepest level of dungeon.";
6733 #endif
6734     
6735                 {
6736                         int base = 15;
6737                         int sides = 20;
6738
6739                         if (info) return info_delay(base, sides);
6740
6741                         if (cast)
6742                         {
6743                                 if (!word_of_recall()) return NULL;
6744                         }
6745                 }
6746                 break;
6747
6748         case 31:
6749 #ifdef JP
6750                 if (name) return "ÀéΤ´ã";
6751                 if (desc) return "¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆ⤹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤µ¤é¤Ë¡¢°ìÄê»þ´Ö¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
6752 #else
6753                 if (name) return "Clairvoyance";
6754                 if (desc) return "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.";
6755 #endif
6756     
6757                 {
6758                         int base = 25;
6759                         int sides = 30;
6760
6761                         if (info) return info_duration(base, sides);
6762
6763                         if (cast)
6764                         {
6765                                 chg_virtue(V_KNOWLEDGE, 1);
6766                                 chg_virtue(V_ENLIGHTEN, 1);
6767
6768                                 wiz_lite(FALSE);
6769
6770                                 if (!p_ptr->telepathy)
6771                                 {
6772                                         set_tim_esp(randint1(sides) + base, FALSE);
6773                                 }
6774                         }
6775                 }
6776                 break;
6777         }
6778
6779         return "";
6780 }
6781
6782 /*!
6783  * @brief ¾¢ÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
6784  * @param spell ËâË¡ID
6785  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
6786  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
6787  */
6788 static cptr do_craft_spell(int spell, int mode)
6789 {
6790         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
6791         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
6792         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
6793         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
6794
6795         int plev = p_ptr->lev;
6796
6797         switch (spell)
6798         {
6799         case 0:
6800 #ifdef JP
6801                 if (name) return "ÀÖ³°Àþ»ëÎÏ";
6802                 if (desc) return "°ìÄê»þ´Ö¡¢ÀÖ³°Àþ»ëÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
6803 #else
6804                 if (name) return "Infravision";
6805                 if (desc) return "Gives infravision for a while.";
6806 #endif
6807     
6808                 {
6809                         int base = 100;
6810
6811                         if (info) return info_duration(base, base);
6812
6813                         if (cast)
6814                         {
6815                                 set_tim_infra(base + randint1(base), FALSE);
6816                         }
6817                 }
6818                 break;
6819
6820         case 1:
6821 #ifdef JP
6822                 if (name) return "²óÉüÎ϶¯²½";
6823                 if (desc) return "°ìÄê»þ´Ö¡¢²óÉüÎϤ¬Áý¶¯¤µ¤ì¤ë¡£";
6824 #else
6825                 if (name) return "Regeneration";
6826                 if (desc) return "Gives regeneration ability for a while.";
6827 #endif
6828     
6829                 {
6830                         int base = 80;
6831
6832                         if (info) return info_duration(base, base);
6833
6834                         if (cast)
6835                         {
6836                                 set_tim_regen(base + randint1(base), FALSE);
6837                         }
6838                 }
6839                 break;
6840
6841         case 2:
6842 #ifdef JP
6843                 if (name) return "¶õÊ¢½¼Â­";
6844                 if (desc) return "ËþÊ¢¤Ë¤Ê¤ë¡£";
6845 #else
6846                 if (name) return "Satisfy Hunger";
6847                 if (desc) return "Satisfies hunger.";
6848 #endif
6849     
6850                 {
6851                         if (cast)
6852                         {
6853                                 set_food(PY_FOOD_MAX - 1);
6854                         }
6855                 }
6856                 break;
6857
6858         case 3:
6859 #ifdef JP
6860                 if (name) return "ÂÑÎ䵤";
6861                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6862 #else
6863                 if (name) return "Resist Cold";
6864                 if (desc) return "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.";
6865 #endif
6866     
6867                 {
6868                         int base = 20;
6869
6870                         if (info) return info_duration(base, base);
6871
6872                         if (cast)
6873                         {
6874                                 set_oppose_cold(randint1(base) + base, FALSE);
6875                         }
6876                 }
6877                 break;
6878
6879         case 4:
6880 #ifdef JP
6881                 if (name) return "ÂѲбê";
6882                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6883 #else
6884                 if (name) return "Resist Fire";
6885                 if (desc) return "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.";
6886 #endif
6887     
6888                 {
6889                         int base = 20;
6890
6891                         if (info) return info_duration(base, base);
6892
6893                         if (cast)
6894                         {
6895                                 set_oppose_fire(randint1(base) + base, FALSE);
6896                         }
6897                 }
6898                 break;
6899
6900         case 5:
6901 #ifdef JP
6902                 if (name) return "»Îµ¤¹âÍÈ";
6903                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
6904 #else
6905                 if (name) return "Heroism";
6906                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
6907 #endif
6908     
6909                 {
6910                         int base = 25;
6911
6912                         if (info) return info_duration(base, base);
6913
6914                         if (cast)
6915                         {
6916                                 set_hero(randint1(base) + base, FALSE);
6917                                 hp_player(10);
6918                                 set_afraid(0);
6919                         }
6920                 }
6921                 break;
6922
6923         case 6:
6924 #ifdef JP
6925                 if (name) return "ÂÑÅÅ·â";
6926                 if (desc) return "°ìÄê»þ´Ö¡¢ÅÅ·â¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6927 #else
6928                 if (name) return "Resist Lightning";
6929                 if (desc) return "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.";
6930 #endif
6931     
6932                 {
6933                         int base = 20;
6934
6935                         if (info) return info_duration(base, base);
6936
6937                         if (cast)
6938                         {
6939                                 set_oppose_elec(randint1(base) + base, FALSE);
6940                         }
6941                 }
6942                 break;
6943
6944         case 7:
6945 #ifdef JP
6946                 if (name) return "ÂÑ»À";
6947                 if (desc) return "°ìÄê»þ´Ö¡¢»À¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
6948 #else
6949                 if (name) return "Resist Acid";
6950                 if (desc) return "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.";
6951 #endif
6952     
6953                 {
6954                         int base = 20;
6955
6956                         if (info) return info_duration(base, base);
6957
6958                         if (cast)
6959                         {
6960                                 set_oppose_acid(randint1(base) + base, FALSE);
6961                         }
6962                 }
6963                 break;
6964
6965         case 8:
6966 #ifdef JP
6967                 if (name) return "Æ©ÌÀ»ëǧ";
6968                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
6969 #else
6970                 if (name) return "See Invisibility";
6971                 if (desc) return "Gives see invisible for a while.";
6972 #endif
6973     
6974                 {
6975                         int base = 24;
6976
6977                         if (info) return info_duration(base, base);
6978
6979                         if (cast)
6980                         {
6981                                 set_tim_invis(randint1(base) + base, FALSE);
6982                         }
6983                 }
6984                 break;
6985
6986         case 9:
6987 #ifdef JP
6988                 if (name) return "²ò¼ö";
6989                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
6990 #else
6991                 if (name) return "Remove Curse";
6992                 if (desc) return "Removes normal curses from equipped items.";
6993 #endif
6994     
6995                 {
6996                         if (cast)
6997                         {
6998                                 if (remove_curse())
6999                                 {
7000 #ifdef JP
7001                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
7002 #else
7003                                         msg_print("You feel as if someone is watching over you.");
7004 #endif
7005                                 }
7006                         }
7007                 }
7008                 break;
7009
7010         case 10:
7011 #ifdef JP
7012                 if (name) return "ÂÑÆÇ";
7013                 if (desc) return "°ìÄê»þ´Ö¡¢ÆǤؤÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7014 #else
7015                 if (name) return "Resist Poison";
7016                 if (desc) return "Gives resistance to poison. This resistance can be added to which from equipment for more powerful resistance.";
7017 #endif
7018     
7019                 {
7020                         int base = 20;
7021
7022                         if (info) return info_duration(base, base);
7023
7024                         if (cast)
7025                         {
7026                                 set_oppose_pois(randint1(base) + base, FALSE);
7027                         }
7028                 }
7029                 break;
7030
7031         case 11:
7032 #ifdef JP
7033                 if (name) return "¶¸Àï»Î²½";
7034                 if (desc) return "¶¸Àï»Î²½¤·¡¢¶²Éݤò½üµî¤¹¤ë¡£";
7035 #else
7036                 if (name) return "Berserk";
7037                 if (desc) return "Gives bonus to hit and HP, immunity to fear for a while. But decreases AC.";
7038 #endif
7039     
7040                 {
7041                         int base = 25;
7042
7043                         if (info) return info_duration(base, base);
7044
7045                         if (cast)
7046                         {
7047                                 set_shero(randint1(base) + base, FALSE);
7048                                 hp_player(30);
7049                                 set_afraid(0);
7050                         }
7051                 }
7052                 break;
7053
7054         case 12:
7055 #ifdef JP
7056                 if (name) return "¼«¸ÊʬÀÏ";
7057                 if (desc) return "¸½ºß¤Î¼«Ê¬¤Î¾õÂÖ¤ò´°Á´¤ËÃΤ롣";
7058 #else
7059                 if (name) return "Self Knowledge";
7060                 if (desc) return "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.";
7061 #endif
7062     
7063                 {
7064                         if (cast)
7065                         {
7066                                 self_knowledge();
7067                         }
7068                 }
7069                 break;
7070
7071         case 13:
7072 #ifdef JP
7073                 if (name) return "Âмٰ­·ë³¦";
7074                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Î¹¶·â¤òËɤ°¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
7075 #else
7076                 if (name) return "Protection from Evil";
7077                 if (desc) return "Gives aura which protect you from evil monster's physical attack.";
7078 #endif
7079     
7080                 {
7081                         int base = 3 * plev;
7082                         int sides = 25;
7083
7084                         if (info) return info_duration(base, sides);
7085
7086                         if (cast)
7087                         {
7088                                 set_protevil(randint1(sides) + base, FALSE);
7089                         }
7090                 }
7091                 break;
7092
7093         case 14:
7094 #ifdef JP
7095                 if (name) return "Ìþ¤·";
7096                 if (desc) return "ÆÇ¡¢Û¯Û°¾õÂÖ¡¢Éé½ý¤òÁ´²÷¤µ¤»¡¢¸¸³Ð¤òľ¤¹¡£";
7097 #else
7098                 if (name) return "Cure";
7099                 if (desc) return "Heals poison, stun, cut and hallucination completely.";
7100 #endif
7101     
7102                 {
7103                         if (cast)
7104                         {
7105                                 set_poisoned(0);
7106                                 set_stun(0);
7107                                 set_cut(0);
7108                                 set_image(0);
7109                         }
7110                 }
7111                 break;
7112
7113         case 15:
7114 #ifdef JP
7115                 if (name) return "ËâË¡·õ";
7116                 if (desc) return "°ìÄê»þ´Ö¡¢Éð´ï¤ËÎ䵤¡¢±ê¡¢ÅÅ·â¡¢»À¡¢ÆǤΤ¤¤º¤ì¤«¤Î°À­¤ò¤Ä¤±¤ë¡£Éð´ï¤ò»ý¤¿¤Ê¤¤¤È»È¤¨¤Ê¤¤¡£";
7117 #else
7118                 if (name) return "Mana Branding";
7119                 if (desc) return "Makes current weapon some elemental branded. You must wield weapons.";
7120 #endif
7121     
7122                 {
7123                         int base = plev / 2;
7124
7125                         if (info) return info_duration(base, base);
7126
7127                         if (cast)
7128                         {
7129                                 if (!choose_ele_attack()) return NULL;
7130                         }
7131                 }
7132                 break;
7133
7134         case 16:
7135 #ifdef JP
7136                 if (name) return "¥Æ¥ì¥Ñ¥·¡¼";
7137                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
7138 #else
7139                 if (name) return "Telepathy";
7140                 if (desc) return "Gives telepathy for a while.";
7141 #endif
7142     
7143                 {
7144                         int base = 25;
7145                         int sides = 30;
7146
7147                         if (info) return info_duration(base, sides);
7148
7149                         if (cast)
7150                         {
7151                                 set_tim_esp(randint1(sides) + base, FALSE);
7152                         }
7153                 }
7154                 break;
7155
7156         case 17:
7157 #ifdef JP
7158                 if (name) return "È©Àв½";
7159                 if (desc) return "°ìÄê»þ´Ö¡¢AC¤ò¾å¾º¤µ¤»¤ë¡£";
7160 #else
7161                 if (name) return "Stone Skin";
7162                 if (desc) return "Gives bonus to AC for a while.";
7163 #endif
7164     
7165                 {
7166                         int base = 30;
7167                         int sides = 20;
7168
7169                         if (info) return info_duration(base, sides);
7170
7171                         if (cast)
7172                         {
7173                                 set_shield(randint1(sides) + base, FALSE);
7174                         }
7175                 }
7176                 break;
7177
7178         case 18:
7179 #ifdef JP
7180                 if (name) return "Á´ÂÑÀ­";
7181                 if (desc) return "°ìÄê»þ´Ö¡¢»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7182 #else
7183                 if (name) return "Resistance";
7184                 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.";
7185 #endif
7186     
7187                 {
7188                         int base = 20;
7189
7190                         if (info) return info_duration(base, base);
7191
7192                         if (cast)
7193                         {
7194                                 set_oppose_acid(randint1(base) + base, FALSE);
7195                                 set_oppose_elec(randint1(base) + base, FALSE);
7196                                 set_oppose_fire(randint1(base) + base, FALSE);
7197                                 set_oppose_cold(randint1(base) + base, FALSE);
7198                                 set_oppose_pois(randint1(base) + base, FALSE);
7199                         }
7200                 }
7201                 break;
7202
7203         case 19:
7204 #ifdef JP
7205                 if (name) return "¥¹¥Ô¡¼¥É";
7206                 if (desc) return "°ìÄê»þ´Ö¡¢²Ã®¤¹¤ë¡£";
7207 #else
7208                 if (name) return "Haste Self";
7209                 if (desc) return "Hastes you for a while.";
7210 #endif
7211     
7212                 {
7213                         int base = plev;
7214                         int sides = 20 + plev;
7215
7216                         if (info) return info_duration(base, sides);
7217
7218                         if (cast)
7219                         {
7220                                 set_fast(randint1(sides) + base, FALSE);
7221                         }
7222                 }
7223                 break;
7224
7225         case 20:
7226 #ifdef JP
7227                 if (name) return "ÊÉÈ´¤±";
7228                 if (desc) return "°ìÄê»þ´Ö¡¢È¾Êª¼Á²½¤·ÊɤòÄ̤êÈ´¤±¤é¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
7229 #else
7230                 if (name) return "Walk through Wall";
7231                 if (desc) return "Gives ability to pass walls for a while.";
7232 #endif
7233     
7234                 {
7235                         int base = plev / 2;
7236
7237                         if (info) return info_duration(base, base);
7238
7239                         if (cast)
7240                         {
7241                                 set_kabenuke(randint1(base) + base, FALSE);
7242                         }
7243                 }
7244                 break;
7245
7246         case 21:
7247 #ifdef JP
7248                 if (name) return "½âË᤭";
7249                 if (desc) return "½â¤ËÈ¿¼Í¤Î°À­¤ò¤Ä¤±¤ë¡£";
7250 #else
7251                 if (name) return "Polish Shield";
7252                 if (desc) return "Makes a shield a shield of reflection.";
7253 #endif
7254     
7255                 {
7256                         if (cast)
7257                         {
7258                                 pulish_shield();
7259                         }
7260                 }
7261                 break;
7262
7263         case 22:
7264 #ifdef JP
7265                 if (name) return "¥´¡¼¥ì¥àÀ½Â¤";
7266                 if (desc) return "1ÂΤΥ´¡¼¥ì¥à¤òÀ½Â¤¤¹¤ë¡£";
7267 #else
7268                 if (name) return "Create Golem";
7269                 if (desc) return "Creates a golem.";
7270 #endif
7271     
7272                 {
7273                         if (cast)
7274                         {
7275                                 if (summon_specific(-1, py, px, plev, SUMMON_GOLEM, PM_FORCE_PET))
7276                                 {
7277 #ifdef JP
7278                                         msg_print("¥´¡¼¥ì¥à¤òºî¤Ã¤¿¡£");
7279 #else
7280                                         msg_print("You make a golem.");
7281 #endif
7282                                 }
7283                                 else
7284                                 {
7285 #ifdef JP
7286                                         msg_print("¤¦¤Þ¤¯¥´¡¼¥ì¥à¤òºî¤ì¤Ê¤«¤Ã¤¿¡£");
7287 #else
7288                                         msg_print("No Golems arrive.");
7289 #endif
7290                                 }
7291                         }
7292                 }
7293                 break;
7294
7295         case 23:
7296 #ifdef JP
7297                 if (name) return "ËâË¡¤Î³»";
7298                 if (desc) return "°ìÄê»þ´Ö¡¢ËâË¡ËɸæÎϤÈAC¤¬¾å¤¬¤ê¡¢º®Íð¤ÈÌÕÌܤÎÂÑÀ­¡¢È¿¼ÍǽÎÏ¡¢ËãáãÃΤ餺¡¢ÉâÍ·¤òÆÀ¤ë¡£";
7299 #else
7300                 if (name) return "Magical armor";
7301                 if (desc) return "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while.";
7302 #endif
7303     
7304                 {
7305                         int base = 20;
7306
7307                         if (info) return info_duration(base, base);
7308
7309                         if (cast)
7310                         {
7311                                 set_magicdef(randint1(base) + base, FALSE);
7312                         }
7313                 }
7314                 break;
7315
7316         case 24:
7317 #ifdef JP
7318                 if (name) return "ÁõÈ÷̵Îϲ½";
7319                 if (desc) return "Éð´ï¡¦Ëɶñ¤Ë¤«¤±¤é¤ì¤¿¤¢¤é¤æ¤ëËâÎϤò´°Á´¤Ë²ò½ü¤¹¤ë¡£";
7320 #else
7321                 if (name) return "Remove Enchantment";
7322                 if (desc) return "Removes all magics completely from any weapon or armor.";
7323 #endif
7324     
7325                 {
7326                         if (cast)
7327                         {
7328                                 if (!mundane_spell(TRUE)) return NULL;
7329                         }
7330                 }
7331                 break;
7332
7333         case 25:
7334 #ifdef JP
7335                 if (name) return "¼ö¤¤Ê´ºÕ";
7336                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
7337 #else
7338                 if (name) return "Remove All Curse";
7339                 if (desc) return "Removes normal and heavy curse from equipped items.";
7340 #endif
7341     
7342                 {
7343                         if (cast)
7344                         {
7345                                 if (remove_all_curse())
7346                                 {
7347 #ifdef JP
7348                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
7349 #else
7350                                         msg_print("You feel as if someone is watching over you.");
7351 #endif
7352                                 }
7353                         }
7354                 }
7355                 break;
7356
7357         case 26:
7358 #ifdef JP
7359                 if (name) return "´°Á´¤Ê¤ëÃμ±";
7360                 if (desc) return "¥¢¥¤¥Æ¥à¤Î»ý¤ÄǽÎϤò´°Á´¤ËÃΤ롣";
7361 #else
7362                 if (name) return "Knowledge True";
7363                 if (desc) return "*Identifies* an item.";
7364 #endif
7365     
7366                 {
7367                         if (cast)
7368                         {
7369                                 if (!identify_fully(FALSE)) return NULL;
7370                         }
7371                 }
7372                 break;
7373
7374         case 27:
7375 #ifdef JP
7376                 if (name) return "Éð´ï¶¯²½";
7377                 if (desc) return "Éð´ï¤ÎÌ¿ÃæΨ½¤Àµ¤È¥À¥á¡¼¥¸½¤Àµ¤ò¶¯²½¤¹¤ë¡£";
7378 #else
7379                 if (name) return "Enchant Weapon";
7380                 if (desc) return "Attempts to increase +to-hit, +to-dam of a weapon.";
7381 #endif
7382     
7383                 {
7384                         if (cast)
7385                         {
7386                                 if (!enchant_spell(randint0(4) + 1, randint0(4) + 1, 0)) return NULL;
7387                         }
7388                 }
7389                 break;
7390
7391         case 28:
7392 #ifdef JP
7393                 if (name) return "Ëɶñ¶¯²½";
7394                 if (desc) return "³»¤ÎËɸ潤Àµ¤ò¶¯²½¤¹¤ë¡£";
7395 #else
7396                 if (name) return "Enchant Armor";
7397                 if (desc) return "Attempts to increase +AC of an armor.";
7398 #endif
7399     
7400                 {
7401                         if (cast)
7402                         {
7403                                 if (!enchant_spell(0, 0, randint0(3) + 2)) return NULL;
7404                         }
7405                 }
7406                 break;
7407
7408         case 29:
7409 #ifdef JP
7410                 if (name) return "Éð´ï°À­ÉÕÍ¿";
7411                 if (desc) return "Éð´ï¤Ë¥é¥ó¥À¥à¤Ë°À­¤ò¤Ä¤±¤ë¡£";
7412 #else
7413                 if (name) return "Brand Weapon";
7414                 if (desc) return "Makes current weapon a random ego weapon.";
7415 #endif
7416     
7417                 {
7418                         if (cast)
7419                         {
7420                                 brand_weapon(randint0(18));
7421                         }
7422                 }
7423                 break;
7424
7425         case 30:
7426 #ifdef JP
7427                 if (name) return "¿Í´Ö¥È¥é¥ó¥×";
7428                 if (desc) return "¥é¥ó¥À¥à¤Ë¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤«¡¢¼«Ê¬¤Î°Õ»×¤Ç¥Æ¥ì¥Ý¡¼¥È¤¹¤ëÆÍÁ³ÊÑ°Û¤¬¿È¤Ë¤Ä¤¯¡£";
7429 #else
7430                 if (name) return "Living Trump";
7431                 if (desc) return "Gives mutation which makes you teleport randomly or makes you able to teleport at will.";
7432 #endif
7433     
7434                 {
7435                         if (cast)
7436                         {
7437                                 int mutation;
7438
7439                                 if (one_in_(7))
7440                                         /* Teleport control */
7441                                         mutation = 12;
7442                                 else
7443                                         /* Random teleportation (uncontrolled) */
7444                                         mutation = 77;
7445
7446                                 /* Gain the mutation */
7447                                 if (gain_random_mutation(mutation))
7448                                 {
7449 #ifdef JP
7450                                         msg_print("¤¢¤Ê¤¿¤ÏÀ¸¤­¤Æ¤¤¤ë¥«¡¼¥É¤ËÊѤï¤Ã¤¿¡£");
7451 #else
7452                                         msg_print("You have turned into a Living Trump.");
7453 #endif
7454                                 }
7455                         }
7456                 }
7457                 break;
7458
7459         case 31:
7460 #ifdef JP
7461                 if (name) return "°À­¤Ø¤ÎÌȱÖ";
7462                 if (desc) return "°ìÄê»þ´Ö¡¢Î䵤¡¢±ê¡¢ÅÅ·â¡¢»À¤Î¤¤¤º¤ì¤«¤ËÂФ¹¤ëÌȱ֤òÆÀ¤ë¡£";
7463 #else
7464                 if (name) return "Immunity";
7465                 if (desc) return "Gives an immunity to fire, cold, electricity or acid for a while.";
7466 #endif
7467     
7468                 {
7469                         int base = 13;
7470
7471                         if (info) return info_duration(base, base);
7472
7473                         if (cast)
7474                         {
7475                                 if (!choose_ele_immune(base + randint1(base))) return NULL;
7476                         }
7477                 }
7478                 break;
7479         }
7480
7481         return "";
7482 }
7483
7484 /*!
7485  * @brief °­ËâÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
7486  * @param spell ËâË¡ID
7487  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
7488  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
7489  */
7490 static cptr do_daemon_spell(int spell, int mode)
7491 {
7492         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
7493         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
7494         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
7495         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
7496
7497 #ifdef JP
7498         static const char s_dam[] = "»½ý:";
7499 #else
7500         static const char s_dam[] = "dam ";
7501 #endif
7502
7503         int dir;
7504         int plev = p_ptr->lev;
7505
7506         switch (spell)
7507         {
7508         case 0:
7509 #ifdef JP
7510                 if (name) return "¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë";
7511                 if (desc) return "¼å¤¤ËâË¡¤ÎÌð¤òÊü¤Ä¡£";
7512 #else
7513                 if (name) return "Magic Missile";
7514                 if (desc) return "Fires a weak bolt of magic.";
7515 #endif
7516     
7517                 {
7518                         int dice = 3 + (plev - 1) / 5;
7519                         int sides = 4;
7520
7521                         if (info) return info_damage(dice, sides, 0);
7522
7523                         if (cast)
7524                         {
7525                                 if (!get_aim_dir(&dir)) return NULL;
7526
7527                                 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
7528                         }
7529                 }
7530                 break;
7531
7532         case 1:
7533 #ifdef JP
7534                 if (name) return "̵À¸Ì¿´¶ÃÎ";
7535                 if (desc) return "¶á¤¯¤ÎÀ¸Ì¿¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
7536 #else
7537                 if (name) return "Detect Unlife";
7538                 if (desc) return "Detects all nonliving monsters in your vicinity.";
7539 #endif
7540     
7541                 {
7542                         int rad = DETECT_RAD_DEFAULT;
7543
7544                         if (info) return info_radius(rad);
7545
7546                         if (cast)
7547                         {
7548                                 detect_monsters_nonliving(rad);
7549                         }
7550                 }
7551                 break;
7552
7553         case 2:
7554 #ifdef JP
7555                 if (name) return "¼Ù¤Ê¤ë½ËÊ¡";
7556                 if (desc) return "°ìÄê»þ´Ö¡¢Ì¿ÃæΨ¤ÈAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
7557 #else
7558                 if (name) return "Evil Bless";
7559                 if (desc) return "Gives bonus to hit and AC for a few turns.";
7560 #endif
7561     
7562                 {
7563                         int base = 12;
7564
7565                         if (info) return info_duration(base, base);
7566
7567                         if (cast)
7568                         {
7569                                 set_blessed(randint1(base) + base, FALSE);
7570                         }
7571                 }
7572                 break;
7573
7574         case 3:
7575 #ifdef JP
7576                 if (name) return "ÂѲбê";
7577                 if (desc) return "°ìÄê»þ´Ö¡¢±ê¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7578 #else
7579                 if (name) return "Resist Fire";
7580                 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.";
7581 #endif
7582     
7583                 {
7584                         int base = 20;
7585
7586                         if (info) return info_duration(base, base);
7587
7588                         if (cast)
7589                         {
7590                                 set_oppose_fire(randint1(base) + base, FALSE);
7591                         }
7592                 }
7593                 break;
7594
7595         case 4:
7596 #ifdef JP
7597                 if (name) return "¶²¹²";
7598                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¡¢Û¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
7599 #else
7600                 if (name) return "Horrify";
7601                 if (desc) return "Attempts to scare and stun a monster.";
7602 #endif
7603     
7604                 {
7605                         int power = plev;
7606
7607                         if (info) return info_power(power);
7608
7609                         if (cast)
7610                         {
7611                                 if (!get_aim_dir(&dir)) return NULL;
7612
7613                                 fear_monster(dir, power);
7614                                 stun_monster(dir, power);
7615                         }
7616                 }
7617                 break;
7618
7619         case 5:
7620 #ifdef JP
7621                 if (name) return "ÃϹö¤ÎÌð";
7622                 if (desc) return "ÃϹö¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
7623 #else
7624                 if (name) return "Nether Bolt";
7625                 if (desc) return "Fires a bolt or beam of nether.";
7626 #endif
7627     
7628                 {
7629                         int dice = 6 + (plev - 5) / 4;
7630                         int sides = 8;
7631
7632                         if (info) return info_damage(dice, sides, 0);
7633
7634                         if (cast)
7635                         {
7636                                 if (!get_aim_dir(&dir)) return NULL;
7637
7638                                 fire_bolt_or_beam(beam_chance(), GF_NETHER, dir, damroll(dice, sides));
7639                         }
7640                 }
7641                 break;
7642
7643         case 6:
7644 #ifdef JP
7645                 if (name) return "¸ÅÂå¤Î»àÎ´­";
7646                 if (desc) return "¸ÅÂå¤Î»àÎî¤ò¾¤´­¤¹¤ë¡£";
7647 #else
7648                 if (name) return "Summon Manes";
7649                 if (desc) return "Summons a manes.";
7650 #endif
7651     
7652                 {
7653                         if (cast)
7654                         {
7655                                 if (!summon_specific(-1, py, px, (plev * 3) / 2, SUMMON_MANES, (PM_ALLOW_GROUP | PM_FORCE_PET)))
7656                                 {
7657 #ifdef JP
7658                                         msg_print("¸ÅÂå¤Î»àÎî¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
7659 #else
7660                                         msg_print("No Manes arrive.");
7661 #endif
7662                                 }
7663                         }
7664                 }
7665                 break;
7666
7667         case 7:
7668 #ifdef JP
7669                 if (name) return "ÃϹö¤Î±ë";
7670                 if (desc) return "¼Ù°­¤ÊÎϤò»ý¤Ä¥Ü¡¼¥ë¤òÊü¤Ä¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤ÏÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
7671 #else
7672                 if (name) return "Hellish Flame";
7673                 if (desc) return "Fires a ball of evil power. Hurts good monsters greatly.";
7674 #endif
7675     
7676                 {
7677                         int dice = 3;
7678                         int sides = 6;
7679                         int rad = (plev < 30) ? 2 : 3;
7680                         int base;
7681
7682                         if (p_ptr->pclass == CLASS_MAGE ||
7683                             p_ptr->pclass == CLASS_HIGH_MAGE ||
7684                             p_ptr->pclass == CLASS_SORCERER)
7685                                 base = plev + plev / 2;
7686                         else
7687                                 base = plev + plev / 4;
7688
7689
7690                         if (info) return info_damage(dice, sides, base);
7691
7692                         if (cast)
7693                         {
7694                                 if (!get_aim_dir(&dir)) return NULL;
7695
7696                                 fire_ball(GF_HELL_FIRE, dir, damroll(dice, sides) + base, rad);
7697                         }
7698                 }
7699                 break;
7700
7701         case 8:
7702 #ifdef JP
7703                 if (name) return "¥Ç¡¼¥â¥ó»ÙÇÛ";
7704                 if (desc) return "°­Ëâ1ÂΤò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú";
7705 #else
7706                 if (name) return "Dominate Demon";
7707                 if (desc) return "Attempts to charm a demon.";
7708 #endif
7709     
7710                 {
7711                         int power = plev;
7712
7713                         if (info) return info_power(power);
7714
7715                         if (cast)
7716                         {
7717                                 if (!get_aim_dir(&dir)) return NULL;
7718
7719                                 control_one_demon(dir, power);
7720                         }
7721                 }
7722                 break;
7723
7724         case 9:
7725 #ifdef JP
7726                 if (name) return "¥Ó¥¸¥ç¥ó";
7727                 if (desc) return "¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ¹¤ë¡£";
7728 #else
7729                 if (name) return "Vision";
7730                 if (desc) return "Maps nearby area.";
7731 #endif
7732     
7733                 {
7734                         int rad = DETECT_RAD_MAP;
7735
7736                         if (info) return info_radius(rad);
7737
7738                         if (cast)
7739                         {
7740                                 map_area(rad);
7741                         }
7742                 }
7743                 break;
7744
7745         case 10:
7746 #ifdef JP
7747                 if (name) return "ÂÑÃϹö";
7748                 if (desc) return "°ìÄê»þ´Ö¡¢ÃϹö¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£";
7749 #else
7750                 if (name) return "Resist Nether";
7751                 if (desc) return "Gives resistance to nether for a while.";
7752 #endif
7753     
7754                 {
7755                         int base = 20;
7756
7757                         if (info) return info_duration(base, base);
7758
7759                         if (cast)
7760                         {
7761                                 set_tim_res_nether(randint1(base) + base, FALSE);
7762                         }
7763                 }
7764                 break;
7765
7766         case 11:
7767 #ifdef JP
7768                 if (name) return "¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È";
7769                 if (desc) return "¥×¥é¥º¥Þ¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
7770 #else
7771                 if (name) return "Plasma bolt";
7772                 if (desc) return "Fires a bolt or beam of plasma.";
7773 #endif
7774     
7775                 {
7776                         int dice = 11 + (plev - 5) / 4;
7777                         int sides = 8;
7778
7779                         if (info) return info_damage(dice, sides, 0);
7780
7781                         if (cast)
7782                         {
7783                                 if (!get_aim_dir(&dir)) return NULL;
7784
7785                                 fire_bolt_or_beam(beam_chance(), GF_PLASMA, dir, damroll(dice, sides));
7786                         }
7787                 }
7788                 break;
7789
7790         case 12:
7791 #ifdef JP
7792                 if (name) return "¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë";
7793                 if (desc) return "±ê¤Îµå¤òÊü¤Ä¡£";
7794 #else
7795                 if (name) return "Fire Ball";
7796                 if (desc) return "Fires a ball of fire.";
7797 #endif
7798     
7799                 {
7800                         int dam = plev + 55;
7801                         int rad = 2;
7802
7803                         if (info) return info_damage(0, 0, dam);
7804
7805                         if (cast)
7806                         {
7807                                 if (!get_aim_dir(&dir)) return NULL;
7808
7809                                 fire_ball(GF_FIRE, dir, dam, rad);
7810                         }
7811                 }
7812                 break;
7813
7814         case 13:
7815 #ifdef JP
7816                 if (name) return "±ê¤Î¿Ï";
7817                 if (desc) return "Éð´ï¤Ë±ê¤Î°À­¤ò¤Ä¤±¤ë¡£";
7818 #else
7819                 if (name) return "Fire Branding";
7820                 if (desc) return "Makes current weapon fire branded.";
7821 #endif
7822     
7823                 {
7824                         if (cast)
7825                         {
7826                                 brand_weapon(1);
7827                         }
7828                 }
7829                 break;
7830
7831         case 14:
7832 #ifdef JP
7833                 if (name) return "ÃϹöµå";
7834                 if (desc) return "Â礭¤ÊÃϹö¤Îµå¤òÊü¤Ä¡£";
7835 #else
7836                 if (name) return "Nether Ball";
7837                 if (desc) return "Fires a huge ball of nether.";
7838 #endif
7839     
7840                 {
7841                         int dam = plev * 3 / 2 + 100;
7842                         int rad = plev / 20 + 2;
7843
7844                         if (info) return info_damage(0, 0, dam);
7845
7846                         if (cast)
7847                         {
7848                                 if (!get_aim_dir(&dir)) return NULL;
7849
7850                                 fire_ball(GF_NETHER, dir, dam, rad);
7851                         }
7852                 }
7853                 break;
7854
7855         case 15:
7856 #ifdef JP
7857                 if (name) return "¥Ç¡¼¥â¥ó¾¤´­";
7858                 if (desc) return "°­Ëâ1ÂΤò¾¤´­¤¹¤ë¡£";
7859 #else
7860                 if (name) return "Summon Demon";
7861                 if (desc) return "Summons a demon.";
7862 #endif
7863     
7864                 {
7865                         if (cast)
7866                         {
7867                                 bool pet = !one_in_(3);
7868                                 u32b mode = 0L;
7869
7870                                 if (pet) mode |= PM_FORCE_PET;
7871                                 else mode |= PM_NO_PET;
7872                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
7873
7874                                 if (summon_specific((pet ? -1 : 0), py, px, plev*2/3+randint1(plev/2), SUMMON_DEMON, mode))
7875                                 {
7876 #ifdef JP
7877                                         msg_print("ⲫ¤Î°­½­¤¬½¼Ëþ¤·¤¿¡£");
7878 #else
7879                                         msg_print("The area fills with a stench of sulphur and brimstone.");
7880 #endif
7881
7882
7883                                         if (pet)
7884                                         {
7885 #ifdef JP
7886                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
7887 #else
7888                                                 msg_print("'What is thy bidding... Master?'");
7889 #endif
7890                                         }
7891                                         else
7892                                         {
7893 #ifdef JP
7894                                                 msg_print("¡ÖÈܤ·¤­¼Ô¤è¡¢²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª ¤ªÁ°¤Îº²¤òĺ¤¯¤¾¡ª¡×");
7895 #else
7896                                                 msg_print("'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'");
7897 #endif
7898                                         }
7899                                 }
7900                                 else
7901                                 {
7902 #ifdef JP
7903                                         msg_print("°­Ëâ¤Ï¸½¤ì¤Ê¤«¤Ã¤¿¡£");
7904 #else
7905                                         msg_print("No demons arrive.");
7906 #endif
7907                                 }
7908                                 break;
7909                         }
7910                 }
7911                 break;
7912
7913         case 16:
7914 #ifdef JP
7915                 if (name) return "°­Ëâ¤ÎÌÜ";
7916                 if (desc) return "°ìÄê»þ´Ö¡¢¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤòÆÀ¤ë¡£";
7917 #else
7918                 if (name) return "Devilish Eye";
7919                 if (desc) return "Gives telepathy for a while.";
7920 #endif
7921     
7922                 {
7923                         int base = 30;
7924                         int sides = 25;
7925
7926                         if (info) return info_duration(base, sides);
7927
7928                         if (cast)
7929                         {
7930                                 set_tim_esp(randint1(base) + sides, FALSE);
7931                         }
7932                 }
7933                 break;
7934
7935         case 17:
7936 #ifdef JP
7937                 if (name) return "°­Ëâ¤Î¥¯¥í¡¼¥¯";
7938                 if (desc) return "¶²Éݤò¼è¤ê½ü¤­¡¢°ìÄê»þ´Ö¡¢±ê¤ÈÎ䵤¤ÎÂÑÀ­¡¢±ê¤Î¥ª¡¼¥é¤òÆÀ¤ë¡£ÂÑÀ­¤ÏÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
7939 #else
7940                 if (name) return "Devil Cloak";
7941                 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.";
7942 #endif
7943     
7944                 {
7945                         int base = 20;
7946
7947                         if (info) return info_duration(base, base);
7948
7949                         if (cast)
7950                         {
7951                                 int dur = randint1(base) + base;
7952                                         
7953                                 set_oppose_fire(dur, FALSE);
7954                                 set_oppose_cold(dur, FALSE);
7955                                 set_tim_sh_fire(dur, FALSE);
7956                                 set_afraid(0);
7957                                 break;
7958                         }
7959                 }
7960                 break;
7961
7962         case 18:
7963 #ifdef JP
7964                 if (name) return "ÍÏ´äή";
7965                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿±ê¤Îµå¤òºî¤ê½Ð¤·¡¢¾²¤òÍÏ´ä¤ËÊѤ¨¤ë¡£";
7966 #else
7967                 if (name) return "The Flow of Lava";
7968                 if (desc) return "Generates a ball of fire centered on you which transforms floors to magma.";
7969 #endif
7970     
7971                 {
7972                         int dam = (55 + plev) * 2;
7973                         int rad = 3;
7974
7975                         if (info) return info_damage(0, 0, dam/2);
7976
7977                         if (cast)
7978                         {
7979                                 fire_ball(GF_FIRE, 0, dam, rad);
7980                                 fire_ball_hide(GF_LAVA_FLOW, 0, 2 + randint1(2), rad);
7981                         }
7982                 }
7983                 break;
7984
7985         case 19:
7986 #ifdef JP
7987                 if (name) return "¥×¥é¥º¥Þµå";
7988                 if (desc) return "¥×¥é¥º¥Þ¤Îµå¤òÊü¤Ä¡£";
7989 #else
7990                 if (name) return "Plasma Ball";
7991                 if (desc) return "Fires a ball of plasma.";
7992 #endif
7993     
7994                 {
7995                         int dam = plev * 3 / 2 + 80;
7996                         int rad = 2 + plev / 40;
7997
7998                         if (info) return info_damage(0, 0, dam);
7999
8000                         if (cast)
8001                         {
8002                                 if (!get_aim_dir(&dir)) return NULL;
8003
8004                                 fire_ball(GF_PLASMA, dir, dam, rad);
8005                         }
8006                 }
8007                 break;
8008
8009         case 20:
8010 #ifdef JP
8011                 if (name) return "°­ËâÊѲ½";
8012                 if (desc) return "°ìÄê»þ´Ö¡¢°­Ëâ¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤Ë°­Ëâ¤È¤·¤Æ¤ÎǽÎϤòÆÀ¤ë¡£";
8013 #else
8014                 if (name) return "Polymorph Demon";
8015                 if (desc) return "Mimic a demon for a while. Loses abilities of original race and gets abilities as a demon.";
8016 #endif
8017     
8018                 {
8019                         int base = 10 + plev / 2;
8020
8021                         if (info) return info_duration(base, base);
8022
8023                         if (cast)
8024                         {
8025                                 set_mimic(base + randint1(base), MIMIC_DEMON, FALSE);
8026                         }
8027                 }
8028                 break;
8029
8030         case 21:
8031 #ifdef JP
8032                 if (name) return "ÃϹö¤ÎÇÈÆ°";
8033                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Á±Îɤʥâ¥ó¥¹¥¿¡¼¤ËÆäËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8034 #else
8035                 if (name) return "Nather Wave";
8036                 if (desc) return "Damages all monsters in sight. Hurts good monsters greatly.";
8037 #endif
8038     
8039                 {
8040                         int sides1 = plev * 2;
8041                         int sides2 = plev * 2;
8042
8043                         if (info) return format("%sd%d+d%d", s_dam, sides1, sides2);
8044
8045                         if (cast)
8046                         {
8047                                 dispel_monsters(randint1(sides1));
8048                                 dispel_good(randint1(sides2));
8049                         }
8050                 }
8051                 break;
8052
8053         case 22:
8054 #ifdef JP
8055                 if (name) return "¥µ¥­¥å¥Ð¥¹¤ÎÀÜÊ­";
8056                 if (desc) return "°ø²Ìº®Íð¤Îµå¤òÊü¤Ä¡£";
8057 #else
8058                 if (name) return "Kiss of Succubus";
8059                 if (desc) return "Fires a ball of nexus.";
8060 #endif
8061     
8062                 {
8063                         int dam = 100 + plev * 2;
8064                         int rad = 4;
8065
8066                         if (info) return info_damage(0, 0, dam);
8067
8068                         if (cast)
8069                         {
8070                                 if (!get_aim_dir(&dir)) return NULL;
8071                                 fire_ball(GF_NEXUS, dir, dam, rad);
8072                         }
8073                 }
8074                 break;
8075
8076         case 23:
8077 #ifdef JP
8078                 if (name) return "ÇËÌǤμê";
8079                 if (desc) return "ÇËÌǤμê¤òÊü¤Ä¡£¿©¤é¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤Ï¤½¤Î¤È¤­¤ÎHP¤ÎȾʬÁ°¸å¤Î¥À¥á¡¼¥¸¤ò¼õ¤±¤ë¡£";
8080 #else
8081                 if (name) return "Doom Hand";
8082                 if (desc) return "Attempts to make a monster's HP almost half.";
8083 #endif
8084     
8085                 {
8086                         if (cast)
8087                         {
8088                                 if (!get_aim_dir(&dir)) return NULL;
8089 #ifdef JP
8090                                 else msg_print("<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª");
8091 #else
8092                                 else msg_print("You invoke the Hand of Doom!");
8093 #endif
8094
8095                                 fire_ball_hide(GF_HAND_DOOM, dir, plev * 2, 0);
8096                         }
8097                 }
8098                 break;
8099
8100         case 24:
8101 #ifdef JP
8102                 if (name) return "»Îµ¤¹âÍÈ";
8103                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
8104 #else
8105                 if (name) return "Raise the Morale";
8106                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
8107 #endif
8108     
8109                 {
8110                         int base = 25;
8111
8112                         if (info) return info_duration(base, base);
8113
8114                         if (cast)
8115                         {
8116                                 set_hero(randint1(base) + base, FALSE);
8117                                 hp_player(10);
8118                                 set_afraid(0);
8119                         }
8120                 }
8121                 break;
8122
8123         case 25:
8124 #ifdef JP
8125                 if (name) return "ÉÔÌǤÎÆùÂÎ";
8126                 if (desc) return "°ìÄê»þ´Ö¡¢»þ´ÖµÕž¤Ø¤ÎÂÑÀ­¤òÆÀ¤ë¡£";
8127 #else
8128                 if (name) return "Immortal Body";
8129                 if (desc) return "Gives resistance to time for a while.";
8130 #endif
8131     
8132                 {
8133                         int base = 20;
8134
8135                         if (info) return info_duration(base, base);
8136
8137                         if (cast)
8138                         {
8139                                 set_tim_res_time(randint1(base)+base, FALSE);
8140                         }
8141                 }
8142                 break;
8143
8144         case 26:
8145 #ifdef JP
8146                 if (name) return "¶¸µ¤¤Î±ß´Ä";
8147                 if (desc) return "¼«Ê¬¤òÃæ¿´¤È¤·¤¿¥«¥ª¥¹¤Îµå¡¢º®Íð¤Îµå¤òȯÀ¸¤µ¤»¡¢¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£";
8148 #else
8149                 if (name) return "Insanity Circle";
8150                 if (desc) return "Generate balls of chaos, confusion and charm centered on you.";
8151 #endif
8152     
8153                 {
8154                         int dam = 50 + plev;
8155                         int power = 20 + plev;
8156                         int rad = 3 + plev / 20;
8157
8158                         if (info) return format("%s%d+%d", s_dam, dam/2, dam/2);
8159
8160                         if (cast)
8161                         {
8162                                 fire_ball(GF_CHAOS, 0, dam, rad);
8163                                 fire_ball(GF_CONFUSION, 0, dam, rad);
8164                                 fire_ball(GF_CHARM, 0, power, rad);
8165                         }
8166                 }
8167                 break;
8168
8169         case 27:
8170 #ifdef JP
8171                 if (name) return "¥Ú¥Ã¥ÈÇúÇË";
8172                 if (desc) return "Á´¤Æ¤Î¥Ú¥Ã¥È¤ò¶¯À©Åª¤ËÇúÇˤµ¤»¤ë¡£";
8173 #else
8174                 if (name) return "Explode Pets";
8175                 if (desc) return "Makes all pets explode.";
8176 #endif
8177     
8178                 {
8179                         if (cast)
8180                         {
8181                                 discharge_minion();
8182                         }
8183                 }
8184                 break;
8185
8186         case 28:
8187 #ifdef JP
8188                 if (name) return "¥°¥ì¡¼¥¿¡¼¥Ç¡¼¥â¥ó¾¤´­";
8189                 if (desc) return "¾åµé¥Ç¡¼¥â¥ó¤ò¾¤´­¤¹¤ë¡£¾¤´­¤¹¤ë¤Ë¤Ï¿Í´Ö('p','h','t'¤Çɽ¤µ¤ì¤ë¥â¥ó¥¹¥¿¡¼)¤Î»àÂΤòÊû¤²¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£";
8190 #else
8191                 if (name) return "Summon Greater Demon";
8192                 if (desc) return "Summons greater demon. It need to sacrifice a corpse of human ('p','h' or 't').";
8193 #endif
8194     
8195                 {
8196                         if (cast)
8197                         {
8198                                 if (!cast_summon_greater_demon()) return NULL;
8199                         }
8200                 }
8201                 break;
8202
8203         case 29:
8204 #ifdef JP
8205                 if (name) return "ÃϹöÍò";
8206                 if (desc) return "ĶµðÂç¤ÊÃϹö¤Îµå¤òÊü¤Ä¡£";
8207 #else
8208                 if (name) return "Nether Storm";
8209                 if (desc) return "Generate a huge ball of nether.";
8210 #endif
8211     
8212                 {
8213                         int dam = plev * 15;
8214                         int rad = plev / 5;
8215
8216                         if (info) return info_damage(0, 0, dam);
8217
8218                         if (cast)
8219                         {
8220                                 if (!get_aim_dir(&dir)) return NULL;
8221
8222                                 fire_ball(GF_NETHER, dir, dam, rad);
8223                         }
8224                 }
8225                 break;
8226
8227         case 30:
8228 #ifdef JP
8229                 if (name) return "·ì¤Î¼ö¤¤";
8230                 if (desc) return "¼«Ê¬¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤ë¤³¤È¤Ë¤è¤Ã¤ÆÂоݤ˼ö¤¤¤ò¤«¤±¡¢¥À¥á¡¼¥¸¤òÍ¿¤¨ÍÍ¡¹¤Ê¸ú²Ì¤ò°ú¤­µ¯¤³¤¹¡£";
8231 #else
8232                 if (name) return "Bloody Curse";
8233                 if (desc) return "Puts blood curse which damages and causes various effects on a monster. You also take damage.";
8234 #endif
8235     
8236                 {
8237                         int dam = 600;
8238                         int rad = 0;
8239
8240                         if (info) return info_damage(0, 0, dam);
8241
8242                         if (cast)
8243                         {
8244                                 if (!get_aim_dir(&dir)) return NULL;
8245
8246                                 fire_ball_hide(GF_BLOOD_CURSE, dir, dam, rad);
8247 #ifdef JP
8248                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "·ì¤Î¼ö¤¤", -1);
8249 #else
8250                                 take_hit(DAMAGE_USELIFE, 20 + randint1(30), "Blood curse", -1);
8251 #endif
8252                         }
8253                 }
8254                 break;
8255
8256         case 31:
8257 #ifdef JP
8258                 if (name) return "ËⲦÊѲ½";
8259                 if (desc) return "°­Ëâ¤Î²¦¤ËÊѲ½¤¹¤ë¡£ÊѲ½¤·¤Æ¤¤¤ë´Ö¤ÏËÜÍè¤Î¼ï²¤ÎǽÎϤò¼º¤¤¡¢Âå¤ï¤ê¤Ë°­Ëâ¤Î²¦¤È¤·¤Æ¤ÎǽÎϤòÆÀ¡¢ÊɤòÇ˲õ¤·¤Ê¤¬¤éÊ⤯¡£";
8260 #else
8261                 if (name) return "Polymorph Demonlord";
8262                 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.";
8263 #endif
8264     
8265                 {
8266                         int base = 15;
8267
8268                         if (info) return info_duration(base, base);
8269
8270                         if (cast)
8271                         {
8272                                 set_mimic(base + randint1(base), MIMIC_DEMON_LORD, FALSE);
8273                         }
8274                 }
8275                 break;
8276         }
8277
8278         return "";
8279 }
8280
8281 /*!
8282  * @brief Ç˼ÙÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
8283  * @param spell ËâË¡ID
8284  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
8285  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
8286  */
8287 static cptr do_crusade_spell(int spell, int mode)
8288 {
8289         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
8290         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
8291         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
8292         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
8293
8294         int dir;
8295         int plev = p_ptr->lev;
8296
8297         switch (spell)
8298         {
8299         case 0:
8300 #ifdef JP
8301                 if (name) return "Ĩȳ";
8302                 if (desc) return "ÅÅ·â¤Î¥Ü¥ë¥È¤â¤·¤¯¤Ï¥Ó¡¼¥à¤òÊü¤Ä¡£";
8303 #else
8304                 if (name) return "Punishment";
8305                 if (desc) return "Fires a bolt or beam of lightning.";
8306 #endif
8307     
8308                 {
8309                         int dice = 3 + (plev - 1) / 5;
8310                         int sides = 4;
8311
8312                         if (info) return info_damage(dice, sides, 0);
8313
8314                         if (cast)
8315                         {
8316                                 if (!get_aim_dir(&dir)) return NULL;
8317
8318                                 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
8319                         }
8320                 }
8321                 break;
8322
8323         case 1:
8324 #ifdef JP
8325                 if (name) return "¼Ù°­Â¸ºß´¶ÃÎ";
8326                 if (desc) return "¶á¤¯¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
8327 #else
8328                 if (name) return "Detect Evil";
8329                 if (desc) return "Detects all evil monsters in your vicinity.";
8330 #endif
8331     
8332                 {
8333                         int rad = DETECT_RAD_DEFAULT;
8334
8335                         if (info) return info_radius(rad);
8336
8337                         if (cast)
8338                         {
8339                                 detect_monsters_evil(rad);
8340                         }
8341                 }
8342                 break;
8343
8344         case 2:
8345 #ifdef JP
8346                 if (name) return "¶²Éݽüµî";
8347                 if (desc) return "¶²Éݤò¼è¤ê½ü¤¯¡£";
8348 #else
8349                 if (name) return "Remove Fear";
8350                 if (desc) return "Removes fear.";
8351 #endif
8352     
8353                 {
8354                         if (cast)
8355                         {
8356                                 set_afraid(0);
8357                         }
8358                 }
8359                 break;
8360
8361         case 3:
8362 #ifdef JP
8363                 if (name) return "°Ò°µ";
8364                 if (desc) return "¥â¥ó¥¹¥¿¡¼1ÂΤò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8365 #else
8366                 if (name) return "Scare Monster";
8367                 if (desc) return "Attempts to scare a monster.";
8368 #endif
8369     
8370                 {
8371                         int power = plev;
8372
8373                         if (info) return info_power(power);
8374
8375                         if (cast)
8376                         {
8377                                 if (!get_aim_dir(&dir)) return NULL;
8378
8379                                 fear_monster(dir, power);
8380                         }
8381                 }
8382                 break;
8383
8384         case 4:
8385 #ifdef JP
8386                 if (name) return "À»°è";
8387                 if (desc) return "ÎÙÀܤ·¤¿Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̲¤é¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8388 #else
8389                 if (name) return "Sanctuary";
8390                 if (desc) return "Attempts to sleep monsters in the adjacent squares.";
8391 #endif
8392     
8393                 {
8394                         int power = plev;
8395
8396                         if (info) return info_power(power);
8397
8398                         if (cast)
8399                         {
8400                                 sleep_monsters_touch();
8401                         }
8402                 }
8403                 break;
8404
8405         case 5:
8406 #ifdef JP
8407                 if (name) return "Æþ¸ý";
8408                 if (desc) return "Ãæµ÷Î¥¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¤¹¤ë¡£";
8409 #else
8410                 if (name) return "Portal";
8411                 if (desc) return "Teleport medium distance.";
8412 #endif
8413     
8414                 {
8415                         int range = 25 + plev / 2;
8416
8417                         if (info) return info_range(range);
8418
8419                         if (cast)
8420                         {
8421                                 teleport_player(range, 0L);
8422                         }
8423                 }
8424                 break;
8425
8426         case 6:
8427 #ifdef JP
8428                 if (name) return "¥¹¥¿¡¼¥À¥¹¥È";
8429                 if (desc) return "¥¿¡¼¥²¥Ã¥ÈÉÕ¶á¤ËÁ®¸÷¤Î¥Ü¥ë¥È¤òÏ¢¼Í¤¹¤ë¡£";
8430 #else
8431                 if (name) return "Star Dust";
8432                 if (desc) return "Fires many bolts of light near the target.";
8433 #endif
8434     
8435                 {
8436                         int dice = 3 + (plev - 1) / 9;
8437                         int sides = 2;
8438
8439                         if (info) return info_multi_damage_dice(dice, sides);
8440
8441                         if (cast)
8442                         {
8443                                 if (!get_aim_dir(&dir)) return NULL;
8444                                 fire_blast(GF_LITE, dir, dice, sides, 10, 3);
8445                         }
8446                 }
8447                 break;
8448
8449         case 7:
8450 #ifdef JP
8451                 if (name) return "¿ÈÂξô²½";
8452                 if (desc) return "½ý¡¢ÆÇ¡¢Û¯Û°¤«¤éÁ´²÷¤¹¤ë¡£";
8453 #else
8454                 if (name) return "Purify";
8455                 if (desc) return "Heals all cut, stun and poison status.";
8456 #endif
8457     
8458                 {
8459                         if (cast)
8460                         {
8461                                 set_cut(0);
8462                                 set_poisoned(0);
8463                                 set_stun(0);
8464                         }
8465                 }
8466                 break;
8467
8468         case 8:
8469 #ifdef JP
8470                 if (name) return "¼Ù°­Èô¤Ð¤·";
8471                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼1ÂΤò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8472 #else
8473                 if (name) return "Scatter Evil";
8474                 if (desc) return "Attempts to teleport an evil monster away.";
8475 #endif
8476     
8477                 {
8478                         int power = MAX_SIGHT * 5;
8479
8480                         if (info) return info_power(power);
8481
8482                         if (cast)
8483                         {
8484                                 if (!get_aim_dir(&dir)) return NULL;
8485                                 fire_ball(GF_AWAY_EVIL, dir, power, 0);
8486                         }
8487                 }
8488                 break;
8489
8490         case 9:
8491 #ifdef JP
8492                 if (name) return "À»¤Ê¤ë¸÷µå";
8493                 if (desc) return "À»¤Ê¤ëÎϤò¤â¤ÄÊõ¼î¤òÊü¤Ä¡£¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤¬¡¢Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡£";
8494 #else
8495                 if (name) return "Holy Orb";
8496                 if (desc) return "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good monsters.";
8497 #endif
8498     
8499                 {
8500                         int dice = 3;
8501                         int sides = 6;
8502                         int rad = (plev < 30) ? 2 : 3;
8503                         int base;
8504
8505                         if (p_ptr->pclass == CLASS_PRIEST ||
8506                             p_ptr->pclass == CLASS_HIGH_MAGE ||
8507                             p_ptr->pclass == CLASS_SORCERER)
8508                                 base = plev + plev / 2;
8509                         else
8510                                 base = plev + plev / 4;
8511
8512
8513                         if (info) return info_damage(dice, sides, base);
8514
8515                         if (cast)
8516                         {
8517                                 if (!get_aim_dir(&dir)) return NULL;
8518
8519                                 fire_ball(GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);
8520                         }
8521                 }
8522                 break;
8523
8524         case 10:
8525 #ifdef JP
8526                 if (name) return "°­Ëâʧ¤¤";
8527                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥ÉµÚ¤Ó°­Ëâ¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£";
8528 #else
8529                 if (name) return "Exorcism";
8530                 if (desc) return "Damages all undead and demons in sight, and scares all evil monsters in sight.";
8531 #endif
8532     
8533                 {
8534                         int sides = plev;
8535                         int power = plev;
8536
8537                         if (info) return info_damage(1, sides, 0);
8538
8539                         if (cast)
8540                         {
8541                                 dispel_undead(randint1(sides));
8542                                 dispel_demons(randint1(sides));
8543                                 turn_evil(power);
8544                         }
8545                 }
8546                 break;
8547
8548         case 11:
8549 #ifdef JP
8550                 if (name) return "²ò¼ö";
8551                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¼å¤¤¼ö¤¤¤ò²ò½ü¤¹¤ë¡£";
8552 #else
8553                 if (name) return "Remove Curse";
8554                 if (desc) return "Removes normal curses from equipped items.";
8555 #endif
8556     
8557                 {
8558                         if (cast)
8559                         {
8560                                 if (remove_curse())
8561                                 {
8562 #ifdef JP
8563                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
8564 #else
8565                                         msg_print("You feel as if someone is watching over you.");
8566 #endif
8567                                 }
8568                         }
8569                 }
8570                 break;
8571
8572         case 12:
8573 #ifdef JP
8574                 if (name) return "Æ©ÌÀ»ëǧ";
8575                 if (desc) return "°ìÄê»þ´Ö¡¢Æ©ÌÀ¤Ê¤â¤Î¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¡£";
8576 #else
8577                 if (name) return "Sense Unseen";
8578                 if (desc) return "Gives see invisible for a while.";
8579 #endif
8580     
8581                 {
8582                         int base = 24;
8583
8584                         if (info) return info_duration(base, base);
8585
8586                         if (cast)
8587                         {
8588                                 set_tim_invis(randint1(base) + base, FALSE);
8589                         }
8590                 }
8591                 break;
8592
8593         case 13:
8594 #ifdef JP
8595                 if (name) return "Âмٰ­·ë³¦";
8596                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Î¹¶·â¤òËɤ°¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
8597 #else
8598                 if (name) return "Protection from Evil";
8599                 if (desc) return "Gives aura which protect you from evil monster's physical attack.";
8600 #endif
8601     
8602                 {
8603                         int base = 25;
8604                         int sides = 3 * plev;
8605
8606                         if (info) return info_duration(base, sides);
8607
8608                         if (cast)
8609                         {
8610                                 set_protevil(randint1(sides) + sides, FALSE);
8611                         }
8612                 }
8613                 break;
8614
8615         case 14:
8616 #ifdef JP
8617                 if (name) return "ºÛ¤­¤ÎÍë";
8618                 if (desc) return "¶¯ÎϤÊÅÅ·â¤Î¥Ü¥ë¥È¤òÊü¤Ä¡£";
8619 #else
8620                 if (name) return "Judgment Thunder";
8621                 if (desc) return "Fires a powerful bolt of lightning.";
8622 #endif
8623     
8624                 {
8625                         int dam = plev * 5;
8626
8627                         if (info) return info_damage(0, 0, dam);
8628
8629                         if (cast)
8630                         {
8631                                 if (!get_aim_dir(&dir)) return NULL;
8632                                 fire_bolt(GF_ELEC, dir, dam);
8633                         }
8634                 }
8635                 break;
8636
8637         case 15:
8638 #ifdef JP
8639                 if (name) return "À»¤Ê¤ë¸æ¸ÀÍÕ";
8640                 if (desc) return "»ë³¦Æâ¤Î¼Ù°­¤Ê¸ºß¤ËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢ÂÎÎϤò²óÉü¤·¡¢ÆÇ¡¢¶²ÉÝ¡¢Û¯Û°¾õÂÖ¡¢Éé½ý¤«¤éÁ´²÷¤¹¤ë¡£";
8641 #else
8642                 if (name) return "Holy Word";
8643                 if (desc) return "Damages all evil monsters in sight, heals HP somewhat, and completely heals poison, fear, stun and cut status.";
8644 #endif
8645     
8646                 {
8647                         int dam_sides = plev * 6;
8648                         int heal = 100;
8649
8650 #ifdef JP
8651                         if (info) return format("»:1d%d/²ó%d", dam_sides, heal);
8652 #else
8653                         if (info) return format("dam:d%d/h%d", dam_sides, heal);
8654 #endif
8655
8656                         if (cast)
8657                         {
8658                                 dispel_evil(randint1(dam_sides));
8659                                 hp_player(heal);
8660                                 set_afraid(0);
8661                                 set_poisoned(0);
8662                                 set_stun(0);
8663                                 set_cut(0);
8664                         }
8665                 }
8666                 break;
8667
8668         case 16:
8669 #ifdef JP
8670                 if (name) return "³«¤«¤ì¤¿Æ»";
8671                 if (desc) return "°ìľÀþ¾å¤ÎÁ´¤Æ¤Î櫤ÈÈâ¤òÇ˲õ¤¹¤ë¡£";
8672 #else
8673                 if (name) return "Unbarring Ways";
8674                 if (desc) return "Fires a beam which destroy traps and doors.";
8675 #endif
8676     
8677                 {
8678                         if (cast)
8679                         {
8680                                 if (!get_aim_dir(&dir)) return NULL;
8681
8682                                 destroy_door(dir);
8683                         }
8684                 }
8685                 break;
8686
8687         case 17:
8688 #ifdef JP
8689                 if (name) return "ÉõËâ";
8690                 if (desc) return "¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ÎÆ°¤­¤ò»ß¤á¤ë¡£";
8691 #else
8692                 if (name) return "Arrest";
8693                 if (desc) return "Attempts to paralyze an evil monster.";
8694 #endif
8695     
8696                 {
8697                         int power = plev * 2;
8698
8699                         if (info) return info_power(power);
8700
8701                         if (cast)
8702                         {
8703                                 if (!get_aim_dir(&dir)) return NULL;
8704                                 stasis_evil(dir);
8705                         }
8706                 }
8707                 break;
8708
8709         case 18:
8710 #ifdef JP
8711                 if (name) return "À»¤Ê¤ë¥ª¡¼¥é";
8712                 if (desc) return "°ìÄê»þ´Ö¡¢¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò½ý¤Ä¤±¤ëÀ»¤Ê¤ë¥ª¡¼¥é¤òÆÀ¤ë¡£";
8713 #else
8714                 if (name) return "Holy Aura";
8715                 if (desc) return "Gives aura of holy power which injures evil monsters which attacked you for a while.";
8716 #endif
8717     
8718                 {
8719                         int base = 20;
8720
8721                         if (info) return info_duration(base, base);
8722
8723                         if (cast)
8724                         {
8725                                 set_tim_sh_holy(randint1(base) + base, FALSE);
8726                         }
8727                 }
8728                 break;
8729
8730         case 19:
8731 #ifdef JP
8732                 if (name) return "¥¢¥ó¥Ç¥Ã¥É&°­ËâÂ໶";
8733                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥¢¥ó¥Ç¥Ã¥ÉµÚ¤Ó°­Ëâ¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8734 #else
8735                 if (name) return "Dispel Undead & Demons";
8736                 if (desc) return "Damages all undead and demons in sight.";
8737 #endif
8738     
8739                 {
8740                         int sides = plev * 4;
8741
8742                         if (info) return info_damage(1, sides, 0);
8743
8744                         if (cast)
8745                         {
8746                                 dispel_undead(randint1(sides));
8747                                 dispel_demons(randint1(sides));
8748                         }
8749                 }
8750                 break;
8751
8752         case 20:
8753 #ifdef JP
8754                 if (name) return "¼Ù°­Â໶";
8755                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8756 #else
8757                 if (name) return "Dispel Evil";
8758                 if (desc) return "Damages all evil monsters in sight.";
8759 #endif
8760     
8761                 {
8762                         int sides = plev * 4;
8763
8764                         if (info) return info_damage(1, sides, 0);
8765
8766                         if (cast)
8767                         {
8768                                 dispel_evil(randint1(sides));
8769                         }
8770                 }
8771                 break;
8772
8773         case 21:
8774 #ifdef JP
8775                 if (name) return "À»¤Ê¤ë¿Ï";
8776                 if (desc) return "Ä̾ï¤ÎÉð´ï¤ËÌǼ٤ΰÀ­¤ò¤Ä¤±¤ë¡£";
8777 #else
8778                 if (name) return "Holy Blade";
8779                 if (desc) return "Makes current weapon especially deadly against evil monsters.";
8780 #endif
8781     
8782                 {
8783                         if (cast)
8784                         {
8785                                 brand_weapon(13);
8786                         }
8787                 }
8788                 break;
8789
8790         case 22:
8791 #ifdef JP
8792                 if (name) return "¥¹¥¿¡¼¥Ð¡¼¥¹¥È";
8793                 if (desc) return "µðÂç¤ÊÁ®¸÷¤Îµå¤òÊü¤Ä¡£";
8794 #else
8795                 if (name) return "Star Burst";
8796                 if (desc) return "Fires a huge ball of powerful light.";
8797 #endif
8798     
8799                 {
8800                         int dam = 100 + plev * 2;
8801                         int rad = 4;
8802
8803                         if (info) return info_damage(0, 0, dam);
8804
8805                         if (cast)
8806                         {
8807                                 if (!get_aim_dir(&dir)) return NULL;
8808
8809                                 fire_ball(GF_LITE, dir, dam, rad);
8810                         }
8811                 }
8812                 break;
8813
8814         case 23:
8815 #ifdef JP
8816                 if (name) return "Å·»È¾¤´­";
8817                 if (desc) return "Å·»È¤ò1Âξ¤´­¤¹¤ë¡£";
8818 #else
8819                 if (name) return "Summon Angel";
8820                 if (desc) return "Summons an angel.";
8821 #endif
8822     
8823                 {
8824                         if (cast)
8825                         {
8826                                 bool pet = !one_in_(3);
8827                                 u32b mode = 0L;
8828
8829                                 if (pet) mode |= PM_FORCE_PET;
8830                                 else mode |= PM_NO_PET;
8831                                 if (!(pet && (plev < 50))) mode |= PM_ALLOW_GROUP;
8832
8833                                 if (summon_specific((pet ? -1 : 0), py, px, (plev * 3) / 2, SUMMON_ANGEL, mode))
8834                                 {
8835                                         if (pet)
8836                                         {
8837 #ifdef JP
8838                                                 msg_print("¡Ö¤´ÍѤǤ´¤¶¤¤¤Þ¤¹¤«¡¢¤´¼ç¿ÍÍÍ¡×");
8839 #else
8840                                                 msg_print("'What is thy bidding... Master?'");
8841 #endif
8842                                         }
8843                                         else
8844                                         {
8845 #ifdef JP
8846                                                 msg_print("¡Ö²æ¤ÏÆò¤Î²¼Ëͤˤ¢¤é¤º¡ª °­¹Ô¼Ô¤è¡¢²ù¤¤²þ¤á¤è¡ª¡×");
8847 #else
8848                                                 msg_print("Mortal! Repent of thy impiousness.");
8849 #endif
8850                                         }
8851                                 }
8852                         }
8853                 }
8854                 break;
8855
8856         case 24:
8857 #ifdef JP
8858                 if (name) return "»Îµ¤¹âÍÈ";
8859                 if (desc) return "°ìÄê»þ´Ö¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
8860 #else
8861                 if (name) return "Heroism";
8862                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
8863 #endif
8864     
8865                 {
8866                         int base = 25;
8867
8868                         if (info) return info_duration(base, base);
8869
8870                         if (cast)
8871                         {
8872                                 set_hero(randint1(base) + base, FALSE);
8873                                 hp_player(10);
8874                                 set_afraid(0);
8875                         }
8876                 }
8877                 break;
8878
8879         case 25:
8880 #ifdef JP
8881                 if (name) return "¼ö¤¤Â໶";
8882                 if (desc) return "¥¢¥¤¥Æ¥à¤Ë¤«¤«¤Ã¤¿¶¯ÎϤʼö¤¤¤ò²ò½ü¤¹¤ë¡£";
8883 #else
8884                 if (name) return "Dispel Curse";
8885                 if (desc) return "Removes normal and heavy curse from equipped items.";
8886 #endif
8887     
8888                 {
8889                         if (cast)
8890                         {
8891                                 if (remove_all_curse())
8892                                 {
8893 #ifdef JP
8894                                         msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
8895 #else
8896                                         msg_print("You feel as if someone is watching over you.");
8897 #endif
8898                                 }
8899                         }
8900                 }
8901                 break;
8902
8903         case 26:
8904 #ifdef JP
8905                 if (name) return "¼Ù°­ÄÉÊü";
8906                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
8907 #else
8908                 if (name) return "Banish Evil";
8909                 if (desc) return "Teleports all evil monsters in sight away unless resisted.";
8910 #endif
8911     
8912                 {
8913                         int power = 100;
8914
8915                         if (info) return info_power(power);
8916
8917                         if (cast)
8918                         {
8919                                 if (banish_evil(power))
8920                                 {
8921 #ifdef JP
8922                                         msg_print("¿ÀÀ»¤ÊÎϤ¬¼Ù°­¤òÂǤÁʧ¤Ã¤¿¡ª");
8923 #else
8924                                         msg_print("The holy power banishes evil!");
8925 #endif
8926
8927                                 }
8928                         }
8929                 }
8930                 break;
8931
8932         case 27:
8933 #ifdef JP
8934                 if (name) return "¥Ï¥ë¥Þ¥²¥É¥ó";
8935                 if (desc) return "¼þÊդΥ¢¥¤¥Æ¥à¡¢¥â¥ó¥¹¥¿¡¼¡¢ÃÏ·Á¤òÇ˲õ¤¹¤ë¡£";
8936 #else
8937                 if (name) return "Armageddon";
8938                 if (desc) return "Destroy everything in nearby area.";
8939 #endif
8940     
8941                 {
8942                         int base = 12;
8943                         int sides = 4;
8944
8945                         if (cast)
8946                         {
8947                                 destroy_area(py, px, base + randint1(sides), FALSE);
8948                         }
8949                 }
8950                 break;
8951
8952         case 28:
8953 #ifdef JP
8954                 if (name) return "ÌܤˤÏÌܤò";
8955                 if (desc) return "°ìÄê»þ´Ö¡¢¼«Ê¬¤¬¥À¥á¡¼¥¸¤ò¼õ¤±¤¿¤È¤­¤Ë¹¶·â¤ò¹Ô¤Ã¤¿¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆƱÅù¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
8956 #else
8957                 if (name) return "An Eye for an Eye";
8958                 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.";
8959 #endif
8960     
8961                 {
8962                         int base = 10;
8963
8964                         if (info) return info_duration(base, base);
8965
8966                         if (cast)
8967                         {
8968                                 set_tim_eyeeye(randint1(base) + base, FALSE);
8969                         }
8970                 }
8971                 break;
8972
8973         case 29:
8974 #ifdef JP
8975                 if (name) return "¿À¤ÎÅܤê";
8976                 if (desc) return "¥¿¡¼¥²¥Ã¥È¤Î¼þ°Ï¤Ëʬ²ò¤Îµå¤ò¿¿ôÍî¤È¤¹¡£";
8977 #else
8978                 if (name) return "Wrath of the God";
8979                 if (desc) return "Drops many balls of disintegration near the target.";
8980 #endif
8981     
8982                 {
8983                         int dam = plev * 3 + 25;
8984                         int rad = 2;
8985
8986                         if (info) return info_multi_damage(dam);
8987
8988                         if (cast)
8989                         {
8990                                 if (!cast_wrath_of_the_god(dam, rad)) return NULL;
8991                         }
8992                 }
8993                 break;
8994
8995         case 30:
8996 #ifdef JP
8997                 if (name) return "¿À°Ò";
8998                 if (desc) return "ÎÙÀܤ¹¤ë¥â¥ó¥¹¥¿¡¼¤ËÀ»¤Ê¤ë¥À¥á¡¼¥¸¤òÍ¿¤¨¡¢»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¡¢¸ºÂ®¡¢Û¯Û°¡¢º®Í𡢶²ÉÝ¡¢Ì²¤ê¤òÍ¿¤¨¤ë¡£¤µ¤é¤ËÂÎÎϤò²óÉü¤¹¤ë¡£";
8999 #else
9000                 if (name) return "Divine Intervention";
9001                 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.";
9002 #endif
9003     
9004                 {
9005                         int b_dam = plev * 11;
9006                         int d_dam = plev * 4;
9007                         int heal = 100;
9008                         int power = plev * 4;
9009
9010 #ifdef JP
9011                         if (info) return format("²ó%d/»%d+%d", heal, d_dam, b_dam/2);
9012 #else
9013                         if (info) return format("h%d/dm%d+%d", heal, d_dam, b_dam/2);
9014 #endif
9015
9016                         if (cast)
9017                         {
9018                                 project(0, 1, py, px, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
9019                                 dispel_monsters(d_dam);
9020                                 slow_monsters(plev);
9021                                 stun_monsters(power);
9022                                 confuse_monsters(power);
9023                                 turn_monsters(power);
9024                                 stasis_monsters(power);
9025                                 hp_player(heal);
9026                         }
9027                 }
9028                 break;
9029
9030         case 31:
9031 #ifdef JP
9032                 if (name) return "À»Àï";
9033                 if (desc) return "»ë³¦Æâ¤ÎÁ±Îɤʥâ¥ó¥¹¥¿¡¼¤ò¥Ú¥Ã¥È¤Ë¤·¤è¤¦¤È¤·¡¢¤Ê¤é¤Ê¤«¤Ã¤¿¾ì¹çµÚ¤ÓÁ±ÎɤǤʤ¤¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£¤µ¤é¤Ë¿¿ô¤Î²Ã®¤µ¤ì¤¿µ³»Î¤ò¾¤´­¤·¡¢¥Ò¡¼¥í¡¼¡¢½ËÊ¡¡¢²Ã®¡¢Âмٰ­·ë³¦¤òÆÀ¤ë¡£";
9034 #else
9035                 if (name) return "Crusade";
9036                 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.";
9037 #endif
9038     
9039                 {
9040                         if (cast)
9041                         {
9042                                 int base = 25;
9043                                 int sp_sides = 20 + plev;
9044                                 int sp_base = plev;
9045
9046                                 int i;
9047                                 crusade();
9048                                 for (i = 0; i < 12; i++)
9049                                 {
9050                                         int attempt = 10;
9051                                         int my, mx;
9052
9053                                         while (attempt--)
9054                                         {
9055                                                 scatter(&my, &mx, py, px, 4, 0);
9056
9057                                                 /* Require empty grids */
9058                                                 if (cave_empty_bold2(my, mx)) break;
9059                                         }
9060                                         if (attempt < 0) continue;
9061                                         summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
9062                                 }
9063                                 set_hero(randint1(base) + base, FALSE);
9064                                 set_blessed(randint1(base) + base, FALSE);
9065                                 set_fast(randint1(sp_sides) + sp_base, FALSE);
9066                                 set_protevil(randint1(base) + base, FALSE);
9067                                 set_afraid(0);
9068                         }
9069                 }
9070                 break;
9071         }
9072
9073         return "";
9074 }
9075
9076
9077 /*!
9078  * @brief ²Î¤Î³Æ½èÍý¤ò¹Ô¤¦
9079  * @param spell ²ÎID
9080  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP)
9081  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST / SPELL_FAIL / SPELL_CONT / SPELL_STOP »þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
9082  */
9083 static cptr do_music_spell(int spell, int mode)
9084 {
9085         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
9086         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
9087         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
9088         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
9089         bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE;
9090         bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
9091         bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
9092
9093 #ifdef JP
9094         static const char s_dam[] = "»½ý:";
9095 #else
9096         static const char s_dam[] = "dam ";
9097 #endif
9098
9099         int dir;
9100         int plev = p_ptr->lev;
9101
9102         switch (spell)
9103         {
9104         case 0:
9105 #ifdef JP
9106                 if (name) return "ÃÙÆߤβÎ";
9107                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9108 #else
9109                 if (name) return "Song of Holding";
9110                 if (desc) return "Attempts to slow 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 start humming a slow, steady melody...");
9122 #endif
9123                         start_singing(spell, MUSIC_SLOW);
9124                 }
9125
9126                 {
9127                         int power = plev;
9128
9129                         if (info) return info_power(power);
9130
9131                         if (cont)
9132                         {
9133                                 slow_monsters(plev);
9134                         }
9135                 }
9136                 break;
9137
9138         case 1:
9139 #ifdef JP
9140                 if (name) return "½ËÊ¡¤Î²Î";
9141                 if (desc) return "Ì¿ÃæΨ¤ÈAC¤Î¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¡£";
9142 #else
9143                 if (name) return "Song of Blessing";
9144                 if (desc) return "Gives bonus to hit and AC for a few turns.";
9145 #endif
9146     
9147                 /* Stop singing before start another */
9148                 if (cast || fail) stop_singing();
9149
9150                 if (cast)
9151                 {
9152 #ifdef JP
9153                         msg_print("¸·¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9154 #else
9155                         msg_print("The holy power of the Music of the Ainur enters you...");
9156 #endif
9157                         start_singing(spell, MUSIC_BLESS);
9158                 }
9159
9160                 if (stop)
9161                 {
9162                         if (!p_ptr->blessed)
9163                         {
9164 #ifdef JP
9165                                 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9166 #else
9167                                 msg_print("The prayer has expired.");
9168 #endif
9169                         }
9170                 }
9171
9172                 break;
9173
9174         case 2:
9175 #ifdef JP
9176                 if (name) return "Êø²õ¤Î²»¿§";
9177                 if (desc) return "¹ì²»¤Î¥Ü¥ë¥È¤òÊü¤Ä¡£";
9178 #else
9179                 if (name) return "Wrecking Note";
9180                 if (desc) return "Fires a bolt of sound.";
9181 #endif
9182     
9183                 /* Stop singing before start another */
9184                 if (cast || fail) stop_singing();
9185
9186                 {
9187                         int dice = 4 + (plev - 1) / 5;
9188                         int sides = 4;
9189
9190                         if (info) return info_damage(dice, sides, 0);
9191
9192                         if (cast)
9193                         {
9194                                 if (!get_aim_dir(&dir)) return NULL;
9195
9196                                 fire_bolt(GF_SOUND, dir, damroll(dice, sides));
9197                         }
9198                 }
9199                 break;
9200
9201         case 3:
9202 #ifdef JP
9203                 if (name) return "Û¯Û°¤ÎÀûΧ";
9204                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òÛ¯Û°¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9205 #else
9206                 if (name) return "Stun Pattern";
9207                 if (desc) return "Attempts to stun all monsters in sight.";
9208 #endif
9209     
9210                 /* Stop singing before start another */
9211                 if (cast || fail) stop_singing();
9212
9213                 if (cast)
9214                 {
9215 #ifdef JP
9216                         msg_print("âÁÏǤµ¤»¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9217 #else
9218                         msg_print("You weave a pattern of sounds to bewilder and daze...");
9219 #endif
9220                         start_singing(spell, MUSIC_STUN);
9221                 }
9222
9223                 {
9224                         int dice = plev / 10;
9225                         int sides = 2;
9226
9227                         if (info) return info_power_dice(dice, sides);
9228
9229                         if (cont)
9230                         {
9231                                 stun_monsters(damroll(dice, sides));
9232                         }
9233                 }
9234
9235                 break;
9236
9237         case 4:
9238 #ifdef JP
9239                 if (name) return "À¸Ì¿¤Îή¤ì";
9240                 if (desc) return "ÂÎÎϤò¾¯¤·²óÉü¤µ¤»¤ë¡£";
9241 #else
9242                 if (name) return "Flow of Life";
9243                 if (desc) return "Heals HP a little.";
9244 #endif
9245     
9246                 /* Stop singing before start another */
9247                 if (cast || fail) stop_singing();
9248
9249                 if (cast)
9250                 {
9251 #ifdef JP
9252                         msg_print("²Î¤òÄ̤·¤ÆÂΤ˳赤¤¬Ìá¤Ã¤Æ¤­¤¿¡¥¡¥¡¥");
9253 #else
9254                         msg_print("Life flows through you as you sing a song of healing...");
9255 #endif
9256                         start_singing(spell, MUSIC_L_LIFE);
9257                 }
9258
9259                 {
9260                         int dice = 2;
9261                         int sides = 6;
9262
9263                         if (info) return info_heal(dice, sides, 0);
9264
9265                         if (cont)
9266                         {
9267                                 hp_player(damroll(dice, sides));
9268                         }
9269                 }
9270
9271                 break;
9272
9273         case 5:
9274 #ifdef JP
9275                 if (name) return "ÂÀÍۤβÎ";
9276                 if (desc) return "¸÷¸»¤¬¾È¤é¤·¤Æ¤¤¤ëÈϰϤ«Éô²°Á´ÂΤò±Êµ×¤ËÌÀ¤ë¤¯¤¹¤ë¡£";
9277 #else
9278                 if (name) return "Song of the Sun";
9279                 if (desc) return "Lights up nearby area and the inside of a room permanently.";
9280 #endif
9281     
9282                 /* Stop singing before start another */
9283                 if (cast || fail) stop_singing();
9284
9285                 {
9286                         int dice = 2;
9287                         int sides = plev / 2;
9288                         int rad = plev / 10 + 1;
9289
9290                         if (info) return info_damage(dice, sides, 0);
9291
9292                         if (cast)
9293                         {
9294 #ifdef JP
9295                                 msg_print("¸÷¤êµ±¤¯²Î¤¬ÊÕ¤ê¤ò¾È¤é¤·¤¿¡£");
9296 #else
9297                                 msg_print("Your uplifting song brings brightness to dark places...");
9298 #endif
9299
9300                                 lite_area(damroll(dice, sides), rad);
9301                         }
9302                 }
9303                 break;
9304
9305         case 6:
9306 #ifdef JP
9307                 if (name) return "¶²ÉݤβÎ";
9308                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¶²Éݤµ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9309 #else
9310                 if (name) return "Song of Fear";
9311                 if (desc) return "Attempts to scare all monsters in sight.";
9312 #endif
9313     
9314                 /* Stop singing before start another */
9315                 if (cast || fail) stop_singing();
9316
9317                 if (cast)
9318                 {
9319 #ifdef JP
9320                         msg_print("¤ª¤É¤í¤ª¤É¤í¤·¤¤¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9321 #else
9322                         msg_print("You start weaving a fearful pattern...");
9323 #endif
9324                         start_singing(spell, MUSIC_FEAR);                       
9325                 }
9326
9327                 {
9328                         int power = plev;
9329
9330                         if (info) return info_power(power);
9331
9332                         if (cont)
9333                         {
9334                                 project_hack(GF_TURN_ALL, power);
9335                         }
9336                 }
9337
9338                 break;
9339
9340         case 7:
9341 #ifdef JP
9342                 if (name) return "À襤¤Î²Î";
9343                 if (desc) return "¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ë¡£";
9344 #else
9345                 if (name) return "Heroic Ballad";
9346                 if (desc) return "Removes fear, and gives bonus to hit and 10 more HP for a while.";
9347 #endif
9348
9349                 /* Stop singing before start another */
9350                 if (cast || fail) stop_singing();
9351
9352                 if (cast)
9353                 {
9354 #ifdef JP
9355                         msg_print("·ã¤·¤¤À襤¤Î²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
9356 #else
9357                         msg_print("You start singing a song of intense fighting...");
9358 #endif
9359
9360                         (void)hp_player(10);
9361                         (void)set_afraid(0);
9362
9363                         /* Recalculate hitpoints */
9364                         p_ptr->update |= (PU_HP);
9365
9366                         start_singing(spell, MUSIC_HERO);
9367                 }
9368
9369                 if (stop)
9370                 {
9371                         if (!p_ptr->hero)
9372                         {
9373 #ifdef JP
9374                                 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
9375 #else
9376                                 msg_print("The heroism wears off.");
9377 #endif
9378                                 /* Recalculate hitpoints */
9379                                 p_ptr->update |= (PU_HP);
9380                         }
9381                 }
9382
9383                 break;
9384
9385         case 8:
9386 #ifdef JP
9387                 if (name) return "ÎîŪÃγÐ";
9388                 if (desc) return "¶á¤¯¤Îæ«/Èâ/³¬Ãʤò´¶ÃΤ¹¤ë¡£¥ì¥Ù¥ë15¤ÇÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¡¢20¤ÇºâÊõ¤È¥¢¥¤¥Æ¥à¤ò´¶ÃΤǤ­¤ë¤è¤¦¤Ë¤Ê¤ë¡£¥ì¥Ù¥ë25¤Ç¼þÊÕ¤ÎÃÏ·Á¤ò´¶ÃΤ·¡¢40¤Ç¤½¤Î³¬Á´ÂΤò±Êµ×¤Ë¾È¤é¤·¡¢¥À¥ó¥¸¥ç¥óÆâ¤Î¤¹¤Ù¤Æ¤Î¥¢¥¤¥Æ¥à¤ò´¶ÃΤ¹¤ë¡£¤³¤Î¸ú²Ì¤Ï²Î¤¤Â³¤±¤ë¤³¤È¤Ç½ç¤Ëµ¯¤³¤ë¡£";
9389 #else
9390                 if (name) return "Clairaudience";
9391                 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.";
9392 #endif
9393     
9394                 /* Stop singing before start another */
9395                 if (cast || fail) stop_singing();
9396
9397                 if (cast)
9398                 {
9399 #ifdef JP
9400                         msg_print("ÀŤ«¤Ê²»³Ú¤¬´¶³Ð¤ò¸¦¤®À¡¤Þ¤µ¤»¤¿¡¥¡¥¡¥");
9401 #else
9402                         msg_print("Your quiet music sharpens your sense of hearing...");
9403 #endif
9404
9405                         /* Hack -- Initialize the turn count */
9406                         p_ptr->magic_num1[2] = 0;
9407
9408                         start_singing(spell, MUSIC_DETECT);
9409                 }
9410
9411                 {
9412                         int rad = DETECT_RAD_DEFAULT;
9413
9414                         if (info) return info_radius(rad);
9415
9416                         if (cont)
9417                         {
9418                                 int count = p_ptr->magic_num1[2];
9419
9420                                 if (count >= 19) wiz_lite(FALSE);
9421                                 if (count >= 11)
9422                                 {
9423                                         map_area(rad);
9424                                         if (plev > 39 && count < 19)
9425                                                 p_ptr->magic_num1[2] = count + 1;
9426                                 }
9427                                 if (count >= 6)
9428                                 {
9429                                         /* There are too many hidden treasure.  So... */
9430                                         /* detect_treasure(rad); */
9431                                         detect_objects_gold(rad);
9432                                         detect_objects_normal(rad);
9433
9434                                         if (plev > 24 && count < 11)
9435                                                 p_ptr->magic_num1[2] = count + 1;
9436                                 }
9437                                 if (count >= 3)
9438                                 {
9439                                         detect_monsters_invis(rad);
9440                                         detect_monsters_normal(rad);
9441
9442                                         if (plev > 19 && count < 6)
9443                                                 p_ptr->magic_num1[2] = count + 1;
9444                                 }
9445                                 detect_traps(rad, TRUE);
9446                                 detect_doors(rad);
9447                                 detect_stairs(rad);
9448
9449                                 if (plev > 14 && count < 3)
9450                                         p_ptr->magic_num1[2] = count + 1;
9451                         }
9452                 }
9453
9454                 break;
9455
9456         case 9:
9457 #ifdef JP
9458                 if (name) return "º²¤Î²Î";
9459                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤ÆÀº¿À¹¶·â¤ò¹Ô¤¦¡£";
9460 #else
9461                 if (name) return "Soul Shriek";
9462                 if (desc) return "Damages all monsters in sight with PSI damages.";
9463 #endif
9464
9465                 /* Stop singing before start another */
9466                 if (cast || fail) stop_singing();
9467
9468                 if (cast)
9469                 {
9470 #ifdef JP
9471                         msg_print("Àº¿À¤òDZ¤¸¶Ê¤²¤ë²Î¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
9472 #else
9473                         msg_print("You start singing a song of soul in pain...");
9474 #endif
9475                         start_singing(spell, MUSIC_PSI);
9476                 }
9477
9478                 {
9479                         int dice = 1;
9480                         int sides = plev * 3 / 2;
9481
9482                         if (info) return info_damage(dice, sides, 0);
9483
9484                         if (cont)
9485                         {
9486                                 project_hack(GF_PSI, damroll(dice, sides));
9487                         }
9488                 }
9489
9490                 break;
9491
9492         case 10:
9493 #ifdef JP
9494                 if (name) return "Ãμ±¤Î²Î";
9495                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¥Þ¥¹¤ÈÎÙ¤ê¤Î¥Þ¥¹¤ËÍî¤Á¤Æ¤¤¤ë¥¢¥¤¥Æ¥à¤ò´ÕÄꤹ¤ë¡£";
9496 #else
9497                 if (name) return "Song of Lore";
9498                 if (desc) return "Identifies all items which are in the adjacent squares.";
9499 #endif
9500     
9501                 /* Stop singing before start another */
9502                 if (cast || fail) stop_singing();
9503
9504                 if (cast)
9505                 {
9506 #ifdef JP
9507                         msg_print("¤³¤ÎÀ¤³¦¤ÎÃ챤¬Î®¤ì¹þ¤ó¤Ç¤­¤¿¡¥¡¥¡¥");
9508 #else
9509                         msg_print("You recall the rich lore of the world...");
9510 #endif
9511                         start_singing(spell, MUSIC_ID);
9512                 }
9513
9514                 {
9515                         int rad = 1;
9516
9517                         if (info) return info_radius(rad);
9518
9519                         /*
9520                          * ²Î¤Î³«»Ï»þ¤Ë¤â¸ú²Ìȯư¡§
9521                          * MPÉÔ­¤Ç´ÕÄ꤬ȯư¤µ¤ì¤ëÁ°¤Ë²Î¤¬ÃæÃǤ·¤Æ¤·¤Þ¤¦¤Î¤òËɻߡ£
9522                          */
9523                         if (cont || cast)
9524                         {
9525                                 project(0, rad, py, px, 0, GF_IDENTIFY, PROJECT_ITEM, -1);
9526                         }
9527                 }
9528
9529                 break;
9530
9531         case 11:
9532 #ifdef JP
9533                 if (name) return "±£ÆۤβÎ";
9534                 if (desc) return "±£Ì©¹ÔưǽÎϤò¾å¾º¤µ¤»¤ë¡£";
9535 #else
9536                 if (name) return "Hiding Tune";
9537                 if (desc) return "Gives improved stealth.";
9538 #endif
9539
9540                 /* Stop singing before start another */
9541                 if (cast || fail) stop_singing();
9542
9543                 if (cast)
9544                 {
9545 #ifdef JP
9546                         msg_print("¤¢¤Ê¤¿¤Î»Ñ¤¬·Ê¿§¤Ë¤È¤±¤³¤ó¤Ç¤¤¤Ã¤¿¡¥¡¥¡¥");
9547 #else
9548                         msg_print("Your song carries you beyond the sight of mortal eyes...");
9549 #endif
9550                         start_singing(spell, MUSIC_STEALTH);
9551                 }
9552
9553                 if (stop)
9554                 {
9555                         if (!p_ptr->tim_stealth)
9556                         {
9557 #ifdef JP
9558                                 msg_print("»Ñ¤¬¤Ï¤Ã¤­¤ê¤È¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£");
9559 #else
9560                                 msg_print("You are no longer hided.");
9561 #endif
9562                         }
9563                 }
9564
9565                 break;
9566
9567         case 12:
9568 #ifdef JP
9569                 if (name) return "¸¸±Æ¤ÎÀûΧ";
9570                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òº®Í𤵤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9571 #else
9572                 if (name) return "Illusion Pattern";
9573                 if (desc) return "Attempts to confuse 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 pattern of sounds to beguile and confuse...");
9585 #endif
9586                         start_singing(spell, MUSIC_CONF);
9587                 }
9588
9589                 {
9590                         int power = plev * 2;
9591
9592                         if (info) return info_power(power);
9593
9594                         if (cont)
9595                         {
9596                                 confuse_monsters(power);
9597                         }
9598                 }
9599
9600                 break;
9601
9602         case 13:
9603 #ifdef JP
9604                 if (name) return "ÇËÌǤ櫤Ó";
9605                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤Æ¹ì²»¹¶·â¤ò¹Ô¤¦¡£";
9606 #else
9607                 if (name) return "Doomcall";
9608                 if (desc) return "Damages all monsters in sight with booming sound.";
9609 #endif
9610     
9611                 /* Stop singing before start another */
9612                 if (cast || fail) stop_singing();
9613
9614                 if (cast)
9615                 {
9616 #ifdef JP
9617                         msg_print("¹ì²»¤¬¶Á¤¤¤¿¡¥¡¥¡¥");
9618 #else
9619                         msg_print("The fury of the Downfall of Numenor lashes out...");
9620 #endif
9621                         start_singing(spell, MUSIC_SOUND);
9622                 }
9623
9624                 {
9625                         int dice = 10 + plev / 5;
9626                         int sides = 7;
9627
9628                         if (info) return info_damage(dice, sides, 0);
9629
9630                         if (cont)
9631                         {
9632                                 project_hack(GF_SOUND, damroll(dice, sides));
9633                         }
9634                 }
9635
9636                 break;
9637
9638         case 14:
9639 #ifdef JP
9640                 if (name) return "¥Õ¥£¥ê¥¨¥ë¤Î²Î";
9641                 if (desc) return "¼þ°Ï¤Î»àÂΤä¹ü¤òÀ¸¤­ÊÖ¤¹¡£";
9642 #else
9643                 if (name) return "Firiel's Song";
9644                 if (desc) return "Resurrects nearby corpse and skeletons. And makes these your pets.";
9645 #endif
9646     
9647                 {
9648                         /* Stop singing before start another */
9649                         if (cast || fail) stop_singing();
9650
9651                         if (cast)
9652                         {
9653 #ifdef JP
9654                                 msg_print("À¸Ì¿¤ÈÉü³è¤Î¥Æ¡¼¥Þ¤òÁդǻϤ᤿¡¥¡¥¡¥");
9655 #else
9656                                 msg_print("The themes of life and revival are woven into your song...");
9657 #endif
9658
9659                                 animate_dead(0, py, px);
9660                         }
9661                 }
9662                 break;
9663
9664         case 15:
9665 #ifdef JP
9666                 if (name) return "ι¤ÎÃç´Ö";
9667                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò̥λ¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9668 #else
9669                 if (name) return "Fellowship Chant";
9670                 if (desc) return "Attempts to charm all monsters in sight.";
9671 #endif
9672
9673                 /* Stop singing before start another */
9674                 if (cast || fail) stop_singing();
9675
9676                 if (cast)
9677                 {
9678 #ifdef JP
9679                         msg_print("°Â¤é¤«¤Ê¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9680 #else
9681                         msg_print("You weave a slow, soothing melody of imploration...");
9682 #endif
9683                         start_singing(spell, MUSIC_CHARM);
9684                 }
9685
9686                 {
9687                         int dice = 10 + plev / 15;
9688                         int sides = 6;
9689
9690                         if (info) return info_power_dice(dice, sides);
9691
9692                         if (cont)
9693                         {
9694                                 charm_monsters(damroll(dice, sides));
9695                         }
9696                 }
9697
9698                 break;
9699
9700         case 16:
9701 #ifdef JP
9702                 if (name) return "ʬ²ò²»ÇÈ";
9703                 if (desc) return "Êɤò·¡¤ê¿Ê¤à¡£¼«Ê¬¤Î­¸µ¤Î¥¢¥¤¥Æ¥à¤Ï¾øȯ¤¹¤ë¡£";
9704 #else
9705                 if (name) return "Sound of disintegration";
9706                 if (desc) return "Makes you be able to burrow into walls. Objects under your feet evaporate.";
9707 #endif
9708
9709                 /* Stop singing before start another */
9710                 if (cast || fail) stop_singing();
9711
9712                 if (cast)
9713                 {
9714 #ifdef JP
9715                         msg_print("Ê´ºÕ¤¹¤ë¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
9716 #else
9717                         msg_print("You weave a violent pattern of sounds to break wall.");
9718 #endif
9719                         start_singing(spell, MUSIC_WALL);
9720                 }
9721
9722                 {
9723                         /*
9724                          * ²Î¤Î³«»Ï»þ¤Ë¤â¸ú²Ìȯư¡§
9725                          * MPÉÔ­¤Ç¸ú²Ì¤¬È¯Æ°¤µ¤ì¤ëÁ°¤Ë²Î¤¬ÃæÃǤ·¤Æ¤·¤Þ¤¦¤Î¤òËɻߡ£
9726                          */
9727                         if (cont || cast)
9728                         {
9729                                 project(0, 0, py, px,
9730                                         0, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE, -1);
9731                         }
9732                 }
9733                 break;
9734
9735         case 17:
9736 #ifdef JP
9737                 if (name) return "¸µÁÇÂÑÀ­";
9738                 if (desc) return "»À¡¢ÅÅ·â¡¢±ê¡¢Î䵤¡¢ÆǤËÂФ¹¤ëÂÑÀ­¤òÆÀ¤ë¡£ÁõÈ÷¤Ë¤è¤ëÂÑÀ­¤ËÎßÀѤ¹¤ë¡£";
9739 #else
9740                 if (name) return "Finrod's Resistance";
9741                 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.";
9742 #endif
9743     
9744                 /* Stop singing before start another */
9745                 if (cast || fail) stop_singing();
9746
9747                 if (cast)
9748                 {
9749 #ifdef JP
9750                         msg_print("¸µÁǤÎÎϤËÂФ¹¤ëǦÂѤβΤò²Î¤Ã¤¿¡£");
9751 #else
9752                         msg_print("You sing a song of perseverance against powers...");
9753 #endif
9754                         start_singing(spell, MUSIC_RESIST);
9755                 }
9756
9757                 if (stop)
9758                 {
9759                         if (!p_ptr->oppose_acid)
9760                         {
9761 #ifdef JP
9762                                 msg_print("»À¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9763 #else
9764                                 msg_print("You feel less resistant to acid.");
9765 #endif
9766                         }
9767
9768                         if (!p_ptr->oppose_elec)
9769                         {
9770 #ifdef JP
9771                                 msg_print("ÅÅ·â¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9772 #else
9773                                 msg_print("You feel less resistant to elec.");
9774 #endif
9775                         }
9776
9777                         if (!p_ptr->oppose_fire)
9778                         {
9779 #ifdef JP
9780                                 msg_print("²Ð¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9781 #else
9782                                 msg_print("You feel less resistant to fire.");
9783 #endif
9784                         }
9785
9786                         if (!p_ptr->oppose_cold)
9787                         {
9788 #ifdef JP
9789                                 msg_print("Î䵤¤Ø¤ÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9790 #else
9791                                 msg_print("You feel less resistant to cold.");
9792 #endif
9793                         }
9794
9795                         if (!p_ptr->oppose_pois)
9796                         {
9797 #ifdef JP
9798                                 msg_print("ÆǤؤÎÂÑÀ­¤¬Çö¤ì¤¿µ¤¤¬¤¹¤ë¡£");
9799 #else
9800                                 msg_print("You feel less resistant to pois.");
9801 #endif
9802                         }
9803                 }
9804
9805                 break;
9806
9807         case 18:
9808 #ifdef JP
9809                 if (name) return "¥Û¥Ó¥Ã¥È¤Î¥á¥í¥Ç¥£";
9810                 if (desc) return "²Ã®¤¹¤ë¡£";
9811 #else
9812                 if (name) return "Hobbit Melodies";
9813                 if (desc) return "Hastes you.";
9814 #endif
9815
9816                 /* Stop singing before start another */
9817                 if (cast || fail) stop_singing();
9818
9819                 if (cast)
9820                 {
9821 #ifdef JP
9822                         msg_print("·Ú²÷¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
9823 #else
9824                         msg_print("You start singing joyful pop song...");
9825 #endif
9826                         start_singing(spell, MUSIC_SPEED);
9827                 }
9828
9829                 if (stop)
9830                 {
9831                         if (!p_ptr->fast)
9832                         {
9833 #ifdef JP
9834                                 msg_print("Æ°¤­¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
9835 #else
9836                                 msg_print("You feel yourself slow down.");
9837 #endif
9838                         }
9839                 }
9840
9841                 break;
9842
9843         case 19:
9844 #ifdef JP
9845                 if (name) return "ÏĤó¤ÀÀ¤³¦";
9846                 if (desc) return "¶á¤¯¤Î¥â¥ó¥¹¥¿¡¼¤ò¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9847 #else
9848                 if (name) return "World Contortion";
9849                 if (desc) return "Teleports all nearby monsters away unless resisted.";
9850 #endif
9851     
9852                 {
9853                         int rad = plev / 15 + 1;
9854                         int power = plev * 3 + 1;
9855
9856                         if (info) return info_radius(rad);
9857
9858                         /* Stop singing before start another */
9859                         if (cast || fail) stop_singing();
9860
9861                         if (cast)
9862                         {
9863 #ifdef JP
9864                                 msg_print("²Î¤¬¶õ´Ö¤òÏĤ᤿¡¥¡¥¡¥");
9865 #else
9866                                 msg_print("Reality whirls wildly as you sing a dizzying melody...");
9867 #endif
9868
9869                                 project(0, rad, py, px, power, GF_AWAY_ALL, PROJECT_KILL, -1);
9870                         }
9871                 }
9872                 break;
9873
9874         case 20:
9875 #ifdef JP
9876                 if (name) return "Â໶¤Î²Î";
9877                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÆäËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
9878 #else
9879                 if (name) return "Dispelling chant";
9880                 if (desc) return "Damages all monsters in sight. Hurts evil monsters greatly.";
9881 #endif
9882     
9883                 /* Stop singing before start another */
9884                 if (cast || fail) stop_singing();
9885
9886                 if (cast)
9887                 {
9888 #ifdef JP
9889                         msg_print("ÂѤ¨¤é¤ì¤Ê¤¤ÉÔ¶¨Ï²»¤¬Å¨¤òÀÕ¤áΩ¤Æ¤¿¡¥¡¥¡¥");
9890 #else
9891                         msg_print("You cry out in an ear-wracking voice...");
9892 #endif
9893                         start_singing(spell, MUSIC_DISPEL);
9894                 }
9895
9896                 {
9897                         int m_sides = plev * 3;
9898                         int e_sides = plev * 3;
9899
9900                         if (info) return format("%s1d%d+1d%d", s_dam, m_sides, e_sides);
9901
9902                         if (cont)
9903                         {
9904                                 dispel_monsters(randint1(m_sides));
9905                                 dispel_evil(randint1(e_sides));
9906                         }
9907                 }
9908                 break;
9909
9910         case 21:
9911 #ifdef JP
9912                 if (name) return "¥µ¥ë¥Þ¥ó¤Î´Å¸À";
9913                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤ò¸ºÂ®¤µ¤»¡¢Ì²¤é¤»¤è¤¦¤È¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
9914 #else
9915                 if (name) return "The Voice of Saruman";
9916                 if (desc) return "Attempts to slow and sleep all monsters in sight.";
9917 #endif
9918     
9919                 /* Stop singing before start another */
9920                 if (cast || fail) stop_singing();
9921
9922                 if (cast)
9923                 {
9924 #ifdef JP
9925                         msg_print("Í¥¤·¤¯¡¢Ì¥ÎÏŪ¤Ê²Î¤ò¸ý¤º¤µ¤ß»Ï¤á¤¿¡¥¡¥¡¥");
9926 #else
9927                         msg_print("You start humming a gentle and attractive song...");
9928 #endif
9929                         start_singing(spell, MUSIC_SARUMAN);
9930                 }
9931
9932                 {
9933                         int power = plev;
9934
9935                         if (info) return info_power(power);
9936
9937                         if (cont)
9938                         {
9939                                 slow_monsters(plev);
9940                                 sleep_monsters(plev);
9941                         }
9942                 }
9943
9944                 break;
9945
9946         case 22:
9947 #ifdef JP
9948                 if (name) return "Íò¤Î²»¿§";
9949                 if (desc) return "¹ì²»¤Î¥Ó¡¼¥à¤òÊü¤Ä¡£";
9950 #else
9951                 if (name) return "Song of the Tempest";
9952                 if (desc) return "Fires a beam of sound.";
9953 #endif
9954     
9955                 {
9956                         int dice = 15 + (plev - 1) / 2;
9957                         int sides = 10;
9958
9959                         if (info) return info_damage(dice, sides, 0);
9960
9961                         /* Stop singing before start another */
9962                         if (cast || fail) stop_singing();
9963
9964                         if (cast)
9965                         {
9966                                 if (!get_aim_dir(&dir)) return NULL;
9967
9968                                 fire_beam(GF_SOUND, dir, damroll(dice, sides));
9969                         }
9970                 }
9971                 break;
9972
9973         case 23:
9974 #ifdef JP
9975                 if (name) return "¤â¤¦°ì¤Ä¤ÎÀ¤³¦";
9976                 if (desc) return "¸½ºß¤Î³¬¤òºÆ¹½À®¤¹¤ë¡£";
9977 #else
9978                 if (name) return "Ambarkanta";
9979                 if (desc) return "Recreates current dungeon level.";
9980 #endif
9981     
9982                 {
9983                         int base = 15;
9984                         int sides = 20;
9985
9986                         if (info) return info_delay(base, sides);
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("You sing of the primeval shaping of Middle-earth...");
9997 #endif
9998
9999                                 alter_reality();
10000                         }
10001                 }
10002                 break;
10003
10004         case 24:
10005 #ifdef JP
10006                 if (name) return "Ç˲õ¤ÎÀûΧ";
10007                 if (desc) return "¼þ°Ï¤Î¥À¥ó¥¸¥ç¥ó¤òÍɤ餷¡¢ÊɤȾ²¤ò¥é¥ó¥À¥à¤ËÆþ¤ìÊѤ¨¤ë¡£";
10008 #else
10009                 if (name) return "Wrecking Pattern";
10010                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
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 weave a pattern of sounds to contort and shatter...");
10022 #endif
10023                         start_singing(spell, MUSIC_QUAKE);
10024                 }
10025
10026                 {
10027                         int rad = 10;
10028
10029                         if (info) return info_radius(rad);
10030
10031                         if (cont)
10032                         {
10033                                 earthquake(py, px, 10);
10034                         }
10035                 }
10036
10037                 break;
10038
10039
10040         case 25:
10041 #ifdef JP
10042                 if (name) return "ÄäÂڤβÎ";
10043                 if (desc) return "»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤òËãá㤵¤»¤è¤¦¤È¤¹¤ë¡£Äñ¹³¤µ¤ì¤ë¤È̵¸ú¡£";
10044 #else
10045                 if (name) return "Stationary Shriek";
10046                 if (desc) return "Attempts to freeze all monsters in sight.";
10047 #endif
10048     
10049                 /* Stop singing before start another */
10050                 if (cast || fail) stop_singing();
10051
10052                 if (cast)
10053                 {
10054 #ifdef JP
10055                         msg_print("¤æ¤Ã¤¯¤ê¤È¤·¤¿¥á¥í¥Ç¥£¤òÁդǻϤ᤿¡¥¡¥¡¥");
10056 #else
10057                         msg_print("You weave a very slow pattern which is almost likely to stop...");
10058 #endif
10059                         start_singing(spell, MUSIC_STASIS);
10060                 }
10061
10062                 {
10063                         int power = plev * 4;
10064
10065                         if (info) return info_power(power);
10066
10067                         if (cont)
10068                         {
10069                                 stasis_monsters(power);
10070                         }
10071                 }
10072
10073                 break;
10074
10075         case 26:
10076 #ifdef JP
10077                 if (name) return "¼é¤ê¤Î²Î";
10078                 if (desc) return "¼«Ê¬¤Î¤¤¤ë¾²¤Î¾å¤Ë¡¢¥â¥ó¥¹¥¿¡¼¤¬Ä̤êÈ´¤±¤¿¤ê¾¤´­¤µ¤ì¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤ë¥ë¡¼¥ó¤òÉÁ¤¯¡£";
10079 #else
10080                 if (name) return "Endurance";
10081                 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.";
10082 #endif
10083     
10084                 {
10085                         /* Stop singing before start another */
10086                         if (cast || fail) stop_singing();
10087
10088                         if (cast)
10089                         {
10090 #ifdef JP
10091                                 msg_print("²Î¤¬¿ÀÀ»¤Ê¾ì¤òºî¤ê½Ð¤·¤¿¡¥¡¥¡¥");
10092 #else
10093                                 msg_print("The holy power of the Music is creating sacred field...");
10094 #endif
10095
10096                                 warding_glyph();
10097                         }
10098                 }
10099                 break;
10100
10101         case 27:
10102 #ifdef JP
10103                 if (name) return "±Ñͺ¤Î»í";
10104                 if (desc) return "²Ã®¤·¡¢¥Ò¡¼¥í¡¼µ¤Ê¬¤Ë¤Ê¤ê¡¢»ë³¦Æâ¤ÎÁ´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10105 #else
10106                 if (name) return "The Hero's Poem";
10107                 if (desc) return "Hastes you. Gives heroism. Damages all monsters in sight.";
10108 #endif
10109     
10110                 /* Stop singing before start another */
10111                 if (cast || fail) stop_singing();
10112
10113                 if (cast)
10114                 {
10115 #ifdef JP
10116                         msg_print("±Ñͺ¤Î²Î¤ò¸ý¤º¤µ¤ó¤À¡¥¡¥¡¥");
10117 #else
10118                         msg_print("You chant a powerful, heroic call to arms...");
10119 #endif
10120                         (void)hp_player(10);
10121                         (void)set_afraid(0);
10122
10123                         /* Recalculate hitpoints */
10124                         p_ptr->update |= (PU_HP);
10125
10126                         start_singing(spell, MUSIC_SHERO);
10127                 }
10128
10129                 if (stop)
10130                 {
10131                         if (!p_ptr->hero)
10132                         {
10133 #ifdef JP
10134                                 msg_print("¥Ò¡¼¥í¡¼¤Îµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
10135 #else
10136                                 msg_print("The heroism wears off.");
10137 #endif
10138                                 /* Recalculate hitpoints */
10139                                 p_ptr->update |= (PU_HP);
10140                         }
10141
10142                         if (!p_ptr->fast)
10143                         {
10144 #ifdef JP
10145                                 msg_print("Æ°¤­¤ÎÁÇÁᤵ¤¬¤Ê¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£");
10146 #else
10147                                 msg_print("You feel yourself slow down.");
10148 #endif
10149                         }
10150                 }
10151
10152                 {
10153                         int dice = 1;
10154                         int sides = plev * 3;
10155
10156                         if (info) return info_damage(dice, sides, 0);
10157
10158                         if (cont)
10159                         {
10160                                 dispel_monsters(damroll(dice, sides));
10161                         }
10162                 }
10163                 break;
10164
10165         case 28:
10166 #ifdef JP
10167                 if (name) return "¥ä¥ô¥¡¥ó¥Ê¤Î½õ¤±";
10168                 if (desc) return "¶¯ÎϤʲóÉü¤Î²Î¤Ç¡¢Éé½ý¤ÈÛ¯Û°¾õÂÖ¤âÁ´²÷¤¹¤ë¡£";
10169 #else
10170                 if (name) return "Relief of Yavanna";
10171                 if (desc) return "Powerful healing song. Also heals cut and stun completely.";
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("Life flows through you as you sing the song...");
10183 #endif
10184                         start_singing(spell, MUSIC_H_LIFE);
10185                 }
10186
10187                 {
10188                         int dice = 15;
10189                         int sides = 10;
10190
10191                         if (info) return info_heal(dice, sides, 0);
10192
10193                         if (cont)
10194                         {
10195                                 hp_player(damroll(dice, sides));
10196                                 set_stun(0);
10197                                 set_cut(0);
10198                         }
10199                 }
10200
10201                 break;
10202
10203         case 29:
10204 #ifdef JP
10205                 if (name) return "ºÆÀ¸¤Î²Î";
10206                 if (desc) return "¤¹¤Ù¤Æ¤Î¥¹¥Æ¡¼¥¿¥¹¤È·Ð¸³Ãͤò²óÉü¤¹¤ë¡£";
10207 #else
10208                 if (name) return "Goddess' rebirth";
10209                 if (desc) return "Restores all stats and experience.";
10210 #endif
10211     
10212                 {
10213                         /* Stop singing before start another */
10214                         if (cast || fail) stop_singing();
10215
10216                         if (cast)
10217                         {
10218 #ifdef JP
10219                                 msg_print("°Å¹õ¤ÎÃæ¤Ë¸÷¤ÈÈþ¤ò¤Õ¤ê¤Þ¤¤¤¿¡£ÂΤ¬¸µ¤Î³èÎϤò¼è¤êÌᤷ¤¿¡£");
10220 #else
10221                                 msg_print("You strewed light and beauty in the dark as you sing. You feel refreshed.");
10222 #endif
10223                                 (void)do_res_stat(A_STR);
10224                                 (void)do_res_stat(A_INT);
10225                                 (void)do_res_stat(A_WIS);
10226                                 (void)do_res_stat(A_DEX);
10227                                 (void)do_res_stat(A_CON);
10228                                 (void)do_res_stat(A_CHR);
10229                                 (void)restore_level();
10230                         }
10231                 }
10232                 break;
10233
10234         case 30:
10235 #ifdef JP
10236                 if (name) return "¥µ¥¦¥í¥ó¤ÎËâ½Ñ";
10237                 if (desc) return "Èó¾ï¤Ë¶¯ÎϤǤ´¤¯¾®¤µ¤¤¹ì²»¤Îµå¤òÊü¤Ä¡£";
10238 #else
10239                 if (name) return "Wizardry of Sauron";
10240                 if (desc) return "Fires an extremely powerful tiny ball of sound.";
10241 #endif
10242     
10243                 {
10244                         int dice = 50 + plev;
10245                         int sides = 10;
10246                         int rad = 0;
10247
10248                         if (info) return info_damage(dice, sides, 0);
10249
10250                         /* Stop singing before start another */
10251                         if (cast || fail) stop_singing();
10252
10253                         if (cast)
10254                         {
10255                                 if (!get_aim_dir(&dir)) return NULL;
10256
10257                                 fire_ball(GF_SOUND, dir, damroll(dice, sides), rad);
10258                         }
10259                 }
10260                 break;
10261
10262         case 31:
10263 #ifdef JP
10264                 if (name) return "¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤ÎÄ©Àï";
10265                 if (desc) return "¥À¥á¡¼¥¸¤ò¼õ¤±¤Ê¤¯¤Ê¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
10266 #else
10267                 if (name) return "Fingolfin's Challenge";
10268                 if (desc) return "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks.";
10269 #endif
10270     
10271                 /* Stop singing before start another */
10272                 if (cast || fail) stop_singing();
10273
10274                 if (cast)
10275                 {
10276 #ifdef JP
10277                                 msg_print("¥Õ¥£¥ó¥´¥ë¥Õ¥£¥ó¤Î̽²¦¤Ø¤ÎÄ©Àï¤ò²Î¤Ã¤¿¡¥¡¥¡¥");
10278 #else
10279                                 msg_print("You recall the valor of Fingolfin's challenge to the Dark Lord...");
10280 #endif
10281
10282                                 /* Redraw map */
10283                                 p_ptr->redraw |= (PR_MAP);
10284                 
10285                                 /* Update monsters */
10286                                 p_ptr->update |= (PU_MONSTERS);
10287                 
10288                                 /* Window stuff */
10289                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
10290
10291                                 start_singing(spell, MUSIC_INVULN);
10292                 }
10293
10294                 if (stop)
10295                 {
10296                         if (!p_ptr->invuln)
10297                         {
10298 #ifdef JP
10299                                 msg_print("̵Ũ¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤¿¡£");
10300 #else
10301                                 msg_print("The invulnerability wears off.");
10302 #endif
10303                                 /* Redraw map */
10304                                 p_ptr->redraw |= (PR_MAP);
10305
10306                                 /* Update monsters */
10307                                 p_ptr->update |= (PU_MONSTERS);
10308
10309                                 /* Window stuff */
10310                                 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
10311                         }
10312                 }
10313
10314                 break;
10315         }
10316
10317         return "";
10318 }
10319
10320 /*!
10321  * @brief ·õ½Ñ¤Î³Æ½èÍý¤ò¹Ô¤¦
10322  * @param spell ·õ½ÑID
10323  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_CAST)
10324  * @return SPELL_NAME / SPELL_DESC »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST»þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
10325  */
10326 static cptr do_hissatsu_spell(int spell, int mode)
10327 {
10328         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
10329         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
10330         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
10331
10332         int dir;
10333         int plev = p_ptr->lev;
10334
10335         switch (spell)
10336         {
10337         case 0:
10338 #ifdef JP
10339                 if (name) return "ÈôÈÓ¹Ë";
10340                 if (desc) return "2¥Þ¥¹Î¥¤ì¤¿¤È¤³¤í¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¡£";
10341 #else
10342                 if (name) return "Tobi-Izuna";
10343                 if (desc) return "Attacks a two squares distant monster.";
10344 #endif
10345     
10346                 if (cast)
10347                 {
10348                         project_length = 2;
10349                         if (!get_aim_dir(&dir)) return NULL;
10350
10351                         project_hook(GF_ATTACK, dir, HISSATSU_2, PROJECT_STOP | PROJECT_KILL);
10352                 }
10353                 break;
10354
10355         case 1:
10356 #ifdef JP
10357                 if (name) return "¸Þ·î±«»Â¤ê";
10358                 if (desc) return "3Êý¸þ¤ËÂФ·¤Æ¹¶·â¤¹¤ë¡£";
10359 #else
10360                 if (name) return "3-Way Attack";
10361                 if (desc) return "Attacks in 3 directions in one time.";
10362 #endif
10363     
10364                 if (cast)
10365                 {
10366                         int cdir;
10367                         int y, x;
10368
10369                         if (!get_rep_dir2(&dir)) return NULL;
10370                         if (dir == 5) return NULL;
10371
10372                         for (cdir = 0;cdir < 8; cdir++)
10373                         {
10374                                 if (cdd[cdir] == dir) break;
10375                         }
10376
10377                         if (cdir == 8) return NULL;
10378
10379                         y = py + ddy_cdd[cdir];
10380                         x = px + ddx_cdd[cdir];
10381                         if (cave[y][x].m_idx)
10382                                 py_attack(y, x, 0);
10383                         else
10384 #ifdef JP
10385                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10386 #else
10387                                 msg_print("You attack the empty air.");
10388 #endif
10389                         y = py + ddy_cdd[(cdir + 7) % 8];
10390                         x = px + ddx_cdd[(cdir + 7) % 8];
10391                         if (cave[y][x].m_idx)
10392                                 py_attack(y, x, 0);
10393                         else
10394 #ifdef JP
10395                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10396 #else
10397                                 msg_print("You attack the empty air.");
10398 #endif
10399                         y = py + ddy_cdd[(cdir + 1) % 8];
10400                         x = px + ddx_cdd[(cdir + 1) % 8];
10401                         if (cave[y][x].m_idx)
10402                                 py_attack(y, x, 0);
10403                         else
10404 #ifdef JP
10405                                 msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
10406 #else
10407                                 msg_print("You attack the empty air.");
10408 #endif
10409                 }
10410                 break;
10411
10412         case 2:
10413 #ifdef JP
10414                 if (name) return "¥Ö¡¼¥á¥é¥ó";
10415                 if (desc) return "Éð´ï¤ò¼ê¸µ¤ËÌá¤Ã¤Æ¤¯¤ë¤è¤¦¤ËÅꤲ¤ë¡£Ìá¤Ã¤Æ¤³¤Ê¤¤¤³¤È¤â¤¢¤ë¡£";
10416 #else
10417                 if (name) return "Boomerang";
10418                 if (desc) return "Throws current weapon. And it'll return to your hand unless failed.";
10419 #endif
10420     
10421                 if (cast)
10422                 {
10423                         if (!do_cmd_throw_aux(1, TRUE, -1)) return NULL;
10424                 }
10425                 break;
10426
10427         case 3:
10428 #ifdef JP
10429                 if (name) return "±ëÎî";
10430                 if (desc) return "²Ð±êÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10431 #else
10432                 if (name) return "Burning Strike";
10433                 if (desc) return "Attacks a monster with more damage unless it has resistance to fire.";
10434 #endif
10435     
10436                 if (cast)
10437                 {
10438                         int y, x;
10439
10440                         if (!get_rep_dir2(&dir)) return NULL;
10441                         if (dir == 5) return NULL;
10442
10443                         y = py + ddy[dir];
10444                         x = px + ddx[dir];
10445
10446                         if (cave[y][x].m_idx)
10447                                 py_attack(y, x, HISSATSU_FIRE);
10448                         else
10449                         {
10450 #ifdef JP
10451                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10452 #else
10453                                 msg_print("There is no monster.");
10454 #endif
10455                                 return NULL;
10456                         }
10457                 }
10458                 break;
10459
10460         case 4:
10461 #ifdef JP
10462                 if (name) return "»¦µ¤´¶ÃÎ";
10463                 if (desc) return "¶á¤¯¤Î»×¹Í¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
10464 #else
10465                 if (name) return "Detect Ferocity";
10466                 if (desc) return "Detects all monsters except mindless in your vicinity.";
10467 #endif
10468     
10469                 if (cast)
10470                 {
10471                         detect_monsters_mind(DETECT_RAD_DEFAULT);
10472                 }
10473                 break;
10474
10475         case 5:
10476 #ifdef JP
10477                 if (name) return "¤ß¤ÍÂǤÁ";
10478                 if (desc) return "Áê¼ê¤Ë¥À¥á¡¼¥¸¤òÍ¿¤¨¤Ê¤¤¤¬¡¢Û¯Û°¤È¤µ¤»¤ë¡£";
10479 #else
10480                 if (name) return "Strike to Stun";
10481                 if (desc) return "Attempts to stun a monster in the adjacent.";
10482 #endif
10483     
10484                 if (cast)
10485                 {
10486                         int y, x;
10487
10488                         if (!get_rep_dir2(&dir)) return NULL;
10489                         if (dir == 5) return NULL;
10490
10491                         y = py + ddy[dir];
10492                         x = px + ddx[dir];
10493
10494                         if (cave[y][x].m_idx)
10495                                 py_attack(y, x, HISSATSU_MINEUCHI);
10496                         else
10497                         {
10498 #ifdef JP
10499                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10500 #else
10501                                 msg_print("There is no monster.");
10502 #endif
10503                                 return NULL;
10504                         }
10505                 }
10506                 break;
10507
10508         case 6:
10509 #ifdef JP
10510                 if (name) return "¥«¥¦¥ó¥¿¡¼";
10511                 if (desc) return "Áê¼ê¤Ë¹¶·â¤µ¤ì¤¿¤È¤­¤ËÈ¿·â¤¹¤ë¡£È¿·â¤¹¤ë¤¿¤Ó¤ËMP¤ò¾ÃÈñ¡£";
10512 #else
10513                 if (name) return "Counter";
10514                 if (desc) return "Prepares to counterattack. When attack by a monster, strikes back using SP each time.";
10515 #endif
10516     
10517                 if (cast)
10518                 {
10519                         if (p_ptr->riding)
10520                         {
10521 #ifdef JP
10522                                 msg_print("¾èÇÏÃæ¤Ë¤Ï̵Íý¤À¡£");
10523 #else
10524                                 msg_print("You cannot do it when riding.");
10525 #endif
10526                                 return NULL;
10527                         }
10528 #ifdef JP
10529                         msg_print("Áê¼ê¤Î¹¶·â¤ËÂФ·¤Æ¿È¹½¤¨¤¿¡£");
10530 #else
10531                         msg_print("You prepare to counter blow.");
10532 #endif
10533                         p_ptr->counter = TRUE;
10534                 }
10535                 break;
10536
10537         case 7:
10538 #ifdef JP
10539                 if (name) return "ʧ¤¤È´¤±";
10540                 if (desc) return "¹¶·â¤·¤¿¸å¡¢È¿ÂЦ¤ËÈ´¤±¤ë¡£";
10541 #else
10542                 if (name) return "Harainuke";
10543                 if (desc) return "Attacks monster with your weapons normally, then move through counter side of the monster.";
10544 #endif
10545     
10546                 if (cast)
10547                 {
10548                         int y, x;
10549
10550                         if (p_ptr->riding)
10551                         {
10552 #ifdef JP
10553                                 msg_print("¾èÇÏÃæ¤Ë¤Ï̵Íý¤À¡£");
10554 #else
10555                                 msg_print("You cannot do it when riding.");
10556 #endif
10557                                 return NULL;
10558                         }
10559         
10560                         if (!get_rep_dir2(&dir)) return NULL;
10561         
10562                         if (dir == 5) return NULL;
10563                         y = py + ddy[dir];
10564                         x = px + ddx[dir];
10565         
10566                         if (!cave[y][x].m_idx)
10567                         {
10568 #ifdef JP
10569                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10570 #else
10571                                 msg_print("There is no monster.");
10572 #endif
10573                                 return NULL;
10574                         }
10575         
10576                         py_attack(y, x, 0);
10577         
10578                         if (!player_can_enter(cave[y][x].feat, 0) || is_trap(cave[y][x].feat))
10579                                 break;
10580         
10581                         y += ddy[dir];
10582                         x += ddx[dir];
10583         
10584                         if (player_can_enter(cave[y][x].feat, 0) && !is_trap(cave[y][x].feat) && !cave[y][x].m_idx)
10585                         {
10586                                 msg_print(NULL);
10587         
10588                                 /* Move the player */
10589                                 (void)move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
10590                         }
10591                 }
10592                 break;
10593
10594         case 8:
10595 #ifdef JP
10596                 if (name) return "¥µ¡¼¥Ú¥ó¥Ä¥¿¥ó";
10597                 if (desc) return "ÆÇÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10598 #else
10599                 if (name) return "Serpent's Tongue";
10600                 if (desc) return "Attacks a monster with more damage unless it has resistance to poison.";
10601 #endif
10602     
10603                 if (cast)
10604                 {
10605                         int y, x;
10606
10607                         if (!get_rep_dir2(&dir)) return NULL;
10608                         if (dir == 5) return NULL;
10609
10610                         y = py + ddy[dir];
10611                         x = px + ddx[dir];
10612
10613                         if (cave[y][x].m_idx)
10614                                 py_attack(y, x, HISSATSU_POISON);
10615                         else
10616                         {
10617 #ifdef JP
10618                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10619 #else
10620                                 msg_print("There is no monster.");
10621 #endif
10622                                 return NULL;
10623                         }
10624                 }
10625                 break;
10626
10627         case 9:
10628 #ifdef JP
10629                 if (name) return "»ÂËâ·õÆõ¤ÎÂÀÅá";
10630                 if (desc) return "À¸Ì¿¤Î¤Ê¤¤¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤¬¡¢Â¾¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤ÏÁ´¤¯¸ú²Ì¤¬¤Ê¤¤¡£";
10631 #else
10632                 if (name) return "Zammaken";
10633                 if (desc) return "Attacks an evil unliving monster with great damage. No effect to other  monsters.";
10634 #endif
10635     
10636                 if (cast)
10637                 {
10638                         int y, x;
10639
10640                         if (!get_rep_dir2(&dir)) return NULL;
10641                         if (dir == 5) return NULL;
10642
10643                         y = py + ddy[dir];
10644                         x = px + ddx[dir];
10645
10646                         if (cave[y][x].m_idx)
10647                                 py_attack(y, x, HISSATSU_ZANMA);
10648                         else
10649                         {
10650 #ifdef JP
10651                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10652 #else
10653                                 msg_print("There is no monster.");
10654 #endif
10655                                 return NULL;
10656                         }
10657                 }
10658                 break;
10659
10660         case 10:
10661 #ifdef JP
10662                 if (name) return "ÎöÉ÷·õ";
10663                 if (desc) return "¹¶·â¤·¤¿Áê¼ê¤ò¸åÊý¤Ø¿á¤­Èô¤Ð¤¹¡£";
10664 #else
10665                 if (name) return "Wind Blast";
10666                 if (desc) return "Attacks an adjacent monster, and blow it away.";
10667 #endif
10668     
10669                 if (cast)
10670                 {
10671                         int y, x;
10672
10673                         if (!get_rep_dir2(&dir)) return NULL;
10674                         if (dir == 5) return NULL;
10675
10676                         y = py + ddy[dir];
10677                         x = px + ddx[dir];
10678
10679                         if (cave[y][x].m_idx)
10680                                 py_attack(y, x, 0);
10681                         else
10682                         {
10683 #ifdef JP
10684                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10685 #else
10686                                 msg_print("There is no monster.");
10687 #endif
10688                                 return NULL;
10689                         }
10690                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
10691                         {
10692                                 return "";
10693                         }
10694                         if (cave[y][x].m_idx)
10695                         {
10696                                 int i;
10697                                 int ty = y, tx = x;
10698                                 int oy = y, ox = x;
10699                                 int m_idx = cave[y][x].m_idx;
10700                                 monster_type *m_ptr = &m_list[m_idx];
10701                                 char m_name[80];
10702         
10703                                 monster_desc(m_name, m_ptr, 0);
10704         
10705                                 for (i = 0; i < 5; i++)
10706                                 {
10707                                         y += ddy[dir];
10708                                         x += ddx[dir];
10709                                         if (cave_empty_bold(y, x))
10710                                         {
10711                                                 ty = y;
10712                                                 tx = x;
10713                                         }
10714                                         else break;
10715                                 }
10716                                 if ((ty != oy) || (tx != ox))
10717                                 {
10718 #ifdef JP
10719                                         msg_format("%s¤ò¿á¤­Èô¤Ð¤·¤¿¡ª", m_name);
10720 #else
10721                                         msg_format("You blow %s away!", m_name);
10722 #endif
10723                                         cave[oy][ox].m_idx = 0;
10724                                         cave[ty][tx].m_idx = m_idx;
10725                                         m_ptr->fy = ty;
10726                                         m_ptr->fx = tx;
10727         
10728                                         update_mon(m_idx, TRUE);
10729                                         lite_spot(oy, ox);
10730                                         lite_spot(ty, tx);
10731         
10732                                         if (r_info[m_ptr->r_idx].flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
10733                                                 p_ptr->update |= (PU_MON_LITE);
10734                                 }
10735                         }
10736                 }
10737                 break;
10738
10739         case 11:
10740 #ifdef JP
10741                 if (name) return "Åá¾¢¤ÎÌÜÍø¤­";
10742                 if (desc) return "Éð´ï¡¦Ëɶñ¤ò1¤Ä¼±Ê̤¹¤ë¡£¥ì¥Ù¥ë45°Ê¾å¤ÇÉð´ï¡¦Ëɶñ¤ÎǽÎϤò´°Á´¤ËÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£";
10743 #else
10744                 if (name) return "Judge";
10745                 if (desc) return "Identifies a weapon or armor. Or *identifies* these at level 45.";
10746 #endif
10747     
10748                 if (cast)
10749                 {
10750                         if (plev > 44)
10751                         {
10752                                 if (!identify_fully(TRUE)) return NULL;
10753                         }
10754                         else
10755                         {
10756                                 if (!ident_spell(TRUE)) return NULL;
10757                         }
10758                 }
10759                 break;
10760
10761         case 12:
10762 #ifdef JP
10763                 if (name) return "ÇË´ä»Â";
10764                 if (desc) return "´ä¤ò²õ¤·¡¢´äÀзϤΥâ¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10765 #else
10766                 if (name) return "Rock Smash";
10767                 if (desc) return "Breaks rock. Or greatly damage a monster made by rocks.";
10768 #endif
10769     
10770                 if (cast)
10771                 {
10772                         int y, x;
10773
10774                         if (!get_rep_dir2(&dir)) return NULL;
10775                         if (dir == 5) return NULL;
10776
10777                         y = py + ddy[dir];
10778                         x = px + ddx[dir];
10779
10780                         if (cave[y][x].m_idx)
10781                                 py_attack(y, x, HISSATSU_HAGAN);
10782         
10783                         if (!cave_have_flag_bold(y, x, FF_HURT_ROCK)) break;
10784         
10785                         /* Destroy the feature */
10786                         cave_alter_feat(y, x, FF_HURT_ROCK);
10787         
10788                         /* Update some things */
10789                         p_ptr->update |= (PU_FLOW);
10790                 }
10791                 break;
10792
10793         case 13:
10794 #ifdef JP
10795                 if (name) return "Íð¤ìÀã·î²Ö";
10796                 if (desc) return "¹¶·â²ó¿ô¤¬Áý¤¨¡¢Î䵤ÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÂç¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10797 #else
10798                 if (name) return "Midare-Setsugekka";
10799                 if (desc) return "Attacks a monster with increased number of attacks and more damage unless it has resistance to cold.";
10800 #endif
10801     
10802                 if (cast)
10803                 {
10804                         int y, x;
10805
10806                         if (!get_rep_dir2(&dir)) return NULL;
10807                         if (dir == 5) return NULL;
10808
10809                         y = py + ddy[dir];
10810                         x = px + ddx[dir];
10811
10812                         if (cave[y][x].m_idx)
10813                                 py_attack(y, x, HISSATSU_COLD);
10814                         else
10815                         {
10816 #ifdef JP
10817                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10818 #else
10819                                 msg_print("There is no monster.");
10820 #endif
10821                                 return NULL;
10822                         }
10823                 }
10824                 break;
10825
10826         case 14:
10827 #ifdef JP
10828                 if (name) return "µÞ½êÆͤ­";
10829                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ò°ì·â¤ÇÅݤ¹¹¶·â¤ò·«¤ê½Ð¤¹¡£¼ºÇÔ¤¹¤ë¤È1ÅÀ¤·¤«¥À¥á¡¼¥¸¤òÍ¿¤¨¤é¤ì¤Ê¤¤¡£";
10830 #else
10831                 if (name) return "Spot Aiming";
10832                 if (desc) return "Attempts to kill a monster instantly. If failed cause only 1HP of damage.";
10833 #endif
10834     
10835                 if (cast)
10836                 {
10837                         int y, x;
10838
10839                         if (!get_rep_dir2(&dir)) return NULL;
10840                         if (dir == 5) return NULL;
10841
10842                         y = py + ddy[dir];
10843                         x = px + ddx[dir];
10844
10845                         if (cave[y][x].m_idx)
10846                                 py_attack(y, x, HISSATSU_KYUSHO);
10847                         else
10848                         {
10849 #ifdef JP
10850                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10851 #else
10852                                 msg_print("There is no monster.");
10853 #endif
10854                                 return NULL;
10855                         }
10856                 }
10857                 break;
10858
10859         case 15:
10860 #ifdef JP
10861                 if (name) return "Ëâ¿À»Â¤ê";
10862                 if (desc) return "²ñ¿´¤Î°ì·â¤Ç¹¶·â¤¹¤ë¡£¹¶·â¤¬¤«¤ï¤µ¤ì¤ä¤¹¤¤¡£";
10863 #else
10864                 if (name) return "Majingiri";
10865                 if (desc) return "Attempts to attack with critical hit. But this attack is easy to evade for a monster.";
10866 #endif
10867     
10868                 if (cast)
10869                 {
10870                         int y, x;
10871
10872                         if (!get_rep_dir2(&dir)) return NULL;
10873                         if (dir == 5) return NULL;
10874
10875                         y = py + ddy[dir];
10876                         x = px + ddx[dir];
10877
10878                         if (cave[y][x].m_idx)
10879                                 py_attack(y, x, HISSATSU_MAJIN);
10880                         else
10881                         {
10882 #ifdef JP
10883                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10884 #else
10885                                 msg_print("There is no monster.");
10886 #endif
10887                                 return NULL;
10888                         }
10889                 }
10890                 break;
10891
10892         case 16:
10893 #ifdef JP
10894                 if (name) return "¼Î¤Æ¿È";
10895                 if (desc) return "¶¯ÎϤʹ¶·â¤ò·«¤ê½Ð¤¹¡£¼¡¤Î¥¿¡¼¥ó¤Þ¤Ç¤Î´Ö¡¢¿©¤é¤¦¥À¥á¡¼¥¸¤¬Áý¤¨¤ë¡£";
10896 #else
10897                 if (name) return "Desperate Attack";
10898                 if (desc) return "Attacks with all of your power. But all damages you take will be doubled for one turn.";
10899 #endif
10900     
10901                 if (cast)
10902                 {
10903                         int y, x;
10904
10905                         if (!get_rep_dir2(&dir)) return NULL;
10906                         if (dir == 5) return NULL;
10907
10908                         y = py + ddy[dir];
10909                         x = px + ddx[dir];
10910
10911                         if (cave[y][x].m_idx)
10912                                 py_attack(y, x, HISSATSU_SUTEMI);
10913                         else
10914                         {
10915 #ifdef JP
10916                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10917 #else
10918                                 msg_print("There is no monster.");
10919 #endif
10920                                 return NULL;
10921                         }
10922                         p_ptr->sutemi = TRUE;
10923                 }
10924                 break;
10925
10926         case 17:
10927 #ifdef JP
10928                 if (name) return "Íë·âÏÉÄÞ»Â";
10929                 if (desc) return "ÅÅ·âÂÑÀ­¤Î¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤ËÈó¾ï¤ËÂ礭¤¤¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
10930 #else
10931                 if (name) return "Lightning Eagle";
10932                 if (desc) return "Attacks a monster with more damage unless it has resistance to electricity.";
10933 #endif
10934     
10935                 if (cast)
10936                 {
10937                         int y, x;
10938
10939                         if (!get_rep_dir2(&dir)) return NULL;
10940                         if (dir == 5) return NULL;
10941
10942                         y = py + ddy[dir];
10943                         x = px + ddx[dir];
10944
10945                         if (cave[y][x].m_idx)
10946                                 py_attack(y, x, HISSATSU_ELEC);
10947                         else
10948                         {
10949 #ifdef JP
10950                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
10951 #else
10952                                 msg_print("There is no monster.");
10953 #endif
10954                                 return NULL;
10955                         }
10956                 }
10957                 break;
10958
10959         case 18:
10960 #ifdef JP
10961                 if (name) return "Æþ¿È";
10962                 if (desc) return "ÁÇÁ᤯Áê¼ê¤Ë¶á´ó¤ê¹¶·â¤¹¤ë¡£";
10963 #else
10964                 if (name) return "Rush Attack";
10965                 if (desc) return "Steps close to a monster and attacks at a time.";
10966 #endif
10967     
10968                 if (cast)
10969                 {
10970                         if (!rush_attack(NULL)) return NULL;
10971                 }
10972                 break;
10973
10974         case 19:
10975 #ifdef JP
10976                 if (name) return "ÀÖή±²";
10977                 if (desc) return "¼«Ê¬¼«¿È¤â½ý¤òºî¤ê¤Ä¤Ä¡¢¤½¤Î½ý¤¬¿¼¤¤¤Û¤ÉÂ礭¤¤°ÒÎϤÇÁ´Êý¸þ¤ÎŨ¤ò¹¶·â¤Ç¤­¤ë¡£À¸¤­¤Æ¤¤¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡£";
10978 #else
10979                 if (name) return "Bloody Maelstrom";
10980                 if (desc) return "Attacks all adjacent monsters with power corresponding to your cut status. Then increases your cut status. No effect to unliving monsters.";
10981 #endif
10982     
10983                 if (cast)
10984                 {
10985                         int y = 0, x = 0;
10986
10987                         cave_type       *c_ptr;
10988                         monster_type    *m_ptr;
10989         
10990                         if (p_ptr->cut < 300)
10991                                 set_cut(p_ptr->cut + 300);
10992                         else
10993                                 set_cut(p_ptr->cut * 2);
10994         
10995                         for (dir = 0; dir < 8; dir++)
10996                         {
10997                                 y = py + ddy_ddd[dir];
10998                                 x = px + ddx_ddd[dir];
10999                                 c_ptr = &cave[y][x];
11000         
11001                                 /* Get the monster */
11002                                 m_ptr = &m_list[c_ptr->m_idx];
11003         
11004                                 /* Hack -- attack monsters */
11005                                 if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
11006                                 {
11007                                         if (!monster_living(&r_info[m_ptr->r_idx]))
11008                                         {
11009                                                 char m_name[80];
11010         
11011                                                 monster_desc(m_name, m_ptr, 0);
11012 #ifdef JP
11013                                                 msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤¤¡ª", m_name);
11014 #else
11015                                                 msg_format("%s is unharmed!", m_name);
11016 #endif
11017                                         }
11018                                         else py_attack(y, x, HISSATSU_SEKIRYUKA);
11019                                 }
11020                         }
11021                 }
11022                 break;
11023
11024         case 20:
11025 #ifdef JP
11026                 if (name) return "·ã¿Ì·â";
11027                 if (desc) return "ÃϿ̤òµ¯¤³¤¹¡£";
11028 #else
11029                 if (name) return "Earthquake Blow";
11030                 if (desc) return "Shakes dungeon structure, and results in random swapping of floors and walls.";
11031 #endif
11032     
11033                 if (cast)
11034                 {
11035                         int y,x;
11036
11037                         if (!get_rep_dir2(&dir)) return NULL;
11038                         if (dir == 5) return NULL;
11039
11040                         y = py + ddy[dir];
11041                         x = px + ddx[dir];
11042
11043                         if (cave[y][x].m_idx)
11044                                 py_attack(y, x, HISSATSU_QUAKE);
11045                         else
11046                                 earthquake(py, px, 10);
11047                 }
11048                 break;
11049
11050         case 21:
11051 #ifdef JP
11052                 if (name) return "ÃÏÁö¤ê";
11053                 if (desc) return "¾×·âÇȤΥӡ¼¥à¤òÊü¤Ä¡£";
11054 #else
11055                 if (name) return "Crack";
11056                 if (desc) return "Fires a beam of shock wave.";
11057 #endif
11058     
11059                 if (cast)
11060                 {
11061                         int total_damage = 0, basedam, i;
11062                         u32b flgs[TR_FLAG_SIZE];
11063                         object_type *o_ptr;
11064                         if (!get_aim_dir(&dir)) return NULL;
11065 #ifdef JP
11066                         msg_print("Éð´ï¤òÂ礭¤¯¿¶¤ê²¼¤í¤·¤¿¡£");
11067 #else
11068                         msg_print("You swing your weapon downward.");
11069 #endif
11070                         for (i = 0; i < 2; i++)
11071                         {
11072                                 int damage;
11073         
11074                                 if (!buki_motteruka(INVEN_RARM+i)) break;
11075                                 o_ptr = &inventory[INVEN_RARM+i];
11076                                 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
11077                                 damage = o_ptr->to_d * 100;
11078                                 object_flags(o_ptr, flgs);
11079                                 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
11080                                 {
11081                                         /* vorpal blade */
11082                                         basedam *= 5;
11083                                         basedam /= 3;
11084                                 }
11085                                 else if (have_flag(flgs, TR_VORPAL))
11086                                 {
11087                                         /* vorpal flag only */
11088                                         basedam *= 11;
11089                                         basedam /= 9;
11090                                 }
11091                                 damage += basedam;
11092                                 damage *= p_ptr->num_blow[i];
11093                                 total_damage += damage / 200;
11094                                 if (i) total_damage = total_damage*7/10;
11095                         }
11096                         fire_beam(GF_FORCE, dir, total_damage);
11097                 }
11098                 break;
11099
11100         case 22:
11101 #ifdef JP
11102                 if (name) return "µ¤Ç÷¤Îͺ¶«¤Ó";
11103                 if (desc) return "»ë³¦Æâ¤ÎÁ´¥â¥ó¥¹¥¿¡¼¤ËÂФ·¤Æ¹ì²»¤Î¹¶·â¤ò¹Ô¤¦¡£¤µ¤é¤Ë¡¢¶á¤¯¤Ë¤¤¤ë¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤ë¡£";
11104 #else
11105                 if (name) return "War Cry";
11106                 if (desc) return "Damages all monsters in sight with sound. Aggravate nearby monsters.";
11107 #endif
11108     
11109                 if (cast)
11110                 {
11111 #ifdef JP
11112                         msg_print("ͺ¶«¤Ó¤ò¤¢¤²¤¿¡ª");
11113 #else
11114                         msg_print("You roar out!");
11115 #endif
11116                         project_hack(GF_SOUND, randint1(plev * 3));
11117                         aggravate_monsters(0);
11118                 }
11119                 break;
11120
11121         case 23:
11122 #ifdef JP
11123                 if (name) return "̵Áл°ÃÊ";
11124                 if (desc) return "¶¯ÎϤÊ3Ãʹ¶·â¤ò·«¤ê½Ð¤¹¡£";
11125 #else
11126                 if (name) return "Musou-Sandan";
11127                 if (desc) return "Attacks with powerful 3 strikes.";
11128 #endif
11129     
11130                 if (cast)
11131                 {
11132                         int i;
11133
11134                         if (!get_rep_dir2(&dir)) return NULL;
11135                         if (dir == 5) return NULL;
11136
11137                         for (i = 0; i < 3; i++)
11138                         {
11139                                 int y, x;
11140                                 int ny, nx;
11141                                 int m_idx;
11142                                 cave_type *c_ptr;
11143                                 monster_type *m_ptr;
11144         
11145                                 y = py + ddy[dir];
11146                                 x = px + ddx[dir];
11147                                 c_ptr = &cave[y][x];
11148         
11149                                 if (c_ptr->m_idx)
11150                                         py_attack(y, x, HISSATSU_3DAN);
11151                                 else
11152                                 {
11153 #ifdef JP
11154                                         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11155 #else
11156                                         msg_print("There is no monster.");
11157 #endif
11158                                         return NULL;
11159                                 }
11160         
11161                                 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
11162                                 {
11163                                         return "";
11164                                 }
11165         
11166                                 /* Monster is dead? */
11167                                 if (!c_ptr->m_idx) break;
11168         
11169                                 ny = y + ddy[dir];
11170                                 nx = x + ddx[dir];
11171                                 m_idx = c_ptr->m_idx;
11172                                 m_ptr = &m_list[m_idx];
11173         
11174                                 /* Monster cannot move back? */
11175                                 if (!monster_can_enter(ny, nx, &r_info[m_ptr->r_idx], 0))
11176                                 {
11177                                         /* -more- */
11178                                         if (i < 2) msg_print(NULL);
11179                                         continue;
11180                                 }
11181         
11182                                 c_ptr->m_idx = 0;
11183                                 cave[ny][nx].m_idx = m_idx;
11184                                 m_ptr->fy = ny;
11185                                 m_ptr->fx = nx;
11186         
11187                                 update_mon(m_idx, TRUE);
11188         
11189                                 /* Redraw the old spot */
11190                                 lite_spot(y, x);
11191         
11192                                 /* Redraw the new spot */
11193                                 lite_spot(ny, nx);
11194         
11195                                 /* Player can move forward? */
11196                                 if (player_can_enter(c_ptr->feat, 0))
11197                                 {
11198                                         /* Move the player */
11199                                         if (!move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP)) break;
11200                                 }
11201                                 else
11202                                 {
11203                                         break;
11204                                 }
11205
11206                                 /* -more- */
11207                                 if (i < 2) msg_print(NULL);
11208                         }
11209                 }
11210                 break;
11211
11212         case 24:
11213 #ifdef JP
11214                 if (name) return "µÛ·ìµ´¤Î²ç";
11215                 if (desc) return "¹¶·â¤·¤¿Áê¼ê¤ÎÂÎÎϤòµÛ¤¤¤È¤ê¡¢¼«Ê¬¤ÎÂÎÎϤò²óÉü¤µ¤»¤ë¡£À¸Ì¿¤ò»ý¤¿¤Ê¤¤¥â¥ó¥¹¥¿¡¼¤Ë¤ÏÄ̤¸¤Ê¤¤¡£";
11216 #else
11217                 if (name) return "Vampire's Fang";
11218                 if (desc) return "Attacks with vampiric strikes which absorbs HP from a monster and gives them to you. No effect to unliving monsters.";
11219 #endif
11220     
11221                 if (cast)
11222                 {
11223                         int y, x;
11224
11225                         if (!get_rep_dir2(&dir)) return NULL;
11226                         if (dir == 5) return NULL;
11227
11228                         y = py + ddy[dir];
11229                         x = px + ddx[dir];
11230
11231                         if (cave[y][x].m_idx)
11232                                 py_attack(y, x, HISSATSU_DRAIN);
11233                         else
11234                         {
11235 #ifdef JP
11236                                         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11237 #else
11238                                         msg_print("There is no monster.");
11239 #endif
11240                                 return NULL;
11241                         }
11242                 }
11243                 break;
11244
11245         case 25:
11246 #ifdef JP
11247                 if (name) return "¸¸ÏÇ";
11248                 if (desc) return "»ë³¦Æâ¤Îµ¯¤­¤Æ¤¤¤ëÁ´¥â¥ó¥¹¥¿¡¼¤ËÛ¯Û°¡¢º®Íð¡¢Ì²¤ê¤òÍ¿¤¨¤è¤¦¤È¤¹¤ë¡£";
11249 #else
11250                 if (name) return "Moon Dazzling";
11251                 if (desc) return "Attempts to stun, confuse and sleep all waking monsters.";
11252 #endif
11253     
11254                 if (cast)
11255                 {
11256 #ifdef JP
11257                         msg_print("Éð´ï¤òÉÔµ¬Â§¤ËÍɤ餷¤¿¡¥¡¥¡¥");
11258 #else
11259                         msg_print("You irregularly wave your weapon...");
11260 #endif
11261                         project_hack(GF_ENGETSU, plev * 4);
11262                         project_hack(GF_ENGETSU, plev * 4);
11263                         project_hack(GF_ENGETSU, plev * 4);
11264                 }
11265                 break;
11266
11267         case 26:
11268 #ifdef JP
11269                 if (name) return "É´¿Í»Â¤ê";
11270                 if (desc) return "Ϣ³¤·¤ÆÆþ¿È¤Ç¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤¹¤ë¡£¹¶·â¤¹¤ë¤¿¤Ó¤ËMP¤ò¾ÃÈñ¡£MP¤¬¤Ê¤¯¤Ê¤ë¤«¡¢¥â¥ó¥¹¥¿¡¼¤òÅݤ»¤Ê¤«¤Ã¤¿¤éÉ´¿Í»Â¤ê¤Ï½ªÎ»¤¹¤ë¡£";
11271 #else
11272                 if (name) return "Hundred Slaughter";
11273                 if (desc) return "Performs a series of rush attacks. The series continues while killing each monster in a time and SP remains.";
11274 #endif
11275     
11276                 if (cast)
11277                 {
11278                         const int mana_cost_per_monster = 8;
11279                         bool is_new = TRUE;
11280                         bool mdeath;
11281
11282                         do
11283                         {
11284                                 if (!rush_attack(&mdeath)) break;
11285                                 if (is_new)
11286                                 {
11287                                         /* Reserve needed mana point */
11288                                         p_ptr->csp -= technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
11289                                         is_new = FALSE;
11290                                 }
11291                                 else
11292                                         p_ptr->csp -= mana_cost_per_monster;
11293
11294                                 if (!mdeath) break;
11295                                 command_dir = 0;
11296
11297                                 p_ptr->redraw |= PR_MANA;
11298                                 handle_stuff();
11299                         }
11300                         while (p_ptr->csp > mana_cost_per_monster);
11301
11302                         if (is_new) return NULL;
11303         
11304                         /* Restore reserved mana */
11305                         p_ptr->csp += technic_info[REALM_HISSATSU - MIN_TECHNIC][26].smana;
11306                 }
11307                 break;
11308
11309         case 27:
11310 #ifdef JP
11311                 if (name) return "Å·æÆζÁ®";
11312                 if (desc) return "»ë³¦Æâ¤Î¾ì½ê¤ò»ØÄꤷ¤Æ¡¢¤½¤Î¾ì½ê¤È¼«Ê¬¤Î´Ö¤Ë¤¤¤ëÁ´¥â¥ó¥¹¥¿¡¼¤ò¹¶·â¤·¡¢¤½¤Î¾ì½ê¤Ë°ÜÆ°¤¹¤ë¡£";
11313 #else
11314                 if (name) return "Dragonic Flash";
11315                 if (desc) return "Runs toward given location while attacking all monsters on the path.";
11316 #endif
11317     
11318                 if (cast)
11319                 {
11320                         int y, x;
11321
11322                         if (!tgt_pt(&x, &y)) return NULL;
11323
11324                         if (!cave_player_teleportable_bold(y, x, 0L) ||
11325                             (distance(y, x, py, px) > MAX_SIGHT / 2) ||
11326                             !projectable(py, px, y, x))
11327                         {
11328 #ifdef JP
11329                                 msg_print("¼ºÇÔ¡ª");
11330 #else
11331                                 msg_print("You cannot move to that place!");
11332 #endif
11333                                 break;
11334                         }
11335                         if (p_ptr->anti_tele)
11336                         {
11337 #ifdef JP
11338                                 msg_print("ÉԻ׵ĤÊÎϤ¬¥Æ¥ì¥Ý¡¼¥È¤òËɤ¤¤À¡ª");
11339 #else
11340                                 msg_print("A mysterious force prevents you from teleporting!");
11341 #endif
11342         
11343                                 break;
11344                         }
11345                         project(0, 0, y, x, HISSATSU_ISSEN, GF_ATTACK, PROJECT_BEAM | PROJECT_KILL, -1);
11346                         teleport_player_to(y, x, 0L);
11347                 }
11348                 break;
11349
11350         case 28:
11351 #ifdef JP
11352                 if (name) return "Æó½Å¤Î·õ·â";
11353                 if (desc) return "1¥¿¡¼¥ó¤Ç2ÅÙ¹¶·â¤ò¹Ô¤¦¡£";
11354 #else
11355                 if (name) return "Twin Slash";
11356                 if (desc) return "double attacks at a time.";
11357 #endif
11358     
11359                 if (cast)
11360                 {
11361                         int x, y;
11362         
11363                         if (!get_rep_dir(&dir, FALSE)) return NULL;
11364
11365                         y = py + ddy[dir];
11366                         x = px + ddx[dir];
11367
11368                         if (cave[y][x].m_idx)
11369                         {
11370                                 py_attack(y, x, 0);
11371                                 if (cave[y][x].m_idx)
11372                                 {
11373                                         handle_stuff();
11374                                         py_attack(y, x, 0);
11375                                 }
11376                         }
11377                         else
11378                         {
11379 #ifdef JP
11380         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11381 #else
11382                                 msg_print("You don't see any monster in this direction");
11383 #endif
11384                                 return NULL;
11385                         }
11386                 }
11387                 break;
11388
11389         case 29:
11390 #ifdef JP
11391                 if (name) return "¸×ÉúÀäÅáÀª";
11392                 if (desc) return "¶¯ÎϤʹ¶·â¤ò¹Ô¤¤¡¢¶á¤¯¤Î¾ì½ê¤Ë¤â¸ú²Ì¤¬µÚ¤Ö¡£";
11393 #else
11394                 if (name) return "Kofuku-Zettousei";
11395                 if (desc) return "Performs a powerful attack which even effect nearby monsters.";
11396 #endif
11397     
11398                 if (cast)
11399                 {
11400                         int total_damage = 0, basedam, i;
11401                         int y, x;
11402                         u32b flgs[TR_FLAG_SIZE];
11403                         object_type *o_ptr;
11404         
11405                         if (!get_rep_dir2(&dir)) return NULL;
11406                         if (dir == 5) return NULL;
11407
11408                         y = py + ddy[dir];
11409                         x = px + ddx[dir];
11410
11411                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
11412                         {
11413 #ifdef JP
11414                                 msg_print("¤Ê¤¼¤«¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£");
11415 #else
11416                                 msg_print("Something prevent you from attacking.");
11417 #endif
11418                                 return "";
11419                         }
11420 #ifdef JP
11421                         msg_print("Éð´ï¤òÂ礭¤¯¿¶¤ê²¼¤í¤·¤¿¡£");
11422 #else
11423                         msg_print("You swing your weapon downward.");
11424 #endif
11425                         for (i = 0; i < 2; i++)
11426                         {
11427                                 int damage;
11428                                 if (!buki_motteruka(INVEN_RARM+i)) break;
11429                                 o_ptr = &inventory[INVEN_RARM+i];
11430                                 basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
11431                                 damage = o_ptr->to_d * 100;
11432                                 object_flags(o_ptr, flgs);
11433                                 if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD))
11434                                 {
11435                                         /* vorpal blade */
11436                                         basedam *= 5;
11437                                         basedam /= 3;
11438                                 }
11439                                 else if (have_flag(flgs, TR_VORPAL))
11440                                 {
11441                                         /* vorpal flag only */
11442                                         basedam *= 11;
11443                                         basedam /= 9;
11444                                 }
11445                                 damage += basedam;
11446                                 damage += p_ptr->to_d[i] * 100;
11447                                 damage *= p_ptr->num_blow[i];
11448                                 total_damage += (damage / 100);
11449                         }
11450                         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);
11451                 }
11452                 break;
11453
11454         case 30:
11455 #ifdef JP
11456                 if (name) return "·Ä±Àµ´Ç¦·õ";
11457                 if (desc) return "¼«Ê¬¤â¥À¥á¡¼¥¸¤ò¤¯¤é¤¦¤¬¡¢Áê¼ê¤ËÈó¾ï¤ËÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£¥¢¥ó¥Ç¥Ã¥É¤Ë¤ÏÆä˸ú²Ì¤¬¤¢¤ë¡£";
11458 #else
11459                 if (name) return "Keiun-Kininken";
11460                 if (desc) return "Attacks a monster with extremely powerful damage. But you also takes some damages. Hurts a undead monster greatly.";
11461 #endif
11462     
11463                 if (cast)
11464                 {
11465                         int y, x;
11466
11467                         if (!get_rep_dir2(&dir)) return NULL;
11468                         if (dir == 5) return NULL;
11469
11470                         y = py + ddy[dir];
11471                         x = px + ddx[dir];
11472
11473                         if (cave[y][x].m_idx)
11474                                 py_attack(y, x, HISSATSU_UNDEAD);
11475                         else
11476                         {
11477 #ifdef JP
11478                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
11479 #else
11480                                 msg_print("There is no monster.");
11481 #endif
11482                                 return NULL;
11483                         }
11484 #ifdef JP
11485                         take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), "·Ä±Àµ´Ç¦·õ¤ò»È¤Ã¤¿¾×·â", -1);
11486 #else
11487                         take_hit(DAMAGE_NOESCAPE, 100 + randint1(100), "exhaustion on using Keiun-Kininken", -1);
11488 #endif
11489                 }
11490                 break;
11491
11492         case 31:
11493 #ifdef JP
11494                 if (name) return "ÀÚÊ¢";
11495                 if (desc) return "¡ÖÉð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£¡×";
11496 #else
11497                 if (name) return "Harakiri";
11498                 if (desc) return "'Busido is found in death'";
11499 #endif
11500
11501                 if (cast)
11502                 {
11503                         int i;
11504 #ifdef JP
11505         if (!get_check("ËÜÅö¤Ë¼«»¦¤·¤Þ¤¹¤«¡©")) return NULL;
11506 #else
11507                         if (!get_check("Do you really want to commit suicide? ")) return NULL;
11508 #endif
11509                                 /* Special Verification for suicide */
11510 #ifdef JP
11511         prt("³Îǧ¤Î¤¿¤á '@' ¤ò²¡¤·¤Æ²¼¤µ¤¤¡£", 0, 0);
11512 #else
11513                         prt("Please verify SUICIDE by typing the '@' sign: ", 0, 0);
11514 #endif
11515         
11516                         flush();
11517                         i = inkey();
11518                         prt("", 0, 0);
11519                         if (i != '@') return NULL;
11520                         if (p_ptr->total_winner)
11521                         {
11522                                 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
11523                                 p_ptr->total_winner = TRUE;
11524                         }
11525                         else
11526                         {
11527 #ifdef JP
11528                                 msg_print("Éð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£");
11529 #else
11530                                 msg_print("Meaning of Bushi-do is found in the death.");
11531 #endif
11532                                 take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1);
11533                         }
11534                 }
11535                 break;
11536         }
11537
11538         return "";
11539 }
11540
11541 /*!
11542  * @brief ¼ö½ÑÎΰè¤ÎÉð´ï¼öÇû¤ÎÂоݤˤǤ­¤ëÉð´ï¤«¤É¤¦¤«¤òÊÖ¤¹¡£ / An "item_tester_hook" for offer
11543  * @param o_ptr ¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
11544  * @return ¼öÇû²Äǽ¤ÊÉð´ï¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
11545  */
11546 static bool item_tester_hook_weapon_except_bow(object_type *o_ptr)
11547 {
11548         switch (o_ptr->tval)
11549         {
11550                 case TV_SWORD:
11551                 case TV_HAFTED:
11552                 case TV_POLEARM:
11553                 case TV_DIGGING:
11554                 {
11555                         return (TRUE);
11556                 }
11557         }
11558
11559         return (FALSE);
11560 }
11561
11562 /*!
11563  * @brief ¼ö½ÑÎΰè¤Î³Æ½èÍý¤Ë»È¤¨¤ë¼ö¤ï¤ì¤¿ÁõÈ÷¤«¤É¤¦¤«¤òÊÖ¤¹¡£ / An "item_tester_hook" for offer
11564  * @param o_ptr ¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
11565  * @return »È¤¨¤ëÁõÈ÷¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
11566  */
11567 static bool item_tester_hook_cursed(object_type *o_ptr)
11568 {
11569         return (bool)(object_is_cursed(o_ptr));
11570 }
11571
11572 /*!
11573  * @brief ¼ö½ÑÎΰèËâË¡¤Î³Æ½èÍý¤ò¹Ô¤¦
11574  * @param spell ËâË¡ID
11575  * @param mode ½èÍýÆâÍÆ (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST / SPELL_CONT / SPELL_STOP)
11576  * @return SPELL_NAME / SPELL_DESC / SPELL_INFO »þ¤Ë¤Ïʸ»úÎó¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£SPELL_CAST / SPELL_CONT / SPELL_STOP »þ¤ÏNULLʸ»úÎó¤òÊÖ¤¹¡£
11577  */
11578 static cptr do_hex_spell(int spell, int mode)
11579 {
11580         bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
11581         bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
11582         bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
11583         bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
11584         bool cont = (mode == SPELL_CONT) ? TRUE : FALSE;
11585         bool stop = (mode == SPELL_STOP) ? TRUE : FALSE;
11586
11587         bool add = TRUE;
11588
11589         int plev = p_ptr->lev;
11590         int power;
11591
11592         switch (spell)
11593         {
11594         /*** 1st book (0-7) ***/
11595         case 0:
11596 #ifdef JP
11597                 if (name) return "¼Ù¤Ê¤ë½ËÊ¡";
11598                 if (desc) return "½ËÊ¡¤Ë¤è¤ê¹¶·âÀºÅÙ¤ÈËɸæÎϤ¬¾å¤¬¤ë¡£";
11599 #else
11600                 if (name) return "Evily blessing";
11601                 if (desc) return "Attempts to increase +to_hit of a weapon and AC";
11602 #endif
11603                 if (cast)
11604                 {
11605                         if (!p_ptr->blessed)
11606                         {
11607 #ifdef JP
11608                                 msg_print("¹â·é¤Êµ¤Ê¬¤Ë¤Ê¤Ã¤¿¡ª");
11609 #else
11610                                 msg_print("You feel righteous!");
11611 #endif
11612                         }
11613                 }
11614                 if (stop)
11615                 {
11616                         if (!p_ptr->blessed)
11617                         {
11618 #ifdef JP
11619                                 msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£");
11620 #else
11621                                 msg_print("The prayer has expired.");
11622 #endif
11623                         }
11624                 }
11625                 break;
11626
11627         case 1:
11628 #ifdef JP
11629                 if (name) return "·Ú½ý¤Î¼£Ìþ";
11630                 if (desc) return "HP¤ä½ý¤ò¾¯¤·²óÉü¤µ¤»¤ë¡£";
11631 #else
11632                 if (name) return "Cure light wounds";
11633                 if (desc) return "Heals cut and HP a little.";
11634 #endif
11635                 if (info) return info_heal(1, 10, 0);
11636                 if (cast)
11637                 {
11638 #ifdef JP
11639                         msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
11640 #else
11641                         msg_print("You feel better and better.");
11642 #endif
11643                 }
11644                 if (cast || cont)
11645                 {
11646                         hp_player(damroll(1, 10));
11647                         set_cut(p_ptr->cut - 10);
11648                 }
11649                 break;
11650
11651         case 2:
11652 #ifdef JP
11653                 if (name) return "°­Ëâ¤Î¥ª¡¼¥é";
11654                 if (desc) return "±ê¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢²óÉü®ÅÙ¤¬Â®¤¯¤Ê¤ë¡£";
11655 #else
11656                 if (name) return "Demonic aura";
11657                 if (desc) return "Gives fire aura and regeneration.";
11658 #endif
11659                 if (cast)
11660                 {
11661 #ifdef JP
11662                         msg_print("ÂΤ¬±ê¤Î¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£");
11663 #else
11664                         msg_print("You have enveloped by fiery aura!");
11665 #endif
11666                 }
11667                 if (stop)
11668                 {
11669 #ifdef JP
11670                         msg_print("±ê¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
11671 #else
11672                         msg_print("Fiery aura disappeared.");
11673 #endif
11674                 }
11675                 break;
11676
11677         case 3:
11678 #ifdef JP
11679                 if (name) return "°­½­Ì¸";
11680                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÈù¼åÎ̤ÎÆǤΥÀ¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
11681 #else
11682                 if (name) return "Stinking mist";
11683                 if (desc) return "Deals few damages of poison to all monsters in your sight.";
11684 #endif
11685                 power = plev / 2 + 5;
11686                 if (info) return info_damage(1, power, 0);
11687                 if (cast || cont)
11688                 {
11689                         project_hack(GF_POIS, randint1(power));
11690                 }
11691                 break;
11692
11693         case 4:
11694 #ifdef JP
11695                 if (name) return "ÏÓÎ϶¯²½";
11696                 if (desc) return "½Ñ¼Ô¤ÎÏÓÎϤò¾å¾º¤µ¤»¤ë¡£";
11697 #else
11698                 if (name) return "Extra might";
11699                 if (desc) return "Attempts to increase your strength.";
11700 #endif
11701                 if (cast)
11702                 {
11703 #ifdef JP
11704                         msg_print("²¿¤À¤«ÎϤ¬Í¯¤¤¤ÆÍè¤ë¡£");
11705 #else
11706                         msg_print("You feel you get stronger.");
11707 #endif
11708                 }
11709                 break;
11710
11711         case 5:
11712 #ifdef JP
11713                 if (name) return "Éð´ï¼öÇû";
11714                 if (desc) return "ÁõÈ÷¤·¤Æ¤¤¤ëÉð´ï¤ò¼ö¤¦¡£";
11715 #else
11716                 if (name) return "Curse weapon";
11717                 if (desc) return "Curses your weapon.";
11718 #endif
11719                 if (cast)
11720                 {
11721                         int item;
11722                         cptr q, s;
11723                         char o_name[MAX_NLEN];
11724                         object_type *o_ptr;
11725                         u32b f[TR_FLAG_SIZE];
11726
11727                         item_tester_hook = item_tester_hook_weapon_except_bow;
11728 #ifdef JP
11729                         q = "¤É¤ì¤ò¼ö¤¤¤Þ¤¹¤«¡©";
11730                         s = "Éð´ï¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
11731 #else
11732                         q = "Which weapon do you curse?";
11733                         s = "You wield no weapons.";
11734 #endif
11735
11736                         if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
11737
11738                         o_ptr = &inventory[item];
11739                         object_desc(o_name, o_ptr, OD_NAME_ONLY);
11740                         object_flags(o_ptr, f);
11741
11742 #ifdef JP
11743                         if (!get_check(format("ËÜÅö¤Ë %s ¤ò¼ö¤¤¤Þ¤¹¤«¡©", o_name))) return FALSE;
11744 #else
11745                         if (!get_check(format("Do you curse %s, really¡©", o_name))) return FALSE;
11746 #endif
11747
11748                         if (!one_in_(3) &&
11749                                 (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
11750                         {
11751 #ifdef JP
11752                                 msg_format("%s ¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡£", o_name);
11753 #else
11754                                 msg_format("%s resists the effect.", o_name);
11755 #endif
11756                                 if (one_in_(3))
11757                                 {
11758                                         if (o_ptr->to_d > 0)
11759                                         {
11760                                                 o_ptr->to_d -= randint1(3) % 2;
11761                                                 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
11762                                         }
11763                                         if (o_ptr->to_h > 0)
11764                                         {
11765                                                 o_ptr->to_h -= randint1(3) % 2;
11766                                                 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
11767                                         }
11768                                         if (o_ptr->to_a > 0)
11769                                         {
11770                                                 o_ptr->to_a -= randint1(3) % 2;
11771                                                 if (o_ptr->to_a < 0) o_ptr->to_a = 0;
11772                                         }
11773 #ifdef JP
11774                                         msg_format("%s ¤ÏÎô²½¤·¤Æ¤·¤Þ¤Ã¤¿¡£", o_name);
11775 #else
11776                                         msg_format("Your %s was disenchanted!", o_name);
11777 #endif
11778                                 }
11779                         }
11780                         else
11781                         {
11782                                 int power = 0;
11783 #ifdef JP
11784                                 msg_format("¶²ÉݤΰŹõ¥ª¡¼¥é¤¬¤¢¤Ê¤¿¤Î%s¤òÊñ¤ß¹þ¤ó¤À¡ª", o_name);
11785 #else
11786                                 msg_format("A terrible black aura blasts your %s!", o_name);
11787 #endif
11788                                 o_ptr->curse_flags |= (TRC_CURSED);
11789
11790                                 if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
11791                                 {
11792
11793                                         if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
11794                                         if (one_in_(666))
11795                                         {
11796                                                 o_ptr->curse_flags |= (TRC_TY_CURSE);
11797                                                 if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
11798
11799                                                 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
11800                                                 add_flag(o_ptr->art_flags, TR_VORPAL);
11801                                                 add_flag(o_ptr->art_flags, TR_VAMPIRIC);
11802 #ifdef JP
11803                                                 msg_print("·ì¤À¡ª·ì¤À¡ª·ì¤À¡ª");
11804 #else
11805                                                 msg_print("Blood, Blood, Blood!");
11806 #endif
11807                                                 power = 2;
11808                                         }
11809                                 }
11810
11811                                 o_ptr->curse_flags |= get_curse(power, o_ptr);
11812                         }
11813
11814                         p_ptr->update |= (PU_BONUS);
11815                         add = FALSE;
11816                 }
11817                 break;
11818
11819         case 6:
11820 #ifdef JP
11821                 if (name) return "¼Ù°­´¶ÃÎ";
11822                 if (desc) return "¼þ°Ï¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£";
11823 #else
11824                 if (name) return "Evil detection";
11825                 if (desc) return "Detects evil monsters.";
11826 #endif
11827                 if (info) return info_range(MAX_SIGHT);
11828                 if (cast)
11829                 {
11830 #ifdef JP
11831                         msg_print("¼Ù°­¤ÊÀ¸Êª¤Î¸ºß¤ò´¶¤¸¼è¤í¤¦¤È¤·¤¿¡£");
11832 #else
11833                         msg_print("You attend to the presence of evil creatures.");
11834 #endif
11835                 }
11836                 break;
11837
11838         case 7:
11839 #ifdef JP
11840                 if (name) return "²æËý";
11841                 if (desc) return "¿ô¥¿¡¼¥ó¹¶·â¤òÂѤ¨¤¿¸å¡¢¼õ¤±¤¿¥À¥á¡¼¥¸¤òÃϹö¤Î¶È²Ð¤È¤·¤Æ¼þ°Ï¤ËÊü½Ð¤¹¤ë¡£";
11842 #else
11843                 if (name) return "Patience";
11844                 if (desc) return "Bursts hell fire strongly after patients any damage while few turns.";
11845 #endif
11846                 power = MIN(200, (p_ptr->magic_num1[2] * 2));
11847                 if (info) return info_damage(0, 0, power);
11848                 if (cast)
11849                 {
11850                         int a = 3 - (p_ptr->pspeed - 100) / 10;
11851                         int r = 3 + randint1(3) + MAX(0, MIN(3, a));
11852
11853                         if (p_ptr->magic_num2[2] > 0)
11854                         {
11855 #ifdef JP
11856                                 msg_print("¤¹¤Ç¤Ë²æËý¤ò¤·¤Æ¤¤¤ë¡£");
11857 #else
11858                                 msg_print("You are already patienting.");
11859 #endif
11860                                 return NULL;
11861                         }
11862
11863                         p_ptr->magic_num2[1] = 1;
11864                         p_ptr->magic_num2[2] = r;
11865                         p_ptr->magic_num1[2] = 0;
11866 #ifdef JP
11867                         msg_print("¤¸¤Ã¤ÈÂѤ¨¤ë¤³¤È¤Ë¤·¤¿¡£");
11868 #else
11869                         msg_print("You decide to patient all damages.");
11870 #endif
11871                         add = FALSE;
11872                 }
11873                 if (cont)
11874                 {
11875                         int rad = 2 + (power / 50);
11876
11877                         p_ptr->magic_num2[2]--;
11878
11879                         if ((p_ptr->magic_num2[2] <= 0) || (power >= 200))
11880                         {
11881 #ifdef JP
11882                                 msg_print("²æËý¤¬²ò¤«¤ì¤¿¡ª");
11883 #else
11884                                 msg_print("Time for end of patioence!");
11885 #endif
11886                                 if (power)
11887                                 {
11888                                         project(0, rad, py, px, power, GF_HELL_FIRE,
11889                                                 (PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1);
11890                                 }
11891                                 if (p_ptr->wizard)
11892                                 {
11893 #ifdef JP
11894                                         msg_format("%dÅÀ¤Î¥À¥á¡¼¥¸¤òÊÖ¤·¤¿¡£", power);
11895 #else
11896                                         msg_format("You return %d damages.", power);
11897 #endif
11898                                 }
11899
11900                                 /* Reset */
11901                                 p_ptr->magic_num2[1] = 0;
11902                                 p_ptr->magic_num2[2] = 0;
11903                                 p_ptr->magic_num1[2] = 0;
11904                         }
11905                 }
11906                 break;
11907
11908         /*** 2nd book (8-15) ***/
11909         case 8:
11910 #ifdef JP
11911                 if (name) return "ɹ¤Î³»";
11912                 if (desc) return "ɹ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢ËɸæÎϤ¬¾å¾º¤¹¤ë¡£";
11913 #else
11914                 if (name) return "Ice armor";
11915                 if (desc) return "Gives fire aura and bonus to AC.";
11916 #endif
11917                 if (cast)
11918                 {
11919 #ifdef JP
11920                         msg_print("ÂΤ¬É¹¤Î³»¤Çʤ¤ï¤ì¤¿¡£");
11921 #else
11922                         msg_print("You have enveloped by ice armor!");
11923 #endif
11924                 }
11925                 if (stop)
11926                 {
11927 #ifdef JP
11928                         msg_print("ɹ¤Î³»¤¬¾Ã¤¨µî¤Ã¤¿¡£");
11929 #else
11930                         msg_print("Ice armor disappeared.");
11931 #endif
11932                 }
11933                 break;
11934
11935         case 9:
11936 #ifdef JP
11937                 if (name) return "½Å½ý¤Î¼£Ìþ";
11938                 if (desc) return "ÂÎÎϤä½ý¤ò¿¾¯²óÉü¤µ¤»¤ë¡£";
11939 #else
11940                 if (name) return "Cure serious wounds";
11941                 if (desc) return "Heals cut and HP more.";
11942 #endif
11943                 if (info) return info_heal(2, 10, 0);
11944                 if (cast)
11945                 {
11946 #ifdef JP
11947                         msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
11948 #else
11949                         msg_print("You feel better and better.");
11950 #endif
11951                 }
11952                 if (cast || cont)
11953                 {
11954                         hp_player(damroll(2, 10));
11955                         set_cut((p_ptr->cut / 2) - 10);
11956                 }
11957                 break;
11958
11959         case 10:
11960 #ifdef JP
11961                 if (name) return "ÌôÉʵÛÆþ";
11962                 if (desc) return "¼öʸ±Ó¾§¤òÃæ»ß¤¹¤ë¤³¤È¤Ê¤¯¡¢Ìô¤Î¸ú²Ì¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
11963 #else
11964                 if (name) return "Inhail potion";
11965                 if (desc) return "Quaffs a potion without canceling of casting a spell.";
11966 #endif
11967                 if (cast)
11968                 {
11969                         p_ptr->magic_num1[0] |= (1L << HEX_INHAIL);
11970                         do_cmd_quaff_potion();
11971                         p_ptr->magic_num1[0] &= ~(1L << HEX_INHAIL);
11972                         add = FALSE;
11973                 }
11974                 break;
11975
11976         case 11:
11977 #ifdef JP
11978                 if (name) return "µÛ·ì̸";
11979                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÈù¼åÎ̤ÎÀ¸Ì¿Îϵۼý¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Í¿¤¨¤¿¥À¥á¡¼¥¸¤Îʬ¡¢ÂÎÎϤ¬²óÉü¤¹¤ë¡£";
11980 #else
11981                 if (name) return "Vampiric mist";
11982                 if (desc) return "Deals few dameges of drain life to all monsters in your sight.";
11983 #endif
11984                 power = (plev / 2) + 5;
11985                 if (info) return info_damage(1, power, 0);
11986                 if (cast || cont)
11987                 {
11988                         project_hack(GF_OLD_DRAIN, randint1(power));
11989                 }
11990                 break;
11991
11992         case 12:
11993 #ifdef JP
11994                 if (name) return "Ëâ·õ²½";
11995                 if (desc) return "Éð´ï¤Î¹¶·âÎϤò¾å¤²¤ë¡£ÀÚ¤ìÌ£¤òÆÀ¡¢¼ö¤¤¤Ë±þ¤¸¤ÆÍ¿¤¨¤ë¥À¥á¡¼¥¸¤¬¾å¾º¤·¡¢Á±Îɤʥâ¥ó¥¹¥¿¡¼¤ËÂФ¹¤ë¥À¥á¡¼¥¸¤¬2Çܤˤʤ롣";
11996 #else
11997                 if (name) return "Swords to runeswords";
11998                 if (desc) return "Gives vorpal ability to your weapon. Increases damages by your weapon acccording to curse of your weapon.";
11999 #endif
12000                 if (cast)
12001                 {
12002 #ifdef JP
12003                         msg_print("¤¢¤Ê¤¿¤ÎÉð´ï¤¬¹õ¤¯µ±¤¤¤¿¡£");
12004 #else
12005                         if (!empty_hands(FALSE))
12006                                 msg_print("Your weapons glow bright black.");
12007                         else
12008                                 msg_print("Your weapon glows bright black.");
12009 #endif
12010                 }
12011                 if (stop)
12012                 {
12013 #ifdef JP
12014                         msg_print("Éð´ï¤Îµ±¤­¤¬¾Ã¤¨µî¤Ã¤¿¡£");
12015 #else
12016                         msg_format("Brightness of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
12017 #endif
12018                 }
12019                 break;
12020
12021         case 13:
12022 #ifdef JP
12023                 if (name) return "º®Íð¤Î¼ê";
12024                 if (desc) return "¹¶·â¤·¤¿ºÝ¥â¥ó¥¹¥¿¡¼¤òº®Í𤵤»¤ë¡£";
12025 #else
12026                 if (name) return "Touch of confusion";
12027                 if (desc) return "Confuses a monster when you attack.";
12028 #endif
12029                 if (cast)
12030                 {
12031 #ifdef JP
12032                         msg_print("¤¢¤Ê¤¿¤Î¼ê¤¬ÀÖ¤¯µ±¤­»Ï¤á¤¿¡£");
12033 #else
12034                         msg_print("Your hands glow bright red.");
12035 #endif
12036                 }
12037                 if (stop)
12038                 {
12039 #ifdef JP
12040                         msg_print("¼ê¤Îµ±¤­¤¬¤Ê¤¯¤Ê¤Ã¤¿¡£");
12041 #else
12042                         msg_print("Brightness on your hands disappeard.");
12043 #endif
12044                 }
12045                 break;
12046
12047         case 14:
12048 #ifdef JP
12049                 if (name) return "ÆùÂζ¯²½";
12050                 if (desc) return "½Ñ¼Ô¤ÎÏÓÎÏ¡¢´ïÍѤµ¡¢Âѵ×ÎϤò¾å¾º¤µ¤»¤ë¡£¹¶·â²ó¿ô¤Î¾å¸Â¤ò 1 Áý²Ã¤µ¤»¤ë¡£";
12051 #else
12052                 if (name) return "Building up";
12053                 if (desc) return "Attempts to increases your strength, dexterity and constitusion.";
12054 #endif
12055                 if (cast)
12056                 {
12057 #ifdef JP
12058                         msg_print("¿ÈÂΤ¬¶¯¤¯¤Ê¤Ã¤¿µ¤¤¬¤·¤¿¡£");
12059 #else
12060                         msg_print("You feel your body is developed more now.");
12061 #endif
12062                 }
12063                 break;
12064
12065         case 15:
12066 #ifdef JP
12067                 if (name) return "È¿¥Æ¥ì¥Ý¡¼¥È·ë³¦";
12068                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤Î¥Æ¥ì¥Ý¡¼¥È¤òÁ˳²¤¹¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
12069 #else
12070                 if (name) return "Anti teleport barrier";
12071                 if (desc) return "Obstructs all teleportations by monsters in your sight.";
12072 #endif
12073                 power = plev * 3 / 2;
12074                 if (info) return info_power(power);
12075                 if (cast)
12076                 {
12077 #ifdef JP
12078                         msg_print("¥Æ¥ì¥Ý¡¼¥È¤òËɤ°¼ö¤¤¤ò¤«¤±¤¿¡£");
12079 #else
12080                         msg_print("You feel anyone can not teleport except you.");
12081 #endif
12082                 }
12083                 break;
12084
12085         /*** 3rd book (16-23) ***/
12086         case 16:
12087 #ifdef JP
12088                 if (name) return "¾×·â¤Î¥¯¥í¡¼¥¯";
12089                 if (desc) return "Åŵ¤¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢Æ°¤­¤¬Â®¤¯¤Ê¤ë¡£";
12090 #else
12091                 if (name) return "Cloak of shock";
12092                 if (desc) return "Gives lightning aura and a bonus to speed.";
12093 #endif
12094                 if (cast)
12095                 {
12096 #ifdef JP
12097                         msg_print("ÂΤ¬°ðºÊ¤Î¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£");
12098 #else
12099                         msg_print("You have enveloped by electrical aura!");
12100 #endif
12101                 }
12102                 if (stop)
12103                 {
12104 #ifdef JP
12105                         msg_print("°ðºÊ¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
12106 #else
12107                         msg_print("Electrical aura disappeared.");
12108 #endif
12109                 }
12110                 break;
12111
12112         case 17:
12113 #ifdef JP
12114                 if (name) return "Ã×Ì¿½ý¤Î¼£Ìþ";
12115                 if (desc) return "ÂÎÎϤä½ý¤ò²óÉü¤µ¤»¤ë¡£";
12116 #else
12117                 if (name) return "Cure critical wounds";
12118                 if (desc) return "Heals cut and HP greatry.";
12119 #endif
12120                 if (info) return info_heal(4, 10, 0);
12121                 if (cast)
12122                 {
12123 #ifdef JP
12124                         msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£");
12125 #else
12126                         msg_print("You feel better and better.");
12127 #endif
12128                 }
12129                 if (cast || cont)
12130                 {
12131                         hp_player(damroll(4, 10));
12132                         set_stun(0);
12133                         set_cut(0);
12134                         set_poisoned(0);
12135                 }
12136                 break;
12137
12138         case 18:
12139 #ifdef JP
12140                 if (name) return "¼öÎÏÉõÆþ";
12141                 if (desc) return "ËâË¡¤ÎÆ»¶ñ¤ËËâÎϤòºÆ½¼Å¶¤¹¤ë¡£";
12142 #else
12143                 if (name) return "Recharging";
12144                 if (desc) return "Recharges a magic device.";
12145 #endif
12146                 power = plev * 2;
12147                 if (info) return info_power(power);
12148                 if (cast)
12149                 {
12150                         if (!recharge(power)) return NULL;
12151                         add = FALSE;
12152                 }
12153                 break;
12154
12155         case 19:
12156 #ifdef JP
12157                 if (name) return "»à¼ÔÉü³è";
12158                 if (desc) return "»àÂΤòÁɤ餻¤Æ¥Ú¥Ã¥È¤Ë¤¹¤ë¡£";
12159 #else
12160                 if (name) return "Animate Dead";
12161                 if (desc) return "Raises corpses and skeletons from dead.";
12162 #endif
12163                 if (cast)
12164                 {
12165 #ifdef JP
12166                         msg_print("»à¼Ô¤Ø¤Î¸Æ¤Ó¤«¤±¤ò»Ï¤á¤¿¡£");
12167 #else
12168                         msg_print("You start to call deads.!");
12169 #endif
12170                 }
12171                 if (cast || cont)
12172                 {
12173                         animate_dead(0, py, px);
12174                 }
12175                 break;
12176
12177         case 20:
12178 #ifdef JP
12179                 if (name) return "Ëɶñ¼öÇû";
12180                 if (desc) return "ÁõÈ÷¤·¤Æ¤¤¤ëËɶñ¤Ë¼ö¤¤¤ò¤«¤±¤ë¡£";
12181 #else
12182                 if (name) return "Curse armor";
12183                 if (desc) return "Curse a piece of armour that you wielding.";
12184 #endif
12185                 if (cast)
12186                 {
12187                         int item;
12188                         cptr q, s;
12189                         char o_name[MAX_NLEN];
12190                         object_type *o_ptr;
12191                         u32b f[TR_FLAG_SIZE];
12192
12193                         item_tester_hook = object_is_armour;
12194 #ifdef JP
12195                         q = "¤É¤ì¤ò¼ö¤¤¤Þ¤¹¤«¡©";
12196                         s = "Ëɶñ¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
12197 #else
12198                         q = "Which piece of armour do you curse?";
12199                         s = "You wield no piece of armours.";
12200 #endif
12201
12202                         if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
12203
12204                         o_ptr = &inventory[item];
12205                         object_desc(o_name, o_ptr, OD_NAME_ONLY);
12206                         object_flags(o_ptr, f);
12207
12208 #ifdef JP
12209                         if (!get_check(format("ËÜÅö¤Ë %s ¤ò¼ö¤¤¤Þ¤¹¤«¡©", o_name))) return FALSE;
12210 #else
12211                         if (!get_check(format("Do you curse %s, really¡©", o_name))) return FALSE;
12212 #endif
12213
12214                         if (!one_in_(3) &&
12215                                 (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED)))
12216                         {
12217 #ifdef JP
12218                                 msg_format("%s ¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡£", o_name);
12219 #else
12220                                 msg_format("%s resists the effect.", o_name);
12221 #endif
12222                                 if (one_in_(3))
12223                                 {
12224                                         if (o_ptr->to_d > 0)
12225                                         {
12226                                                 o_ptr->to_d -= randint1(3) % 2;
12227                                                 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
12228                                         }
12229                                         if (o_ptr->to_h > 0)
12230                                         {
12231                                                 o_ptr->to_h -= randint1(3) % 2;
12232                                                 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
12233                                         }
12234                                         if (o_ptr->to_a > 0)
12235                                         {
12236                                                 o_ptr->to_a -= randint1(3) % 2;
12237                                                 if (o_ptr->to_a < 0) o_ptr->to_a = 0;
12238                                         }
12239 #ifdef JP
12240                                         msg_format("%s ¤ÏÎô²½¤·¤Æ¤·¤Þ¤Ã¤¿¡£", o_name);
12241 #else
12242                                         msg_format("Your %s was disenchanted!", o_name);
12243 #endif
12244                                 }
12245                         }
12246                         else
12247                         {
12248                                 int power = 0;
12249 #ifdef JP
12250                                 msg_format("¶²ÉݤΰŹõ¥ª¡¼¥é¤¬¤¢¤Ê¤¿¤Î%s¤òÊñ¤ß¹þ¤ó¤À¡ª", o_name);
12251 #else
12252                                 msg_format("A terrible black aura blasts your %s!", o_name);
12253 #endif
12254                                 o_ptr->curse_flags |= (TRC_CURSED);
12255
12256                                 if (object_is_artifact(o_ptr) || object_is_ego(o_ptr))
12257                                 {
12258
12259                                         if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
12260                                         if (one_in_(666))
12261                                         {
12262                                                 o_ptr->curse_flags |= (TRC_TY_CURSE);
12263                                                 if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE);
12264
12265                                                 add_flag(o_ptr->art_flags, TR_AGGRAVATE);
12266                                                 add_flag(o_ptr->art_flags, TR_RES_POIS);
12267                                                 add_flag(o_ptr->art_flags, TR_RES_DARK);
12268                                                 add_flag(o_ptr->art_flags, TR_RES_NETHER);
12269 #ifdef JP
12270                                                 msg_print("·ì¤À¡ª·ì¤À¡ª·ì¤À¡ª");
12271 #else
12272                                                 msg_print("Blood, Blood, Blood!");
12273 #endif
12274                                                 power = 2;
12275                                         }
12276                                 }
12277
12278                                 o_ptr->curse_flags |= get_curse(power, o_ptr);
12279                         }
12280
12281                         p_ptr->update |= (PU_BONUS);
12282                         add = FALSE;
12283                 }
12284                 break;
12285
12286         case 21:
12287 #ifdef JP
12288                 if (name) return "±Æ¤Î¥¯¥í¡¼¥¯";
12289                 if (desc) return "±Æ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢Å¨¤Ë±Æ¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£";
12290 #else
12291                 if (name) return "Cloak of shadow";
12292                 if (desc) return "Gives aura of shadow.";
12293 #endif
12294                 if (cast)
12295                 {
12296                         object_type *o_ptr = &inventory[INVEN_OUTER];
12297
12298                         if (!o_ptr->k_idx)
12299                         {
12300 #ifdef JP
12301                                 msg_print("¥¯¥í¡¼¥¯¤ò¿È¤Ë¤Ä¤±¤Æ¤¤¤Ê¤¤¡ª");
12302 #else
12303                                 msg_print("You don't ware any cloak.");
12304 #endif
12305                                 return NULL;
12306                         }
12307                         else if (!object_is_cursed(o_ptr))
12308                         {
12309 #ifdef JP
12310                                 msg_print("¥¯¥í¡¼¥¯¤Ï¼ö¤ï¤ì¤Æ¤¤¤Ê¤¤¡ª");
12311 #else
12312                                 msg_print("Your cloak is not cursed.");
12313 #endif
12314                                 return NULL;
12315                         }
12316                         else
12317                         {
12318 #ifdef JP
12319                                 msg_print("±Æ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤Ã¤¿¡£");
12320 #else
12321                                 msg_print("You have enveloped by shadow aura!");
12322 #endif
12323                         }
12324                 }
12325                 if (cont)
12326                 {
12327                         object_type *o_ptr = &inventory[INVEN_OUTER];
12328
12329                         if ((!o_ptr->k_idx) || (!object_is_cursed(o_ptr)))
12330                         {
12331                                 do_spell(REALM_HEX, spell, SPELL_STOP);
12332                                 p_ptr->magic_num1[0] &= ~(1L << spell);
12333                                 p_ptr->magic_num2[0]--;
12334                                 if (!p_ptr->magic_num2[0]) set_action(ACTION_NONE);
12335                         }
12336                 }
12337                 if (stop)
12338                 {
12339 #ifdef JP
12340                         msg_print("±Æ¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£");
12341 #else
12342                         msg_print("Shadow aura disappeared.");
12343 #endif
12344                 }
12345                 break;
12346
12347         case 22:
12348 #ifdef JP
12349                 if (name) return "¶ìÄˤòËâÎϤË";
12350                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÀº¿À¥À¥á¡¼¥¸Í¿¤¨¡¢ËâÎϤòµÛ¤¤¼è¤ë¡£";
12351 #else
12352                 if (name) return "Pains to mana";
12353                 if (desc) return "Deals psychic damages to all monsters in sight, and drains some mana.";
12354 #endif
12355                 power = plev * 3 / 2;
12356                 if (info) return info_damage(1, power, 0);
12357                 if (cast || cont)
12358                 {
12359                         project_hack(GF_PSI_DRAIN, randint1(power));
12360                 }
12361                 break;
12362
12363         case 23:
12364 #ifdef JP
12365                 if (name) return "ÌܤˤÏÌܤò";
12366                 if (desc) return "ÂÇ·â¤äËâË¡¤Ç¼õ¤±¤¿¥À¥á¡¼¥¸¤ò¡¢¹¶·â¸µ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤âÍ¿¤¨¤ë¡£";
12367 #else
12368                 if (name) return "Eye for an eye";
12369                 if (desc) return "Returns same damage which you got to the monster which damaged you.";
12370 #endif
12371                 if (cast)
12372                 {
12373 #ifdef JP
12374                         msg_print("Éü½²¤·¤¿¤¤Íß˾¤Ë¤«¤é¤ì¤¿¡£");
12375 #else
12376                         msg_print("You wish strongly you want to revenge anything.");
12377 #endif
12378                 }
12379                 break;
12380
12381         /*** 4th book (24-31) ***/
12382         case 24:
12383 #ifdef JP
12384                 if (name) return "È¿Áý¿£·ë³¦";
12385                 if (desc) return "¤½¤Î³¬¤ÎÁý¿£¤¹¤ë¥â¥ó¥¹¥¿¡¼¤ÎÁý¿£¤òÁ˻ߤ¹¤ë¡£";
12386 #else
12387                 if (name) return "Anti multiply barrier";
12388                 if (desc) return "Obstructs all multiplying by monsters in entire floor.";
12389 #endif
12390                 if (cast)
12391                 {
12392 #ifdef JP
12393                         msg_print("Áý¿£¤òÁ˻ߤ¹¤ë¼ö¤¤¤ò¤«¤±¤¿¡£");
12394 #else
12395                         msg_print("You feel anyone can not already multiply.");
12396 #endif
12397                 }
12398                 break;
12399
12400         case 25:
12401 #ifdef JP
12402                 if (name) return "À¸Ì¿ÎÏÉü³è";
12403                 if (desc) return "·Ð¸³Ãͤò½ù¡¹¤ËÉü³è¤·¡¢¸º¾¯¤·¤¿Ç½ÎÏÃͤò²óÉü¤µ¤»¤ë¡£";
12404 #else
12405                 if (name) return "Restore life";
12406                 if (desc) return "Restores life energy and status.";
12407 #endif
12408                 if (cast)
12409                 {
12410 #ifdef JP
12411                         msg_print("À¸Ì¿ÎϤ¬Ìá¤ê»Ï¤á¤¿¡£");
12412 #else
12413                         msg_print("You feel your life energy starting to return.");
12414 #endif
12415                 }
12416                 if (cast || cont)
12417                 {
12418                         bool flag = FALSE;
12419                         int d = (p_ptr->max_exp - p_ptr->exp);
12420                         int r = (p_ptr->exp / 20);
12421                         int i;
12422
12423                         if (d > 0)
12424                         {
12425                                 if (d < r)
12426                                         p_ptr->exp = p_ptr->max_exp;
12427                                 else
12428                                         p_ptr->exp += r;
12429
12430                                 /* Check the experience */
12431                                 check_experience();
12432
12433                                 flag = TRUE;
12434                         }
12435                         for (i = A_STR; i < 6; i ++)
12436                         {
12437                                 if (p_ptr->stat_cur[i] < p_ptr->stat_max[i])
12438                                 {
12439                                         if (p_ptr->stat_cur[i] < 18)
12440                                                 p_ptr->stat_cur[i]++;
12441                                         else
12442                                                 p_ptr->stat_cur[i] += 10;
12443
12444                                         if (p_ptr->stat_cur[i] > p_ptr->stat_max[i])
12445                                                 p_ptr->stat_cur[i] = p_ptr->stat_max[i];
12446
12447                                         /* Recalculate bonuses */
12448                                         p_ptr->update |= (PU_BONUS);
12449
12450                                         flag = TRUE;
12451                                 }
12452                         }
12453
12454                         if (!flag)
12455                         {
12456 #ifdef JP
12457                                 msg_format("%s¤Î¼öʸ¤Î±Ó¾§¤ò¤ä¤á¤¿¡£", do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME));
12458 #else
12459                                 msg_format("Finish casting '%^s'.", do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME));
12460 #endif
12461                                 p_ptr->magic_num1[0] &= ~(1L << HEX_RESTORE);
12462                                 if (cont) p_ptr->magic_num2[0]--;
12463                                 if (p_ptr->magic_num2) p_ptr->action = ACTION_NONE;
12464
12465                                 /* Redraw status */
12466                                 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
12467                                 p_ptr->redraw |= (PR_EXTRA);
12468
12469                                 return "";
12470                         }
12471                 }
12472                 break;
12473
12474         case 26:
12475 #ifdef JP
12476                 if (name) return "¼öÎϵۼý";
12477                 if (desc) return "¼ö¤ï¤ì¤¿Éð´ï¤Î¼ö¤¤¤òµÛ¼ý¤·¤ÆËâÎϤò²óÉü¤¹¤ë¡£";
12478 #else
12479                 if (name) return "Drain curse power";
12480                 if (desc) return "Drains curse on your weapon and heals SP a little.";
12481 #endif
12482                 if (cast)
12483                 {
12484                         int item;
12485                         cptr s, q;
12486                         u32b f[TR_FLAG_SIZE];
12487                         object_type *o_ptr;
12488
12489                         item_tester_hook = item_tester_hook_cursed;
12490 #ifdef JP
12491                         q = "¤É¤ÎÁõÈ÷Éʤ«¤éµÛ¼ý¤·¤Þ¤¹¤«¡©";
12492                         s = "¼ö¤ï¤ì¤¿¥¢¥¤¥Æ¥à¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£";
12493 #else
12494                         q = "Which cursed equipment do you drain mana from?";
12495                         s = "You have no cursed equipment.";
12496 #endif
12497
12498                         if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE;
12499
12500                         o_ptr = &inventory[item];
12501                         object_flags(o_ptr, f);
12502
12503                         p_ptr->csp += (p_ptr->lev / 5) + randint1(p_ptr->lev / 5);
12504                         if (have_flag(f, TR_TY_CURSE) || (o_ptr->curse_flags & TRC_TY_CURSE)) p_ptr->csp += randint1(5);
12505                         if (p_ptr->csp > p_ptr->msp) p_ptr->csp = p_ptr->msp;
12506
12507                         if (o_ptr->curse_flags & TRC_PERMA_CURSE)
12508                         {
12509                                 /* Nothing */
12510                         }
12511                         else if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
12512                         {
12513                                 if (one_in_(7))
12514                                 {
12515 #ifdef JP
12516                                         msg_print("¼ö¤¤¤òÁ´¤ÆµÛ¤¤¼è¤Ã¤¿¡£");
12517 #else
12518                                         msg_print("Heavy curse vanished away.");
12519 #endif
12520                                         o_ptr->curse_flags = 0L;
12521                                 }
12522                         }
12523                         else if ((o_ptr->curse_flags & (TRC_CURSED)) && one_in_(3))
12524                         {
12525 #ifdef JP
12526                                 msg_print("¼ö¤¤¤òÁ´¤ÆµÛ¤¤¼è¤Ã¤¿¡£");
12527 #else
12528                                 msg_print("Curse vanished away.");
12529 #endif
12530                                 o_ptr->curse_flags = 0L;
12531                         }
12532
12533                         add = FALSE;
12534                 }
12535                 break;
12536
12537         case 27:
12538 #ifdef JP
12539                 if (name) return "µÛ·ì¤Î¿Ï";
12540                 if (desc) return "µÛ·ì°À­¤Ç¹¶·â¤¹¤ë¡£";
12541 #else
12542                 if (name) return "Swords to vampires";
12543                 if (desc) return "Gives vampiric ability to your weapon.";
12544 #endif
12545                 if (cast)
12546                 {
12547 #ifdef JP
12548                         msg_print("¤¢¤Ê¤¿¤ÎÉð´ï¤¬·ì¤òÍߤ·¤Æ¤¤¤ë¡£");
12549 #else
12550                         if (!empty_hands(FALSE))
12551                                 msg_print("Your weapons want more blood now.");
12552                         else
12553                                 msg_print("Your weapon wants more blood now.");
12554 #endif
12555                 }
12556                 if (stop)
12557                 {
12558 #ifdef JP
12559                         msg_print("Éð´ï¤Î³é˾¤¬¾Ã¤¨µî¤Ã¤¿¡£");
12560 #else
12561                         msg_format("Thirsty of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s");
12562 #endif
12563                 }
12564                 break;
12565
12566         case 28:
12567 #ifdef JP
12568                 if (name) return "Û¯Û°¤Î¸ÀÍÕ";
12569                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤òÛ¯Û°¤È¤µ¤»¤ë¡£";
12570 #else
12571                 if (name) return "Word of stun";
12572                 if (desc) return "Stuns all monsters in your sight.";
12573 #endif
12574                 power = plev * 4;
12575                 if (info) return info_power(power);
12576                 if (cast || cont)
12577                 {
12578                         stun_monsters(power);
12579                 }
12580                 break;
12581
12582         case 29:
12583 #ifdef JP
12584                 if (name) return "±Æ°ÜÆ°";
12585                 if (desc) return "¥â¥ó¥¹¥¿¡¼¤ÎÎ٤Υޥ¹¤Ë½Ö´Ö°ÜÆ°¤¹¤ë¡£";
12586 #else
12587                 if (name) return "Moving into shadow";
12588                 if (desc) return "Teleports you close to a monster.";
12589 #endif
12590                 if (cast)
12591                 {
12592                         int i, y, x, dir;
12593                         bool flag;
12594
12595                         for (i = 0; i < 3; i++)
12596                         {
12597                                 if (!tgt_pt(&x, &y)) return FALSE;
12598
12599                                 flag = FALSE;
12600
12601                                 for (dir = 0; dir < 8; dir++)
12602                                 {
12603                                         int dy = y + ddy_ddd[dir];
12604                                         int dx = x + ddx_ddd[dir];
12605                                         if (dir == 5) continue;
12606                                         if(cave[dy][dx].m_idx) flag = TRUE;
12607                                 }
12608
12609                                 if (!cave_empty_bold(y, x) || (cave[y][x].info & CAVE_ICKY) ||
12610                                         (distance(y, x, py, px) > plev + 2))
12611                                 {
12612 #ifdef JP
12613                                         msg_print("¤½¤³¤Ë¤Ï°ÜÆ°¤Ç¤­¤Ê¤¤¡£");
12614 #else
12615                                         msg_print("Can not teleport to there.");
12616 #endif
12617                                         continue;
12618                                 }
12619                                 break;
12620                         }
12621
12622                         if (flag && randint0(plev * plev / 2))
12623                         {
12624                                 teleport_player_to(y, x, 0L);
12625                         }
12626                         else
12627                         {
12628 #ifdef JP
12629                                 msg_print("¤ª¤Ã¤È¡ª");
12630 #else
12631                                 msg_print("Oops!");
12632 #endif
12633                                 teleport_player(30, 0L);
12634                         }
12635
12636                         add = FALSE;
12637                 }
12638                 break;
12639
12640         case 30:
12641 #ifdef JP
12642                 if (name) return "È¿ËâË¡·ë³¦";
12643                 if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ÎËâË¡¤òÁ˳²¤¹¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
12644 #else
12645                 if (name) return "Anti magic barrier";
12646                 if (desc) return "Obstructs all magic spell of monsters in your sight.";
12647 #endif
12648                 power = plev * 3 / 2;
12649                 if (info) return info_power(power);
12650                 if (cast)
12651                 {
12652 #ifdef JP
12653                         msg_print("ËâË¡¤òËɤ°¼ö¤¤¤ò¤«¤±¤¿¡£");
12654 #else
12655                         msg_print("You feel anyone can not cast spells except you.");
12656 #endif
12657                 }
12658                 break;
12659
12660         case 31:
12661 #ifdef JP
12662                 if (name) return "Éü½²¤ÎÀë¹ð";
12663                 if (desc) return "¿ô¥¿¡¼¥ó¸å¤Ë¤½¤ì¤Þ¤Ç¼õ¤±¤¿¥À¥á¡¼¥¸¤Ë±þ¤¸¤¿°ÒÎϤÎÃϹö¤Î¹å²Ð¤ÎÃƤòÊü¤Ä¡£";
12664 #else
12665                 if (name) return "Revenge sentence";
12666                 if (desc) return "Fires  a ball of hell fire to try revenging after few turns.";
12667 #endif
12668                 power = p_ptr->magic_num1[2];
12669                 if (info) return info_damage(0, 0, power);
12670                 if (cast)
12671                 {
12672                         int r;
12673                         int a = 3 - (p_ptr->pspeed - 100) / 10;
12674                         r = 1 + randint1(2) + MAX(0, MIN(3, a));
12675
12676                         if (p_ptr->magic_num2[2] > 0)
12677                         {
12678 #ifdef JP
12679                                 msg_print("¤¹¤Ç¤ËÉü½²¤ÏÀë¹ðºÑ¤ß¤À¡£");
12680 #else
12681                                 msg_print("You already pronounced your revenge.");
12682 #endif
12683                                 return NULL;
12684                         }
12685
12686                         p_ptr->magic_num2[1] = 2;
12687                         p_ptr->magic_num2[2] = r;
12688 #ifdef JP
12689                         msg_format("¤¢¤Ê¤¿¤ÏÉü½²¤òÀë¹ð¤·¤¿¡£¤¢¤È %d ¥¿¡¼¥ó¡£", r);
12690 #else
12691                         msg_format("You pronounce your revenge. %d turns left.", r);
12692 #endif
12693                         add = FALSE;
12694                 }
12695                 if (cont)
12696                 {
12697                         p_ptr->magic_num2[2]--;
12698
12699                         if (p_ptr->magic_num2[2] <= 0)
12700                         {
12701                                 int dir;
12702
12703                                 if (power)
12704                                 {
12705                                         command_dir = 0;
12706
12707                                         do
12708                                         {
12709 #ifdef JP
12710                                                 msg_print("Éü½²¤Î»þ¤À¡ª");
12711 #else
12712                                                 msg_print("Time to revenge!");
12713 #endif
12714                                         }
12715                                         while (!get_aim_dir(&dir));
12716
12717                                         fire_ball(GF_HELL_FIRE, dir, power, 1);
12718
12719                                         if (p_ptr->wizard)
12720                                         {
12721 #ifdef JP
12722                                                 msg_format("%dÅÀ¤Î¥À¥á¡¼¥¸¤òÊÖ¤·¤¿¡£", power);
12723 #else
12724                                                 msg_format("You return %d damages.", power);
12725 #endif
12726                                         }
12727                                 }
12728                                 else
12729                                 {
12730 #ifdef JP
12731                                         msg_print("Éü½²¤¹¤ëµ¤¤¬¼º¤»¤¿¡£");
12732 #else
12733                                         msg_print("You are not a mood to revenge.");
12734 #endif
12735                                 }
12736                                 p_ptr->magic_num1[2] = 0;
12737                         }
12738                 }
12739                 break;
12740         }
12741
12742         /* start casting */
12743         if ((cast) && (add))
12744         {
12745                 /* add spell */
12746                 p_ptr->magic_num1[0] |= 1L << (spell);
12747                 p_ptr->magic_num2[0]++;
12748
12749                 if (p_ptr->action != ACTION_SPELL) set_action(ACTION_SPELL);
12750         }
12751
12752         /* Redraw status */
12753         if (!info)
12754         {
12755                 p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
12756                 p_ptr->redraw |= (PR_EXTRA | PR_HP | PR_MANA);
12757         }
12758
12759         return "";
12760 }
12761
12762
12763 /*!
12764  * @brief ËâË¡½èÍý¤Î¥á¥¤¥ó¥ë¡¼¥Á¥ó
12765  * @param realm ËâË¡Îΰè¤ÎID
12766  * @param spell ³ÆÎΰè¤ÎËâË¡ID
12767  * @param mode µá¤á¤ë½èÍý
12768  * @return ³ÆÎΰèËâË¡¤Ë³Æ¼ï¥Æ¥­¥¹¥È¤òµá¤á¤¿¾ì¹ç¤Ïʸ»úÎ󻲾ȥݥ¤¥ó¥¿¡¢¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤ÏNULL¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£
12769  */
12770 cptr do_spell(int realm, int spell, int mode)
12771 {
12772         switch (realm)
12773         {
12774         case REALM_LIFE:     return do_life_spell(spell, mode);
12775         case REALM_SORCERY:  return do_sorcery_spell(spell, mode);
12776         case REALM_NATURE:   return do_nature_spell(spell, mode);
12777         case REALM_CHAOS:    return do_chaos_spell(spell, mode);
12778         case REALM_DEATH:    return do_death_spell(spell, mode);
12779         case REALM_TRUMP:    return do_trump_spell(spell, mode);
12780         case REALM_ARCANE:   return do_arcane_spell(spell, mode);
12781         case REALM_CRAFT:    return do_craft_spell(spell, mode);
12782         case REALM_DAEMON:   return do_daemon_spell(spell, mode);
12783         case REALM_CRUSADE:  return do_crusade_spell(spell, mode);
12784         case REALM_MUSIC:    return do_music_spell(spell, mode);
12785         case REALM_HISSATSU: return do_hissatsu_spell(spell, mode);
12786         case REALM_HEX:      return do_hex_spell(spell, mode);
12787         }
12788
12789         return NULL;
12790 }