OSDN Git Service

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