diff --git a/art/ui/panels/panel_title_command.png b/art/ui/panels/panel_title_command.png new file mode 100644 index 0000000..935b001 Binary files /dev/null and b/art/ui/panels/panel_title_command.png differ diff --git a/scripts/scenes/battle_scene.gd b/scripts/scenes/battle_scene.gd index aa506b1..1927cf0 100644 --- a/scripts/scenes/battle_scene.gd +++ b/scripts/scenes/battle_scene.gd @@ -28,6 +28,7 @@ const BGM_MENU_PATH := "res://audio/bgm/menu_theme_placeholder.wav" const BGM_BATTLE_PATH := "res://audio/bgm/battle_loop_placeholder.wav" const TITLE_BACKGROUND_PATH := "res://art/backgrounds/title_war_camp_dawn.png" const TITLE_PORTRAIT_PATH := "res://art/portraits/cao_cao.png" +const TITLE_MENU_SURFACE_PATH := "res://art/ui/panels/panel_title_command.png" const TOOLBAR_ICON_PATH_TEMPLATE := "res://art/ui/icons/toolbar_%s.png" const PANEL_TEXTURE_PATH_TEMPLATE := "res://art/ui/panels/panel_%s.png" const BUTTON_TEXTURE_PATH_TEMPLATE := "res://art/ui/buttons/button_%s.png" @@ -575,6 +576,7 @@ var opening_prologue_skip_button: Button var opening_prologue_index := 0 var title_screen_root: Control var title_background_texture_rect: TextureRect +var title_menu_surface_texture_rect: TextureRect var title_portrait_texture_rect: TextureRect var title_panel: PanelContainer var title_caption_label: Label @@ -945,6 +947,13 @@ func _apply_panel_style(panel: PanelContainer, variant: String) -> void: radius = 10 margin = 22 shadow_size = 18 + "transparent_overlay": + fill = Color(0.0, 0.0, 0.0, 0.0) + border = Color(0.0, 0.0, 0.0, 0.0) + border_width = 0 + radius = 0 + margin = 0 + shadow_size = 0 "result_tablet": fill = Color(0.30, 0.27, 0.22, 0.997) border = UI_LACQUER_EDGE @@ -4046,6 +4055,19 @@ func _create_hud() -> void: title_menu_shadow.mouse_filter = Control.MOUSE_FILTER_IGNORE title_screen_root.add_child(title_menu_shadow) + title_menu_surface_texture_rect = TextureRect.new() + title_menu_surface_texture_rect.name = "TitleGeneratedCommandBoard" + title_menu_surface_texture_rect.position = Vector2(4, -88) + title_menu_surface_texture_rect.size = Vector2(806, 900) + title_menu_surface_texture_rect.custom_minimum_size = Vector2(806, 900) + title_menu_surface_texture_rect.mouse_filter = Control.MOUSE_FILTER_IGNORE + title_menu_surface_texture_rect.expand_mode = TextureRect.EXPAND_IGNORE_SIZE + title_menu_surface_texture_rect.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_COVERED + title_menu_surface_texture_rect.texture = _load_art_texture(TITLE_MENU_SURFACE_PATH) + title_menu_surface_texture_rect.modulate = Color(0.96, 0.96, 0.94, 0.97) + title_menu_surface_texture_rect.set_meta("generated_title_menu_surface", true) + title_screen_root.add_child(title_menu_surface_texture_rect) + var title_portrait_shadow := ColorRect.new() title_portrait_shadow.name = "TitlePortraitLacquerField" title_portrait_shadow.position = Vector2(770, 36) @@ -4081,7 +4103,7 @@ func _create_hud() -> void: title_panel.position = Vector2(40, 8) title_panel.size = Vector2(730, 704) title_panel.custom_minimum_size = Vector2(730, 704) - _apply_panel_style(title_panel, "paper") + _apply_panel_style(title_panel, "transparent_overlay") title_screen_root.add_child(title_panel) var title_column := VBoxContainer.new() @@ -4112,7 +4134,7 @@ func _create_hud() -> void: var title_body_panel := PanelContainer.new() title_body_panel.custom_minimum_size = Vector2(646, 284) - _apply_panel_style(title_body_panel, "edict") + _apply_panel_style(title_body_panel, "command_seal") title_column.add_child(title_body_panel) var title_body_row := HBoxContainer.new() @@ -4129,7 +4151,7 @@ func _create_hud() -> void: title_status_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER title_status_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER title_status_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART - _apply_label_style(title_status_label, UI_AGED_INK, 14) + _apply_label_style(title_status_label, UI_PARCHMENT_TEXT, 14) title_menu_column.add_child(title_status_label) title_start_button = Button.new() diff --git a/tools/smoke_title_menu.gd b/tools/smoke_title_menu.gd index f739f82..3abd043 100644 --- a/tools/smoke_title_menu.gd +++ b/tools/smoke_title_menu.gd @@ -72,6 +72,17 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void: failures.append("title screen should show Cao Cao portrait art") if scene.title_panel == null or scene.title_panel.position.x > 100.0: failures.append("title menu panel should sit on the left side of the cinematic title screen") + if scene.title_menu_surface_texture_rect == null or scene.title_menu_surface_texture_rect.texture == null: + failures.append("title screen should use a generated command-board surface behind the menu") + else: + if not bool(scene.title_menu_surface_texture_rect.get_meta("generated_title_menu_surface", false)): + failures.append("title command board should carry generated surface metadata") + if scene.title_menu_surface_texture_rect.texture.get_width() < 1024 or scene.title_menu_surface_texture_rect.texture.get_height() < 1024: + failures.append("title command board should keep high-resolution generated pixels") + if scene.title_menu_surface_texture_rect.custom_minimum_size.y < 860.0: + failures.append("title command board should extend beyond the viewport for a full ceremonial frame") + if scene.title_panel != null and str(scene.title_panel.get_meta("panel_style_variant", "")) != "transparent_overlay": + failures.append("title menu panel should be a transparent content layer over generated art") if scene.title_caption_label == null or scene.title_caption_label.text != "조조전": failures.append("title screen should present the campaign title in Korean") var title_story_feature: Node = null diff --git a/tools/smoke_visual_assets.gd b/tools/smoke_visual_assets.gd index 9eebce1..98543ac 100644 --- a/tools/smoke_visual_assets.gd +++ b/tools/smoke_visual_assets.gd @@ -2985,7 +2985,7 @@ func _check_generated_toolbar_icons(failures: Array[String]) -> void: func _check_generated_panel_textures(failures: Array[String]) -> void: - var panel_keys := ["lacquer", "paper_scroll", "hud_jade", "command_seal"] + var panel_keys := ["lacquer", "paper_scroll", "hud_jade", "command_seal", "title_command"] for panel_key in panel_keys: _check_panel_texture_path(failures, "res://art/ui/panels/panel_%s.png" % panel_key, "panel texture %s" % panel_key)