OSDN Git Service

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