OSDN Git Service

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