Improve briefing and story readability
This commit is contained in:
@@ -284,19 +284,8 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void:
|
||||
if not opening_story_cards.is_empty():
|
||||
failures.append("opening story ledger should not expose old numbered-card style nodes")
|
||||
var opening_story_ticks: Array = opening_story_strip.find_children("OpeningStoryLedgerTick*", "", true, false)
|
||||
if opening_story_ticks.size() != 4:
|
||||
failures.append("opening story ledger should expose four quiet progress ticks: %d" % opening_story_ticks.size())
|
||||
var current_count := 0
|
||||
var current_index := 0
|
||||
for opening_story_tick in opening_story_ticks:
|
||||
var tick_node := opening_story_tick as Node
|
||||
if not bool(tick_node.get_meta("story_progress_tick", false)):
|
||||
failures.append("opening story tick should be marked as a quiet progress tick")
|
||||
if bool(tick_node.get_meta("current_story_beat", false)):
|
||||
current_count += 1
|
||||
current_index = opening_story_ticks.find(opening_story_tick) + 1
|
||||
if current_count != 1 or current_index != 1:
|
||||
failures.append("opening story ledger should highlight the first story tick on entry")
|
||||
if not opening_story_ticks.is_empty():
|
||||
failures.append("opening story ledger should avoid unreadable numeric/tick progress marks: %d" % opening_story_ticks.size())
|
||||
var numeric_labels := opening_story_strip.find_children("*", "Label", true, false)
|
||||
for numeric_label in numeric_labels:
|
||||
if str((numeric_label as Label).text).strip_edges() in ["1", "2", "3", "4", "1/4", "2/4", "3/4", "4/4"]:
|
||||
@@ -307,11 +296,11 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void:
|
||||
if opening_story_strip.custom_minimum_size.x > 340.0 or opening_story_strip.custom_minimum_size.y > 54.0:
|
||||
failures.append("opening story ledger should stay compact beside the chapter seal: %s" % str(opening_story_strip.custom_minimum_size))
|
||||
_check_control_inside_design_view(failures, opening_story_strip as Control, "opening story ledger")
|
||||
if scene.opening_prologue_next_button == null or scene.opening_prologue_next_button.text != "기록 넘기기":
|
||||
if scene.opening_prologue_next_button == null or scene.opening_prologue_next_button.text != "다음 기록":
|
||||
failures.append("opening prologue next button should read as a story action")
|
||||
else:
|
||||
_check_opening_story_button_art(failures, scene.opening_prologue_next_button, "opening next")
|
||||
if scene.opening_prologue_skip_button == null or scene.opening_prologue_skip_button.text != "군막으로 바로":
|
||||
if scene.opening_prologue_skip_button == null or scene.opening_prologue_skip_button.text != "군막으로":
|
||||
failures.append("opening prologue skip button should read as a contextual camp shortcut")
|
||||
else:
|
||||
_check_opening_story_button_art(failures, scene.opening_prologue_skip_button, "opening skip")
|
||||
@@ -383,8 +372,13 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void:
|
||||
var second_story_card: Node = null
|
||||
if scene.opening_prologue_root != null:
|
||||
second_story_card = scene.opening_prologue_root.find_child("OpeningStoryLedgerTick2", true, false)
|
||||
if second_story_card == null or not bool(second_story_card.get_meta("current_story_beat", false)):
|
||||
failures.append("opening story ledger should highlight the second tick after advancing")
|
||||
if second_story_card != null:
|
||||
failures.append("opening story ledger should not show a second tick after advancing")
|
||||
var second_progress: Label = null
|
||||
if scene.opening_prologue_root != null:
|
||||
second_progress = scene.opening_prologue_root.find_child("OpeningStoryProgressScene", true, false) as Label
|
||||
if second_progress == null or not second_progress.text.contains("둘째 기록") or not second_progress.text.contains("맹덕의 군령"):
|
||||
failures.append("opening story ledger should update the text record after advancing")
|
||||
if scene.opening_prologue_title_label == null or scene.opening_prologue_title_label.text != "맹덕의 군령":
|
||||
failures.append("opening prologue should move from Cao Cao background to his decision")
|
||||
elif not scene.opening_prologue_body_label.text.contains("황건") or not scene.opening_prologue_body_label.text.contains("작은 군세"):
|
||||
@@ -550,24 +544,23 @@ func _check_opening_story_button_art(failures: Array[String], button: Button, co
|
||||
return
|
||||
if not bool(button.get_meta("opening_story_button", false)):
|
||||
failures.append("%s should use the compact opening-story button profile" % context)
|
||||
if not bool(button.get_meta("flat_readable_button", false)):
|
||||
failures.append("%s should use the flat readable story button style" % context)
|
||||
if button.texture_filter != CanvasItem.TEXTURE_FILTER_LINEAR:
|
||||
failures.append("%s should use linear filtering so generated button art stays smooth at QHD" % context)
|
||||
failures.append("%s should use linear filtering at QHD" % context)
|
||||
if button.expand_icon:
|
||||
failures.append("%s icon should not stretch in QHD fullscreen" % context)
|
||||
if button.get_theme_constant("icon_max_width") > 22:
|
||||
failures.append("%s icon should stay small beside Korean text" % context)
|
||||
var stylebox := button.get_theme_stylebox("normal")
|
||||
if not (stylebox is StyleBoxTexture):
|
||||
failures.append("%s should keep a generated button texture" % context)
|
||||
if not (stylebox is StyleBoxFlat):
|
||||
failures.append("%s should use a crisp flat style instead of a smeared generated texture" % context)
|
||||
return
|
||||
var style := stylebox as StyleBoxTexture
|
||||
if style.texture_margin_left < 24 or style.texture_margin_top < 10:
|
||||
failures.append("%s generated button slices should preserve the ornamental frame at QHD: %d/%d" % [context, style.texture_margin_left, style.texture_margin_top])
|
||||
if style.axis_stretch_horizontal != StyleBoxTexture.AXIS_STRETCH_MODE_TILE_FIT or style.axis_stretch_vertical != StyleBoxTexture.AXIS_STRETCH_MODE_TILE_FIT:
|
||||
failures.append("%s generated button surface should tile-fit its 9-slice center at QHD" % context)
|
||||
_check_button_texture_slice_fit(failures, button, context)
|
||||
if button.get_theme_font_size("font_size") > 17:
|
||||
failures.append("%s should stay visually quiet in the story caption" % context)
|
||||
var style := stylebox as StyleBoxFlat
|
||||
if style.bg_color.a < 0.92:
|
||||
failures.append("%s flat button should have a solid readable surface: %s" % [context, str(style.bg_color)])
|
||||
if button.get_theme_font_size("font_size") < 14:
|
||||
failures.append("%s should keep readable Korean text in the story caption" % context)
|
||||
|
||||
|
||||
func _check_button_texture_slice_fit(failures: Array[String], button: Button, context: String) -> void:
|
||||
|
||||
@@ -3634,21 +3634,18 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void:
|
||||
for clutter in ["목표|", "주의|", "현황|", "경고|"]:
|
||||
if mission_text.contains(clutter):
|
||||
failures.append("mission panel should avoid old verbose marker `%s`: %s" % [clutter, mission_text])
|
||||
_check_panel_style_fill(failures, scene.briefing_panel, "briefing panel", Color(0.34, 0.32, 0.27, 0.997))
|
||||
_check_panel_style_frame(failures, scene.briefing_panel, "briefing panel", Color(0.025, 0.023, 0.020, 1.0), 16)
|
||||
_check_panel_style_fill(failures, scene.briefing_objective_panel, "briefing objective edict panel", Color(0.56, 0.54, 0.47, 0.998))
|
||||
_check_panel_style_frame(failures, scene.briefing_objective_panel, "briefing objective edict panel", Color(0.065, 0.060, 0.052, 0.98), 8)
|
||||
_check_panel_style_fill(failures, scene.briefing_camp_overview_panel, "briefing silk map panel", Color(0.32, 0.31, 0.25, 0.995))
|
||||
_check_panel_style_frame(failures, scene.briefing_camp_overview_panel, "briefing silk map panel", Color(0.065, 0.060, 0.052, 0.98), 5)
|
||||
_check_panel_style_fill(failures, scene.briefing_panel, "briefing panel", Color(0.66, 0.63, 0.53, 0.998))
|
||||
_check_panel_style_frame(failures, scene.briefing_panel, "briefing panel", Color(0.14, 0.11, 0.075, 1.0), 5)
|
||||
_check_panel_style_fill(failures, scene.briefing_objective_panel, "briefing objective readable panel", Color(0.58, 0.55, 0.47, 0.998))
|
||||
_check_panel_style_frame(failures, scene.briefing_objective_panel, "briefing objective readable panel", Color(0.16, 0.13, 0.090, 1.0), 3)
|
||||
_check_panel_style_fill(failures, scene.briefing_camp_overview_panel, "briefing readable map panel", Color(0.58, 0.55, 0.47, 0.998))
|
||||
_check_panel_style_frame(failures, scene.briefing_camp_overview_panel, "briefing readable map panel", Color(0.16, 0.13, 0.090, 1.0), 3)
|
||||
_check_panel_style_fill(failures, scene.dialogue_panel, "dialogue panel", Color(0.045, 0.045, 0.040, 0.982))
|
||||
_check_panel_style_frame(failures, scene.dialogue_panel, "dialogue panel", Color(0.18, 0.17, 0.14, 1.0), 9)
|
||||
_check_panel_style_fill(failures, scene.auto_end_turn_prompt_panel, "auto end turn prompt panel", Color(0.050, 0.045, 0.040, 0.992))
|
||||
_check_panel_style_fill(failures, scene.dialogue_portrait_panel, "dialogue portrait panel", Color(0.025, 0.023, 0.020, 1.0))
|
||||
_check_panel_style_fill(failures, scene.dialogue_speaker_panel, "dialogue speaker seal panel", Color(0.26, 0.035, 0.030, 0.995))
|
||||
_check_panel_style_fill(failures, scene.dialogue_text_panel, "dialogue text scroll panel", Color(0.58, 0.55, 0.48, 0.996))
|
||||
_check_panel_uses_generated_texture(failures, scene.briefing_panel, "briefing generated frame")
|
||||
_check_panel_uses_generated_texture(failures, scene.briefing_objective_panel, "briefing objective generated frame")
|
||||
_check_panel_uses_generated_texture(failures, scene.briefing_camp_overview_panel, "briefing map generated frame")
|
||||
_check_panel_uses_generated_texture(failures, scene.dialogue_panel, "dialogue generated frame")
|
||||
_check_panel_uses_generated_texture(failures, scene.dialogue_text_panel, "dialogue text generated frame")
|
||||
_check_panel_uses_generated_texture(failures, scene.auto_end_turn_prompt_panel, "auto end turn generated frame")
|
||||
@@ -3672,18 +3669,13 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void:
|
||||
_check_seal_ribbon(failures, scene.briefing_seal_ribbon, "briefing seal ribbon")
|
||||
_check_seal_ribbon(failures, scene.dialogue_seal_ribbon, "dialogue seal ribbon")
|
||||
_check_seal_ribbon(failures, scene.result_seal_ribbon, "result seal ribbon")
|
||||
_check_bamboo_gutter_row(failures, scene.briefing_objective_panel, "briefing objective bamboo gutters")
|
||||
_check_bamboo_gutter_row(failures, scene.dialogue_text_panel, "dialogue scroll bamboo gutters")
|
||||
_check_bamboo_gutter_row(failures, scene.mission_detail_panel, "mission detail bamboo gutters")
|
||||
_check_edict_marker_stack(failures, scene.briefing_objective_panel, "briefing objective edict markers")
|
||||
_check_edict_marker_stack(failures, scene.mission_detail_panel, "mission detail edict markers")
|
||||
_check_panel_style_fill(failures, scene.cell_info_panel, "HUD terrain info panel", Color(0.045, 0.050, 0.048, 0.90))
|
||||
_check_panel_style_frame(failures, scene.cell_info_panel, "HUD terrain info panel", Color(0.20, 0.24, 0.21, 0.96), 2)
|
||||
_check_panel_style_fill(failures, scene.forecast_panel, "HUD forecast info panel", Color(0.045, 0.050, 0.048, 0.90))
|
||||
_check_panel_style_frame(failures, scene.forecast_panel, "HUD forecast info panel", Color(0.20, 0.24, 0.21, 0.96), 2)
|
||||
_check_panel_uses_generated_texture(failures, scene.mission_detail_panel, "mission detail generated frame")
|
||||
_check_panel_uses_generated_texture(failures, scene.cell_info_panel, "HUD terrain generated frame")
|
||||
_check_panel_uses_generated_texture(failures, scene.forecast_panel, "HUD forecast generated frame")
|
||||
_check_panel_style_fill(failures, scene.cell_info_panel, "HUD terrain info panel", Color(0.060, 0.056, 0.048, 0.982))
|
||||
_check_panel_style_frame(failures, scene.cell_info_panel, "HUD terrain info panel", Color(0.42, 0.35, 0.24, 0.98), 2)
|
||||
_check_panel_style_fill(failures, scene.forecast_panel, "HUD forecast info panel", Color(0.060, 0.056, 0.048, 0.982))
|
||||
_check_panel_style_frame(failures, scene.forecast_panel, "HUD forecast info panel", Color(0.42, 0.35, 0.24, 0.98), 2)
|
||||
if scene.cell_info_icon == null:
|
||||
failures.append("HUD terrain info panel should expose an icon chip")
|
||||
if scene.forecast_icon == null:
|
||||
@@ -3981,23 +3973,23 @@ func _check_opening_prologue_presentation(failures: Array[String]) -> void:
|
||||
if scene.opening_prologue_next_button == null:
|
||||
failures.append("opening prologue should expose a next button")
|
||||
else:
|
||||
if scene.opening_prologue_next_button.text != "기록 넘기기":
|
||||
if scene.opening_prologue_next_button.text != "다음 기록":
|
||||
failures.append("opening next button should use story-fluent Korean text")
|
||||
if scene.opening_prologue_next_button.icon == null:
|
||||
failures.append("opening next button should carry generated icon art")
|
||||
if scene.opening_prologue_next_button.expand_icon or scene.opening_prologue_next_button.get_theme_constant("icon_max_width") > 22:
|
||||
failures.append("opening next icon should stay capped so it cannot cover story text")
|
||||
_check_button_uses_generated_surface(failures, scene.opening_prologue_next_button, "opening next")
|
||||
_check_button_uses_flat_readable_surface(failures, scene.opening_prologue_next_button, "opening next")
|
||||
if scene.opening_prologue_skip_button == null:
|
||||
failures.append("opening prologue should expose a skip button")
|
||||
else:
|
||||
if scene.opening_prologue_skip_button.text != "군막으로 바로":
|
||||
if scene.opening_prologue_skip_button.text != "군막으로":
|
||||
failures.append("opening skip button should avoid modern skip-button wording")
|
||||
if scene.opening_prologue_skip_button.icon == null:
|
||||
failures.append("opening skip button should carry generated icon art")
|
||||
if scene.opening_prologue_skip_button.expand_icon or scene.opening_prologue_skip_button.get_theme_constant("icon_max_width") > 22:
|
||||
failures.append("opening skip icon should stay capped so it cannot cover story text")
|
||||
_check_button_uses_generated_surface(failures, scene.opening_prologue_skip_button, "opening skip")
|
||||
_check_button_uses_flat_readable_surface(failures, scene.opening_prologue_skip_button, "opening skip")
|
||||
var opening_ledger := _find_descendant_by_name(scene.opening_prologue_root, "OpeningStoryLedgerStrip") as PanelContainer
|
||||
if opening_ledger == null:
|
||||
failures.append("opening prologue should use a story ledger instead of numbered progress cards")
|
||||
@@ -4012,6 +4004,9 @@ func _check_opening_prologue_presentation(failures: Array[String]) -> void:
|
||||
var old_cards := opening_ledger.find_children("OpeningStoryBeatCard*", "", true, false)
|
||||
if not old_cards.is_empty():
|
||||
failures.append("opening story ledger should not expose old numbered-card style nodes")
|
||||
var tick_cards := opening_ledger.find_children("OpeningStoryLedgerTick*", "", true, false)
|
||||
if not tick_cards.is_empty():
|
||||
failures.append("opening story ledger should not expose unreadable progress tick nodes")
|
||||
for index in range(BattleSceneScript.OPENING_PROLOGUE_PAGES.size()):
|
||||
scene.opening_prologue_index = index
|
||||
scene._update_opening_prologue_page()
|
||||
@@ -4025,7 +4020,7 @@ func _check_opening_prologue_presentation(failures: Array[String]) -> void:
|
||||
if scene.opening_prologue_next_button != null:
|
||||
scene.opening_prologue_index = BattleSceneScript.OPENING_PROLOGUE_PAGES.size() - 1
|
||||
scene._update_opening_prologue_page()
|
||||
if scene.opening_prologue_next_button.text != "군막으로" or scene.opening_prologue_next_button.icon == null:
|
||||
if scene.opening_prologue_next_button.text != "전투 준비" or scene.opening_prologue_next_button.icon == null:
|
||||
failures.append("opening final page should switch the next control into camp-entry mode")
|
||||
scene.free()
|
||||
|
||||
@@ -4460,6 +4455,25 @@ func _check_button_uses_generated_surface(failures: Array[String], button: Butto
|
||||
failures.append("%s generated button texture should reserve readable content margins" % context)
|
||||
|
||||
|
||||
func _check_button_uses_flat_readable_surface(failures: Array[String], button: Button, context: String) -> void:
|
||||
if button == null:
|
||||
failures.append("%s button missing" % context)
|
||||
return
|
||||
if not bool(button.get_meta("flat_readable_button", false)):
|
||||
failures.append("%s should be marked as a flat readable button" % context)
|
||||
var stylebox := button.get_theme_stylebox("normal")
|
||||
if not (stylebox is StyleBoxFlat):
|
||||
failures.append("%s should use a crisp flat button surface" % context)
|
||||
return
|
||||
var style := stylebox as StyleBoxFlat
|
||||
if style.bg_color.a < 0.92:
|
||||
failures.append("%s flat button should have an opaque readable surface: %s" % [context, str(style.bg_color)])
|
||||
if style.border_color.a < 0.80 or style.get_border_width(SIDE_TOP) < 2:
|
||||
failures.append("%s flat button should keep a clear bronze edge" % context)
|
||||
if button.get_theme_font_size("font_size") < 14:
|
||||
failures.append("%s flat button should keep readable Korean text" % context)
|
||||
|
||||
|
||||
func _check_button_texture_slice_for_control(
|
||||
failures: Array[String],
|
||||
button: Button,
|
||||
|
||||
Reference in New Issue
Block a user