OSDN Git Service

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