diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index 86886f0..7c3e1ea 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -1556,16 +1556,85 @@ export const twelfthBattleScenario: BattleScenarioDefinition = { victoryConditionLabel: '장료 격파', defeatConditionLabel: '유비 퇴각', openingObjectiveLines: [ - '조조는 하비 포위망의 남쪽 둑길을 유비군에게 맡깁니다. 장료를 격파하면 여포군 선봉은 성 안으로 물러납니다.', - '강줄기와 둑길이 전장을 나눕니다. 여포군 기병은 길을 타고 돌파하고, 성루 궁병과 진궁은 후방에서 압박합니다.', - '둑길 진영을 확보하고 20턴 안에 승리하면 조조 휘하에서의 공적과 유비군의 독자 보급을 함께 지킬 수 있습니다.' + '허도 입성로에서 군율을 보인 유비군에게 조조는 하비 포위망의 남쪽 둑길을 맡깁니다. 장료를 격파하면 여포군 선봉은 성 안으로 물러납니다.', + '강줄기와 둑길이 전장을 가릅니다. 여포군 기병은 길을 타고 포위망을 찢으려 하고, 진궁과 성루 궁병은 중앙 보급 진영을 압박합니다.', + '둑길 보급 진영을 확보하고 35턴 안에 승리하면 조조 휘하의 공적과 유비군의 독자 보급 명분을 함께 지킬 수 있습니다.' ], + tacticalGuide: { + summary: '서남쪽 진영에서 둑길 보급 진영을 먼저 잡고, 장비가 기병 돌파를 끊는 동안 관우가 장료 선봉을 받아냅니다.', + route: '서남 진영 → 둑길 보급 진영 → 중앙 강가 길 → 장료 선봉', + focus: + '하비 외곽은 물길 때문에 전열이 갈라지기 쉽습니다. 보급 진영을 확보해 회복선을 만들고, 간옹은 진궁과 궁병 압박을 늦추며, 미축은 둑길 전열이 끊기지 않게 받쳐야 합니다.', + roles: [ + '유비: 후방 지휘와 조조군 보고 명분 유지', + '관우: 중앙 둑길 정면 전열과 장료 견제', + '장비: 남쪽 길 기병 돌파 차단', + '간옹: 진궁/궁병 압박 완화와 전황 보고', + '미축: 보급 진영 유지와 회복품 운용' + ], + events: { + 'village-approach': { + title: '둑길 보급 진영 접근', + lines: [ + '강가의 보급 진영이 흔들리면 조조군 포위망도 함께 벌어집니다.', + '이곳을 확보하면 유비군의 독자 보급선을 지키면서 장료 선봉을 압박할 수 있습니다.' + ] + }, + 'enemy-posture': { + title: '하비 외곽 진형', + lines: [ + '기병은 남북 둑길을 타고 찌르고, 궁병은 강 건너와 성루에서 사격 각을 잡습니다.', + '관우가 중앙을 막고 장비가 남쪽 길을 끊으면 장료가 움직일 공간이 줄어듭니다.' + ] + }, + 'cavalry-approach': { + title: '여포군 기병 돌파', + lines: [ + '여포군 기병이 둑길을 타고 포위망의 빈틈을 노립니다.', + '장비를 길목에 세우고 간옹의 둔화로 속도를 줄이면 보급 진영을 지키기 쉽습니다.' + ] + }, + 'leader-wavering': { + title: '장료 선봉 흔들림', + lines: [ + '둑길 보급 진영이 안정되자 장료 선봉의 돌파 각이 좁아지고 있습니다.', + '유비를 후방에 두고 관우와 장비가 양쪽 길을 압박하면 마지막 전열이 무너집니다.' + ] + } + } + }, + sortie: { + sortieLimit: 5, + requiredUnits: ['liu-bei'], + recommendedUnits: [ + { unitId: 'liu-bei', role: 'support', reason: '조조 휘하 작전에서도 유비군의 명분을 지켜야 합니다. 후방 지휘와 생존이 우선입니다.' }, + { unitId: 'guan-yu', role: 'front', reason: '중앙 둑길에서 장료 선봉을 받아낼 정면 전열입니다.' }, + { unitId: 'zhang-fei', role: 'flank', reason: '여포군 기병 돌파를 남쪽 길목에서 끊는 측면 차단 역할입니다.' }, + { unitId: 'jian-yong', role: 'support', reason: '진궁과 궁병 압박을 늦추고 조조군 보고 명분을 정리합니다.' }, + { unitId: 'mi-zhu', role: 'reserve', reason: '둑길 보급 진영을 지키고 회복품 운용을 안정시킵니다.' } + ], + recommendedClasses: [ + { label: '후방 지휘', classKeys: ['lord'], reason: '유비 생존과 조조군 보고 명분이 전투 후 흐름을 좌우합니다.' }, + { label: '둑길 전열', classKeys: ['infantry'], reason: '좁은 길에서 장료 선봉과 보병을 안정적으로 받아냅니다.' }, + { label: '기병 차단', classKeys: ['spearman'], reason: '남북 둑길을 타고 돌파하는 여포군 기병을 끊기 좋습니다.' }, + { label: '책략 견제', classKeys: ['strategist'], reason: '진궁과 궁병의 압박을 늦추면 보급 진영 확보가 쉬워집니다.' }, + { label: '보급 유지', classKeys: ['quartermaster'], reason: '강가 포위전에서는 회복품과 독자 보급선이 실제 전투 유지력으로 이어집니다.' } + ], + deploymentSlots: [ + { role: 'support', unitId: 'liu-bei', x: 3, y: 18, label: '후방 지휘' }, + { role: 'front', unitId: 'guan-yu', x: 4, y: 17, label: '둑길 전열' }, + { role: 'flank', unitId: 'zhang-fei', x: 4, y: 19, label: '기병 차단' }, + { role: 'support', unitId: 'jian-yong', x: 5, y: 20, label: '책략 견제' }, + { role: 'reserve', unitId: 'mi-zhu', x: 3, y: 21, label: '보급 유지' } + ], + note: '하비 외곽전은 길이 좁고 물길이 전열을 자릅니다. 추천 배치는 관우가 중앙 둑길을 버티고, 장비가 기병 돌파를 끊으며, 간옹과 미축이 책략/보급으로 전열을 붙잡는 형태입니다.' + }, map: twelfthBattleMap, units: twelfthBattleUnits, bonds: twelfthBattleBonds, mapTextureKey: 'battle-map-twelfth', leaderUnitId: 'xiapi-leader-zhang-liao', - quickVictoryTurnLimit: 20, + quickVictoryTurnLimit: 35, baseVictoryGold: 1440, objectives: [ { @@ -1585,20 +1654,30 @@ export const twelfthBattleScenario: BattleScenarioDefinition = { { id: 'camp', kind: 'secure-terrain', - label: '하비 둑길 진영 확보', + label: '둑길 보급 진영 확보', rewardGold: 500, - terrain: 'camp' + terrain: 'camp', + targetTile: { x: 23, y: 15, radius: 4 }, + threatRadius: 2 }, { id: 'quick', kind: 'quick-victory', - label: '20턴 이내 승리', + label: '35턴 이내 승리', rewardGold: 390, - maxTurn: 20 + maxTurn: 35 } ], defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }], itemRewards: ['콩 4', '상처약 3', '탁주 2', '하비 포위 공적 +1'], + campaignReward: { + supplies: ['콩 4', '상처약 3', '탁주 2'], + equipment: ['병법서 1'], + reputation: ['하비 포위 공적 +1'], + unlockBattleId: 'thirteenth-battle-xiapi-final', + unlockLabel: '하비 결전 개방', + note: '하비 외곽의 둑길과 보급 진영을 장악해 조조군 포위망이 성문과 수문까지 좁혀집니다.' + }, victoryPages: twelfthBattleVictoryPages, nextCampScene: 'CampScene' }; diff --git a/src/game/data/campaignFlow.ts b/src/game/data/campaignFlow.ts index 017c92b..fc65e25 100644 --- a/src/game/data/campaignFlow.ts +++ b/src/game/data/campaignFlow.ts @@ -333,7 +333,8 @@ const sortieFlows: Record = { afterBattleId: twelfthBattleScenario.id, eyebrow: '다음 전장', title: thirteenthBattleScenario.title, - description: '하비 외곽 포위망이 좁혀졌고, 여포의 마지막 운명도 가까워졌습니다. 성문과 수문을 뚫고 여포를 격파하면 조조 휘하에서 깊어지는 긴장이 다음 흐름으로 이어집니다.', + description: + '하비 외곽의 둑길 보급 진영을 장악하면서 포위망이 성문과 수문까지 좁혀졌습니다. 이제 여포의 마지막 돌파를 꺾어야 하며, 조조 휘하에서 깊어지는 긴장도 함께 드러납니다.', rewardHint: `예상 보상: ${thirteenthBattleScenario.title} 개방`, nextBattleId: thirteenthBattleScenario.id, campaignStep: 'thirteenth-battle', diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index 830f5f1..29a11ba 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -1080,7 +1080,7 @@ export const twelfthBattleIntroPages: StoryPage[] = [ bgm: 'story-dark', chapter: '조조의 명', background: 'story-wandering', - text: '허도에 머문 지 오래지 않아 조조는 유비군을 하비 포위전에 부른다. 여포를 치는 명령은 서주를 잃은 한을 풀 기회이자, 조조의 칼끝이 어디를 향하는지 가늠하는 시험이었다.' + text: '허도 입성로에서 군율을 보인 뒤, 조조는 곧장 유비군을 하비 포위전에 불렀다. 여포를 치는 명령은 서주를 잃은 한을 풀 기회이자, 조조의 칼끝이 어디를 향하는지 가늠하는 두 번째 시험이었다.' }, { id: 'twelfth-xiapi-shadow', @@ -1088,7 +1088,7 @@ export const twelfthBattleIntroPages: StoryPage[] = [ chapter: '하비의 물길', background: 'story-wandering', speaker: '미축', - text: '하비 외곽은 강과 진흙이 얽혀 있습니다. 보급로를 끊고 둑길을 잡지 못하면, 여포군 기병이 포위망의 빈틈을 찢고 나올 것입니다.' + text: '하비 외곽은 강과 진흙이 얽혀 있습니다. 중앙의 둑길 보급 진영을 잡지 못하면, 여포군 기병이 포위망의 빈틈을 찢고 조조군 장부에는 우리 실책만 남을 것입니다.' }, { id: 'twelfth-brothers-before-lubu', @@ -1097,7 +1097,7 @@ export const twelfthBattleIntroPages: StoryPage[] = [ background: 'story-wandering', speaker: '장비', portrait: 'zhangFei', - text: '형님, 이번엔 여포의 이름만 들어도 창끝이 뜨겁습니다. 허나 서두르지 않겠습니다. 먼저 포위망을 조이고, 놈의 날뛰는 길을 끊겠습니다.' + text: '형님, 여포의 이름만 들어도 창끝이 뜨겁습니다. 허나 이번엔 서두르지 않겠습니다. 남쪽 둑길을 끊어 기병이 날뛰는 길부터 막겠습니다.' }, { id: 'twelfth-xiapi-sortie', @@ -1106,7 +1106,7 @@ export const twelfthBattleIntroPages: StoryPage[] = [ background: 'story-wandering', speaker: '유비', portrait: 'liuBei', - text: '여포를 치는 싸움이 조조의 명이라 해도, 서주 백성이 다시 짓밟히지 않게 하는 일은 우리의 뜻이다. 물길을 잡고 포위망을 열어라.' + text: '관우는 중앙 둑길을 지키고, 장비는 기병을 막아라. 간옹과 미축은 보급 진영을 놓치지 마라. 조조의 명을 따르되, 서주 백성이 다시 짓밟히지 않게 하는 일은 우리의 뜻이다.' } ]; @@ -1116,7 +1116,7 @@ export const twelfthBattleVictoryPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '무너진 외곽 진영', background: 'story-wandering', - text: '유비군은 하비 외곽의 둑길과 보급 진영을 장악했다. 여포군 선봉은 성 안으로 물러났고, 조조군은 포위망을 한층 더 좁혔다.' + text: '유비군은 하비 외곽의 둑길 보급 진영을 장악했고, 장료의 선봉은 성 안으로 물러났다. 조조군은 포위망을 성문과 수문 가까이까지 좁혔다.' }, { id: 'twelfth-cao-cao-watches', @@ -1124,7 +1124,7 @@ export const twelfthBattleVictoryPages: StoryPage[] = [ chapter: '칭찬과 감시', background: 'story-wandering', speaker: '간옹', - text: '현덕, 조조는 오늘의 공을 칭찬하겠지만 동시에 더 깊이 살필 걸세. 여포를 치는 동안에도, 우리가 조조의 손안에만 있지 않다는 것을 잊지 말아야 하네.' + text: '현덕, 조조는 오늘의 공을 칭찬하겠지만 동시에 더 깊이 살필 걸세. 다음은 하비 성문과 수문일 테니, 여포를 치는 동안에도 우리가 조조의 손안에만 있지 않다는 것을 잊지 말아야 하네.' } ]; diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index ba9577d..a29566a 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -695,12 +695,13 @@ const sortieRulesByBattleId: Partial