OSDN Git Service

refactor: drain-life->HP damage, drain-exp->Exp damage
[hengband/hengband.git] / src / racial.c
1 /*!
2  * @file racial.c
3  * @brief ¥ì¥¤¥·¥ã¥ë¤ÈÆÍÁ³ÊѰۤε»Ç½½èÍý / Racial powers (and mutations)
4  * @date 2014/01/08
5  * @author
6  * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n
7  * This software may be copied and distributed for educational, research,\n
8  * and not for profit purposes provided that this copyright and statement\n
9  * are included in all such copies.  Other copyrights may also apply.\n
10  * 2014 Deskull rearranged comment for Doxygen. \n
11  */
12
13 #include "angband.h"
14
15 /*!
16  * @brief ÂоݤΥ¢¥¤¥Æ¥à¤¬Ìð¤ä¥¯¥í¥¹¥Ü¥¦¤ÎÌð¤ÎºàÎÁ¤Ë¤Ê¤ë¤«¤òÊÖ¤¹¡£/
17  * Hook to determine if an object is contertible in an arrow/bolt
18  * @param o_ptr ¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿¡£
19  * @return ºàÎÁ¤Ë¤Ç¤­¤ë¤Ê¤éTRUE¤òÊÖ¤¹
20  */
21 static bool item_tester_hook_convertible(object_type *o_ptr)
22 {
23         if((o_ptr->tval==TV_JUNK) || (o_ptr->tval==TV_SKELETON)) return TRUE;
24
25         if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)) return TRUE;
26         /* Assume not */
27         return (FALSE);
28 }
29
30 /*!
31  * @brief ¥ì¥¤¥·¥ã¥ë¡ÖÃÆ/Ìð¤ÎÀ½Â¤¡×½èÍý / do_cmd_cast calls this function if the player's class is 'archer'.
32  * Hook to determine if an object is contertible in an arrow/bolt
33  * @return À½Â¤¤ò¼ÂºÝ¤Ë¹Ô¤Ã¤¿¤éTRUE¡¢¥­¥ã¥ó¥»¥ë¤·¤¿¤éFALSE¤òÊÖ¤¹
34  */
35 static bool do_cmd_archer(void)
36 {
37         int ext=0;
38         char ch;
39
40         object_type     forge;
41         object_type     *q_ptr;
42
43         char com[80];
44         char o_name[MAX_NLEN];
45
46         q_ptr = &forge;
47
48         if(p_ptr->lev >= 20)
49 #ifdef JP
50                 sprintf(com, "[S]ÃÆ, [A]Ìð, [B]¥¯¥í¥¹¥Ü¥¦¤ÎÌð :");
51 #else
52                 sprintf(com, "Create [S]hots, Create [A]rrow or Create [B]olt ?");
53 #endif
54         else if(p_ptr->lev >= 10)
55 #ifdef JP
56                 sprintf(com, "[S]ÃÆ, [A]Ìð:");
57 #else
58                 sprintf(com, "Create [S]hots or Create [A]rrow ?");
59 #endif
60         else
61 #ifdef JP
62                 sprintf(com, "[S]ÃÆ:");
63 #else
64                 sprintf(com, "Create [S]hots ?");
65 #endif
66
67         if (p_ptr->confused)
68         {
69 #ifdef JP
70                 msg_print("º®Í𤷤Ƥ롪");
71 #else
72                 msg_print("You are too confused!");
73 #endif
74                 return FALSE;
75         }
76
77         if (p_ptr->blind)
78         {
79 #ifdef JP
80                 msg_print("Ìܤ¬¸«¤¨¤Ê¤¤¡ª");
81 #else
82                 msg_print("You are blind!");
83 #endif
84                 return FALSE;
85         }
86
87         while (TRUE)
88         {
89                 if (!get_com(com, &ch, TRUE))
90                 {
91                         return FALSE;
92                 }
93                 if (ch == 'S' || ch == 's')
94                 {
95                         ext = 1;
96                         break;
97                 }
98                 if ((ch == 'A' || ch == 'a')&&(p_ptr->lev >= 10))
99                 {
100                         ext = 2;
101                         break;
102                 }
103                 if ((ch == 'B' || ch == 'b')&&(p_ptr->lev >= 20))
104                 {
105                         ext = 3;
106                         break;
107                 }
108         }
109
110         /**********Create shots*********/
111         if (ext == 1)
112         {
113                 int x,y, dir;
114                 cave_type *c_ptr;
115
116                 if (!get_rep_dir(&dir, FALSE)) return FALSE;
117                 y = py + ddy[dir];
118                 x = px + ddx[dir];
119                 c_ptr = &cave[y][x];
120
121                 if (!have_flag(f_info[get_feat_mimic(c_ptr)].flags, FF_CAN_DIG))
122                 {
123 #ifdef JP
124                         msg_print("¤½¤³¤Ë¤Ï´äÀФ¬¤Ê¤¤¡£");
125 #else
126                         msg_print("You need pile of rubble.");
127 #endif
128                         return FALSE;
129                 }
130                 else if (!cave_have_flag_grid(c_ptr, FF_CAN_DIG) || !cave_have_flag_grid(c_ptr, FF_HURT_ROCK))
131                 {
132 #ifdef JP
133                         msg_print("¹Å¤¹¤®¤ÆÊø¤»¤Ê¤«¤Ã¤¿¡£");
134 #else
135                         msg_print("You failed to make ammo.");
136 #endif
137                 }
138                 else
139                 {
140                         s16b slot;
141
142                         /* Get local object */
143                         q_ptr = &forge;
144
145                         /* Hack -- Give the player some small firestones */
146                         object_prep(q_ptr, lookup_kind(TV_SHOT, m_bonus(1, p_ptr->lev) + 1));
147                         q_ptr->number = (byte)rand_range(15,30);
148                         object_aware(q_ptr);
149                         object_known(q_ptr);
150                         apply_magic(q_ptr, p_ptr->lev, AM_NO_FIXED_ART);
151                         q_ptr->discount = 99;
152
153                         slot = inven_carry(q_ptr);
154
155                         object_desc(o_name, q_ptr, 0);
156 #ifdef JP
157                         msg_format("%s¤òºî¤Ã¤¿¡£", o_name);
158 #else
159                         msg_print("You make some ammo.");
160 #endif
161
162                         /* Auto-inscription */
163                         if (slot >= 0) autopick_alter_item(slot, FALSE);
164
165                         /* Destroy the wall */
166                         cave_alter_feat(y, x, FF_HURT_ROCK);
167
168                         p_ptr->update |= (PU_FLOW);
169                 }
170         }
171         /**********Create arrows*********/
172         else if (ext == 2)
173         {
174                 int item;
175                 cptr q, s;
176                 s16b slot;
177
178                 item_tester_hook = item_tester_hook_convertible;
179
180                 /* Get an item */
181 #ifdef JP
182                 q = "¤É¤Î¥¢¥¤¥Æ¥à¤«¤éºî¤ê¤Þ¤¹¤«¡© ";
183                 s = "ºàÎÁ¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
184 #else
185                 q = "Convert which item? ";
186                 s = "You have no item to convert.";
187 #endif
188                 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
189
190                 /* Get the item (in the pack) */
191                 if (item >= 0)
192                 {
193                         q_ptr = &inventory[item];
194                 }
195
196                 /* Get the item (on the floor) */
197                 else
198                 {
199                         q_ptr = &o_list[0 - item];
200                 }
201
202                 /* Get local object */
203                 q_ptr = &forge;
204
205                 /* Hack -- Give the player some small firestones */
206                 object_prep(q_ptr, lookup_kind(TV_ARROW, m_bonus(1, p_ptr->lev)+ 1));
207                 q_ptr->number = (byte)rand_range(5, 10);
208                 object_aware(q_ptr);
209                 object_known(q_ptr);
210                 apply_magic(q_ptr, p_ptr->lev, AM_NO_FIXED_ART);
211
212                 q_ptr->discount = 99;
213
214                 object_desc(o_name, q_ptr, 0);
215 #ifdef JP
216                 msg_format("%s¤òºî¤Ã¤¿¡£", o_name);
217 #else
218                 msg_print("You make some ammo.");
219 #endif
220
221                 if (item >= 0)
222                 {
223                         inven_item_increase(item, -1);
224                         inven_item_describe(item);
225                         inven_item_optimize(item);
226                 }
227                 else
228                 {
229                         floor_item_increase(0 - item, -1);
230                         floor_item_describe(0 - item);
231                         floor_item_optimize(0 - item);
232                 }
233
234                 slot = inven_carry(q_ptr);
235
236                 /* Auto-inscription */
237                 if (slot >= 0) autopick_alter_item(slot, FALSE);
238         }
239         /**********Create bolts*********/
240         else if (ext == 3)
241         {
242                 int item;
243                 cptr q, s;
244                 s16b slot;
245
246                 item_tester_hook = item_tester_hook_convertible;
247
248                 /* Get an item */
249 #ifdef JP
250                 q = "¤É¤Î¥¢¥¤¥Æ¥à¤«¤éºî¤ê¤Þ¤¹¤«¡© ";
251                 s = "ºàÎÁ¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£";
252 #else
253                 q = "Convert which item? ";
254                 s = "You have no item to convert.";
255 #endif
256                 if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return FALSE;
257
258                 /* Get the item (in the pack) */
259                 if (item >= 0)
260                 {
261                         q_ptr = &inventory[item];
262                 }
263
264                 /* Get the item (on the floor) */
265                 else
266                 {
267                         q_ptr = &o_list[0 - item];
268                 }
269
270                 /* Get local object */
271                 q_ptr = &forge;
272
273                 /* Hack -- Give the player some small firestones */
274                 object_prep(q_ptr, lookup_kind(TV_BOLT, m_bonus(1, p_ptr->lev)+1));
275                 q_ptr->number = (byte)rand_range(4, 8);
276                 object_aware(q_ptr);
277                 object_known(q_ptr);
278                 apply_magic(q_ptr, p_ptr->lev, AM_NO_FIXED_ART);
279
280                 q_ptr->discount = 99;
281
282                 object_desc(o_name, q_ptr, 0);
283 #ifdef JP
284                 msg_format("%s¤òºî¤Ã¤¿¡£", o_name);
285 #else
286                 msg_print("You make some ammo.");
287 #endif
288
289                 if (item >= 0)
290                 {
291                         inven_item_increase(item, -1);
292                         inven_item_describe(item);
293                         inven_item_optimize(item);
294                 }
295                 else
296                 {
297                         floor_item_increase(0 - item, -1);
298                         floor_item_describe(0 - item);
299                         floor_item_optimize(0 - item);
300                 }
301
302                 slot = inven_carry(q_ptr);
303
304                 /* Auto-inscription */
305                 if (slot >= 0) autopick_alter_item(slot, FALSE);
306         }
307         return TRUE;
308 }
309
310 /*!
311  * @brief ËâÆ»¶ñ½Ñ»Õ¤ÎËâÎϼè¤ê¹þ¤ß½èÍý
312  * @return ¼è¤ê¹þ¤ß¤ò¼Â¹Ô¤·¤¿¤éTRUE¡¢¥­¥ã¥ó¥»¥ë¤·¤¿¤éFALSE¤òÊÖ¤¹
313  */
314 bool gain_magic(void)
315 {
316         int item;
317         int pval;
318         int ext = 0;
319         cptr q, s;
320         object_type *o_ptr;
321         char o_name[MAX_NLEN];
322
323         /* Only accept legal items */
324         item_tester_hook = item_tester_hook_recharge;
325
326         /* Get an item */
327 #ifdef JP
328 q = "¤É¤Î¥¢¥¤¥Æ¥à¤ÎËâÎϤò¼è¤ê¹þ¤ß¤Þ¤¹¤«? ";
329 s = "ËâÎϤò¼è¤ê¹þ¤á¤ë¥¢¥¤¥Æ¥à¤¬¤Ê¤¤¡£";
330 #else
331         q = "Gain power of which item? ";
332         s = "You have nothing to gain power.";
333 #endif
334
335         if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return (FALSE);
336
337         /* Get the item (in the pack) */
338         if (item >= 0)
339         {
340                 o_ptr = &inventory[item];
341         }
342
343         /* Get the item (on the floor) */
344         else
345         {
346                 o_ptr = &o_list[0 - item];
347         }
348
349         if (o_ptr->tval == TV_STAFF && o_ptr->sval == SV_STAFF_NOTHING)
350         {
351 #ifdef JP
352                 msg_print("¤³¤Î¾ó¤Ë¤Ïȯư¤Î°Ù¤ÎǽÎϤϲ¿¤âÈ÷¤ï¤Ã¤Æ¤¤¤Ê¤¤¤è¤¦¤À¡£");
353 #else
354                 msg_print("This staff doesn't have any magical ability.");
355 #endif
356                 return FALSE;
357         }
358
359
360         if (!object_is_known(o_ptr))
361         {
362 #ifdef JP
363                 msg_print("´ÕÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¼è¤ê¹þ¤á¤Ê¤¤¡£");
364 #else
365                 msg_print("You need to identify before absorbing.");
366 #endif
367                 return FALSE;
368         }
369
370         if (o_ptr->timeout)
371         {
372 #ifdef JP
373                 msg_print("½¼Å¶Ãæ¤Î¥¢¥¤¥Æ¥à¤Ï¼è¤ê¹þ¤á¤Ê¤¤¡£");
374 #else
375                 msg_print("This item is still charging.");
376 #endif
377                 return FALSE;
378         }
379
380         pval = o_ptr->pval;
381         if (o_ptr->tval == TV_ROD)
382                 ext = 72;
383         else if (o_ptr->tval == TV_WAND)
384                 ext = 36;
385
386         if (o_ptr->tval == TV_ROD)
387         {
388                 p_ptr->magic_num2[o_ptr->sval + ext] += o_ptr->number;
389                 if (p_ptr->magic_num2[o_ptr->sval + ext] > 99) p_ptr->magic_num2[o_ptr->sval + ext] = 99;
390         }
391         else
392         {
393                 int num;
394                 for (num = o_ptr->number; num; num--)
395                 {
396                         int gain_num = pval;
397                         if (o_ptr->tval == TV_WAND) gain_num = (pval + num - 1) / num;
398                         if (p_ptr->magic_num2[o_ptr->sval + ext])
399                         {
400                                 gain_num *= 256;
401                                 gain_num = (gain_num/3 + randint0(gain_num/3)) / 256;
402                                 if (gain_num < 1) gain_num = 1;
403                         }
404                         p_ptr->magic_num2[o_ptr->sval + ext] += gain_num;
405                         if (p_ptr->magic_num2[o_ptr->sval + ext] > 99) p_ptr->magic_num2[o_ptr->sval + ext] = 99;
406                         p_ptr->magic_num1[o_ptr->sval + ext] += pval * 0x10000;
407                         if (p_ptr->magic_num1[o_ptr->sval + ext] > 99 * 0x10000) p_ptr->magic_num1[o_ptr->sval + ext] = 99 * 0x10000;
408                         if (p_ptr->magic_num1[o_ptr->sval + ext] > p_ptr->magic_num2[o_ptr->sval + ext] * 0x10000) p_ptr->magic_num1[o_ptr->sval + ext] = p_ptr->magic_num2[o_ptr->sval + ext] * 0x10000;
409                         if (o_ptr->tval == TV_WAND) pval -= (pval + num - 1) / num;
410                 }
411         }
412
413         object_desc(o_name, o_ptr, 0);
414         /* Message */
415 #ifdef JP
416         msg_format("%s¤ÎËâÎϤò¼è¤ê¹þ¤ó¤À¡£", o_name);
417 #else
418         msg_format("You absorb magic of %s.", o_name);
419 #endif
420
421         /* Eliminate the item (from the pack) */
422         if (item >= 0)
423         {
424                 inven_item_increase(item, -999);
425                 inven_item_describe(item);
426                 inven_item_optimize(item);
427         }
428
429         /* Eliminate the item (from the floor) */
430         else
431         {
432                 floor_item_increase(0 - item, -999);
433                 floor_item_describe(0 - item);
434                 floor_item_optimize(0 - item);
435         }
436         energy_use = 100;
437         return TRUE;
438 }
439
440 /*!
441  * @brief ËâË¡·Ï¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤Ç¤­¤ë¤«¤ÎȽÄê¤òÊÖ¤¹
442  * @return ËâË¡·Ï¥³¥Þ¥ó¥É¤ò»ÈÍѲÄǽ¤Ê¤éTRUE¡¢ÉÔ²Äǽ¤Ê¤é¤ÐÍýͳ¤ò¥á¥Ã¥»¡¼¥¸É½¼¨¤·¤ÆFALSE¤òÊÖ¤¹¡£
443  */
444 static bool can_do_cmd_cast(void)
445 {
446         if (dun_level && (d_info[dungeon_type].flags1 & DF1_NO_MAGIC))
447         {
448 #ifdef JP
449                 msg_print("¥À¥ó¥¸¥ç¥ó¤¬ËâË¡¤òµÛ¼ý¤·¤¿¡ª");
450 #else
451                 msg_print("The dungeon absorbs all attempted magic!");
452 #endif
453                 msg_print(NULL);
454                 return FALSE;
455         }
456         else if (p_ptr->anti_magic)
457         {
458 #ifdef JP
459                 msg_print("È¿ËâË¡¥Ð¥ê¥¢¤¬ËâË¡¤ò¼ÙË⤷¤¿¡ª");
460 #else
461                 msg_print("An anti-magic shell disrupts your magic!");
462 #endif
463                 return FALSE;
464         }
465         else if (p_ptr->shero)
466         {
467 #ifdef JP
468                 msg_format("¶¸Àï»Î²½¤·¤Æ¤¤¤ÆƬ¤¬²ó¤é¤Ê¤¤¡ª");
469 #else
470                 msg_format("You cannot think directly!");
471 #endif
472                 return FALSE;
473         }
474         else
475                 return TRUE;
476 }
477
478 /*!
479  * @brief ½¤¹ÔÁΤ齤¨ÀßÄê½èÍý
480  * @return ¹½¤¨¤òÊѲ½¤µ¤»¤¿¤éTRUE¡¢¹½¤¨ÉÔǽ¤«¥­¥ã¥ó¥»¥ë¤·¤¿¤éFALSE¤òÊÖ¤¹¡£
481  */
482 static bool choose_kamae(void)
483 {
484         char choice;
485         int new_kamae = 0;
486         int i;
487         char buf[80];
488
489         if (p_ptr->confused)
490         {
491 #ifdef JP
492                 msg_print("º®Í𤷤Ƥ¤¤Æ¹½¤¨¤é¤ì¤Ê¤¤¡ª");
493 #else
494                 msg_print("Too confused.");
495 #endif
496                 return FALSE;
497         }
498
499         /* Save screen */
500         screen_save();
501
502 #ifdef JP
503         prt(" a) ¹½¤¨¤ò¤È¤¯", 2, 20);
504 #else
505         prt(" a) No form", 2, 20);
506 #endif
507
508         for (i = 0; i < MAX_KAMAE; i++)
509         {
510                 if (p_ptr->lev >= kamae_shurui[i].min_level)
511                 {
512                         sprintf(buf," %c) %-12s  %s",I2A(i+1), kamae_shurui[i].desc, kamae_shurui[i].info);
513                         prt(buf, 3+i, 20);
514                 }
515         }
516
517         prt("", 1, 0);
518 #ifdef JP
519         prt("        ¤É¤Î¹½¤¨¤ò¤È¤ê¤Þ¤¹¤«¡©", 1, 14);
520 #else
521         prt("        Choose Form: ", 1, 14);
522 #endif
523
524         while(1)
525         {
526                 choice = inkey();
527
528                 if (choice == ESCAPE)
529                 {
530                         screen_load();
531                         return FALSE;
532                 }
533                 else if ((choice == 'a') || (choice == 'A'))
534                 {
535                         if (p_ptr->action == ACTION_KAMAE)
536                         {
537                                 set_action(ACTION_NONE);
538                         }
539                         else
540 #ifdef JP
541                                 msg_print("¤â¤È¤â¤È¹½¤¨¤Æ¤¤¤Ê¤¤¡£");
542 #else
543                                 msg_print("You are not assuming a posture.");
544 #endif
545                         screen_load();
546                         return TRUE;
547                 }
548                 else if ((choice == 'b') || (choice == 'B'))
549                 {
550                         new_kamae = 0;
551                         break;
552                 }
553                 else if (((choice == 'c') || (choice == 'C')) && (p_ptr->lev > 29))
554                 {
555                         new_kamae = 1;
556                         break;
557                 }
558                 else if (((choice == 'd') || (choice == 'D')) && (p_ptr->lev > 34))
559                 {
560                         new_kamae = 2;
561                         break;
562                 }
563                 else if (((choice == 'e') || (choice == 'E')) && (p_ptr->lev > 39))
564                 {
565                         new_kamae = 3;
566                         break;
567                 }
568         }
569         set_action(ACTION_KAMAE);
570
571         if (p_ptr->special_defense & (KAMAE_GENBU << new_kamae))
572         {
573 #ifdef JP
574                 msg_print("¹½¤¨Ä¾¤·¤¿¡£");
575 #else
576                 msg_print("You reassume a posture.");
577 #endif
578         }
579         else
580         {
581                 p_ptr->special_defense &= ~(KAMAE_MASK);
582                 p_ptr->update |= (PU_BONUS);
583                 p_ptr->redraw |= (PR_STATE);
584 #ifdef JP
585                 msg_format("%s¤Î¹½¤¨¤ò¤È¤Ã¤¿¡£",kamae_shurui[new_kamae].desc);
586 #else
587                 msg_format("You assume a posture of %s form.",kamae_shurui[new_kamae].desc);
588 #endif
589                 p_ptr->special_defense |= (KAMAE_GENBU << new_kamae);
590         }
591         p_ptr->redraw |= PR_STATE;
592         screen_load();
593         return TRUE;
594 }
595
596 /*!
597  * @brief ·õ½Ñ²È¤Î·¿ÀßÄê½èÍý
598  * @return ·¿¤òÊѲ½¤µ¤»¤¿¤éTRUE¡¢·¿¤Î¹½¤¨ÉÔǽ¤«¥­¥ã¥ó¥»¥ë¤·¤¿¤éFALSE¤òÊÖ¤¹¡£
599  */
600 static bool choose_kata(void)
601 {
602         char choice;
603         int new_kata = 0;
604         int i;
605         char buf[80];
606
607         if (p_ptr->confused)
608         {
609 #ifdef JP
610                 msg_print("º®Í𤷤Ƥ¤¤Æ¹½¤¨¤é¤ì¤Ê¤¤¡ª");
611 #else
612                 msg_print("Too confused.");
613 #endif
614                 return FALSE;
615         }
616
617         if (p_ptr->stun)
618         {
619 #ifdef JP
620                 msg_print("°Õ¼±¤¬¤Ï¤Ã¤­¤ê¤È¤·¤Ê¤¤¡£");
621 #else
622                 msg_print("You are not clear headed");
623 #endif
624                 return FALSE;
625         }
626
627         if (p_ptr->afraid)
628         {
629 #ifdef JP
630                 msg_print("ÂΤ¬¿Ì¤¨¤Æ¹½¤¨¤é¤ì¤Ê¤¤¡ª");
631 #else
632                 msg_print("You are trembling with fear!");
633 #endif
634                 return FALSE;
635         }
636
637         /* Save screen */
638         screen_save();
639
640 #ifdef JP
641         prt(" a) ·¿¤òÊø¤¹", 2, 20);
642 #else
643         prt(" a) No Form", 2, 20);
644 #endif
645
646         for (i = 0; i < MAX_KATA; i++)
647         {
648                 if (p_ptr->lev >= kata_shurui[i].min_level)
649                 {
650 #ifdef JP
651                         sprintf(buf," %c) %s¤Î·¿    %s",I2A(i+1), kata_shurui[i].desc, kata_shurui[i].info);
652 #else
653                         sprintf(buf," %c) Form of %-12s  %s",I2A(i+1), kata_shurui[i].desc, kata_shurui[i].info);
654 #endif
655                         prt(buf, 3+i, 20);
656                 }
657         }
658
659         prt("", 1, 0);
660 #ifdef JP
661         prt("        ¤É¤Î·¿¤Ç¹½¤¨¤Þ¤¹¤«¡©", 1, 14);
662 #else
663         prt("        Choose Form: ", 1, 14);
664 #endif
665
666         while(1)
667         {
668                 choice = inkey();
669
670                 if (choice == ESCAPE)
671                 {
672                         screen_load();
673                         return FALSE;
674                 }
675                 else if ((choice == 'a') || (choice == 'A'))
676                 {
677                         if (p_ptr->action == ACTION_KATA)
678                         {
679                                 set_action(ACTION_NONE);
680                         }
681                         else
682 #ifdef JP
683                                 msg_print("¤â¤È¤â¤È¹½¤¨¤Æ¤¤¤Ê¤¤¡£");
684 #else
685                                 msg_print("You are not assuming posture.");
686 #endif
687                         screen_load();
688                         return TRUE;
689                 }
690                 else if ((choice == 'b') || (choice == 'B'))
691                 {
692                         new_kata = 0;
693                         break;
694                 }
695                 else if (((choice == 'c') || (choice == 'C')) && (p_ptr->lev > 29))
696                 {
697                         new_kata = 1;
698                         break;
699                 }
700                 else if (((choice == 'd') || (choice == 'D')) && (p_ptr->lev > 34))
701                 {
702                         new_kata = 2;
703                         break;
704                 }
705                 else if (((choice == 'e') || (choice == 'E')) && (p_ptr->lev > 39))
706                 {
707                         new_kata = 3;
708                         break;
709                 }
710         }
711         set_action(ACTION_KATA);
712
713         if (p_ptr->special_defense & (KATA_IAI << new_kata))
714         {
715 #ifdef JP
716                 msg_print("¹½¤¨Ä¾¤·¤¿¡£");
717 #else
718                 msg_print("You reassume a posture.");
719 #endif
720         }
721         else
722         {
723                 p_ptr->special_defense &= ~(KATA_MASK);
724                 p_ptr->update |= (PU_BONUS);
725                 p_ptr->update |= (PU_MONSTERS);
726 #ifdef JP
727                 msg_format("%s¤Î·¿¤Ç¹½¤¨¤¿¡£",kata_shurui[new_kata].desc);
728 #else
729                 msg_format("You assume a posture of %s form.",kata_shurui[new_kata].desc);
730 #endif
731                 p_ptr->special_defense |= (KATA_IAI << new_kata);
732         }
733         p_ptr->redraw |= (PR_STATE);
734         p_ptr->redraw |= (PR_STATUS);
735         screen_load();
736         return TRUE;
737 }
738
739
740 /*!
741  * @brief ¥ì¥¤¥·¥ã¥ë¡¦¥Ñ¥ï¡¼¾ðÊó¤Îtypedef
742  */
743 typedef struct power_desc_type power_desc_type;
744
745 /*!
746  * @brief ¥ì¥¤¥·¥ã¥ë¡¦¥Ñ¥ï¡¼¾ðÊó¤Î¹½Â¤ÂÎÄêµÁ
747  */
748 struct power_desc_type
749 {
750         char name[40];
751         int  level;
752         int  cost;
753         int  stat;
754         int  fail;
755         int  number;
756 };
757
758
759 /*!
760  * @brief ¥ì¥¤¥·¥ã¥ë¡¦¥Ñ¥ï¡¼¤ÎȯưÀ®¸ùΨ¤ò·×»»¤¹¤ë / Returns the chance to activate a racial power/mutation
761  * @param pd_ptr È¯Æ°¤·¤¿¤¤¥ì¥¤¥·¥ã¥ë¡¦¥Ñ¥ï¡¼¾ðÊó¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
762  * @return À®¸ùΨ(%)¤òÊÖ¤¹
763  */
764 static int racial_chance(power_desc_type *pd_ptr)
765 {
766         s16b min_level  = pd_ptr->level;
767         int  difficulty = pd_ptr->fail;
768
769         int i;
770         int val;
771         int sum = 0;
772         int stat = p_ptr->stat_cur[pd_ptr->stat];
773
774         /* No chance for success */
775         if ((p_ptr->lev < min_level) || p_ptr->confused)
776         {
777                 return (0);
778         }
779
780         if (difficulty == 0) return 100;
781
782         /* Calculate difficulty */
783         if (p_ptr->stun)
784         {
785                 difficulty += p_ptr->stun;
786         }
787         else if (p_ptr->lev > min_level)
788         {
789                 int lev_adj = ((p_ptr->lev - min_level) / 3);
790                 if (lev_adj > 10) lev_adj = 10;
791                 difficulty -= lev_adj;
792         }
793
794         if (difficulty < 5) difficulty = 5;
795
796         /* We only need halfs of the difficulty */
797         difficulty = difficulty / 2;
798
799         for (i = 1; i <= stat; i++)
800         {
801                 val = i - difficulty;
802                 if (val > 0)
803                         sum += (val <= difficulty) ? val : difficulty;
804         }
805
806         if (difficulty == 0)
807                 return (100);
808         else
809                 return (((sum * 100) / difficulty) / stat);
810 }
811
812
813 static int  racial_cost;
814
815 /*!
816  * @brief ¥ì¥¤¥·¥ã¥ë¡¦¥Ñ¥ï¡¼¤Îȯư¤ÎȽÄê½èÍý
817  * @param pd_ptr È¯Æ°¤·¤¿¤¤¥ì¥¤¥·¥ã¥ë¡¦¥Ñ¥ï¡¼¾ðÊó¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
818  * @return
819  * È¯Æ°À®¸ù¤Ê¤é¤Ð1¡¢È¯Æ°¼ºÇԤʤé¤Ð-1¡¢¥­¥ã¥ó¥»¥ë¤Ê¤é¤Ð0¤òÊÖ¤¹¡£
820  * return value indicates that we have succesfully used the power 1: Succeeded, 0: Cancelled, -1: Failed
821  */
822 static int racial_aux(power_desc_type *pd_ptr)
823 {
824         s16b min_level  = pd_ptr->level;
825         int  use_stat   = pd_ptr->stat;
826         int  difficulty = pd_ptr->fail;
827         int  use_hp = 0;
828
829         racial_cost = pd_ptr->cost;
830
831         /* Not enough mana - use hp */
832         if (p_ptr->csp < racial_cost) use_hp = racial_cost - p_ptr->csp;
833
834         /* Power is not available yet */
835         if (p_ptr->lev < min_level)
836         {
837 #ifdef JP
838                 msg_format("¤³¤ÎǽÎϤò»ÈÍѤ¹¤ë¤Ë¤Ï¥ì¥Ù¥ë %d ¤Ë㤷¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£", min_level);
839 #else
840                 msg_format("You need to attain level %d to use this power.", min_level);
841 #endif
842
843                 energy_use = 0;
844                 return 0;
845         }
846
847         /* Too confused */
848         else if (p_ptr->confused)
849         {
850 #ifdef JP
851                 msg_print("º®Í𤷤Ƥ¤¤Æ¤½¤ÎǽÎϤϻȤ¨¤Ê¤¤¡£");
852 #else
853                 msg_print("You are too confused to use this power.");
854 #endif
855
856                 energy_use = 0;
857                 return 0;
858         }
859
860         /* Risk death? */
861         else if (p_ptr->chp < use_hp)
862         {
863 #ifdef JP
864                 if (!get_check("ËÜÅö¤Ëº£¤Î¿ê¼å¤·¤¿¾õÂ֤Ǥ³¤ÎǽÎϤò»È¤¤¤Þ¤¹¤«¡©"))
865 #else
866                 if (!get_check("Really use the power in your weakened state? "))
867 #endif
868                 {
869                         energy_use = 0;
870                         return 0;
871                 }
872         }
873
874         /* Else attempt to do it! */
875
876         if (difficulty)
877         {
878                 if (p_ptr->stun)
879                 {
880                         difficulty += p_ptr->stun;
881                 }
882                 else if (p_ptr->lev > min_level)
883                 {
884                         int lev_adj = ((p_ptr->lev - min_level) / 3);
885                         if (lev_adj > 10) lev_adj = 10;
886                         difficulty -= lev_adj;
887                 }
888
889                 if (difficulty < 5) difficulty = 5;
890         }
891
892         /* take time and pay the price */
893         energy_use = 100;
894
895         /* Success? */
896         if (randint1(p_ptr->stat_cur[use_stat]) >=
897             ((difficulty / 2) + randint1(difficulty / 2)))
898         {
899                 return 1;
900         }
901
902         if (flush_failure) flush();
903 #ifdef JP
904         msg_print("½¼Ê¬¤Ë½¸Ãæ¤Ç¤­¤Ê¤«¤Ã¤¿¡£");
905 #else
906         msg_print("You've failed to concentrate hard enough.");
907 #endif
908
909         return -1;
910 }
911
912 /*!
913  * @brief ¥ì¥¤¥·¥ã¥ë¡¦¥Ñ¥ï¡¼È¯Æ°»þ¤Ë¸ý¤ò»È¤¦·Ñ³Ū¤Ê±Ó¾§½èÍý¤òÃæÃǤ¹¤ë
914  * @return ¤Ê¤·
915  */
916 void ratial_stop_mouth()
917 {
918         if (music_singing_any()) stop_singing();
919         if (hex_spelling_any()) stop_hex_spell_all();
920 }
921
922 /*!
923  * @brief ¥ì¥¤¥·¥ã¥ë¡¦¥Ñ¥ï¡¼È¯Æ°½èÍý
924  * @param command È¯Æ°¤¹¤ë¥ì¥¤¥·¥ã¥ë¤ÎID
925  * @return ½èÍý¤ò¼ÂºÝ¤Ë¼Â¹Ô¤·¤¿¾ì¹ç¤ÏTRUE¡¢¥­¥ã¥ó¥»¥ë¤·¤¿¾ì¹çFALSE¤òÊÖ¤¹¡£
926  */
927 static bool cmd_racial_power_aux(s32b command)
928 {
929         s16b        plev = p_ptr->lev;
930         int         dir = 0;
931
932         if (command <= -3)
933         {
934                 switch (p_ptr->pclass)
935                 {
936                 case CLASS_WARRIOR:
937                 {
938                         int y = 0, x = 0, i;
939                         cave_type       *c_ptr;
940
941                         for (i = 0; i < 6; i++)
942                         {
943                                 dir = randint0(8);
944                                 y = py + ddy_ddd[dir];
945                                 x = px + ddx_ddd[dir];
946                                 c_ptr = &cave[y][x];
947
948                                 /* Hack -- attack monsters */
949                                 if (c_ptr->m_idx)
950                                         py_attack(y, x, 0);
951                                 else
952                                 {
953 #ifdef JP
954                                         msg_print("¹¶·â¤¬¶õ¤ò¤­¤Ã¤¿¡£");
955 #else
956                                         msg_print("You attack the empty air.");
957 #endif
958                                 }
959                         }
960                         break;
961                 }
962                 case CLASS_HIGH_MAGE:
963                 if (p_ptr->realm1 == REALM_HEX)
964                 {
965                         bool retval = stop_hex_spell();
966                         if (retval) energy_use = 10;
967                         return (retval);
968                 }
969                 case CLASS_MAGE:
970                 /* case CLASS_HIGH_MAGE: */
971                 case CLASS_SORCERER:
972                 {
973                         if (!eat_magic(p_ptr->lev * 2)) return FALSE;
974                         break;
975                 }
976                 case CLASS_PRIEST:
977                 {
978                         if (is_good_realm(p_ptr->realm1))
979                         {
980                                 if (!bless_weapon()) return FALSE;
981                         }
982                         else
983                         {
984                                 (void)dispel_monsters(plev * 4);
985                                 turn_monsters(plev * 4);
986                                 banish_monsters(plev * 4);
987                         }
988                         break;
989                 }
990                 case CLASS_ROGUE:
991                 {
992                         int x, y;
993
994                         if (!get_rep_dir(&dir, FALSE)) return FALSE;
995                         y = py + ddy[dir];
996                         x = px + ddx[dir];
997                         if (cave[y][x].m_idx)
998                         {
999                                 py_attack(y, x, 0);
1000                                 if (randint0(p_ptr->skill_dis) < 7)
1001 #ifdef JP
1002                                         msg_print("¤¦¤Þ¤¯Æ¨¤²¤é¤ì¤Ê¤«¤Ã¤¿¡£");
1003 #else
1004                                         msg_print("You are failed to run away.");
1005 #endif
1006                                 else teleport_player(30, 0L);
1007                         }
1008                         else
1009                         {
1010 #ifdef JP
1011                                 msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
1012 #else
1013                                 msg_print("You don't see any monster in this direction");
1014 #endif
1015
1016                                 msg_print(NULL);
1017                         }
1018                         break;
1019                 }
1020                 case CLASS_RANGER:
1021                 case CLASS_SNIPER:
1022                 {
1023 #ifdef JP
1024                         msg_print("Ũ¤òÄ´ºº¤·¤¿...");
1025 #else
1026                         msg_print("You examine your foes...");
1027 #endif
1028
1029                         probing();
1030                         break;
1031                 }
1032                 case CLASS_PALADIN:
1033                 {
1034                         if (!get_aim_dir(&dir)) return FALSE;
1035                         fire_beam(is_good_realm(p_ptr->realm1) ? GF_HOLY_FIRE : GF_HELL_FIRE,
1036                                   dir, plev * 3);
1037                         break;
1038                 }
1039                 case CLASS_WARRIOR_MAGE:
1040                 {
1041                         if (command == -3)
1042                         {
1043 #ifdef JP
1044                                 int gain_sp = take_hit(DAMAGE_USELIFE, p_ptr->lev, "£È£Ð¤«¤é£Í£Ð¤Ø¤Î̵ËŤÊÊÑ´¹", -1) / 5;
1045 #else
1046                                 int gain_sp = take_hit(DAMAGE_USELIFE, p_ptr->lev, "thoughtless convertion from HP to SP", -1) / 5;
1047 #endif
1048                                 if (gain_sp)
1049                                 {
1050                                         p_ptr->csp += gain_sp;
1051                                         if (p_ptr->csp > p_ptr->msp)
1052                                         {
1053                                                 p_ptr->csp = p_ptr->msp;
1054                                                 p_ptr->csp_frac = 0;
1055                                         }
1056                                 }
1057                                 else
1058 #ifdef JP
1059                                         msg_print("ÊÑ´¹¤Ë¼ºÇÔ¤·¤¿¡£");
1060 #else
1061                                         msg_print("You failed to convert.");
1062 #endif
1063                         }
1064                         else if (command == -4)
1065                         {
1066                                 if (p_ptr->csp >= p_ptr->lev / 5)
1067                                 {
1068                                         p_ptr->csp -= p_ptr->lev / 5;
1069                                         hp_player(p_ptr->lev);
1070                                 }
1071                                 else
1072 #ifdef JP
1073                                         msg_print("ÊÑ´¹¤Ë¼ºÇÔ¤·¤¿¡£");
1074 #else
1075                                         msg_print("You failed to convert.");
1076 #endif
1077                         }
1078
1079                         /* Redraw mana and hp */
1080                         p_ptr->redraw |= (PR_HP | PR_MANA);
1081
1082                         break;
1083                 }
1084                 case CLASS_CHAOS_WARRIOR:
1085                 {
1086 #ifdef JP
1087                         msg_print("ÊÕ¤ê¤òâˤó¤À...");
1088 #else
1089                         msg_print("You glare nearby monsters...");
1090 #endif
1091                         slow_monsters(p_ptr->lev);
1092                         stun_monsters(p_ptr->lev * 4);
1093                         confuse_monsters(p_ptr->lev * 4);
1094                         turn_monsters(p_ptr->lev * 4);
1095                         stasis_monsters(p_ptr->lev * 4);
1096                         break;
1097                 }
1098                 case CLASS_MONK:
1099                 {
1100                         if (!(empty_hands(TRUE) & EMPTY_HAND_RARM))
1101                         {
1102 #ifdef JP
1103                                 msg_print("ÁǼꤸ¤ã¤Ê¤¤¤È¤Ç¤­¤Þ¤»¤ó¡£");
1104 #else
1105                                 msg_print("You need to be bare hand.");
1106 #endif
1107                                 return FALSE;
1108                         }
1109                         if (p_ptr->riding)
1110                         {
1111 #ifdef JP
1112                                 msg_print("¾èÇÏÃæ¤Ï¤Ç¤­¤Þ¤»¤ó¡£");
1113 #else
1114                                 msg_print("You need to get off a pet.");
1115 #endif
1116                                 return FALSE;
1117                         }
1118
1119                         if (command == -3)
1120                         {
1121                                 if (!choose_kamae()) return FALSE;
1122                                 p_ptr->update |= (PU_BONUS);
1123                         }
1124                         else if (command == -4)
1125                         {
1126                                 int x, y;
1127
1128                                 if (!get_rep_dir(&dir, FALSE)) return FALSE;
1129                                 y = py + ddy[dir];
1130                                 x = px + ddx[dir];
1131                                 if (cave[y][x].m_idx)
1132                                 {
1133 #ifdef JP
1134                                         if (one_in_(2)) msg_print("¤¢¡¼¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¤¿¡ª¡ª¡ª");
1135                                         else msg_print("¥ª¥é¥ª¥é¥ª¥é¥ª¥é¥ª¥é¥ª¥é¥ª¥é¥ª¥é¥ª¥é¥ª¥é¥ª¥é¥ª¥é¡ª¡ª¡ª");
1136 #else
1137                                         if (one_in_(2)) msg_print("Ahhhtatatatatatatatatatatatatatataatatatatattaaaaa!!!!");
1138                                         else msg_print("Oraoraoraoraoraoraoraoraoraoraoraoraoraoraoraoraora!!!!");
1139 #endif
1140
1141                                         py_attack(y, x, 0);
1142                                         if (cave[y][x].m_idx)
1143                                         {
1144                                                 handle_stuff();
1145                                                 py_attack(y, x, 0);
1146                                         }
1147                                         p_ptr->energy_need += ENERGY_NEED();
1148                                 }
1149                                 else
1150                                 {
1151 #ifdef JP
1152                                         msg_print("¤½¤ÎÊý¸þ¤Ë¤Ï¥â¥ó¥¹¥¿¡¼¤Ï¤¤¤Þ¤»¤ó¡£");
1153 #else
1154                                         msg_print("You don't see any monster in this direction");
1155 #endif
1156
1157                                         msg_print(NULL);
1158                                 }
1159                         }
1160                         break;
1161                 }
1162                 case CLASS_MINDCRAFTER:
1163                 case CLASS_FORCETRAINER:
1164                 {
1165                         if (total_friends)
1166                         {
1167 #ifdef JP
1168                                 msg_print("º£¤Ï¥Ú¥Ã¥È¤òÁà¤ë¤³¤È¤Ë½¸Ã椷¤Æ¤¤¤Ê¤¤¤È¡£");
1169 #else
1170                                 msg_print("You need concentration on the pets now.");
1171 #endif
1172                                 return FALSE;
1173                         }
1174 #ifdef JP
1175                         msg_print("¾¯¤·Æ¬¤¬¥Ï¥Ã¥­¥ê¤·¤¿¡£");
1176 #else
1177                         msg_print("You feel your head clear a little.");
1178 #endif
1179
1180                         p_ptr->csp += (3 + p_ptr->lev/20);
1181                         if (p_ptr->csp >= p_ptr->msp)
1182                         {
1183                                 p_ptr->csp = p_ptr->msp;
1184                                 p_ptr->csp_frac = 0;
1185                         }
1186
1187                         /* Redraw mana */
1188                         p_ptr->redraw |= (PR_MANA);
1189                         break;
1190                 }
1191                 case CLASS_TOURIST:
1192                 {
1193                         if (command == -3)
1194                         {
1195                                 if (!get_aim_dir(&dir)) return FALSE;
1196                                 project_length = 1;
1197                                 fire_beam(GF_PHOTO, dir, 1);
1198                         }
1199                         else if (command == -4)
1200                         {
1201                                 if (!identify_fully(FALSE)) return FALSE;
1202                         }
1203                         break;
1204                 }
1205                 case CLASS_IMITATOR:
1206                 {
1207                         handle_stuff();
1208                         if (!do_cmd_mane(TRUE)) return FALSE;
1209                         break;
1210                 }
1211                 case CLASS_BEASTMASTER:
1212                 {
1213                         if (command == -3)
1214                         {
1215                                 if (!get_aim_dir(&dir)) return FALSE;
1216                                 (void)fire_ball_hide(GF_CONTROL_LIVING, dir, p_ptr->lev, 0);
1217                         }
1218                         else if (command == -4)
1219                         {
1220                                 project_hack(GF_CONTROL_LIVING, p_ptr->lev);
1221                         }
1222                         break;
1223                 }
1224                 case CLASS_ARCHER:
1225                 {
1226                         if (!do_cmd_archer()) return FALSE;
1227                         break;
1228                 }
1229                 case CLASS_MAGIC_EATER:
1230                 {
1231                         if (command == -3) {
1232                                 if (!gain_magic()) return FALSE;
1233                         } else if (command == -4) {
1234                                 if (!can_do_cmd_cast()) return FALSE;
1235                                 if (!do_cmd_magic_eater(FALSE, TRUE)) return FALSE;
1236                         }
1237                         break;
1238                 }
1239                 case CLASS_BARD:
1240                 {
1241                         /* Singing is already stopped */
1242                         if (!p_ptr->magic_num1[0] && !p_ptr->magic_num1[1]) return FALSE;
1243
1244                         stop_singing();
1245                         energy_use = 10;
1246                         break;
1247                 }
1248                 case CLASS_RED_MAGE:
1249                 {
1250                         if (!can_do_cmd_cast()) return FALSE;
1251                         handle_stuff();
1252                         do_cmd_cast();
1253                         handle_stuff();
1254                         if (!p_ptr->paralyzed && can_do_cmd_cast())
1255                                 do_cmd_cast();
1256                         break;
1257                 }
1258                 case CLASS_SAMURAI:
1259                 {
1260                         if (command == -3)
1261                         {
1262                                 int max_csp = MAX(p_ptr->msp*4, p_ptr->lev*5+5);
1263
1264                                 if (total_friends)
1265                                 {
1266 #ifdef JP
1267                                         msg_print("º£¤Ï¥Ú¥Ã¥È¤òÁà¤ë¤³¤È¤Ë½¸Ã椷¤Æ¤¤¤Ê¤¤¤È¡£");
1268 #else
1269                                         msg_print("You need concentration on the pets now.");
1270 #endif
1271                                         return FALSE;
1272                                 }
1273                                 if (p_ptr->special_defense & KATA_MASK)
1274                                 {
1275 #ifdef JP
1276                                         msg_print("º£¤Ï¹½¤¨¤Ë½¸Ã椷¤Æ¤¤¤ë¡£");
1277 #else
1278                                         msg_print("You need concentration on your form.");
1279 #endif
1280                                         return FALSE;
1281                                 }
1282 #ifdef JP
1283                                 msg_print("Àº¿À¤ò½¸Ã椷¤Æµ¤¹ç¤¤¤òί¤á¤¿¡£");
1284 #else
1285                                 msg_print("You concentrate to charge your power.");
1286 #endif
1287
1288                                 p_ptr->csp += p_ptr->msp / 2;
1289                                 if (p_ptr->csp >= max_csp)
1290                                 {
1291                                         p_ptr->csp = max_csp;
1292                                         p_ptr->csp_frac = 0;
1293                                 }
1294
1295                                 /* Redraw mana */
1296                                 p_ptr->redraw |= (PR_MANA);
1297                         }
1298                         else if (command == -4)
1299                         {
1300                                 if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
1301                                 {
1302 #ifdef JP
1303                                         msg_print("Éð´ï¤ò»ý¤¿¤Ê¤¤¤È¤¤¤±¤Þ¤»¤ó¡£");
1304 #else
1305                                         msg_print("You need to wield a weapon.");
1306 #endif
1307                                         return FALSE;
1308                                 }
1309                                 if (!choose_kata()) return FALSE;
1310                                 p_ptr->update |= (PU_BONUS);
1311                         }
1312                         break;
1313                 }
1314                 case CLASS_BLUE_MAGE:
1315                 {
1316                         if (p_ptr->action == ACTION_LEARN)
1317                         {
1318                                 set_action(ACTION_NONE);
1319                         }
1320                         else
1321                         {
1322                                 set_action(ACTION_LEARN);
1323                         }
1324                         energy_use = 0;
1325                         break;
1326                 }
1327                 case CLASS_CAVALRY:
1328                 {
1329                         char m_name[80];
1330                         monster_type *m_ptr;
1331                         monster_race *r_ptr;
1332                         int rlev;
1333
1334                         if (p_ptr->riding)
1335                         {
1336 #ifdef JP
1337                                 msg_print("º£¤Ï¾èÇÏÃæ¤À¡£");
1338 #else
1339                                 msg_print("You ARE riding.");
1340 #endif
1341                                 return FALSE;
1342                         }
1343                         if (!do_riding(TRUE)) return TRUE;
1344                         m_ptr = &m_list[p_ptr->riding];
1345                         r_ptr = &r_info[m_ptr->r_idx];
1346                         monster_desc(m_name, m_ptr, 0);
1347 #ifdef JP
1348                         msg_format("%s¤Ë¾è¤Ã¤¿¡£",m_name);
1349 #else
1350                         msg_format("You ride on %s.",m_name);
1351 #endif
1352                         if (is_pet(m_ptr)) break;
1353                         rlev = r_ptr->level;
1354                         if (r_ptr->flags1 & RF1_UNIQUE) rlev = rlev * 3 / 2;
1355                         if (rlev > 60) rlev = 60+(rlev-60)/2;
1356                         if ((randint1(p_ptr->skill_exp[GINOU_RIDING] / 120 + p_ptr->lev * 2 / 3) > rlev)
1357                             && one_in_(2) && !p_ptr->inside_arena && !p_ptr->inside_battle
1358                             && !(r_ptr->flags7 & (RF7_GUARDIAN)) && !(r_ptr->flags1 & (RF1_QUESTOR))
1359                             && (rlev < p_ptr->lev * 3 / 2 + randint0(p_ptr->lev / 5)))
1360                         {
1361 #ifdef JP
1362                                 msg_format("%s¤ò¼ê¤Ê¤º¤±¤¿¡£",m_name);
1363 #else
1364                                 msg_format("You tame %s.",m_name);
1365 #endif
1366                                 set_pet(m_ptr);
1367                         }
1368                         else
1369                         {
1370 #ifdef JP
1371                                 msg_format("%s¤Ë¿¶¤êÍî¤È¤µ¤ì¤¿¡ª",m_name);
1372 #else
1373                                 msg_format("You have thrown off by %s.",m_name);
1374 #endif
1375                                 rakuba(1,TRUE);
1376
1377                                 /* Paranoia */
1378                                 /* ÍîÇϽèÍý¤Ë¼ºÇÔ¤·¤Æ¤â¤È¤Ë¤«¤¯¾èÇϲò½ü */
1379                                 p_ptr->riding = 0;
1380                         }
1381                         break;
1382                 }
1383                 case CLASS_BERSERKER:
1384                 {
1385                         if (!word_of_recall()) return FALSE;
1386                         break;
1387                 }
1388                 case CLASS_SMITH:
1389                 {
1390                         if (p_ptr->lev > 29)
1391                         {
1392                                 if (!identify_fully(TRUE)) return FALSE;
1393                         }
1394                         else
1395                         {
1396                                 if (!ident_spell(TRUE)) return FALSE;
1397                         }
1398                         break;
1399                 }
1400                 case CLASS_MIRROR_MASTER:
1401                 {
1402                         if (command == -3)
1403                         {
1404                                 /* Explode all mirrors */
1405                                 remove_all_mirrors(TRUE);
1406                         }
1407                         else if (command == -4)
1408                         {
1409                                 if (total_friends)
1410                                 {
1411 #ifdef JP
1412                                         msg_print("º£¤Ï¥Ú¥Ã¥È¤òÁà¤ë¤³¤È¤Ë½¸Ã椷¤Æ¤¤¤Ê¤¤¤È¡£");
1413 #else
1414                                         msg_print("You need concentration on the pets now.");
1415 #endif
1416                                         return FALSE;
1417                                 }
1418                                 if (is_mirror_grid(&cave[py][px]))
1419                                 {
1420 #ifdef JP
1421                                         msg_print("¾¯¤·Æ¬¤¬¥Ï¥Ã¥­¥ê¤·¤¿¡£");
1422 #else
1423                                         msg_print("You feel your head clear a little.");
1424 #endif
1425
1426                                         p_ptr->csp += (5 + p_ptr->lev * p_ptr->lev / 100);
1427                                         if (p_ptr->csp >= p_ptr->msp)
1428                                         {
1429                                                 p_ptr->csp = p_ptr->msp;
1430                                                 p_ptr->csp_frac = 0;
1431                                         }
1432
1433                                         /* Redraw mana */
1434                                         p_ptr->redraw |= (PR_MANA);
1435                                 }
1436                                 else
1437                                 {
1438 #ifdef JP
1439                                         msg_print("¶À¤Î¾å¤Ç¤Ê¤¤¤È½¸Ãæ¤Ç¤­¤Ê¤¤¡ª");
1440 #else
1441                                         msg_print("Here are not any mirrors!");
1442 #endif
1443                                 }
1444                         }
1445                         break;
1446                 }
1447                 case CLASS_NINJA:
1448                 {
1449                         if (p_ptr->action == ACTION_HAYAGAKE)
1450                         {
1451                                 set_action(ACTION_NONE);
1452                         }
1453                         else
1454                         {
1455                                 cave_type *c_ptr = &cave[py][px];
1456                                 feature_type *f_ptr = &f_info[c_ptr->feat];
1457
1458                                 if (!have_flag(f_ptr->flags, FF_PROJECT) ||
1459                                     (!p_ptr->levitation && have_flag(f_ptr->flags, FF_DEEP)))
1460                                 {
1461 #ifdef JP
1462                                         msg_print("¤³¤³¤Ç¤ÏÁÇÁ᤯ư¤±¤Ê¤¤¡£");
1463 #else
1464                                         msg_print("You cannot run in here.");
1465 #endif
1466                                 }
1467                                 else
1468                                 {
1469                                         set_action(ACTION_HAYAGAKE);
1470                                 }
1471                         }
1472
1473
1474                         energy_use = 0;
1475                         break;
1476                 }
1477
1478                 }
1479         }
1480         else if (p_ptr->mimic_form)
1481         {
1482                 switch (p_ptr->mimic_form)
1483                 {
1484                 case MIMIC_DEMON:
1485                 case MIMIC_DEMON_LORD:
1486                 {
1487                         int type = (one_in_(2) ? GF_NETHER : GF_FIRE);
1488                         if (!get_aim_dir(&dir)) return FALSE;
1489                         ratial_stop_mouth();
1490 #ifdef JP
1491                         msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£",((type == GF_NETHER) ? "ÃϹö" : "²Ð±ê"));
1492 #else
1493                         msg_format("You breathe %s.",((type == GF_NETHER) ? "nether" : "fire"));
1494 #endif
1495
1496                         fire_ball(type, dir, plev * 3, -(plev / 15) - 1);
1497                         break;
1498                 }
1499                 case MIMIC_VAMPIRE:
1500                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
1501                         {
1502 #ifdef JP
1503                                 msg_print("¤Ê¤¼¤«¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£");
1504 #else
1505                                 msg_print("Something prevent you from attacking.");
1506 #endif
1507                                 return FALSE;
1508                         }
1509                         else
1510                         {
1511                                 int y, x, dummy = 0;
1512                                 cave_type *c_ptr;
1513
1514                                 /* Only works on adjacent monsters */
1515                                 if (!get_rep_dir(&dir, FALSE)) return FALSE;   /* was get_aim_dir */
1516                                 y = py + ddy[dir];
1517                                 x = px + ddx[dir];
1518                                 c_ptr = &cave[y][x];
1519
1520                                 ratial_stop_mouth();
1521
1522                                 if (!c_ptr->m_idx)
1523                                 {
1524 #ifdef JP
1525                                         msg_print("²¿¤â¤Ê¤¤¾ì½ê¤Ë³ú¤ß¤Ä¤¤¤¿¡ª");
1526 #else
1527                                         msg_print("You bite into thin air!");
1528 #endif
1529
1530                                         break;
1531                                 }
1532
1533 #ifdef JP
1534                                 msg_print("¤¢¤Ê¤¿¤Ï¥Ë¥ä¥ê¤È¤·¤Æ²ç¤ò¤à¤¤¤¿...");
1535 #else
1536                                 msg_print("You grin and bare your fangs...");
1537 #endif
1538
1539                                 dummy = plev + randint1(plev) * MAX(1, plev / 10);   /* Dmg */
1540                                 if (drain_life(dir, dummy))
1541                                 {
1542                                         if (p_ptr->food < PY_FOOD_FULL)
1543                                                 /* No heal if we are "full" */
1544                                                 (void)hp_player(dummy);
1545                                         else
1546 #ifdef JP
1547                                                 msg_print("¤¢¤Ê¤¿¤Ï¶õÊ¢¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£");
1548 #else
1549                                                 msg_print("You were not hungry.");
1550 #endif
1551
1552                                         /* Gain nutritional sustenance: 150/hp drained */
1553                                         /* A Food ration gives 5000 food points (by contrast) */
1554                                         /* Don't ever get more than "Full" this way */
1555                                         /* But if we ARE Gorged,  it won't cure us */
1556                                         dummy = p_ptr->food + MIN(5000, 100 * dummy);
1557                                         if (p_ptr->food < PY_FOOD_MAX)   /* Not gorged already */
1558                                                 (void)set_food(dummy >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dummy);
1559                                 }
1560                                 else
1561 #ifdef JP
1562                                         msg_print("¤²¤§¡£¤Ò¤É¤¤Ì£¤À¡£");
1563 #else
1564                                         msg_print("Yechh. That tastes foul.");
1565 #endif
1566
1567                         }
1568                         break;
1569                 }
1570         }
1571
1572         else 
1573         {
1574
1575         switch (p_ptr->prace)
1576         {
1577                 case RACE_DWARF:
1578 #ifdef JP
1579                         msg_print("¼þ°Ï¤òÄ´¤Ù¤¿¡£");
1580 #else
1581                         msg_print("You examine your surroundings.");
1582 #endif
1583
1584                         (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);
1585                         (void)detect_doors(DETECT_RAD_DEFAULT);
1586                         (void)detect_stairs(DETECT_RAD_DEFAULT);
1587                         break;
1588
1589                 case RACE_HOBBIT:
1590                         {
1591                                 object_type *q_ptr;
1592                                 object_type forge;
1593
1594                                 /* Get local object */
1595                                 q_ptr = &forge;
1596
1597                                 /* Create the food ration */
1598                                 object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
1599
1600                                 /* Drop the object from heaven */
1601                                 (void)drop_near(q_ptr, -1, py, px);
1602 #ifdef JP
1603                                 msg_print("¿©»ö¤òÎÁÍý¤·¤Æºî¤Ã¤¿¡£");
1604 #else
1605                                 msg_print("You cook some food.");
1606 #endif
1607
1608                         }
1609                         break;
1610
1611                 case RACE_GNOME:
1612 #ifdef JP
1613                         msg_print("¥Ñ¥Ã¡ª");
1614 #else
1615                         msg_print("Blink!");
1616 #endif
1617
1618                         teleport_player(10, 0L);
1619                         break;
1620
1621                 case RACE_HALF_ORC:
1622 #ifdef JP
1623                         msg_print("ͦµ¤¤ò½Ð¤·¤¿¡£");
1624 #else
1625                         msg_print("You play tough.");
1626 #endif
1627
1628                         (void)set_afraid(0);
1629                         break;
1630
1631                 case RACE_HALF_TROLL:
1632 #ifdef JP
1633                         msg_print("¤¦¤¬¤¡¤¡¡ª");
1634 #else
1635                         msg_print("RAAAGH!");
1636 #endif
1637
1638                         (void)set_afraid(0);
1639                         (void)set_shero(10 + randint1(plev), FALSE);
1640                         (void)hp_player(30);
1641                         break;
1642
1643                 case RACE_AMBERITE:
1644                         if (command == -1)
1645                         {
1646 #ifdef JP
1647                                 msg_print("¤¢¤Ê¤¿¤ÏÊ⤭¼þ¤ê»Ï¤á¤¿¡£");
1648 #else
1649                                 msg_print("You start walking around. ");
1650 #endif
1651                                 alter_reality();
1652                         }
1653                         else if (command == -2)
1654                         {
1655 #ifdef JP
1656                                 msg_print("¤¢¤Ê¤¿¤Ï¡Ö¥Ñ¥¿¡¼¥ó¡×¤ò¿´¤ËÉÁ¤¤¤Æ¤½¤Î¾å¤òÊ⤤¤¿...");
1657 #else
1658                                 msg_print("You picture the Pattern in your mind and walk it...");
1659 #endif
1660
1661                                 (void)set_poisoned(0);
1662                                 (void)set_image(0);
1663                                 (void)set_stun(0);
1664                                 (void)set_cut(0);
1665                                 (void)set_blind(0);
1666                                 (void)set_afraid(0);
1667                                 (void)do_res_stat(A_STR);
1668                                 (void)do_res_stat(A_INT);
1669                                 (void)do_res_stat(A_WIS);
1670                                 (void)do_res_stat(A_DEX);
1671                                 (void)do_res_stat(A_CON);
1672                                 (void)do_res_stat(A_CHR);
1673                                 (void)restore_level();
1674                         }
1675                         break;
1676
1677                 case RACE_BARBARIAN:
1678 #ifdef JP
1679                         msg_print("¤¦¤©¤©¤ª¤ª¡ª");
1680 #else
1681                         msg_print("Raaagh!");
1682 #endif
1683
1684                         (void)set_afraid(0);
1685                         (void)set_shero(10 + randint1(plev), FALSE);
1686                         (void)hp_player(30);
1687                         break;
1688
1689                 case RACE_HALF_OGRE:
1690 #ifdef JP
1691                         msg_print("Çúȯ¤Î¥ë¡¼¥ó¤ò¿µ½Å¤Ë»Å³Ý¤±¤¿...");
1692 #else
1693                         msg_print("You carefully set an explosive rune...");
1694 #endif
1695
1696                         explosive_rune();
1697                         break;
1698
1699                 case RACE_HALF_GIANT:
1700                         if (!get_aim_dir(&dir)) return FALSE;
1701                         (void)wall_to_mud(dir, 20 + randint1(30));
1702                         break;
1703
1704                 case RACE_HALF_TITAN:
1705 #ifdef JP
1706                         msg_print("Ũ¤òÄ´ºº¤·¤¿...");
1707 #else
1708                         msg_print("You examine your foes...");
1709 #endif
1710
1711                         probing();
1712                         break;
1713
1714                 case RACE_CYCLOPS:
1715                         if (!get_aim_dir(&dir)) return FALSE;
1716 #ifdef JP
1717                         msg_print("µðÂç¤Ê´ä¤òÅꤲ¤¿¡£");
1718 #else
1719                         msg_print("You throw a huge boulder.");
1720 #endif
1721
1722                         fire_bolt(GF_MISSILE, dir, (3 * plev) / 2);
1723                         break;
1724
1725                 case RACE_YEEK:
1726                         if (!get_aim_dir(&dir)) return FALSE;
1727                         ratial_stop_mouth();
1728 #ifdef JP
1729                         msg_print("¿È¤ÎÌÓ¤â¤è¤À¤Ä¶«¤ÓÀ¼¤ò¾å¤²¤¿¡ª");
1730 #else
1731                         msg_print("You make a horrible scream!");
1732 #endif
1733
1734                         (void)fear_monster(dir, plev);
1735                         break;
1736
1737                 case RACE_KLACKON:
1738                         if (!get_aim_dir(&dir)) return FALSE;
1739                         ratial_stop_mouth();
1740 #ifdef JP
1741                         msg_print("»À¤òÅǤ¤¤¿¡£");
1742 #else
1743                         msg_print("You spit acid.");
1744 #endif
1745
1746                         if (plev < 25) fire_bolt(GF_ACID, dir, plev);
1747                         else fire_ball(GF_ACID, dir, plev, 2);
1748                         break;
1749
1750                 case RACE_KOBOLD:
1751                         if (!get_aim_dir(&dir)) return FALSE;
1752 #ifdef JP
1753                         msg_print("ÆǤΥÀ¡¼¥Ä¤òÅꤲ¤¿¡£");
1754 #else
1755                         msg_print("You throw a dart of poison.");
1756 #endif
1757
1758                         fire_bolt(GF_POIS, dir, plev);
1759                         break;
1760
1761                 case RACE_NIBELUNG:
1762 #ifdef JP
1763                         msg_print("¼þ°Ï¤òÄ´ºº¤·¤¿¡£");
1764 #else
1765                         msg_print("You examine your surroundings.");
1766 #endif
1767
1768                         (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);
1769                         (void)detect_doors(DETECT_RAD_DEFAULT);
1770                         (void)detect_stairs(DETECT_RAD_DEFAULT);
1771                         break;
1772
1773                 case RACE_DARK_ELF:
1774                         if (!get_aim_dir(&dir)) return FALSE;
1775 #ifdef JP
1776                         msg_print("¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤òÊü¤Ã¤¿¡£");
1777 #else
1778                         msg_print("You cast a magic missile.");
1779 #endif
1780
1781                         fire_bolt_or_beam(10, GF_MISSILE, dir,
1782                             damroll(3 + ((plev - 1) / 5), 4));
1783                         break;
1784
1785                 case RACE_DRACONIAN:
1786                         {
1787                                 int  Type = (one_in_(3) ? GF_COLD : GF_FIRE);
1788 #ifdef JP
1789                                 cptr Type_desc = ((Type == GF_COLD) ? "Î䵤" : "±ê");
1790 #else
1791                                 cptr Type_desc = ((Type == GF_COLD) ? "cold" : "fire");
1792 #endif
1793
1794                                 if (!get_aim_dir(&dir)) return FALSE;
1795
1796                                 if (randint1(100) < plev)
1797                                 {
1798                                         switch (p_ptr->pclass)
1799                                         {
1800                                                 case CLASS_WARRIOR:
1801                                                 case CLASS_BERSERKER:
1802                                                 case CLASS_RANGER:
1803                                                 case CLASS_TOURIST:
1804                                                 case CLASS_IMITATOR:
1805                                                 case CLASS_ARCHER:
1806                                                 case CLASS_SMITH:
1807                                                         if (one_in_(3))
1808                                                         {
1809                                                                 Type = GF_MISSILE;
1810 #ifdef JP
1811                                                                 Type_desc = "¥¨¥ì¥á¥ó¥È";
1812 #else
1813                                                                 Type_desc = "the elements";
1814 #endif
1815                                                         }
1816                                                         else
1817                                                         {
1818                                                                 Type = GF_SHARDS;
1819 #ifdef JP
1820                                                                 Type_desc = "ÇËÊÒ";
1821 #else
1822                                                                 Type_desc = "shards";
1823 #endif
1824                                                         }
1825                                                         break;
1826                                                 case CLASS_MAGE:
1827                                                 case CLASS_WARRIOR_MAGE:
1828                                                 case CLASS_HIGH_MAGE:
1829                                                 case CLASS_SORCERER:
1830                                                 case CLASS_MAGIC_EATER:
1831                                                 case CLASS_RED_MAGE:
1832                                                 case CLASS_BLUE_MAGE:
1833                                                 case CLASS_MIRROR_MASTER:
1834                                                         if (one_in_(3))
1835                                                         {
1836                                                                 Type = GF_MANA;
1837 #ifdef JP
1838                                                                 Type_desc = "ËâÎÏ";
1839 #else
1840                                                                 Type_desc = "mana";
1841 #endif
1842                                                         }
1843                                                         else
1844                                                         {
1845                                                                 Type = GF_DISENCHANT;
1846 #ifdef JP
1847                                                                 Type_desc = "Îô²½";
1848 #else
1849                                                                 Type_desc = "disenchantment";
1850 #endif
1851                                                         }
1852                                                         break;
1853                                                 case CLASS_CHAOS_WARRIOR:
1854                                                         if (!one_in_(3))
1855                                                         {
1856                                                                 Type = GF_CONFUSION;
1857 #ifdef JP
1858                                                                 Type_desc = "º®Íð";
1859 #else
1860                                                                 Type_desc = "confusion";
1861 #endif
1862                                                         }
1863                                                         else
1864                                                         {
1865                                                                 Type = GF_CHAOS;
1866 #ifdef JP
1867                                                                 Type_desc = "¥«¥ª¥¹";
1868 #else
1869                                                                 Type_desc = "chaos";
1870 #endif
1871                                                         }
1872                                                         break;
1873                                                 case CLASS_MONK:
1874                                                 case CLASS_SAMURAI:
1875                                                 case CLASS_FORCETRAINER:
1876                                                         if (!one_in_(3))
1877                                                         {
1878                                                                 Type = GF_CONFUSION;
1879 #ifdef JP
1880                                                                 Type_desc = "º®Íð";
1881 #else
1882                                                                 Type_desc = "confusion";
1883 #endif
1884                                                         }
1885                                                         else
1886                                                         {
1887                                                                 Type = GF_SOUND;
1888 #ifdef JP
1889                                                                 Type_desc = "¹ì²»";
1890 #else
1891                                                                 Type_desc = "sound";
1892 #endif
1893                                                         }
1894                                                         break;
1895                                                 case CLASS_MINDCRAFTER:
1896                                                         if (!one_in_(3))
1897                                                         {
1898                                                                 Type = GF_CONFUSION;
1899 #ifdef JP
1900                                                                 Type_desc = "º®Íð";
1901 #else
1902                                                                 Type_desc = "confusion";
1903 #endif
1904                                                         }
1905                                                         else
1906                                                         {
1907                                                                 Type = GF_PSI;
1908 #ifdef JP
1909                                                                 Type_desc = "Àº¿À¥¨¥Í¥ë¥®¡¼";
1910 #else
1911                                                                 Type_desc = "mental energy";
1912 #endif
1913                                                         }
1914                                                         break;
1915                                                 case CLASS_PRIEST:
1916                                                 case CLASS_PALADIN:
1917                                                         if (one_in_(3))
1918                                                         {
1919                                                                 Type = GF_HELL_FIRE;
1920 #ifdef JP
1921                                                                 Type_desc = "ÃϹö¤Î¹å²Ð";
1922 #else
1923                                                                 Type_desc = "hellfire";
1924 #endif
1925                                                         }
1926                                                         else
1927                                                         {
1928                                                                 Type = GF_HOLY_FIRE;
1929 #ifdef JP
1930                                                                 Type_desc = "À»¤Ê¤ë±ê";
1931 #else
1932                                                                 Type_desc = "holy fire";
1933 #endif
1934                                                         }
1935                                                         break;
1936                                                 case CLASS_ROGUE:
1937                                                 case CLASS_NINJA:
1938                                                         if (one_in_(3))
1939                                                         {
1940                                                                 Type = GF_DARK;
1941 #ifdef JP
1942                                                                 Type_desc = "°Å¹õ";
1943 #else
1944                                                                 Type_desc = "darkness";
1945 #endif
1946                                                         }
1947                                                         else
1948                                                         {
1949                                                                 Type = GF_POIS;
1950 #ifdef JP
1951                                                                 Type_desc = "ÆÇ";
1952 #else
1953                                                                 Type_desc = "poison";
1954 #endif
1955                                                         }
1956                                                         break;
1957                                                 case CLASS_BARD:
1958                                                         if (!one_in_(3))
1959                                                         {
1960                                                                 Type = GF_SOUND;
1961 #ifdef JP
1962                                                                 Type_desc = "¹ì²»";
1963 #else
1964                                                                 Type_desc = "sound";
1965 #endif
1966                                                         }
1967                                                         else
1968                                                         {
1969                                                                 Type = GF_CONFUSION;
1970 #ifdef JP
1971                                                                 Type_desc = "º®Íð";
1972 #else
1973                                                                 Type_desc = "confusion";
1974 #endif
1975                                                         }
1976                                                         break;
1977                                         }
1978                                 }
1979
1980                                 ratial_stop_mouth();
1981
1982 #ifdef JP
1983                                 msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", Type_desc);
1984 #else
1985                                 msg_format("You breathe %s.", Type_desc);
1986 #endif
1987
1988                                 fire_ball(Type, dir, plev * 2,
1989                                     -(plev / 15) - 1);
1990                         }
1991                         break;
1992
1993                 case RACE_MIND_FLAYER:
1994                         if (!get_aim_dir(&dir)) return FALSE;
1995 #ifdef JP
1996                         msg_print("¤¢¤Ê¤¿¤Ï½¸Ã椷¡¢Ìܤ¬ÀÖ¤¯µ±¤¤¤¿...");
1997 #else
1998                         msg_print("You concentrate and your eyes glow red...");
1999 #endif
2000
2001                         fire_bolt(GF_PSI, dir, plev);
2002                         break;
2003
2004                 case RACE_IMP:
2005                         if (!get_aim_dir(&dir)) return FALSE;
2006                         if (plev >= 30)
2007                         {
2008 #ifdef JP
2009                                 msg_print("¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤òÊü¤Ã¤¿¡£");
2010 #else
2011                                 msg_print("You cast a ball of fire.");
2012 #endif
2013
2014                                 fire_ball(GF_FIRE, dir, plev, 2);
2015                         }
2016                         else
2017                         {
2018 #ifdef JP
2019                                 msg_print("¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤òÊü¤Ã¤¿¡£");
2020 #else
2021                                 msg_print("You cast a bolt of fire.");
2022 #endif
2023
2024                                 fire_bolt(GF_FIRE, dir, plev);
2025                         }
2026                         break;
2027
2028                 case RACE_GOLEM:
2029                         (void)set_shield(randint1(20) + 30, FALSE);
2030                         break;
2031
2032                 case RACE_SKELETON:
2033                 case RACE_ZOMBIE:
2034 #ifdef JP
2035                         msg_print("¤¢¤Ê¤¿¤Ï¼º¤Ã¤¿¥¨¥Í¥ë¥®¡¼¤ò¼è¤êÌ᤽¤¦¤È»î¤ß¤¿¡£");
2036 #else
2037                         msg_print("You attempt to restore your lost energies.");
2038 #endif
2039
2040                         (void)restore_level();
2041                         break;
2042
2043                 case RACE_VAMPIRE:
2044                         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE)
2045                         {
2046 #ifdef JP
2047                                 msg_print("¤Ê¤¼¤«¹¶·â¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£");
2048 #else
2049                                 msg_print("Something prevent you from attacking.");
2050 #endif
2051                                 return FALSE;
2052                         }
2053                         else
2054                         {
2055                                 int y, x, dummy = 0;
2056                                 cave_type *c_ptr;
2057
2058                                 /* Only works on adjacent monsters */
2059                                 if (!get_rep_dir(&dir,FALSE)) return FALSE;   /* was get_aim_dir */
2060                                 y = py + ddy[dir];
2061                                 x = px + ddx[dir];
2062                                 c_ptr = &cave[y][x];
2063
2064                                 ratial_stop_mouth();
2065
2066                                 if (!c_ptr->m_idx)
2067                                 {
2068 #ifdef JP
2069                                         msg_print("²¿¤â¤Ê¤¤¾ì½ê¤Ë³ú¤ß¤Ä¤¤¤¿¡ª");
2070 #else
2071                                         msg_print("You bite into thin air!");
2072 #endif
2073
2074                                         break;
2075                                 }
2076
2077 #ifdef JP
2078                                 msg_print("¤¢¤Ê¤¿¤Ï¥Ë¥ä¥ê¤È¤·¤Æ²ç¤ò¤à¤¤¤¿...");
2079 #else
2080                                 msg_print("You grin and bare your fangs...");
2081 #endif
2082
2083                                 dummy = plev + randint1(plev) * MAX(1, plev / 10);   /* Dmg */
2084                                 if (drain_life(dir, dummy))
2085                                 {
2086                                         if (p_ptr->food < PY_FOOD_FULL)
2087                                                 /* No heal if we are "full" */
2088                                                 (void)hp_player(dummy);
2089                                         else
2090 #ifdef JP
2091                                                 msg_print("¤¢¤Ê¤¿¤Ï¶õÊ¢¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£");
2092 #else
2093                                                 msg_print("You were not hungry.");
2094 #endif
2095
2096                                         /* Gain nutritional sustenance: 150/hp drained */
2097                                         /* A Food ration gives 5000 food points (by contrast) */
2098                                         /* Don't ever get more than "Full" this way */
2099                                         /* But if we ARE Gorged,  it won't cure us */
2100                                         dummy = p_ptr->food + MIN(5000, 100 * dummy);
2101                                         if (p_ptr->food < PY_FOOD_MAX)   /* Not gorged already */
2102                                                 (void)set_food(dummy >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dummy);
2103                                 }
2104                                 else
2105 #ifdef JP
2106                                         msg_print("¤²¤§¡£¤Ò¤É¤¤Ì£¤À¡£");
2107 #else
2108                                         msg_print("Yechh. That tastes foul.");
2109 #endif
2110
2111                         }
2112                         break;
2113
2114                 case RACE_SPECTRE:
2115                         if (!get_aim_dir(&dir)) return FALSE;
2116                         ratial_stop_mouth();
2117 #ifdef JP
2118                         msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤¶«¤ÓÀ¼¤ò¤¢¤²¤¿¡ª");
2119 #else
2120                         msg_print("You emit an eldritch howl!");
2121 #endif
2122
2123                         (void)fear_monster(dir, plev);
2124                         break;
2125
2126                 case RACE_SPRITE:
2127 #ifdef JP
2128                         msg_print("¤¢¤Ê¤¿¤ÏËâË¡¤ÎÊ´¤òÅꤲ¤Ä¤±¤¿...");
2129 #else
2130                         msg_print("You throw some magic dust...");
2131 #endif
2132
2133                         if (plev < 25) sleep_monsters_touch();
2134                         else (void)sleep_monsters(plev);
2135                         break;
2136
2137                 case RACE_DEMON:
2138                         {
2139                                 int type = (one_in_(2) ? GF_NETHER : GF_FIRE);
2140                                 if (!get_aim_dir(&dir)) return FALSE;
2141                                 ratial_stop_mouth();
2142 #ifdef JP
2143                                 msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£",((type == GF_NETHER) ? "ÃϹö" : "²Ð±ê"));
2144 #else
2145                                 msg_format("You breathe %s.",((type == GF_NETHER) ? "nether" : "fire"));
2146 #endif
2147
2148                                 fire_ball(type, dir, plev * 3, -(plev / 15) - 1);
2149                         }
2150                         break;
2151
2152                 case RACE_KUTAR:
2153                         (void)set_tsubureru(randint1(20) + 30, FALSE);
2154                         break;
2155
2156                 case RACE_ANDROID:
2157                         if (!get_aim_dir(&dir)) return FALSE;
2158                         if (plev < 10)
2159                         {
2160 #ifdef JP
2161                                 msg_print("¥ì¥¤¥¬¥ó¤òȯ¼Í¤·¤¿¡£");
2162 #else
2163                                 msg_print("You fire your ray gun.");
2164 #endif
2165                                 fire_bolt(GF_MISSILE, dir, (plev+1) / 2);
2166                         }
2167                         else if (plev < 25)
2168                         {
2169 #ifdef JP
2170                                 msg_print("¥Ö¥é¥¹¥¿¡¼¤òȯ¼Í¤·¤¿¡£");
2171 #else
2172                                 msg_print("You fire your blaster.");
2173 #endif
2174                                 fire_bolt(GF_MISSILE, dir, plev);
2175                         }
2176                         else if (plev < 35)
2177                         {
2178 #ifdef JP
2179                                 msg_print("¥Ð¥º¡¼¥«¤òȯ¼Í¤·¤¿¡£");
2180 #else
2181                                 msg_print("You fire your bazooka.");
2182 #endif
2183                                 fire_ball(GF_MISSILE, dir, plev * 2, 2);
2184                         }
2185                         else if (plev < 45)
2186                         {
2187 #ifdef JP
2188                                 msg_print("¥Ó¡¼¥à¥­¥ã¥Î¥ó¤òȯ¼Í¤·¤¿¡£");
2189 #else
2190                                 msg_print("You fire a beam cannon.");
2191 #endif
2192                                 fire_beam(GF_MISSILE, dir, plev * 2);
2193                         }
2194                         else
2195                         {
2196 #ifdef JP
2197                                 msg_print("¥í¥±¥Ã¥È¤òȯ¼Í¤·¤¿¡£");
2198 #else
2199                                 msg_print("You fire a rocket.");
2200 #endif
2201                                 fire_rocket(GF_ROCKET, dir, plev * 5, 2);
2202                         }
2203                         break;
2204
2205                 default:
2206 #ifdef JP
2207                         msg_print("¤³¤Î¼ï²¤ÏÆüì¤ÊǽÎϤò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó¡£");
2208 #else
2209                         msg_print("This race has no bonus power.");
2210 #endif
2211
2212                         energy_use = 0;
2213         }
2214         }
2215         return TRUE;
2216 }
2217
2218 /*!
2219  * @brief ¥ì¥¤¥·¥ã¥ë¡¦¥Ñ¥ï¡¼¥³¥Þ¥ó¥É¤Î¥á¥¤¥ó¥ë¡¼¥Á¥ó / Allow user to choose a power (racial / mutation) to activate
2220  * @return ¤Ê¤·
2221  */
2222 void do_cmd_racial_power(void)
2223 {
2224         power_desc_type power_desc[36];
2225         int             num, i = 0;
2226         int             ask = TRUE;
2227         int             lvl = p_ptr->lev;
2228         bool            flag, redraw, cast = FALSE;
2229         bool            warrior = ((p_ptr->pclass == CLASS_WARRIOR || p_ptr->pclass == CLASS_BERSERKER) ? TRUE : FALSE);
2230         char            choice;
2231         char            out_val[160];
2232         int menu_line = (use_menu ? 1 : 0);
2233
2234
2235         for (num = 0; num < 36; num++)
2236         {
2237                 strcpy(power_desc[num].name, "");
2238                 power_desc[num].number = 0;
2239         }
2240
2241         num = 0;
2242
2243         if (p_ptr->confused)
2244         {
2245 #ifdef JP
2246 msg_print("º®Í𤷤Ƥ¤¤ÆÆüìǽÎϤò»È¤¨¤Þ¤»¤ó¡ª");
2247 #else
2248                 msg_print("You are too confused to use any powers!");
2249 #endif
2250
2251                 energy_use = 0;
2252                 return;
2253         }
2254
2255         if (p_ptr->special_defense & (KATA_MUSOU | KATA_KOUKIJIN))
2256         {
2257                 set_action(ACTION_NONE);
2258         }
2259
2260         switch (p_ptr->pclass)
2261         {
2262         case CLASS_WARRIOR:
2263         {
2264 #ifdef JP
2265 strcpy(power_desc[num].name, "·õ¤ÎÉñ¤¤");
2266 #else
2267                 strcpy(power_desc[num].name, "Sword Dancing");
2268 #endif
2269
2270                 power_desc[num].level = 40;
2271                 power_desc[num].cost = 75;
2272                 power_desc[num].stat = A_DEX;
2273                 power_desc[num].fail = 35;
2274                 power_desc[num++].number = -3;
2275                 break;
2276         }
2277         case CLASS_HIGH_MAGE:
2278         if (p_ptr->realm1 == REALM_HEX)
2279         {
2280 #ifdef JP
2281                 strcpy(power_desc[num].name, "±Ó¾§¤ò¤ä¤á¤ë");
2282 #else
2283                 strcpy(power_desc[num].name, "Stop spelling");
2284 #endif
2285                 power_desc[num].level = 1;
2286                 power_desc[num].cost = 0;
2287                 power_desc[num].stat = A_INT;
2288                 power_desc[num].fail = 0;
2289                 power_desc[num++].number = -3;
2290                 break;
2291         }
2292         case CLASS_MAGE:
2293         /* case CLASS_HIGH_MAGE: */
2294         case CLASS_SORCERER:
2295         {
2296 #ifdef JP
2297 strcpy(power_desc[num].name, "ËâÎÏ¿©¤¤");
2298 #else
2299                 strcpy(power_desc[num].name, "Eat Magic");
2300 #endif
2301
2302                 power_desc[num].level = 25;
2303                 power_desc[num].cost = 1;
2304                 power_desc[num].stat = A_INT;
2305                 power_desc[num].fail = 25;
2306                 power_desc[num++].number = -3;
2307                 break;
2308         }
2309         case CLASS_PRIEST:
2310         {
2311                 if (is_good_realm(p_ptr->realm1))
2312                 {
2313 #ifdef JP
2314 strcpy(power_desc[num].name, "Éð´ï½ËÊ¡");
2315 #else
2316                         strcpy(power_desc[num].name, "Bless Weapon");
2317 #endif
2318
2319                         power_desc[num].level = 35;
2320                         power_desc[num].cost = 70;
2321                         power_desc[num].stat = A_WIS;
2322                         power_desc[num].fail = 50;
2323                         power_desc[num++].number = -3;
2324                 }
2325                 else
2326                 {
2327 #ifdef JP
2328 strcpy(power_desc[num].name, "¾¤º²");
2329 #else
2330                         strcpy(power_desc[num].name, "Evocation");
2331 #endif
2332
2333                         power_desc[num].level = 42;
2334                         power_desc[num].cost = 40;
2335                         power_desc[num].stat = A_WIS;
2336                         power_desc[num].fail = 35;
2337                         power_desc[num++].number = -3;
2338                 }
2339                 break;
2340         }
2341         case CLASS_ROGUE:
2342         {
2343 #ifdef JP
2344 strcpy(power_desc[num].name, "¥Ò¥Ã¥È¡õ¥¢¥¦¥§¥¤");
2345 #else
2346                 strcpy(power_desc[num].name, "Hit and Away");
2347 #endif
2348
2349                 power_desc[num].level = 8;
2350                 power_desc[num].cost = 12;
2351                 power_desc[num].stat = A_DEX;
2352                 power_desc[num].fail = 14;
2353                 power_desc[num++].number = -3;
2354                 break;
2355         }
2356         case CLASS_RANGER:
2357         case CLASS_SNIPER:
2358         {
2359 #ifdef JP
2360 strcpy(power_desc[num].name, "¥â¥ó¥¹¥¿¡¼Ä´ºº");
2361 #else
2362                 strcpy(power_desc[num].name, "Probe Monster");
2363 #endif
2364
2365                 power_desc[num].level = 15;
2366                 power_desc[num].cost = 20;
2367                 power_desc[num].stat = A_INT;
2368                 power_desc[num].fail = 12;
2369                 power_desc[num++].number = -3;
2370                 break;
2371         }
2372         case CLASS_PALADIN:
2373         {
2374                 if (is_good_realm(p_ptr->realm1))
2375                 {
2376 #ifdef JP
2377 strcpy(power_desc[num].name, "¥Û¡¼¥ê¡¼¡¦¥é¥ó¥¹");
2378 #else
2379                         strcpy(power_desc[num].name, "Holy Lance");
2380 #endif
2381
2382                         power_desc[num].level = 30;
2383                         power_desc[num].cost = 30;
2384                         power_desc[num].stat = A_WIS;
2385                         power_desc[num].fail = 30;
2386                         power_desc[num++].number = -3;
2387                 }
2388                 else
2389                 {
2390 #ifdef JP
2391 strcpy(power_desc[num].name, "¥Ø¥ë¡¦¥é¥ó¥¹");
2392 #else
2393                         strcpy(power_desc[num].name, "Hell Lance");
2394 #endif
2395
2396                         power_desc[num].level = 30;
2397                         power_desc[num].cost = 30;
2398                         power_desc[num].stat = A_WIS;
2399                         power_desc[num].fail = 30;
2400                         power_desc[num++].number = -3;
2401                 }
2402                 break;
2403         }
2404         case CLASS_WARRIOR_MAGE:
2405         {
2406 #ifdef JP
2407 strcpy(power_desc[num].name, "ÊÑ´¹: £È£Ð¢ª£Í£Ð");
2408 #else
2409                 strcpy(power_desc[num].name, "Convert HP to SP");
2410 #endif
2411
2412                 power_desc[num].level = 25;
2413                 power_desc[num].cost = 0;
2414                 power_desc[num].stat = A_INT;
2415                 power_desc[num].fail = 10;
2416                 power_desc[num++].number = -3;
2417 #ifdef JP
2418 strcpy(power_desc[num].name, "ÊÑ´¹: £Í£Ð¢ª£È£Ð");
2419 #else
2420                 strcpy(power_desc[num].name, "Convert SP to HP");
2421 #endif
2422
2423                 power_desc[num].level = 25;
2424                 power_desc[num].cost = 0;
2425                 power_desc[num].stat = A_INT;
2426                 power_desc[num].fail = 10;
2427                 power_desc[num++].number = -4;
2428                 break;
2429         }
2430         case CLASS_CHAOS_WARRIOR:
2431         {
2432 #ifdef JP
2433 strcpy(power_desc[num].name, "¸¸ÏǤθ÷");
2434 #else
2435                 strcpy(power_desc[num].name, "Confusing Light");
2436 #endif
2437
2438                 power_desc[num].level = 40;
2439                 power_desc[num].cost = 50;
2440                 power_desc[num].stat = A_INT;
2441                 power_desc[num].fail = 25;
2442                 power_desc[num++].number = -3;
2443                 break;
2444         }
2445         case CLASS_MONK:
2446         {
2447 #ifdef JP
2448 strcpy(power_desc[num].name, "¹½¤¨¤ë");
2449 #else
2450                 strcpy(power_desc[num].name, "Assume a Posture");
2451 #endif
2452
2453                 power_desc[num].level = 25;
2454                 power_desc[num].cost = 0;
2455                 power_desc[num].stat = A_DEX;
2456                 power_desc[num].fail = 0;
2457                 power_desc[num++].number = -3;
2458 #ifdef JP
2459 strcpy(power_desc[num].name, "É´Îö·ý");
2460 #else
2461                 strcpy(power_desc[num].name, "Double Attack");
2462 #endif
2463
2464                 power_desc[num].level = 30;
2465                 power_desc[num].cost = 30;
2466                 power_desc[num].stat = A_STR;
2467                 power_desc[num].fail = 20;
2468                 power_desc[num++].number = -4;
2469                 break;
2470         }
2471         case CLASS_MINDCRAFTER:
2472         case CLASS_FORCETRAINER:
2473         {
2474 #ifdef JP
2475 strcpy(power_desc[num].name, "ÌÀ¶À»ß¿å");
2476 #else
2477                 strcpy(power_desc[num].name, "Clear Mind");
2478 #endif
2479
2480                 power_desc[num].level = 15;
2481                 power_desc[num].cost = 0;
2482                 power_desc[num].stat = A_WIS;
2483                 power_desc[num].fail = 10;
2484                 power_desc[num++].number = -3;
2485                 break;
2486         }
2487         case CLASS_TOURIST:
2488         {
2489 #ifdef JP
2490 strcpy(power_desc[num].name, "¼Ì¿¿»£±Æ");
2491 #else
2492                 strcpy(power_desc[num].name, "Take a Photograph");
2493 #endif
2494
2495                 power_desc[num].level = 1;
2496                 power_desc[num].cost = 0;
2497                 power_desc[num].stat = A_DEX;
2498                 power_desc[num].fail = 0;
2499                 power_desc[num++].number = -3;
2500 #ifdef JP
2501 strcpy(power_desc[num].name, "¿¿¡¦´ÕÄê");
2502 #else
2503                 strcpy(power_desc[num].name, "Identify True");
2504 #endif
2505
2506                 power_desc[num].level = 25;
2507                 power_desc[num].cost = 20;
2508                 power_desc[num].stat = A_INT;
2509                 power_desc[num].fail = 20;
2510                 power_desc[num++].number = -4;
2511                 break;
2512         }
2513         case CLASS_IMITATOR:
2514         {
2515 #ifdef JP
2516 strcpy(power_desc[num].name, "ÇÜÊÖ¤·");
2517 #else
2518                 strcpy(power_desc[num].name, "Double Revenge");
2519 #endif
2520
2521                 power_desc[num].level = 30;
2522                 power_desc[num].cost = 100;
2523                 power_desc[num].stat = A_DEX;
2524                 power_desc[num].fail = 30;
2525                 power_desc[num++].number = -3;
2526                 break;
2527         }
2528         case CLASS_BEASTMASTER:
2529         {
2530 #ifdef JP
2531 strcpy(power_desc[num].name, "À¸Êª»ÙÇÛ");
2532 #else
2533                 strcpy(power_desc[num].name, "Dominate a Living Thing");
2534 #endif
2535
2536                 power_desc[num].level = 1;
2537                 power_desc[num].cost = (p_ptr->lev+3)/4;
2538                 power_desc[num].stat = A_CHR;
2539                 power_desc[num].fail = 10;
2540                 power_desc[num++].number = -3;
2541 #ifdef JP
2542 strcpy(power_desc[num].name, "¿¿¡¦À¸Êª»ÙÇÛ");
2543 #else
2544                 strcpy(power_desc[num].name, "Dominate Living Things");
2545 #endif
2546
2547                 power_desc[num].level = 30;
2548                 power_desc[num].cost = (p_ptr->lev+20)/2;
2549                 power_desc[num].stat = A_CHR;
2550                 power_desc[num].fail = 10;
2551                 power_desc[num++].number = -4;
2552                 break;
2553         }
2554         case CLASS_ARCHER:
2555         {
2556 #ifdef JP
2557 strcpy(power_desc[num].name, "ÃÆ/Ìð¤ÎÀ½Â¤");
2558 #else
2559                 strcpy(power_desc[num].name, "Create Ammo");
2560 #endif
2561
2562                 power_desc[num].level = 1;
2563                 power_desc[num].cost = 0;
2564                 power_desc[num].stat = A_DEX;
2565                 power_desc[num].fail = 0;
2566                 power_desc[num++].number = -3;
2567                 break;
2568         }
2569         case CLASS_MAGIC_EATER:
2570         {
2571 #ifdef JP
2572 strcpy(power_desc[num].name, "ËâÎϤμè¤ê¹þ¤ß");
2573 #else
2574                 strcpy(power_desc[num].name, "Absorb Magic");
2575 #endif
2576
2577                 power_desc[num].level = 1;
2578                 power_desc[num].cost = 0;
2579                 power_desc[num].stat = A_INT;
2580                 power_desc[num].fail = 0;
2581                 power_desc[num++].number = -3;
2582
2583                 strcpy(power_desc[num].name, _("¶¯ÎÏȯư", "Powerful Activation"));
2584                 power_desc[num].level = 10;
2585                 power_desc[num].cost = 10 + (lvl - 10) / 2;
2586                 power_desc[num].stat = A_INT;
2587                 power_desc[num].fail = 0;
2588                 power_desc[num++].number = -4;
2589                 break;
2590         }
2591         case CLASS_BARD:
2592         {
2593 #ifdef JP
2594 strcpy(power_desc[num].name, "²Î¤ò»ß¤á¤ë");
2595 #else
2596                 strcpy(power_desc[num].name, "Stop Singing");
2597 #endif
2598
2599                 power_desc[num].level = 1;
2600                 power_desc[num].cost = 0;
2601                 power_desc[num].stat = A_CHR;
2602                 power_desc[num].fail = 0;
2603                 power_desc[num++].number = -3;
2604                 break;
2605         }
2606         case CLASS_RED_MAGE:
2607         {
2608 #ifdef JP
2609 strcpy(power_desc[num].name, "Ϣ³Ëâ");
2610 #else
2611                 strcpy(power_desc[num].name, "Double Magic");
2612 #endif
2613
2614                 power_desc[num].level = 48;
2615                 power_desc[num].cost = 20;
2616                 power_desc[num].stat = A_INT;
2617                 power_desc[num].fail = 0;
2618                 power_desc[num++].number = -3;
2619                 break;
2620         }
2621         case CLASS_SAMURAI:
2622         {
2623 #ifdef JP
2624 strcpy(power_desc[num].name, "µ¤¹ç¤¤¤¿¤á");
2625 #else
2626                 strcpy(power_desc[num].name, "Concentration");
2627 #endif
2628
2629                 power_desc[num].level = 1;
2630                 power_desc[num].cost = 0;
2631                 power_desc[num].stat = A_WIS;
2632                 power_desc[num].fail = 0;
2633                 power_desc[num++].number = -3;
2634 #ifdef JP
2635 strcpy(power_desc[num].name, "·¿");
2636 #else
2637                 strcpy(power_desc[num].name, "Assume a Posture");
2638 #endif
2639
2640                 power_desc[num].level = 25;
2641                 power_desc[num].cost = 0;
2642                 power_desc[num].stat = A_DEX;
2643                 power_desc[num].fail = 0;
2644                 power_desc[num++].number = -4;
2645                 break;
2646         }
2647         case CLASS_BLUE_MAGE:
2648         {
2649 #ifdef JP
2650 strcpy(power_desc[num].name, "¥é¡¼¥Ë¥ó¥°");
2651 #else
2652                 strcpy(power_desc[num].name, "Learning");
2653 #endif
2654
2655                 power_desc[num].level = 1;
2656                 power_desc[num].cost = 0;
2657                 power_desc[num].stat = A_INT;
2658                 power_desc[num].fail = 0;
2659                 power_desc[num++].number = -3;
2660                 break;
2661         }
2662         case CLASS_CAVALRY:
2663         {
2664 #ifdef JP
2665 strcpy(power_desc[num].name, "¹ÓÇϤʤ餷");
2666 #else
2667                 strcpy(power_desc[num].name, "Rodeo");
2668 #endif
2669
2670                 power_desc[num].level = 10;
2671                 power_desc[num].cost = 0;
2672                 power_desc[num].stat = A_STR;
2673                 power_desc[num].fail = 10;
2674                 power_desc[num++].number = -3;
2675                 break;
2676         }
2677         case CLASS_BERSERKER:
2678         {
2679 #ifdef JP
2680 strcpy(power_desc[num].name, "µ¢´Ô");
2681 #else
2682                 strcpy(power_desc[num].name, "Recall");
2683 #endif
2684
2685                 power_desc[num].level = 10;
2686                 power_desc[num].cost = 10;
2687                 power_desc[num].stat = A_DEX;
2688                 power_desc[num].fail = 20;
2689                 power_desc[num++].number = -3;
2690                 break;
2691         }
2692         case CLASS_MIRROR_MASTER:
2693         {
2694 #ifdef JP
2695 strcpy(power_desc[num].name, "¶À³ä¤ê");
2696 #else
2697                 strcpy(power_desc[num].name, "Break Mirrors");
2698 #endif
2699
2700                 power_desc[num].level = 1;
2701                 power_desc[num].cost = 0;
2702                 power_desc[num].stat = A_INT;
2703                 power_desc[num].fail = 0;
2704                 power_desc[num++].number = -3;
2705 #ifdef JP
2706 strcpy(power_desc[num].name, "ÀÅ¿å");
2707 #else
2708                 strcpy(power_desc[num].name, "Mirror Concentration");
2709 #endif
2710
2711                 power_desc[num].level = 30;
2712                 power_desc[num].cost = 0;
2713                 power_desc[num].stat = A_INT;
2714                 power_desc[num].fail = 20;
2715                 power_desc[num++].number = -4;
2716                 break;
2717         }
2718         case CLASS_SMITH:
2719         {
2720 #ifdef JP
2721 strcpy(power_desc[num].name, "ÌÜÍø¤­");
2722 #else
2723                 strcpy(power_desc[num].name, "Judgment");
2724 #endif
2725
2726                 power_desc[num].level = 5;
2727                 power_desc[num].cost = 15;
2728                 power_desc[num].stat = A_INT;
2729                 power_desc[num].fail = 20;
2730                 power_desc[num++].number = -3;
2731                 break;
2732         }
2733         case CLASS_NINJA:
2734         {
2735 #ifdef JP
2736 strcpy(power_desc[num].name, "®¶î¤±");
2737 #else
2738                 strcpy(power_desc[num].name, "Quick Walk");
2739 #endif
2740
2741                 power_desc[num].level = 20;
2742                 power_desc[num].cost = 0;
2743                 power_desc[num].stat = A_DEX;
2744                 power_desc[num].fail = 0;
2745                 power_desc[num++].number = -3;
2746                 break;
2747         }
2748         default:
2749 #ifdef JP
2750 strcpy(power_desc[0].name, "(¤Ê¤·)");
2751 #else
2752                 strcpy(power_desc[0].name, "(none)");
2753 #endif
2754
2755         }
2756
2757         if (p_ptr->mimic_form)
2758         {
2759                 switch (p_ptr->mimic_form)
2760                 {
2761                 case MIMIC_DEMON:
2762                 case MIMIC_DEMON_LORD:
2763 #ifdef JP
2764 sprintf(power_desc[num].name, "ÃϹö/²Ð±ê¤Î¥Ö¥ì¥¹ (¥À¥á¡¼¥¸ %d)", lvl * 3);
2765 #else
2766                         sprintf(power_desc[num].name, "Nether or Fire Breath (dam %d)", lvl * 3);
2767 #endif
2768
2769                         power_desc[num].level = 15;
2770                         power_desc[num].cost = 10+lvl/3;
2771                         power_desc[num].stat = A_CON;
2772                         power_desc[num].fail = 20;
2773                         power_desc[num++].number = -1;
2774                         break;
2775                 case MIMIC_VAMPIRE:
2776 #ifdef JP
2777 strcpy(power_desc[num].name, "À¸Ì¿Îϵۼý");
2778 #else
2779                         strcpy(power_desc[num].name, "Drain Life");
2780 #endif
2781
2782                         power_desc[num].level = 2;
2783                         power_desc[num].cost = 1 + (lvl / 3);
2784                         power_desc[num].stat = A_CON;
2785                         power_desc[num].fail = 9;
2786                         power_desc[num++].number = -1;
2787                         break;
2788                 }
2789         }
2790         else
2791         {
2792         switch (p_ptr->prace)
2793         {
2794                 case RACE_DWARF:
2795 #ifdef JP
2796 strcpy(power_desc[num].name, "¥É¥¢¤Èæ« ´¶ÃÎ");
2797 #else
2798                         strcpy(power_desc[num].name, "Detect Doors+Traps");
2799 #endif
2800
2801                         power_desc[num].level = 5;
2802                         power_desc[num].cost = 5;
2803                         power_desc[num].stat = A_WIS;
2804                         power_desc[num].fail = 12;
2805                         power_desc[num++].number = -1;
2806                         break;
2807                 case RACE_NIBELUNG:
2808 #ifdef JP
2809 strcpy(power_desc[num].name, "¥É¥¢¤Èæ« ´¶ÃÎ");
2810 #else
2811                         strcpy(power_desc[num].name, "Detect Doors+Traps");
2812 #endif
2813
2814                         power_desc[num].level = 10;
2815                         power_desc[num].cost = 5;
2816                         power_desc[num].stat = A_WIS;
2817                         power_desc[num].fail = 10;
2818                         power_desc[num++].number = -1;
2819                         break;
2820                 case RACE_HOBBIT:
2821 #ifdef JP
2822 strcpy(power_desc[num].name, "¿©ÎÈÀ¸À®");
2823 #else
2824                         strcpy(power_desc[num].name, "Create Food");
2825 #endif
2826
2827                         power_desc[num].level = 15;
2828                         power_desc[num].cost = 10;
2829                         power_desc[num].stat = A_INT;
2830                         power_desc[num].fail = 10;
2831                         power_desc[num++].number = -1;
2832                         break;
2833                 case RACE_GNOME:
2834 #ifdef JP
2835 sprintf(power_desc[num].name, "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È");
2836 #else
2837                         sprintf(power_desc[num].name, "Blink");
2838 #endif
2839
2840                         power_desc[num].level = 5;
2841                         power_desc[num].cost = 5;
2842                         power_desc[num].stat = A_INT;
2843                         power_desc[num].fail = 12;
2844                         power_desc[num++].number = -1;
2845                         break;
2846                 case RACE_HALF_ORC:
2847 #ifdef JP
2848 strcpy(power_desc[num].name, "¶²Éݽüµî");
2849 #else
2850                         strcpy(power_desc[num].name, "Remove Fear");
2851 #endif
2852
2853                         power_desc[num].level = 3;
2854                         power_desc[num].cost = 5;
2855                         power_desc[num].stat = A_WIS;
2856                         power_desc[num].fail = warrior ? 5 : 10;
2857                         power_desc[num++].number = -1;
2858                         break;
2859                 case RACE_HALF_TROLL:
2860 #ifdef JP
2861 strcpy(power_desc[num].name, "¶¸Àï»Î²½");
2862 #else
2863                         strcpy(power_desc[num].name, "Berserk");
2864 #endif
2865
2866                         power_desc[num].level = 10;
2867                         power_desc[num].cost = 12;
2868                         power_desc[num].stat = A_STR;
2869                         power_desc[num].fail = warrior ? 6 : 12;
2870                         power_desc[num++].number = -1;
2871                         break;
2872                 case RACE_BARBARIAN:
2873 #ifdef JP
2874 strcpy(power_desc[num].name, "¶¸Àï»Î²½");
2875 #else
2876                         strcpy(power_desc[num].name, "Berserk");
2877 #endif
2878
2879                         power_desc[num].level = 8;
2880                         power_desc[num].cost = 10;
2881                         power_desc[num].stat = A_STR;
2882                         power_desc[num].fail = warrior ? 6 : 12;
2883                         power_desc[num++].number = -1;
2884                         break;
2885                 case RACE_AMBERITE:
2886 #ifdef JP
2887 strcpy(power_desc[num].name, "¥·¥ã¥É¥¦¡¦¥·¥Õ¥È");
2888 #else
2889                         strcpy(power_desc[num].name, "Shadow Shifting");
2890 #endif
2891
2892                         power_desc[num].level = 30;
2893                         power_desc[num].cost = 50;
2894                         power_desc[num].stat = A_INT;
2895                         power_desc[num].fail = 50;
2896                         power_desc[num++].number = -1;
2897 #ifdef JP
2898 strcpy(power_desc[num].name, "¥Ñ¥¿¡¼¥ó¡¦¥¦¥©¡¼¥¯");
2899 #else
2900                         strcpy(power_desc[num].name, "Pattern Mindwalking");
2901 #endif
2902
2903                         power_desc[num].level = 40;
2904                         power_desc[num].cost = 75;
2905                         power_desc[num].stat = A_WIS;
2906                         power_desc[num].fail = 50;
2907                         power_desc[num++].number = -2;
2908                         break;
2909                 case RACE_HALF_OGRE:
2910 #ifdef JP
2911 strcpy(power_desc[num].name, "Çúȯ¤Î¥ë¡¼¥ó");
2912 #else
2913                         strcpy(power_desc[num].name, "Explosive Rune");
2914 #endif
2915
2916                         power_desc[num].level = 25;
2917                         power_desc[num].cost = 35;
2918                         power_desc[num].stat = A_INT;
2919                         power_desc[num].fail = 15;
2920                         power_desc[num++].number = -1;
2921                         break;
2922                 case RACE_HALF_GIANT:
2923 #ifdef JP
2924 strcpy(power_desc[num].name, "´äÀÐÍϲò");
2925 #else
2926                         strcpy(power_desc[num].name, "Stone to Mud");
2927 #endif
2928
2929                         power_desc[num].level = 20;
2930                         power_desc[num].cost = 10;
2931                         power_desc[num].stat = A_STR;
2932                         power_desc[num].fail = 12;
2933                         power_desc[num++].number = -1;
2934                         break;
2935                 case RACE_HALF_TITAN:
2936 #ifdef JP
2937 strcpy(power_desc[num].name, "¥¹¥­¥ã¥ó¡¦¥â¥ó¥¹¥¿¡¼");
2938 #else
2939                         strcpy(power_desc[num].name, "Probing");
2940 #endif
2941
2942                         power_desc[num].level = 15;
2943                         power_desc[num].cost = 10;
2944                         power_desc[num].stat = A_INT;
2945                         power_desc[num].fail = 12;
2946                         power_desc[num++].number = -1;
2947                         break;
2948                 case RACE_CYCLOPS:
2949 #ifdef JP
2950 sprintf(power_desc[num].name, "´äÀÐÅꤲ¡Ê¥À¥á¡¼¥¸ %d¡Ë", (3 * lvl) / 2);
2951 #else
2952                         sprintf(power_desc[num].name, "Throw Boulder (dam %d)", (3 * lvl) / 2);
2953 #endif
2954
2955                         power_desc[num].level = 20;
2956                         power_desc[num].cost = 15;
2957                         power_desc[num].stat = A_STR;
2958                         power_desc[num].fail = 12;
2959                         power_desc[num++].number = -1;
2960                         break;
2961                 case RACE_YEEK:
2962 #ifdef JP
2963 strcpy(power_desc[num].name, "¥â¥ó¥¹¥¿¡¼¶²¹²");
2964 #else
2965                         strcpy(power_desc[num].name, "Scare Monster");
2966 #endif
2967
2968                         power_desc[num].level = 15;
2969                         power_desc[num].cost = 15;
2970                         power_desc[num].stat = A_WIS;
2971                         power_desc[num].fail = 10;
2972                         power_desc[num++].number = -1;
2973                         break;
2974                 case RACE_SPECTRE:
2975 #ifdef JP
2976 strcpy(power_desc[num].name, "¥â¥ó¥¹¥¿¡¼¶²¹²");
2977 #else
2978                         strcpy(power_desc[num].name, "Scare Monster");
2979 #endif
2980
2981                         power_desc[num].level = 4;
2982                         power_desc[num].cost = 6;
2983                         power_desc[num].stat = A_INT;
2984                         power_desc[num].fail = 3;
2985                         power_desc[num++].number = -1;
2986                         break;
2987                 case RACE_KLACKON:
2988 #ifdef JP
2989 sprintf(power_desc[num].name, "»À¤ÎÂà(¥À¥á¡¼¥¸ %d)", lvl);
2990 #else
2991                         sprintf(power_desc[num].name, "Spit Acid (dam %d)", lvl);
2992 #endif
2993
2994                         power_desc[num].level = 9;
2995                         power_desc[num].cost = 9;
2996                         power_desc[num].stat = A_DEX;
2997                         power_desc[num].fail = 14;
2998                         power_desc[num++].number = -1;
2999                         break;
3000                 case RACE_KOBOLD:
3001 #ifdef JP
3002 sprintf(power_desc[num].name, "ÆǤΥÀ¡¼¥Ä (¥À¥á¡¼¥¸ %d)", lvl);
3003 #else
3004                         sprintf(power_desc[num].name, "Poison Dart (dam %d)", lvl);
3005 #endif
3006
3007                         power_desc[num].level = 12;
3008                         power_desc[num].cost = 8;
3009                         power_desc[num].stat = A_DEX;
3010                         power_desc[num].fail = 14;
3011                         power_desc[num++].number = -1;
3012                         break;
3013                 case RACE_DARK_ELF:
3014 #ifdef JP
3015 sprintf(power_desc[num].name, "¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë (¥À¥á¡¼¥¸ %dd%d)", 3 + ((lvl - 1) / 5), 4);
3016 #else
3017                         sprintf(power_desc[num].name, "Magic Missile (dm %dd%d)", 3 + ((lvl - 1) / 5), 4);
3018 #endif
3019
3020                         power_desc[num].level = 2;
3021                         power_desc[num].cost = 2;
3022                         power_desc[num].stat = A_INT;
3023                         power_desc[num].fail = 9;
3024                         power_desc[num++].number = -1;
3025                         break;
3026                 case RACE_DRACONIAN:
3027 #ifdef JP
3028 sprintf(power_desc[num].name, "¥Ö¥ì¥¹ (¥À¥á¡¼¥¸ %d)", lvl * 2);
3029 #else
3030                         sprintf(power_desc[num].name, "Breath Weapon (dam %d)", lvl * 2);
3031 #endif
3032
3033                         power_desc[num].level = 1;
3034                         power_desc[num].cost = lvl;
3035                         power_desc[num].stat = A_CON;
3036                         power_desc[num].fail = 12;
3037                         power_desc[num++].number = -1;
3038                         break;
3039                 case RACE_MIND_FLAYER:
3040 #ifdef JP
3041 sprintf(power_desc[num].name, "Àº¿À¹¶·â (¥À¥á¡¼¥¸ %d)", lvl);
3042 #else
3043                         sprintf(power_desc[num].name, "Mind Blast (dam %d)", lvl);
3044 #endif
3045
3046                         power_desc[num].level = 15;
3047                         power_desc[num].cost = 12;
3048                         power_desc[num].stat = A_INT;
3049                         power_desc[num].fail = 14;
3050                         power_desc[num++].number = -1;
3051                         break;
3052                 case RACE_IMP:
3053 #ifdef JP
3054 sprintf(power_desc[num].name, "¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È/¥Ü¡¼¥ë (¥À¥á¡¼¥¸ %d)", lvl);
3055 #else
3056                         sprintf(power_desc[num].name, "Fire Bolt/Ball (dam %d)", lvl);
3057 #endif
3058
3059                         power_desc[num].level = 9;
3060                         power_desc[num].cost = 15;
3061                         power_desc[num].stat = A_WIS;
3062                         power_desc[num].fail = 15;
3063                         power_desc[num++].number = -1;
3064                         break;
3065                 case RACE_GOLEM:
3066 #ifdef JP
3067 strcpy(power_desc[num].name, "È©Àв½ (´ü´Ö 1d20+30)");
3068 #else
3069                         strcpy(power_desc[num].name, "Stone Skin (dur 1d20+30)");
3070 #endif
3071
3072                         power_desc[num].level = 20;
3073                         power_desc[num].cost = 15;
3074                         power_desc[num].stat = A_CON;
3075                         power_desc[num].fail = 8;
3076                         power_desc[num++].number = -1;
3077                         break;
3078                 case RACE_SKELETON:
3079                 case RACE_ZOMBIE:
3080 #ifdef JP
3081 strcpy(power_desc[num].name, "·Ð¸³ÃÍÉü³è");
3082 #else
3083                         strcpy(power_desc[num].name, "Restore Experience");
3084 #endif
3085
3086                         power_desc[num].level = 30;
3087                         power_desc[num].cost = 30;
3088                         power_desc[num].stat = A_WIS;
3089                         power_desc[num].fail = 18;
3090                         power_desc[num++].number = -1;
3091                         break;
3092                 case RACE_VAMPIRE:
3093 #ifdef JP
3094 strcpy(power_desc[num].name, "À¸Ì¿Îϵۼý");
3095 #else
3096                         strcpy(power_desc[num].name, "Drain Life");
3097 #endif
3098
3099                         power_desc[num].level = 2;
3100                         power_desc[num].cost = 1 + (lvl / 3);
3101                         power_desc[num].stat = A_CON;
3102                         power_desc[num].fail = 9;
3103                         power_desc[num++].number = -1;
3104                         break;
3105                 case RACE_SPRITE:
3106 #ifdef JP
3107 strcpy(power_desc[num].name, "̲¤êÊ´");
3108 #else
3109                         strcpy(power_desc[num].name, "Sleeping Dust");
3110 #endif
3111
3112                         power_desc[num].level = 12;
3113                         power_desc[num].cost = 12;
3114                         power_desc[num].stat = A_INT;
3115                         power_desc[num].fail = 15;
3116                         power_desc[num++].number = -1;
3117                         break;
3118                 case RACE_DEMON:
3119 #ifdef JP
3120 sprintf(power_desc[num].name, "ÃϹö/²Ð±ê¤Î¥Ö¥ì¥¹ (¥À¥á¡¼¥¸ %d)", lvl * 3);
3121 #else
3122                         sprintf(power_desc[num].name, "Nether or Fire Breath (dam %d)", lvl * 3);
3123 #endif
3124
3125                         power_desc[num].level = 15;
3126                         power_desc[num].cost = 10+lvl/3;
3127                         power_desc[num].stat = A_CON;
3128                         power_desc[num].fail = 20;
3129                         power_desc[num++].number = -1;
3130                         break;
3131                 case RACE_KUTAR:
3132 #ifdef JP
3133 strcpy(power_desc[num].name, "²£¤Ë¿­¤Ó¤ë");
3134 #else
3135                         strcpy(power_desc[num].name, "Expand Horizontally (dur 30+1d20)");
3136 #endif
3137
3138                         power_desc[num].level = 20;
3139                         power_desc[num].cost = 15;
3140                         power_desc[num].stat = A_CHR;
3141                         power_desc[num].fail = 8;
3142                         power_desc[num++].number = -1;
3143                         break;
3144                 case RACE_ANDROID:
3145                         if (p_ptr->lev < 10)
3146                         {
3147 #ifdef JP
3148 strcpy(power_desc[num].name, "¥ì¥¤¥¬¥ó");
3149 #else
3150                                 strcpy(power_desc[num].name, "Ray Gun");
3151 #endif
3152
3153                                 power_desc[num].level = 1;
3154                                 power_desc[num].cost = 7;
3155                                 power_desc[num].fail = 8;
3156                         }
3157                         else if (p_ptr->lev < 25)
3158                         {
3159 #ifdef JP
3160 strcpy(power_desc[num].name, "¥Ö¥é¥¹¥¿¡¼");
3161 #else
3162                                 strcpy(power_desc[num].name, "Blaster");
3163 #endif
3164
3165                                 power_desc[num].level = 10;
3166                                 power_desc[num].cost = 13;
3167                                 power_desc[num].fail = 10;
3168                         }
3169                         else if (p_ptr->lev < 35)
3170                         {
3171 #ifdef JP
3172 strcpy(power_desc[num].name, "¥Ð¥º¡¼¥«");
3173 #else
3174                                 strcpy(power_desc[num].name, "Bazooka");
3175 #endif
3176
3177                                 power_desc[num].level = 25;
3178                                 power_desc[num].cost = 26;
3179                                 power_desc[num].fail = 12;
3180                         }
3181                         else if (p_ptr->lev < 45)
3182                         {
3183 #ifdef JP
3184 strcpy(power_desc[num].name, "¥Ó¡¼¥à¥­¥ã¥Î¥ó");
3185 #else
3186                                 strcpy(power_desc[num].name, "Beam Cannon");
3187 #endif
3188
3189                                 power_desc[num].level = 35;
3190                                 power_desc[num].cost = 40;
3191                                 power_desc[num].fail = 15;
3192                         }
3193                         else
3194                         {
3195 #ifdef JP
3196 strcpy(power_desc[num].name, "¥í¥±¥Ã¥È");
3197 #else
3198                                 strcpy(power_desc[num].name, "Rocket");
3199 #endif
3200
3201                                 power_desc[num].level = 45;
3202                                 power_desc[num].cost = 60;
3203                                 power_desc[num].fail = 18;
3204                         }
3205                         power_desc[num].stat = A_STR;
3206                         power_desc[num++].number = -1;
3207                         break;
3208                 default:
3209                 {
3210                         break;
3211                 }
3212         }
3213         }
3214
3215         if (p_ptr->muta1)
3216         {
3217                 if (p_ptr->muta1 & MUT1_SPIT_ACID)
3218                 {
3219 #ifdef JP
3220 strcpy(power_desc[num].name, "»À¤ÎÂÃ");
3221 #else
3222                         strcpy(power_desc[num].name, "Spit Acid");
3223 #endif
3224
3225                         power_desc[num].level = 9;
3226                         power_desc[num].cost = 9;
3227                         power_desc[num].stat = A_DEX;
3228                         power_desc[num].fail = 15;
3229                         power_desc[num++].number = MUT1_SPIT_ACID;
3230                 }
3231
3232                 if (p_ptr->muta1 & MUT1_BR_FIRE)
3233                 {
3234 #ifdef JP
3235 strcpy(power_desc[num].name, "±ê¤Î¥Ö¥ì¥¹");
3236 #else
3237                         strcpy(power_desc[num].name, "Fire Breath");
3238 #endif
3239
3240                         power_desc[num].level = 20;
3241                         power_desc[num].cost = lvl;
3242                         power_desc[num].stat = A_CON;
3243                         power_desc[num].fail = 18;
3244                         power_desc[num++].number = MUT1_BR_FIRE;
3245                 }
3246
3247                 if (p_ptr->muta1 & MUT1_HYPN_GAZE)
3248                 {
3249 #ifdef JP
3250 strcpy(power_desc[num].name, "ºÅ̲âˤß");
3251 #else
3252                         strcpy(power_desc[num].name, "Hypnotic Gaze");
3253 #endif
3254
3255                         power_desc[num].level = 12;
3256                         power_desc[num].cost = 12;
3257                         power_desc[num].stat = A_CHR;
3258                         power_desc[num].fail = 18;
3259                         power_desc[num++].number = MUT1_HYPN_GAZE;
3260                 }
3261
3262                 if (p_ptr->muta1 & MUT1_TELEKINES)
3263                 {
3264 #ifdef JP
3265 strcpy(power_desc[num].name, "Ç°Æ°ÎÏ");
3266 #else
3267                         strcpy(power_desc[num].name, "Telekinesis");
3268 #endif
3269
3270                         power_desc[num].level = 9;
3271                         power_desc[num].cost = 9;
3272                         power_desc[num].stat = A_WIS;
3273                         power_desc[num].fail = 14;
3274                         power_desc[num++].number = MUT1_TELEKINES;
3275                 }
3276
3277                 if (p_ptr->muta1 & MUT1_VTELEPORT)
3278                 {
3279 #ifdef JP
3280 strcpy(power_desc[num].name, "¥Æ¥ì¥Ý¡¼¥È");
3281 #else
3282                         strcpy(power_desc[num].name, "Teleport");
3283 #endif
3284
3285                         power_desc[num].level = 7;
3286                         power_desc[num].cost = 7;
3287                         power_desc[num].stat = A_WIS;
3288                         power_desc[num].fail = 15;
3289                         power_desc[num++].number = MUT1_VTELEPORT;
3290                 }
3291
3292                 if (p_ptr->muta1 & MUT1_MIND_BLST)
3293                 {
3294 #ifdef JP
3295 strcpy(power_desc[num].name, "Àº¿À¹¶·â");
3296 #else
3297                         strcpy(power_desc[num].name, "Mind Blast");
3298 #endif
3299
3300                         power_desc[num].level = 5;
3301                         power_desc[num].cost = 3;
3302                         power_desc[num].stat = A_WIS;
3303                         power_desc[num].fail = 15;
3304                         power_desc[num++].number = MUT1_MIND_BLST;
3305                 }
3306
3307                 if (p_ptr->muta1 & MUT1_RADIATION)
3308                 {
3309 #ifdef JP
3310 strcpy(power_desc[num].name, "Êü¼Íǽ");
3311 #else
3312                         strcpy(power_desc[num].name, "Emit Radiation");
3313 #endif
3314
3315                         power_desc[num].level = 15;
3316                         power_desc[num].cost = 15;
3317                         power_desc[num].stat = A_CON;
3318                         power_desc[num].fail = 14;
3319                         power_desc[num++].number = MUT1_RADIATION;
3320                 }
3321
3322                 if (p_ptr->muta1 & MUT1_VAMPIRISM)
3323                 {
3324 #ifdef JP
3325 strcpy(power_desc[num].name, "µÛ·ì¥É¥ì¥¤¥ó");
3326 #else
3327                         strcpy(power_desc[num].name, "Vampiric Drain");
3328 #endif
3329
3330                         power_desc[num].level = 2;
3331                         power_desc[num].cost = (1 + (lvl / 3));
3332                         power_desc[num].stat = A_CON;
3333                         power_desc[num].fail = 9;
3334                         power_desc[num++].number = MUT1_VAMPIRISM;
3335                 }
3336
3337                 if (p_ptr->muta1 & MUT1_SMELL_MET)
3338                 {
3339 #ifdef JP
3340 strcpy(power_desc[num].name, "¶â°Ó̳Ð");
3341 #else
3342                         strcpy(power_desc[num].name, "Smell Metal");
3343 #endif
3344
3345                         power_desc[num].level = 3;
3346                         power_desc[num].cost = 2;
3347                         power_desc[num].stat = A_INT;
3348                         power_desc[num].fail = 12;
3349                         power_desc[num++].number = MUT1_SMELL_MET;
3350                 }
3351
3352                 if (p_ptr->muta1 & MUT1_SMELL_MON)
3353                 {
3354 #ifdef JP
3355 strcpy(power_desc[num].name, "Ũ½­Ó̳Ð");
3356 #else
3357                         strcpy(power_desc[num].name, "Smell Monsters");
3358 #endif
3359
3360                         power_desc[num].level = 5;
3361                         power_desc[num].cost = 4;
3362                         power_desc[num].stat = A_INT;
3363                         power_desc[num].fail = 15;
3364                         power_desc[num++].number = MUT1_SMELL_MON;
3365                 }
3366
3367                 if (p_ptr->muta1 & MUT1_BLINK)
3368                 {
3369 #ifdef JP
3370 strcpy(power_desc[num].name, "¥·¥ç¡¼¥È¡¦¥Æ¥ì¥Ý¡¼¥È");
3371 #else
3372                         strcpy(power_desc[num].name, "Blink");
3373 #endif
3374
3375                         power_desc[num].level = 3;
3376                         power_desc[num].cost = 3;
3377                         power_desc[num].stat = A_WIS;
3378                         power_desc[num].fail = 12;
3379                         power_desc[num++].number = MUT1_BLINK;
3380                 }
3381
3382                 if (p_ptr->muta1 & MUT1_EAT_ROCK)
3383                 {
3384 #ifdef JP
3385 strcpy(power_desc[num].name, "´ä¿©¤¤");
3386 #else
3387                         strcpy(power_desc[num].name, "Eat Rock");
3388 #endif
3389
3390                         power_desc[num].level = 8;
3391                         power_desc[num].cost = 12;
3392                         power_desc[num].stat = A_CON;
3393                         power_desc[num].fail = 18;
3394                         power_desc[num++].number = MUT1_EAT_ROCK;
3395                 }
3396
3397                 if (p_ptr->muta1 & MUT1_SWAP_POS)
3398                 {
3399 #ifdef JP
3400 strcpy(power_desc[num].name, "°ÌÃÖ¸ò´¹");
3401 #else
3402                         strcpy(power_desc[num].name, "Swap Position");
3403 #endif
3404
3405                         power_desc[num].level = 15;
3406                         power_desc[num].cost = 12;
3407                         power_desc[num].stat = A_DEX;
3408                         power_desc[num].fail = 16;
3409                         power_desc[num++].number = MUT1_SWAP_POS;
3410                 }
3411
3412                 if (p_ptr->muta1 & MUT1_SHRIEK)
3413                 {
3414 #ifdef JP
3415 strcpy(power_desc[num].name, "¶«¤Ó");
3416 #else
3417                         strcpy(power_desc[num].name, "Shriek");
3418 #endif
3419
3420                         power_desc[num].level = 20;
3421                         power_desc[num].cost = 14;
3422                         power_desc[num].stat = A_CON;
3423                         power_desc[num].fail = 16;
3424                         power_desc[num++].number = MUT1_SHRIEK;
3425                 }
3426
3427                 if (p_ptr->muta1 & MUT1_ILLUMINE)
3428                 {
3429 #ifdef JP
3430 strcpy(power_desc[num].name, "¾ÈÌÀ");
3431 #else
3432                         strcpy(power_desc[num].name, "Illuminate");
3433 #endif
3434
3435                         power_desc[num].level = 3;
3436                         power_desc[num].cost = 2;
3437                         power_desc[num].stat = A_INT;
3438                         power_desc[num].fail = 10;
3439                         power_desc[num++].number = MUT1_ILLUMINE;
3440                 }
3441
3442                 if (p_ptr->muta1 & MUT1_DET_CURSE)
3443                 {
3444 #ifdef JP
3445 strcpy(power_desc[num].name, "¼ö¤¤´¶ÃÎ");
3446 #else
3447                         strcpy(power_desc[num].name, "Detect Curses");
3448 #endif
3449
3450                         power_desc[num].level = 7;
3451                         power_desc[num].cost = 14;
3452                         power_desc[num].stat = A_WIS;
3453                         power_desc[num].fail = 14;
3454                         power_desc[num++].number = MUT1_DET_CURSE;
3455                 }
3456
3457                 if (p_ptr->muta1 & MUT1_BERSERK)
3458                 {
3459 #ifdef JP
3460 strcpy(power_desc[num].name, "¶¸Àï»Î²½");
3461 #else
3462                         strcpy(power_desc[num].name, "Berserk");
3463 #endif
3464
3465                         power_desc[num].level = 8;
3466                         power_desc[num].cost = 8;
3467                         power_desc[num].stat = A_STR;
3468                         power_desc[num].fail = 14;
3469                         power_desc[num++].number = MUT1_BERSERK;
3470                 }
3471
3472                 if (p_ptr->muta1 & MUT1_POLYMORPH)
3473                 {
3474 #ifdef JP
3475 strcpy(power_desc[num].name, "ÊÑ¿È");
3476 #else
3477                         strcpy(power_desc[num].name, "Polymorph");
3478 #endif
3479
3480                         power_desc[num].level = 18;
3481                         power_desc[num].cost = 20;
3482                         power_desc[num].stat = A_CON;
3483                         power_desc[num].fail = 18;
3484                         power_desc[num++].number = MUT1_POLYMORPH;
3485                 }
3486
3487                 if (p_ptr->muta1 & MUT1_MIDAS_TCH)
3488                 {
3489 #ifdef JP
3490 strcpy(power_desc[num].name, "¥ß¥À¥¹¤Î¼ê");
3491 #else
3492                         strcpy(power_desc[num].name, "Midas Touch");
3493 #endif
3494
3495                         power_desc[num].level = 10;
3496                         power_desc[num].cost = 5;
3497                         power_desc[num].stat = A_INT;
3498                         power_desc[num].fail = 12;
3499                         power_desc[num++].number = MUT1_MIDAS_TCH;
3500                 }
3501
3502                 if (p_ptr->muta1 & MUT1_GROW_MOLD)
3503                 {
3504 #ifdef JP
3505 strcpy(power_desc[num].name, "¥«¥ÓȯÀ¸");
3506 #else
3507                         strcpy(power_desc[num].name, "Grow Mold");
3508 #endif
3509
3510                         power_desc[num].level = 1;
3511                         power_desc[num].cost = 6;
3512                         power_desc[num].stat = A_CON;
3513                         power_desc[num].fail = 14;
3514                         power_desc[num++].number = MUT1_GROW_MOLD;
3515                 }
3516
3517                 if (p_ptr->muta1 & MUT1_RESIST)
3518                 {
3519 #ifdef JP
3520 strcpy(power_desc[num].name, "¥¨¥ì¥á¥ó¥ÈÂÑÀ­");
3521 #else
3522                         strcpy(power_desc[num].name, "Resist Elements");
3523 #endif
3524
3525                         power_desc[num].level = 10;
3526                         power_desc[num].cost = 12;
3527                         power_desc[num].stat = A_CON;
3528                         power_desc[num].fail = 12;
3529                         power_desc[num++].number = MUT1_RESIST;
3530                 }
3531
3532                 if (p_ptr->muta1 & MUT1_EARTHQUAKE)
3533                 {
3534 #ifdef JP
3535 strcpy(power_desc[num].name, "ÃÏ¿Ì");
3536 #else
3537                         strcpy(power_desc[num].name, "Earthquake");
3538 #endif
3539
3540                         power_desc[num].level = 12;
3541                         power_desc[num].cost = 12;
3542                         power_desc[num].stat = A_STR;
3543                         power_desc[num].fail = 16;
3544                         power_desc[num++].number = MUT1_EARTHQUAKE;
3545                 }
3546
3547                 if (p_ptr->muta1 & MUT1_EAT_MAGIC)
3548                 {
3549 #ifdef JP
3550 strcpy(power_desc[num].name, "ËâÎÏ¿©¤¤");
3551 #else
3552                         strcpy(power_desc[num].name, "Eat Magic");
3553 #endif
3554
3555                         power_desc[num].level = 17;
3556                         power_desc[num].cost = 1;
3557                         power_desc[num].stat = A_WIS;
3558                         power_desc[num].fail = 15;
3559                         power_desc[num++].number = MUT1_EAT_MAGIC;
3560                 }
3561
3562                 if (p_ptr->muta1 & MUT1_WEIGH_MAG)
3563                 {
3564 #ifdef JP
3565 strcpy(power_desc[num].name, "ËâÎÏ´¶ÃÎ");
3566 #else
3567                         strcpy(power_desc[num].name, "Weigh Magic");
3568 #endif
3569
3570                         power_desc[num].level = 6;
3571                         power_desc[num].cost = 6;
3572                         power_desc[num].stat = A_INT;
3573                         power_desc[num].fail = 10;
3574                         power_desc[num++].number = MUT1_WEIGH_MAG;
3575                 }
3576
3577                 if (p_ptr->muta1 & MUT1_STERILITY)
3578                 {
3579 #ifdef JP
3580 strcpy(power_desc[num].name, "Áý¿£ÁË»ß");
3581 #else
3582                         strcpy(power_desc[num].name, "Sterilize");
3583 #endif
3584
3585                         power_desc[num].level = 12;
3586                         power_desc[num].cost = 23;
3587                         power_desc[num].stat = A_CHR;
3588                         power_desc[num].fail = 15;
3589                         power_desc[num++].number = MUT1_STERILITY;
3590                 }
3591
3592                 if (p_ptr->muta1 & MUT1_PANIC_HIT)
3593                 {
3594 #ifdef JP
3595 strcpy(power_desc[num].name, "¥Ò¥Ã¥È¡õ¥¢¥¦¥§¥¤");
3596 #else
3597                         strcpy(power_desc[num].name, "Panic Hit");
3598 #endif
3599
3600                         power_desc[num].level = 10;
3601                         power_desc[num].cost = 12;
3602                         power_desc[num].stat = A_DEX;
3603                         power_desc[num].fail = 14;
3604                         power_desc[num++].number = MUT1_PANIC_HIT;
3605                 }
3606
3607                 if (p_ptr->muta1 & MUT1_DAZZLE)
3608                 {
3609 #ifdef JP
3610 strcpy(power_desc[num].name, "âÁÏÇ");
3611 #else
3612                         strcpy(power_desc[num].name, "Dazzle");
3613 #endif
3614
3615                         power_desc[num].level = 7;
3616                         power_desc[num].cost = 15;
3617                         power_desc[num].stat = A_CHR;
3618                         power_desc[num].fail = 8;
3619                         power_desc[num++].number = MUT1_DAZZLE;
3620                 }
3621
3622                 if (p_ptr->muta1 & MUT1_LASER_EYE)
3623                 {
3624 #ifdef JP
3625 strcpy(power_desc[num].name, "¥ì¡¼¥¶¡¼¡¦¥¢¥¤");
3626 #else
3627                         strcpy(power_desc[num].name, "Laser Eye");
3628 #endif
3629
3630                         power_desc[num].level = 7;
3631                         power_desc[num].cost = 10;
3632                         power_desc[num].stat = A_WIS;
3633                         power_desc[num].fail = 9;
3634                         power_desc[num++].number = MUT1_LASER_EYE;
3635                 }
3636
3637                 if (p_ptr->muta1 & MUT1_RECALL)
3638                 {
3639 #ifdef JP
3640 strcpy(power_desc[num].name, "µ¢´Ô");
3641 #else
3642                         strcpy(power_desc[num].name, "Recall");
3643 #endif
3644
3645                         power_desc[num].level = 17;
3646                         power_desc[num].cost = 50;
3647                         power_desc[num].stat = A_INT;
3648                         power_desc[num].fail = 16;
3649                         power_desc[num++].number = MUT1_RECALL;
3650                 }
3651
3652                 if (p_ptr->muta1 & MUT1_BANISH)
3653                 {
3654 #ifdef JP
3655 strcpy(power_desc[num].name, "¼Ù°­¾ÃÌÇ");
3656 #else
3657                         strcpy(power_desc[num].name, "Banish Evil");
3658 #endif
3659
3660                         power_desc[num].level = 25;
3661                         power_desc[num].cost = 25;
3662                         power_desc[num].stat = A_WIS;
3663                         power_desc[num].fail = 18;
3664                         power_desc[num++].number = MUT1_BANISH;
3665                 }
3666
3667                 if (p_ptr->muta1 & MUT1_COLD_TOUCH)
3668                 {
3669 #ifdef JP
3670 strcpy(power_desc[num].name, "Åà·ë¤Î¼ê");
3671 #else
3672                         strcpy(power_desc[num].name, "Cold Touch");
3673 #endif
3674
3675                         power_desc[num].level = 2;
3676                         power_desc[num].cost = 2;
3677                         power_desc[num].stat = A_CON;
3678                         power_desc[num].fail = 11;
3679                         power_desc[num++].number = MUT1_COLD_TOUCH;
3680                 }
3681
3682                 if (p_ptr->muta1 & MUT1_LAUNCHER)
3683                 {
3684 #ifdef JP
3685 strcpy(power_desc[num].name, "¥¢¥¤¥Æ¥àÅꤲ");
3686 #else
3687                         strcpy(power_desc[num].name, "Throw Object");
3688 #endif
3689
3690                         power_desc[num].level = 1;
3691                         power_desc[num].cost = lvl;
3692                         power_desc[num].stat = A_STR;
3693                         power_desc[num].fail = 6;
3694                         /* XXX_XXX_XXX Hack! MUT1_LAUNCHER counts as negative... */
3695                         power_desc[num++].number = 3;
3696                 }
3697         }
3698
3699         /* Nothing chosen yet */
3700         flag = FALSE;
3701
3702         /* No redraw yet */
3703         redraw = FALSE;
3704
3705         /* Build a prompt */
3706 #ifdef JP
3707 (void) strnfmt(out_val, 78, "(ÆüìǽÎÏ %c-%c, *'¤Ç°ìÍ÷, ESC¤ÇÃæÃÇ) ¤É¤ÎÆüìǽÎϤò»È¤¤¤Þ¤¹¤«¡©",
3708 #else
3709         (void)strnfmt(out_val, 78, "(Powers %c-%c, *=List, ESC=exit) Use which power? ",
3710 #endif
3711
3712                 I2A(0), (num <= 26) ? I2A(num - 1) : '0' + num - 27);
3713
3714 #ifdef ALLOW_REPEAT
3715 if (!repeat_pull(&i) || i<0 || i>=num) {
3716 #endif /* ALLOW_REPEAT */
3717         if (use_menu) screen_save();
3718          /* Get a spell from the user */
3719
3720         choice = (always_show_list || use_menu) ? ESCAPE:1;
3721         while (!flag)
3722         {
3723                 if( choice==ESCAPE ) choice = ' '; 
3724                 else if( !get_com(out_val, &choice, FALSE) )break; 
3725
3726                 if (use_menu && choice != ' ')
3727                 {
3728                         switch(choice)
3729                         {
3730                                 case '0':
3731                                 {
3732                                         screen_load();
3733                                         energy_use = 0;
3734                                         return;
3735                                 }
3736
3737                                 case '8':
3738                                 case 'k':
3739                                 case 'K':
3740                                 {
3741                                         menu_line += (num - 1);
3742                                         break;
3743                                 }
3744
3745                                 case '2':
3746                                 case 'j':
3747                                 case 'J':
3748                                 {
3749                                         menu_line++;
3750                                         break;
3751                                 }
3752
3753                                 case '6':
3754                                 case 'l':
3755                                 case 'L':
3756                                 case '4':
3757                                 case 'h':
3758                                 case 'H':
3759                                 {
3760                                         if (menu_line > 18)
3761                                                 menu_line -= 18;
3762                                         else if (menu_line+18 <= num)
3763                                                 menu_line += 18;
3764                                         break;
3765                                 }
3766
3767                                 case 'x':
3768                                 case 'X':
3769                                 case '\r':
3770                                 {
3771                                         i = menu_line - 1;
3772                                         ask = FALSE;
3773                                         break;
3774                                 }
3775                         }
3776                         if (menu_line > num) menu_line -= num;
3777                 }
3778                 /* Request redraw */
3779                 if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))
3780                 {
3781                         /* Show the list */
3782                         if (!redraw || use_menu)
3783                         {
3784                                 byte y = 1, x = 0;
3785                                 int ctr = 0;
3786                                 char dummy[80];
3787                                 char letter;
3788                                 int x1, y1;
3789
3790                                 strcpy(dummy, "");
3791
3792                                 /* Show list */
3793                                 redraw = TRUE;
3794
3795                                 /* Save the screen */
3796                                 if (!use_menu) screen_save();
3797
3798                                 /* Print header(s) */
3799                                 if (num < 18)
3800 #ifdef JP
3801 prt("                            Lv   MP ¼ºÎ¨", y++, x);
3802 #else
3803                                         prt("                            Lv Cost Fail", y++, x);
3804 #endif
3805
3806                                 else
3807 #ifdef JP
3808 prt("                            Lv   MP ¼ºÎ¨                            Lv   MP ¼ºÎ¨", y++, x);
3809 #else
3810                                         prt("                            Lv Cost Fail                            Lv Cost Fail", y++, x);
3811 #endif
3812
3813
3814                                 /* Print list */
3815                                 while (ctr < num)
3816                                 {
3817                                         x1 = ((ctr < 18) ? x : x + 40);
3818                                         y1 = ((ctr < 18) ? y + ctr : y + ctr - 18);
3819
3820                                         if (use_menu)
3821                                         {
3822 #ifdef JP
3823                                                 if (ctr == (menu_line-1)) strcpy(dummy, " ¡Õ ");
3824 #else
3825                                                 if (ctr == (menu_line-1)) strcpy(dummy, " >  ");
3826 #endif
3827                                                 else strcpy(dummy, "    ");
3828                                         }
3829                                         else
3830                                         {
3831                                                 /* letter/number for power selection */
3832                                                 if (ctr < 26)
3833                                                         letter = I2A(ctr);
3834                                                 else
3835                                                         letter = '0' + ctr - 26;
3836                                                 sprintf(dummy, " %c) ",letter);
3837                                         }
3838                                         strcat(dummy, format("%-23.23s %2d %4d %3d%%",
3839                                                 power_desc[ctr].name, power_desc[ctr].level, power_desc[ctr].cost,
3840                                                 100 - racial_chance(&power_desc[ctr])));
3841                                         prt(dummy, y1, x1);
3842                                         ctr++;
3843                                 }
3844                         }
3845
3846                         /* Hide the list */
3847                         else
3848                         {
3849                                 /* Hide list */
3850                                 redraw = FALSE;
3851
3852                                 /* Restore the screen */
3853                                 screen_load();
3854                         }
3855
3856                         /* Redo asking */
3857                         continue;
3858                 }
3859
3860                 if (!use_menu)
3861                 {
3862                         if (choice == '\r' && num == 1)
3863                         {
3864                                 choice = 'a';
3865                         }
3866
3867                         if (isalpha(choice))
3868                         {
3869                                 /* Note verify */
3870                                 ask = (isupper(choice));
3871
3872                                 /* Lowercase */
3873                                 if (ask) choice = tolower(choice);
3874
3875                                 /* Extract request */
3876                                 i = (islower(choice) ? A2I(choice) : -1);
3877                         }
3878                         else
3879                         {
3880                                 ask = FALSE; /* Can't uppercase digits */
3881
3882                                 i = choice - '0' + 26;
3883                         }
3884                 }
3885
3886                 /* Totally Illegal */
3887                 if ((i < 0) || (i >= num))
3888                 {
3889                         bell();
3890                         continue;
3891                 }
3892
3893                 /* Verify it */
3894                 if (ask)
3895                 {
3896                         char tmp_val[160];
3897
3898                         /* Prompt */
3899 #ifdef JP
3900 (void) strnfmt(tmp_val, 78, "%s¤ò»È¤¤¤Þ¤¹¤«¡© ", power_desc[i].name);
3901 #else
3902                         (void)strnfmt(tmp_val, 78, "Use %s? ", power_desc[i].name);
3903 #endif
3904
3905
3906                         /* Belay that order */
3907                         if (!get_check(tmp_val)) continue;
3908                 }
3909
3910                 /* Stop the loop */
3911                 flag = TRUE;
3912         }
3913
3914         /* Restore the screen */
3915         if (redraw) screen_load();
3916
3917         /* Abort if needed */
3918         if (!flag)
3919         {
3920                 energy_use = 0;
3921                 return;
3922         }
3923 #ifdef ALLOW_REPEAT
3924         repeat_push(i);
3925         } /*if (!repeat_pull(&i) || ...)*/
3926 #endif /* ALLOW_REPEAT */
3927         switch (racial_aux(&power_desc[i]))
3928         {
3929         case 1:
3930                 if (power_desc[i].number < 0)
3931                         cast = cmd_racial_power_aux(power_desc[i].number);
3932                 else
3933                         cast = mutation_power_aux(power_desc[i].number);
3934                 break;
3935         case 0:
3936                 cast = FALSE;
3937                 break;
3938         case -1:
3939                 cast = TRUE;
3940                 break;
3941         }
3942
3943         if (cast)
3944         {
3945                 if (racial_cost)
3946                 {
3947                         int actual_racial_cost = racial_cost / 2 + randint1(racial_cost / 2);
3948
3949                         /* If mana is not enough, player consumes hit point! */
3950                         if (p_ptr->csp < actual_racial_cost)
3951                         {
3952                                 actual_racial_cost -= p_ptr->csp;
3953                                 p_ptr->csp = 0;
3954 #ifdef JP
3955                                 take_hit(DAMAGE_USELIFE, actual_racial_cost, "²áÅ٤ν¸Ãæ", -1);
3956 #else
3957                                 take_hit(DAMAGE_USELIFE, actual_racial_cost, "concentrating too hard", -1);
3958 #endif
3959                         }
3960                         else p_ptr->csp -= actual_racial_cost;
3961
3962                         /* Redraw mana and hp */
3963                         p_ptr->redraw |= (PR_HP | PR_MANA);
3964
3965                         /* Window stuff */
3966                         p_ptr->window |= (PW_PLAYER | PW_SPELL);
3967                 }
3968         }
3969         else energy_use = 0;
3970
3971         /* Success */
3972         return;
3973 }