From d0bfcbc90a4b579d863c02fad3855ff52f23d690 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sat, 20 Jun 2026 14:55:19 +0900 Subject: [PATCH] Bridge opening battle story into tactics --- README.md | 2 +- data/scenarios/001_yellow_turbans.json | 8 +++++++- tools/smoke_chapter_one_polish.gd | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 18a7f7c..719eea8 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Godot 4 tactical RPG prototype inspired by classic turn-based Romance of the Thr - Scenario-specific pre-battle shop purchases, optional finite shop stock, and 50% sell-back save immediately and sync into the upcoming battle inventory. - Pre-battle shop rows emphasize item artwork, compact price/status badges, and hover details instead of dense inline text. - Pre-battle Talk can list scenario camp conversations by officer or topic with portrait rows, compact topic/supply badges, hover dialogue previews, saved-branch filtering, one-time pre-battle supplies, and merchant flavor lines before a battle. -- The opening battle's camp now includes a villager route report that frames the castle, village recovery point, and enemy approach before combat starts. +- The opening battle's camp and battle-opening dialogue now include a villager route report that frames the castle, village recovery point, lure line, and northern supply cache before combat starts. - The opening battle now uses a dedicated high-resolution Yingchuan battlefield backdrop, clearer generated terrain-cell texture overlays, image-first recovery/supply/tactic tile markers, no text class boxes on units, quieter objective progress text, and a pulled-back enemy line so the player can lure and form up before the first clash. - The opening victory dialogue now bridges Xiahou Yuan and Cao Ren's join into the Sishui Gate march against Hua Xiong. - Sishui Gate now opens with camp dialogue that turns the coalition briefing into a spoken march order. diff --git a/data/scenarios/001_yellow_turbans.json b/data/scenarios/001_yellow_turbans.json index 86e143a..ccbdc82 100644 --- a/data/scenarios/001_yellow_turbans.json +++ b/data/scenarios/001_yellow_turbans.json @@ -707,11 +707,17 @@ "side": "left", "text": "두 사람은 작은 병력을 이끌고 황건의 깃발이 걸린 들판으로 향했다. 첫 군령은 여기서 시작된다." }, + { + "speaker": "Yingchuan Villager", + "display_speaker": "영천 백성", + "side": "right", + "text": "장군, 마을 우물가에는 다친 이를 돌볼 약이 남아 있습니다. 북쪽 숲에는 황건병이 미처 옮기지 못한 보급 수레가 있다는 말도 들었습니다." + }, { "speaker": "Cao Cao", "display_speaker": "조조", "side": "left", - "text": "황건의 깃발은 마을 뒤 성채에 기대어 서 있다. 들판의 잔병을 먼저 끊고 성채로 길을 열어라." + "text": "좋다. 마을을 등지고 유인선까지만 적 앞줄을 끌어낸다. 성채로 곧장 달리지 말고, 길목과 숲의 보급을 함께 살펴라." }, { "speaker": "Zhang Mancheng", diff --git a/tools/smoke_chapter_one_polish.gd b/tools/smoke_chapter_one_polish.gd index 0b787e3..5f752c7 100644 --- a/tools/smoke_chapter_one_polish.gd +++ b/tools/smoke_chapter_one_polish.gd @@ -916,6 +916,9 @@ func _check_opening_battle_event_dialogue_structure(failures: Array[String]) -> var opening_text := _event_dialogue_text(opening_event) if not opening_text.contains("젊은 조조") or not opening_text.contains("하후돈") or not opening_text.contains("첫 군령"): failures.append("opening battle should first explain Cao Cao, Xiahou Dun, and why the first battle begins") + for tactical_context in ["마을 우물", "북쪽 숲", "유인선", "성채"]: + if not opening_text.contains(tactical_context): + failures.append("opening battle dialogue should bridge story into tactical context `%s`: %s" % [tactical_context, opening_text]) if opening_text.find("젊은 조조") > opening_text.find("황건의 깃발"): failures.append("opening battle prologue should come before the tactical battlefield order") var boss_event := _event_by_id(state, "zhang_mancheng_falls")