diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index d5c5824..79e79eb 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -5210,6 +5210,73 @@ export const thirtySixthBattleScenario: BattleScenarioDefinition = { '황충과 법정의 계책이 이번 전투의 중심입니다. 황충이 무너지면 정군산의 기세도 꺾입니다.', '마초와 마대는 서쪽 능선을 흔들고, 왕평을 설득할 실마리를 찾아 한중 산길의 마음을 유비군 쪽으로 돌리십시오.' ], + tacticalGuide: { + summary: + '정군산 전초전은 황충과 법정이 고지 돌파의 타이밍을 만들고, 마초와 마대가 서쪽 능선을 흔들어 하후연 선봉의 시야를 분산시키는 전장입니다. 왕평은 아직 적진에 있지만 산길을 아는 장수이므로, 하후연만 급히 치기보다 능선 창고와 길목을 먼저 눌러 귀순 명분을 만들어야 합니다.', + route: '서남 유비군 전열 → 서쪽 능선 정리 → 황충 고지 압박 → 정군산 창고 확보 → 왕평 접촉 → 하후연 선봉 격파', + focus: + '황충은 전투의 칼끝이지만 패배 조건이기도 합니다. 법정이 책략으로 고지 사격선을 끊고, 마초와 마대는 깊이 들어가기보다 하후연의 기병과 장합을 분산시켜 황충이 치고 올라갈 시간을 벌어야 합니다.', + roles: [ + '유비: 한중 공략 명분과 패배 조건의 중심', + '황충: 정군산 고지 돌파와 하후연 선봉 격파 담당', + '법정: 황충의 돌파 타이밍과 적 고지 책략 견제', + '마초: 서쪽 능선 기병 압박과 적 시선 분산', + '마대: 마초 후속 회수와 좁은 산길 기병 운용', + '미축: 장기전 보급과 회복 안정' + ], + events: { + 'village-approach': { + title: '정군산 창고', + lines: [ + '법정: 저 창고를 누르면 하후연의 고지 병력이 오래 버티지 못합니다. 황충 장군이 오를 길이 생깁니다.', + '황충: 보급을 끊고 길을 열면 활 한 번으로도 산의 기세를 바꿀 수 있소.' + ] + }, + 'cavalry-approach': { + title: '서쪽 능선 기병', + lines: [ + '마대: 산길은 넓지 않습니다. 숙부님이 앞을 흔들면 제가 퇴로를 붙잡겠습니다.', + '마초: 깊이 찌르기보다 적의 눈을 돌린다. 오늘의 돌격은 황충 장군의 길을 만들기 위한 것이다.' + ] + }, + 'leader-wavering': { + title: '하후연 선봉이 흔들리다', + lines: [ + '왕평: 유비군이 창고와 능선을 함께 잡았습니다. 산길을 아는 자라면 어느 깃발이 오래 버틸지 알 수 있습니다.', + '하후연: 노장이 고지를 타고, 서량 기병이 옆구리를 흔든다니. 정군산을 가볍게 넘겨볼 수 없겠군.' + ] + } + } + }, + sortie: { + sortieLimit: 6, + requiredUnits: ['liu-bei', 'huang-zhong'], + recommendedUnits: [ + { unitId: 'liu-bei', role: 'reserve', reason: '한중 공략 명분과 패배 조건의 중심입니다.' }, + { unitId: 'huang-zhong', role: 'front', reason: '정군산 전초전의 핵심 장수입니다. 하후연 선봉 격파와 생존 목표가 맞물립니다.' }, + { unitId: 'fa-zheng', role: 'support', reason: '황충이 고지를 오를 타이밍과 적 책략 사격선을 읽는 참모입니다.' }, + { unitId: 'ma-chao', role: 'flank', reason: '서쪽 능선을 흔들어 장합과 하후연 기병의 시선을 분산시킵니다.' }, + { unitId: 'ma-dai', role: 'flank', reason: '마초의 돌파 뒤를 회수하고 좁은 산길 기병 운용을 안정시킵니다.' }, + { unitId: 'mi-zhu', role: 'support', reason: '정군산 장기전에서 회복 도구와 보급 운용을 안정시키는 선택지입니다.' } + ], + recommendedClasses: [ + { label: '고지 돌파', classKeys: ['archer', 'infantry'], reason: '황충과 보병 전열이 능선 위 사격선을 밀어냅니다.' }, + { label: '책략 타이밍', classKeys: ['strategist'], reason: '법정이 하후연 선봉의 허점과 고지 책략대를 끊어 줍니다.' }, + { label: '서쪽 우회', classKeys: ['cavalry'], reason: '마초와 마대가 적 기병의 시선을 갈라 황충의 돌파 길을 엽니다.' }, + { label: '보급 안정', classKeys: ['quartermaster'], reason: '미축과 보급 담당은 황충 생존 목표를 안정시키는 역할입니다.' }, + { label: '군주 생존', classKeys: ['lord'], reason: '유비가 살아 있어야 왕평 귀순과 한중 본전으로 이어집니다.' } + ], + deploymentSlots: [ + { x: 4, y: 48, role: 'reserve', unitId: 'liu-bei', label: '한중 명분' }, + { x: 8, y: 47, role: 'front', unitId: 'huang-zhong', label: '고지 돌파' }, + { x: 10, y: 49, role: 'support', unitId: 'fa-zheng', label: '책략 타이밍' }, + { x: 13, y: 44, role: 'flank', unitId: 'ma-chao', label: '서쪽 우회' }, + { x: 15, y: 45, role: 'flank', unitId: 'ma-dai', label: '퇴로 회수' }, + { x: 6, y: 50, role: 'support', unitId: 'mi-zhu', label: '보급 안정' } + ], + note: + '정군산 전초전은 황충이 전투의 칼끝이지만 동시에 패배 조건입니다. 법정으로 길을 읽고, 마초·마대가 서쪽을 흔들며, 미축이 보급을 받쳐 황충이 무리 없이 하후연 선봉까지 닿게 하십시오.' + }, map: thirtySixthBattleMap, units: thirtySixthBattleUnits, bonds: thirtySixthBattleBonds, @@ -5244,7 +5311,9 @@ export const thirtySixthBattleScenario: BattleScenarioDefinition = { kind: 'secure-terrain', label: '정군산 보급 창고 확보', rewardGold: 1860, - terrain: 'village' + terrain: 'village', + targetTile: { x: 51, y: 35, radius: 5 }, + threatRadius: 0 }, { id: 'quick', @@ -5259,6 +5328,14 @@ export const thirtySixthBattleScenario: BattleScenarioDefinition = { { kind: 'unit-defeated', unitId: 'huang-zhong' } ], itemRewards: ['콩 26', '상처약 20', '탁주 9', '산악 지형도 +1', '왕평 합류'], + campaignReward: { + supplies: ['콩 26', '상처약 20', '탁주 9'], + equipment: ['산악 지형도 +1'], + recruits: ['wang-ping'], + unlockBattleId: 'thirty-seventh-battle-hanzhong-decisive', + unlockLabel: '한중 결전 개방', + note: '정군산 능선과 보급 창고를 확보하고 왕평이 합류했습니다. 이제 왕평의 산길 지식으로 한중 결전의 북문을 흔들 수 있습니다.' + }, victoryPages: thirtySixthBattleVictoryPages, nextCampScene: 'CampScene' }; diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index 2088f9f..e23d832 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -2582,7 +2582,7 @@ export const thirtySixthBattleIntroPages: StoryPage[] = [ chapter: '정군산으로', background: 'story-northern', speaker: '제갈량', - text: '양평관의 길을 살핀 뒤 한중의 핵심은 정군산으로 모였습니다. 산을 잡으면 한중을 굽어보고, 산을 잃으면 북문 전체가 흔들립니다.' + text: '양평관의 길을 살핀 뒤 한중의 핵심은 정군산으로 모였습니다. 서쪽 능선과 보급 창고를 먼저 누르면 하후연의 선봉은 고지에서 오래 버티지 못합니다.' }, { id: 'thirty-sixth-huang-zhong-plan', @@ -2590,7 +2590,7 @@ export const thirtySixthBattleIntroPages: StoryPage[] = [ chapter: '노장의 결심', background: 'story-northern', speaker: '황충', - text: '나이가 전열을 막지는 못합니다. 법정의 계책으로 능선을 잡아 주신다면, 이 늙은 활과 칼이 하후연의 기세를 꺾어 보이겠습니다.' + text: '법정이 창고와 사격선을 끊어 주신다면, 이 늙은 활과 칼이 능선을 타고 오르겠습니다. 하후연의 선봉은 제가 직접 꺾어 보이겠습니다.' }, { id: 'thirty-sixth-western-cavalry', @@ -2598,7 +2598,7 @@ export const thirtySixthBattleIntroPages: StoryPage[] = [ chapter: '서량 기병의 우회로', background: 'story-northern', speaker: '마초', - text: '정군산 서쪽 능선은 말이 달리기 어렵지만, 마대와 함께 길을 잡으면 적의 눈을 돌릴 수 있습니다. 황충 장군이 치는 순간을 만들겠습니다.' + text: '정군산 서쪽 능선은 말이 달리기 어렵지만, 마대와 함께 적 기병의 눈을 돌릴 수 있습니다. 깊이 치기보다 황충 장군이 오를 시간을 만들겠습니다.' }, { id: 'thirty-sixth-sortie', @@ -2607,7 +2607,7 @@ export const thirtySixthBattleIntroPages: StoryPage[] = [ background: 'story-northern', speaker: '유비', portrait: 'liuBei', - text: '정군산을 얻으면 한중의 이름이 가까워질 것이오. 황충과 법정은 산을 보고, 마초와 마대는 길을 흔들며, 모두 유비군의 깃발을 산 위에 세우시오.' + text: '황충과 법정은 고지와 창고를 누르고, 마초와 마대는 서쪽 길을 흔드시오. 왕평이 산길의 형세를 보게 된다면 한중의 마음도 우리 쪽으로 기울 것이오.' } ]; @@ -2617,7 +2617,7 @@ export const thirtySixthBattleVictoryPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '정군산 능선을 잡다', background: 'story-northern', - text: '정군산의 첫 능선이 유비군 손에 들어오자 한중 전선의 무게가 바뀌었습니다. 하후연의 선봉은 물러났고, 산길의 병사들은 새 주인을 가늠하기 시작했습니다.' + text: '정군산의 능선과 보급 창고가 유비군 손에 들어오자 한중 전선의 무게가 바뀌었습니다. 하후연의 선봉은 물러났고, 산길의 병사들은 새 주인을 가늠하기 시작했습니다.' }, { id: 'thirty-sixth-wang-ping-joins', @@ -2625,7 +2625,7 @@ export const thirtySixthBattleVictoryPages: StoryPage[] = [ chapter: '왕평의 투항', background: 'story-northern', speaker: '왕평', - text: '저는 한중의 산길과 병사들의 마음을 압니다. 조조군의 군율은 엄하나 이 땅을 품지는 못했습니다. 유비공께서 한중을 안정시킨다면 제 길도 그곳에 있겠습니다.' + text: '능선과 창고를 함께 잡는 전열이라면 한중을 오래 지킬 수 있겠습니다. 저는 산길과 병사들의 마음을 압니다. 유비공께서 한중을 안정시킨다면 제 길도 그곳에 있겠습니다.' }, { id: 'thirty-sixth-next-foundation', diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index 529810e..25dd08c 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -1244,6 +1244,7 @@ const sortieRulesByBattleId: Partial