diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index 1910542..2856de1 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -7838,6 +7838,82 @@ export const fiftyFourthBattleScenario: BattleScenarioDefinition = { '회의장과 마을, 항복로가 무너지면 맹획을 잡아도 남중의 마음은 닫힙니다. 잔당 요새를 누르고, 물러설 자의 길과 촌장들의 증언을 지키십시오.', '제갈량은 반드시 생존해야 합니다. 황권은 약속 장부를, 마량과 왕평은 회의장과 마을길을, 조운과 마대는 항복로 차단선을 맡기 좋습니다.' ], + tacticalGuide: { + summary: + '칠종칠금 최종전은 맹획을 마지막으로 생포하고, 그 장면을 남중 촌장들이 납득할 수 있게 만드는 결말 전투입니다. 항복 회의장 길, 촌장 증언 마을, 최후 잔당 요새를 함께 관리해야 남중 평정으로 이어집니다.', + route: '서남쪽 약속 장부 정리 -> 중앙 회의장 길 확보 -> 촌장 증언 마을 보호 -> 북동쪽 최후 잔당 요새 제압 -> 항복로 차단선 유지 -> 맹획 일곱 번째 생포', + focus: + '이번 싸움은 적을 쓰러뜨리는 것보다 남중이 지켜보는 약속을 완성하는 것이 중요합니다. 회의장 길과 마을을 먼저 안정시키고, 잔당 요새를 눌러 항복로를 흔드는 자들을 끊은 뒤 맹획을 마지막으로 생포하십시오.', + roles: [ + '제갈량: 일곱 번째 생포를 항복과 평정으로 완성하는 필수 지휘관입니다.', + '황권: 일곱 번의 석방과 약속을 장부로 정리해 항복 조건을 분명히 합니다.', + '마량: 촌장들이 보는 회의장에서 남중이 받아들일 말을 고릅니다.', + '왕평: 회의장 길과 마을길을 나누어 군율과 항복로가 흔들리지 않게 합니다.', + '조운/마대: 빠른 기동으로 항복로를 해치려는 잔당과 맹수대를 끊습니다.', + '황충: 고지 궁병과 주술사를 멀리서 억제해 회의장 압박을 줄입니다.' + ], + events: { + 'ally-danger': { + title: '약속 장부', + lines: [ + '황권: 일곱 번의 석방이 한 줄로 남아야 합니다. 오늘 장부가 흐트러지면 항복도 말뿐이 됩니다.', + '제갈량: 장부와 길을 함께 지키십시오. 남중이 보는 것은 우리의 칼보다 약속입니다.' + ] + }, + 'village-approach': { + title: '촌장 증언', + lines: [ + '마량: 촌장들이 눈앞에서 본 일을 말해야 항복이 오래갑니다. 마을을 먼저 안정시키겠습니다.', + '왕평: 회의장으로 이어지는 길과 마을길을 갈라 두겠습니다. 추격이 섞이면 군율도 섞입니다.' + ] + }, + 'enemy-posture': { + title: '최후 잔당', + lines: [ + '조운: 항복로를 흐트러뜨리는 기동대가 보입니다. 길목에서 끊겠습니다.', + '황충: 요새 위 사격은 제가 누르겠습니다. 회의장 쪽으로 화살이 새지 않게 하겠습니다.' + ] + }, + 'leader-wavering': { + title: '마지막 생포', + lines: [ + '맹획: 일곱 번이라면 이제 남중의 눈도 나를 보고 있겠지.', + '제갈량: 그래서 더더욱 군율을 잃을 수 없습니다. 오늘의 생포는 남중을 꺾는 일이 아니라 남중을 설득하는 일입니다.' + ] + } + } + }, + sortie: { + sortieLimit: 7, + requiredUnits: ['zhuge-liang'], + recommendedUnits: [ + { unitId: 'zhuge-liang', role: 'support', reason: '일곱 번째 생포를 항복과 남중 평정으로 완성해야 하는 필수 지휘관입니다.' }, + { unitId: 'huang-quan', role: 'support', reason: '일곱 번의 약속을 장부로 남겨 항복 조건을 분명히 합니다.' }, + { unitId: 'ma-liang', role: 'support', reason: '촌장들이 보는 회의장에서 남중이 받아들일 말을 고릅니다.' }, + { unitId: 'wang-ping', role: 'flank', reason: '회의장 길과 마을길을 나누어 군율이 흔들리지 않게 합니다.' }, + { unitId: 'zhao-yun', role: 'front', reason: '빠른 기동으로 항복로를 해치려는 잔당을 끊습니다.' }, + { unitId: 'ma-dai', role: 'flank', reason: '남중 기동대를 따라잡되 항복로를 밟지 않는 절제가 필요합니다.' }, + { unitId: 'huang-zhong', role: 'front', reason: '고지 궁병과 주술사를 멀리서 억제해 회의장 압박을 줄입니다.' } + ], + recommendedClasses: [ + { label: '항복 회의장', classKeys: ['strategist'], reason: '회의장 길과 항복 조건을 지휘합니다.' }, + { label: '약속 장부', classKeys: ['strategist'], reason: '일곱 번의 석방과 보증을 기록으로 남깁니다.' }, + { label: '촌장 증언 마을', classKeys: ['infantry', 'archer'], reason: '마을이 전투에 휘말리지 않게 보호합니다.' }, + { label: '항복로 차단선', classKeys: ['cavalry'], reason: '잔당 기동대가 회의장 길을 흔들기 전에 끊습니다.' }, + { label: '최후 요새 견제', classKeys: ['archer', 'spearman'], reason: '잔당 요새의 사격과 주술을 안정적으로 누릅니다.' } + ], + deploymentSlots: [ + { x: 16, y: 66, role: 'support', unitId: 'zhuge-liang', label: '회의 지휘' }, + { x: 13, y: 64, role: 'support', unitId: 'huang-quan', label: '약속 장부' }, + { x: 20, y: 63, role: 'support', unitId: 'ma-liang', label: '촌장 증언' }, + { x: 32, y: 62, role: 'flank', unitId: 'wang-ping', label: '회의장 길' }, + { x: 27, y: 66, role: 'front', unitId: 'zhao-yun', label: '항복로 차단' }, + { x: 45, y: 71, role: 'flank', unitId: 'ma-dai', label: '측면 절제' }, + { x: 30, y: 67, role: 'front', unitId: 'huang-zhong', label: '요새 견제' } + ], + note: + '칠종칠금 7차전은 남중 평정의 결말입니다. 맹획을 마지막으로 생포하되, 촌장 증언 마을, 항복 회의장 길, 약속 장부, 최후 잔당 요새를 함께 관리하십시오.' + }, map: fiftyFourthBattleMap, units: fiftyFourthBattleUnits, bonds: fiftyFourthBattleBonds, @@ -7865,21 +7941,27 @@ export const fiftyFourthBattleScenario: BattleScenarioDefinition = { kind: 'secure-terrain', label: '항복 회의장 길 확보', rewardGold: 4820, - terrain: 'road' + terrain: 'road', + targetTile: { x: 84, y: 58, radius: 6 }, + threatRadius: 0 }, { id: 'village-witnesses', kind: 'secure-terrain', label: '촌장 증언 마을 보호', rewardGold: 4480, - terrain: 'village' + terrain: 'village', + targetTile: { x: 56, y: 58, radius: 5 }, + threatRadius: 0 }, { id: 'final-remnant-forts', kind: 'secure-terrain', label: '최후 잔당 요새 제압', rewardGold: 4260, - terrain: 'fort' + terrain: 'fort', + targetTile: { x: 90, y: 50, radius: 6 }, + threatRadius: 0 }, { id: 'quick', @@ -7891,6 +7973,14 @@ export const fiftyFourthBattleScenario: BattleScenarioDefinition = { ], defeatConditions: [{ kind: 'unit-defeated', unitId: 'zhuge-liang' }], itemRewards: ['콩 42', '상처약 30', '탁주 15', '남중 평정 장부 1', '맹획 항복 서약 1'], + campaignReward: { + supplies: ['콩 42', '상처약 30', '탁주 15'], + equipment: ['남중 평정 장부 1'], + reputation: ['맹획 항복 서약 1'], + unlockLabel: '북벌 준비', + note: + '칠종칠금이 완성되며 남중이 평정되었습니다. 촉한은 뒤를 안정시킨 뒤 한중 보급과 기산 출진로를 정비해 북벌 준비로 넘어갑니다.' + }, victoryPages: fiftyFourthBattleVictoryPages, nextCampScene: 'CampScene' }; diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index 6685570..b30132d 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -3784,7 +3784,7 @@ export const fiftyFourthBattleIntroPages: StoryPage[] = [ chapter: '일곱 번째 생포', background: 'story-nanzhong-captures', speaker: '제갈량', - text: '이번 싸움은 남중을 꺾는 전투가 아니라 남중이 스스로 고개를 끄덕이게 만드는 전투입니다. 맹획을 마지막으로 생포하되, 회의장과 마을, 신뢰 장부를 모두 지키십시오.' + text: '이번 싸움은 남중을 꺾는 전투가 아니라 남중이 스스로 고개를 끄덕이게 만드는 전투입니다. 맹획을 마지막으로 생포하되, 항복 회의장 길과 촌장 증언 마을, 약속 장부를 모두 지키십시오.' }, { id: 'fifty-fourth-sortie', @@ -3792,7 +3792,7 @@ export const fiftyFourthBattleIntroPages: StoryPage[] = [ chapter: '칠종칠금 7차전', background: 'story-nanzhong-captures', speaker: '왕평', - text: '마지막 전장은 길이 많아 보이지만, 잘못 밀고 들어가면 촌장들이 보는 앞에서 군율을 잃게 됩니다. 빠른 장수는 추격을 멈추고, 문사는 약속을 남기며, 전열은 회의장을 지켜야 합니다.' + text: '마지막 전장은 길이 많아 보이지만, 잘못 밀고 들어가면 촌장들이 보는 앞에서 군율을 잃게 됩니다. 빠른 장수는 항복로 추격을 멈추고, 문사는 약속을 남기며, 전열은 회의장과 마을길을 지켜야 합니다.' } ]; @@ -3802,7 +3802,7 @@ export const fiftyFourthBattleVictoryPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '일곱 번째 생포', background: 'story-nanzhong-captures', - text: '맹획은 일곱 번째로 포위되었습니다. 그러나 이번에는 포로장의 침묵이 아니라, 촌장들의 눈앞에서 지켜진 약속과 무너진 고집이 함께 남았습니다.' + text: '맹획은 일곱 번째로 포위되었습니다. 그러나 이번에는 포로장의 침묵이 아니라, 촌장들의 눈앞에서 지켜진 회의장 길과 약속 장부, 무너진 고집이 함께 남았습니다.' }, { id: 'fifty-fourth-victory-meng-huo-yields', @@ -3818,7 +3818,7 @@ export const fiftyFourthBattleVictoryPages: StoryPage[] = [ chapter: '남중 평정', background: 'story-nanzhong-captures', speaker: '제갈량', - text: '남중은 힘으로만 묶인 땅이 아닙니다. 약속을 지킨 뒤 얻은 땅입니다. 이제 촉한은 뒤를 안정시키고, 북쪽을 바라볼 준비를 시작해야 합니다.' + text: '남중은 힘으로만 묶인 땅이 아닙니다. 약속을 지킨 뒤 얻은 땅입니다. 이제 촉한은 뒤를 안정시키고, 한중의 보급과 기산 출진로를 정비해 북쪽을 바라볼 준비를 시작해야 합니다.' } ]; diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index b281be9..7a07731 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -1792,6 +1792,22 @@ const sortieRulesByBattleId: Partial