OSDN Git Service

afacb6cd7942409f8def5a1b4ec6703ad616b6bb
[hengband/hengband.git] / src / racial.c
1 /*!
2  * @file racial.c
3  * @brief レイシャルと突然変異の技能処理 / Racial powers (and mutations)
4  * @date 2014/01/08
5  * @author
6  * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n
7  * This software may be copied and distributed for educational, research,\n
8  * and not for profit purposes provided that this copyright and statement\n
9  * are included in all such copies.  Other copyrights may also apply.\n
10  * 2014 Deskull rearranged comment for Doxygen. \n
11  */
12
13 #include "angband.h"
14 #include "core.h"
15 #include "util.h"
16
17 #include "cmd-basic.h"
18 #include "cmd-magiceat.h"
19 #include "cmd-mane.h"
20 #include "cmd-zapwand.h"
21 #include "cmd-pet.h"
22 #include "melee.h"
23 #include "object-hook.h"
24 #include "realm-song.h"
25
26 #include "mutation.h"
27 #include "player-effects.h"
28 #include "player-status.h"
29 #include "spells-status.h"
30 #include "spells-object.h"
31 #include "spells-floor.h"
32 #include "spells.h"
33 #include "cmd-spell.h"
34 #include "realm-hex.h"
35 #include "targeting.h"
36
37 /*!
38  * @brief 修行僧の構え設定処理
39  * @return 構えを変化させたらTRUE、構え不能かキャンセルしたらFALSEを返す。
40  */
41 static bool choose_kamae(void)
42 {
43         char choice;
44         int new_kamae = 0;
45         int i;
46         char buf[80];
47
48         if (cmd_limit_confused(p_ptr)) return FALSE;
49         screen_save();
50         prt(_(" a) 構えをとく", " a) No form"), 2, 20);
51
52         for (i = 0; i < MAX_KAMAE; i++)
53         {
54                 if (p_ptr->lev >= kamae_shurui[i].min_level)
55                 {
56                         sprintf(buf," %c) %-12s  %s",I2A(i+1), kamae_shurui[i].desc, kamae_shurui[i].info);
57                         prt(buf, 3+i, 20);
58                 }
59         }
60
61         prt("", 1, 0);
62         prt(_("        どの構えをとりますか?", "        Choose Form: "), 1, 14);
63
64         while(1)
65         {
66                 choice = inkey();
67
68                 if (choice == ESCAPE)
69                 {
70                         screen_load();
71                         return FALSE;
72                 }
73                 else if ((choice == 'a') || (choice == 'A'))
74                 {
75                         if (p_ptr->action == ACTION_KAMAE)
76                         {
77                                 set_action(ACTION_NONE);
78                         }
79                         else
80                                 msg_print(_("もともと構えていない。", "You are not assuming a posture."));
81                         screen_load();
82                         return TRUE;
83                 }
84                 else if ((choice == 'b') || (choice == 'B'))
85                 {
86                         new_kamae = 0;
87                         break;
88                 }
89                 else if (((choice == 'c') || (choice == 'C')) && (p_ptr->lev > 29))
90                 {
91                         new_kamae = 1;
92                         break;
93                 }
94                 else if (((choice == 'd') || (choice == 'D')) && (p_ptr->lev > 34))
95                 {
96                         new_kamae = 2;
97                         break;
98                 }
99                 else if (((choice == 'e') || (choice == 'E')) && (p_ptr->lev > 39))
100                 {
101                         new_kamae = 3;
102                         break;
103                 }
104         }
105         set_action(ACTION_KAMAE);
106
107         if (p_ptr->special_defense & (KAMAE_GENBU << new_kamae))
108         {
109                 msg_print(_("構え直した。", "You reassume a posture."));
110         }
111         else
112         {
113                 p_ptr->special_defense &= ~(KAMAE_MASK);
114                 p_ptr->update |= (PU_BONUS);
115                 p_ptr->redraw |= (PR_STATE);
116                 msg_format(_("%sの構えをとった。", "You assume a posture of %s form."),kamae_shurui[new_kamae].desc);
117                 p_ptr->special_defense |= (KAMAE_GENBU << new_kamae);
118         }
119         p_ptr->redraw |= PR_STATE;
120         screen_load();
121         return TRUE;
122 }
123
124 /*!
125  * @brief 剣術家の型設定処理
126  * @return 型を変化させたらTRUE、型の構え不能かキャンセルしたらFALSEを返す。
127  */
128 static bool choose_kata(void)
129 {
130         char choice;
131         int new_kata = 0;
132         int i;
133         char buf[80];
134
135         if (cmd_limit_confused(p_ptr)) return FALSE;
136
137         if (p_ptr->stun)
138         {
139                 msg_print(_("意識がはっきりとしない。", "You are not clear headed"));
140                 return FALSE;
141         }
142
143         if (p_ptr->afraid)
144         {
145                 msg_print(_("体が震えて構えられない!", "You are trembling with fear!"));
146                 return FALSE;
147         }
148         screen_save();
149         prt(_(" a) 型を崩す", " a) No Form"), 2, 20);
150
151         for (i = 0; i < MAX_KATA; i++)
152         {
153                 if (p_ptr->lev >= kata_shurui[i].min_level)
154                 {
155                         sprintf(buf,_(" %c) %sの型    %s", " %c) Form of %-12s  %s"),I2A(i+1), kata_shurui[i].desc, kata_shurui[i].info);
156                         prt(buf, 3+i, 20);
157                 }
158         }
159
160         prt("", 1, 0);
161         prt(_("        どの型で構えますか?", "        Choose Form: "), 1, 14);
162
163         while(1)
164         {
165                 choice = inkey();
166
167                 if (choice == ESCAPE)
168                 {
169                         screen_load();
170                         return FALSE;
171                 }
172                 else if ((choice == 'a') || (choice == 'A'))
173                 {
174                         if (p_ptr->action == ACTION_KATA)
175                         {
176                                 set_action(ACTION_NONE);
177                         }
178                         else
179                                 msg_print(_("もともと構えていない。", "You are not assuming posture."));
180                         screen_load();
181                         return TRUE;
182                 }
183                 else if ((choice == 'b') || (choice == 'B'))
184                 {
185                         new_kata = 0;
186                         break;
187                 }
188                 else if (((choice == 'c') || (choice == 'C')) && (p_ptr->lev > 29))
189                 {
190                         new_kata = 1;
191                         break;
192                 }
193                 else if (((choice == 'd') || (choice == 'D')) && (p_ptr->lev > 34))
194                 {
195                         new_kata = 2;
196                         break;
197                 }
198                 else if (((choice == 'e') || (choice == 'E')) && (p_ptr->lev > 39))
199                 {
200                         new_kata = 3;
201                         break;
202                 }
203         }
204         set_action(ACTION_KATA);
205
206         if (p_ptr->special_defense & (KATA_IAI << new_kata))
207         {
208                 msg_print(_("構え直した。", "You reassume a posture."));
209         }
210         else
211         {
212                 p_ptr->special_defense &= ~(KATA_MASK);
213                 p_ptr->update |= (PU_BONUS | PU_MONSTERS);
214                 msg_format(_("%sの型で構えた。", "You assume a posture of %s form."),kata_shurui[new_kata].desc);
215                 p_ptr->special_defense |= (KATA_IAI << new_kata);
216         }
217         p_ptr->redraw |= (PR_STATE | PR_STATUS);
218         screen_load();
219         return TRUE;
220 }
221
222
223 /*!
224  * @brief レイシャル・パワー情報のtypedef
225  */
226 typedef struct power_desc_type power_desc_type;
227
228 /*!
229  * @brief レイシャル・パワー情報の構造体定義
230  */
231 struct power_desc_type
232 {
233         GAME_TEXT name[MAX_NLEN];      //!<レイシャル名
234         PLAYER_LEVEL level;     //!<体得レベル
235         int cost;
236         int stat;
237         PERCENTAGE fail;
238         int number;
239 };
240
241
242 /*!
243  * @brief レイシャル・パワーの発動成功率を計算する / Returns the chance to activate a racial power/mutation
244  * @param pd_ptr 発動したいレイシャル・パワー情報の構造体参照ポインタ
245  * @return 成功率(%)を返す
246  */
247 static PERCENTAGE racial_chance(power_desc_type *pd_ptr)
248 {
249         PLAYER_LEVEL min_level  = pd_ptr->level;
250         PERCENTAGE difficulty = pd_ptr->fail;
251
252         int i;
253         int val;
254         int sum = 0;
255         BASE_STATUS stat = p_ptr->stat_cur[pd_ptr->stat];
256
257         /* No chance for success */
258         if ((p_ptr->lev < min_level) || p_ptr->confused)
259         {
260                 return (0);
261         }
262
263         if (difficulty == 0) return 100;
264
265         /* Calculate difficulty */
266         if (p_ptr->stun)
267         {
268                 difficulty += (PERCENTAGE)p_ptr->stun;
269         }
270         else if (p_ptr->lev > min_level)
271         {
272                 PERCENTAGE lev_adj = (PERCENTAGE)((p_ptr->lev - min_level) / 3);
273                 if (lev_adj > 10) lev_adj = 10;
274                 difficulty -= lev_adj;
275         }
276
277         if (difficulty < 5) difficulty = 5;
278
279         /* We only need halfs of the difficulty */
280         difficulty = difficulty / 2;
281
282         for (i = 1; i <= stat; i++)
283         {
284                 val = i - difficulty;
285                 if (val > 0)
286                         sum += (val <= difficulty) ? val : difficulty;
287         }
288
289         if (difficulty == 0)
290                 return (100);
291         else
292                 return (((sum * 100) / difficulty) / stat);
293 }
294
295
296 static int racial_cost;
297
298 /*!
299  * @brief レイシャル・パワーの発動の判定処理
300  * @param pd_ptr 発動したいレイシャル・パワー情報の構造体参照ポインタ
301  * @return
302  * 発動成功ならば1、発動失敗ならば-1、キャンセルならば0を返す。
303  * return value indicates that we have succesfully used the power 1: Succeeded, 0: Cancelled, -1: Failed
304  */
305 static int racial_aux(power_desc_type *pd_ptr)
306 {
307         PLAYER_LEVEL min_level  = pd_ptr->level;
308         int use_stat   = pd_ptr->stat;
309         int difficulty = pd_ptr->fail;
310         int use_hp = 0;
311
312         racial_cost = pd_ptr->cost;
313
314         /* Not enough mana - use hp */
315         if (p_ptr->csp < racial_cost) use_hp = racial_cost - p_ptr->csp;
316
317         /* Power is not available yet */
318         if (p_ptr->lev < min_level)
319         {
320                 msg_format(_("この能力を使用するにはレベル %d に達していなければなりません。", 
321                                          "You need to attain level %d to use this power."), min_level);
322
323                 free_turn(p_ptr);
324                 return FALSE;
325         }
326
327         if (cmd_limit_confused(p_ptr))
328         {
329                 free_turn(p_ptr);
330                 return FALSE;
331         }
332
333         /* Risk death? */
334         else if (p_ptr->chp < use_hp)
335         {
336                 if (!get_check(_("本当に今の衰弱した状態でこの能力を使いますか?", "Really use the power in your weakened state? ")))
337                 {
338                         free_turn(p_ptr);
339                         return FALSE;
340                 }
341         }
342
343         /* Else attempt to do it! */
344
345         if (difficulty)
346         {
347                 if (p_ptr->stun)
348                 {
349                         difficulty += p_ptr->stun;
350                 }
351                 else if (p_ptr->lev > min_level)
352                 {
353                         int lev_adj = ((p_ptr->lev - min_level) / 3);
354                         if (lev_adj > 10) lev_adj = 10;
355                         difficulty -= lev_adj;
356                 }
357
358                 if (difficulty < 5) difficulty = 5;
359         }
360
361         /* take time and pay the price */
362         take_turn(p_ptr, 100);
363
364         /* Success? */
365         if (randint1(p_ptr->stat_cur[use_stat]) >= ((difficulty / 2) + randint1(difficulty / 2)))
366         {
367                 return 1;
368         }
369
370         if (flush_failure) flush();
371         msg_print(_("充分に集中できなかった。", "You've failed to concentrate hard enough."));
372
373         return -1;
374 }
375
376
377 /*!
378  * @brief レイシャル・パワー発動処理
379  * @param command 発動するレイシャルのID
380  * @return 処理を実際に実行した場合はTRUE、キャンセルした場合FALSEを返す。
381  */
382 static bool cmd_racial_power_aux(s32b command)
383 {
384         PLAYER_LEVEL plev = p_ptr->lev;
385         DIRECTION dir = 0;
386
387         if (command <= -3)
388         {
389                 switch (p_ptr->pclass)
390                 {
391                 case CLASS_WARRIOR:
392                 {
393                         return sword_dancing(p_ptr);
394                         break;
395                 }
396                 case CLASS_HIGH_MAGE:
397                 if (p_ptr->realm1 == REALM_HEX)
398                 {
399                         bool retval = stop_hex_spell();
400                         if (retval) p_ptr->energy_use = 10;
401                         return (retval);
402                 }
403                 case CLASS_MAGE:
404                 /* case CLASS_HIGH_MAGE: */
405                 case CLASS_SORCERER:
406                 {
407                         if (!eat_magic(p_ptr->lev * 2)) return FALSE;
408                         break;
409                 }
410                 case CLASS_PRIEST:
411                 {
412                         if (is_good_realm(p_ptr->realm1))
413                         {
414                                 if (!bless_weapon()) return FALSE;
415                         }
416                         else
417                         {
418                                 (void)dispel_monsters(plev * 4);
419                                 turn_monsters(plev * 4);
420                                 banish_monsters(plev * 4);
421                         }
422                         break;
423                 }
424                 case CLASS_ROGUE:
425                 {
426                         if(!panic_hit()) return FALSE;
427                         break;
428                 }
429                 case CLASS_RANGER:
430                 case CLASS_SNIPER:
431                 {
432                         msg_print(_("敵を調査した...", "You examine your foes..."));
433                         probing();
434                         break;
435                 }
436                 case CLASS_PALADIN:
437                 {
438                         if (!get_aim_dir(&dir)) return FALSE;
439                         fire_beam(is_good_realm(p_ptr->realm1) ? GF_HOLY_FIRE : GF_HELL_FIRE,
440                                   dir, plev * 3);
441                         break;
442                 }
443                 case CLASS_WARRIOR_MAGE:
444                 {
445                         if (command == -3)
446                         {
447                                 return comvert_hp_to_mp(p_ptr);
448                         }
449                         else if (command == -4)
450                         {
451                                 return comvert_mp_to_hp(p_ptr);
452                         }
453                         break;
454                 }
455                 case CLASS_CHAOS_WARRIOR:
456                 {
457                         return confusing_light(p_ptr);
458                         break;
459                 }
460                 case CLASS_MONK:
461                 {
462                         if (!(empty_hands(TRUE) & EMPTY_HAND_RARM))
463                         {
464                                 msg_print(_("素手じゃないとできません。", "You need to be bare hand."));
465                                 return FALSE;
466                         }
467                         if (p_ptr->riding)
468                         {
469                                 msg_print(_("乗馬中はできません。", "You need to get off a pet."));
470                                 return FALSE;
471                         }
472
473                         if (command == -3)
474                         {
475                                 if (!choose_kamae()) return FALSE;
476                                 p_ptr->update |= (PU_BONUS);
477                         }
478                         else if (command == -4)
479                         {
480                                 return double_attack(p_ptr);
481                         }
482                         break;
483                 }
484                 case CLASS_MINDCRAFTER:
485                 case CLASS_FORCETRAINER:
486                 {
487                         return clear_mind(p_ptr);
488                 }
489                 case CLASS_TOURIST:
490                 {
491                         if (command == -3)
492                         {
493                                 if (!get_aim_dir(&dir)) return FALSE;
494                                 project_length = 1;
495                                 fire_beam(GF_PHOTO, dir, 1);
496                         }
497                         else if (command == -4)
498                         {
499                                 if (!identify_fully(FALSE)) return FALSE;
500                         }
501                         break;
502                 }
503                 case CLASS_IMITATOR:
504                 {
505                         handle_stuff();
506                         if (!do_cmd_mane(TRUE)) return FALSE;
507                         break;
508                 }
509                 case CLASS_BEASTMASTER:
510                 {
511                         if (command == -3)
512                         {
513                                 if (!get_aim_dir(&dir)) return FALSE;
514                                 (void)fire_ball_hide(GF_CHARM_LIVING, dir, p_ptr->lev, 0);
515                         }
516                         else if (command == -4)
517                         {
518                                 project_all_los(GF_CHARM_LIVING, p_ptr->lev);
519                         }
520                         break;
521                 }
522                 case CLASS_ARCHER:
523                 {
524                         if (!create_ammo()) return FALSE;
525                         break;
526                 }
527                 case CLASS_MAGIC_EATER:
528                 {
529                         if (command == -3) {
530                                 if (!import_magic_device()) return FALSE;
531                         } else if (command == -4) {
532                                 if (cmd_limit_cast(p_ptr)) return FALSE;
533                                 if (!do_cmd_magic_eater(FALSE, TRUE)) return FALSE;
534                         }
535                         break;
536                 }
537                 case CLASS_BARD:
538                 {
539                         /* Singing is already stopped */
540                         if (!SINGING_SONG_EFFECT(p_ptr) && !INTERUPTING_SONG_EFFECT(p_ptr)) return FALSE;
541
542                         stop_singing(p_ptr);
543                         p_ptr->energy_use = 10;
544                         break;
545                 }
546                 case CLASS_RED_MAGE:
547                 {
548                         if (cmd_limit_cast(p_ptr)) return FALSE;
549                         handle_stuff();
550                         do_cmd_cast();
551                         handle_stuff();
552                         if (!p_ptr->paralyzed && !cmd_limit_cast(p_ptr))
553                                 do_cmd_cast();
554                         break;
555                 }
556                 case CLASS_SAMURAI:
557                 {
558                         if (command == -3)
559                         {
560                                 concentration(p_ptr);
561                         }
562                         else if (command == -4)
563                         {
564                                 if (!has_melee_weapon(INVEN_RARM) && !has_melee_weapon(INVEN_LARM))
565                                 {
566                                         msg_print(_("武器を持たないといけません。", "You need to wield a weapon."));
567                                         return FALSE;
568                                 }
569                                 if (!choose_kata()) return FALSE;
570                                 p_ptr->update |= (PU_BONUS);
571                         }
572                         break;
573                 }
574                 case CLASS_BLUE_MAGE:
575                 {
576                         if (p_ptr->action == ACTION_LEARN)
577                         {
578                                 set_action(ACTION_NONE);
579                         }
580                         else
581                         {
582                                 set_action(ACTION_LEARN);
583                         }
584                         free_turn(p_ptr);
585                         break;
586                 }
587                 case CLASS_CAVALRY:
588                 {
589                         return rodeo(p_ptr);
590                 }
591                 case CLASS_BERSERKER:
592                 {
593                         if (!recall_player(p_ptr, randint0(21) + 15)) return FALSE;
594                         break;
595                 }
596                 case CLASS_SMITH:
597                 {
598                         if (p_ptr->lev > 29)
599                         {
600                                 if (!identify_fully(TRUE)) return FALSE;
601                         }
602                         else
603                         {
604                                 if (!ident_spell(TRUE)) return FALSE;
605                         }
606                         break;
607                 }
608                 case CLASS_MIRROR_MASTER:
609                 {
610                         if (command == -3)
611                         {
612                                 /* Explode all mirrors */
613                                 remove_all_mirrors(TRUE);
614                         }
615                         else if (command == -4)
616                         {
617                                 return mirror_concentration(p_ptr);
618                         }
619                         break;
620                 }
621                 case CLASS_NINJA:
622                         hayagake(p_ptr);
623                         break;
624                 }
625         }
626         else if (p_ptr->mimic_form)
627         {
628                 switch (p_ptr->mimic_form)
629                 {
630                 case MIMIC_DEMON:
631                 case MIMIC_DEMON_LORD:
632                 {
633                         return demonic_breath(p_ptr);
634                 }
635                 case MIMIC_VAMPIRE:
636                         vampirism();
637                         break;
638                 }
639         }
640
641         else 
642         {
643
644         switch (p_ptr->prace)
645         {
646                 case RACE_DWARF:
647                         msg_print(_("周囲を調べた。", "You examine your surroundings."));
648                         (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);
649                         (void)detect_doors(DETECT_RAD_DEFAULT);
650                         (void)detect_stairs(DETECT_RAD_DEFAULT);
651                         break;
652
653                 case RACE_HOBBIT:
654                         return create_ration(p_ptr);
655                         break;
656
657                 case RACE_GNOME:
658                         msg_print(_("パッ!", "Blink!"));
659                         teleport_player(10, 0L);
660                         break;
661
662                 case RACE_HALF_ORC:
663                         msg_print(_("勇気を出した。", "You play tough."));
664                         (void)set_afraid(0);
665                         break;
666
667                 case RACE_HALF_TROLL:
668                         msg_print(_("うがぁぁ!", "RAAAGH!"));
669                         (void)berserk(10 + randint1(plev));
670                         break;
671
672                 case RACE_AMBERITE:
673                         if (command == -1)
674                         {
675                                 msg_print(_("あなたは歩き周り始めた。", "You start walking around. "));
676                                 alter_reality();
677                         }
678                         else if (command == -2)
679                         {
680                                 msg_print(_("あなたは「パターン」を心に描いてその上を歩いた...", "You picture the Pattern in your mind and walk it..."));
681
682                                 (void)true_healing(0);
683                                 (void)restore_all_status();
684                                 (void)restore_level();
685                         }
686                         break;
687
688                 case RACE_BARBARIAN:
689                         msg_print(_("うぉぉおお!", "Raaagh!"));
690                         (void)berserk(10 + randint1(plev));
691                         break;
692
693                 case RACE_HALF_OGRE:
694                         msg_print(_("爆発のルーンを慎重に仕掛けた...", "You carefully set an explosive rune..."));
695                         explosive_rune();
696                         break;
697
698                 case RACE_HALF_GIANT:
699                         if (!get_aim_dir(&dir)) return FALSE;
700                         (void)wall_to_mud(dir, 20 + randint1(30));
701                         break;
702
703                 case RACE_HALF_TITAN:
704                         msg_print(_("敵を調査した...", "You examine your foes..."));
705                         probing();
706                         break;
707
708                 case RACE_CYCLOPS:
709                         if (!get_aim_dir(&dir)) return FALSE;
710                         msg_print(_("巨大な岩を投げた。", "You throw a huge boulder."));
711                         fire_bolt(GF_MISSILE, dir, (3 * plev) / 2);
712                         break;
713
714                 case RACE_YEEK:
715                         if (!get_aim_dir(&dir)) return FALSE;
716                         stop_mouth();
717                         msg_print(_("身の毛もよだつ叫び声を上げた!", "You make a horrible scream!"));
718                         (void)fear_monster(dir, plev);
719                         break;
720
721                 case RACE_KLACKON:
722                         if (!get_aim_dir(&dir)) return FALSE;
723                         stop_mouth();
724                         msg_print(_("酸を吐いた。", "You spit acid."));
725                         if (plev < 25) fire_bolt(GF_ACID, dir, plev);
726                         else fire_ball(GF_ACID, dir, plev, 2);
727                         break;
728
729                 case RACE_KOBOLD:
730                         if (!get_aim_dir(&dir)) return FALSE;
731                         msg_print(_("毒のダーツを投げた。", "You throw a dart of poison."));
732                         fire_bolt(GF_POIS, dir, plev);
733                         break;
734
735                 case RACE_NIBELUNG:
736                         msg_print(_("周囲を調査した。", "You examine your surroundings."));
737                         (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);
738                         (void)detect_doors(DETECT_RAD_DEFAULT);
739                         (void)detect_stairs(DETECT_RAD_DEFAULT);
740                         break;
741
742                 case RACE_DARK_ELF:
743                         if (!get_aim_dir(&dir)) return FALSE;
744                         msg_print(_("マジック・ミサイルを放った。", "You cast a magic missile."));
745                         fire_bolt_or_beam(10, GF_MISSILE, dir, damroll(3 + ((plev - 1) / 5), 4));
746                         break;
747
748                 case RACE_DRACONIAN:
749                         return draconian_breath(p_ptr);
750                         break;
751
752                 case RACE_MIND_FLAYER:
753                         if (!get_aim_dir(&dir)) return FALSE;
754                         msg_print(_("あなたは集中し、目が赤く輝いた...", "You concentrate and your eyes glow red..."));
755                         fire_bolt(GF_PSI, dir, plev);
756                         break;
757
758                 case RACE_IMP:
759                         if (!get_aim_dir(&dir)) return FALSE;
760                         if (plev >= 30)
761                         {
762                                 msg_print(_("ファイア・ボールを放った。", "You cast a ball of fire."));
763                                 fire_ball(GF_FIRE, dir, plev, 2);
764                         }
765                         else
766                         {
767                                 msg_print(_("ファイア・ボルトを放った。", "You cast a bolt of fire."));
768                                 fire_bolt(GF_FIRE, dir, plev);
769                         }
770                         break;
771
772                 case RACE_GOLEM:
773                         (void)set_shield(randint1(20) + 30, FALSE);
774                         break;
775
776                 case RACE_SKELETON:
777                 case RACE_ZOMBIE:
778                         msg_print(_("あなたは失ったエネルギーを取り戻そうと試みた。", "You attempt to restore your lost energies."));
779                         (void)restore_level();
780                         break;
781
782                 case RACE_VAMPIRE:
783                         vampirism();
784                         break;
785
786                 case RACE_SPECTRE:
787                         if (!get_aim_dir(&dir)) return FALSE;
788                         stop_mouth();
789                         msg_print(_("あなたはおどろおどろしい叫び声をあげた!", "You emit an eldritch howl!"));
790                         (void)fear_monster(dir, plev);
791                         break;
792
793                 case RACE_SPRITE:
794                         msg_print(_("あなたは魔法の粉を投げつけた...", "You throw some magic dust..."));
795                         if (plev < 25) sleep_monsters_touch();
796                         else (void)sleep_monsters(plev);
797                         break;
798
799                 case RACE_DEMON:
800                         return demonic_breath(p_ptr); 
801                         break;
802
803                 case RACE_KUTAR:
804                         (void)set_tsubureru(randint1(20) + 30, FALSE);
805                         break;
806
807                 case RACE_ANDROID:
808                         return android_inside_weapon(p_ptr);
809                         break;
810
811                 default:
812                         msg_print(_("この種族は特殊な能力を持っていません。", "This race has no bonus power."));
813                         free_turn(p_ptr);
814         }
815         }
816         return TRUE;
817 }
818
819 /*!
820  * @brief レイシャル・パワーコマンドのメインルーチン / Allow user to choose a power (racial / mutation) to activate
821  * @return なし
822  */
823 void do_cmd_racial_power(void)
824 {
825         power_desc_type power_desc[36];
826         int num;
827         COMMAND_CODE i = 0;
828         int ask = TRUE;
829         PLAYER_LEVEL lvl = p_ptr->lev;
830         bool            flag, redraw, cast = FALSE;
831         bool            warrior = ((p_ptr->pclass == CLASS_WARRIOR || p_ptr->pclass == CLASS_BERSERKER) ? TRUE : FALSE);
832         char            choice;
833         char            out_val[160];
834         int menu_line = (use_menu ? 1 : 0);
835
836         if (p_ptr->wild_mode) return;
837
838         for (num = 0; num < 36; num++)
839         {
840                 strcpy(power_desc[num].name, "");
841                 power_desc[num].number = 0;
842         }
843
844         num = 0;
845
846         if (cmd_limit_confused(p_ptr))
847         {
848                 free_turn(p_ptr);
849                 return;
850         }
851
852         if (p_ptr->special_defense & (KATA_MUSOU | KATA_KOUKIJIN))
853         {
854                 set_action(ACTION_NONE);
855         }
856
857         switch (p_ptr->pclass)
858         {
859         case CLASS_WARRIOR:
860         {
861                 strcpy(power_desc[num].name, _("剣の舞い", "Sword Dancing"));
862                 power_desc[num].level = 40;
863                 power_desc[num].cost = 75;
864                 power_desc[num].stat = A_DEX;
865                 power_desc[num].fail = 35;
866                 power_desc[num++].number = -3;
867                 break;
868         }
869         case CLASS_HIGH_MAGE:
870         if (p_ptr->realm1 == REALM_HEX)
871         {
872                 strcpy(power_desc[num].name, _("詠唱をやめる", "Stop spelling"));
873                 power_desc[num].level = 1;
874                 power_desc[num].cost = 0;
875                 power_desc[num].stat = A_INT;
876                 power_desc[num].fail = 0;
877                 power_desc[num++].number = -3;
878                 break;
879         }
880         case CLASS_MAGE:
881         /* case CLASS_HIGH_MAGE: */
882         case CLASS_SORCERER:
883         {
884                 strcpy(power_desc[num].name, _("魔力食い", "Eat Magic"));
885                 power_desc[num].level = 25;
886                 power_desc[num].cost = 1;
887                 power_desc[num].stat = A_INT;
888                 power_desc[num].fail = 25;
889                 power_desc[num++].number = -3;
890                 break;
891         }
892         case CLASS_PRIEST:
893         {
894                 if (is_good_realm(p_ptr->realm1))
895                 {
896                         strcpy(power_desc[num].name, _("武器祝福", "Bless Weapon"));
897                         power_desc[num].level = 35;
898                         power_desc[num].cost = 70;
899                         power_desc[num].stat = A_WIS;
900                         power_desc[num].fail = 50;
901                         power_desc[num++].number = -3;
902                 }
903                 else
904                 {
905                         strcpy(power_desc[num].name, _("召魂", "Evocation"));
906                         power_desc[num].level = 42;
907                         power_desc[num].cost = 40;
908                         power_desc[num].stat = A_WIS;
909                         power_desc[num].fail = 35;
910                         power_desc[num++].number = -3;
911                 }
912                 break;
913         }
914         case CLASS_ROGUE:
915         {
916                 strcpy(power_desc[num].name, _("ヒット&アウェイ", "Hit and Away"));
917                 power_desc[num].level = 8;
918                 power_desc[num].cost = 12;
919                 power_desc[num].stat = A_DEX;
920                 power_desc[num].fail = 14;
921                 power_desc[num++].number = -3;
922                 break;
923         }
924         case CLASS_RANGER:
925         case CLASS_SNIPER:
926         {
927                 strcpy(power_desc[num].name, _("モンスター調査", "Probe Monster"));
928                 power_desc[num].level = 15;
929                 power_desc[num].cost = 20;
930                 power_desc[num].stat = A_INT;
931                 power_desc[num].fail = 12;
932                 power_desc[num++].number = -3;
933                 break;
934         }
935         case CLASS_PALADIN:
936         {
937                 if (is_good_realm(p_ptr->realm1))
938                 {
939                         strcpy(power_desc[num].name, _("ホーリー・ランス", "Holy Lance"));
940                         power_desc[num].level = 30;
941                         power_desc[num].cost = 30;
942                         power_desc[num].stat = A_WIS;
943                         power_desc[num].fail = 30;
944                         power_desc[num++].number = -3;
945                 }
946                 else
947                 {
948                         strcpy(power_desc[num].name, _("ヘル・ランス", "Hell Lance"));
949                         power_desc[num].level = 30;
950                         power_desc[num].cost = 30;
951                         power_desc[num].stat = A_WIS;
952                         power_desc[num].fail = 30;
953                         power_desc[num++].number = -3;
954                 }
955                 break;
956         }
957         case CLASS_WARRIOR_MAGE:
958         {
959                 strcpy(power_desc[num].name, _("変換: HP→MP", "Convert HP to SP"));
960                 power_desc[num].level = 25;
961                 power_desc[num].cost = 0;
962                 power_desc[num].stat = A_INT;
963                 power_desc[num].fail = 10;
964                 power_desc[num++].number = -3;
965                         
966                 strcpy(power_desc[num].name, _("変換: MP→HP", "Convert SP to HP"));
967                 power_desc[num].level = 25;
968                 power_desc[num].cost = 0;
969                 power_desc[num].stat = A_INT;
970                 power_desc[num].fail = 10;
971                 power_desc[num++].number = -4;
972                 break;
973         }
974         case CLASS_CHAOS_WARRIOR:
975         {
976                 strcpy(power_desc[num].name, _("幻惑の光", "Confusing Light"));
977                 power_desc[num].level = 40;
978                 power_desc[num].cost = 50;
979                 power_desc[num].stat = A_INT;
980                 power_desc[num].fail = 25;
981                 power_desc[num++].number = -3;
982                 break;
983         }
984         case CLASS_MONK:
985         {
986                 strcpy(power_desc[num].name, _("構える", "Assume a Posture"));
987                 power_desc[num].level = 25;
988                 power_desc[num].cost = 0;
989                 power_desc[num].stat = A_DEX;
990                 power_desc[num].fail = 0;
991                 power_desc[num++].number = -3;
992                         
993                 strcpy(power_desc[num].name, _("百裂拳", "Double Attack"));
994                 power_desc[num].level = 30;
995                 power_desc[num].cost = 30;
996                 power_desc[num].stat = A_STR;
997                 power_desc[num].fail = 20;
998                 power_desc[num++].number = -4;
999                 break;
1000         }
1001         case CLASS_MINDCRAFTER:
1002         case CLASS_FORCETRAINER:
1003         {
1004                 strcpy(power_desc[num].name, _("明鏡止水", "Clear Mind"));
1005                 power_desc[num].level = 15;
1006                 power_desc[num].cost = 0;
1007                 power_desc[num].stat = A_WIS;
1008                 power_desc[num].fail = 10;
1009                 power_desc[num++].number = -3;
1010                 break;
1011         }
1012         case CLASS_TOURIST:
1013         {
1014                 strcpy(power_desc[num].name, _("写真撮影", "Take a Photograph"));
1015                 power_desc[num].level = 1;
1016                 power_desc[num].cost = 0;
1017                 power_desc[num].stat = A_DEX;
1018                 power_desc[num].fail = 0;
1019                 power_desc[num++].number = -3;
1020                 
1021                 strcpy(power_desc[num].name, _("真・鑑定", "Identify True"));
1022                 power_desc[num].level = 25;
1023                 power_desc[num].cost = 20;
1024                 power_desc[num].stat = A_INT;
1025                 power_desc[num].fail = 20;
1026                 power_desc[num++].number = -4;
1027                 break;
1028         }
1029         case CLASS_IMITATOR:
1030         {
1031                 strcpy(power_desc[num].name, _("倍返し", "Double Revenge"));
1032                 power_desc[num].level = 30;
1033                 power_desc[num].cost = 100;
1034                 power_desc[num].stat = A_DEX;
1035                 power_desc[num].fail = 30;
1036                 power_desc[num++].number = -3;
1037                 break;
1038         }
1039         case CLASS_BEASTMASTER:
1040         {
1041                 strcpy(power_desc[num].name, _("生物支配", "Dominate a Living Thing"));
1042                 power_desc[num].level = 1;
1043                 power_desc[num].cost = (p_ptr->lev+3)/4;
1044                 power_desc[num].stat = A_CHR;
1045                 power_desc[num].fail = 10;
1046                 power_desc[num++].number = -3;
1047                 
1048                 strcpy(power_desc[num].name, _("真・生物支配", "Dominate Living Things"));
1049                 power_desc[num].level = 30;
1050                 power_desc[num].cost = (p_ptr->lev+20)/2;
1051                 power_desc[num].stat = A_CHR;
1052                 power_desc[num].fail = 10;
1053                 power_desc[num++].number = -4;
1054                 break;
1055         }
1056         case CLASS_ARCHER:
1057         {
1058                 strcpy(power_desc[num].name, _("弾/矢の製造", "Create Ammo"));
1059                 power_desc[num].level = 1;
1060                 power_desc[num].cost = 0;
1061                 power_desc[num].stat = A_DEX;
1062                 power_desc[num].fail = 0;
1063                 power_desc[num++].number = -3;
1064                 break;
1065         }
1066         case CLASS_MAGIC_EATER:
1067         {
1068                 strcpy(power_desc[num].name, _("魔力の取り込み", "Absorb Magic"));
1069                 power_desc[num].level = 1;
1070                 power_desc[num].cost = 0;
1071                 power_desc[num].stat = A_INT;
1072                 power_desc[num].fail = 0;
1073                 power_desc[num++].number = -3;
1074
1075                 strcpy(power_desc[num].name, _("強力発動", "Powerful Activation"));
1076                 power_desc[num].level = 10;
1077                 power_desc[num].cost = 10 + (lvl - 10) / 2;
1078                 power_desc[num].stat = A_INT;
1079                 power_desc[num].fail = 0;
1080                 power_desc[num++].number = -4;
1081                 break;
1082         }
1083         case CLASS_BARD:
1084         {
1085                 strcpy(power_desc[num].name, _("歌を止める", "Stop Singing"));
1086                 power_desc[num].level = 1;
1087                 power_desc[num].cost = 0;
1088                 power_desc[num].stat = A_CHR;
1089                 power_desc[num].fail = 0;
1090                 power_desc[num++].number = -3;
1091                 break;
1092         }
1093         case CLASS_RED_MAGE:
1094         {
1095                 strcpy(power_desc[num].name, _("連続魔", "Double Magic"));
1096                 power_desc[num].level = 48;
1097                 power_desc[num].cost = 20;
1098                 power_desc[num].stat = A_INT;
1099                 power_desc[num].fail = 0;
1100                 power_desc[num++].number = -3;
1101                 break;
1102         }
1103         case CLASS_SAMURAI:
1104         {
1105                 strcpy(power_desc[num].name, _("気合いため", "Concentration"));
1106                 power_desc[num].level = 1;
1107                 power_desc[num].cost = 0;
1108                 power_desc[num].stat = A_WIS;
1109                 power_desc[num].fail = 0;
1110                 power_desc[num++].number = -3;
1111                 
1112                 strcpy(power_desc[num].name, _("型", "Assume a Posture"));
1113                 power_desc[num].level = 25;
1114                 power_desc[num].cost = 0;
1115                 power_desc[num].stat = A_DEX;
1116                 power_desc[num].fail = 0;
1117                 power_desc[num++].number = -4;
1118                 break;
1119         }
1120         case CLASS_BLUE_MAGE:
1121         {
1122                 strcpy(power_desc[num].name, _("ラーニング", "Learning"));
1123                 power_desc[num].level = 1;
1124                 power_desc[num].cost = 0;
1125                 power_desc[num].stat = A_INT;
1126                 power_desc[num].fail = 0;
1127                 power_desc[num++].number = -3;
1128                 break;
1129         }
1130         case CLASS_CAVALRY:
1131         {
1132                 strcpy(power_desc[num].name, _("荒馬ならし", "Rodeo"));
1133                 power_desc[num].level = 10;
1134                 power_desc[num].cost = 0;
1135                 power_desc[num].stat = A_STR;
1136                 power_desc[num].fail = 10;
1137                 power_desc[num++].number = -3;
1138                 break;
1139         }
1140         case CLASS_BERSERKER:
1141         {
1142                 strcpy(power_desc[num].name, _("帰還", "Recall"));
1143                 power_desc[num].level = 10;
1144                 power_desc[num].cost = 10;
1145                 power_desc[num].stat = A_DEX;
1146                 power_desc[num].fail = 20;
1147                 power_desc[num++].number = -3;
1148                 break;
1149         }
1150         case CLASS_MIRROR_MASTER:
1151         {
1152                 strcpy(power_desc[num].name, _("鏡割り", "Break Mirrors"));
1153                 power_desc[num].level = 1;
1154                 power_desc[num].cost = 0;
1155                 power_desc[num].stat = A_INT;
1156                 power_desc[num].fail = 0;
1157                 power_desc[num++].number = -3;
1158                 
1159                 strcpy(power_desc[num].name, _("静水", "Mirror Concentration"));
1160                 power_desc[num].level = 30;
1161                 power_desc[num].cost = 0;
1162                 power_desc[num].stat = A_INT;
1163                 power_desc[num].fail = 20;
1164                 power_desc[num++].number = -4;
1165                 break;
1166         }
1167         case CLASS_SMITH:
1168         {
1169                 strcpy(power_desc[num].name, _("目利き", "Judgment"));
1170                 power_desc[num].level = 5;
1171                 power_desc[num].cost = 15;
1172                 power_desc[num].stat = A_INT;
1173                 power_desc[num].fail = 20;
1174                 power_desc[num++].number = -3;
1175                 break;
1176         }
1177         case CLASS_NINJA:
1178         {
1179                 strcpy(power_desc[num].name, _("速駆け", "Quick Walk"));
1180                 power_desc[num].level = 20;
1181                 power_desc[num].cost = 0;
1182                 power_desc[num].stat = A_DEX;
1183                 power_desc[num].fail = 0;
1184                 power_desc[num++].number = -3;
1185                 break;
1186         }
1187         default:
1188                 strcpy(power_desc[0].name, _("(なし)", "(none)"));
1189         }
1190
1191         if (p_ptr->mimic_form)
1192         {
1193                 switch (p_ptr->mimic_form)
1194                 {
1195                 case MIMIC_DEMON:
1196                 case MIMIC_DEMON_LORD:
1197                         sprintf(power_desc[num].name, _("地獄/火炎のブレス (ダメージ %d)", "Nether or Fire Breath (dam %d)"), lvl * 3);
1198                         power_desc[num].level = 15;
1199                         power_desc[num].cost = 10+lvl/3;
1200                         power_desc[num].stat = A_CON;
1201                         power_desc[num].fail = 20;
1202                         power_desc[num++].number = -1;
1203                         break;
1204                 case MIMIC_VAMPIRE:
1205                         strcpy(power_desc[num].name, _("吸血", "Vampiric Drain"));
1206                         power_desc[num].level = 2;
1207                         power_desc[num].cost = 1 + (lvl / 3);
1208                         power_desc[num].stat = A_CON;
1209                         power_desc[num].fail = 9;
1210                         power_desc[num++].number = -1;
1211                         break;
1212                 }
1213         }
1214         else
1215         {
1216         switch (p_ptr->prace)
1217         {
1218                 case RACE_DWARF:
1219                         strcpy(power_desc[num].name, _("ドアと罠 感知", "Detect Doors+Traps"));
1220                         power_desc[num].level = 5;
1221                         power_desc[num].cost = 5;
1222                         power_desc[num].stat = A_WIS;
1223                         power_desc[num].fail = 12;
1224                         power_desc[num++].number = -1;
1225                         break;
1226                 case RACE_NIBELUNG:
1227                         strcpy(power_desc[num].name, _("ドアと罠 感知", "Detect Doors+Traps"));
1228                         power_desc[num].level = 10;
1229                         power_desc[num].cost = 5;
1230                         power_desc[num].stat = A_WIS;
1231                         power_desc[num].fail = 10;
1232                         power_desc[num++].number = -1;
1233                         break;
1234                 case RACE_HOBBIT:
1235                         strcpy(power_desc[num].name, _("食糧生成", "Create Food"));
1236                         power_desc[num].level = 15;
1237                         power_desc[num].cost = 10;
1238                         power_desc[num].stat = A_INT;
1239                         power_desc[num].fail = 10;
1240                         power_desc[num++].number = -1;
1241                         break;
1242                 case RACE_GNOME:
1243                         sprintf(power_desc[num].name, _("ショート・テレポート", "Blink"));
1244                         power_desc[num].level = 5;
1245                         power_desc[num].cost = 5;
1246                         power_desc[num].stat = A_INT;
1247                         power_desc[num].fail = 12;
1248                         power_desc[num++].number = -1;
1249                         break;
1250                 case RACE_HALF_ORC:
1251                         strcpy(power_desc[num].name, _("恐怖除去", "Remove Fear"));
1252                         power_desc[num].level = 3;
1253                         power_desc[num].cost = 5;
1254                         power_desc[num].stat = A_WIS;
1255                         power_desc[num].fail = warrior ? 5 : 10;
1256                         power_desc[num++].number = -1;
1257                         break;
1258                 case RACE_HALF_TROLL:
1259                         strcpy(power_desc[num].name, _("狂戦士化", "Berserk"));
1260                         power_desc[num].level = 10;
1261                         power_desc[num].cost = 12;
1262                         power_desc[num].stat = A_STR;
1263                         power_desc[num].fail = warrior ? 6 : 12;
1264                         power_desc[num++].number = -1;
1265                         break;
1266                 case RACE_BARBARIAN:
1267                         strcpy(power_desc[num].name, _("狂戦士化", "Berserk"));
1268                         power_desc[num].level = 8;
1269                         power_desc[num].cost = 10;
1270                         power_desc[num].stat = A_STR;
1271                         power_desc[num].fail = warrior ? 6 : 12;
1272                         power_desc[num++].number = -1;
1273                         break;
1274                 case RACE_AMBERITE:
1275                         strcpy(power_desc[num].name, _("シャドウ・シフト", "Shadow Shifting"));
1276                         power_desc[num].level = 30;
1277                         power_desc[num].cost = 50;
1278                         power_desc[num].stat = A_INT;
1279                         power_desc[num].fail = 50;
1280                         power_desc[num++].number = -1;
1281                         
1282                         strcpy(power_desc[num].name, _("パターン・ウォーク", "Pattern Mindwalking"));
1283                         power_desc[num].level = 40;
1284                         power_desc[num].cost = 75;
1285                         power_desc[num].stat = A_WIS;
1286                         power_desc[num].fail = 50;
1287                         power_desc[num++].number = -2;
1288                         break;
1289                 case RACE_HALF_OGRE:
1290                         strcpy(power_desc[num].name, _("爆発のルーン", "Explosive Rune"));
1291                         power_desc[num].level = 25;
1292                         power_desc[num].cost = 35;
1293                         power_desc[num].stat = A_INT;
1294                         power_desc[num].fail = 15;
1295                         power_desc[num++].number = -1;
1296                         break;
1297                 case RACE_HALF_GIANT:
1298                         strcpy(power_desc[num].name, _("岩石溶解", "Stone to Mud"));
1299                         power_desc[num].level = 20;
1300                         power_desc[num].cost = 10;
1301                         power_desc[num].stat = A_STR;
1302                         power_desc[num].fail = 12;
1303                         power_desc[num++].number = -1;
1304                         break;
1305                 case RACE_HALF_TITAN:
1306                         strcpy(power_desc[num].name, _("スキャン・モンスター", "Probing"));
1307                         power_desc[num].level = 15;
1308                         power_desc[num].cost = 10;
1309                         power_desc[num].stat = A_INT;
1310                         power_desc[num].fail = 12;
1311                         power_desc[num++].number = -1;
1312                         break;
1313                 case RACE_CYCLOPS:
1314                         sprintf(power_desc[num].name, _("岩石投げ(ダメージ %d)", "Throw Boulder (dam %d)"), (3 * lvl) / 2);
1315                         power_desc[num].level = 20;
1316                         power_desc[num].cost = 15;
1317                         power_desc[num].stat = A_STR;
1318                         power_desc[num].fail = 12;
1319                         power_desc[num++].number = -1;
1320                         break;
1321                 case RACE_YEEK:
1322                         strcpy(power_desc[num].name, _("モンスター恐慌", "Scare Monster"));
1323                         power_desc[num].level = 15;
1324                         power_desc[num].cost = 15;
1325                         power_desc[num].stat = A_WIS;
1326                         power_desc[num].fail = 10;
1327                         power_desc[num++].number = -1;
1328                         break;
1329                 case RACE_SPECTRE:
1330                         strcpy(power_desc[num].name, _("モンスター恐慌", "Scare Monster"));
1331                         power_desc[num].level = 4;
1332                         power_desc[num].cost = 6;
1333                         power_desc[num].stat = A_INT;
1334                         power_desc[num].fail = 3;
1335                         power_desc[num++].number = -1;
1336                         break;
1337                 case RACE_KLACKON:
1338                         sprintf(power_desc[num].name, _("酸の唾 (ダメージ %d)", "Spit Acid (dam %d)"), lvl);
1339                         power_desc[num].level = 9;
1340                         power_desc[num].cost = 9;
1341                         power_desc[num].stat = A_DEX;
1342                         power_desc[num].fail = 14;
1343                         power_desc[num++].number = -1;
1344                         break;
1345                 case RACE_KOBOLD:
1346                         sprintf(power_desc[num].name, _("毒のダーツ (ダメージ %d)", "Poison Dart (dam %d)"), lvl);
1347                         power_desc[num].level = 12;
1348                         power_desc[num].cost = 8;
1349                         power_desc[num].stat = A_DEX;
1350                         power_desc[num].fail = 14;
1351                         power_desc[num++].number = -1;
1352                         break;
1353                 case RACE_DARK_ELF:
1354                         sprintf(power_desc[num].name, _("マジック・ミサイル (ダメージ %dd%d)", "Magic Missile (dm %dd%d)"), 3 + ((lvl - 1) / 5), 4);
1355                         power_desc[num].level = 2;
1356                         power_desc[num].cost = 2;
1357                         power_desc[num].stat = A_INT;
1358                         power_desc[num].fail = 9;
1359                         power_desc[num++].number = -1;
1360                         break;
1361                 case RACE_DRACONIAN:
1362                         sprintf(power_desc[num].name, _("ブレス (ダメージ %d)", "Breath Weapon (dam %d)"), lvl * 2);
1363                         power_desc[num].level = 1;
1364                         power_desc[num].cost = lvl;
1365                         power_desc[num].stat = A_CON;
1366                         power_desc[num].fail = 12;
1367                         power_desc[num++].number = -1;
1368                         break;
1369                 case RACE_MIND_FLAYER:
1370                         sprintf(power_desc[num].name, _("精神攻撃 (ダメージ %d)", "Mind Blast (dam %d)"), lvl);
1371                         power_desc[num].level = 15;
1372                         power_desc[num].cost = 12;
1373                         power_desc[num].stat = A_INT;
1374                         power_desc[num].fail = 14;
1375                         power_desc[num++].number = -1;
1376                         break;
1377                 case RACE_IMP:
1378                         sprintf(power_desc[num].name, _("ファイア・ボルト/ボール (ダメージ %d)", "Fire Bolt/Ball (dam %d)"), lvl);
1379                         power_desc[num].level = 9;
1380                         power_desc[num].cost = 15;
1381                         power_desc[num].stat = A_WIS;
1382                         power_desc[num].fail = 15;
1383                         power_desc[num++].number = -1;
1384                         break;
1385                 case RACE_GOLEM:
1386                         strcpy(power_desc[num].name, _("肌石化 (期間 1d20+30)", "Stone Skin (dur 1d20+30)"));
1387                         power_desc[num].level = 20;
1388                         power_desc[num].cost = 15;
1389                         power_desc[num].stat = A_CON;
1390                         power_desc[num].fail = 8;
1391                         power_desc[num++].number = -1;
1392                         break;
1393                 case RACE_SKELETON:
1394                 case RACE_ZOMBIE:
1395                         strcpy(power_desc[num].name, _("経験値復活", "Restore Experience"));
1396                         power_desc[num].level = 30;
1397                         power_desc[num].cost = 30;
1398                         power_desc[num].stat = A_WIS;
1399                         power_desc[num].fail = 18;
1400                         power_desc[num++].number = -1;
1401                         break;
1402                 case RACE_VAMPIRE:
1403                         strcpy(power_desc[num].name, _("吸血", "Vampiric Drain"));
1404                         power_desc[num].level = 2;
1405                         power_desc[num].cost = 1 + (lvl / 3);
1406                         power_desc[num].stat = A_CON;
1407                         power_desc[num].fail = 9;
1408                         power_desc[num++].number = -1;
1409                         break;
1410                 case RACE_SPRITE:
1411                         strcpy(power_desc[num].name, _("眠り粉", "Sleeping Dust"));
1412                         power_desc[num].level = 12;
1413                         power_desc[num].cost = 12;
1414                         power_desc[num].stat = A_INT;
1415                         power_desc[num].fail = 15;
1416                         power_desc[num++].number = -1;
1417                         break;
1418                 case RACE_DEMON:
1419                         sprintf(power_desc[num].name, _("地獄/火炎のブレス (ダメージ %d)", "Nether or Fire Breath (dam %d)"), lvl * 3);
1420                         power_desc[num].level = 15;
1421                         power_desc[num].cost = 10+lvl/3;
1422                         power_desc[num].stat = A_CON;
1423                         power_desc[num].fail = 20;
1424                         power_desc[num++].number = -1;
1425                         break;
1426                 case RACE_KUTAR:
1427                         strcpy(power_desc[num].name, _("横に伸びる", "Expand Horizontally (dur 30+1d20)"));
1428                         power_desc[num].level = 20;
1429                         power_desc[num].cost = 15;
1430                         power_desc[num].stat = A_CHR;
1431                         power_desc[num].fail = 8;
1432                         power_desc[num++].number = -1;
1433                         break;
1434                 case RACE_ANDROID:
1435                         if (p_ptr->lev < 10)
1436                         {
1437                                 strcpy(power_desc[num].name, _("レイガン", "Ray Gun"));
1438                                 power_desc[num].level = 1;
1439                                 power_desc[num].cost = 7;
1440                                 power_desc[num].fail = 8;
1441                         }
1442                         else if (p_ptr->lev < 25)
1443                         {
1444                                 strcpy(power_desc[num].name, _("ブラスター", "Blaster"));
1445                                 power_desc[num].level = 10;
1446                                 power_desc[num].cost = 13;
1447                                 power_desc[num].fail = 10;
1448                         }
1449                         else if (p_ptr->lev < 35)
1450                         {
1451                                 strcpy(power_desc[num].name, _("バズーカ", "Bazooka"));
1452                                 power_desc[num].level = 25;
1453                                 power_desc[num].cost = 26;
1454                                 power_desc[num].fail = 12;
1455                         }
1456                         else if (p_ptr->lev < 45)
1457                         {
1458                                 strcpy(power_desc[num].name, _("ビームキャノン", "Beam Cannon"));
1459                                 power_desc[num].level = 35;
1460                                 power_desc[num].cost = 40;
1461                                 power_desc[num].fail = 15;
1462                         }
1463                         else
1464                         {
1465                                 strcpy(power_desc[num].name, _("ロケット", "Rocket"));
1466                                 power_desc[num].level = 45;
1467                                 power_desc[num].cost = 60;
1468                                 power_desc[num].fail = 18;
1469                         }
1470                         power_desc[num].stat = A_STR;
1471                         power_desc[num++].number = -1;
1472                         break;
1473                 default:
1474                 {
1475                         break;
1476                 }
1477         }
1478         }
1479
1480         if (p_ptr->muta1)
1481         {
1482                 if (p_ptr->muta1 & MUT1_SPIT_ACID)
1483                 {
1484                         strcpy(power_desc[num].name, _("酸の唾", "Spit Acid"));
1485                         power_desc[num].level = 9;
1486                         power_desc[num].cost = 9;
1487                         power_desc[num].stat = A_DEX;
1488                         power_desc[num].fail = 15;
1489                         power_desc[num++].number = MUT1_SPIT_ACID;
1490                 }
1491
1492                 if (p_ptr->muta1 & MUT1_BR_FIRE)
1493                 {
1494                         strcpy(power_desc[num].name, _("炎のブレス", "Fire Breath"));
1495                         power_desc[num].level = 20;
1496                         power_desc[num].cost = lvl;
1497                         power_desc[num].stat = A_CON;
1498                         power_desc[num].fail = 18;
1499                         power_desc[num++].number = MUT1_BR_FIRE;
1500                 }
1501
1502                 if (p_ptr->muta1 & MUT1_HYPN_GAZE)
1503                 {
1504                         strcpy(power_desc[num].name, _("催眠睨み", "Hypnotic Gaze"));
1505                         power_desc[num].level = 12;
1506                         power_desc[num].cost = 12;
1507                         power_desc[num].stat = A_CHR;
1508                         power_desc[num].fail = 18;
1509                         power_desc[num++].number = MUT1_HYPN_GAZE;
1510                 }
1511
1512                 if (p_ptr->muta1 & MUT1_TELEKINES)
1513                 {
1514                         strcpy(power_desc[num].name, _("念動力", "Telekinesis"));
1515                         power_desc[num].level = 9;
1516                         power_desc[num].cost = 9;
1517                         power_desc[num].stat = A_WIS;
1518                         power_desc[num].fail = 14;
1519                         power_desc[num++].number = MUT1_TELEKINES;
1520                 }
1521
1522                 if (p_ptr->muta1 & MUT1_VTELEPORT)
1523                 {
1524                         strcpy(power_desc[num].name, _("テレポート", "Teleport"));
1525                         power_desc[num].level = 7;
1526                         power_desc[num].cost = 7;
1527                         power_desc[num].stat = A_WIS;
1528                         power_desc[num].fail = 15;
1529                         power_desc[num++].number = MUT1_VTELEPORT;
1530                 }
1531
1532                 if (p_ptr->muta1 & MUT1_MIND_BLST)
1533                 {
1534                         strcpy(power_desc[num].name, _("精神攻撃", "Mind Blast"));
1535                         power_desc[num].level = 5;
1536                         power_desc[num].cost = 3;
1537                         power_desc[num].stat = A_WIS;
1538                         power_desc[num].fail = 15;
1539                         power_desc[num++].number = MUT1_MIND_BLST;
1540                 }
1541
1542                 if (p_ptr->muta1 & MUT1_RADIATION)
1543                 {
1544                         strcpy(power_desc[num].name, _("放射能", "Emit Radiation"));
1545                         power_desc[num].level = 15;
1546                         power_desc[num].cost = 15;
1547                         power_desc[num].stat = A_CON;
1548                         power_desc[num].fail = 14;
1549                         power_desc[num++].number = MUT1_RADIATION;
1550                 }
1551
1552                 if (p_ptr->muta1 & MUT1_VAMPIRISM)
1553                 {
1554                         strcpy(power_desc[num].name, _("吸血", "Vampiric Drain"));
1555                         power_desc[num].level = 2;
1556                         power_desc[num].cost = (1 + (lvl / 3));
1557                         power_desc[num].stat = A_CON;
1558                         power_desc[num].fail = 9;
1559                         power_desc[num++].number = MUT1_VAMPIRISM;
1560                 }
1561
1562                 if (p_ptr->muta1 & MUT1_SMELL_MET)
1563                 {
1564                         strcpy(power_desc[num].name, _("金属嗅覚", "Smell Metal"));
1565                         power_desc[num].level = 3;
1566                         power_desc[num].cost = 2;
1567                         power_desc[num].stat = A_INT;
1568                         power_desc[num].fail = 12;
1569                         power_desc[num++].number = MUT1_SMELL_MET;
1570                 }
1571
1572                 if (p_ptr->muta1 & MUT1_SMELL_MON)
1573                 {
1574                         strcpy(power_desc[num].name, _("敵臭嗅覚", "Smell Monsters"));
1575                         power_desc[num].level = 5;
1576                         power_desc[num].cost = 4;
1577                         power_desc[num].stat = A_INT;
1578                         power_desc[num].fail = 15;
1579                         power_desc[num++].number = MUT1_SMELL_MON;
1580                 }
1581
1582                 if (p_ptr->muta1 & MUT1_BLINK)
1583                 {
1584                         strcpy(power_desc[num].name, _("ショート・テレポート", "Blink"));
1585                         power_desc[num].level = 3;
1586                         power_desc[num].cost = 3;
1587                         power_desc[num].stat = A_WIS;
1588                         power_desc[num].fail = 12;
1589                         power_desc[num++].number = MUT1_BLINK;
1590                 }
1591
1592                 if (p_ptr->muta1 & MUT1_EAT_ROCK)
1593                 {
1594                         strcpy(power_desc[num].name, _("岩食い", "Eat Rock"));
1595                         power_desc[num].level = 8;
1596                         power_desc[num].cost = 12;
1597                         power_desc[num].stat = A_CON;
1598                         power_desc[num].fail = 18;
1599                         power_desc[num++].number = MUT1_EAT_ROCK;
1600                 }
1601
1602                 if (p_ptr->muta1 & MUT1_SWAP_POS)
1603                 {
1604                         strcpy(power_desc[num].name, _("位置交換", "Swap Position"));
1605                         power_desc[num].level = 15;
1606                         power_desc[num].cost = 12;
1607                         power_desc[num].stat = A_DEX;
1608                         power_desc[num].fail = 16;
1609                         power_desc[num++].number = MUT1_SWAP_POS;
1610                 }
1611
1612                 if (p_ptr->muta1 & MUT1_SHRIEK)
1613                 {
1614                         strcpy(power_desc[num].name, _("叫び", "Shriek"));
1615                         power_desc[num].level = 20;
1616                         power_desc[num].cost = 14;
1617                         power_desc[num].stat = A_CON;
1618                         power_desc[num].fail = 16;
1619                         power_desc[num++].number = MUT1_SHRIEK;
1620                 }
1621
1622                 if (p_ptr->muta1 & MUT1_ILLUMINE)
1623                 {
1624                         strcpy(power_desc[num].name, _("照明", "Illuminate"));
1625                         power_desc[num].level = 3;
1626                         power_desc[num].cost = 2;
1627                         power_desc[num].stat = A_INT;
1628                         power_desc[num].fail = 10;
1629                         power_desc[num++].number = MUT1_ILLUMINE;
1630                 }
1631
1632                 if (p_ptr->muta1 & MUT1_DET_CURSE)
1633                 {
1634                         strcpy(power_desc[num].name, _("呪い感知", "Detect Curses"));
1635                         power_desc[num].level = 7;
1636                         power_desc[num].cost = 14;
1637                         power_desc[num].stat = A_WIS;
1638                         power_desc[num].fail = 14;
1639                         power_desc[num++].number = MUT1_DET_CURSE;
1640                 }
1641
1642                 if (p_ptr->muta1 & MUT1_BERSERK)
1643                 {
1644                         strcpy(power_desc[num].name, _("狂戦士化", "Berserk"));
1645                         power_desc[num].level = 8;
1646                         power_desc[num].cost = 8;
1647                         power_desc[num].stat = A_STR;
1648                         power_desc[num].fail = 14;
1649                         power_desc[num++].number = MUT1_BERSERK;
1650                 }
1651
1652                 if (p_ptr->muta1 & MUT1_POLYMORPH)
1653                 {
1654                         strcpy(power_desc[num].name, _("変身", "Polymorph"));
1655                         power_desc[num].level = 18;
1656                         power_desc[num].cost = 20;
1657                         power_desc[num].stat = A_CON;
1658                         power_desc[num].fail = 18;
1659                         power_desc[num++].number = MUT1_POLYMORPH;
1660                 }
1661
1662                 if (p_ptr->muta1 & MUT1_MIDAS_TCH)
1663                 {
1664                         strcpy(power_desc[num].name, _("ミダスの手", "Midas Touch"));
1665                         power_desc[num].level = 10;
1666                         power_desc[num].cost = 5;
1667                         power_desc[num].stat = A_INT;
1668                         power_desc[num].fail = 12;
1669                         power_desc[num++].number = MUT1_MIDAS_TCH;
1670                 }
1671
1672                 if (p_ptr->muta1 & MUT1_GROW_MOLD)
1673                 {
1674                         strcpy(power_desc[num].name, _("カビ発生", "Grow Mold"));
1675                         power_desc[num].level = 1;
1676                         power_desc[num].cost = 6;
1677                         power_desc[num].stat = A_CON;
1678                         power_desc[num].fail = 14;
1679                         power_desc[num++].number = MUT1_GROW_MOLD;
1680                 }
1681
1682                 if (p_ptr->muta1 & MUT1_RESIST)
1683                 {
1684                         strcpy(power_desc[num].name, _("エレメント耐性", "Resist Elements"));
1685                         power_desc[num].level = 10;
1686                         power_desc[num].cost = 12;
1687                         power_desc[num].stat = A_CON;
1688                         power_desc[num].fail = 12;
1689                         power_desc[num++].number = MUT1_RESIST;
1690                 }
1691
1692                 if (p_ptr->muta1 & MUT1_EARTHQUAKE)
1693                 {
1694                         strcpy(power_desc[num].name, _("地震", "Earthquake"));
1695                         power_desc[num].level = 12;
1696                         power_desc[num].cost = 12;
1697                         power_desc[num].stat = A_STR;
1698                         power_desc[num].fail = 16;
1699                         power_desc[num++].number = MUT1_EARTHQUAKE;
1700                 }
1701
1702                 if (p_ptr->muta1 & MUT1_EAT_MAGIC)
1703                 {
1704                         strcpy(power_desc[num].name, _("魔力食い", "Eat Magic"));
1705                         power_desc[num].level = 17;
1706                         power_desc[num].cost = 1;
1707                         power_desc[num].stat = A_WIS;
1708                         power_desc[num].fail = 15;
1709                         power_desc[num++].number = MUT1_EAT_MAGIC;
1710                 }
1711
1712                 if (p_ptr->muta1 & MUT1_WEIGH_MAG)
1713                 {
1714                         strcpy(power_desc[num].name, _("魔力感知", "Weigh Magic"));
1715                         power_desc[num].level = 6;
1716                         power_desc[num].cost = 6;
1717                         power_desc[num].stat = A_INT;
1718                         power_desc[num].fail = 10;
1719                         power_desc[num++].number = MUT1_WEIGH_MAG;
1720                 }
1721
1722                 if (p_ptr->muta1 & MUT1_STERILITY)
1723                 {
1724                         strcpy(power_desc[num].name, _("増殖阻止", "Sterilize"));
1725                         power_desc[num].level = 12;
1726                         power_desc[num].cost = 23;
1727                         power_desc[num].stat = A_CHR;
1728                         power_desc[num].fail = 15;
1729                         power_desc[num++].number = MUT1_STERILITY;
1730                 }
1731
1732                 if (p_ptr->muta1 & MUT1_PANIC_HIT)
1733                 {
1734                         strcpy(power_desc[num].name, _("ヒット&アウェイ", "Panic Hit"));
1735                         power_desc[num].level = 10;
1736                         power_desc[num].cost = 12;
1737                         power_desc[num].stat = A_DEX;
1738                         power_desc[num].fail = 14;
1739                         power_desc[num++].number = MUT1_PANIC_HIT;
1740                 }
1741
1742                 if (p_ptr->muta1 & MUT1_DAZZLE)
1743                 {
1744                         strcpy(power_desc[num].name, _("眩惑", "Dazzle"));
1745                         power_desc[num].level = 7;
1746                         power_desc[num].cost = 15;
1747                         power_desc[num].stat = A_CHR;
1748                         power_desc[num].fail = 8;
1749                         power_desc[num++].number = MUT1_DAZZLE;
1750                 }
1751
1752                 if (p_ptr->muta1 & MUT1_LASER_EYE)
1753                 {
1754                         strcpy(power_desc[num].name, _("レーザー・アイ", "Laser Eye"));
1755                         power_desc[num].level = 7;
1756                         power_desc[num].cost = 10;
1757                         power_desc[num].stat = A_WIS;
1758                         power_desc[num].fail = 9;
1759                         power_desc[num++].number = MUT1_LASER_EYE;
1760                 }
1761
1762                 if (p_ptr->muta1 & MUT1_RECALL)
1763                 {
1764                         strcpy(power_desc[num].name, _("帰還", "Recall"));
1765                         power_desc[num].level = 17;
1766                         power_desc[num].cost = 50;
1767                         power_desc[num].stat = A_INT;
1768                         power_desc[num].fail = 16;
1769                         power_desc[num++].number = MUT1_RECALL;
1770                 }
1771
1772                 if (p_ptr->muta1 & MUT1_BANISH)
1773                 {
1774                         strcpy(power_desc[num].name, _("邪悪消滅", "Banish Evil"));
1775                         power_desc[num].level = 25;
1776                         power_desc[num].cost = 25;
1777                         power_desc[num].stat = A_WIS;
1778                         power_desc[num].fail = 18;
1779                         power_desc[num++].number = MUT1_BANISH;
1780                 }
1781
1782                 if (p_ptr->muta1 & MUT1_COLD_TOUCH)
1783                 {
1784                         strcpy(power_desc[num].name, _("凍結の手", "Cold Touch"));
1785                         power_desc[num].level = 2;
1786                         power_desc[num].cost = 2;
1787                         power_desc[num].stat = A_CON;
1788                         power_desc[num].fail = 11;
1789                         power_desc[num++].number = MUT1_COLD_TOUCH;
1790                 }
1791
1792                 if (p_ptr->muta1 & MUT1_LAUNCHER)
1793                 {
1794                         strcpy(power_desc[num].name, _("アイテム投げ", "Throw Object"));
1795                         power_desc[num].level = 1;
1796                         power_desc[num].cost = lvl;
1797                         power_desc[num].stat = A_STR;
1798                         power_desc[num].fail = 6;
1799                         /* XXX_XXX_XXX Hack! MUT1_LAUNCHER counts as negative... */
1800                         power_desc[num++].number = 3;
1801                 }
1802         }
1803
1804         /* Nothing chosen yet */
1805         flag = FALSE;
1806
1807         /* No redraw yet */
1808         redraw = FALSE;
1809
1810         /* Build a prompt */
1811         (void) strnfmt(out_val, 78, 
1812                                 _("(特殊能力 %c-%c, *'で一覧, ESCで中断) どの特殊能力を使いますか?", "(Powers %c-%c, *=List, ESC=exit) Use which power? "),
1813                                 I2A(0), (num <= 26) ? I2A(num - 1) : '0' + num - 27);
1814
1815 if (!repeat_pull(&i) || i<0 || i>=num) {
1816         if (use_menu) screen_save();
1817
1818         choice = (always_show_list || use_menu) ? ESCAPE:1;
1819         while (!flag)
1820         {
1821                 if( choice==ESCAPE ) choice = ' '; 
1822                 else if( !get_com(out_val, &choice, FALSE) )break; 
1823
1824                 if (use_menu && choice != ' ')
1825                 {
1826                         switch(choice)
1827                         {
1828                                 case '0':
1829                                 {
1830                                         screen_load();
1831                                         free_turn(p_ptr);
1832                                         return;
1833                                 }
1834
1835                                 case '8':
1836                                 case 'k':
1837                                 case 'K':
1838                                 {
1839                                         menu_line += (num - 1);
1840                                         break;
1841                                 }
1842
1843                                 case '2':
1844                                 case 'j':
1845                                 case 'J':
1846                                 {
1847                                         menu_line++;
1848                                         break;
1849                                 }
1850
1851                                 case '6':
1852                                 case 'l':
1853                                 case 'L':
1854                                 case '4':
1855                                 case 'h':
1856                                 case 'H':
1857                                 {
1858                                         if (menu_line > 18)
1859                                                 menu_line -= 18;
1860                                         else if (menu_line+18 <= num)
1861                                                 menu_line += 18;
1862                                         break;
1863                                 }
1864
1865                                 case 'x':
1866                                 case 'X':
1867                                 case '\r':
1868                                 {
1869                                         i = menu_line - 1;
1870                                         ask = FALSE;
1871                                         break;
1872                                 }
1873                         }
1874                         if (menu_line > num) menu_line -= num;
1875                 }
1876                 /* Request redraw */
1877                 if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))
1878                 {
1879                         /* Show the list */
1880                         if (!redraw || use_menu)
1881                         {
1882                                 byte y = 1, x = 0;
1883                                 int ctr = 0;
1884                                 char dummy[80];
1885                                 char letter;
1886                                 TERM_LEN x1, y1;
1887
1888                                 strcpy(dummy, "");
1889                                 redraw = TRUE;
1890                                 if (!use_menu) screen_save();
1891
1892                                 /* Print header(s) */
1893                                 if (num < 18)
1894                                         prt(_("                            Lv   MP 失率", "                            Lv Cost Fail"), y++, x);
1895                                 else
1896                                 prt(_("                            Lv   MP 失率                            Lv   MP 失率", 
1897                                           "                            Lv Cost Fail                            Lv Cost Fail"), y++, x);
1898
1899
1900                                 /* Print list */
1901                                 while (ctr < num)
1902                                 {
1903                                         x1 = ((ctr < 18) ? x : x + 40);
1904                                         y1 = ((ctr < 18) ? y + ctr : y + ctr - 18);
1905
1906                                         if (use_menu)
1907                                         {
1908                                                 if (ctr == (menu_line-1)) strcpy(dummy, _(" 》 ", " >  "));
1909                                                 else strcpy(dummy, "    ");
1910                                         }
1911                                         else
1912                                         {
1913                                                 /* letter/number for power selection */
1914                                                 if (ctr < 26)
1915                                                         letter = I2A(ctr);
1916                                                 else
1917                                                         letter = '0' + ctr - 26;
1918                                                 sprintf(dummy, " %c) ",letter);
1919                                         }
1920                                         strcat(dummy, format("%-23.23s %2d %4d %3d%%",
1921                                                 power_desc[ctr].name, power_desc[ctr].level, power_desc[ctr].cost,
1922                                                 100 - racial_chance(&power_desc[ctr])));
1923                                         prt(dummy, y1, x1);
1924                                         ctr++;
1925                                 }
1926                         }
1927
1928                         /* Hide the list */
1929                         else
1930                         {
1931                                 /* Hide list */
1932                                 redraw = FALSE;
1933                                 screen_load();
1934                         }
1935
1936                         /* Redo asking */
1937                         continue;
1938                 }
1939
1940                 if (!use_menu)
1941                 {
1942                         if (choice == '\r' && num == 1)
1943                         {
1944                                 choice = 'a';
1945                         }
1946
1947                         if (isalpha(choice))
1948                         {
1949                                 /* Note verify */
1950                                 ask = (isupper(choice));
1951
1952                                 /* Lowercase */
1953                                 if (ask) choice = (char)tolower(choice);
1954
1955                                 /* Extract request */
1956                                 i = (islower(choice) ? A2I(choice) : -1);
1957                         }
1958                         else
1959                         {
1960                                 ask = FALSE; /* Can't uppercase digits */
1961
1962                                 i = choice - '0' + 26;
1963                         }
1964                 }
1965
1966                 /* Totally Illegal */
1967                 if ((i < 0) || (i >= num))
1968                 {
1969                         bell();
1970                         continue;
1971                 }
1972
1973                 /* Verify it */
1974                 if (ask)
1975                 {
1976                         char tmp_val[160];
1977
1978                         /* Prompt */
1979                         (void) strnfmt(tmp_val, 78, _("%sを使いますか? ", "Use %s? "), power_desc[i].name);
1980
1981                         /* Belay that order */
1982                         if (!get_check(tmp_val)) continue;
1983                 }
1984
1985                 /* Stop the loop */
1986                 flag = TRUE;
1987         }
1988         if (redraw) screen_load();
1989
1990         /* Abort if needed */
1991         if (!flag)
1992         {
1993                 free_turn(p_ptr);
1994                 return;
1995         }
1996         repeat_push(i);
1997         } /*if (!repeat_pull(&i) || ...)*/
1998         switch (racial_aux(&power_desc[i]))
1999         {
2000         case 1:
2001                 if (power_desc[i].number < 0)
2002                         cast = cmd_racial_power_aux(power_desc[i].number);
2003                 else
2004                         cast = mutation_power_aux(power_desc[i].number);
2005                 break;
2006         case 0:
2007                 cast = FALSE;
2008                 break;
2009         case -1:
2010                 cast = TRUE;
2011                 break;
2012         }
2013
2014         if (cast)
2015         {
2016                 if (racial_cost)
2017                 {
2018                         int actual_racial_cost = racial_cost / 2 + randint1(racial_cost / 2);
2019
2020                         /* If mana is not enough, player consumes hit point! */
2021                         if (p_ptr->csp < actual_racial_cost)
2022                         {
2023                                 actual_racial_cost -= p_ptr->csp;
2024                                 p_ptr->csp = 0;
2025                                 take_hit(DAMAGE_USELIFE, actual_racial_cost, _("過度の集中", "concentrating too hard"), -1);
2026                         }
2027                         else p_ptr->csp -= actual_racial_cost;
2028
2029                         p_ptr->redraw |= (PR_HP | PR_MANA);
2030                         p_ptr->window |= (PW_PLAYER | PW_SPELL);
2031                 }
2032         }
2033         else free_turn(p_ptr);
2034
2035         /* Success */
2036         return;
2037 }