OSDN Git Service

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