OSDN Git Service

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