diff --git a/scripts/scenes/battle_scene.gd b/scripts/scenes/battle_scene.gd index 5fdbf7d..8314c38 100644 --- a/scripts/scenes/battle_scene.gd +++ b/scripts/scenes/battle_scene.gd @@ -91,6 +91,7 @@ const UI_SFX_VOLUME_DB := -4.0 const DEFAULT_AUDIO_VOLUME_PERCENT := 75 const AUDIO_MUTED_DB := -80.0 const MAX_RECENT_SFX_KEYS := 32 +const AUDIO_PREVIEW_SFX_KEYS := ["menu_confirm", "footstep", "slash"] const FLOATING_TEXT_LIFETIME := 1.0 const FLOATING_TEXT_RISE := 42.0 const OBJECTIVE_NOTICE_DURATION := 2.6 @@ -3087,7 +3088,7 @@ func _create_hud() -> void: settings_bgm_volume_row.add_child(settings_bgm_volume_value_label) settings_sfx_toggle = CheckButton.new() - settings_sfx_toggle.text = "효과음: 선택/전투" + settings_sfx_toggle.text = "효과음: 선택·발소리·전투" settings_sfx_toggle.custom_minimum_size = Vector2(374, 30) settings_sfx_toggle.tooltip_text = "메뉴 선택음, 이동 발소리, 공격과 책략 효과음을 켜거나 끕니다." settings_sfx_toggle.toggled.connect(_on_settings_sfx_toggled) @@ -3123,9 +3124,9 @@ func _create_hud() -> void: settings_sfx_volume_row.add_child(settings_sfx_volume_value_label) settings_audio_reset_button = Button.new() - settings_audio_reset_button.text = "소리 확인" + settings_audio_reset_button.text = "기본값 듣기" settings_audio_reset_button.custom_minimum_size = Vector2(374, 32) - settings_audio_reset_button.tooltip_text = "음악과 효과음을 켜고 기본 크기로 되돌린 뒤 현재 음악과 확인음을 재생합니다." + settings_audio_reset_button.tooltip_text = "음악과 효과음을 켜고 75%로 되돌린 뒤 현재 음악, 확인음, 발소리, 타격음을 재생합니다." settings_audio_reset_button.pressed.connect(_on_settings_audio_reset_pressed) settings_column.add_child(settings_audio_reset_button) @@ -4579,7 +4580,7 @@ func _create_hud() -> void: title_bgm_volume_row.add_child(title_bgm_volume_value_label) title_sfx_toggle = CheckButton.new() - title_sfx_toggle.text = "효과음: 클릭/전투" + title_sfx_toggle.text = "효과음: 클릭·발소리·전투" title_sfx_toggle.custom_minimum_size = Vector2(350, 30) title_sfx_toggle.button_pressed = title_sfx_enabled title_sfx_toggle.tooltip_text = "메뉴 클릭음, 이동 발소리, 공격과 책략 효과음을 켜거나 끕니다." @@ -4621,8 +4622,8 @@ func _create_hud() -> void: title_audio_reset_button, "TitleAudioResetButton", "status", - "소리 확인", - "음악과 효과음을 켜고 기본 크기로 되돌린 뒤 현재 음악과 확인음을 재생합니다.", + "기본값 듣기", + "음악과 효과음을 켜고 75%로 되돌린 뒤 현재 음악, 확인음, 발소리, 타격음을 재생합니다.", Vector2(350, 32) ) title_audio_reset_button.pressed.connect(_on_title_audio_reset_pressed) @@ -13817,7 +13818,13 @@ func _restore_audio_defaults(play_preview: bool) -> void: _update_title_menu_state() _play_bgm(current_bgm_key if not current_bgm_key.is_empty() else "menu") if play_preview: - _play_sfx("menu_confirm", UI_SFX_VOLUME_DB) + _play_audio_preview_sfx() + + +func _play_audio_preview_sfx() -> void: + for sfx_key in AUDIO_PREVIEW_SFX_KEYS: + var preview_volume := UI_SFX_VOLUME_DB if sfx_key == "menu_confirm" else SFX_VOLUME_DB + _play_sfx(sfx_key, preview_volume) func _update_top_archive_buttons() -> void: diff --git a/tools/smoke_title_menu.gd b/tools/smoke_title_menu.gd index 95ba062..5c040d2 100644 --- a/tools/smoke_title_menu.gd +++ b/tools/smoke_title_menu.gd @@ -156,8 +156,8 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void: else: if not scene.title_bgm_toggle.text.contains("군막의 새벽"): failures.append("title BGM toggle should name the active menu theme") - if not scene.title_sfx_toggle.text.contains("클릭") or not scene.title_sfx_toggle.text.contains("전투"): - failures.append("title SFX toggle should clarify menu and battle effects") + if not scene.title_sfx_toggle.text.contains("클릭") or not scene.title_sfx_toggle.text.contains("발소리") or not scene.title_sfx_toggle.text.contains("전투"): + failures.append("title SFX toggle should clarify menu, movement, and battle effects") if scene.title_bgm_volume_slider == null or scene.title_sfx_volume_slider == null: failures.append("title settings should expose BGM and SFX volume sliders") scene._on_title_bgm_toggled(false) @@ -184,12 +184,12 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void: if persisted_scene.title_bgm_volume_percent != 45 or persisted_scene.title_sfx_volume_percent != 35: failures.append("title settings volume values should persist into a new scene instance") persisted_scene.free() - if scene.title_audio_reset_button == null or scene.title_audio_reset_button.text != "소리 확인": - failures.append("title settings should expose a one-click audio preview button") + if scene.title_audio_reset_button == null or scene.title_audio_reset_button.text != "기본값 듣기": + failures.append("title settings should expose a clear audio defaults preview button") else: _check_title_menu_button_art(failures, scene.title_audio_reset_button, "status", "title audio reset") - if not scene.title_audio_reset_button.tooltip_text.contains("확인음"): - failures.append("title audio preview should explain that it plays a confirmation sound") + if not scene.title_audio_reset_button.tooltip_text.contains("확인음") or not scene.title_audio_reset_button.tooltip_text.contains("발소리") or not scene.title_audio_reset_button.tooltip_text.contains("타격음"): + failures.append("title audio preview should explain the confirmation, movement, and strike samples") scene.recent_sfx_keys.clear() scene._on_title_audio_reset_pressed() if not scene.title_bgm_enabled or not scene.title_sfx_enabled: @@ -200,6 +200,10 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void: failures.append("title audio recovery should leave a playable BGM stream selected") if not scene.recent_sfx_keys.has("menu_confirm"): failures.append("title audio preview should play an audible confirmation SFX") + if not scene.recent_sfx_keys.has("footstep"): + failures.append("title audio preview should play a movement footstep SFX") + if not scene.recent_sfx_keys.has("slash"): + failures.append("title audio preview should play a strike SFX") scene._on_title_settings_back_pressed() if scene.title_settings_panel != null and scene.title_settings_panel.visible: failures.append("settings back should hide the title settings panel") @@ -358,8 +362,8 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void: else: if not scene.settings_bgm_toggle.text.contains("군막") or not scene.settings_bgm_toggle.text.contains("전투"): failures.append("in-game BGM toggle should clarify menu and battle music") - if not scene.settings_sfx_toggle.text.contains("선택") or not scene.settings_sfx_toggle.text.contains("전투"): - failures.append("in-game SFX toggle should clarify menu and battle effects") + if not scene.settings_sfx_toggle.text.contains("선택") or not scene.settings_sfx_toggle.text.contains("발소리") or not scene.settings_sfx_toggle.text.contains("전투"): + failures.append("in-game SFX toggle should clarify menu, movement, and battle effects") if scene.settings_bgm_volume_slider == null or scene.settings_sfx_volume_slider == null: failures.append("in-game settings panel should expose BGM and SFX volume sliders") scene._on_settings_bgm_toggled(true) @@ -371,8 +375,8 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void: failures.append("in-game settings toggles should update the shared settings state") if scene.title_bgm_volume_percent != 70 or scene.title_sfx_volume_percent != 60: failures.append("in-game settings sliders should update the shared volume state") - if scene.settings_audio_reset_button == null or scene.settings_audio_reset_button.text != "소리 확인": - failures.append("in-game settings should expose a one-click audio preview button") + if scene.settings_audio_reset_button == null or scene.settings_audio_reset_button.text != "기본값 듣기": + failures.append("in-game settings should expose a clear audio defaults preview button") elif not scene.settings_audio_reset_button.tooltip_text.contains("현재 음악"): failures.append("in-game audio preview should explain that it plays the current music") scene._on_settings_bgm_toggled(false) @@ -387,6 +391,10 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void: failures.append("in-game audio recovery should restore audible volume defaults") if not scene.recent_sfx_keys.has("menu_confirm"): failures.append("in-game audio preview should play an audible confirmation SFX") + if not scene.recent_sfx_keys.has("footstep"): + failures.append("in-game audio preview should play a movement footstep SFX") + if not scene.recent_sfx_keys.has("slash"): + failures.append("in-game audio preview should play a strike SFX") scene._hide_settings_panel() scene._on_new_campaign_pressed() if not scene._is_opening_prologue_visible():