1 #include "cmd-action/cmd-spell.h"
2 #include "core/window-redrawer.h"
3 #include "effect/effect-characteristics.h"
4 #include "effect/effect-processor.h"
5 #include "hpmp/hp-mp-processor.h"
6 #include "player-info/class-info.h"
7 #include "player/attack-defense-types.h"
8 #include "player/player-status.h"
9 #include "realm/realm-song-numbers.h"
10 #include "spell-kind/earthquake.h"
11 #include "spell-kind/spells-detection.h"
12 #include "spell-kind/spells-floor.h"
13 #include "spell-kind/spells-grid.h"
14 #include "spell-kind/spells-launcher.h"
15 #include "spell-kind/spells-lite.h"
16 #include "spell-kind/spells-neighbor.h"
17 #include "spell-kind/spells-sight.h"
18 #include "spell-kind/spells-world.h"
19 #include "spell-realm/spells-song.h"
20 #include "spell/spells-status.h"
21 #include "status/action-setter.h"
22 #include "status/bad-status-setter.h"
23 #include "status/experience.h"
24 #include "system/player-type-definition.h"
25 #include "system/redrawing-flags-updater.h"
26 #include "target/target-getter.h"
27 #include "timed-effect/player-acceleration.h"
28 #include "timed-effect/timed-effects.h"
29 #include "view/display-messages.h"
32 * @brief 歌の開始を処理する / Start singing if the player is a Bard
33 * @param spell 領域魔法としてのID
36 static void start_singing(PlayerType *player_ptr, SPELL_IDX spell, int32_t song)
38 /* Remember the song index */
39 set_singing_song_effect(player_ptr, song);
41 /* Remember the index of the spell which activated the song */
42 set_singing_song_id(player_ptr, (byte)spell);
44 /* Now the player is singing */
45 set_action(player_ptr, ACTION_SING);
47 auto &rfu = RedrawingFlagsUpdater::get_instance();
48 rfu.set_flag(StatusRecalculatingFlag::BONUS);
49 rfu.set_flag(MainWindowRedrawingFlag::TIMED_EFFECT);
54 * @param player_ptr プレイヤーへの参照ポインタ
56 * @param mode 処理内容 (NAME / SPELL_DESC / INFO / CAST / FAIL / SPELL_CONT / STOP)
58 * NAME / SPELL_DESC / INFO 時には文字列を返す.
59 * CAST / FAIL / SPELL_CONT / STOP 時は std::nullopt を返す.
61 std::optional<std::string> do_music_spell(PlayerType *player_ptr, SPELL_IDX spell, SpellProcessType mode)
63 bool name = mode == SpellProcessType::NAME;
64 bool desc = mode == SpellProcessType::DESCRIPTION;
65 bool info = mode == SpellProcessType::INFO;
66 bool cast = mode == SpellProcessType::CAST;
67 bool fail = mode == SpellProcessType::FAIL;
68 bool cont = mode == SpellProcessType::CONTNUATION;
69 bool stop = mode == SpellProcessType::STOP;
72 PLAYER_LEVEL plev = player_ptr->lev;
77 return _("遅鈍の歌", "Song of Holding");
80 return _("視界内の全てのモンスターを減速させる。抵抗されると無効。", "Attempts to slow all monsters in sight.");
83 /* Stop singing before start another */
85 stop_singing(player_ptr);
89 msg_print(_("ゆっくりとしたメロディを口ずさみ始めた...", "You start humming a slow, steady melody..."));
90 start_singing(player_ptr, spell, MUSIC_SLOW);
97 return info_power(power);
101 slow_monsters(player_ptr, plev);
108 return _("祝福の歌", "Song of Blessing");
111 return _("命中率とACのボーナスを得る。", "Gives a bonus to hit and AC for a few turns.");
114 /* Stop singing before start another */
116 stop_singing(player_ptr);
120 msg_print(_("厳かなメロディを奏で始めた...", "The holy power of the Music of the Ainur enters you..."));
121 start_singing(player_ptr, spell, MUSIC_BLESS);
125 if (!player_ptr->blessed) {
126 msg_print(_("高潔な気分が消え失せた。", "The prayer has expired."));
134 return _("崩壊の音色", "Wrecking Note");
137 return _("轟音のボルトを放つ。", "Fires a bolt of sound.");
140 /* Stop singing before start another */
142 stop_singing(player_ptr);
146 DICE_NUMBER dice = 4 + (plev - 1) / 5;
150 return info_damage(dice, sides, 0);
154 if (!get_aim_dir(player_ptr, &dir)) {
158 fire_bolt(player_ptr, AttributeType::SOUND, dir, damroll(dice, sides));
165 return _("朦朧の旋律", "Stun Pattern");
168 return _("視界内の全てのモンスターを朦朧させる。抵抗されると無効。", "Attempts to stun all monsters in sight.");
171 /* Stop singing before start another */
173 stop_singing(player_ptr);
177 msg_print(_("眩惑させるメロディを奏で始めた...", "You weave a pattern of sounds to bewilder and daze..."));
178 start_singing(player_ptr, spell, MUSIC_STUN);
182 DICE_NUMBER dice = plev / 10;
186 return info_power_dice(dice, sides);
190 stun_monsters(player_ptr, damroll(dice, sides));
198 return _("生命の流れ", "Flow of Life");
201 return _("体力を少し回復させる。", "Heals HP a little.");
204 /* Stop singing before start another */
206 stop_singing(player_ptr);
210 msg_print(_("歌を通して体に活気が戻ってきた...", "Life flows through you as you sing a song of healing..."));
211 start_singing(player_ptr, spell, MUSIC_L_LIFE);
215 DICE_NUMBER dice = 2;
219 return info_heal(dice, sides, 0);
223 hp_player(player_ptr, damroll(dice, sides));
231 return _("太陽の歌", "Song of the Sun");
234 return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
237 /* Stop singing before start another */
239 stop_singing(player_ptr);
243 DICE_NUMBER dice = 2;
244 DICE_SID sides = plev / 2;
245 POSITION rad = plev / 10 + 1;
248 return info_damage(dice, sides, 0);
252 msg_print(_("光り輝く歌が辺りを照らした。", "Your uplifting song brings brightness to dark places..."));
253 lite_area(player_ptr, damroll(dice, sides), rad);
260 return _("恐怖の歌", "Song of Fear");
263 return _("視界内の全てのモンスターを恐怖させる。抵抗されると無効。", "Attempts to scare all monsters in sight.");
266 /* Stop singing before start another */
268 stop_singing(player_ptr);
272 msg_print(_("おどろおどろしいメロディを奏で始めた...", "You start weaving a fearful pattern..."));
273 start_singing(player_ptr, spell, MUSIC_FEAR);
280 return info_power(power);
284 project_all_los(player_ptr, AttributeType::TURN_ALL, power);
292 return _("戦いの歌", "Heroic Ballad");
296 return _("ヒーロー気分になる。", "Removes fear. Gives a bonus to hit for a while. Heals you for 10 HP.");
300 stop_singing(player_ptr);
304 msg_print(_("激しい戦いの歌を歌った...", "You start singing a song of intense fighting..."));
306 (void)hp_player(player_ptr, 10);
307 (void)BadStatusSetter(player_ptr).set_fear(0);
308 RedrawingFlagsUpdater::get_instance().set_flag(StatusRecalculatingFlag::HP);
309 start_singing(player_ptr, spell, MUSIC_HERO);
313 if (!player_ptr->hero) {
314 msg_print(_("ヒーローの気分が消え失せた。", "The heroism wears off."));
315 RedrawingFlagsUpdater::get_instance().set_flag(StatusRecalculatingFlag::HP);
322 return _("霊的知覚", "Clairaudience");
326 "階段を感知する。レベル15で全てのモンスター、20で財宝とアイテムを感知できるようになる。レベル25で周辺の地形を感知し、40でその階全体を永久"
327 "に照らし、ダンジョン内のすべてのアイテムを感知する。この効果は歌い続けることで順に起こる。",
328 "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 "
329 "level 25. Lights and know the whole level at level 40. These effects accumulate as the song continues.");
332 /* Stop singing before start another */
334 stop_singing(player_ptr);
338 msg_print(_("静かな音楽が感覚を研ぎ澄まさせた...", "Your quiet music sharpens your sense of hearing..."));
339 /* Hack -- Initialize the turn count */
340 set_singing_count(player_ptr, 0);
341 start_singing(player_ptr, spell, MUSIC_DETECT);
345 POSITION rad = DETECT_RAD_DEFAULT;
348 return info_radius(rad);
352 int count = get_singing_count(player_ptr);
355 wiz_lite(player_ptr, false);
358 map_area(player_ptr, rad);
359 if (plev > 39 && count < 19) {
360 set_singing_count(player_ptr, count + 1);
364 /* There are too many hidden treasure. So... */
365 /* detect_treasure(rad); */
366 detect_objects_gold(player_ptr, rad);
367 detect_objects_normal(player_ptr, rad);
369 if (plev > 24 && count < 11) {
370 set_singing_count(player_ptr, count + 1);
374 detect_monsters_invis(player_ptr, rad);
375 detect_monsters_normal(player_ptr, rad);
377 if (plev > 19 && count < A_MAX) {
378 set_singing_count(player_ptr, count + 1);
381 detect_traps(player_ptr, rad, true);
382 detect_doors(player_ptr, rad);
383 detect_stairs(player_ptr, rad);
385 if (plev > 14 && count < 3) {
386 set_singing_count(player_ptr, count + 1);
395 return _("魂の歌", "Soul Shriek");
398 return _("視界内の全てのモンスターに対して精神攻撃を行う。", "Damages all monsters in sight with PSI damages.");
401 /* Stop singing before start another */
403 stop_singing(player_ptr);
407 msg_print(_("精神を捻じ曲げる歌を歌った...", "You start singing a song of soul in pain..."));
408 start_singing(player_ptr, spell, MUSIC_PSI);
412 DICE_NUMBER dice = 1;
413 DICE_SID sides = plev * 3 / 2;
416 return info_damage(dice, sides, 0);
420 project_all_los(player_ptr, AttributeType::PSI, damroll(dice, sides));
428 return _("知識の歌", "Song of Lore");
431 return _("自分のいるマスと隣りのマスに落ちているアイテムを鑑定する。", "Identifies all items which are in the adjacent squares.");
434 /* Stop singing before start another */
436 stop_singing(player_ptr);
440 msg_print(_("この世界の知識が流れ込んできた...", "You recall the rich lore of the world..."));
441 start_singing(player_ptr, spell, MUSIC_ID);
448 return info_radius(rad);
453 * MP不足で鑑定が発動される前に歌が中断してしまうのを防止。
456 project(player_ptr, 0, rad, player_ptr->y, player_ptr->x, 0, AttributeType::IDENTIFY, PROJECT_ITEM);
464 return _("隠遁の歌", "Hiding Tune");
467 return _("隠密行動能力を上昇させる。", "Gives improved stealth.");
470 /* Stop singing before start another */
472 stop_singing(player_ptr);
476 msg_print(_("あなたの姿が景色にとけこんでいった...", "Your song carries you beyond the sight of mortal eyes..."));
477 start_singing(player_ptr, spell, MUSIC_STEALTH);
481 if (!player_ptr->tim_stealth) {
482 msg_print(_("姿がはっきりと見えるようになった。", "You are no longer hidden."));
490 return _("幻影の旋律", "Illusion Pattern");
493 return _("視界内の全てのモンスターを混乱させる。抵抗されると無効。", "Attempts to confuse all monsters in sight.");
496 /* Stop singing before start another */
498 stop_singing(player_ptr);
502 msg_print(_("辺り一面に幻影が現れた...", "You weave a pattern of sounds to beguile and confuse..."));
503 start_singing(player_ptr, spell, MUSIC_CONF);
507 POWER power = plev * 2;
510 return info_power(power);
514 confuse_monsters(player_ptr, power);
522 return _("破滅の叫び", "Doomcall");
525 return _("視界内の全てのモンスターに対して轟音攻撃を行う。", "Damages all monsters in sight with booming sound.");
528 /* Stop singing before start another */
530 stop_singing(player_ptr);
534 msg_print(_("轟音が響いた...", "The fury of the Downfall of Numenor lashes out..."));
535 start_singing(player_ptr, spell, MUSIC_SOUND);
539 DICE_NUMBER dice = 10 + plev / 5;
543 return info_damage(dice, sides, 0);
547 project_all_los(player_ptr, AttributeType::SOUND, damroll(dice, sides));
555 return _("フィリエルの歌", "Firiel's Song");
558 return _("周囲の死体や骨を生き返す。", "Resurrects nearby corpses and skeletons. And makes them your pets.");
562 /* Stop singing before start another */
564 stop_singing(player_ptr);
568 msg_print(_("生命と復活のテーマを奏で始めた...", "The themes of life and revival are woven into your song..."));
569 animate_dead(player_ptr, 0, player_ptr->y, player_ptr->x);
576 return _("旅の仲間", "Fellowship Chant");
579 return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight.");
582 /* Stop singing before start another */
584 stop_singing(player_ptr);
588 msg_print(_("安らかなメロディを奏で始めた...", "You weave a slow, soothing melody of imploration..."));
589 start_singing(player_ptr, spell, MUSIC_CHARM);
593 DICE_NUMBER dice = 10 + plev / 15;
597 return info_power_dice(dice, sides);
601 charm_monsters(player_ptr, damroll(dice, sides));
609 return _("フルゥの行進曲", "Hru's March");
612 return _("壁を掘り進む。自分の足元のアイテムは蒸発する。", "Makes you be able to burrow into walls. Objects under your feet evaporate.");
615 /* Stop singing before start another */
617 stop_singing(player_ptr);
621 msg_print(_("粉砕するメロディを奏で始めた...", "You weave a violent pattern of sounds to break walls."));
622 start_singing(player_ptr, spell, MUSIC_WALL);
628 * MP不足で効果が発動される前に歌が中断してしまうのを防止。
631 project(player_ptr, 0, 0, player_ptr->y, player_ptr->x, 0, AttributeType::DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE);
638 return _("フィンロドの護り", "Finrod's Resistance");
641 return _("酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。",
642 "Gives resistance to fire, cold, electricity, acid and poison. These resistances can be added to those from equipment for more powerful "
646 /* Stop singing before start another */
648 stop_singing(player_ptr);
652 msg_print(_("元素の力に対する忍耐の歌を歌った。", "You sing a song of perseverance against powers..."));
653 start_singing(player_ptr, spell, MUSIC_RESIST);
657 if (!player_ptr->oppose_acid) {
658 msg_print(_("酸への耐性が薄れた気がする。", "You feel less resistant to acid."));
661 if (!player_ptr->oppose_elec) {
662 msg_print(_("電撃への耐性が薄れた気がする。", "You feel less resistant to elec."));
665 if (!player_ptr->oppose_fire) {
666 msg_print(_("火への耐性が薄れた気がする。", "You feel less resistant to fire."));
669 if (!player_ptr->oppose_cold) {
670 msg_print(_("冷気への耐性が薄れた気がする。", "You feel less resistant to cold."));
673 if (!player_ptr->oppose_pois) {
674 msg_print(_("毒への耐性が薄れた気がする。", "You feel less resistant to pois."));
682 return _("ホビットのメロディ", "Hobbit Melodies");
685 return _("加速する。", "Hastes you.");
688 /* Stop singing before start another */
690 stop_singing(player_ptr);
694 msg_print(_("軽快な歌を口ずさみ始めた...", "You start singing a joyful pop song..."));
695 start_singing(player_ptr, spell, MUSIC_SPEED);
699 if (!player_ptr->effects()->acceleration()->is_fast()) {
700 msg_print(_("動きの素早さがなくなったようだ。", "You feel yourself slow down."));
708 return _("歪んだ世界", "World Contortion");
711 return _("近くのモンスターをテレポートさせる。抵抗されると無効。", "Teleports all nearby monsters away unless resisted.");
715 POSITION rad = plev / 15 + 1;
716 POWER power = plev * 3 + 1;
719 return info_radius(rad);
722 /* Stop singing before start another */
724 stop_singing(player_ptr);
728 msg_print(_("歌が空間を歪めた...", "Reality whirls wildly as you sing a dizzying melody..."));
729 project(player_ptr, 0, rad, player_ptr->y, player_ptr->x, power, AttributeType::AWAY_ALL, PROJECT_KILL);
736 return _("退散の歌", "Dispelling Chant");
739 return _("視界内の全てのモンスターにダメージを与える。邪悪なモンスターに特に大きなダメージを与える。",
740 "Damages all monsters in sight. Hurts evil monsters greatly.");
743 /* Stop singing before start another */
745 stop_singing(player_ptr);
749 msg_print(_("耐えられない不協和音が敵を責め立てた...", "You cry out in an ear-wracking voice..."));
750 start_singing(player_ptr, spell, MUSIC_DISPEL);
754 DICE_SID m_sides = plev * 3;
755 DICE_SID e_sides = plev * 3;
758 return format("%s1d%d+1d%d", KWD_DAM, m_sides, e_sides);
762 dispel_monsters(player_ptr, randint1(m_sides));
763 dispel_evil(player_ptr, randint1(e_sides));
770 return _("サルマンの甘言", "The Voice of Saruman");
773 return _("視界内の全てのモンスターを減速させ、眠らせようとする。抵抗されると無効。", "Attempts to slow and put to sleep all monsters in sight.");
776 /* Stop singing before start another */
778 stop_singing(player_ptr);
782 msg_print(_("優しく、魅力的な歌を口ずさみ始めた...", "You start humming a gentle and attractive song..."));
783 start_singing(player_ptr, spell, MUSIC_SARUMAN);
790 return info_power(power);
794 slow_monsters(player_ptr, plev);
795 sleep_monsters(player_ptr, plev);
803 return _("嵐の音色", "Song of the Tempest");
806 return _("轟音のビームを放つ。", "Fires a beam of sound.");
810 DICE_NUMBER dice = 15 + (plev - 1) / 2;
814 return info_damage(dice, sides, 0);
817 /* Stop singing before start another */
819 stop_singing(player_ptr);
823 if (!get_aim_dir(player_ptr, &dir)) {
827 fire_beam(player_ptr, AttributeType::SOUND, dir, damroll(dice, sides));
834 return _("もう一つの世界", "Ambarkanta");
837 return _("現在の階を再構成する。", "Recreates current dungeon level.");
845 return info_delay(base, sides);
848 /* Stop singing before start another */
850 stop_singing(player_ptr);
854 msg_print(_("周囲が変化し始めた...", "You sing of the primeval shaping of Middle-earth..."));
855 reserve_alter_reality(player_ptr, randint0(sides) + base);
862 return _("破壊の旋律", "Wrecking Pattern");
866 "周囲のダンジョンを揺らし、壁と床をランダムに入れ変える。", "Shakes dungeon structure, and results in random swapping of floors and walls.");
869 /* Stop singing before start another */
871 stop_singing(player_ptr);
875 msg_print(_("破壊的な歌が響きわたった...", "You weave a pattern of sounds to contort and shatter..."));
876 start_singing(player_ptr, spell, MUSIC_QUAKE);
883 return info_radius(rad);
887 earthquake(player_ptr, player_ptr->y, player_ptr->x, 10, 0);
895 return _("停滞の歌", "Stationary Shriek");
898 return _("視界内の全てのモンスターを麻痺させようとする。抵抗されると無効。", "Attempts to freeze all monsters in sight.");
901 /* Stop singing before start another */
903 stop_singing(player_ptr);
907 msg_print(_("ゆっくりとしたメロディを奏で始めた...", "You weave a very slow pattern which is almost likely to stop..."));
908 start_singing(player_ptr, spell, MUSIC_STASIS);
912 POWER power = plev * 4;
915 return info_power(power);
919 stasis_monsters(player_ptr, power);
927 return _("エルベレスの聖歌", "Elbereth's Chant");
930 return _("自分のいる床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。",
931 "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.");
935 /* Stop singing before start another */
937 stop_singing(player_ptr);
941 msg_print(_("歌が神聖な場を作り出した...", "The holy power of the Music is creating sacred field..."));
942 create_rune_protection_one(player_ptr);
949 return _("英雄の詩", "The Hero's Poem");
953 return _("加速し、ヒーロー気分になり、視界内の全てのモンスターにダメージを与える。", "Hastes you. Gives heroism. Damages all monsters in sight.");
957 stop_singing(player_ptr);
961 msg_print(_("英雄の歌を口ずさんだ...", "You chant a powerful, heroic call to arms..."));
962 (void)hp_player(player_ptr, 10);
963 (void)BadStatusSetter(player_ptr).set_fear(0);
964 RedrawingFlagsUpdater::get_instance().set_flag(StatusRecalculatingFlag::HP);
965 start_singing(player_ptr, spell, MUSIC_SHERO);
969 if (!player_ptr->hero) {
970 msg_print(_("ヒーローの気分が消え失せた。", "The heroism wears off."));
971 RedrawingFlagsUpdater::get_instance().set_flag(StatusRecalculatingFlag::HP);
974 if (!player_ptr->effects()->acceleration()->is_fast()) {
975 msg_print(_("動きの素早さがなくなったようだ。", "You feel yourself slow down."));
979 DICE_NUMBER dice = 1;
980 DICE_SID sides = plev * 3;
982 return info_damage(dice, sides, 0);
986 dispel_monsters(player_ptr, damroll(dice, sides));
993 return _("ヤヴァンナの助け", "Relief of Yavanna");
997 return _("強力な回復の歌で、負傷と朦朧状態も全快する。", "Powerful healing song. Also completely heals cuts and being stunned.");
1001 stop_singing(player_ptr);
1005 msg_print(_("歌を通して体に活気が戻ってきた...", "Life flows through you as you sing the song..."));
1006 start_singing(player_ptr, spell, MUSIC_H_LIFE);
1012 return info_heal(dice, sides, 0);
1016 hp_player(player_ptr, damroll(dice, sides));
1017 BadStatusSetter bss(player_ptr);
1018 (void)bss.set_stun(0);
1019 (void)bss.set_cut(0);
1026 return _("再生の歌", "Goddess's rebirth");
1029 return _("すべてのステータスと経験値を回復する。", "Restores all stats and experience.");
1033 /* Stop singing before start another */
1035 stop_singing(player_ptr);
1040 _("暗黒の中に光と美をふりまいた。体が元の活力を取り戻した。", "You strew light and beauty in the dark as you sing. You feel refreshed."));
1041 (void)restore_all_status(player_ptr);
1042 (void)restore_level(player_ptr);
1049 return _("サウロンの魔術", "Wizardry of Sauron");
1052 return _("非常に強力でごく小さい轟音の球を放つ。", "Fires an extremely powerful tiny ball of sound.");
1056 DICE_NUMBER dice = 50 + plev;
1057 DICE_SID sides = 10;
1061 return info_damage(dice, sides, 0);
1064 /* Stop singing before start another */
1066 stop_singing(player_ptr);
1070 if (!get_aim_dir(player_ptr, &dir)) {
1071 return std::nullopt;
1074 fire_ball(player_ptr, AttributeType::SOUND, dir, damroll(dice, sides), rad);
1081 return _("フィンゴルフィンの挑戦", "Fingolfin's Challenge");
1084 return _("ダメージを受けなくなるバリアを張る。", "Generates a barrier which completely protects you from almost all damage.");
1087 /* Stop singing before start another */
1089 stop_singing(player_ptr);
1093 msg_print(_("フィンゴルフィンの冥王への挑戦を歌った...", "You recall the valor of Fingolfin's challenge to the Dark Lord..."));
1094 auto &rfu = RedrawingFlagsUpdater::get_instance();
1095 rfu.set_flag(MainWindowRedrawingFlag::MAP);
1096 rfu.set_flag(StatusRecalculatingFlag::MONSTER_STATUSES);
1097 static constexpr auto flags = {
1098 SubWindowRedrawingFlag::OVERHEAD,
1099 SubWindowRedrawingFlag::DUNGEON,
1101 rfu.set_flags(flags);
1102 start_singing(player_ptr, spell, MUSIC_INVULN);
1106 if (!player_ptr->invuln) {
1107 msg_print(_("無敵ではなくなった。", "The invulnerability wears off."));
1108 auto &rfu = RedrawingFlagsUpdater::get_instance();
1109 rfu.set_flag(MainWindowRedrawingFlag::MAP);
1110 rfu.set_flag(StatusRecalculatingFlag::MONSTER_STATUSES);
1111 static constexpr auto flags = {
1112 SubWindowRedrawingFlag::OVERHEAD,
1113 SubWindowRedrawingFlag::DUNGEON,
1115 rfu.set_flags(flags);