diff --git a/scripts/scenes/battle_scene.gd b/scripts/scenes/battle_scene.gd index 183b873..9c87089 100644 --- a/scripts/scenes/battle_scene.gd +++ b/scripts/scenes/battle_scene.gd @@ -89,6 +89,12 @@ const UI_DISABLED_TEXT := Color(0.48, 0.40, 0.29, 1.0) const UI_SILK_WASH := Color(0.80, 0.64, 0.37, 1.0) const UI_SILK_FIBER := Color(0.18, 0.10, 0.045, 1.0) const UI_SOOT_EDGE := Color(0.035, 0.018, 0.012, 1.0) +const UI_BONE_PAPER := Color(0.72, 0.60, 0.39, 0.995) +const UI_INK_WASH := Color(0.10, 0.065, 0.040, 1.0) +const UI_DARK_JADE := Color(0.055, 0.18, 0.13, 1.0) +const UI_JADE_EDGE := Color(0.12, 0.36, 0.25, 1.0) +const UI_SEAL_RED := Color(0.64, 0.055, 0.032, 1.0) +const UI_SEAL_RED_DARK := Color(0.28, 0.020, 0.014, 1.0) const MAP_SCROLL_FRAME_PADDING := 12.0 var state: BattleState = BattleStateScript.new() @@ -353,74 +359,74 @@ func _apply_panel_style(panel: PanelContainer, variant: String) -> void: var shadow_size := 6 match variant: "paper": - fill = Color(0.49, 0.37, 0.21, 0.992) + fill = UI_BONE_PAPER border = UI_SOOT_EDGE border_width = 5 margin = 18 shadow_size = 12 "edict": - fill = Color(0.67, 0.53, 0.31, 0.995) - border = UI_SOOT_EDGE + fill = Color(0.76, 0.63, 0.40, 0.995) + border = UI_SEAL_RED_DARK border_width = 4 margin = 14 shadow_size = 6 "seal": - fill = Color(0.42, 0.035, 0.020, 1.0) + fill = Color(0.34, 0.026, 0.016, 1.0) border = UI_OLD_BRONZE border_width = 3 margin = 9 "speaker_seal": - fill = Color(0.36, 0.030, 0.018, 1.0) - border = UI_OLD_BRONZE + fill = UI_SEAL_RED_DARK + border = UI_TARNISHED_BRONZE border_width = 3 margin = 9 "portrait": fill = UI_LACQUER_EDGE - border = UI_TARNISHED_BRONZE + border = UI_JADE_EDGE border_width = 4 margin = 3 "dialogue": fill = Color(0.052, 0.022, 0.014, 0.995) - border = UI_TARNISHED_BRONZE + border = UI_JADE_EDGE border_width = 5 margin = 16 shadow_size = 14 "speech_scroll": - fill = Color(0.69, 0.55, 0.32, 0.995) - border = UI_SOOT_EDGE + fill = Color(0.75, 0.62, 0.39, 0.995) + border = UI_INK_WASH border_width = 4 margin = 14 shadow_size = 3 "notice": - fill = Color(0.23, 0.048, 0.024, 0.98) - border = UI_CINNABAR + fill = Color(0.070, 0.020, 0.014, 0.982) + border = UI_SEAL_RED border_width = 3 margin = 9 "map": - fill = Color(0.105, 0.12, 0.075, 1.0) - border = UI_BAMBOO_DARK + fill = Color(0.062, 0.13, 0.095, 1.0) + border = UI_DARK_JADE border_width = 4 margin = 3 "compact": - fill = Color(0.105, 0.046, 0.026, 0.982) - border = UI_TARNISHED_BRONZE + fill = Color(0.052, 0.078, 0.052, 0.982) + border = UI_JADE_EDGE border_width = 3 margin = 8 shadow_size = 4 "bamboo_slips": - fill = Color(0.54, 0.40, 0.20, 0.985) - border = UI_BAMBOO_DARK + fill = Color(0.42, 0.30, 0.14, 0.985) + border = UI_INK_WASH border_width = 3 margin = 10 shadow_size = 3 "caption": - fill = Color(0.21, 0.095, 0.040, 0.98) + fill = Color(0.055, 0.16, 0.11, 0.98) border = UI_TARNISHED_BRONZE border_width = 2 margin = 5 shadow_size = 2 "result_tablet": - fill = Color(0.45, 0.34, 0.20, 0.992) + fill = Color(0.54, 0.43, 0.27, 0.992) border = UI_SOOT_EDGE border_width = 5 margin = 18 @@ -496,13 +502,13 @@ func _apply_control_font(control: Control, bold: bool = false) -> void: func _apply_button_style(button: Button, important: bool = false) -> void: if button == null: return - var normal_fill := UI_CINNABAR_DARK if important else Color(0.17, 0.068, 0.033, 0.985) - var hover_fill := Color(0.50, 0.090, 0.040, 1.0) if important else Color(0.28, 0.10, 0.045, 1.0) - var pressed_fill := Color(0.27, 0.034, 0.020, 1.0) + var normal_fill := UI_SEAL_RED_DARK if important else Color(0.045, 0.13, 0.090, 0.985) + var hover_fill := UI_SEAL_RED if important else Color(0.10, 0.24, 0.16, 1.0) + var pressed_fill := Color(0.20, 0.026, 0.018, 1.0) button.add_theme_stylebox_override("normal", _make_button_style(normal_fill, UI_TARNISHED_BRONZE, 2)) button.add_theme_stylebox_override("hover", _make_button_style(hover_fill, UI_OLD_BRONZE, 2)) button.add_theme_stylebox_override("pressed", _make_button_style(pressed_fill, UI_OLD_BRONZE, 2)) - button.add_theme_stylebox_override("focus", _make_button_style(Color(0.12, 0.25, 0.18, 0.96), UI_OLD_BRONZE, 2)) + button.add_theme_stylebox_override("focus", _make_button_style(Color(0.075, 0.23, 0.16, 0.96), UI_OLD_BRONZE, 2)) button.add_theme_stylebox_override("disabled", _make_button_style(Color(0.13, 0.09, 0.065, 0.88), UI_RICE_PAPER_DARK, 1)) button.add_theme_color_override("font_color", UI_PARCHMENT_TEXT) button.add_theme_color_override("font_hover_color", UI_PARCHMENT_TEXT) @@ -685,12 +691,12 @@ func _create_hud() -> void: top_row.add_child(campaign_status_label) restart_button = Button.new() - restart_button.text = "Re-form" + restart_button.text = "재정비" restart_button.pressed.connect(_on_restart_pressed) top_row.add_child(restart_button) new_campaign_button = Button.new() - new_campaign_button.text = "New Chronicle" + new_campaign_button.text = "새 전기" new_campaign_button.pressed.connect(_on_new_campaign_pressed) top_row.add_child(new_campaign_button) @@ -757,7 +763,7 @@ func _create_hud() -> void: selected_row.add_child(selected_label) mission_title_label = Label.new() - mission_title_label.text = "Bronze Mandate Tablet" + mission_title_label.text = "군령 목패" mission_title_label.add_theme_font_size_override("font_size", 14) _apply_label_style(mission_title_label, UI_OLD_BRONZE) side_column.add_child(mission_title_label) @@ -804,33 +810,33 @@ func _create_hud() -> void: side_column.add_child(button_row) wait_button = Button.new() - wait_button.text = "Hold" + wait_button.text = "대기" wait_button.pressed.connect(_on_wait_pressed) button_row.add_child(wait_button) tactic_button = Button.new() - tactic_button.text = "Stratagem" + tactic_button.text = "책략" tactic_button.pressed.connect(_on_tactic_pressed) button_row.add_child(tactic_button) item_button = Button.new() - item_button.text = "Supply" + item_button.text = "도구" item_button.pressed.connect(_on_item_pressed) button_row.add_child(item_button) equip_button = Button.new() - equip_button.text = "Arms" + equip_button.text = "병장" equip_button.pressed.connect(_on_equip_pressed) button_row.add_child(equip_button) threat_button = Button.new() - threat_button.text = "Enemy Lines" + threat_button.text = "적진" threat_button.toggle_mode = true threat_button.pressed.connect(_on_threat_pressed) button_row.add_child(threat_button) end_turn_button = Button.new() - end_turn_button.text = "Pass Command" + end_turn_button.text = "차례 종료" end_turn_button.pressed.connect(_on_end_turn_pressed) button_row.add_child(end_turn_button) @@ -840,7 +846,7 @@ func _create_hud() -> void: side_column.add_child(tactic_menu) var tactic_title := Label.new() - tactic_title.text = "Stratagems" + tactic_title.text = "책략" _apply_label_style(tactic_title, UI_OLD_BRONZE, 14) tactic_menu.add_child(tactic_title) @@ -854,7 +860,7 @@ func _create_hud() -> void: side_column.add_child(item_menu) var item_title := Label.new() - item_title.text = "Supplies" + item_title.text = "도구" _apply_label_style(item_title, UI_OLD_BRONZE, 14) item_menu.add_child(item_title) @@ -868,7 +874,7 @@ func _create_hud() -> void: side_column.add_child(equip_menu) var equip_title := Label.new() - equip_title.text = "Arms Ledger" + equip_title.text = "병장 장부" _apply_label_style(equip_title, UI_OLD_BRONZE, 14) equip_menu.add_child(equip_title) @@ -889,7 +895,7 @@ func _create_hud() -> void: post_move_menu.add_child(post_move_column) post_move_title_label = Label.new() - post_move_title_label.text = "Issue Order" + post_move_title_label.text = "군령 선택" post_move_title_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER _apply_label_style(post_move_title_label, UI_OLD_BRONZE, 14) post_move_column.add_child(post_move_title_label) @@ -902,31 +908,31 @@ func _create_hud() -> void: post_move_attack_button = Button.new() post_move_attack_button.text = "Strike" - post_move_attack_button.tooltip_text = "Mark an enemy from this unit's current position." + post_move_attack_button.tooltip_text = "현재 자리에서 공격할 적을 지목합니다." post_move_attack_button.pressed.connect(_on_post_move_attack_pressed) post_move_grid.add_child(post_move_attack_button) post_move_tactic_button = Button.new() - post_move_tactic_button.text = "Stratagem" - post_move_tactic_button.tooltip_text = "Open stratagems after this move." + post_move_tactic_button.text = "책략" + post_move_tactic_button.tooltip_text = "이동 후 책략 목록을 펼칩니다." post_move_tactic_button.pressed.connect(_on_post_move_tactic_pressed) post_move_grid.add_child(post_move_tactic_button) post_move_item_button = Button.new() - post_move_item_button.text = "Supply" - post_move_item_button.tooltip_text = "Open field supplies after this move." + post_move_item_button.text = "도구" + post_move_item_button.tooltip_text = "이동 후 도구 목록을 펼칩니다." post_move_item_button.pressed.connect(_on_post_move_item_pressed) post_move_grid.add_child(post_move_item_button) post_move_wait_button = Button.new() - post_move_wait_button.text = "Hold" - post_move_wait_button.tooltip_text = "Commit this move and seal the unit's order." + post_move_wait_button.text = "대기" + post_move_wait_button.tooltip_text = "이동을 확정하고 부대의 군령을 봉인합니다." post_move_wait_button.pressed.connect(_on_post_move_wait_pressed) post_move_grid.add_child(post_move_wait_button) post_move_cancel_button = Button.new() - post_move_cancel_button.text = "Recall Step" - post_move_cancel_button.tooltip_text = "Return to the starting cell." + post_move_cancel_button.text = "발걸음 거두기" + post_move_cancel_button.tooltip_text = "처음 있던 칸으로 돌아갑니다." post_move_cancel_button.pressed.connect(_on_post_move_cancel_pressed) post_move_column.add_child(post_move_cancel_button) @@ -969,14 +975,14 @@ func _create_hud() -> void: picker_column.add_child(picker_button_row) post_move_picker_back_button = Button.new() - post_move_picker_back_button.text = "Return" - post_move_picker_back_button.tooltip_text = "Return to the order menu." + post_move_picker_back_button.text = "돌아가기" + post_move_picker_back_button.tooltip_text = "군령 선택으로 돌아갑니다." post_move_picker_back_button.pressed.connect(_on_post_move_picker_back_pressed) picker_button_row.add_child(post_move_picker_back_button) post_move_picker_cancel_move_button = Button.new() - post_move_picker_cancel_move_button.text = "Recall Step" - post_move_picker_cancel_move_button.tooltip_text = "Right-click also recalls the banner to its starting ground." + post_move_picker_cancel_move_button.text = "발걸음 거두기" + post_move_picker_cancel_move_button.tooltip_text = "우클릭으로도 원래 자리로 되돌릴 수 있습니다." post_move_picker_cancel_move_button.pressed.connect(_on_post_move_picker_cancel_move_pressed) picker_button_row.add_child(post_move_picker_cancel_move_button) @@ -993,7 +999,7 @@ func _create_hud() -> void: targeting_hint_panel.add_child(targeting_column) targeting_hint_title_label = Label.new() - targeting_hint_title_label.text = "Mark Foe" + targeting_hint_title_label.text = "적장 지목" targeting_hint_title_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER _apply_label_style(targeting_hint_title_label, UI_OLD_BRONZE, 14) targeting_column.add_child(targeting_hint_title_label) @@ -1009,14 +1015,14 @@ func _create_hud() -> void: targeting_column.add_child(targeting_button_row) targeting_hint_back_button = Button.new() - targeting_hint_back_button.text = "Return" - targeting_hint_back_button.tooltip_text = "Return to the order menu." + targeting_hint_back_button.text = "돌아가기" + targeting_hint_back_button.tooltip_text = "군령 선택으로 돌아갑니다." targeting_hint_back_button.pressed.connect(_on_targeting_back_pressed) targeting_button_row.add_child(targeting_hint_back_button) targeting_hint_cancel_move_button = Button.new() - targeting_hint_cancel_move_button.text = "Recall Step" - targeting_hint_cancel_move_button.tooltip_text = "Recall the banner to its starting ground." + targeting_hint_cancel_move_button.text = "발걸음 거두기" + targeting_hint_cancel_move_button.tooltip_text = "부대를 원래 자리로 되돌립니다." targeting_hint_cancel_move_button.pressed.connect(_on_targeting_cancel_move_pressed) targeting_button_row.add_child(targeting_hint_cancel_move_button) @@ -1062,7 +1068,7 @@ func _create_hud() -> void: briefing_column.add_child(briefing_location_label) briefing_column.add_child(_make_scroll_rod(680, 4)) - briefing_column.add_child(_make_section_caption("Imperial Bronze War Edict", 680)) + briefing_column.add_child(_make_section_caption("승패 조서", 680)) briefing_objective_panel = PanelContainer.new() briefing_objective_panel.custom_minimum_size = Vector2(680, 92) @@ -1082,7 +1088,7 @@ func _create_hud() -> void: _apply_label_style(briefing_objective_label, UI_AGED_INK, 15) briefing_objective_row.add_child(briefing_objective_label) - briefing_column.add_child(_make_section_caption("Silk Map and Camp Ledger", 680)) + briefing_column.add_child(_make_section_caption("비단 전장도와 군막 장부", 680)) briefing_camp_overview_row = HBoxContainer.new() briefing_camp_overview_row.custom_minimum_size = Vector2(680, 84) @@ -1137,37 +1143,37 @@ func _create_hud() -> void: briefing_column.add_child(prep_button_row) chapter_button = Button.new() - chapter_button.text = "Chronicle" + chapter_button.text = "군기록" chapter_button.pressed.connect(_on_chapter_pressed) prep_button_row.add_child(chapter_button) shop_button = Button.new() - shop_button.text = "Sutler" + shop_button.text = "군상" shop_button.pressed.connect(_on_shop_pressed) prep_button_row.add_child(shop_button) talk_button = Button.new() - talk_button.text = "War Council" + talk_button.text = "군막 회의" talk_button.pressed.connect(_on_talk_pressed) prep_button_row.add_child(talk_button) armory_button = Button.new() - armory_button.text = "Arsenal" + armory_button.text = "병장고" armory_button.pressed.connect(_on_armory_pressed) prep_button_row.add_child(armory_button) roster_button = Button.new() - roster_button.text = "Muster" + roster_button.text = "출진 명부" roster_button.pressed.connect(_on_roster_pressed) prep_button_row.add_child(roster_button) formation_button = Button.new() - formation_button.text = "Battle Array" + formation_button.text = "진형 배치" formation_button.pressed.connect(_on_formation_pressed) prep_button_row.add_child(formation_button) save_button = Button.new() - save_button.text = "War Record" + save_button.text = "전기록" save_button.pressed.connect(_on_save_pressed) prep_button_row.add_child(save_button) @@ -1207,12 +1213,12 @@ func _create_hud() -> void: shop_menu.add_child(shop_mode_row) shop_buy_button = Button.new() - shop_buy_button.text = "Acquire" + shop_buy_button.text = "매입" shop_buy_button.pressed.connect(_on_shop_buy_mode_pressed) shop_mode_row.add_child(shop_buy_button) shop_sell_button = Button.new() - shop_sell_button.text = "Offer" + shop_sell_button.text = "매각" shop_sell_button.pressed.connect(_on_shop_sell_mode_pressed) shop_mode_row.add_child(shop_sell_button) @@ -1321,17 +1327,17 @@ func _create_hud() -> void: save_menu.add_child(save_action_row) manual_save_button = Button.new() - manual_save_button.text = "Record Seal" + manual_save_button.text = "기록 봉인" manual_save_button.pressed.connect(_on_manual_save_pressed) save_action_row.add_child(manual_save_button) manual_load_button = Button.new() - manual_load_button.text = "Restore Seal" + manual_load_button.text = "봉인 해제" manual_load_button.pressed.connect(_on_manual_load_pressed) save_action_row.add_child(manual_load_button) var begin_button := Button.new() - begin_button.text = "Unroll War Map" + begin_button.text = "전장도 펼치기" begin_button.pressed.connect(_on_begin_battle_pressed) briefing_column.add_child(begin_button) @@ -1423,14 +1429,14 @@ func _create_hud() -> void: dialogue_control_row.add_child(dialogue_progress_label) dialogue_previous_button = Button.new() - dialogue_previous_button.text = "Earlier Slip" + dialogue_previous_button.text = "이전 죽간" dialogue_previous_button.disabled = true dialogue_previous_button.custom_minimum_size = Vector2(88, 32) dialogue_previous_button.pressed.connect(_retreat_dialogue) dialogue_control_row.add_child(dialogue_previous_button) dialogue_continue_button = Button.new() - dialogue_continue_button.text = "Next Slip" + dialogue_continue_button.text = "다음 죽간" dialogue_continue_button.custom_minimum_size = Vector2(120, 32) dialogue_continue_button.pressed.connect(_advance_dialogue) dialogue_control_row.add_child(dialogue_continue_button) @@ -1466,12 +1472,12 @@ func _create_hud() -> void: result_column.add_child(result_choice_list) result_restart_button = Button.new() - result_restart_button.text = "Re-form Army" + result_restart_button.text = "군세 재정비" result_restart_button.pressed.connect(_on_restart_pressed) result_column.add_child(result_restart_button) next_battle_button = Button.new() - next_battle_button.text = "March On" + next_battle_button.text = "다음 전장으로" next_battle_button.pressed.connect(_on_next_battle_pressed) result_column.add_child(next_battle_button) @@ -2259,11 +2265,37 @@ func _cell_noise(cell: Vector2i, salt: int) -> float: return fposmod(sin(float(cell.x * 91 + cell.y * 193 + salt * 53)) * 43758.5453, 1.0) +func _draw_objective_seal_marker(rect: Rect2) -> void: + var seal_rect := rect.grow(-9.0) + var pole_x := rect.position.x + rect.size.x * 0.24 + var top_y := rect.position.y + 9.0 + var bottom_y := rect.end.y - 8.0 + draw_rect(rect, Color(UI_SEAL_RED.r, UI_SEAL_RED.g, UI_SEAL_RED.b, 0.16)) + draw_line(Vector2(pole_x, top_y), Vector2(pole_x, bottom_y), Color(0.12, 0.065, 0.030, 0.78), 2.2) + var banner_points := PackedVector2Array([ + Vector2(pole_x + 1.0, top_y + 2.0), + Vector2(rect.end.x - 10.0, top_y + 8.0), + Vector2(rect.end.x - 16.0, top_y + 26.0), + Vector2(pole_x + 1.0, top_y + 24.0) + ]) + var banner_outline := PackedVector2Array([ + banner_points[0], + banner_points[1], + banner_points[2], + banner_points[3], + banner_points[0] + ]) + draw_colored_polygon(banner_points, Color(UI_SEAL_RED.r, UI_SEAL_RED.g, UI_SEAL_RED.b, 0.54)) + draw_polyline(banner_outline, Color(UI_OLD_BRONZE.r, UI_OLD_BRONZE.g, UI_OLD_BRONZE.b, 0.64), 1.6) + draw_rect(seal_rect, Color(UI_SEAL_RED.r, UI_SEAL_RED.g, UI_SEAL_RED.b, 0.24)) + draw_rect(seal_rect.grow(-5.0), Color(UI_OLD_BRONZE.r, UI_OLD_BRONZE.g, UI_OLD_BRONZE.b, 0.76), false, 1.8) + draw_line(seal_rect.position + Vector2(8, seal_rect.size.y * 0.5), seal_rect.end - Vector2(8, seal_rect.size.y * 0.5), Color(UI_OLD_BRONZE.r, UI_OLD_BRONZE.g, UI_OLD_BRONZE.b, 0.42), 1.2) + draw_line(seal_rect.position + Vector2(seal_rect.size.x * 0.5, 8), seal_rect.end - Vector2(seal_rect.size.x * 0.5, 8), Color(UI_OLD_BRONZE.r, UI_OLD_BRONZE.g, UI_OLD_BRONZE.b, 0.34), 1.2) + + func _draw_overlays() -> void: for cell in state.get_objective_cells(): - var objective_rect := _rect_for_cell(cell) - draw_rect(objective_rect, OBJECTIVE_OVERLAY_COLOR) - draw_rect(objective_rect.grow(-5.0), Color(1.0, 0.88, 0.30, 0.82), false, 2.0) + _draw_objective_seal_marker(_rect_for_cell(cell)) for cell in threat_cells: var threat_rect := _rect_for_cell(cell) @@ -3239,12 +3271,12 @@ func _format_objective_hud_text() -> String: var lines := [] var victory := String(state.objectives.get("victory", "Defeat all enemies.")) if not victory.is_empty(): - lines.append("Bronze Edict: %s" % victory) + lines.append("승리 조서: %s" % victory) var defeat := String(state.objectives.get("defeat", "")) if not defeat.is_empty(): - lines.append("Black Omen: %s" % defeat) + lines.append("패배 흉조: %s" % defeat) if lines.is_empty(): - return "Bronze Edict" + return "승리 조서" return _join_strings(lines, "\n") @@ -3297,27 +3329,27 @@ func _format_unit_focus_text(unit: Dictionary, prefix: String) -> String: func _unit_focus_prefix_text(prefix: String) -> String: if prefix == "Selected": - return "Banner" + return "군기" if prefix == "Hover": - return "Sighted" + return "관측" return prefix func _unit_action_status_text(unit: Dictionary) -> String: var unit_id := str(unit.get("id", "")) if unit_id.is_empty(): - return "Command: Sealed" + return "군령: 봉인" var team := str(unit.get("team", "")) if team != BattleState.TEAM_PLAYER: - return "Command: Enemy banner" + return "군령: 적군 군기" if not bool(unit.get("controllable", true)): - return "Command: Guarded escort" + return "군령: 호위 대상" if not bool(unit.get("alive", true)) or not bool(unit.get("deployed", true)): - return "Command: Sealed" + return "군령: 봉인" if bool(unit.get("acted", false)): - return "Command: Sealed" + return "군령: 봉인" if not state.can_player_act(): - return "Command: Awaiting phase" + return "군령: 차례 대기" var actions: Array[String] = [] if not bool(unit.get("moved", false)) and not state.get_movement_range(unit_id).is_empty(): actions.append("March") @@ -3325,14 +3357,14 @@ func _unit_action_status_text(unit: Dictionary) -> String: actions.append("Strike") var skill_id := state.get_first_usable_skill_id(unit_id) if not skill_id.is_empty() and not state.get_skill_cells(unit_id, skill_id).is_empty(): - actions.append("Stratagem") + actions.append("책략") if _unit_has_usable_item_target(unit_id): - actions.append("Supply") + actions.append("도구") if not bool(unit.get("moved", false)): - actions.append("Arms") - actions.append("Hold") + actions.append("병장") + actions.append("대기") var suffix := " (marched)" if bool(unit.get("moved", false)) else "" - return "Command: %s%s" % [_join_strings(actions, ", "), suffix] + return "군령: %s%s" % [_join_strings(actions, ", "), suffix] func _unit_has_usable_item_target(unit_id: String) -> bool: @@ -3383,7 +3415,7 @@ func _unit_role_text(unit: Dictionary) -> String: if class_id.contains("archer") or class_id.contains("marksman"): return "Bow pressure" if class_id.contains("strategist") or class_id.contains("advisor"): - return "Stratagem counsel" + return "책략 참모" if class_id.contains("hero") or class_id.contains("commander"): return "Command authority" if class_id.contains("warrior") or class_id.contains("champion") or class_id.contains("bandit"): @@ -3415,24 +3447,24 @@ func _format_mission_panel_text() -> String: var lines := [] var victory := str(state.objectives.get("victory", "")) if not victory.is_empty(): - lines.append("Bronze Edict:") + lines.append("승리 조서") lines.append(" %s" % victory) var defeat := str(state.objectives.get("defeat", "")) if not defeat.is_empty(): - lines.append("Black Omen:") + lines.append("패배 흉조") lines.append(" %s" % defeat) var progress_lines := state.get_objective_progress_lines(false, false) if not progress_lines.is_empty(): - lines.append("Bamboo Register:") + lines.append("전공 죽간") for progress_line in progress_lines: lines.append(" %s" % progress_line) var risk_lines := state.get_defeat_progress_lines() if not risk_lines.is_empty(): - lines.append("Ominous Signs:") + lines.append("흉조 징후") for risk_line in risk_lines: lines.append(" %s" % risk_line) if lines.is_empty(): - return "No edict has been sealed." + return "아직 봉인된 조서가 없습니다." return _join_strings(lines, "\n") @@ -3479,7 +3511,7 @@ func _update_cell_info() -> void: summary.get("avoid", 0) ] if state.get_objective_cells().has(cell): - text += "\nEdict marker" + text += "\n조서 표식" if show_threat_overlay: var threat_names := state.get_threatening_unit_names(cell, BattleState.TEAM_ENEMY) if not threat_names.is_empty(): @@ -3488,7 +3520,7 @@ func _update_cell_info() -> void: var unit: Dictionary = summary["unit"] if not unit.is_empty(): var control_label := " Protected" if not bool(unit.get("controllable", true)) else "" - text += "\nBanner: %s%s %s Lv.%d\n%s %s Troops %d/%d Qi %d/%d\nArms: %s" % [ + text += "\n군기: %s%s %s Lv.%d\n%s %s 병력 %d/%d 기력 %d/%d\n병장: %s" % [ unit["name"], control_label, str(unit["team"]).capitalize(), @@ -3510,7 +3542,7 @@ func _update_cell_info() -> void: text += "\nWeapon threat: %s" % _format_physical_threat_preview_text(physical_threats, 3) var skill_threats := state.get_skill_threat_previews(cell, BattleState.TEAM_ENEMY) if not skill_threats.is_empty(): - text += "\nStratagem threat: %s" % _format_skill_threat_preview_text(skill_threats, 3) + text += "\n책략 위협: %s" % _format_skill_threat_preview_text(skill_threats, 3) cell_info_label.text = text @@ -3807,7 +3839,7 @@ func _update_result_panel() -> void: result_restart_button.visible = false if next_battle_button != null: next_battle_button.visible = false - result_label.text = "%s Chronicle Complete\nAll current scrolls cleared.\nWar Chest %dG\nBegin a new chronicle to replay." % [ + result_label.text = "%s 전기 완결\n현 병서는 모두 정리되었습니다.\n군자금 %dG\n새 전기를 열어 다시 진행합니다." % [ campaign_state.campaign_title, campaign_state.gold ] @@ -3847,14 +3879,14 @@ func _update_result_panel() -> void: func _format_victory_result_text() -> String: - return "Bronze Victory Proclamation\nMandate Fulfilled: %s\n%s" % [ + return "승전 조서\n천명 이행: %s\n%s" % [ state.objectives.get("victory", ""), _format_battle_result_summary() ] func _format_defeat_result_text() -> String: - return "Defeat Memorial Tablet\nOmen Fulfilled: %s" % state.objectives.get("defeat", "") + return "패전 비문\n흉조 성취: %s" % state.objectives.get("defeat", "") func _on_state_changed() -> void: @@ -3877,18 +3909,18 @@ func _on_log_added(message: String) -> void: func _format_log_entry_text(message: String) -> String: if message.begins_with("Objective updated:"): - return "Edict amended:%s" % message.substr("Objective updated:".length()) + return "조서 개정:%s" % message.substr("Objective updated:".length()) if message.begins_with("Defeat condition updated:"): - return "Omen amended:%s" % message.substr("Defeat condition updated:".length()) + return "흉조 개정:%s" % message.substr("Defeat condition updated:".length()) return message func _on_objective_updated(victory: String, defeat: String) -> void: - var notice_lines := ["New Sealed Edict"] + var notice_lines := ["새 조서 봉인"] if not victory.is_empty(): - notice_lines.append("Bronze Edict: %s" % victory) + notice_lines.append("승리 조서: %s" % victory) if not defeat.is_empty(): - notice_lines.append("Black Omen: %s" % defeat) + notice_lines.append("패배 흉조: %s" % defeat) if objective_notice_label != null: objective_notice_label.text = "\n".join(notice_lines) if objective_notice_panel != null: @@ -4232,10 +4264,10 @@ func _render_dialogue_line() -> void: func _update_dialogue_controls() -> void: if dialogue_progress_label != null: - dialogue_progress_label.text = "Bamboo slip %d / %d" % [active_dialogue_index + 1, active_dialogue_lines.size()] + dialogue_progress_label.text = "죽간 %d / %d" % [active_dialogue_index + 1, active_dialogue_lines.size()] if dialogue_previous_button != null: dialogue_previous_button.disabled = active_dialogue_index <= 0 - dialogue_continue_button.text = "Seal Scroll" if active_dialogue_index >= active_dialogue_lines.size() - 1 else "Next Slip" + dialogue_continue_button.text = "두루마리 봉인" if active_dialogue_index >= active_dialogue_lines.size() - 1 else "다음 죽간" func _apply_dialogue_side(side: String) -> void: @@ -4571,12 +4603,12 @@ func _format_briefing_title(briefing: Dictionary) -> String: var chapter_position := campaign_state.get_chapter_position_for_scenario(active_scenario_id) var chapter_count := campaign_state.get_chapter_count() if chapter_position > 0 and chapter_count > 0: - return "Scroll %02d/%02d - %s" % [chapter_position, chapter_count, chapter_title] + return "병서 %02d/%02d - %s" % [chapter_position, chapter_count, chapter_title] return chapter_title var position := campaign_state.get_scenario_position(active_scenario_id) var count := campaign_state.get_scenario_count() if position > 0 and count > 0: - return "Field %02d/%02d - %s" % [position, count, title] + return "전장 %02d/%02d - %s" % [position, count, title] return title @@ -4602,7 +4634,7 @@ func _format_briefing_chapter_battle_text(briefing: Dictionary) -> String: var position := campaign_state.get_scenario_position_in_chapter(active_scenario_id) var count := campaign_state.get_scenario_count_in_chapter(active_scenario_id) if position > 0 and count > 0: - return "Field %02d/%02d: %s" % [position, count, title] + return "전장 %02d/%02d: %s" % [position, count, title] return title @@ -4610,33 +4642,33 @@ func _format_briefing_objectives() -> String: var text := "" var victory := str(state.objectives.get("victory", "")) if not victory.is_empty(): - text = "Imperial Victory Edict: %s" % victory + text = "승리 조서: %s" % victory var defeat := str(state.objectives.get("defeat", "")) if not defeat.is_empty(): if not text.is_empty(): text += "\n" - text += "Defeat Omen: %s" % defeat + text += "패배 흉조: %s" % defeat var progress_lines := state.get_objective_progress_lines(false, false) if not progress_lines.is_empty(): if not text.is_empty(): text += "\n" - text += "Bamboo Battle Register: %s" % _join_strings(progress_lines, ", ") + text += "전공 죽간: %s" % _join_strings(progress_lines, ", ") var risk_lines := state.get_defeat_progress_lines() if not risk_lines.is_empty(): if not text.is_empty(): text += "\n" - text += "Ominous Signs: %s" % _join_strings(risk_lines, ", ") + text += "흉조 징후: %s" % _join_strings(risk_lines, ", ") var rewards_text := _format_briefing_rewards() if not rewards_text.is_empty(): if not text.is_empty(): text += "\n" - text += "Spoils Seal: %s" % rewards_text + text += "전리품 봉인: %s" % rewards_text return text func _format_briefing_rewards() -> String: if campaign_state.is_scenario_completed(active_scenario_id): - return "already claimed" + return "이미 수령" var rewards := state.get_rewards() var parts := [] var gold: int = maxi(0, int(rewards.get("gold", 0))) @@ -4649,10 +4681,10 @@ func _format_briefing_rewards() -> String: parts.append(item_text) var joined_text := _format_officer_id_list(rewards.get("join_officers", [])) if not joined_text.is_empty(): - parts.append("Join %s" % joined_text) + parts.append("합류 %s" % joined_text) var left_text := _format_officer_id_list(rewards.get("leave_officers", [])) if not left_text.is_empty(): - parts.append("Leave %s" % left_text) + parts.append("이탈 %s" % left_text) return _join_strings(parts, ", ") @@ -4669,7 +4701,7 @@ func _update_briefing_camp_overview(briefing: Dictionary, prep_locked: bool) -> briefing_camp_overview_texture.texture = texture briefing_camp_overview_texture.visible = has_texture if briefing_camp_overview_fallback_label != null: - briefing_camp_overview_fallback_label.text = "Silk War Map" + briefing_camp_overview_fallback_label.text = "비단 전장도" briefing_camp_overview_fallback_label.visible = not has_texture @@ -4678,7 +4710,7 @@ func _format_briefing_camp_overview_text(briefing: Dictionary, prep_locked: bool var location := str(briefing.get("location", "")).strip_edges() if not location.is_empty(): parts.append(location) - parts.append("War Chest %dG" % campaign_state.gold) + parts.append("군자금 %dG" % campaign_state.gold) var talk_text := _format_briefing_talk_overview_text() if not talk_text.is_empty(): parts.append(talk_text) @@ -4692,10 +4724,10 @@ func _format_briefing_camp_overview_text(briefing: Dictionary, prep_locked: bool if not formation_text.is_empty(): parts.append(formation_text) if not state.get_controllable_player_units().is_empty(): - parts.append("Armory stocked") + parts.append("병장고 비축") if prep_locked: - parts.append("Replay scroll sealed") - return _join_strings(parts, " - ") + parts.append("회상 두루마리 봉인") + return _join_strings(parts, " | ") func _format_briefing_talk_overview_text() -> String: @@ -4705,11 +4737,11 @@ func _format_briefing_talk_overview_text() -> String: var supply_counts := _camp_conversation_supply_counts(conversations) var ready := int(supply_counts.get("ready", 0)) var claimed := int(supply_counts.get("claimed", 0)) - var parts := ["War Council %d" % conversations.size()] + var parts := ["군막 회의 %d" % conversations.size()] if ready > 0: - parts.append("%d supply" % ready) + parts.append("보급 %d" % ready) if claimed > 0: - parts.append("%d claimed" % claimed) + parts.append("수령 %d" % claimed) return _join_strings(parts, ", ") @@ -4719,8 +4751,8 @@ func _format_briefing_shop_overview_text() -> String: if buy_count <= 0 and sell_count <= 0: return "" if sell_count > 0: - return "Sutler %d goods, %d sale" % [buy_count, sell_count] - return "Sutler %d goods" % buy_count + return "군상 물품 %d, 매각 %d" % [buy_count, sell_count] + return "군상 물품 %d" % buy_count func _format_briefing_roster_overview_text() -> String: @@ -4729,15 +4761,15 @@ func _format_briefing_roster_overview_text() -> String: var deployed_count := state.get_deployed_player_count() var max_units := state.get_deployment_max_units() if max_units > 0: - return "Muster Roll %d/%d" % [deployed_count, max_units] - return "Muster Roll %d" % deployed_count + return "출진 명부 %d/%d" % [deployed_count, max_units] + return "출진 명부 %d" % deployed_count func _format_briefing_formation_overview_text() -> String: var formation_count := state.get_formation_cells().size() if formation_count <= 0: return "" - return "Battle Array %d tiles" % formation_count + return "진형 배치 %d칸" % formation_count func _camp_conversation_supply_counts(conversations: Array) -> Dictionary: @@ -5120,9 +5152,9 @@ func _camp_conversation_entries() -> Array: "id": "camp_dialogue", "group": "topic", "officer_id": "", - "label": "War Council", + "label": "군막 회의", "speaker": "", - "summary": "Review the immediate situation.", + "summary": "눈앞의 정세를 살핍니다.", "lines": lines }] return [] @@ -5249,7 +5281,7 @@ func _format_camp_conversation_effects_text(conversation: Dictionary) -> String: continue var count := maxi(1, int(effect.get("count", 1))) var count_text := "" if count == 1 else " x%d" % count - parts.append("Supply %s%s" % [str(item.get("name", item_id)), count_text]) + parts.append("보급 %s%s" % [str(item.get("name", item_id)), count_text]) if parts.is_empty(): return "" var conversation_id := str(conversation.get("id", "")) @@ -5429,7 +5461,7 @@ func _format_current_checkpoint_text() -> String: var title := campaign_state.get_scenario_title(campaign_state.current_scenario_id) if title.is_empty(): title = campaign_state.get_scenario_title(campaign_state.get_start_scenario_id()) - return "Current Seal: %s - %d/%d sealed - War Chest %dG" % [ + return "현재 봉인: %s - %d/%d 봉인 - 군자금 %dG" % [ title, campaign_state.completed_scenarios.size(), campaign_state.get_scenario_count(), @@ -5440,12 +5472,12 @@ func _format_current_checkpoint_text() -> String: func _format_manual_checkpoint_text() -> String: var summary := campaign_state.get_manual_save_summary() if summary.is_empty(): - return "Manual Seal: empty" + return "수동 봉인: 비어 있음" var title := str(summary.get("current_scenario_title", "")) if title.is_empty(): title = str(summary.get("current_scenario_id", "Unknown")) - var pending_suffix := " - council pending" if bool(summary.get("pending_choice", false)) else "" - return "Manual Seal: %s - %d/%d sealed - War Chest %dG%s" % [ + var pending_suffix := " - 회의 미결" if bool(summary.get("pending_choice", false)) else "" + return "수동 봉인: %s - %d/%d 봉인 - 군자금 %dG%s" % [ title, int(summary.get("completed_count", 0)), int(summary.get("total_count", 0)), @@ -5713,14 +5745,14 @@ func _rebuild_armory_menu() -> void: var equipment_label := Label.new() equipment_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART - equipment_label.text = "Arms Held: %s" % _format_unit_equipment(selected) + equipment_label.text = "소지 병장: %s" % _format_unit_equipment(selected) _apply_label_style(equipment_label, UI_AGED_INK) armory_list.add_child(equipment_label) var equipped_slots := state.get_equipped_equipment_slots(armory_unit_id) if not equipped_slots.is_empty(): var unequip_title := Label.new() - unequip_title.text = "Remove Arms" + unequip_title.text = "병장 해제" _apply_label_style(unequip_title, UI_CINNABAR, 14) armory_list.add_child(unequip_title) var equipment := state.get_equipment_snapshot(armory_unit_id) @@ -5831,8 +5863,8 @@ func _rebuild_shop_menu() -> void: return _clear_shop_list() if shop_status_label != null: - var mode_text := "Offer" if shop_sell_mode else "Acquire" - shop_status_label.text = "%s - War Chest %dG - %s" % [ + var mode_text := "매각" if shop_sell_mode else "매입" + shop_status_label.text = "%s - 군자금 %dG - %s" % [ mode_text, campaign_state.gold, _format_inventory_status_text() @@ -6271,7 +6303,7 @@ func _format_post_battle_choice_text(choice: Dictionary) -> String: else: text = "%s - %s" % [label, description] if not reward_text.is_empty(): - text += "\nSpoils: %s" % reward_text + text += "\n전리품: %s" % reward_text return text @@ -6286,10 +6318,10 @@ func _format_post_battle_choice_reward_text(choice: Dictionary) -> String: parts.append(_format_reward_items(items)) var joined_text := _format_officer_id_list(choice.get("join_officers", [])) if not joined_text.is_empty(): - parts.append("Join %s" % joined_text) + parts.append("합류 %s" % joined_text) var left_text := _format_officer_id_list(choice.get("leave_officers", [])) if not left_text.is_empty(): - parts.append("Leave %s" % left_text) + parts.append("이탈 %s" % left_text) return _join_strings(parts, ", ") @@ -6348,22 +6380,22 @@ func _format_battle_result_summary() -> String: return "" if battle_result_summary.get("pending_choice", false): var pending_next := str(battle_result_summary.get("next_scenario_title", "")) - var pending_text := "Chronicle\n Sealed\nCouncil\n Select a response." + var pending_text := "전기\n 봉인됨\n군막\n 응답을 고르십시오." if not pending_next.is_empty(): - pending_text += "\nNext March\n %s" % pending_next + pending_text += "\n다음 행군\n %s" % pending_next return pending_text if battle_result_summary.get("already_completed", false): - var already_saved := "Chronicle unchanged." if battle_result_summary.get("saved", false) else "Chronicle replay failed." + var already_saved := "전기는 변하지 않았습니다." if battle_result_summary.get("saved", false) else "전기 회상에 실패했습니다." var already_next := str(battle_result_summary.get("next_scenario_title", "")) var replay_lines := [ - "Spoils\n Already claimed", - "Chronicle\n %s" % already_saved + "전리품\n 이미 수령", + "전기\n %s" % already_saved ] if not already_next.is_empty(): - replay_lines.append("Next March\n %s" % already_next) + replay_lines.append("다음 행군\n %s" % already_next) var replay_preview := _format_next_camp_preview_text(str(battle_result_summary.get("next_scenario_id", ""))) if not replay_preview.is_empty(): - replay_lines.append("Next Encampment\n %s" % replay_preview) + replay_lines.append("다음 군막\n %s" % replay_preview) return _join_strings(replay_lines, "\n") var items: Array = battle_result_summary.get("items", []) @@ -6372,45 +6404,45 @@ func _format_battle_result_summary() -> String: if bool(battle_result_summary.get("rewards_applied", false)): var gold_reward := int(battle_result_summary.get("gold", 0)) if gold_reward > 0: - reward_lines.append("Gold +%d" % gold_reward) + reward_lines.append("군자금 +%d" % gold_reward) if item_text != "none": - reward_lines.append("Goods: %s" % item_text) + reward_lines.append("물자: %s" % item_text) else: - reward_lines.append("Not recorded") + reward_lines.append("아직 기록되지 않음") var roster_lines := [] var joined_officers: Array = battle_result_summary.get("joined_officers", []) if not joined_officers.is_empty(): - roster_lines.append("Joined: %s" % _format_officer_id_list(joined_officers)) + roster_lines.append("합류: %s" % _format_officer_id_list(joined_officers)) var left_officers: Array = battle_result_summary.get("left_officers", []) if not left_officers.is_empty(): - roster_lines.append("Left: %s" % _format_officer_id_list(left_officers)) + roster_lines.append("이탈: %s" % _format_officer_id_list(left_officers)) var sections := [ - "Spoils\n %s" % _join_strings(reward_lines, "\n ") + "전리품\n %s" % _join_strings(reward_lines, "\n ") ] if not roster_lines.is_empty(): - sections.append("Muster\n %s" % _join_strings(roster_lines, "\n ")) + sections.append("명부\n %s" % _join_strings(roster_lines, "\n ")) var progression_text := _format_progression_events(battle_result_summary.get("progression_events", [])) if not progression_text.is_empty(): - sections.append("Merit\n %s" % progression_text) - var saved_text := "Chronicle sealed." if battle_result_summary.get("saved", false) else "Chronicle seal failed." - var next_text := "Chronicle complete." + sections.append("전공\n %s" % progression_text) + var saved_text := "전기가 봉인되었습니다." if battle_result_summary.get("saved", false) else "전기 봉인 실패." + var next_text := "전기 완결." var next_title := str(battle_result_summary.get("next_scenario_title", "")) if not next_title.is_empty(): - next_text = "Next March: %s" % next_title - sections.append("Chronicle\n War Chest: %dG\n %s\n %s" % [ + next_text = "다음 행군: %s" % next_title + sections.append("전기\n 군자금: %dG\n %s\n %s" % [ campaign_state.gold, saved_text, next_text ]) if not bool(battle_result_summary.get("choice_applied", true)): - sections.append("Council\n Select a response.") + sections.append("군막\n 응답을 고르십시오.") elif not str(battle_result_summary.get("choice_label", "")).is_empty(): - sections.append("Council\n %s" % str(battle_result_summary.get("choice_label", ""))) + sections.append("군막\n %s" % str(battle_result_summary.get("choice_label", ""))) var next_preview := _format_next_camp_preview_text(str(battle_result_summary.get("next_scenario_id", ""))) if not next_preview.is_empty() and bool(battle_result_summary.get("saved", false)): - sections.append("Next Encampment\n %s" % next_preview) + sections.append("다음 군막\n %s" % next_preview) return _join_strings(sections, "\n") @@ -6447,18 +6479,18 @@ func _format_next_camp_preview_text(next_scenario_id: String) -> String: parts.append(location) var talk_count := _briefing_camp_conversation_count(briefing) if talk_count > 0: - parts.append("War Council %d" % talk_count) + parts.append("군막 회의 %d" % talk_count) var shop_count := preview_state.get_shop_item_ids().size() if shop_count > 0: - parts.append("Sutler %d goods" % shop_count) + parts.append("군상 물품 %d" % shop_count) if preview_state.has_deployment_roster(): - parts.append("Muster Roll %d/%d" % [ + parts.append("출진 명부 %d/%d" % [ preview_state.get_deployed_player_count(), preview_state.get_deployment_max_units() ]) var formation_count := preview_state.get_formation_cells().size() if formation_count > 0: - parts.append("Battle Array %d tiles" % formation_count) + parts.append("진형 배치 %d칸" % formation_count) return _join_strings(parts, " - ") @@ -6710,25 +6742,25 @@ func _update_post_move_menu() -> void: return _position_post_move_menu() if post_move_title_label != null: - post_move_title_label.text = "%s: issue order" % str(selected.get("name", "Unit")) + post_move_title_label.text = "%s: 군령 선택" % str(selected.get("name", "Unit")) if post_move_attack_button != null: var attack_blocked := not _has_basic_attack_target(pending_move_unit_id) post_move_attack_button.disabled = attack_blocked - post_move_attack_button.tooltip_text = "No enemy banner is within reach." if attack_blocked else "Mark an enemy from this banner's current ground." + post_move_attack_button.tooltip_text = "사거리 안에 적 부대가 없습니다." if attack_blocked else "현재 자리에서 공격할 적을 지목합니다." if post_move_tactic_button != null: var skill_blocked := not _unit_has_usable_skill_target(pending_move_unit_id) post_move_tactic_button.disabled = skill_blocked - post_move_tactic_button.tooltip_text = "No stratagem can reach from this ground." if skill_blocked else "Select a stratagem writ from this banner's current ground." + post_move_tactic_button.tooltip_text = "이 자리에서 닿는 책략 대상이 없습니다." if skill_blocked else "현재 자리에서 쓸 책략을 고릅니다." if post_move_item_button != null: var item_blocked := not _unit_has_usable_item_target(pending_move_unit_id) post_move_item_button.disabled = item_blocked - post_move_item_button.tooltip_text = "No supply can reach from this ground." if item_blocked else "Open field supplies after this move." + post_move_item_button.tooltip_text = "이 자리에서 닿는 도구 대상이 없습니다." if item_blocked else "이동 후 도구 목록을 펼칩니다." if post_move_wait_button != null: post_move_wait_button.disabled = false - post_move_wait_button.tooltip_text = "Commit this march and seal the banner's order." + post_move_wait_button.tooltip_text = "행군을 확정하고 군령을 봉인합니다." if post_move_cancel_button != null: post_move_cancel_button.disabled = false - post_move_cancel_button.tooltip_text = "Right-click also recalls the banner to its starting ground." + post_move_cancel_button.tooltip_text = "우클릭으로도 원래 자리로 되돌릴 수 있습니다." func _local_command_panel_position_for_cell(cell: Vector2i, panel_size: Vector2) -> Vector2: @@ -6871,7 +6903,7 @@ func _rebuild_post_move_tactic_picker(selected: Dictionary) -> void: var skill_ids := state.get_skill_ids(selected["id"]) if skill_ids.is_empty(): var empty_label := Label.new() - empty_label.text = "No stratagems" + empty_label.text = "사용할 책략이 없습니다" _apply_label_style(empty_label, UI_PARCHMENT_TEXT) post_move_picker_list.add_child(empty_label) return @@ -6920,7 +6952,7 @@ func _format_post_move_tactic_button_text(skill_id: String, skill: Dictionary, s var range_text := _format_tactic_range_text(skill) var disabled_text := "" if state.is_unit_skill_sealed(selected["id"]): - disabled_text = " - Sealed" + disabled_text = " - 봉인" elif int(selected.get("mp", 0)) < mp_cost: disabled_text = " - Qi" elif not _skill_has_valid_target(str(selected.get("id", "")), skill_id): @@ -7100,12 +7132,12 @@ func _update_targeting_hint_panel() -> void: if targeting_hint_detail_label != null: targeting_hint_detail_label.text = _targeting_hint_detail_text() if targeting_hint_back_button != null: - targeting_hint_back_button.text = "Return" - targeting_hint_back_button.tooltip_text = "Return to the order menu." if _has_pending_move() else "Clear target selection." + targeting_hint_back_button.text = "돌아가기" + targeting_hint_back_button.tooltip_text = "군령 선택으로 돌아갑니다." if _has_pending_move() else "대상 지정을 풉니다." if targeting_hint_cancel_move_button != null: targeting_hint_cancel_move_button.visible = _has_pending_move() targeting_hint_cancel_move_button.disabled = not _has_pending_move() - targeting_hint_cancel_move_button.tooltip_text = "Right-click also recalls the banner to its starting ground." + targeting_hint_cancel_move_button.tooltip_text = "우클릭으로도 원래 자리로 되돌릴 수 있습니다." targeting_hint_panel.visible = true @@ -7120,33 +7152,33 @@ func _position_targeting_hint_panel(selected: Dictionary) -> void: func _targeting_hint_title_text() -> String: if basic_attack_targeting: - return "Mark Foe" + return "적장 지목" if not selected_skill_id.is_empty(): var skill := state.get_skill_def(selected_skill_id) - return "Mark: %s" % str(skill.get("name", selected_skill_id)) + return "지목: %s" % str(skill.get("name", selected_skill_id)) if not selected_item_id.is_empty(): var item := state.get_item_def(selected_item_id) - return "Mark: %s" % str(item.get("name", selected_item_id)) - return "Mark Target" + return "지목: %s" % str(item.get("name", selected_item_id)) + return "대상 지목" func _targeting_hint_detail_text() -> String: if basic_attack_targeting: var markers := _attack_target_marker_entries() if markers.is_empty(): - return "No enemy banner is within reach." - return "%d enemy mark%s. Strike a marked foe." % [markers.size(), "" if markers.size() == 1 else "s"] + return "사거리 안에 적 부대가 없습니다." + return "적 표식 %d. 표시된 적을 공격하십시오." % markers.size() if not selected_skill_id.is_empty(): var markers := _skill_target_marker_entries() if markers.is_empty(): - return "No valid stratagem mark." - return "%d stratagem mark%s. Choose marked ground." % [markers.size(), "" if markers.size() == 1 else "s"] + return "책략을 쓸 대상이 없습니다." + return "책략 표식 %d. 표시된 지점을 고르십시오." % markers.size() if not selected_item_id.is_empty(): var markers := _item_target_marker_entries() if markers.is_empty(): - return "No valid supply mark." - return "%d supply mark%s. Choose a marked banner." % [markers.size(), "" if markers.size() == 1 else "s"] - return "Mark a highlighted target." + return "도구를 쓸 대상이 없습니다." + return "도구 표식 %d. 표시된 부대를 고르십시오." % markers.size() + return "표시된 대상을 지목합니다." func _on_targeting_back_pressed() -> void: @@ -7184,28 +7216,28 @@ func _set_action_button_blocked(button: Button, base_label: String, reason_label func _action_phase_block_reason() -> Dictionary: if campaign_complete_screen: return { - "label": "Chronicle Sealed", - "tooltip": "The campaign is complete." + "label": "전기 봉인", + "tooltip": "전기가 완결되었습니다." } if not battle_started: return { - "label": "Unroll Map", - "tooltip": "Unroll the war map before issuing combat orders." + "label": "전장도 미개봉", + "tooltip": "전장도를 펼친 뒤 군령을 내릴 수 있습니다." } if state.battle_status != BattleState.STATUS_ACTIVE: return { - "label": "Field Settled", - "tooltip": "Combat actions are unavailable after the battle ends." + "label": "전장 종결", + "tooltip": "전투가 끝난 뒤에는 군령을 낼 수 없습니다." } if state.current_team != BattleState.TEAM_PLAYER: return { - "label": "Enemy Phase", - "tooltip": "Await the player command phase." + "label": "적군 차례", + "tooltip": "아군 군령 차례를 기다립니다." } if _is_input_locked(): return { - "label": "Resolving", - "tooltip": "Finish the current dialogue, result, or animation first." + "label": "처리 중", + "tooltip": "현재 대화, 결과, 움직임을 먼저 마칩니다." } return {} @@ -7214,16 +7246,16 @@ func _update_wait_button(selected: Dictionary) -> void: if wait_button == null: return if selected.is_empty(): - _set_action_button_blocked(wait_button, "Hold", "Mark Banner", "Mark a controllable banner before holding.") + _set_action_button_blocked(wait_button, "대기", "부대 미지정", "명령할 부대를 먼저 고릅니다.") return if bool(selected.get("acted", false)): - _set_action_button_blocked(wait_button, "Hold", "Sealed", "This banner has already acted.") + _set_action_button_blocked(wait_button, "대기", "봉인됨", "이 부대는 이미 행동했습니다.") return var phase_block := _action_phase_block_reason() if not phase_block.is_empty(): - _set_action_button_blocked(wait_button, "Hold", str(phase_block.get("label", "Resolving")), str(phase_block.get("tooltip", ""))) + _set_action_button_blocked(wait_button, "대기", str(phase_block.get("label", "처리 중")), str(phase_block.get("tooltip", ""))) return - _set_action_button_state(wait_button, "Hold", false, "Seal this banner's order for the current phase.") + _set_action_button_state(wait_button, "대기", false, "이 부대의 군령을 봉인합니다.") func _update_end_turn_button() -> void: @@ -7231,9 +7263,9 @@ func _update_end_turn_button() -> void: return var phase_block := _action_phase_block_reason() if not phase_block.is_empty(): - _set_action_button_blocked(end_turn_button, "Pass Command", str(phase_block.get("label", "Resolving")), str(phase_block.get("tooltip", ""))) + _set_action_button_blocked(end_turn_button, "차례 종료", str(phase_block.get("label", "처리 중")), str(phase_block.get("tooltip", ""))) return - _set_action_button_state(end_turn_button, "Pass Command", false, "End the player phase and let enemy banners act.") + _set_action_button_state(end_turn_button, "차례 종료", false, "아군 차례를 마치고 적군이 움직입니다.") func _update_threat_button() -> void: @@ -7241,46 +7273,46 @@ func _update_threat_button() -> void: return threat_button.button_pressed = show_threat_overlay if campaign_complete_screen: - _set_action_button_blocked(threat_button, "Enemy Lines", "Chronicle Sealed", "The campaign is complete.") + _set_action_button_blocked(threat_button, "적진", "전기 봉인", "전기가 완결되었습니다.") return if not battle_started: - _set_action_button_blocked(threat_button, "Enemy Lines", "Unroll Map", "Unroll the war map before reading enemy lines.") + _set_action_button_blocked(threat_button, "적진", "전장도 미개봉", "전장도를 펼친 뒤 적진을 살필 수 있습니다.") return if state.battle_status != BattleState.STATUS_ACTIVE: - _set_action_button_blocked(threat_button, "Enemy Lines", "Field Settled", "Enemy lines are only available during active battles.") + _set_action_button_blocked(threat_button, "적진", "전장 종결", "전투 중에만 적진을 살필 수 있습니다.") return - _set_action_button_state(threat_button, "Enemy Lines", false, "Toggle enemy weapon and hostile stratagem reach.") + _set_action_button_state(threat_button, "적진", false, "적의 무기와 책략 사거리를 살핍니다.") func _update_tactic_button(selected: Dictionary) -> void: if tactic_button == null: return if selected.is_empty(): - _set_action_button_blocked(tactic_button, "Stratagem", "Mark Banner", "Mark a controllable banner before using stratagems.") + _set_action_button_blocked(tactic_button, "책략", "부대 미지정", "책략을 쓸 부대를 먼저 고릅니다.") return var skill_ids := state.get_skill_ids(selected["id"]) if skill_ids.is_empty(): - _set_action_button_blocked(tactic_button, "Stratagem", "None", "This banner has no stratagems.") + _set_action_button_blocked(tactic_button, "책략", "없음", "이 부대는 사용할 책략이 없습니다.") return if state.is_unit_skill_sealed(selected["id"]): - _set_action_button_blocked(tactic_button, "Stratagem", "Sealed", "This banner is sealed and cannot use stratagems.") + _set_action_button_blocked(tactic_button, "책략", "봉인됨", "이 부대는 책략을 쓸 수 없습니다.") return if bool(selected.get("acted", false)): - _set_action_button_blocked(tactic_button, "Stratagem", "Sealed", "This banner has already acted.") + _set_action_button_blocked(tactic_button, "책략", "봉인됨", "이 부대는 이미 행동했습니다.") return var phase_block := _action_phase_block_reason() if not phase_block.is_empty(): - _set_action_button_blocked(tactic_button, "Stratagem", str(phase_block.get("label", "Resolving")), str(phase_block.get("tooltip", ""))) + _set_action_button_blocked(tactic_button, "책략", str(phase_block.get("label", "처리 중")), str(phase_block.get("tooltip", ""))) return if not selected_skill_id.is_empty(): var skill := state.get_skill_def(selected_skill_id) - _set_action_button_state(tactic_button, "Stratagem: %s" % str(skill.get("name", selected_skill_id)), false, "Mark this stratagem on the field.") + _set_action_button_state(tactic_button, "책략: %s" % str(skill.get("name", selected_skill_id)), false, "전장에 책략 대상을 지목합니다.") elif tactic_menu != null and tactic_menu.visible: - _set_action_button_state(tactic_button, "Close Stratagems", false, "Close the stratagem menu.") + _set_action_button_state(tactic_button, "책략 닫기", false, "책략 목록을 닫습니다.") else: - _set_action_button_state(tactic_button, "Stratagem", false, "Open stratagems. %d known." % skill_ids.size()) + _set_action_button_state(tactic_button, "책략", false, "책략 목록을 펼칩니다. %d개." % skill_ids.size()) func _show_tactic_menu(selected: Dictionary) -> void: @@ -7305,14 +7337,14 @@ func _rebuild_tactic_menu(selected: Dictionary) -> void: var skill_ids := state.get_skill_ids(selected["id"]) if skill_ids.is_empty(): var empty_label := Label.new() - empty_label.text = "No stratagems" + empty_label.text = "사용할 책략이 없습니다" _apply_label_style(empty_label, UI_PARCHMENT_TEXT) tactic_list.add_child(empty_label) return var skill_sealed := state.is_unit_skill_sealed(selected["id"]) if skill_sealed: var sealed_label := Label.new() - sealed_label.text = "Stratagems sealed" + sealed_label.text = "책략 봉인" _apply_label_style(sealed_label, UI_PARCHMENT_TEXT) tactic_list.add_child(sealed_label) @@ -7326,7 +7358,7 @@ func _rebuild_tactic_menu(selected: Dictionary) -> void: tactic_list.add_child(skill_button) var cancel_button := Button.new() - cancel_button.text = "Return" + cancel_button.text = "돌아가기" _apply_button_style(cancel_button) cancel_button.pressed.connect(_on_tactic_cancel_pressed) tactic_list.add_child(cancel_button) @@ -7347,7 +7379,7 @@ func _format_tactic_button_text(skill_id: String, skill: Dictionary, selected: D var effect_text := _format_tactic_effect_text(skill) var disabled_text := "" if state.is_unit_skill_sealed(selected["id"]): - disabled_text = " - Sealed" + disabled_text = " - 봉인" elif int(selected.get("mp", 0)) < mp_cost: disabled_text = " - Qi" return "%s%s %d Qi %s Reach %s %s%s" % [marker, skill_name, mp_cost, kind, range_text, effect_text, disabled_text] @@ -7443,28 +7475,28 @@ func _update_item_button(selected: Dictionary) -> void: if item_button == null: return if selected.is_empty(): - _set_action_button_blocked(item_button, "Supply", "Mark Banner", "Mark a controllable banner before using supplies.") + _set_action_button_blocked(item_button, "도구", "부대 미지정", "도구를 쓸 부대를 먼저 고릅니다.") return if bool(selected.get("acted", false)): - _set_action_button_blocked(item_button, "Supply", "Sealed", "This banner has already acted.") + _set_action_button_blocked(item_button, "도구", "봉인됨", "이 부대는 이미 행동했습니다.") return var phase_block := _action_phase_block_reason() if not phase_block.is_empty(): - _set_action_button_blocked(item_button, "Supply", str(phase_block.get("label", "Resolving")), str(phase_block.get("tooltip", ""))) + _set_action_button_blocked(item_button, "도구", str(phase_block.get("label", "처리 중")), str(phase_block.get("tooltip", ""))) return var item_ids := state.get_usable_item_ids() if item_ids.is_empty(): - _set_action_button_blocked(item_button, "Supply", "Empty", "No field supplies are available.") + _set_action_button_blocked(item_button, "도구", "비어 있음", "사용할 도구가 없습니다.") return if not selected_item_id.is_empty(): var item := state.get_item_def(selected_item_id) - _set_action_button_state(item_button, "Supply: %s" % str(item.get("name", selected_item_id)), false, "Mark this supply on the field.") + _set_action_button_state(item_button, "도구: %s" % str(item.get("name", selected_item_id)), false, "전장에서 도구 대상을 지목합니다.") elif item_menu != null and item_menu.visible: - _set_action_button_state(item_button, "Close Supplies", false, "Close the supply menu.") + _set_action_button_state(item_button, "도구 닫기", false, "도구 목록을 닫습니다.") else: - _set_action_button_state(item_button, "Supply", false, "Open field supplies. %d types available." % item_ids.size()) + _set_action_button_state(item_button, "도구", false, "도구 목록을 펼칩니다. %d종." % item_ids.size()) func _show_item_menu(selected: Dictionary) -> void: @@ -7489,7 +7521,7 @@ func _rebuild_item_menu(selected: Dictionary) -> void: var item_ids := state.get_usable_item_ids() if item_ids.is_empty(): var empty_label := Label.new() - empty_label.text = "No supplies" + empty_label.text = "사용할 도구가 없습니다" _apply_label_style(empty_label, UI_PARCHMENT_TEXT) item_list.add_child(empty_label) return @@ -7508,7 +7540,7 @@ func _rebuild_item_menu(selected: Dictionary) -> void: item_list.add_child(use_button) var cancel_button := Button.new() - cancel_button.text = "Return" + cancel_button.text = "돌아가기" _apply_button_style(cancel_button) cancel_button.pressed.connect(_on_item_cancel_pressed) item_list.add_child(cancel_button) @@ -7574,23 +7606,23 @@ func _update_equip_button(selected: Dictionary) -> void: if equip_button == null: return if selected.is_empty(): - _set_action_button_blocked(equip_button, "Arms", "Mark Banner", "Mark a controllable banner before changing arms.") + _set_action_button_blocked(equip_button, "병장", "부대 미지정", "병장을 바꿀 부대를 먼저 고릅니다.") return if bool(selected.get("acted", false)): - _set_action_button_blocked(equip_button, "Arms", "Sealed", "This banner has already acted.") + _set_action_button_blocked(equip_button, "병장", "봉인됨", "이 부대는 이미 행동했습니다.") return if bool(selected.get("moved", false)): - _set_action_button_blocked(equip_button, "Arms", "Marched", "Arms can only be changed before this banner marches.") + _set_action_button_blocked(equip_button, "병장", "행군 후", "병장은 행군 전에만 바꿀 수 있습니다.") return var phase_block := _action_phase_block_reason() if not phase_block.is_empty(): - _set_action_button_blocked(equip_button, "Arms", str(phase_block.get("label", "Resolving")), str(phase_block.get("tooltip", ""))) + _set_action_button_blocked(equip_button, "병장", str(phase_block.get("label", "처리 중")), str(phase_block.get("tooltip", ""))) return if equip_menu != null and equip_menu.visible: - _set_action_button_state(equip_button, "Close Arms", false, "Close the arms ledger.") + _set_action_button_state(equip_button, "병장 닫기", false, "병장 장부를 닫습니다.") else: - _set_action_button_state(equip_button, "Arms", false, "Change weapons, armor, or accessories before marching.") + _set_action_button_state(equip_button, "병장", false, "행군 전에 무기, 갑옷, 장신구를 바꿉니다.") func _show_equip_menu(selected: Dictionary) -> void: @@ -7614,14 +7646,14 @@ func _rebuild_equip_menu(selected: Dictionary) -> void: _clear_equip_list() var equipment_label := Label.new() equipment_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART - equipment_label.text = "Arms Held: %s" % _format_unit_equipment(selected) + equipment_label.text = "소지 병장: %s" % _format_unit_equipment(selected) _apply_label_style(equipment_label, UI_PARCHMENT_TEXT) equip_list.add_child(equipment_label) var equipped_slots := state.get_equipped_equipment_slots(str(selected["id"])) if not equipped_slots.is_empty(): var unequip_title := Label.new() - unequip_title.text = "Remove Arms" + unequip_title.text = "병장 해제" _apply_label_style(unequip_title, UI_OLD_BRONZE, 14) equip_list.add_child(unequip_title) var equipment := state.get_equipment_snapshot(str(selected["id"])) @@ -7640,7 +7672,7 @@ func _rebuild_equip_menu(selected: Dictionary) -> void: var item_ids := state.get_equippable_item_ids(selected["id"]) if item_ids.is_empty(): var empty_label := Label.new() - empty_label.text = "No compatible arms" + empty_label.text = "맞는 병장이 없습니다" _apply_label_style(empty_label, UI_PARCHMENT_TEXT) equip_list.add_child(empty_label) else: @@ -7662,7 +7694,7 @@ func _rebuild_equip_menu(selected: Dictionary) -> void: equip_list.add_child(equip_item_button) var cancel_button := Button.new() - cancel_button.text = "Return" + cancel_button.text = "돌아가기" _apply_button_style(cancel_button) cancel_button.pressed.connect(_on_equip_cancel_pressed) equip_list.add_child(cancel_button) @@ -7719,7 +7751,7 @@ func _format_equipment_option_text(unit: Dictionary, item_id: String, item: Dict func _format_equipment_unequip_text(unit: Dictionary, slot: String, item_id: String, item: Dictionary) -> String: var parts := [ - "Unequip %s:" % slot.capitalize(), + "%s 해제:" % slot.capitalize(), _item_display_name(item_id) ] var change_text := _format_equipment_unequip_change_text(unit, slot, item) @@ -7741,13 +7773,13 @@ func _format_equipment_unequip_change_text(unit: Dictionary, slot: String, item: if slot == "weapon": var current_range := _format_equipment_item_range_text(item) if not current_range.is_empty(): - parts.append("RNG returns to class") + parts.append("사거리 기본값") var effectiveness_text := _format_equipment_effectiveness_text(item) if not effectiveness_text.is_empty(): - parts.append("Loses %s" % effectiveness_text) + parts.append("%s 상실" % effectiveness_text) if parts.is_empty(): - return "Returns to inventory" - return "Change %s" % _join_strings(parts, ", ") + return "군수고로 반환" + return "변화 %s" % _join_strings(parts, ", ") func _format_equipment_change_text(unit: Dictionary, item: Dictionary) -> String: diff --git a/tools/smoke_camp_conversation_rewards.gd b/tools/smoke_camp_conversation_rewards.gd index 636645d..2dd1670 100644 --- a/tools/smoke_camp_conversation_rewards.gd +++ b/tools/smoke_camp_conversation_rewards.gd @@ -270,7 +270,7 @@ func _check_sishui_gate_camp_supplies(failures: Array[String]) -> void: failures.append("Sishui should expose quartermaster antidote conversation") scene.free() return - if not scene._format_camp_conversation_button_text(conversation).contains("Supply Antidote"): + if not scene._format_camp_conversation_button_text(conversation).contains("보급 Antidote"): failures.append("Sishui quartermaster button should preview Antidote supply") var before_antidote := int(scene.campaign_state.get_inventory_snapshot().get("antidote", 0)) scene._apply_camp_conversation_effects(conversation) @@ -308,7 +308,7 @@ func _check_puyang_raid_camp_supplies(failures: Array[String]) -> void: failures.append("Puyang shop merchant should expose flavor lines") if scene._format_talk_status_text(scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Puyang talk status should show one ready supply") - if not scene._format_camp_conversation_button_text(conversation).contains("Supply Bean"): + if not scene._format_camp_conversation_button_text(conversation).contains("보급 Bean"): failures.append("Puyang raider stores button should preview Bean supply") var before_bean := int(scene.campaign_state.get_inventory_snapshot().get("bean", 0)) scene._apply_camp_conversation_effects(conversation) @@ -338,7 +338,7 @@ func _check_puyang_raid_camp_supplies(failures: Array[String]) -> void: if not vanguard.is_empty(): if pursuit_scene._format_talk_status_text(pursuit_scene._camp_conversation_entries()) != "Camp conversations | 4 topics | 2 supplies ready": failures.append("Puyang pursuit talk status should show two ready supplies") - if not pursuit_scene._format_camp_conversation_button_text(vanguard).contains("Supply Wine"): + if not pursuit_scene._format_camp_conversation_button_text(vanguard).contains("보급 Wine"): failures.append("Puyang hardened vanguard button should preview Wine supply") var before_wine := int(pursuit_scene.campaign_state.get_inventory_snapshot().get("wine", 0)) pursuit_scene._apply_camp_conversation_effects(vanguard) @@ -366,7 +366,7 @@ func _check_puyang_raid_camp_supplies(failures: Array[String]) -> void: if not reserve.is_empty(): if regroup_scene._format_talk_status_text(regroup_scene._camp_conversation_entries()) != "Camp conversations | 4 topics | 2 supplies ready": failures.append("Puyang regroup talk status should show two ready supplies") - if not regroup_scene._format_camp_conversation_button_text(reserve).contains("Supply Panacea"): + if not regroup_scene._format_camp_conversation_button_text(reserve).contains("보급 Panacea"): failures.append("Puyang Qingzhou reserve button should preview Panacea supply") var before_panacea := int(regroup_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) regroup_scene._apply_camp_conversation_effects(reserve) @@ -416,7 +416,7 @@ func _check_dingtao_branch_camp_conversations(failures: Array[String]) -> void: if not reserves.is_empty(): if fortified_scene._format_talk_status_text(fortified_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Dingtao fortified talk status should show one ready supply") - if not fortified_scene._format_camp_conversation_button_text(reserves).contains("Supply Panacea"): + if not fortified_scene._format_camp_conversation_button_text(reserves).contains("보급 Panacea"): failures.append("Dingtao fortified reserves button should preview Panacea supply") var before_panacea := int(fortified_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) fortified_scene._apply_camp_conversation_effects(reserves) @@ -446,7 +446,7 @@ func _check_dingtao_branch_camp_conversations(failures: Array[String]) -> void: if not vanguard.is_empty(): if pressed_scene._format_talk_status_text(pressed_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Dingtao pressed talk status should show one ready supply") - if not pressed_scene._format_camp_conversation_button_text(vanguard).contains("Supply Wine"): + if not pressed_scene._format_camp_conversation_button_text(vanguard).contains("보급 Wine"): failures.append("Dingtao pressed vanguard button should preview Wine supply") var before_wine := int(pressed_scene.campaign_state.get_inventory_snapshot().get("wine", 0)) pressed_scene._apply_camp_conversation_effects(vanguard) @@ -498,7 +498,7 @@ func _check_xian_branch_camp_conversations(failures: Array[String]) -> void: if not supplies.is_empty(): if fortified_scene._format_talk_status_text(fortified_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Xian fortified talk status should show one ready supply") - if not fortified_scene._format_camp_conversation_button_text(supplies).contains("Supply Bean"): + if not fortified_scene._format_camp_conversation_button_text(supplies).contains("보급 Bean"): failures.append("Xian fortified road supplies button should preview Bean supply") var before_bean := int(fortified_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) fortified_scene._apply_camp_conversation_effects(supplies) @@ -528,7 +528,7 @@ func _check_xian_branch_camp_conversations(failures: Array[String]) -> void: if not canteens.is_empty(): if pressed_scene._format_talk_status_text(pressed_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Xian pressed talk status should show one ready supply") - if not pressed_scene._format_camp_conversation_button_text(canteens).contains("Supply Wine"): + if not pressed_scene._format_camp_conversation_button_text(canteens).contains("보급 Wine"): failures.append("Xian forced march canteens button should preview Wine supply") var before_wine := int(pressed_scene.campaign_state.get_inventory_snapshot().get("wine", 0)) pressed_scene._apply_camp_conversation_effects(canteens) @@ -580,7 +580,7 @@ func _check_wan_branch_camp_conversations(failures: Array[String]) -> void: if not postern.is_empty(): if court_scene._format_talk_status_text(court_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Wan court seal talk status should show one ready supply") - if not court_scene._format_camp_conversation_button_text(postern).contains("Supply Bean"): + if not court_scene._format_camp_conversation_button_text(postern).contains("보급 Bean"): failures.append("Wan court seal postern button should preview Bean supply") var before_bean := int(court_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) court_scene._apply_camp_conversation_effects(postern) @@ -610,7 +610,7 @@ func _check_wan_branch_camp_conversations(failures: Array[String]) -> void: if not drums.is_empty(): if pursuit_scene._format_talk_status_text(pursuit_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Wan hard pursuit talk status should show one ready supply") - if not pursuit_scene._format_camp_conversation_button_text(drums).contains("Supply Wine"): + if not pursuit_scene._format_camp_conversation_button_text(drums).contains("보급 Wine"): failures.append("Wan hard pursuit drums button should preview Wine supply") var before_wine := int(pursuit_scene.campaign_state.get_inventory_snapshot().get("wine", 0)) pursuit_scene._apply_camp_conversation_effects(drums) @@ -662,7 +662,7 @@ func _check_xiapi_branch_camp_conversations(failures: Array[String]) -> void: if not dressings.is_empty(): if held_scene._format_talk_status_text(held_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Xiapi held Wan gate talk status should show one ready supply") - if not held_scene._format_camp_conversation_button_text(dressings).contains("Supply Panacea"): + if not held_scene._format_camp_conversation_button_text(dressings).contains("보급 Panacea"): failures.append("Xiapi Wan baggage dressings button should preview Panacea supply") var before_panacea := int(held_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) held_scene._apply_camp_conversation_effects(dressings) @@ -692,7 +692,7 @@ func _check_xiapi_branch_camp_conversations(failures: Array[String]) -> void: if not rations.is_empty(): if swift_scene._format_talk_status_text(swift_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Xiapi swift Wan escape talk status should show one ready supply") - if not swift_scene._format_camp_conversation_button_text(rations).contains("Supply Bean"): + if not swift_scene._format_camp_conversation_button_text(rations).contains("보급 Bean"): failures.append("Xiapi forced march rations button should preview Bean supply") var before_bean := int(swift_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) swift_scene._apply_camp_conversation_effects(rations) @@ -744,7 +744,7 @@ func _check_white_horse_branch_camp_conversations(failures: Array[String]) -> vo if not medicine.is_empty(): if xu_scene._format_talk_status_text(xu_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("White Horse integrated Xu talk status should show one ready supply") - if not xu_scene._format_camp_conversation_button_text(medicine).contains("Supply Panacea"): + if not xu_scene._format_camp_conversation_button_text(medicine).contains("보급 Panacea"): failures.append("White Horse Xu reserve medicine button should preview Panacea supply") var before_panacea := int(xu_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) xu_scene._apply_camp_conversation_effects(medicine) @@ -774,7 +774,7 @@ func _check_white_horse_branch_camp_conversations(failures: Array[String]) -> vo if not beans.is_empty(): if pressed_scene._format_talk_status_text(pressed_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("White Horse pressed north talk status should show one ready supply") - if not pressed_scene._format_camp_conversation_button_text(beans).contains("Supply Bean"): + if not pressed_scene._format_camp_conversation_button_text(beans).contains("보급 Bean"): failures.append("White Horse fast march beans button should preview Bean supply") var before_bean := int(pressed_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) pressed_scene._apply_camp_conversation_effects(beans) @@ -826,7 +826,7 @@ func _check_yan_ford_branch_camp_conversations(failures: Array[String]) -> void: if not medicine.is_empty(): if fortified_scene._format_talk_status_text(fortified_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Yan Ford fortified talk status should show one ready supply") - if not fortified_scene._format_camp_conversation_button_text(medicine).contains("Supply Panacea"): + if not fortified_scene._format_camp_conversation_button_text(medicine).contains("보급 Panacea"): failures.append("Yan Ford crossing medicine button should preview Panacea supply") var before_panacea := int(fortified_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) fortified_scene._apply_camp_conversation_effects(medicine) @@ -856,7 +856,7 @@ func _check_yan_ford_branch_camp_conversations(failures: Array[String]) -> void: if not beans.is_empty(): if raided_scene._format_talk_status_text(raided_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Yan Ford raided supplies talk status should show one ready supply") - if not raided_scene._format_camp_conversation_button_text(beans).contains("Supply Bean"): + if not raided_scene._format_camp_conversation_button_text(beans).contains("보급 Bean"): failures.append("Yan Ford raided supply beans button should preview Bean supply") var before_bean := int(raided_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) raided_scene._apply_camp_conversation_effects(beans) @@ -908,7 +908,7 @@ func _check_guandu_branch_camp_conversations(failures: Array[String]) -> void: if not medicine.is_empty(): if secured_scene._format_talk_status_text(secured_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Guandu secured line talk status should show one ready supply") - if not secured_scene._format_camp_conversation_button_text(medicine).contains("Supply Panacea"): + if not secured_scene._format_camp_conversation_button_text(medicine).contains("보급 Panacea"): failures.append("Guandu secured line medicine button should preview Panacea supply") var before_panacea := int(secured_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) secured_scene._apply_camp_conversation_effects(medicine) @@ -938,7 +938,7 @@ func _check_guandu_branch_camp_conversations(failures: Array[String]) -> void: if not wine.is_empty(): if scouted_scene._format_talk_status_text(scouted_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Guandu scouted Wuchao talk status should show one ready supply") - if not scouted_scene._format_camp_conversation_button_text(wine).contains("Supply Wine"): + if not scouted_scene._format_camp_conversation_button_text(wine).contains("보급 Wine"): failures.append("Guandu Wuchao scout wine button should preview Wine supply") var before_wine := int(scouted_scene.campaign_state.get_inventory_snapshot().get("wine", 0)) scouted_scene._apply_camp_conversation_effects(wine) @@ -2853,7 +2853,7 @@ func _check_qingzhou_branch_camp_conversations(failures: Array[String]) -> void: if not veterans.is_empty(): if pursuit_scene._format_talk_status_text(pursuit_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Qingzhou pursuit talk status should show one ready supply") - if not pursuit_scene._format_camp_conversation_button_text(veterans).contains("Supply Wine"): + if not pursuit_scene._format_camp_conversation_button_text(veterans).contains("보급 Wine"): failures.append("Qingzhou hardened veterans button should show Wine supply") var before_wine := int(pursuit_scene.campaign_state.get_inventory_snapshot().get("wine", 0)) pursuit_scene._apply_camp_conversation_effects(veterans) @@ -2883,7 +2883,7 @@ func _check_qingzhou_branch_camp_conversations(failures: Array[String]) -> void: if not stores.is_empty(): if regroup_scene._format_talk_status_text(regroup_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Qingzhou regroup talk status should show one ready supply") - if not regroup_scene._format_camp_conversation_button_text(stores).contains("Supply Bean"): + if not regroup_scene._format_camp_conversation_button_text(stores).contains("보급 Bean"): failures.append("Qingzhou Sishui stores button should show Bean supply") var before_bean := int(regroup_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) regroup_scene._apply_camp_conversation_effects(stores) @@ -2935,7 +2935,7 @@ func _check_wuchao_branch_camp_conversations(failures: Array[String]) -> void: if not fast_supplies.is_empty(): if raid_scene._format_talk_status_text(raid_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Wuchao prepared raid talk status should show one ready supply") - if not raid_scene._format_camp_conversation_button_text(fast_supplies).contains("Supply Bean"): + if not raid_scene._format_camp_conversation_button_text(fast_supplies).contains("보급 Bean"): failures.append("Wuchao fast supplies button should show Bean supply") var before_bean := int(raid_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) raid_scene._apply_camp_conversation_effects(fast_supplies) @@ -2965,7 +2965,7 @@ func _check_wuchao_branch_camp_conversations(failures: Array[String]) -> void: if not reserve_wagon.is_empty(): if defense_scene._format_talk_status_text(defense_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Wuchao strengthened defense talk status should show one ready supply") - if not defense_scene._format_camp_conversation_button_text(reserve_wagon).contains("Supply Panacea"): + if not defense_scene._format_camp_conversation_button_text(reserve_wagon).contains("보급 Panacea"): failures.append("Wuchao reserve wagon button should show Panacea supply") var before_panacea := int(defense_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) defense_scene._apply_camp_conversation_effects(reserve_wagon) @@ -3015,7 +3015,7 @@ func _check_cangting_branch_camp_conversations(failures: Array[String]) -> void: if not fast_rations.is_empty(): if pressed_scene._format_talk_status_text(pressed_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Cangting pressed rout talk status should show one ready supply") - if not pressed_scene._format_camp_conversation_button_text(fast_rations).contains("Supply Bean"): + if not pressed_scene._format_camp_conversation_button_text(fast_rations).contains("보급 Bean"): failures.append("Cangting fast pursuit rations button should show Bean supply") var before_bean := int(pressed_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) pressed_scene._apply_camp_conversation_effects(fast_rations) @@ -3045,7 +3045,7 @@ func _check_cangting_branch_camp_conversations(failures: Array[String]) -> void: if not store_medicine.is_empty(): if stores_scene._format_talk_status_text(stores_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Cangting secured stores talk status should show one ready supply") - if not stores_scene._format_camp_conversation_button_text(store_medicine).contains("Supply Panacea"): + if not stores_scene._format_camp_conversation_button_text(store_medicine).contains("보급 Panacea"): failures.append("Cangting store medicine button should show Panacea supply") var before_panacea := int(stores_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) stores_scene._apply_camp_conversation_effects(store_medicine) @@ -3097,7 +3097,7 @@ func _check_ye_branch_camp_conversations(failures: Array[String]) -> void: if not rapid_rations.is_empty(): if advanced_scene._format_talk_status_text(advanced_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Ye advanced talk status should show one ready supply") - if not advanced_scene._format_camp_conversation_button_text(rapid_rations).contains("Supply Bean"): + if not advanced_scene._format_camp_conversation_button_text(rapid_rations).contains("보급 Bean"): failures.append("Ye rapid rations button should show Bean supply") var before_bean := int(advanced_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) advanced_scene._apply_camp_conversation_effects(rapid_rations) @@ -3127,7 +3127,7 @@ func _check_ye_branch_camp_conversations(failures: Array[String]) -> void: if not crossing_medicine.is_empty(): if crossing_scene._format_talk_status_text(crossing_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Ye crossings talk status should show one ready supply") - if not crossing_scene._format_camp_conversation_button_text(crossing_medicine).contains("Supply Panacea"): + if not crossing_scene._format_camp_conversation_button_text(crossing_medicine).contains("보급 Panacea"): failures.append("Ye crossing medicine button should show Panacea supply") var before_panacea := int(crossing_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) crossing_scene._apply_camp_conversation_effects(crossing_medicine) @@ -3179,7 +3179,7 @@ func _check_ye_siege_branch_camp_conversations(failures: Array[String]) -> void: if not ladder_rations.is_empty(): if pressed_scene._format_talk_status_text(pressed_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Ye Siege pressed talk status should show one ready supply") - if not pressed_scene._format_camp_conversation_button_text(ladder_rations).contains("Supply Bean"): + if not pressed_scene._format_camp_conversation_button_text(ladder_rations).contains("보급 Bean"): failures.append("Ye Siege ladder rations button should show Bean supply") var before_bean := int(pressed_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) pressed_scene._apply_camp_conversation_effects(ladder_rations) @@ -3209,7 +3209,7 @@ func _check_ye_siege_branch_camp_conversations(failures: Array[String]) -> void: if not defector_medicine.is_empty(): if split_scene._format_talk_status_text(split_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Ye Siege split heirs talk status should show one ready supply") - if not split_scene._format_camp_conversation_button_text(defector_medicine).contains("Supply Panacea"): + if not split_scene._format_camp_conversation_button_text(defector_medicine).contains("보급 Panacea"): failures.append("Ye Siege defector medicine button should show Panacea supply") var before_panacea := int(split_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) split_scene._apply_camp_conversation_effects(defector_medicine) @@ -3261,7 +3261,7 @@ func _check_ye_surrender_branch_camp_conversations(failures: Array[String]) -> v if not pressure_rations.is_empty(): if forced_scene._format_talk_status_text(forced_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Ye Surrender forced talk status should show one ready supply") - if not forced_scene._format_camp_conversation_button_text(pressure_rations).contains("Supply Bean"): + if not forced_scene._format_camp_conversation_button_text(pressure_rations).contains("보급 Bean"): failures.append("Ye Surrender pressure rations button should show Bean supply") var before_bean := int(forced_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) forced_scene._apply_camp_conversation_effects(pressure_rations) @@ -3291,7 +3291,7 @@ func _check_ye_surrender_branch_camp_conversations(failures: Array[String]) -> v if not defector_medicine.is_empty(): if negotiated_scene._format_talk_status_text(negotiated_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Ye Surrender negotiated talk status should show one ready supply") - if not negotiated_scene._format_camp_conversation_button_text(defector_medicine).contains("Supply Panacea"): + if not negotiated_scene._format_camp_conversation_button_text(defector_medicine).contains("보급 Panacea"): failures.append("Ye Surrender defector medicine button should show Panacea supply") var before_panacea := int(negotiated_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) negotiated_scene._apply_camp_conversation_effects(defector_medicine) @@ -3343,7 +3343,7 @@ func _check_northern_pursuit_branch_camp_conversations(failures: Array[String]) if not hard_march_beans.is_empty(): if pursued_scene._format_talk_status_text(pursued_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Northern Pursuit pursued talk status should show one ready supply") - if not pursued_scene._format_camp_conversation_button_text(hard_march_beans).contains("Supply Bean"): + if not pursued_scene._format_camp_conversation_button_text(hard_march_beans).contains("보급 Bean"): failures.append("Northern Pursuit hard march beans button should show Bean supply") var before_bean := int(pursued_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) pursued_scene._apply_camp_conversation_effects(hard_march_beans) @@ -3373,7 +3373,7 @@ func _check_northern_pursuit_branch_camp_conversations(failures: Array[String]) if not ji_supply_medicine.is_empty(): if stabilized_scene._format_talk_status_text(stabilized_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Northern Pursuit stabilized talk status should show one ready supply") - if not stabilized_scene._format_camp_conversation_button_text(ji_supply_medicine).contains("Supply Panacea"): + if not stabilized_scene._format_camp_conversation_button_text(ji_supply_medicine).contains("보급 Panacea"): failures.append("Northern Pursuit Ji supply medicine button should show Panacea supply") var before_panacea := int(stabilized_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) stabilized_scene._apply_camp_conversation_effects(ji_supply_medicine) @@ -3425,7 +3425,7 @@ func _check_nanpi_branch_camp_conversations(failures: Array[String]) -> void: if not hard_push_beans.is_empty(): if pressed_scene._format_talk_status_text(pressed_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Nanpi pressed talk status should show one ready supply") - if not pressed_scene._format_camp_conversation_button_text(hard_push_beans).contains("Supply Bean"): + if not pressed_scene._format_camp_conversation_button_text(hard_push_beans).contains("보급 Bean"): failures.append("Nanpi hard push beans button should show Bean supply") var before_bean := int(pressed_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) pressed_scene._apply_camp_conversation_effects(hard_push_beans) @@ -3455,7 +3455,7 @@ func _check_nanpi_branch_camp_conversations(failures: Array[String]) -> void: if not admin_medicine.is_empty(): if secured_scene._format_talk_status_text(secured_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Nanpi secured talk status should show one ready supply") - if not secured_scene._format_camp_conversation_button_text(admin_medicine).contains("Supply Panacea"): + if not secured_scene._format_camp_conversation_button_text(admin_medicine).contains("보급 Panacea"): failures.append("Nanpi admin medicine button should show Panacea supply") var before_panacea := int(secured_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) secured_scene._apply_camp_conversation_effects(admin_medicine) @@ -3507,7 +3507,7 @@ func _check_nanpi_surrender_branch_camp_conversations(failures: Array[String]) - if not pressure_wine.is_empty(): if pressure_scene._format_talk_status_text(pressure_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Nanpi Surrender pressure talk status should show one ready supply") - if not pressure_scene._format_camp_conversation_button_text(pressure_wine).contains("Supply Wine"): + if not pressure_scene._format_camp_conversation_button_text(pressure_wine).contains("보급 Wine"): failures.append("Nanpi Surrender pressure wine button should show Wine supply") var before_wine := int(pressure_scene.campaign_state.get_inventory_snapshot().get("wine", 0)) pressure_scene._apply_camp_conversation_effects(pressure_wine) @@ -3537,7 +3537,7 @@ func _check_nanpi_surrender_branch_camp_conversations(failures: Array[String]) - if not admin_medicine.is_empty(): if admin_scene._format_talk_status_text(admin_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Nanpi Surrender admin talk status should show one ready supply") - if not admin_scene._format_camp_conversation_button_text(admin_medicine).contains("Supply Panacea"): + if not admin_scene._format_camp_conversation_button_text(admin_medicine).contains("보급 Panacea"): failures.append("Nanpi Surrender admin medicine button should show Panacea supply") var before_panacea := int(admin_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) admin_scene._apply_camp_conversation_effects(admin_medicine) @@ -3589,7 +3589,7 @@ func _check_bohai_branch_camp_conversations(failures: Array[String]) -> void: if not fast_wine.is_empty(): if pursued_scene._format_talk_status_text(pursued_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Bohai pursued talk status should show one ready supply") - if not pursued_scene._format_camp_conversation_button_text(fast_wine).contains("Supply Wine"): + if not pursued_scene._format_camp_conversation_button_text(fast_wine).contains("보급 Wine"): failures.append("Bohai fast column wine button should show Wine supply") var before_wine := int(pursued_scene.campaign_state.get_inventory_snapshot().get("wine", 0)) pursued_scene._apply_camp_conversation_effects(fast_wine) @@ -3619,7 +3619,7 @@ func _check_bohai_branch_camp_conversations(failures: Array[String]) -> void: if not commandery_medicine.is_empty(): if secured_scene._format_talk_status_text(secured_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Bohai secured talk status should show one ready supply") - if not secured_scene._format_camp_conversation_button_text(commandery_medicine).contains("Supply Panacea"): + if not secured_scene._format_camp_conversation_button_text(commandery_medicine).contains("보급 Panacea"): failures.append("Bohai commandery medicine button should show Panacea supply") var before_panacea := int(secured_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) secured_scene._apply_camp_conversation_effects(commandery_medicine) @@ -3671,7 +3671,7 @@ func _check_liaoxi_branch_camp_conversations(failures: Array[String]) -> void: if not fast_drums.is_empty(): if pressed_scene._format_talk_status_text(pressed_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Liaoxi pressed talk status should show one ready supply") - if not pressed_scene._format_camp_conversation_button_text(fast_drums).contains("Supply War Drum"): + if not pressed_scene._format_camp_conversation_button_text(fast_drums).contains("보급 War Drum"): failures.append("Liaoxi fast drums button should show War Drum supply") var before_drums := int(pressed_scene.campaign_state.get_inventory_snapshot().get("war_drum", 0)) pressed_scene._apply_camp_conversation_effects(fast_drums) @@ -3701,7 +3701,7 @@ func _check_liaoxi_branch_camp_conversations(failures: Array[String]) -> void: if not approach_medicine.is_empty(): if secured_scene._format_talk_status_text(secured_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Liaoxi secured talk status should show one ready supply") - if not secured_scene._format_camp_conversation_button_text(approach_medicine).contains("Supply Panacea"): + if not secured_scene._format_camp_conversation_button_text(approach_medicine).contains("보급 Panacea"): failures.append("Liaoxi approach medicine button should show Panacea supply") var before_panacea := int(secured_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) secured_scene._apply_camp_conversation_effects(approach_medicine) @@ -3753,7 +3753,7 @@ func _check_white_wolf_branch_camp_conversations(failures: Array[String]) -> voi if not canteens.is_empty(): if struck_scene._format_talk_status_text(struck_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("White Wolf struck talk status should show one ready supply") - if not struck_scene._format_camp_conversation_button_text(canteens).contains("Supply Wine"): + if not struck_scene._format_camp_conversation_button_text(canteens).contains("보급 Wine"): failures.append("White Wolf canteens button should show Wine supply") var before_wine := int(struck_scene.campaign_state.get_inventory_snapshot().get("wine", 0)) struck_scene._apply_camp_conversation_effects(canteens) @@ -3783,7 +3783,7 @@ func _check_white_wolf_branch_camp_conversations(failures: Array[String]) -> voi if not medicine.is_empty(): if fortified_scene._format_talk_status_text(fortified_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("White Wolf fortified talk status should show one ready supply") - if not fortified_scene._format_camp_conversation_button_text(medicine).contains("Supply Panacea"): + if not fortified_scene._format_camp_conversation_button_text(medicine).contains("보급 Panacea"): failures.append("White Wolf medicine button should show Panacea supply") var before_panacea := int(fortified_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) fortified_scene._apply_camp_conversation_effects(medicine) @@ -3835,7 +3835,7 @@ func _check_liaodong_branch_camp_conversations(failures: Array[String]) -> void: if not hard_wine.is_empty(): if pressed_scene._format_talk_status_text(pressed_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Liaodong pressed talk status should show one ready supply") - if not pressed_scene._format_camp_conversation_button_text(hard_wine).contains("Supply Wine"): + if not pressed_scene._format_camp_conversation_button_text(hard_wine).contains("보급 Wine"): failures.append("Liaodong hard wine button should show Wine supply") var before_wine := int(pressed_scene.campaign_state.get_inventory_snapshot().get("wine", 0)) pressed_scene._apply_camp_conversation_effects(hard_wine) @@ -3865,7 +3865,7 @@ func _check_liaodong_branch_camp_conversations(failures: Array[String]) -> void: if not guide_medicine.is_empty(): if secured_scene._format_talk_status_text(secured_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Liaodong secured talk status should show one ready supply") - if not secured_scene._format_camp_conversation_button_text(guide_medicine).contains("Supply Panacea"): + if not secured_scene._format_camp_conversation_button_text(guide_medicine).contains("보급 Panacea"): failures.append("Liaodong guide medicine button should show Panacea supply") var before_panacea := int(secured_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) secured_scene._apply_camp_conversation_effects(guide_medicine) @@ -3928,7 +3928,7 @@ func _check_xinye_branch_camp_conversations(failures: Array[String]) -> void: if not ordered_medicine.is_empty(): if accepted_scene._format_talk_status_text(accepted_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Xinye accepted talk status should show one ready supply") - if not accepted_scene._format_camp_conversation_button_text(ordered_medicine).contains("Supply Panacea"): + if not accepted_scene._format_camp_conversation_button_text(ordered_medicine).contains("보급 Panacea"): failures.append("Xinye ordered medicine button should show Panacea supply") var before_panacea := int(accepted_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) accepted_scene._apply_camp_conversation_effects(ordered_medicine) @@ -3958,7 +3958,7 @@ func _check_xinye_branch_camp_conversations(failures: Array[String]) -> void: if not authority_wine.is_empty(): if authority_scene._format_talk_status_text(authority_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Xinye authority talk status should show one ready supply") - if not authority_scene._format_camp_conversation_button_text(authority_wine).contains("Supply Wine"): + if not authority_scene._format_camp_conversation_button_text(authority_wine).contains("보급 Wine"): failures.append("Xinye authority wine button should show Wine supply") var before_wine := int(authority_scene.campaign_state.get_inventory_snapshot().get("wine", 0)) authority_scene._apply_camp_conversation_effects(authority_wine) @@ -4032,7 +4032,7 @@ func _check_changban_branch_camp_conversations(failures: Array[String]) -> void: if not vanguard_rations.is_empty(): if vanguard_scene._format_talk_status_text(vanguard_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Changban vanguard talk status should show one ready supply") - if not vanguard_scene._format_camp_conversation_button_text(vanguard_rations).contains("Supply Bean"): + if not vanguard_scene._format_camp_conversation_button_text(vanguard_rations).contains("보급 Bean"): failures.append("Changban vanguard rations button should show Bean supply") var before_bean := int(vanguard_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) vanguard_scene._apply_camp_conversation_effects(vanguard_rations) @@ -4073,7 +4073,7 @@ func _check_changban_branch_camp_conversations(failures: Array[String]) -> void: if not han_medicine.is_empty(): if supply_scene._format_talk_status_text(supply_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Changban secured talk status should show one ready supply") - if not supply_scene._format_camp_conversation_button_text(han_medicine).contains("Supply Panacea"): + if not supply_scene._format_camp_conversation_button_text(han_medicine).contains("보급 Panacea"): failures.append("Changban Han medicine button should show Panacea supply") var before_panacea := int(supply_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) supply_scene._apply_camp_conversation_effects(han_medicine) @@ -4147,7 +4147,7 @@ func _check_jiangling_branch_camp_conversations(failures: Array[String]) -> void if not fast_beans.is_empty(): if chase_scene._format_talk_status_text(chase_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Jiangling chase talk status should show one ready supply") - if not chase_scene._format_camp_conversation_button_text(fast_beans).contains("Supply Bean"): + if not chase_scene._format_camp_conversation_button_text(fast_beans).contains("보급 Bean"): failures.append("Jiangling fast beans button should show Bean supply") var before_bean := int(chase_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) chase_scene._apply_camp_conversation_effects(fast_beans) @@ -4188,7 +4188,7 @@ func _check_jiangling_branch_camp_conversations(failures: Array[String]) -> void if not crossing_medicine.is_empty(): if crossings_scene._format_talk_status_text(crossings_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Jiangling crossings talk status should show one ready supply") - if not crossings_scene._format_camp_conversation_button_text(crossing_medicine).contains("Supply Panacea"): + if not crossings_scene._format_camp_conversation_button_text(crossing_medicine).contains("보급 Panacea"): failures.append("Jiangling crossing medicine button should show Panacea supply") var before_panacea := int(crossings_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) crossings_scene._apply_camp_conversation_effects(crossing_medicine) @@ -4262,7 +4262,7 @@ func _check_xiakou_branch_camp_conversations(failures: Array[String]) -> void: if not envoy_beans.is_empty(): if pursuit_scene._format_talk_status_text(pursuit_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Xiakou pursuit talk status should show one ready supply") - if not pursuit_scene._format_camp_conversation_button_text(envoy_beans).contains("Supply Bean"): + if not pursuit_scene._format_camp_conversation_button_text(envoy_beans).contains("보급 Bean"): failures.append("Xiakou envoy beans button should show Bean supply") var before_bean := int(pursuit_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) pursuit_scene._apply_camp_conversation_effects(envoy_beans) @@ -4303,7 +4303,7 @@ func _check_xiakou_branch_camp_conversations(failures: Array[String]) -> void: if not storehouse_medicine.is_empty(): if storehouse_scene._format_talk_status_text(storehouse_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Xiakou storehouse talk status should show one ready supply") - if not storehouse_scene._format_camp_conversation_button_text(storehouse_medicine).contains("Supply Panacea"): + if not storehouse_scene._format_camp_conversation_button_text(storehouse_medicine).contains("보급 Panacea"): failures.append("Xiakou storehouse medicine button should show Panacea supply") var before_panacea := int(storehouse_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) storehouse_scene._apply_camp_conversation_effects(storehouse_medicine) @@ -4377,7 +4377,7 @@ func _check_red_cliffs_branch_camp_conversations(failures: Array[String]) -> voi if not forward_beans.is_empty(): if pressed_scene._format_talk_status_text(pressed_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Red Cliffs pressed talk status should show one ready supply") - if not pressed_scene._format_camp_conversation_button_text(forward_beans).contains("Supply Bean"): + if not pressed_scene._format_camp_conversation_button_text(forward_beans).contains("보급 Bean"): failures.append("Red Cliffs forward beans button should show Bean supply") var before_bean := int(pressed_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) pressed_scene._apply_camp_conversation_effects(forward_beans) @@ -4418,7 +4418,7 @@ func _check_red_cliffs_branch_camp_conversations(failures: Array[String]) -> voi if not harbor_medicine.is_empty(): if harbor_scene._format_talk_status_text(harbor_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Red Cliffs harbor talk status should show one ready supply") - if not harbor_scene._format_camp_conversation_button_text(harbor_medicine).contains("Supply Panacea"): + if not harbor_scene._format_camp_conversation_button_text(harbor_medicine).contains("보급 Panacea"): failures.append("Red Cliffs harbor medicine button should show Panacea supply") var before_panacea := int(harbor_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) harbor_scene._apply_camp_conversation_effects(harbor_medicine) @@ -4492,7 +4492,7 @@ func _check_red_cliffs_fire_branch_camp_conversations(failures: Array[String]) - if not chain_medicine.is_empty(): if chain_scene._format_talk_status_text(chain_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Red Cliffs Fire chain talk status should show one ready supply") - if not chain_scene._format_camp_conversation_button_text(chain_medicine).contains("Supply Panacea"): + if not chain_scene._format_camp_conversation_button_text(chain_medicine).contains("보급 Panacea"): failures.append("Red Cliffs Fire chain medicine button should show Panacea supply") var before_panacea := int(chain_scene.campaign_state.get_inventory_snapshot().get("panacea", 0)) chain_scene._apply_camp_conversation_effects(chain_medicine) @@ -4533,7 +4533,7 @@ func _check_red_cliffs_fire_branch_camp_conversations(failures: Array[String]) - if not night_beans.is_empty(): if raid_scene._format_talk_status_text(raid_scene._camp_conversation_entries()) != "Camp conversations | 3 topics | 1 supplies ready": failures.append("Red Cliffs Fire night raid talk status should show one ready supply") - if not raid_scene._format_camp_conversation_button_text(night_beans).contains("Supply Bean"): + if not raid_scene._format_camp_conversation_button_text(night_beans).contains("보급 Bean"): failures.append("Red Cliffs Fire night beans button should show Bean supply") var before_bean := int(raid_scene.campaign_state.get_inventory_snapshot().get("bean", 0)) raid_scene._apply_camp_conversation_effects(night_beans) diff --git a/tools/smoke_objective_progress.gd b/tools/smoke_objective_progress.gd index b8a981f..ded0f40 100644 --- a/tools/smoke_objective_progress.gd +++ b/tools/smoke_objective_progress.gd @@ -211,16 +211,16 @@ func _check_objective_notice(failures: Array[String]) -> void: scene._on_objective_updated("Defeat the new vanguard.", "") if scene.objective_notice_panel == null or not scene.objective_notice_panel.visible: failures.append("objective notice panel should be visible after objective update") - elif not scene.objective_notice_label.text.contains("New Sealed Edict") or not scene.objective_notice_label.text.contains("Bronze Edict: Defeat the new vanguard."): + elif not scene.objective_notice_label.text.contains("새 조서 봉인") or not scene.objective_notice_label.text.contains("승리 조서: Defeat the new vanguard."): failures.append("objective notice label should use sealed edict wording: %s" % scene.objective_notice_label.text) scene._on_objective_updated("", "Supply train is lost.") if scene.objective_notice_panel == null or not scene.objective_notice_panel.visible: failures.append("objective notice panel should be visible after defeat update") - elif not scene.objective_notice_label.text.contains("New Sealed Edict") or not scene.objective_notice_label.text.contains("Black Omen: Supply train is lost."): + elif not scene.objective_notice_label.text.contains("새 조서 봉인") or not scene.objective_notice_label.text.contains("패배 흉조: Supply train is lost."): failures.append("objective notice label should use omen wording: %s" % scene.objective_notice_label.text) - if scene._format_log_entry_text("Objective updated: Defeat the new vanguard.") != "Edict amended: Defeat the new vanguard.": + if scene._format_log_entry_text("Objective updated: Defeat the new vanguard.") != "조서 개정: Defeat the new vanguard.": failures.append("objective log display should use edict wording") - if scene._format_log_entry_text("Defeat condition updated: Supply train is lost.") != "Omen amended: Supply train is lost.": + if scene._format_log_entry_text("Defeat condition updated: Supply train is lost.") != "흉조 개정: Supply train is lost.": failures.append("defeat log display should use omen wording") if scene.objective_notice_timer <= 0.0: failures.append("objective notice timer should be active") diff --git a/tools/smoke_result_summary.gd b/tools/smoke_result_summary.gd index cb2da36..5253f78 100644 --- a/tools/smoke_result_summary.gd +++ b/tools/smoke_result_summary.gd @@ -35,18 +35,18 @@ func _init() -> void: "choice_label": "" } var result_text: String = scene._format_battle_result_summary() - _check_contains(failures, "reward section", result_text, "Spoils") - _check_contains(failures, "gold reward", result_text, "Gold +100") + _check_contains(failures, "reward section", result_text, "전리품") + _check_contains(failures, "gold reward", result_text, "군자금 +100") _check_contains(failures, "item reward", result_text, "Bean x2") - _check_contains(failures, "roster section", result_text, "Joined: Dian Wei") + _check_contains(failures, "roster section", result_text, "합류: Dian Wei") _check_contains(failures, "growth section", result_text, "Cao Cao Lv.2") - _check_contains(failures, "campaign section", result_text, "Next March: Sishui Gate") - _check_contains(failures, "next camp section", result_text, "Next Encampment") + _check_contains(failures, "campaign section", result_text, "다음 행군: Sishui Gate") + _check_contains(failures, "next camp section", result_text, "다음 군막") _check_contains(failures, "next camp location", result_text, "Sishui Gate, 190 CE") - _check_contains(failures, "next camp talk", result_text, "War Council 3") - _check_contains(failures, "next camp shop", result_text, "Sutler 6 goods") - _check_contains(failures, "next camp deploy", result_text, "Muster Roll 2/3") - _check_contains(failures, "next camp formation", result_text, "Battle Array 6 tiles") + _check_contains(failures, "next camp talk", result_text, "군막 회의 3") + _check_contains(failures, "next camp shop", result_text, "군상 물품 6") + _check_contains(failures, "next camp deploy", result_text, "출진 명부 2/3") + _check_contains(failures, "next camp formation", result_text, "진형 배치 6칸") scene.battle_result_summary = { "saved": false, @@ -63,8 +63,8 @@ func _init() -> void: "choice_label": "" } var failed_save_text: String = scene._format_battle_result_summary() - _check_contains(failures, "failed rewards", failed_save_text, "Not recorded") - _check_contains(failures, "failed save", failed_save_text, "Chronicle seal failed") + _check_contains(failures, "failed rewards", failed_save_text, "아직 기록되지 않음") + _check_contains(failures, "failed save", failed_save_text, "전기 봉인 실패") scene.battle_result_summary = { "saved": true, @@ -77,13 +77,13 @@ func _init() -> void: failures, "pending choice prompt", pending_choice_text, - "Select a response" + "응답을 고르십시오" ) _check_not_contains( failures, "pending choice should wait for response before next camp preview", pending_choice_text, - "Next Encampment" + "다음 군막" ) scene.battle_result_summary = { @@ -95,7 +95,7 @@ func _init() -> void: failures, "replay rewards", scene._format_battle_result_summary(), - "Already claimed" + "이미 수령" ) var choice_text: String = scene._format_post_battle_choice_reward_text({ @@ -105,7 +105,7 @@ func _init() -> void: }) _check_contains(failures, "choice gold", choice_text, "+50G") _check_contains(failures, "choice item", choice_text, "War Axe") - _check_contains(failures, "choice join", choice_text, "Join Dian Wei") + _check_contains(failures, "choice join", choice_text, "합류 Dian Wei") if failures.is_empty(): scene.free() diff --git a/tools/smoke_visual_assets.gd b/tools/smoke_visual_assets.gd index 28c4028..8c3ecae 100644 --- a/tools/smoke_visual_assets.gd +++ b/tools/smoke_visual_assets.gd @@ -2160,13 +2160,13 @@ func _check_scene_texture_loading(failures: Array[String]) -> void: var cache := scene._camp_conversation_by_id("northern_woods_cache") if cache.is_empty(): failures.append("battle scene should find cache camp conversation by id") - elif not scene._format_camp_conversation_button_text(cache).contains("Supply Bean"): + elif not scene._format_camp_conversation_button_text(cache).contains("보급 Bean"): failures.append("camp conversation button text should preview supply effect") var merchant_notice := scene._format_shop_merchant_notice_text(scene.state.get_shop_merchant()) if not merchant_notice.contains("Camp Merchant") or not merchant_notice.contains("Roadside stores"): 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 ["Yingchuan, 184 CE", "War Chest 0G", "War Council 3", "1 supply", "Sutler 2 goods", "Muster Roll 2/2", "Battle Array 4 tiles", "Armory stocked"]: + for expected in ["Yingchuan, 184 CE", "군자금 0G", "군막 회의 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") @@ -2231,7 +2231,7 @@ func _check_hud_focus_text(failures: Array[String]) -> void: failures.append("Cao Cao HUD focus should describe command role: %s" % cao_text) if not cao_text.contains("March 4 (Foot)") or not cao_text.contains("Strike reach 1-1"): failures.append("Cao Cao HUD focus should clarify move/attack affordance: %s" % cao_text) - if not cao_text.contains("Command:") or not cao_text.contains("March") or not cao_text.contains("Strike") or not cao_text.contains("Stratagem") or not cao_text.contains("Arms") or not cao_text.contains("Hold"): + if not cao_text.contains("군령:") or not cao_text.contains("March") or not cao_text.contains("Strike") or not cao_text.contains("책략") or not cao_text.contains("병장") or not cao_text.contains("대기"): failures.append("Cao Cao HUD focus should summarize available actions: %s" % cao_text) if not cao_text.contains("Ground 2,4"): failures.append("Cao Cao HUD focus should include current tile: %s" % cao_text) @@ -2250,7 +2250,7 @@ func _check_hud_focus_text(failures: Array[String]) -> void: failures.append("Archer HUD focus should describe ranged role: %s" % archer_text) if not archer_text.contains("March 4 (Archer)") or not archer_text.contains("Strike reach 2-2"): failures.append("Archer HUD focus should clarify ranged attack affordance: %s" % archer_text) - if not archer_text.contains("Command: Enemy banner"): + if not archer_text.contains("군령: 적군 군기"): failures.append("Enemy archer HUD focus should describe enemy control: %s" % archer_text) if not scene._unit_current_terrain_text(archer).contains("Plain"): failures.append("Archer terrain text should reflect its current plain tile") @@ -2265,32 +2265,32 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void: scene.free() return var briefing_text := scene._format_briefing_objectives() - for expected in ["Imperial Victory Edict:", "Defeat Omen:", "Bamboo Battle Register:", "Ominous Signs:", "Spoils Seal:"]: + for expected in ["승리 조서:", "패배 흉조:", "전공 죽간:", "흉조 징후:", "전리품 봉인:"]: if not briefing_text.contains(expected): failures.append("briefing objective parchment should use ancient heading `%s`: %s" % [expected, briefing_text]) var hud_objective := scene._format_objective_hud_text() - if not hud_objective.contains("Bronze Edict:") or not hud_objective.contains("Black Omen:"): + 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) var mission_text := scene._format_mission_panel_text() - for expected in ["Bronze Edict:", "Black Omen:", "Bamboo Register:", "Ominous Signs:"]: + for expected in ["승리 조서", "패배 흉조", "전공 죽간", "흉조 징후"]: if not mission_text.contains(expected): failures.append("mission panel should use old campaign wording `%s`: %s" % [expected, mission_text]) - _check_panel_style_fill(failures, scene.briefing_panel, "briefing panel", Color(0.49, 0.37, 0.21, 0.992)) + _check_panel_style_fill(failures, scene.briefing_panel, "briefing panel", Color(0.72, 0.60, 0.39, 0.995)) _check_panel_style_frame(failures, scene.briefing_panel, "briefing panel", Color(0.035, 0.018, 0.012, 1.0), 6) - _check_panel_style_fill(failures, scene.briefing_objective_panel, "briefing objective edict panel", Color(0.67, 0.53, 0.31, 0.995)) - _check_panel_style_frame(failures, scene.briefing_objective_panel, "briefing objective edict panel", Color(0.035, 0.018, 0.012, 1.0), 4) + _check_panel_style_fill(failures, scene.briefing_objective_panel, "briefing objective edict panel", Color(0.76, 0.63, 0.40, 0.995)) + _check_panel_style_frame(failures, scene.briefing_objective_panel, "briefing objective edict panel", Color(0.28, 0.020, 0.014, 1.0), 4) _check_panel_style_fill(failures, scene.dialogue_panel, "dialogue panel", Color(0.052, 0.022, 0.014, 0.995)) - _check_panel_style_frame(failures, scene.dialogue_panel, "dialogue panel", Color(0.50, 0.36, 0.16, 1.0), 6) + _check_panel_style_frame(failures, scene.dialogue_panel, "dialogue panel", Color(0.12, 0.36, 0.25, 1.0), 6) _check_panel_style_fill(failures, scene.dialogue_portrait_panel, "dialogue portrait panel", Color(0.055, 0.025, 0.016, 1.0)) - _check_panel_style_fill(failures, scene.dialogue_speaker_panel, "dialogue speaker seal panel", Color(0.36, 0.030, 0.018, 1.0)) - _check_panel_style_fill(failures, scene.dialogue_text_panel, "dialogue text scroll panel", Color(0.69, 0.55, 0.32, 0.995)) + _check_panel_style_fill(failures, scene.dialogue_speaker_panel, "dialogue speaker seal panel", Color(0.28, 0.020, 0.014, 1.0)) + _check_panel_style_fill(failures, scene.dialogue_text_panel, "dialogue text scroll panel", Color(0.75, 0.62, 0.39, 0.995)) _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_dialogue_column_budget(failures, scene) - if scene.dialogue_continue_button == null or scene.dialogue_continue_button.text != "Next Slip": + 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 != "Earlier Slip": + if scene.dialogue_previous_button == null or scene.dialogue_previous_button.text != "이전 죽간": failures.append("dialogue previous button should use ancient slip text") if scene._ui_font(false) == null: failures.append("ancient UI regular font should load from project assets") @@ -2306,31 +2306,31 @@ 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 != "Bronze Mandate Tablet": + if scene.mission_title_label == null or scene.mission_title_label.text != "군령 목패": failures.append("mission panel title should use bronze tablet wording") - if scene.shop_button == null or scene.shop_button.text != "Sutler": + 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 != "War Council": + if scene.talk_button == null or scene.talk_button.text != "군막 회의": failures.append("briefing talk button should use war council wording") - if scene.formation_button == null or scene.formation_button.text != "Battle Array": + if scene.formation_button == null or scene.formation_button.text != "진형 배치": failures.append("briefing formation button should use battle array wording") - if scene.post_move_title_label == null or scene.post_move_title_label.text != "Issue Order": + if scene.post_move_title_label == null or scene.post_move_title_label.text != "군령 선택": failures.append("post-move command title should use order wording") - if scene.post_move_cancel_button == null or scene.post_move_cancel_button.text != "Recall Step": + if scene.post_move_cancel_button == null or scene.post_move_cancel_button.text != "발걸음 거두기": failures.append("post-move cancel button should use recall step wording") - if scene.post_move_picker_back_button == null or scene.post_move_picker_back_button.text != "Return": + if scene.post_move_picker_back_button == null or scene.post_move_picker_back_button.text != "돌아가기": failures.append("post-move picker back button should use return wording") - if scene.targeting_hint_title_label == null or scene.targeting_hint_title_label.text != "Mark Foe": + if scene.targeting_hint_title_label == null or scene.targeting_hint_title_label.text != "적장 지목": failures.append("targeting hint title should use mark foe wording") - if scene.targeting_hint_back_button == null or scene.targeting_hint_back_button.text != "Return": + if scene.targeting_hint_back_button == null or scene.targeting_hint_back_button.text != "돌아가기": failures.append("targeting hint back button should use return 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 != "Silk War Map": + 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") - _check_panel_style_fill(failures, scene.result_panel, "result panel", Color(0.45, 0.34, 0.20, 0.992)) - if not scene._format_victory_result_text().contains("Bronze Victory Proclamation"): + _check_panel_style_fill(failures, scene.result_panel, "result panel", Color(0.54, 0.43, 0.27, 0.992)) + 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("Defeat Memorial Tablet"): + if not scene._format_defeat_result_text().contains("패전 비문"): failures.append("defeat result should read like a memorial tablet") var scroll_rod := scene._make_scroll_rod(120, 4) if scroll_rod.get_child_count() != 5: @@ -2431,7 +2431,7 @@ func _check_action_button_disabled_reasons(failures: Array[String]) -> void: "remaining_phases": 2 }] scene._update_tactic_button(cao_cao) - if scene.tactic_button.text != "Stratagem - Sealed" or not scene.tactic_button.tooltip_text.to_lower().contains("sealed"): + if scene.tactic_button.text != "책략 - 봉인됨" or not scene.tactic_button.tooltip_text.contains("책략"): failures.append("sealed unit should explain disabled tactic button: %s | %s" % [scene.tactic_button.text, scene.tactic_button.tooltip_text]) cao_cao["status_effects"] = [] @@ -2440,36 +2440,36 @@ func _check_action_button_disabled_reasons(failures: Array[String]) -> void: scene._update_tactic_button(cao_cao) scene._update_item_button(cao_cao) scene._update_equip_button(cao_cao) - if not scene.wait_button.text.contains("Sealed"): + if not scene.wait_button.text.contains("봉인됨"): failures.append("acted unit hold button should show Sealed: %s" % scene.wait_button.text) - if not scene.tactic_button.text.contains("Sealed"): + if not scene.tactic_button.text.contains("봉인됨"): failures.append("acted unit stratagem button should show Sealed: %s" % scene.tactic_button.text) - if not scene.item_button.text.contains("Sealed"): + if not scene.item_button.text.contains("봉인됨"): failures.append("acted unit supply button should show Sealed: %s" % scene.item_button.text) - if not scene.equip_button.text.contains("Sealed"): + if not scene.equip_button.text.contains("봉인됨"): failures.append("acted unit arms button should show Sealed: %s" % scene.equip_button.text) cao_cao["acted"] = false cao_cao["moved"] = true scene._update_equip_button(cao_cao) - if scene.equip_button.text != "Arms - Marched" or not scene.equip_button.tooltip_text.to_lower().contains("before"): + if scene.equip_button.text != "병장 - 행군 후" or not scene.equip_button.tooltip_text.contains("행군 전"): failures.append("moved unit should explain disabled equip button: %s | %s" % [scene.equip_button.text, scene.equip_button.tooltip_text]) cao_cao["moved"] = false scene.state.set_inventory_snapshot({}) scene._update_item_button(cao_cao) - if scene.item_button.text != "Supply - Empty" or not scene.item_button.tooltip_text.to_lower().contains("no field supplies"): + if scene.item_button.text != "도구 - 비어 있음" or not scene.item_button.tooltip_text.contains("도구"): failures.append("empty inventory should explain disabled item button: %s | %s" % [scene.item_button.text, scene.item_button.tooltip_text]) scene.state.current_team = BattleState.TEAM_ENEMY scene._update_end_turn_button() - if scene.end_turn_button.text != "Pass Command - Enemy Phase" or not scene.end_turn_button.tooltip_text.to_lower().contains("player command phase"): + if scene.end_turn_button.text != "차례 종료 - 적군 차례" or not scene.end_turn_button.tooltip_text.contains("아군 군령"): failures.append("enemy phase should explain disabled end turn button: %s | %s" % [scene.end_turn_button.text, scene.end_turn_button.tooltip_text]) scene.state.current_team = BattleState.TEAM_PLAYER scene.battle_started = false scene._update_threat_button() - if scene.threat_button.text != "Enemy Lines - Unroll Map" or not scene.threat_button.tooltip_text.to_lower().contains("unroll"): + if scene.threat_button.text != "적진 - 전장도 미개봉" or not scene.threat_button.tooltip_text.contains("전장도"): failures.append("inactive battle should explain disabled threat button: %s | %s" % [scene.threat_button.text, scene.threat_button.tooltip_text]) _free_action_button_test_scene(scene)