OSDN Git Service

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