Use generated textures for dialogue ornaments
This commit is contained in:
@@ -37,7 +37,7 @@ Godot 4 tactical RPG prototype inspired by classic turn-based Romance of the Thr
|
||||
- Pre-battle prep commands use compact icon buttons with active selection state and Korean hover labels for chapters, shop, talks, armory, roster, formation, and save records.
|
||||
- Post-move tactic and item pickers use generated command/item icons, compact two-line option rows, and hover details instead of dense single-line text.
|
||||
- Target preview badges, minimap hover badges, and battlefield target markers include generated jade panel surfaces plus action icons for move, attack, threat, support, objective, terrain, and item outcomes.
|
||||
- Story, briefing, dialogue, mission-detail, and result scroll/ribbon/binding/bamboo ornaments use generated seal/panel textures instead of flat color boxes.
|
||||
- Story, briefing, dialogue, mission-detail, and result scroll/ribbon/binding/bamboo/ink/tassel ornaments use generated seal/panel textures instead of flat color boxes.
|
||||
- Battlefield hover info badges use generated jade panel texture plus terrain, supply, tactic, objective, and threat icons, keeping raw grid coordinates out of visible play text.
|
||||
- Battle, top-toolbar, and pre-battle command buttons now prefer generated high-resolution bronze/parchment icon art under `art/ui/icons` and generated lacquer/jade/cinnabar button surfaces under `art/ui/buttons`, with procedural icon drawing and flat button styles kept only as fallbacks.
|
||||
- Battle maps blend generated terrain texture tiles for plains, forests, hills, wasteland, roads, water, villages, and castles over the high-resolution battlefield backdrop, with generated transparent feature overlays for road connections, water, villages, castles, and wasteland accents.
|
||||
|
||||
@@ -1913,11 +1913,16 @@ func _make_ink_wash_rule(width: float = 0.0, height: float = 7.0) -> HBoxContain
|
||||
row.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
row.add_theme_constant_override("separation", 2)
|
||||
for index in range(5):
|
||||
var strip := ColorRect.new()
|
||||
strip.custom_minimum_size = Vector2(10 if index != 2 else width, height)
|
||||
var is_center := index == 2
|
||||
var strip := _make_generated_ornament_panel(
|
||||
"GeneratedInkRuleSegment%d" % (index + 1),
|
||||
Vector2(10 if not is_center else width, height),
|
||||
"hud_info" if is_center else "command_seal",
|
||||
false,
|
||||
true
|
||||
)
|
||||
strip.size_flags_horizontal = Control.SIZE_EXPAND_FILL if index == 2 else Control.SIZE_SHRINK_CENTER
|
||||
strip.color = UI_INK_WASH if index == 2 else Color(UI_SEAL_RED_DARK.r, UI_SEAL_RED_DARK.g, UI_SEAL_RED_DARK.b, 0.96)
|
||||
strip.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
strip.modulate = Color(0.58, 0.62, 0.54, 0.88) if is_center else Color(0.70, 0.60, 0.56, 0.96)
|
||||
row.add_child(strip)
|
||||
return row
|
||||
|
||||
@@ -2328,10 +2333,8 @@ func _make_hanging_tassel(height: float = 262.0) -> VBoxContainer:
|
||||
tassel.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
tassel.add_theme_constant_override("separation", 4)
|
||||
|
||||
var top_seal := ColorRect.new()
|
||||
top_seal.color = UI_SEAL_RED
|
||||
top_seal.custom_minimum_size = Vector2(18, 18)
|
||||
top_seal.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
var top_seal := _make_generated_ornament_panel("GeneratedTasselTopSeal", Vector2(18, 18), "command_seal", false, true)
|
||||
top_seal.modulate = Color(0.96, 0.86, 0.78, 0.98)
|
||||
tassel.add_child(top_seal)
|
||||
|
||||
var cords := HBoxContainer.new()
|
||||
@@ -2340,18 +2343,14 @@ func _make_hanging_tassel(height: float = 262.0) -> VBoxContainer:
|
||||
cords.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
cords.add_theme_constant_override("separation", 4)
|
||||
for index in range(2):
|
||||
var cord := ColorRect.new()
|
||||
cord.color = UI_TARNISHED_BRONZE if index == 0 else UI_CINNABAR_DARK
|
||||
cord.custom_minimum_size = Vector2(6, height - 44.0)
|
||||
var cord := _make_generated_ornament_panel("GeneratedTasselCord%d" % (index + 1), Vector2(6, height - 44.0), "hud_info", false, true)
|
||||
cord.size_flags_vertical = Control.SIZE_EXPAND_FILL
|
||||
cord.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
cord.modulate = Color(0.90, 0.80, 0.58, 0.94) if index == 0 else Color(0.70, 0.60, 0.56, 0.96)
|
||||
cords.add_child(cord)
|
||||
tassel.add_child(cords)
|
||||
|
||||
var bottom_seal := ColorRect.new()
|
||||
bottom_seal.color = UI_SEAL_RED_DARK
|
||||
bottom_seal.custom_minimum_size = Vector2(18, 18)
|
||||
bottom_seal.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
var bottom_seal := _make_generated_ornament_panel("GeneratedTasselBottomSeal", Vector2(18, 18), "command_seal", false, true)
|
||||
bottom_seal.modulate = Color(0.72, 0.64, 0.58, 0.96)
|
||||
tassel.add_child(bottom_seal)
|
||||
return tassel
|
||||
|
||||
|
||||
@@ -3658,6 +3658,9 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void:
|
||||
var tablet_binding := scene._make_tablet_binding(120, 16)
|
||||
_check_tablet_binding(failures, tablet_binding, "generated tablet binding")
|
||||
tablet_binding.free()
|
||||
var ink_rule := scene._make_ink_wash_rule(120, 6)
|
||||
_check_ink_wash_rule(failures, ink_rule, "generated ink wash rule")
|
||||
ink_rule.free()
|
||||
var seal_ribbon := scene._make_seal_ribbon(120, 18)
|
||||
_check_seal_ribbon(failures, seal_ribbon, "generated seal ribbon")
|
||||
seal_ribbon.free()
|
||||
@@ -3670,6 +3673,17 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void:
|
||||
scene.free()
|
||||
|
||||
|
||||
func _check_ink_wash_rule(failures: Array[String], rule: HBoxContainer, label: String) -> void:
|
||||
if rule == null:
|
||||
failures.append("%s missing" % label)
|
||||
return
|
||||
if rule.get_child_count() != 5:
|
||||
failures.append("%s should use five ink-and-seal segments" % label)
|
||||
return
|
||||
for index in range(rule.get_child_count()):
|
||||
_check_panel_uses_generated_ornament_texture(failures, rule.get_child(index) as PanelContainer, "%s segment %d" % [label, index])
|
||||
|
||||
|
||||
func _check_scroll_rod(failures: Array[String], scroll_rod: HBoxContainer, label: String) -> void:
|
||||
if scroll_rod == null:
|
||||
failures.append("%s missing" % label)
|
||||
@@ -3772,9 +3786,14 @@ func _check_hanging_tassel(failures: Array[String], tassel: VBoxContainer, label
|
||||
if tassel.get_child_count() != 3:
|
||||
failures.append("%s should use top seal, hanging cords, and bottom seal" % label)
|
||||
return
|
||||
_check_panel_uses_generated_ornament_texture(failures, tassel.get_child(0) as PanelContainer, "%s top seal" % label)
|
||||
_check_panel_uses_generated_ornament_texture(failures, tassel.get_child(2) as PanelContainer, "%s bottom seal" % label)
|
||||
var cords := tassel.get_child(1) as HBoxContainer
|
||||
if cords == null or cords.get_child_count() != 2:
|
||||
failures.append("%s should include two hanging cord strips" % label)
|
||||
return
|
||||
for index in range(cords.get_child_count()):
|
||||
_check_panel_uses_generated_ornament_texture(failures, cords.get_child(index) as PanelContainer, "%s cord %d" % [label, index])
|
||||
|
||||
|
||||
func _check_right_side_dialogue_layout(failures: Array[String], scene) -> void:
|
||||
|
||||
Reference in New Issue
Block a user