Polish opening story controls

This commit is contained in:
2026-06-20 15:07:11 +09:00
parent d0bfcbc90a
commit 9bac7089ff
4 changed files with 161 additions and 130 deletions

View File

@@ -252,50 +252,50 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void:
failures.append("opening prologue should expose title and story text")
elif not scene.opening_prologue_body_label.text.contains("조조") or not scene.opening_prologue_body_label.text.contains("황건의 난"):
failures.append("opening prologue should first explain Cao Cao before the Yellow Turban battle")
if scene.opening_prologue_step_label == null or not scene.opening_prologue_step_label.text.begins_with("장면 ") or not scene.opening_prologue_step_label.text.ends_with("/4"):
failures.append("opening prologue should give Cao Cao, decision, Xiahou Dun, and Yingchuan their own beats")
if scene.opening_prologue_step_label == null or scene.opening_prologue_step_label.text != "첫 기록":
failures.append("opening prologue should describe the current record without bare numeric counters")
if scene.opening_prologue_root == null or scene.opening_prologue_root.find_child("OpeningChapterSeal", true, false) == null:
failures.append("opening prologue should anchor the generated story art with a chapter seal")
var opening_story_strip: Node = null
if scene.opening_prologue_root != null:
opening_story_strip = scene.opening_prologue_root.find_child("OpeningStoryBeatStrip", true, false)
opening_story_strip = scene.opening_prologue_root.find_child("OpeningStoryLedgerStrip", true, false)
if opening_story_strip == null:
failures.append("opening prologue should show a compact four-beat story progress rail")
failures.append("opening prologue should show a compact story ledger in the upper-right corner")
else:
var progress_caption := opening_story_strip.find_child("OpeningStoryProgressCaption", true, false) as Label
if progress_caption == null or progress_caption.text != "전개":
failures.append("opening story progress rail should use a subtle Korean caption instead of exposed numeric cards")
if progress_caption == null or progress_caption.text != "영천으로":
failures.append("opening story ledger should use a natural Korean chapter caption")
var progress_scene := opening_story_strip.find_child("OpeningStoryProgressScene", true, false) as Label
if progress_scene == null or not progress_scene.text.contains("첫 기록") or not progress_scene.text.contains("황건의 난"):
failures.append("opening story ledger should name the current record and scene")
var opening_story_cards: Array = opening_story_strip.find_children("OpeningStoryBeatCard*", "", true, false)
if opening_story_cards.size() != 4:
failures.append("opening story progress rail should expose four story knots: %d" % opening_story_cards.size())
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_card in opening_story_cards:
var card_node := opening_story_card as Node
var beat_seal := card_node.find_child("OpeningStoryBeatSeal", true, false) as PanelContainer
var beat_thread := card_node.find_child("OpeningStoryBeatThread", true, false) as ColorRect
if not bool(card_node.get_meta("story_progress_knot", false)):
failures.append("opening story beat should be rendered as a compact progress knot")
if beat_seal == null or not bool(beat_seal.get_meta("generated_panel_texture", false)):
failures.append("opening story beat should use a generated knot seal")
if beat_thread == null:
failures.append("opening story beat should join knots with a subdued thread")
var numeric_labels := card_node.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"]:
failures.append("opening story progress should not expose bare numeric labels")
if bool(card_node.get_meta("current_story_beat", false)):
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_cards.find(opening_story_card) + 1
current_index = opening_story_ticks.find(opening_story_tick) + 1
if current_count != 1 or current_index != 1:
failures.append("opening story strip should highlight the first story beat on entry")
if opening_story_strip.custom_minimum_size.x > 360.0 or opening_story_strip.custom_minimum_size.y > 56.0:
failures.append("opening story progress rail should stay compact in the upper-right corner: %s" % str(opening_story_strip.custom_minimum_size))
if scene.opening_prologue_next_button == null or scene.opening_prologue_next_button.text != "이어 보기":
failures.append("opening story ledger should highlight the first story tick on entry")
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"]:
failures.append("opening story ledger should not expose bare numeric labels")
if opening_story_strip.custom_minimum_size.x > 380.0 or opening_story_strip.custom_minimum_size.y > 62.0:
failures.append("opening story ledger should stay compact in the upper-right corner: %s" % str(opening_story_strip.custom_minimum_size))
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")
@@ -362,9 +362,9 @@ func _check_title_menu_start_load_and_settings(failures: Array[String]) -> void:
failures.append("opening prologue should change story artwork per page")
var second_story_card: Node = null
if scene.opening_prologue_root != null:
second_story_card = scene.opening_prologue_root.find_child("OpeningStoryBeatCard2", true, false)
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 strip should highlight the second beat after advancing")
failures.append("opening story ledger should highlight the second tick 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("작은 군세"):