OSDN Git Service

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