diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index 3b4f891..c52b1fd 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -6344,6 +6344,76 @@ export const fortyFourthBattleScenario: BattleScenarioDefinition = { '강동군은 숲길과 갈대 물목을 막고, 위군 추격대는 북쪽 길을 압박합니다. 포위망의 한쪽만 밀어서는 길이 다시 닫힙니다.', '왕평, 조운, 마대, 황충처럼 지형 판단과 기동, 고지 견제에 강한 장수를 데려가면 맥성의 좁은 퇴로를 지키기 좋습니다.' ], + tacticalGuide: { + summary: + '맥성 고립전은 형주 후방의 균열이 관우 전선의 포위로 터지는 전투입니다. 강동군은 갈대 물목과 동쪽 숲길을 닫고, 위군 추격대는 북쪽 퇴로를 누르므로 북문 밖 길목을 확보한 뒤 여몽의 봉쇄선을 찢어야 합니다.', + route: '맥성 안쪽 전열 정비 → 북문 밖 퇴로 확보 → 갈대 물목 궁병 정리 → 위군 추격대 차단 → 여몽 봉쇄선 돌파', + focus: + '이 전투의 핵심은 성 안에서 버티는 것이 아니라 좁은 퇴로를 열어 남은 병사를 빼내는 것입니다. 북문 목표를 확보하면 다음 이릉 진격로에서 유비가 왜 무리하게 동진하는지 더 자연스럽게 이어집니다.', + roles: [ + '유비: 관우군을 버리지 않는 명분과 패배 조건의 중심', + '관우: 맥성 고립전의 핵심 장수이자 돌파 전열', + '왕평: 북문과 산길 사이의 좁은 통로를 읽는 지형 담당', + '조운: 갈대 물목과 동쪽 숲길을 오가며 추격대를 끊는 기동 축', + '황충: 성벽과 갈대밭 너머 궁병을 견제하는 원거리 견제', + '마대: 위군 기병의 측면 차단에 대응하는 빠른 기병', + '마량: 형주 민심과 맥성 병사의 사기를 붙드는 참모' + ], + events: { + 'village-approach': { + title: '북문 퇴로', + lines: [ + '왕평: 북문 밖 길은 넓어 보여도 양쪽 숲이 좁습니다. 먼저 길목을 잡아야 뒤따르는 병사가 빠져나옵니다.', + '관우: 성 안에서 버티는 싸움이 아니오. 길을 열어 남은 병사를 살리는 것이 먼저요.' + ] + }, + 'enemy-posture': { + title: '양쪽 봉쇄', + lines: [ + '조운: 강동군은 갈대 물목을 막고, 위군은 북로를 눌러 옵니다. 한쪽만 밀면 곧 다시 닫힙니다.', + '황충: 궁병이 물목 너머에서 길을 끊고 있습니다. 전열이 좁아지기 전에 걷어내겠습니다.' + ] + }, + 'leader-wavering': { + title: '봉쇄선 균열', + lines: [ + '여몽: 맥성의 길목까지 밀렸는데도 관우의 전열이 아직 무너지지 않는군.', + '마량: 길은 열렸지만 형주의 큰 성들은 이미 갈라졌습니다. 이 승리는 퇴로를 얻는 승리입니다.' + ] + } + } + }, + sortie: { + sortieLimit: 7, + requiredUnits: ['liu-bei', 'guan-yu'], + recommendedUnits: [ + { unitId: 'liu-bei', role: 'reserve', reason: '관우군을 버리지 않는 명분의 중심입니다.' }, + { unitId: 'guan-yu', role: 'front', reason: '맥성 돌파 전열의 핵심 장수입니다.' }, + { unitId: 'wang-ping', role: 'flank', reason: '북문과 산길의 좁은 통로를 읽습니다.' }, + { unitId: 'zhao-yun', role: 'flank', reason: '갈대 물목과 숲길 추격대를 끊습니다.' }, + { unitId: 'huang-zhong', role: 'front', reason: '성벽 너머 궁병을 견제합니다.' }, + { unitId: 'ma-dai', role: 'flank', reason: '위군 기병의 측면 차단에 대응합니다.' }, + { unitId: 'ma-liang', role: 'support', reason: '형주 민심과 병사 사기를 붙듭니다.' } + ], + recommendedClasses: [ + { label: '퇴로 명분', classKeys: ['lord'], reason: '유비가 있어야 관우군을 버리지 않는 선택이 설득됩니다.' }, + { label: '북문 전열', classKeys: ['spearman', 'infantry'], reason: '관우와 황충이 북문 앞 좁은 전열을 지탱합니다.' }, + { label: '지형 판정', classKeys: ['infantry', 'strategist'], reason: '왕평과 마량이 산길, 숲길, 갈대 물목의 위험을 읽습니다.' }, + { label: '기동 차단', classKeys: ['cavalry'], reason: '조운과 마대가 양쪽 추격대를 빠르게 끊습니다.' }, + { label: '원거리 견제', classKeys: ['archer'], reason: '황충이 물목 너머 궁병과 봉쇄선을 눌러 줍니다.' } + ], + deploymentSlots: [ + { x: 24, y: 45, role: 'reserve', unitId: 'liu-bei', label: '퇴로 명분' }, + { x: 30, y: 38, role: 'front', unitId: 'guan-yu', label: '북문 전열' }, + { x: 37, y: 34, role: 'flank', unitId: 'wang-ping', label: '산길 판단' }, + { x: 33, y: 42, role: 'flank', unitId: 'zhao-yun', label: '물목 기동' }, + { x: 35, y: 36, role: 'front', unitId: 'huang-zhong', label: '궁병 견제' }, + { x: 43, y: 39, role: 'flank', unitId: 'ma-dai', label: '기병 차단' }, + { x: 31, y: 45, role: 'support', unitId: 'ma-liang', label: '사기 수습' } + ], + note: + '맥성 고립전은 성 안에서 오래 버티는 전투가 아니라 북문 밖 퇴로를 열어 관우군을 빼내는 전투입니다. 왕평으로 산길을 읽고, 조운·마대로 추격대를 끊으며, 황충으로 갈대 물목의 궁병을 눌러 주십시오.' + }, map: fortyFourthBattleMap, units: fortyFourthBattleUnits, bonds: fortyFourthBattleBonds, @@ -6376,9 +6446,11 @@ export const fortyFourthBattleScenario: BattleScenarioDefinition = { { id: 'maicheng-gate', kind: 'secure-terrain', - label: '맥성 북문 확보', + label: '맥성 북문 퇴로 확보', rewardGold: 2960, - terrain: 'fort' + terrain: 'fort', + targetTile: { x: 26, y: 48, radius: 3 }, + threatRadius: 0 }, { id: 'quick', @@ -6393,6 +6465,13 @@ export const fortyFourthBattleScenario: BattleScenarioDefinition = { { kind: 'unit-defeated', unitId: 'guan-yu' } ], itemRewards: ['콩 44', '상처약 34', '탁주 14', '맥성 북문 지도 1', '갈대 물목 표식 1'], + campaignReward: { + supplies: ['콩 44', '상처약 34', '탁주 14'], + equipment: ['맥성 북문 지도 1'], + reputation: ['갈대 물목 표식 1'], + unlockLabel: '이릉 진격로', + note: '맥성의 좁은 퇴로는 열었지만 형주의 큰 성들은 이미 강동 깃발 아래로 넘어갔습니다. 다음 군영에서는 형주 상실과 유비의 동진을 준비해야 합니다.' + }, victoryPages: fortyFourthBattleVictoryPages, nextCampScene: 'CampScene' }; diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index 0de05b9..34203a7 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -3162,7 +3162,7 @@ export const fortyFourthBattleIntroPages: StoryPage[] = [ chapter: '끊어진 후방', background: 'story-maicheng-isolation', speaker: '마량', - text: '공안 성문을 다시 잠갔으나 강릉과 나루의 소식이 끊겼습니다. 관우 장군의 번성 전선은 앞의 조조군과 뒤의 강동군 사이에서 길을 잃고 있습니다.' + text: '공안 성문을 다시 잠갔으나 강릉과 나루의 소식은 끝내 끊겼습니다. 관우 장군의 번성 전선은 앞의 조조군과 뒤의 강동군 사이에서 맥성 쪽으로 밀리고 있습니다.' }, { id: 'forty-fourth-lu-meng-seals-roads', @@ -3170,7 +3170,7 @@ export const fortyFourthBattleIntroPages: StoryPage[] = [ chapter: '봉쇄되는 길', background: 'story-maicheng-isolation', speaker: '왕평', - text: '맥성으로 빠지는 길목마다 흰 옷을 벗은 강동 병사가 서 있습니다. 큰길은 막혔고, 숲과 물목의 작은 길도 오래 버티지 못할 것입니다.' + text: '맥성 북문 밖 길목마다 흰 옷을 벗은 강동 병사가 서 있습니다. 큰길은 막혔고, 갈대 물목과 산길의 작은 틈도 오래 버티지 못할 것입니다.' }, { id: 'forty-fourth-guan-yu-resolve', @@ -3179,7 +3179,7 @@ export const fortyFourthBattleIntroPages: StoryPage[] = [ background: 'story-maicheng-isolation', speaker: '관우', portrait: 'guanYu', - text: '성 하나가 아니라 의리를 지키는 싸움이 되었소. 맥성으로 길을 내고 남은 병사들을 수습하겠소. 길이 좁을수록 마음이 먼저 무너지지 않게 하시오.' + text: '성 하나를 지키는 싸움이 아니라 남은 병사를 살리는 싸움이 되었소. 북문 밖 퇴로를 열고 흩어진 병사를 수습하겠소. 길이 좁을수록 마음이 먼저 무너지지 않게 하시오.' }, { id: 'forty-fourth-sortie', @@ -3188,7 +3188,7 @@ export const fortyFourthBattleIntroPages: StoryPage[] = [ background: 'story-maicheng-isolation', speaker: '유비', portrait: 'liuBei', - text: '운장의 깃발이 고립되었다면, 늦더라도 길을 열어야 하오. 북문과 갈대 물목을 동시에 살펴 포위망을 찢고 맥성의 퇴로를 확보하시오.' + text: '운장의 깃발이 고립되었다면, 늦더라도 길을 열어야 하오. 북문 퇴로와 갈대 물목을 동시에 살펴 포위망을 찢고 남은 병사를 빼내시오.' } ]; @@ -3198,7 +3198,7 @@ export const fortyFourthBattleVictoryPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '뚫린 좁은 길', background: 'story-maicheng-isolation', - text: '맥성 북문의 좁은 길은 간신히 열렸고, 흩어진 병사들이 다시 깃발 아래로 모였습니다. 그러나 길 밖의 횃불은 여전히 더 많았습니다.' + text: '맥성 북문 밖 좁은 퇴로는 간신히 열렸고, 흩어진 병사들이 다시 깃발 아래로 모였습니다. 그러나 길 밖의 횃불은 여전히 더 많았습니다.' }, { id: 'forty-fourth-lu-meng-tightens', @@ -3206,7 +3206,7 @@ export const fortyFourthBattleVictoryPages: StoryPage[] = [ chapter: '좁아지는 포위', background: 'story-maicheng-isolation', speaker: '제갈량', - text: '여몽은 물러난 것이 아니라 더 넓게 둘러섰습니다. 맥성의 작은 승리는 시간을 벌었을 뿐, 형주를 되찾는 길은 아직 멀고 험합니다.' + text: '여몽은 물러난 것이 아니라 더 넓게 둘러섰습니다. 맥성의 작은 승리는 병사를 살릴 시간을 벌었을 뿐, 형주를 되찾는 길은 이미 멀고 험합니다.' }, { id: 'forty-fourth-next-jing-loss', @@ -3214,7 +3214,7 @@ export const fortyFourthBattleVictoryPages: StoryPage[] = [ chapter: '형주의 상실', background: 'story-maicheng-isolation', speaker: '마량', - text: '맥성의 포위는 풀렸으나 강릉과 공안의 마음은 이미 갈라졌습니다. 다음 장에서는 형주 상실의 대가와 유비의 분노가 더 큰 전쟁으로 번지는 흐름을 준비해야 합니다.' + text: '맥성의 퇴로는 열렸으나 강릉과 공안의 마음은 이미 갈라졌습니다. 다음 장에서는 형주 상실의 대가와 유비의 분노가 이릉으로 번지는 흐름을 준비해야 합니다.' } ]; diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index 34eccac..a9cdd7d 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -1484,15 +1484,31 @@ const sortieRulesByBattleId: Partial