OSDN Git Service

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