From 931e7e2fb847160b636949e51102bd529ce63a1e Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sat, 4 Jul 2026 17:14:07 +0900 Subject: [PATCH] Refine Liu Biao refuge battle flow --- src/game/data/battles.ts | 110 +++++++++++++++++++++++++++++++--- src/game/data/campaignFlow.ts | 2 +- src/game/data/scenario.ts | 19 +++--- src/game/scenes/CampScene.ts | 14 ++--- 4 files changed, 118 insertions(+), 27 deletions(-) diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index 32e0408..1bf9b7b 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -2118,16 +2118,89 @@ export const sixteenthBattleScenario: BattleScenarioDefinition = { victoryConditionLabel: '조인 격파', defeatConditionLabel: '유비 퇴각', openingObjectiveLines: [ - '원소 진영을 떠난 유비군은 형주의 유표에게 의탁하기 위해 남쪽 길을 엽니다. 조운이 합류했지만 조조군 추격대도 형주 관문 앞에 따라붙었습니다.', - '중앙 강줄기와 숲길은 행군을 늦추고, 동쪽 관문은 수비병과 궁병이 지키고 있습니다. 조운의 기동력과 책사들의 지원을 함께 활용하십시오.', - '조인을 격파하고 형주 관문을 확보하십시오. 25턴 안에 승리하면 유비군의 의탁 명분과 군자금을 더 단단히 챙길 수 있습니다.' + '원소 진영을 오래 빌릴 수 없게 된 유비군은 형주의 유표에게 의탁하기 위해 다시 남쪽 길을 잡습니다. 조운이 재합류했지만 조조군 추격대도 강가 관문 앞에 따라붙었습니다.', + '중앙 강줄기 옆 접선로를 열어 유표의 사자에게 통행 명분을 보이고, 조운은 길게 늘어진 추격 기병을 끊어야 합니다. 관우와 장비는 관문 앞 수비선을 흔드십시오.', + '조인을 격파하고 형주 관문을 확보하십시오. 58턴 안에 승리하면 유비군의 형주 의탁 명분과 다음 융중 방문 준비가 더 단단해집니다.' ], + tacticalGuide: { + summary: '서남 진영에서 중앙 강가 접선로를 열고, 조운으로 추격 기병을 끊은 뒤 동쪽 형주 관문까지 밀고 가는 의탁 전투입니다.', + route: '서남 진영 → 중앙 강가 접선로 → 형주 관문 → 유표 사자 접촉', + focus: + '조인만 향해 달리면 강가 기병과 관문 궁병이 후방을 끊습니다. 조운은 중앙 길의 기병을 빠르게 받아치고, 관우와 장비는 관문 앞 수비선을 나누어 밀며, 손건은 유표 측 접선 문서를 끝까지 지켜야 합니다.', + roles: [ + '유비: 형주 의탁 명분 유지와 생존', + '조운: 중앙 강가 추격 기병 차단', + '관우: 관문 수비대 정면 돌파', + '장비: 남쪽 길목 압박과 후방 차단', + '손건: 유표 사자 접선 문서 정리', + '미축: 긴 행군 보급과 회복 유지' + ], + events: { + 'village-approach': { + title: '형주 사자 접선로 접근', + lines: [ + '이 강가 길목을 잡으면 유표의 사자에게 닿는 명분로가 열립니다.', + '조운으로 추격 기병을 먼저 끊고 손건의 문서를 앞으로 올리면, 관문 돌파가 단순 도주가 아니라 의탁의 형식이 됩니다.' + ] + }, + 'enemy-posture': { + title: '조인의 관문 봉쇄', + lines: [ + '조인은 형주 관문 앞에 수비병과 궁병을 세우고, 기병으로 중앙 강가 길을 물려 합니다.', + '관우는 관문 전열을 누르고, 장비는 남쪽 길을 흔들며, 조운은 기병이 유비의 뒤를 물기 전에 잘라 내십시오.' + ] + }, + 'cavalry-approach': { + title: '추격 기병 접근', + lines: [ + '조조군 기병이 강가 길을 타고 빠르게 붙습니다.', + '새로 합류한 조운을 중앙에 세우면 기병을 먼저 끊고 아군 전열이 관문 앞까지 안정적으로 전진할 수 있습니다.' + ] + }, + 'leader-wavering': { + title: '조인의 봉쇄선 동요', + lines: [ + '접선로와 관문 수비선이 동시에 흔들리자 조인의 추격 명분도 약해지고 있습니다.', + '유비를 무리하게 앞세우지 말고, 조운과 관우가 길을 연 뒤 손건이 접선 명분을 마무리하십시오.' + ] + } + } + }, + sortie: { + sortieLimit: 6, + requiredUnits: ['liu-bei'], + recommendedUnits: [ + { unitId: 'liu-bei', role: 'support', reason: '형주 의탁 명분과 생존 조건을 모두 짊어집니다. 후방 지휘에 둡니다.' }, + { unitId: 'zhao-yun', role: 'flank', reason: '새로 합류한 백마 기병으로 중앙 강가 길의 추격 기병을 빠르게 끊습니다.' }, + { unitId: 'guan-yu', role: 'front', reason: '형주 관문 수비대를 정면에서 밀어낼 핵심 전열입니다.' }, + { unitId: 'zhang-fei', role: 'flank', reason: '남쪽 길목을 압박해 조인의 수비선이 한곳에 모이지 못하게 합니다.' }, + { unitId: 'sun-qian', role: 'support', reason: '유표 사자와의 접선 문서를 정리해 관문 확보 목표에 직접 힘을 보탭니다.' }, + { unitId: 'mi-zhu', role: 'reserve', reason: '긴 행군과 관문전의 피해 누적을 회복품과 보급으로 줄입니다.' } + ], + recommendedClasses: [ + { label: '의탁 지휘', classKeys: ['lord'], reason: '유비 생존과 전후 명분이 형주 의탁 흐름의 중심입니다.' }, + { label: '관문 전열', classKeys: ['infantry'], reason: '동쪽 관문 수비대와 조인의 전열을 안정적으로 밀 수 있습니다.' }, + { label: '기병 차단', classKeys: ['cavalry'], reason: '중앙 강가 길을 따라 붙는 추격 기병을 조운이 빠르게 끊을 수 있습니다.' }, + { label: '측면 압박', classKeys: ['spearman'], reason: '남쪽 길목의 기병과 보병을 받아치며 관문 수비선을 흔들기 좋습니다.' }, + { label: '접선 문서', classKeys: ['strategist'], reason: '유표 사자와의 접선 명분, 궁병 견제, 책략 지원이 함께 필요합니다.' }, + { label: '보급 유지', classKeys: ['quartermaster'], reason: '긴 의탁로에서는 회복과 소모품 배분이 다음 전투 여유로 이어집니다.' } + ], + deploymentSlots: [ + { role: 'support', unitId: 'liu-bei', x: 3, y: 20, label: '후방 지휘' }, + { role: 'front', unitId: 'guan-yu', x: 4, y: 19, label: '관문 전열' }, + { role: 'flank', unitId: 'zhang-fei', x: 4, y: 21, label: '남쪽 압박' }, + { role: 'flank', unitId: 'zhao-yun', x: 6, y: 21, label: '기병 차단' }, + { role: 'support', unitId: 'sun-qian', x: 5, y: 20, label: '접선 문서' }, + { role: 'reserve', unitId: 'mi-zhu', x: 3, y: 22, label: '보급 유지' } + ], + note: '유표 의탁로는 새로 합류한 조운의 기동력을 처음 체감하는 전투입니다. 중앙 강가 접선로를 조운이 열고, 관우와 장비가 관문 앞 수비선을 나누어 밀며, 손건과 미축이 의탁 명분과 보급을 받치는 편성이 안정적입니다.' + }, map: sixteenthBattleMap, units: sixteenthBattleUnits, bonds: sixteenthBattleBonds, mapTextureKey: 'battle-map-sixteenth', leaderUnitId: 'liu-biao-road-leader-cao-ren', - quickVictoryTurnLimit: 25, + quickVictoryTurnLimit: 58, baseVictoryGold: 1880, objectives: [ { @@ -2144,23 +2217,42 @@ export const sixteenthBattleScenario: BattleScenarioDefinition = { rewardGold: 420, unitId: 'liu-bei' }, + { + id: 'jingzhou-rendezvous', + kind: 'secure-terrain', + label: '형주 사자 접선로 확보', + rewardGold: 560, + terrain: 'village', + targetTile: { x: 22, y: 10, radius: 3 }, + threatRadius: 0 + }, { id: 'jingzhou-gate', kind: 'secure-terrain', label: '형주 관문 확보', - rewardGold: 680, - terrain: 'fort' + rewardGold: 720, + terrain: 'fort', + targetTile: { x: 31, y: 14, radius: 4 }, + threatRadius: 0 }, { id: 'quick', kind: 'quick-victory', - label: '25턴 이내 승리', + label: '58턴 이내 승리', rewardGold: 540, - maxTurn: 25 + maxTurn: 58 } ], defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }], - itemRewards: ['콩 6', '상처약 5', '탁주 2', '형주 접선 문서 +1'], + itemRewards: ['콩 6', '상처약 5', '탁주 2', '유표 객장 서찰 +1'], + campaignReward: { + supplies: ['콩 6', '상처약 5', '탁주 2'], + equipment: ['유표 객장 서찰 1'], + reputation: ['형주 의탁 명분 +1', '조운 재합류 전공 +1'], + unlockBattleId: 'seventeenth-battle-wolong-visit-road', + unlockLabel: '융중 방문로 개방', + note: '중앙 접선로와 형주 관문을 함께 확보해 유표의 객장으로 들어갈 명분을 얻고, 조운의 기동 전공이 유비군의 새 전열로 자리 잡습니다.' + }, victoryPages: sixteenthBattleVictoryPages, nextCampScene: 'CampScene' }; diff --git a/src/game/data/campaignFlow.ts b/src/game/data/campaignFlow.ts index 3d8cce5..d54fb38 100644 --- a/src/game/data/campaignFlow.ts +++ b/src/game/data/campaignFlow.ts @@ -379,7 +379,7 @@ const sortieFlows: Record = { title: seventeenthBattleScenario.title, description: '유표에게 의탁한 유비군은 형주에서 숨을 돌리지만, 손님으로 머무는 것만으로 천하의 길을 열 수는 없습니다. 형주에서 모은 와룡의 단서를 따라 융중으로 향해야 합니다.', - rewardHint: `예상 보상: ${seventeenthBattleScenario.title} 개방 / 제갈량 영입`, + rewardHint: `예상 보상: ${seventeenthBattleScenario.title} 개방 / 와룡 단서`, nextBattleId: seventeenthBattleScenario.id, campaignStep: 'seventeenth-battle', pages: [...sixteenthBattleVictoryPages, ...seventeenthBattleIntroPages] diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index 688084c..cf81182 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -1328,7 +1328,7 @@ export const sixteenthBattleIntroPages: StoryPage[] = [ chapter: '원소 진영의 그림자', background: 'story-wolong', speaker: '간옹', - text: '원소의 군막은 넓지만, 그 안에서는 말 한마디가 칼보다 빠르게 옮겨집니다. 조조를 떠난 유비군을 오래 품으려는 자도, 조조에게 빌미를 주지 않으려는 자도 모두 눈치를 보고 있습니다.' + text: '원소의 군막은 넓지만, 그 안에서는 말 한마디가 칼보다 빠르게 옮겨집니다. 조조의 눈치를 보는 자가 늘었으니, 여기 오래 머물면 의탁이 아니라 볼모가 될 수 있습니다.' }, { id: 'sixteenth-zhao-yun-returns', @@ -1336,7 +1336,7 @@ export const sixteenthBattleIntroPages: StoryPage[] = [ chapter: '백마의 재회', background: 'story-wolong', speaker: '조운', - text: '공손찬 장군의 군세가 흩어진 뒤에도 주공의 의리를 잊지 않았습니다. 오늘부터 이 조자룡의 창은 백성을 버리지 않는 군주를 위해 달리겠습니다.' + text: '공손찬 장군의 군세가 흩어진 뒤에도 주공의 의리를 잊지 않았습니다. 강가 추격로는 제가 먼저 달려 끊겠습니다. 주공께서는 형주로 들어갈 명분을 잃지 마십시오.' }, { id: 'sixteenth-liu-biao-road', @@ -1345,16 +1345,15 @@ export const sixteenthBattleIntroPages: StoryPage[] = [ background: 'story-wolong', speaker: '유비', portrait: 'liuBei', - text: '원소의 장막 아래 머무는 것은 잠시 몸을 숨기는 일일 뿐, 뜻을 세울 땅은 되지 못한다. 형주의 유표에게 의탁해 백성을 거둘 길을 다시 찾아야 하오.' + text: '원소의 장막 아래 머무는 것은 잠시 몸을 숨기는 일일 뿐, 뜻을 세울 땅은 되지 못한다. 형주의 유표에게 의탁하려면 도망치듯 들어가서는 안 된다. 접선 문서와 예를 갖춰 길을 열어야 하오.' }, { id: 'sixteenth-jingzhou-road-sortie', bgm: 'battle-prep', chapter: '형주 의탁로', background: 'story-wolong', - speaker: '장비', - portrait: 'zhangFei', - text: '형님, 조조군 추격대가 또 길목을 막고 있소. 이번에는 조운도 합류했으니, 데려갈 장수를 잘 골라 한 번에 길을 열어 봅시다.' + speaker: '손건', + text: '중앙 강가 길목에 유표의 사자가 기다립니다. 조운 장군이 추격 기병을 끊고, 운장과 익덕이 관문 앞을 밀어 주면 제가 문서를 내어 형주 객장으로 들어갈 길을 만들겠습니다.' } ]; @@ -1364,15 +1363,15 @@ export const sixteenthBattleVictoryPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '형주 관문', background: 'story-wolong', - text: '조인의 추격대가 물러서자 형주로 향하는 관문이 열렸다. 유비군은 원소 진영의 무거운 시선에서 벗어나, 다시 스스로 길을 고를 수 있는 숨을 얻었다.' + text: '조인의 추격대가 물러서고, 강가 접선로와 형주 관문이 함께 열렸다. 유표의 사자는 손건의 문서를 받아 들었고, 유비군은 도망자가 아니라 객장으로 들어갈 명분을 얻었다.' }, { id: 'sixteenth-liu-biao-welcome', bgm: 'story-dark', chapter: '유표의 객장', background: 'story-wolong', - speaker: '손건', - text: '유표는 주공을 객장으로 맞이하겠다고 합니다. 환대는 분명하지만 형주 안에도 각자의 계산이 있습니다. 이제 싸움만큼이나 사람의 마음을 읽어야 할 때입니다.' + speaker: '조운', + text: '관문 앞 추격로는 제가 살피겠습니다. 형주가 잠시 몸을 누일 곳이라면, 그동안 주공의 깃발이 다시 백성을 모을 길을 찾으셔야 합니다.' }, { id: 'sixteenth-next-zhuge-shadow', @@ -1380,7 +1379,7 @@ export const sixteenthBattleVictoryPages: StoryPage[] = [ chapter: '와룡의 소문', background: 'story-wolong', speaker: '간옹', - text: '형주 선비들 사이에 융중의 와룡이라는 이름이 오갑니다. 주공의 뜻을 천하의 길로 펼칠 사람이라면, 다음 걸음은 그 사람을 찾아가는 일이 되겠습니다.' + text: '형주 선비들 사이에 융중의 와룡이라는 이름이 오갑니다. 유표의 객장으로 숨만 고를 것인지, 천하의 길을 물을 사람을 찾아갈 것인지, 다음 걸음은 곧 정해질 것입니다.' } ]; diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index 0404218..f69cef1 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -741,14 +741,14 @@ const sortieRulesByBattleId: Partial