1 #include "cmd-action/cmd-spell.h"
2 #include "core/player-redraw-types.h"
3 #include "core/window-redrawer.h"
4 #include "effect/effect-characteristics.h"
5 #include "effect/effect-processor.h"
6 #include "hpmp/hp-mp-processor.h"
7 #include "player-info/class-info.h"
8 #include "player/attack-defense-types.h"
9 #include "player/player-status.h"
10 #include "realm/realm-song-numbers.h"
11 #include "spell-kind/earthquake.h"
12 #include "spell-kind/spells-detection.h"
13 #include "spell-kind/spells-floor.h"
14 #include "spell-kind/spells-grid.h"
15 #include "spell-kind/spells-launcher.h"
16 #include "spell-kind/spells-lite.h"
17 #include "spell-kind/spells-neighbor.h"
18 #include "spell-kind/spells-sight.h"
19 #include "spell-kind/spells-world.h"
20 #include "spell-realm/spells-song.h"
21 #include "spell/spells-status.h"
22 #include "status/action-setter.h"
23 #include "status/bad-status-setter.h"
24 #include "status/experience.h"
25 #include "system/player-type-definition.h"
26 #include "system/redrawing-flags-updater.h"
27 #include "target/target-getter.h"
28 #include "timed-effect/player-acceleration.h"
29 #include "timed-effect/timed-effects.h"
30 #include "view/display-messages.h"
33 * @brief 歌の開始を処理する / Start singing if the player is a Bard
34 * @param spell 領域魔法としてのID
37 static void start_singing(PlayerType *player_ptr, SPELL_IDX spell, int32_t song)
39 /* Remember the song index */
40 set_singing_song_effect(player_ptr, song);
42 /* Remember the index of the spell which activated the song */
43 set_singing_song_id(player_ptr, (byte)spell);
45 /* Now the player is singing */
46 set_action(player_ptr, ACTION_SING);
48 auto &rfu = RedrawingFlagsUpdater::get_instance();
49 rfu.set_flag(StatusRedrawingFlag::BONUS);
50 rfu.set_flag(MainWindowRedrawingFlag::TIMED_EFFECT);
55 * @param player_ptr プレイヤーへの参照ポインタ
57 * @param mode 処理内容 (NAME / SPELL_DESC / INFO / CAST / FAIL / SPELL_CONT / STOP)
59 * NAME / SPELL_DESC / INFO 時には文字列を返す.
60 * CAST / FAIL / SPELL_CONT / STOP 時は std::nullopt を返す.
62 std::optional<std::string> do_music_spell(PlayerType *player_ptr, SPELL_IDX spell, SpellProcessType mode)
64 bool name = mode == SpellProcessType::NAME;
65 bool desc = mode == SpellProcessType::DESCRIPTION;
66 bool info = mode == SpellProcessType::INFO;
67 bool cast = mode == SpellProcessType::CAST;
68 bool fail = mode == SpellProcessType::FAIL;
69 bool cont = mode == SpellProcessType::CONTNUATION;
70 bool stop = mode == SpellProcessType::STOP;
73 PLAYER_LEVEL plev = player_ptr->lev;
78 return _("遅鈍の歌", "Song of Holding");
81 return _("視界内の全てのモンスターを減速させる。抵抗されると無効。", "Attempts to slow all monsters in sight.");
84 /* Stop singing before start another */
86 stop_singing(player_ptr);
90 msg_print(_("ゆっくりとしたメロディを口ずさみ始めた...", "You start humming a slow, steady melody..."));
91 start_singing(player_ptr, spell, MUSIC_SLOW);
98 return info_power(power);
102 slow_monsters(player_ptr, plev);
109 return _("祝福の歌", "Song of Blessing");
112 return _("命中率とACのボーナスを得る。", "Gives a bonus to hit and AC for a few turns.");
115 /* Stop singing before start another */
117 stop_singing(player_ptr);
121 msg_print(_("厳かなメロディを奏で始めた...", "The holy power of the Music of the Ainur enters you..."));
122 start_singing(player_ptr, spell, MUSIC_BLESS);
126 if (!player_ptr->blessed) {
127 msg_print(_("高潔な気分が消え失せた。", "The prayer has expired."));
135 return _("崩壊の音色", "Wrecking Note");
138 return _("轟音のボルトを放つ。", "Fires a bolt of sound.");
141 /* Stop singing before start another */
143 stop_singing(player_ptr);
147 DICE_NUMBER dice = 4 + (plev - 1) / 5;
151 return info_damage(dice, sides, 0);
155 if (!get_aim_dir(player_ptr, &dir)) {
159 fire_bolt(player_ptr, AttributeType::SOUND, dir, damroll(dice, sides));
166 return _("朦朧の旋律", "Stun Pattern");
169 return _("視界内の全てのモンスターを朦朧させる。抵抗されると無効。", "Attempts to stun all monsters in sight.");
172 /* Stop singing before start another */
174 stop_singing(player_ptr);
178 msg_print(_("眩惑させるメロディを奏で始めた...", "You weave a pattern of sounds to bewilder and daze..."));
179 start_singing(player_ptr, spell, MUSIC_STUN);
183 DICE_NUMBER dice = plev / 10;
187 return info_power_dice(dice, sides);
191 stun_monsters(player_ptr, damroll(dice, sides));
199 return _("生命の流れ", "Flow of Life");
202 return _("体力を少し回復させる。", "Heals HP a little.");
205 /* Stop singing before start another */
207 stop_singing(player_ptr);
211 msg_print(_("歌を通して体に活気が戻ってきた...", "Life flows through you as you sing a song of healing..."));
212 start_singing(player_ptr, spell, MUSIC_L_LIFE);
216 DICE_NUMBER dice = 2;
220 return info_heal(dice, sides, 0);
224 hp_player(player_ptr, damroll(dice, sides));
232 return _("太陽の歌", "Song of the Sun");
235 return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
238 /* Stop singing before start another */
240 stop_singing(player_ptr);
244 DICE_NUMBER dice = 2;
245 DICE_SID sides = plev / 2;
246 POSITION rad = plev / 10 + 1;
249 return info_damage(dice, sides, 0);
253 msg_print(_("光り輝く歌が辺りを照らした。", "Your uplifting song brings brightness to dark places..."));
254 lite_area(player_ptr, damroll(dice, sides), rad);
261 return _("恐怖の歌", "Song of Fear");
264 return _("視界内の全てのモンスターを恐怖させる。抵抗されると無効。", "Attempts to scare all monsters in sight.");
267 /* Stop singing before start another */
269 stop_singing(player_ptr);
273 msg_print(_("おどろおどろしいメロディを奏で始めた...", "You start weaving a fearful pattern..."));
274 start_singing(player_ptr, spell, MUSIC_FEAR);
281 return info_power(power);
285 project_all_los(player_ptr, AttributeType::TURN_ALL, power);
293 return _("戦いの歌", "Heroic Ballad");
297 return _("ヒーロー気分になる。", "Removes fear. Gives a bonus to hit for a while. Heals you for 10 HP.");
301 stop_singing(player_ptr);
305 msg_print(_("激しい戦いの歌を歌った...", "You start singing a song of intense fighting..."));
307 (void)hp_player(player_ptr, 10);
308 (void)BadStatusSetter(player_ptr).set_fear(0);
309 RedrawingFlagsUpdater::get_instance().set_flag(StatusRedrawingFlag::HP);
310 start_singing(player_ptr, spell, MUSIC_HERO);
314 if (!player_ptr->hero) {
315 msg_print(_("ヒーローの気分が消え失せた。", "The heroism wears off."));
316 RedrawingFlagsUpdater::get_instance().set_flag(StatusRedrawingFlag::HP);
323 return _("霊的知覚", "Clairaudience");
327 "階段を感知する。レベル15で全てのモンスター、20で財宝とアイテムを感知できるようになる。レベル25で周辺の地形を感知し、40でその階全体を永久"
328 "に照らし、ダンジョン内のすべてのアイテムを感知する。この効果は歌い続けることで順に起こる。",
329 "Detects traps, doors and stairs in your vicinity. And detects all monsters at level 15, treasures and items at level 20. Maps nearby area at "
330 "level 25. Lights and know the whole level at level 40. These effects accumulate as the song continues.");
333 /* Stop singing before start another */
335 stop_singing(player_ptr);
339 msg_print(_("静かな音楽が感覚を研ぎ澄まさせた...", "Your quiet music sharpens your sense of hearing..."));
340 /* Hack -- Initialize the turn count */
341 set_singing_count(player_ptr, 0);
342 start_singing(player_ptr, spell, MUSIC_DETECT);
346 POSITION rad = DETECT_RAD_DEFAULT;
349 return info_radius(rad);
353 int count = get_singing_count(player_ptr);
356 wiz_lite(player_ptr, false);
359 map_area(player_ptr, rad);
360 if (plev > 39 && count < 19) {
361 set_singing_count(player_ptr, count + 1);
365 /* There are too many hidden treasure. So... */
366 /* detect_treasure(rad); */
367 detect_objects_gold(player_ptr, rad);
368 detect_objects_normal(player_ptr, rad);
370 if (plev > 24 && count < 11) {
371 set_singing_count(player_ptr, count + 1);
375 detect_monsters_invis(player_ptr, rad);
376 detect_monsters_normal(player_ptr, rad);
378 if (plev > 19 && count < A_MAX) {
379 set_singing_count(player_ptr, count + 1);
382 detect_traps(player_ptr, rad, true);
383 detect_doors(player_ptr, rad);
384 detect_stairs(player_ptr, rad);
386 if (plev > 14 && count < 3) {
387 set_singing_count(player_ptr, count + 1);
396 return _("魂の歌", "Soul Shriek");
399 return _("視界内の全てのモンスターに対して精神攻撃を行う。", "Damages all monsters in sight with PSI damages.");
402 /* Stop singing before start another */
404 stop_singing(player_ptr);
408 msg_print(_("精神を捻じ曲げる歌を歌った...", "You start singing a song of soul in pain..."));
409 start_singing(player_ptr, spell, MUSIC_PSI);
413 DICE_NUMBER dice = 1;
414 DICE_SID sides = plev * 3 / 2;
417 return info_damage(dice, sides, 0);
421 project_all_los(player_ptr, AttributeType::PSI, damroll(dice, sides));
429 return _("知識の歌", "Song of Lore");
432 return _("自分のいるマスと隣りのマスに落ちているアイテムを鑑定する。", "Identifies all items which are in the adjacent squares.");
435 /* Stop singing before start another */
437 stop_singing(player_ptr);
441 msg_print(_("この世界の知識が流れ込んできた...", "You recall the rich lore of the world..."));
442 start_singing(player_ptr, spell, MUSIC_ID);
449 return info_radius(rad);
454 * MP不足で鑑定が発動される前に歌が中断してしまうのを防止。
457 project(player_ptr, 0, rad, player_ptr->y, player_ptr->x, 0, AttributeType::IDENTIFY, PROJECT_ITEM);
465 return _("隠遁の歌", "Hiding Tune");
468 return _("隠密行動能力を上昇させる。", "Gives improved stealth.");
471 /* Stop singing before start another */
473 stop_singing(player_ptr);
477 msg_print(_("あなたの姿が景色にとけこんでいった...", "Your song carries you beyond the sight of mortal eyes..."));
478 start_singing(player_ptr, spell, MUSIC_STEALTH);
482 if (!player_ptr->tim_stealth) {
483 msg_print(_("姿がはっきりと見えるようになった。", "You are no longer hidden."));
491 return _("幻影の旋律", "Illusion Pattern");
494 return _("視界内の全てのモンスターを混乱させる。抵抗されると無効。", "Attempts to confuse all monsters in sight.");
497 /* Stop singing before start another */
499 stop_singing(player_ptr);
503 msg_print(_("辺り一面に幻影が現れた...", "You weave a pattern of sounds to beguile and confuse..."));
504 start_singing(player_ptr, spell, MUSIC_CONF);
508 POWER power = plev * 2;
511 return info_power(power);
515 confuse_monsters(player_ptr, power);
523 return _("破滅の叫び", "Doomcall");
526 return _("視界内の全てのモンスターに対して轟音攻撃を行う。", "Damages all monsters in sight with booming sound.");
529 /* Stop singing before start another */
531 stop_singing(player_ptr);
535 msg_print(_("轟音が響いた...", "The fury of the Downfall of Numenor lashes out..."));
536 start_singing(player_ptr, spell, MUSIC_SOUND);
540 DICE_NUMBER dice = 10 + plev / 5;
544 return info_damage(dice, sides, 0);
548 project_all_los(player_ptr, AttributeType::SOUND, damroll(dice, sides));
556 return _("フィリエルの歌", "Firiel's Song");
559 return _("周囲の死体や骨を生き返す。", "Resurrects nearby corpses and skeletons. And makes them your pets.");
563 /* Stop singing before start another */
565 stop_singing(player_ptr);
569 msg_print(_("生命と復活のテーマを奏で始めた...", "The themes of life and revival are woven into your song..."));
570 animate_dead(player_ptr, 0, player_ptr->y, player_ptr->x);
577 return _("旅の仲間", "Fellowship Chant");
580 return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");
583 /* Stop singing before start another */
585 stop_singing(player_ptr);
589 msg_print(_("安らかなメロディを奏で始めた...", "You weave a slow, soothing melody of imploration..."));
590 start_singing(player_ptr, spell, MUSIC_CHARM);
594 DICE_NUMBER dice = 10 + plev / 15;
598 return info_power_dice(dice, sides);
602 charm_monsters(player_ptr, damroll(dice, sides));
610 return _("フルゥの行進曲", "Hru's March");
613 return _("壁を掘り進む。自分の足元のアイテムは蒸発する。", "Makes you be able to burrow into walls. Objects under your feet evaporate.");
616 /* Stop singing before start another */
618 stop_singing(player_ptr);
622 msg_print(_("粉砕するメロディを奏で始めた...", "You weave a violent pattern of sounds to break walls."));
623 start_singing(player_ptr, spell, MUSIC_WALL);
629 * MP不足で効果が発動される前に歌が中断してしまうのを防止。
632 project(player_ptr, 0, 0, player_ptr->y, player_ptr->x, 0, AttributeType::DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE);
639 return _("フィンロドの護り", "Finrod's Resistance");
642 return _("酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。",
643 "Gives resistance to fire, cold, electricity, acid and poison. These resistances can be added to those from equipment for more powerful "
647 /* Stop singing before start another */
649 stop_singing(player_ptr);
653 msg_print(_("元素の力に対する忍耐の歌を歌った。", "You sing a song of perseverance against powers..."));
654 start_singing(player_ptr, spell, MUSIC_RESIST);
658 if (!player_ptr->oppose_acid) {
659 msg_print(_("酸への耐性が薄れた気がする。", "You feel less resistant to acid."));
662 if (!player_ptr->oppose_elec) {
663 msg_print(_("電撃への耐性が薄れた気がする。", "You feel less resistant to elec."));
666 if (!player_ptr->oppose_fire) {
667 msg_print(_("火への耐性が薄れた気がする。", "You feel less resistant to fire."));
670 if (!player_ptr->oppose_cold) {
671 msg_print(_("冷気への耐性が薄れた気がする。", "You feel less resistant to cold."));
674 if (!player_ptr->oppose_pois) {
675 msg_print(_("毒への耐性が薄れた気がする。", "You feel less resistant to pois."));
683 return _("ホビットのメロディ", "Hobbit Melodies");
686 return _("加速する。", "Hastes you.");
689 /* Stop singing before start another */
691 stop_singing(player_ptr);
695 msg_print(_("軽快な歌を口ずさみ始めた...", "You start singing a joyful pop song..."));
696 start_singing(player_ptr, spell, MUSIC_SPEED);
700 if (!player_ptr->effects()->acceleration()->is_fast()) {
701 msg_print(_("動きの素早さがなくなったようだ。", "You feel yourself slow down."));
709 return _("歪んだ世界", "World Contortion");
712 return _("近くのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all nearby monsters away unless resisted.");
716 POSITION rad = plev / 15 + 1;
717 POWER power = plev * 3 + 1;
720 return info_radius(rad);
723 /* Stop singing before start another */
725 stop_singing(player_ptr);
729 msg_print(_("歌が空間を歪めた...", "Reality whirls wildly as you sing a dizzying melody..."));
730 project(player_ptr, 0, rad, player_ptr->y, player_ptr->x, power, AttributeType::AWAY_ALL, PROJECT_KILL);
737 return _("退散の歌", "Dispelling Chant");
740 return _("視界内の全てのモンスターにダメージを与える。邪悪なモンスターに特に大きなダメージを与える。",
741 "Damages all monsters in sight. Hurts evil monsters greatly.");
744 /* Stop singing before start another */
746 stop_singing(player_ptr);
750 msg_print(_("耐えられない不協和音が敵を責め立てた...", "You cry out in an ear-wracking voice..."));
751 start_singing(player_ptr, spell, MUSIC_DISPEL);
755 DICE_SID m_sides = plev * 3;
756 DICE_SID e_sides = plev * 3;
759 return format("%s1d%d+1d%d", KWD_DAM, m_sides, e_sides);
763 dispel_monsters(player_ptr, randint1(m_sides));
764 dispel_evil(player_ptr, randint1(e_sides));
771 return _("サルマンの甘言", "The Voice of Saruman");
774 return _("視界内の全てのモンスターを減速させ、眠らせようとする。抵抗されると無効。", "Attempts to slow and put to sleep all monsters in sight.");
777 /* Stop singing before start another */
779 stop_singing(player_ptr);
783 msg_print(_("優しく、魅力的な歌を口ずさみ始めた...", "You start humming a gentle and attractive song..."));
784 start_singing(player_ptr, spell, MUSIC_SARUMAN);
791 return info_power(power);
795 slow_monsters(player_ptr, plev);
796 sleep_monsters(player_ptr, plev);
804 return _("嵐の音色", "Song of the Tempest");
807 return _("轟音のビームを放つ。", "Fires a beam of sound.");
811 DICE_NUMBER dice = 15 + (plev - 1) / 2;
815 return info_damage(dice, sides, 0);
818 /* Stop singing before start another */
820 stop_singing(player_ptr);
824 if (!get_aim_dir(player_ptr, &dir)) {
828 fire_beam(player_ptr, AttributeType::SOUND, dir, damroll(dice, sides));
835 return _("もう一つの世界", "Ambarkanta");
838 return _("現在の階を再構成する。", "Recreates current dungeon level.");
846 return info_delay(base, sides);
849 /* Stop singing before start another */
851 stop_singing(player_ptr);
855 msg_print(_("周囲が変化し始めた...", "You sing of the primeval shaping of Middle-earth..."));
856 reserve_alter_reality(player_ptr, randint0(sides) + base);
863 return _("破壊の旋律", "Wrecking Pattern");
867 "周囲のダンジョンを揺らし、壁と床をランダムに入れ変える。", "Shakes dungeon structure, and results in random swapping of floors and walls.");
870 /* Stop singing before start another */
872 stop_singing(player_ptr);
876 msg_print(_("破壊的な歌が響きわたった...", "You weave a pattern of sounds to contort and shatter..."));
877 start_singing(player_ptr, spell, MUSIC_QUAKE);
884 return info_radius(rad);
888 earthquake(player_ptr, player_ptr->y, player_ptr->x, 10, 0);
896 return _("停滞の歌", "Stationary Shriek");
899 return _("視界内の全てのモンスターを麻痺させようとする。抵抗されると無効。", "Attempts to freeze all monsters in sight.");
902 /* Stop singing before start another */
904 stop_singing(player_ptr);
908 msg_print(_("ゆっくりとしたメロディを奏で始めた...", "You weave a very slow pattern which is almost likely to stop..."));
909 start_singing(player_ptr, spell, MUSIC_STASIS);
913 POWER power = plev * 4;
916 return info_power(power);
920 stasis_monsters(player_ptr, power);
928 return _("エルベレスの聖歌", "Elbereth's Chant");
931 return _("自分のいる床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。",
932 "Sets a rune on the floor beneath you. If you are on a rune, monsters cannot attack you but can try to break the rune.");
936 /* Stop singing before start another */
938 stop_singing(player_ptr);
942 msg_print(_("歌が神聖な場を作り出した...", "The holy power of the Music is creating sacred field..."));
943 create_rune_protection_one(player_ptr);
950 return _("英雄の詩", "The Hero's Poem");
954 return _("加速し、ヒーロー気分になり、視界内の全てのモンスターにダメージを与える。", "Hastes you. Gives heroism. Damages all monsters in sight.");
958 stop_singing(player_ptr);
962 msg_print(_("英雄の歌を口ずさんだ...", "You chant a powerful, heroic call to arms..."));
963 (void)hp_player(player_ptr, 10);
964 (void)BadStatusSetter(player_ptr).set_fear(0);
965 RedrawingFlagsUpdater::get_instance().set_flag(StatusRedrawingFlag::HP);
966 start_singing(player_ptr, spell, MUSIC_SHERO);
970 if (!player_ptr->hero) {
971 msg_print(_("ヒーローの気分が消え失せた。", "The heroism wears off."));
972 RedrawingFlagsUpdater::get_instance().set_flag(StatusRedrawingFlag::HP);
975 if (!player_ptr->effects()->acceleration()->is_fast()) {
976 msg_print(_("動きの素早さがなくなったようだ。", "You feel yourself slow down."));
980 DICE_NUMBER dice = 1;
981 DICE_SID sides = plev * 3;
983 return info_damage(dice, sides, 0);
987 dispel_monsters(player_ptr, damroll(dice, sides));
994 return _("ヤヴァンナの助け", "Relief of Yavanna");
998 return _("強力な回復の歌で、負傷と朦朧状態も全快する。", "Powerful healing song. Also completely heals cuts and being stunned.");
1002 stop_singing(player_ptr);
1006 msg_print(_("歌を通して体に活気が戻ってきた...", "Life flows through you as you sing the song..."));
1007 start_singing(player_ptr, spell, MUSIC_H_LIFE);
1013 return info_heal(dice, sides, 0);
1017 hp_player(player_ptr, damroll(dice, sides));
1018 BadStatusSetter bss(player_ptr);
1019 (void)bss.set_stun(0);
1020 (void)bss.set_cut(0);
1027 return _("再生の歌", "Goddess's rebirth");
1030 return _("すべてのステータスと経験値を回復する。", "Restores all stats and experience.");
1034 /* Stop singing before start another */
1036 stop_singing(player_ptr);
1041 _("暗黒の中に光と美をふりまいた。体が元の活力を取り戻した。", "You strew light and beauty in the dark as you sing. You feel refreshed."));
1042 (void)restore_all_status(player_ptr);
1043 (void)restore_level(player_ptr);
1050 return _("サウロンの魔術", "Wizardry of Sauron");
1053 return _("非常に強力でごく小さい轟音の球を放つ。", "Fires an extremely powerful tiny ball of sound.");
1057 DICE_NUMBER dice = 50 + plev;
1058 DICE_SID sides = 10;
1062 return info_damage(dice, sides, 0);
1065 /* Stop singing before start another */
1067 stop_singing(player_ptr);
1071 if (!get_aim_dir(player_ptr, &dir)) {
1072 return std::nullopt;
1075 fire_ball(player_ptr, AttributeType::SOUND, dir, damroll(dice, sides), rad);
1082 return _("フィンゴルフィンの挑戦", "Fingolfin's Challenge");
1085 return _("ダメージを受けなくなるバリアを張る。", "Generates a barrier which completely protects you from almost all damage.");
1088 /* Stop singing before start another */
1090 stop_singing(player_ptr);
1094 msg_print(_("フィンゴルフィンの冥王への挑戦を歌った...", "You recall the valor of Fingolfin's challenge to the Dark Lord..."));
1095 auto &rfu = RedrawingFlagsUpdater::get_instance();
1096 rfu.set_flag(MainWindowRedrawingFlag::MAP);
1097 rfu.set_flag(StatusRedrawingFlag::MONSTER_STATUSES);
1098 player_ptr->window_flags |= (PW_OVERHEAD | PW_DUNGEON);
1099 start_singing(player_ptr, spell, MUSIC_INVULN);
1103 if (!player_ptr->invuln) {
1104 msg_print(_("無敵ではなくなった。", "The invulnerability wears off."));
1105 auto &rfu = RedrawingFlagsUpdater::get_instance();
1106 rfu.set_flag(MainWindowRedrawingFlag::MAP);
1107 rfu.set_flag(StatusRedrawingFlag::MONSTER_STATUSES);
1108 player_ptr->window_flags |= (PW_OVERHEAD | PW_DUNGEON);