OSDN Git Service

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