diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index 3f86852..86886f0 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -1424,10 +1424,79 @@ export const eleventhBattleScenario: BattleScenarioDefinition = { victoryConditionLabel: '기령 격파', defeatConditionLabel: '유비 퇴각', openingObjectiveLines: [ - '조조는 유비군을 받아들이는 대신 허도 입성로를 어지럽히는 원술 잔군을 치라는 명을 내립니다. 기령을 격파하면 길이 열립니다.', - '원술군 기병은 길을 따라 돌파하고, 약탈병은 숲과 마을을 끼고 보급을 노립니다. 조조군의 감시 속에서 군율을 증명해야 합니다.', - '마을을 확보하고 18턴 안에 승리하면 조조 의탁 이후에도 병력과 민심을 더 많이 보존합니다.' + '조조는 유비군을 받아들이되, 허도 입성로를 어지럽히는 원술 잔군 토벌을 첫 시험으로 내립니다. 기령을 격파하면 군문 통행이 열립니다.', + '원술군 약탈병은 마을 보급로를 흔들고, 기병은 동쪽 길에서 돌파합니다. 조조군의 감시 속에서 백성을 해치지 않는 군율을 보여야 합니다.', + '길목 마을을 안정시키고 18턴 안에 승리하면 하비 포위전으로 이어질 병력과 조조군 신뢰를 더 많이 보존합니다.' ], + 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: 15, label: '후방 지휘' }, + { role: 'front', unitId: 'guan-yu', x: 4, y: 14, label: '중앙 돌파' }, + { role: 'flank', unitId: 'zhang-fei', x: 4, y: 16, label: '마을 차단' }, + { role: 'support', unitId: 'jian-yong', x: 5, y: 17, label: '책략 보고' }, + { role: 'reserve', unitId: 'mi-zhu', x: 3, y: 18, label: '보급 안정' } + ], + note: '허도 입성로는 조조군 감시 아래 치르는 첫 시험입니다. 추천 배치는 관우가 중앙을 열고, 장비가 마을 약탈병을 끊으며, 유비와 보조 무장이 후방에서 군율과 보급을 지키는 형태입니다.' + }, map: eleventhBattleMap, units: eleventhBattleUnits, bonds: eleventhBattleBonds, @@ -1453,9 +1522,11 @@ export const eleventhBattleScenario: BattleScenarioDefinition = { { id: 'village', kind: 'secure-terrain', - label: '허도 길목 마을 확보', + label: '길목 마을 보급로 확보', rewardGold: 460, - terrain: 'village' + terrain: 'village', + targetTile: { x: 10, y: 11, radius: 5 }, + threatRadius: 0 }, { id: 'quick', @@ -1467,6 +1538,14 @@ export const eleventhBattleScenario: BattleScenarioDefinition = { ], defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }], itemRewards: ['콩 4', '상처약 3', '탁주 1', '조조군 군문 통행 +1'], + campaignReward: { + supplies: ['콩 4', '상처약 3', '탁주 1'], + equipment: ['철린갑 1'], + reputation: ['조조군 군문 통행 +1'], + unlockBattleId: 'twelfth-battle-xiapi-outer-siege', + unlockLabel: '하비 외곽전 개방', + note: '허도 입성로에서 군율과 보급 능력을 보여 주어 조조 휘하 하비 포위 임무로 이어집니다.' + }, victoryPages: eleventhBattleVictoryPages, nextCampScene: 'CampScene' }; diff --git a/src/game/data/campaignFlow.ts b/src/game/data/campaignFlow.ts index 7b17147..017c92b 100644 --- a/src/game/data/campaignFlow.ts +++ b/src/game/data/campaignFlow.ts @@ -322,7 +322,8 @@ const sortieFlows: Record = { afterBattleId: eleventhBattleScenario.id, eyebrow: '다음 전장', title: twelfthBattleScenario.title, - description: '조조는 유비군을 하비 포위망에 투입합니다. 여포를 다시 마주하는 이 싸움에서 유비군은 조조의 명을 따르되, 서주 백성을 위한 뜻도 지켜야 합니다.', + description: + '허도 입성로에서 군율과 보급 능력을 증명하자, 조조는 유비군을 곧장 하비 포위망에 투입합니다. 여포를 다시 마주하는 싸움에서 유비군은 조조의 명을 따르되, 서주 백성을 위한 뜻도 지켜야 합니다.', rewardHint: `예상 보상: ${twelfthBattleScenario.title} 개방`, nextBattleId: twelfthBattleScenario.id, campaignStep: 'twelfth-battle', diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index 3febef1..830f5f1 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -1033,7 +1033,7 @@ export const eleventhBattleIntroPages: StoryPage[] = [ chapter: '의탁의 대가', background: 'story-wandering', speaker: '간옹', - text: '현덕, 조조는 우리에게 머물 곳을 주겠지만 공짜로 주지는 않을 걸세. 허도 입성로에 남은 원술 잔군을 치라는 명은 환대이자 시험이지.' + text: '현덕, 조조는 머물 곳을 주겠지만 공짜로 주지는 않을 걸세. 허도 입성로의 원술 잔군이 마을 보급로를 흔들고 있다네. 그들을 치라는 명은 환대이자 시험이지.' }, { id: 'eleventh-brothers-under-watch', @@ -1042,7 +1042,7 @@ export const eleventhBattleIntroPages: StoryPage[] = [ background: 'story-wandering', speaker: '관우', portrait: 'guanYu', - text: '형님, 조조의 깃발 아래 싸우더라도 우리의 칼끝은 백성을 향하지 않습니다. 명을 따르되 뜻은 잃지 않겠습니다.' + text: '형님, 조조의 감시병이 뒤에서 보더라도 우리의 칼끝은 백성을 향하지 않습니다. 마을을 지키며 기령을 베면, 명을 따르되 뜻은 잃지 않았다는 증거가 될 것입니다.' }, { id: 'eleventh-xudu-road-sortie', @@ -1051,7 +1051,7 @@ export const eleventhBattleIntroPages: StoryPage[] = [ background: 'story-wandering', speaker: '유비', portrait: 'liuBei', - text: '지금은 몸을 낮추어야 할 때다. 그러나 낮춘 몸 안에서도 마음까지 굽힐 수는 없다. 길을 열고, 살아남아 다시 일어서자.' + text: '먼저 길목 마을을 안정시키고, 관우는 중앙에서 기령의 본대를 막아라. 장비는 남쪽 약탈병을 끊는다. 몸은 낮추되, 백성을 지키는 마음까지 굽히지는 말자.' } ]; @@ -1061,7 +1061,7 @@ export const eleventhBattleVictoryPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '열린 허도 길', background: 'story-wandering', - text: '원술 잔군은 물러났고 허도로 향하는 길이 열렸다. 조조군의 감시병들은 유비군의 전열과 군율을 조용히 기록했다.' + text: '원술 잔군은 물러났고 길목 마을의 보급로도 다시 이어졌다. 조조군의 감시병들은 유비군이 백성을 해치지 않고 길을 연 사실을 조용히 기록했다.' }, { id: 'eleventh-cao-cao-accepts', @@ -1070,7 +1070,7 @@ export const eleventhBattleVictoryPages: StoryPage[] = [ background: 'story-wandering', speaker: '유비', portrait: 'liuBei', - text: '조조의 장막은 비바람을 피하게 해 주지만, 그 안의 공기는 오래 머물수록 무겁다. 나는 살아남기 위해 들어가되, 나올 날을 잊지 않겠다.' + text: '조조의 장막은 비바람을 피하게 해 주지만, 그 안의 공기는 오래 머물수록 무겁다. 이제 하비의 포위망으로 가게 될 것이다. 들어가되, 나올 날을 잊지 않겠다.' } ]; diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index 58cec64..ba9577d 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -684,12 +684,13 @@ const sortieRulesByBattleId: Partial