diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index 9ce0b17..52fcb0d 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -8478,6 +8478,80 @@ export const fiftyEighthBattleScenario: BattleScenarioDefinition = { '강유가 촉한의 장수로 처음 출전 후보에 들어왔습니다. 천수의 낮은 길을 아는 강유, 물길을 보는 왕평, 회수 기동의 조운과 마대 중 누구에게 자리를 줄지 결정하십시오.', '장합의 빠른 추격을 끊고 사마의의 본대를 저지하십시오. 물길과 수레 길, 후방 진영을 함께 확보하면 다음 북벌을 준비할 병력과 장부를 지킬 수 있습니다.' ], + tacticalGuide: { + summary: '가정 이후 길어진 보급선을 접으며 군량 수레와 병사를 살리고, 강유의 첫 출전을 낮은 길 확보 역할로 시험합니다.', + route: '가정 후방막 -> 기산 군량 수레 길 -> 퇴각 물길 -> 후방 진영 -> 사마의 본대', + focus: '장합을 깊이 추격하지 말고 수레 길과 물길을 먼저 열어야 합니다. 강유는 낮은 길 안내, 왕평은 물길 판단, 조운/마대는 추격 차단에 집중하십시오.', + roles: ['제갈량: 후퇴 전체 지휘', '강유: 천수 낮은 길 안내', '왕평: 물길과 퇴로 판단', '조운/마대: 장합 추격 차단', '황권/마량: 군량 장부와 병사 수습'], + events: { + 'village-approach': { + title: '퇴각 물길 접근', + lines: [ + '왕평: 가정에서 배운 길입니다. 물길을 잃지 않아야 수레가 살고 병사가 쉽니다.', + '강유: 천수의 낮은 길은 좁지만, 추격을 끊으며 돌아가기에는 알맞습니다.' + ] + }, + 'vanguard-broken': { + title: '장합 추격 차단', + lines: [ + '조운: 추격 선봉이 흔들렸습니다. 여기서 더 깊게 들어가면 후퇴전의 뜻이 흐려집니다.', + '마대: 말머리를 돌려 수레 길을 비우겠습니다.' + ] + }, + 'cavalry-approach': { + title: '수레 길 압박', + lines: [ + '황권: 군량 수레가 멈추면 이 전투는 이겨도 진 것이 됩니다.', + '기동대는 적을 베는 것보다 수레가 지나갈 빈칸을 먼저 만들어야 합니다.' + ] + }, + 'enemy-posture': { + title: '사마의의 시선', + lines: [ + '마량: 사마의는 우리가 어디로 빠지는지 보고 있습니다.', + '본대를 자극하지 말고 후방 진영을 묶어 다음 북벌의 병력과 장부를 보존하십시오.' + ] + }, + 'ally-danger': { + title: '후방 진영 흔들림', + lines: [ + '제갈량: 오늘의 공은 적장을 베는 수보다 살아 돌아온 수로 셉니다.', + '전열이 길어지면 병사가 흩어집니다. 후방 진영을 기준으로 다시 모으십시오.' + ] + } + } + }, + sortie: { + sortieLimit: 7, + requiredUnits: ['zhuge-liang'], + recommendedUnits: [ + { unitId: 'zhuge-liang', role: 'support', reason: '기산 후퇴로의 총지휘관입니다. 무리한 추격보다 군량 수레와 병사를 살리는 판단이 필요합니다.' }, + { unitId: 'jiang-wei', role: 'front', reason: '합류 후 첫 출전 후보입니다. 천수의 낮은 길을 알아 퇴각로 확보와 새 공명 조합을 만듭니다.' }, + { unitId: 'wang-ping', role: 'front', reason: '물길과 수레 길을 함께 보는 장수입니다. 후퇴전에서 보급선 붕괴를 막는 핵심입니다.' }, + { unitId: 'zhao-yun', role: 'front', reason: '장합의 빠른 추격을 끊고 흩어진 병사를 회수하는 기동 담당입니다.' }, + { unitId: 'ma-dai', role: 'flank', reason: '서량 기병의 감각으로 좁은 길을 우회하는 위군 기병을 늦출 수 있습니다.' }, + { unitId: 'huang-quan', role: 'support', reason: '군량 장부와 후방 진영 수습 목표를 안정시키는 보급 판단 담당입니다.' }, + { unitId: 'ma-liang', role: 'support', reason: '강유의 첫 출전과 후퇴 명분을 병사들에게 설득력 있게 정리합니다.' } + ], + recommendedClasses: [ + { label: '후퇴 총지휘', classKeys: ['strategist'], reason: '제갈량이 전선을 길게 늘이지 않고 퇴로 목표를 우선합니다.' }, + { label: '낮은 길 안내', classKeys: ['infantry', 'spearman'], reason: '강유와 왕평이 수레 길과 물길 사이의 안정된 길을 찾습니다.' }, + { label: '추격 차단', classKeys: ['cavalry'], reason: '장합 기병을 늦추되 깊이 추격하지 않는 회수 기동이 필요합니다.' }, + { label: '군량 보호', classKeys: ['strategist', 'archer'], reason: '수레 길 주변을 안정시키고 후방 진영을 무너뜨리지 않습니다.' }, + { label: '후방 수습', classKeys: ['strategist'], reason: '병사와 장부를 살려 다음 북벌을 준비하는 역할입니다.' } + ], + deploymentSlots: [ + { x: 18, y: 81, role: 'support', unitId: 'zhuge-liang', label: '후퇴 지휘' }, + { x: 33, y: 78, role: 'front', unitId: 'jiang-wei', label: '낮은 길' }, + { x: 40, y: 75, role: 'front', unitId: 'wang-ping', label: '물길 판단' }, + { x: 32, y: 82, role: 'front', unitId: 'zhao-yun', label: '추격 차단' }, + { x: 56, y: 87, role: 'flank', unitId: 'ma-dai', label: '측면 회수' }, + { x: 12, y: 80, role: 'support', unitId: 'huang-quan', label: '군량 장부' }, + { x: 23, y: 78, role: 'support', unitId: 'ma-liang', label: '병사 수습' } + ], + note: + '기산 후퇴로는 강유를 처음 편성에 넣는 전투이지만, 목적은 추격이 아니라 보존입니다. 낮은 길, 물길, 수레 길, 추격 차단 역할을 7명 안에 담으십시오.' + }, map: fiftyEighthBattleMap, units: fiftyEighthBattleUnits, bonds: fiftyEighthBattleBonds, @@ -8512,28 +8586,36 @@ export const fiftyEighthBattleScenario: BattleScenarioDefinition = { kind: 'secure-terrain', label: '기산 군량 수레 길 확보', rewardGold: 5900, - terrain: 'road' + terrain: 'road', + targetTile: { x: 56, y: 74, radius: 6 }, + threatRadius: 0 }, { id: 'qishan-waterline', kind: 'secure-terrain', label: '퇴각 물길 확보', rewardGold: 5780, - terrain: 'river' + terrain: 'river', + targetTile: { x: 66, y: 90, radius: 6 }, + threatRadius: 0 }, { id: 'rear-camps', kind: 'secure-terrain', label: '후방 진영 수습', rewardGold: 5480, - terrain: 'camp' + terrain: 'camp', + targetTile: { x: 30, y: 80, radius: 7 }, + threatRadius: 0 }, { id: 'ridge-forts', kind: 'secure-terrain', label: '위군 능선 거점 제압', rewardGold: 5320, - terrain: 'fort' + terrain: 'fort', + targetTile: { x: 56, y: 44, radius: 5 }, + threatRadius: 0 }, { id: 'quick', @@ -8545,6 +8627,14 @@ export const fiftyEighthBattleScenario: BattleScenarioDefinition = { ], defeatConditions: [{ kind: 'unit-defeated', unitId: 'zhuge-liang' }], itemRewards: ['콩 66', '상처약 50', '탁주 25', '기산 퇴각 지도 1', '강유 첫 출전 기록 1'], + campaignReward: { + supplies: ['콩 66', '상처약 50', '탁주 25'], + equipment: ['기산 퇴각 지도 1'], + reputation: ['강유 첫 출전 기록 1'], + unlockLabel: '진창 공성전', + note: + '기산 퇴로와 군량 수레를 보존했습니다. 강유는 촉한의 첫 후퇴전에서 낮은 길을 증명했고, 다음 북벌은 진창의 단단한 성벽을 상대로 다시 계산해야 합니다.' + }, victoryPages: fiftyEighthBattleVictoryPages, nextCampScene: 'CampScene' }; diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index 6388f47..5162215 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -4015,7 +4015,7 @@ export const fiftyEighthBattleIntroPages: StoryPage[] = [ chapter: '기산 퇴각 명령', background: 'story-jieting-crisis', speaker: '제갈량', - text: '가정의 물길은 가까스로 지켰지만 북방의 군량 길은 이미 오래 늘어졌습니다. 지금 억지로 깊게 밀고 들어가면 승리가 아니라 고립을 얻게 됩니다. 기산으로 돌아가는 수레 길을 열고, 병사와 장부를 먼저 살려야 합니다.' + text: '가정의 물길은 가까스로 지켰지만 북방의 군량 길은 이미 오래 늘어졌습니다. 지금 억지로 깊게 밀고 들어가면 승리가 아니라 고립을 얻게 됩니다. 기산으로 돌아가는 수레 길을 열고, 병사와 장부를 먼저 살리겠습니다.' }, { id: 'fifty-eighth-jiang-wei-first-sortie', @@ -4023,7 +4023,7 @@ export const fiftyEighthBattleIntroPages: StoryPage[] = [ chapter: '강유의 첫 출전', background: 'story-jieting-crisis', speaker: '강유', - text: '제가 알던 천수의 낮은 길이 이제 촉한의 퇴로가 되었습니다. 아직 모두가 저를 믿지는 못하겠지만, 오늘은 말보다 길로 증명하겠습니다. 조운과 마대가 회수 길을 지키고, 왕평이 물길을 보면 위군의 추격을 끊을 수 있습니다.' + text: '제가 알던 천수의 낮은 길이 이제 촉한의 퇴로가 되었습니다. 아직 모두가 저를 믿지는 못하겠지만, 오늘은 말보다 길로 증명하겠습니다. 저는 수레 길을 안내하고, 왕평은 물길을 보며, 조운과 마대는 추격을 끊어 주십시오.' }, { id: 'fifty-eighth-sima-yi-shadow', @@ -4031,7 +4031,7 @@ export const fiftyEighthBattleIntroPages: StoryPage[] = [ chapter: '새로운 그림자', background: 'story-jieting-crisis', speaker: '마량', - text: '장합의 추격만 막으면 끝나는 전장이 아닙니다. 위군 본영 뒤에서 사마의가 군량 수레가 어디로 빠지는지 보고 있습니다. 강유를 내보내면 길은 넓어지지만, 누군가는 조운이나 왕평의 자리를 양보해야 합니다.' + text: '장합의 추격만 막으면 끝나는 전장이 아닙니다. 위군 본영 뒤에서 사마의가 군량 수레가 어디로 빠지는지 보고 있습니다. 강유를 내보내면 길은 넓어지지만, 출전 자리는 하나 줄어듭니다. 이번 편성은 누구를 믿고 퇴로를 맡길지의 선택입니다.' } ]; diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index f63f370..5e3eaf2 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -1916,6 +1916,22 @@ const sortieRulesByBattleId: Partial