Refine Korean briefing and expand first battle
This commit is contained in:
@@ -2964,7 +2964,7 @@ func _check_scene_texture_loading(failures: Array[String]) -> void:
|
||||
if not merchant_notice.contains("군막 상인") or not merchant_notice.contains("길가의 물자"):
|
||||
failures.append("shop merchant notice should include name and flavor lines")
|
||||
var camp_overview := scene._format_briefing_camp_overview_text(scene.state.get_briefing(), false)
|
||||
for expected in ["地勢|영천, 중평 원년", "軍幕|", "軍備|", "軍資 0냥", "군막 회의 · 3건", "보급 대기 1건", "군상 물품 · 2종", "출진 명부 2명 중 2명", "진형 배치 4칸", "兵藏 비축"]:
|
||||
for expected in ["위치: 영천, 중평 원년", "군막:", "준비:", "군자금 0냥", "군막 회의 · 3건", "보급 대기 1건", "군상 물품 · 2종", "출진 명부 2명 중 2명", "진형 배치 4칸", "비축 물자"]:
|
||||
if not camp_overview.contains(expected):
|
||||
failures.append("camp overview should include %s: %s" % [expected, camp_overview])
|
||||
var bean: Dictionary = scene.state.get_item_def("bean")
|
||||
@@ -3052,11 +3052,11 @@ func _check_hud_focus_text(failures: Array[String]) -> void:
|
||||
failures.append("Enemy archer HUD focus should describe enemy control: %s" % archer_text)
|
||||
if not scene._unit_current_terrain_text(archer).contains("평원"):
|
||||
failures.append("Archer terrain text should reflect its current plain tile")
|
||||
_check_unit_class_mark(failures, scene, "cao_cao", "tactic", "策")
|
||||
_check_unit_class_mark(failures, scene, "xiahou_dun", "cavalry", "騎")
|
||||
_check_unit_class_mark(failures, scene, "yellow_turban_2", "infantry", "步")
|
||||
_check_unit_class_mark(failures, scene, "yellow_turban_3", "ranged", "弓")
|
||||
_check_unit_class_mark(failures, scene, "yellow_turban_1", "heavy", "武")
|
||||
_check_unit_class_mark(failures, scene, "cao_cao", "tactic", "책")
|
||||
_check_unit_class_mark(failures, scene, "xiahou_dun", "cavalry", "기")
|
||||
_check_unit_class_mark(failures, scene, "yellow_turban_2", "infantry", "보")
|
||||
_check_unit_class_mark(failures, scene, "yellow_turban_3", "ranged", "궁")
|
||||
_check_unit_class_mark(failures, scene, "yellow_turban_1", "heavy", "무")
|
||||
scene.free()
|
||||
|
||||
|
||||
@@ -3084,18 +3084,19 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void:
|
||||
scene.free()
|
||||
return
|
||||
var briefing_text := scene._format_briefing_objectives()
|
||||
for expected in ["受命 勝令", "戒懼 敗兆", "驗功 戰功", "不祥 凶兆", "封賞 戰利"]:
|
||||
for expected in ["승리 조건", "패배 조건", "보상"]:
|
||||
if not briefing_text.contains(expected):
|
||||
failures.append("briefing objective parchment should use ancient heading `%s`: %s" % [expected, briefing_text])
|
||||
failures.append("briefing objective parchment should use Korean heading `%s`: %s" % [expected, briefing_text])
|
||||
for clutter in ["진행", "위험"]:
|
||||
if briefing_text.contains(clutter):
|
||||
failures.append("briefing objective parchment should stay concise without `%s`: %s" % [clutter, briefing_text])
|
||||
var hud_objective := scene._format_objective_hud_text()
|
||||
if not hud_objective.contains("勝令|") or not hud_objective.contains("敗兆|"):
|
||||
failures.append("HUD objective should read as paired edict and omen text: %s" % hud_objective)
|
||||
if not hud_objective.contains("朱批") or not hud_objective.contains("墨戒"):
|
||||
failures.append("HUD objective should use brush annotation wording: %s" % hud_objective)
|
||||
if not hud_objective.contains("승리:") or not hud_objective.contains("패배:"):
|
||||
failures.append("HUD objective should use concise Korean labels: %s" % hud_objective)
|
||||
var mission_text := scene._format_mission_panel_text()
|
||||
for expected in ["勝令", "敗兆", "戰功", "凶兆", "令牌|", "戒牌|", "功簿|", "凶簡|"]:
|
||||
for expected in ["승리 조건", "패배 조건", "진행", "위험", "목표|", "주의|", "현황|", "경고|"]:
|
||||
if not mission_text.contains(expected):
|
||||
failures.append("mission panel should use old campaign wording `%s`: %s" % [expected, mission_text])
|
||||
failures.append("mission panel should use Korean campaign wording `%s`: %s" % [expected, mission_text])
|
||||
_check_panel_style_fill(failures, scene.briefing_panel, "briefing panel", Color(0.54, 0.36, 0.14, 0.997))
|
||||
_check_panel_style_frame(failures, scene.briefing_panel, "briefing panel", Color(0.035, 0.014, 0.008, 1.0), 16)
|
||||
_check_panel_style_fill(failures, scene.briefing_objective_panel, "briefing objective edict panel", Color(0.67, 0.49, 0.24, 0.998))
|
||||
@@ -3136,10 +3137,10 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void:
|
||||
_check_hanging_tassel(failures, scene.dialogue_left_tassel, "dialogue left tassel")
|
||||
_check_hanging_tassel(failures, scene.dialogue_right_tassel, "dialogue right tassel")
|
||||
_check_dialogue_column_budget(failures, scene)
|
||||
if scene.dialogue_continue_button == null or scene.dialogue_continue_button.text != "次簡":
|
||||
failures.append("dialogue continue button should use ancient slip text")
|
||||
if scene.dialogue_previous_button == null or scene.dialogue_previous_button.text != "前簡":
|
||||
failures.append("dialogue previous button should use ancient slip text")
|
||||
if scene.dialogue_continue_button == null or scene.dialogue_continue_button.text != "다음":
|
||||
failures.append("dialogue continue button should use Korean text")
|
||||
if scene.dialogue_previous_button == null or scene.dialogue_previous_button.text != "이전":
|
||||
failures.append("dialogue previous button should use Korean text")
|
||||
var localized_lines := scene._normalized_dialogue_lines([{"speaker": "Cao Cao", "display_speaker": "조조", "text": "군령을 전하라."}])
|
||||
if localized_lines.is_empty() or str((localized_lines[0] as Dictionary).get("speaker", "")) != "조조":
|
||||
failures.append("dialogue normalization should preserve display_speaker for localized names")
|
||||
@@ -3147,10 +3148,10 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void:
|
||||
scene.active_dialogue_lines = localized_lines
|
||||
scene.active_dialogue_index = 0
|
||||
scene._render_dialogue_line()
|
||||
if scene.dialogue_speaker_label == null or scene.dialogue_speaker_label.text != "조조 曰":
|
||||
if scene.dialogue_speaker_label == null or scene.dialogue_speaker_label.text != "조조":
|
||||
failures.append("dialogue speaker label should render localized display_speaker")
|
||||
if scene.dialogue_text_label == null or scene.dialogue_text_label.text != "墨書\n 「군령을 전하라.」":
|
||||
failures.append("dialogue text should render as an old quotation scroll")
|
||||
if scene.dialogue_text_label == null or scene.dialogue_text_label.text != "「군령을 전하라.」":
|
||||
failures.append("dialogue text should render as a concise quotation scroll")
|
||||
scene._hide_dialogue_panel()
|
||||
var enemy_lines := scene._normalized_dialogue_lines([{"speaker": "Wen Chou", "text": "전진!"}])
|
||||
if enemy_lines.is_empty() or str((enemy_lines[0] as Dictionary).get("speaker", "")) != "문추":
|
||||
@@ -3178,8 +3179,10 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void:
|
||||
failures.append("dialogue text should use the project serif font override")
|
||||
if scene.dialogue_continue_button == null or not scene.dialogue_continue_button.has_theme_font_override("font"):
|
||||
failures.append("dialogue continue button should use the project serif font override")
|
||||
if scene.mission_title_label == null or scene.mission_title_label.text != "軍令 목패":
|
||||
failures.append("mission panel title should use bronze tablet wording")
|
||||
if scene.mission_title_label == null or scene.mission_title_label.text != "전투 목표":
|
||||
failures.append("mission panel title should use clear Korean wording")
|
||||
if scene.briefing_start_button == null or scene.briefing_start_button.text != "닫고 전투 시작":
|
||||
failures.append("briefing start button should clearly close the briefing")
|
||||
if scene.shop_button == null or scene.shop_button.text != "군상":
|
||||
failures.append("briefing shop button should use sutler wording")
|
||||
if scene.talk_button == null or scene.talk_button.text != "군막 회의":
|
||||
@@ -3209,8 +3212,8 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void:
|
||||
if scene.targeting_hint_back_button == null or scene.targeting_hint_back_button.text != "죽간 거두기":
|
||||
failures.append("targeting hint back button should use bamboo-slip wording")
|
||||
scene._on_objective_updated("동문에 조서를 꽂아라.", "조조가 퇴각하면 패전이다.")
|
||||
if scene.objective_notice_label == null or not scene.objective_notice_label.text.contains("朱批") or not scene.objective_notice_label.text.contains("墨戒"):
|
||||
failures.append("objective update notice should use brush annotation wording")
|
||||
if scene.objective_notice_label == null or not scene.objective_notice_label.text.contains("목표|") or not scene.objective_notice_label.text.contains("주의|"):
|
||||
failures.append("objective update notice should use Korean annotation wording")
|
||||
scene._update_briefing_camp_overview(scene.state.get_briefing(), false)
|
||||
if scene.briefing_camp_overview_fallback_label == null or scene.briefing_camp_overview_fallback_label.text != "비단 전장도":
|
||||
failures.append("briefing map fallback should read as an old campaign map")
|
||||
@@ -3218,10 +3221,10 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void:
|
||||
_check_panel_style_fill(failures, scene.result_panel, "victory result panel", Color(0.54, 0.36, 0.15, 0.997))
|
||||
scene._apply_panel_style(scene.result_panel, "result_defeat_tablet")
|
||||
_check_panel_style_fill(failures, scene.result_panel, "defeat result panel", Color(0.13, 0.032, 0.014, 0.997))
|
||||
if not scene._format_victory_result_text().contains("凱旋 勝牘"):
|
||||
failures.append("victory result should read like a bronze proclamation")
|
||||
if not scene._format_defeat_result_text().contains("敗軍 碑牘"):
|
||||
failures.append("defeat result should read like a memorial tablet")
|
||||
if not scene._format_victory_result_text().contains("승리"):
|
||||
failures.append("victory result should use Korean title")
|
||||
if not scene._format_defeat_result_text().contains("패배"):
|
||||
failures.append("defeat result should use Korean title")
|
||||
var scroll_rod := scene._make_scroll_rod(120, 4)
|
||||
if scroll_rod.get_child_count() != 5:
|
||||
failures.append("scroll rod ornament should use five visual strips")
|
||||
@@ -3469,6 +3472,8 @@ func _check_hover_intent_badges(failures: Array[String]) -> void:
|
||||
scene.free()
|
||||
return
|
||||
scene.battle_started = true
|
||||
var enemy: Dictionary = scene.state.get_unit("yellow_turban_1")
|
||||
enemy["pos"] = Vector2i(1, 2)
|
||||
scene.state.select_unit("cao_cao")
|
||||
scene._refresh_ranges()
|
||||
|
||||
@@ -3482,7 +3487,7 @@ func _check_hover_intent_badges(failures: Array[String]) -> void:
|
||||
if str(select_badge.get("text", "")) != "선택" or str(select_badge.get("kind", "")) != "select":
|
||||
failures.append("friendly selectable unit should show SELECT badge: %s" % str(select_badge))
|
||||
|
||||
scene.hover_cell = Vector2i(7, 2)
|
||||
scene.hover_cell = Vector2i(1, 2)
|
||||
var attack_badge := scene._target_preview_badge()
|
||||
if attack_badge.is_empty() or str(attack_badge.get("kind", "")) == "move" or str(attack_badge.get("text", "")) == "행군":
|
||||
failures.append("enemy hover should keep attack badge priority: %s" % str(attack_badge))
|
||||
@@ -3511,8 +3516,14 @@ func _check_terrain_and_unit_presentation(failures: Array[String]) -> void:
|
||||
return
|
||||
if scene._terrain_key_at(Vector2i(3, 1)) != "F":
|
||||
failures.append("terrain helper should read forest cells")
|
||||
if scene._terrain_key_at(Vector2i(6, 5)) != "T":
|
||||
failures.append("terrain helper should read village cells")
|
||||
if not scene._terrain_key_at(Vector2i(-1, 0)).is_empty():
|
||||
failures.append("terrain helper should return empty outside the board")
|
||||
if scene.state.get_terrain_name(Vector2i(6, 5)) != "마을" or scene.state.get_terrain_heal(Vector2i(6, 5)) != 6:
|
||||
failures.append("village terrain should expose Korean name and healing")
|
||||
if scene.state.get_terrain_heal(Vector2i(12, 1)) != 8:
|
||||
failures.append("castle terrain should expose stronger healing")
|
||||
var background_fill: Color = scene._terrain_fill_color(Vector2i(0, 0), "G", true)
|
||||
var fallback_fill: Color = scene._terrain_fill_color(Vector2i(0, 0), "G", false)
|
||||
if background_fill.a >= 0.20:
|
||||
@@ -3531,6 +3542,8 @@ func _check_terrain_and_unit_presentation(failures: Array[String]) -> void:
|
||||
failures.append("matching terrain should not draw edge blends")
|
||||
if scene._terrain_edge_width("W", "G") <= scene._terrain_edge_width("G", "F"):
|
||||
failures.append("water shoreline edge should be wider than grass blend")
|
||||
if scene._terrain_edge_priority("T") <= scene._terrain_edge_priority("F"):
|
||||
failures.append("village should draw above forest/grass terrain blends")
|
||||
var wasteland_fill: Color = scene._terrain_fill_color(Vector2i(0, 0), "D", true)
|
||||
if wasteland_fill.a <= background_fill.a:
|
||||
failures.append("wasteland fill should sit slightly above grass over background art")
|
||||
@@ -3584,9 +3597,9 @@ func _check_attack_motion_profiles(failures: Array[String]) -> void:
|
||||
return
|
||||
_check_attack_profile(failures, scene, "cao_cao", Vector2i(1, 3), Vector2i(2, 3), "command_strike")
|
||||
_check_attack_profile(failures, scene, "xiahou_dun", Vector2i(1, 4), Vector2i(2, 4), "cavalry_charge")
|
||||
_check_attack_profile(failures, scene, "yellow_turban_1", Vector2i(7, 2), Vector2i(6, 2), "heavy_strike")
|
||||
_check_attack_profile(failures, scene, "yellow_turban_2", Vector2i(8, 5), Vector2i(7, 5), "infantry_strike")
|
||||
_check_attack_profile(failures, scene, "yellow_turban_3", Vector2i(7, 6), Vector2i(7, 4), "arrow")
|
||||
_check_attack_profile(failures, scene, "yellow_turban_1", Vector2i(12, 1), Vector2i(11, 1), "heavy_strike")
|
||||
_check_attack_profile(failures, scene, "yellow_turban_2", Vector2i(9, 4), Vector2i(8, 4), "infantry_strike")
|
||||
_check_attack_profile(failures, scene, "yellow_turban_3", Vector2i(11, 2), Vector2i(11, 0), "arrow")
|
||||
_check_synthetic_attack_profile(failures, scene, "elite_cavalry", "cavalry_charge")
|
||||
_check_synthetic_attack_profile(failures, scene, "guard_captain", "infantry_strike")
|
||||
_check_synthetic_attack_profile(failures, scene, "marksman", "arrow", 2)
|
||||
@@ -3599,7 +3612,7 @@ func _check_attack_motion_profiles(failures: Array[String]) -> void:
|
||||
_check_skill_action_profile(failures, scene, "skill_support", "tactic_support", "order_banner")
|
||||
scene._on_unit_action_motion_requested("xiahou_dun", Vector2i(1, 4), Vector2i(2, 4), "attack")
|
||||
_check_stored_attack_motion(failures, scene, "xiahou_dun", "cavalry_charge", "melee", "attack", "charge_dust")
|
||||
scene._on_unit_action_motion_requested("yellow_turban_3", Vector2i(7, 6), Vector2i(7, 4), "attack")
|
||||
scene._on_unit_action_motion_requested("yellow_turban_3", Vector2i(11, 2), Vector2i(11, 0), "attack")
|
||||
_check_stored_attack_motion(failures, scene, "yellow_turban_3", "arrow", "ranged", "attack", "piercing_trace")
|
||||
scene._on_unit_action_motion_requested("cao_cao", Vector2i(1, 3), Vector2i(3, 3), "skill_damage")
|
||||
_check_stored_attack_motion(failures, scene, "cao_cao", "tactic_damage", "tactic", "skill_damage", "tactic_flare")
|
||||
|
||||
Reference in New Issue
Block a user