From 6801aebfe429b0ca59df34fd72fed6d91edc8e61 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sat, 4 Jul 2026 23:04:15 +0900 Subject: [PATCH] Refine Nanzhong stabilization battle flow --- src/game/data/battles.ts | 92 +++++++++++++++++++++++++++++++++++- src/game/data/scenario.ts | 12 ++--- src/game/scenes/CampScene.ts | 28 ++++++++--- 3 files changed, 118 insertions(+), 14 deletions(-) diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index 7d81046..3a216c9 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -6775,6 +6775,82 @@ export const fortySeventhBattleScenario: 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: 'zhao-yun', role: 'front', reason: '서쪽 산길 선봉과 후위 회수에 안정적인 기동 축입니다.' }, + { unitId: 'wang-ping', role: 'flank', reason: '남중 숲길과 강변 지형을 읽어 매복을 줄이는 길잡이입니다.' }, + { unitId: 'ma-liang', role: 'support', reason: '마을 회유와 남중 민심 판단으로 평정 명분을 세웁니다.' }, + { unitId: 'huang-quan', role: 'support', reason: '창고와 보급 장부를 안정시켜 다음 전선의 군량을 남깁니다.' }, + { unitId: 'huang-zhong', role: 'flank', reason: '밀림 궁병과 고지 방어선을 견제하는 원거리 축입니다.' }, + { unitId: 'ma-chao', role: 'front', reason: '남중 기병과 빠른 차단선에 맞서는 강한 측면 압박입니다.' } + ], + recommendedClasses: [ + { label: '섭정 지휘', classKeys: ['strategist'], reason: '제갈량 생존과 회유 방침이 전투의 중심입니다.' }, + { label: '산길 선봉', classKeys: ['infantry', 'spearman'], reason: '숲길과 마을 입구를 차근차근 열어야 합니다.' }, + { label: '길잡이 기동', classKeys: ['cavalry'], reason: '계곡과 강변 사이의 넓은 거리를 빠르게 이어 줍니다.' }, + { label: '고지 견제', classKeys: ['archer'], reason: '밀림 궁병과 고지 방어선을 먼저 눌러 마을 진입을 돕습니다.' }, + { label: '회유 보급', classKeys: ['strategist'], reason: '마을과 창고를 약탈하지 않고 안정시키는 판단이 필요합니다.' } + ], + deploymentSlots: [ + { x: 12, y: 47, role: 'support', unitId: 'zhuge-liang', label: '섭정 지휘' }, + { x: 20, y: 46, role: 'front', unitId: 'zhao-yun', label: '산길 선봉' }, + { x: 24, y: 43, role: 'flank', unitId: 'wang-ping', label: '길잡이' }, + { x: 16, y: 44, role: 'support', unitId: 'ma-liang', label: '마을 회유' }, + { x: 10, y: 45, role: 'support', unitId: 'huang-quan', label: '창고 장부' }, + { x: 23, y: 48, role: 'flank', unitId: 'huang-zhong', label: '고지 견제' }, + { x: 31, y: 47, role: 'front', unitId: 'ma-chao', label: '기병 압박' } + ], + note: + '남중 안정로는 적을 전부 베는 전투가 아닙니다. 제갈량을 지키며 산길, 마을, 창고를 순서대로 안정시키고 맹획 본대전으로 이어질 회유 명분을 남기십시오.' + }, map: fortySeventhBattleMap, units: fortySeventhBattleUnits, bonds: fortySeventhBattleBonds, @@ -6802,14 +6878,18 @@ export const fortySeventhBattleScenario: BattleScenarioDefinition = { kind: 'secure-terrain', label: '남중 마을 안정', rewardGold: 3420, - terrain: 'village' + terrain: 'village', + targetTile: { x: 48, y: 45, radius: 6 }, + threatRadius: 0 }, { id: 'supply-camps', kind: 'secure-terrain', label: '남쪽 창고 확보', rewardGold: 2720, - terrain: 'camp' + terrain: 'camp', + targetTile: { x: 59, y: 56, radius: 5 }, + threatRadius: 0 }, { id: 'quick', @@ -6821,6 +6901,14 @@ export const fortySeventhBattleScenario: BattleScenarioDefinition = { ], defeatConditions: [{ kind: 'unit-defeated', unitId: 'zhuge-liang' }], itemRewards: ['콩 42', '상처약 30', '탁주 13', '남중 산길 지도 1', '마을 회유 문서 1'], + campaignReward: { + supplies: ['콩 42', '상처약 30', '탁주 13'], + equipment: ['남중 산길 지도 1'], + reputation: ['마을 회유 문서 1'], + unlockLabel: '맹획 본대전', + note: + '남중의 첫 길목과 창고를 안정시켰습니다. 다음 군영에서는 옹개의 뒤에 있는 맹획 본대를 상대하되, 생포와 회유가 전투 목표로 더 강하게 드러나야 합니다.' + }, victoryPages: fortySeventhBattleVictoryPages, nextCampScene: 'CampScene' }; diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index aafbfc4..d2881a9 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -3397,7 +3397,7 @@ export const fortySeventhBattleIntroPages: StoryPage[] = [ chapter: '남중의 흔들림', background: 'story-nanzhong', speaker: '황권', - text: '백제성의 유탁 뒤 촉한은 아직 상처를 다 씻지 못했습니다. 그러나 남중의 여러 호족과 반란군은 바로 그 틈을 보며, 성도 남쪽의 길과 창고를 흔들기 시작했습니다.' + text: '백제성의 유탁 뒤 촉한은 아직 상처를 다 씻지 못했습니다. 남중의 여러 호족은 그 틈을 보고, 성도 남쪽 산길의 마을과 창고를 먼저 흔들기 시작했습니다.' }, { id: 'forty-seventh-zhuge-policy', @@ -3405,7 +3405,7 @@ export const fortySeventhBattleIntroPages: StoryPage[] = [ chapter: '먼저 안을 다스리다', background: 'story-nanzhong', speaker: '제갈량', - text: '북방을 논하기 전에 나라 안의 불안을 먼저 다스려야 합니다. 남중을 힘으로만 누르면 길은 열려도 마음은 닫힙니다. 반란의 길목을 끊고, 마을과 창고는 살려 두십시오.' + text: '북방을 논하기 전에 나라 안의 불안을 먼저 다스려야 합니다. 남중을 힘으로만 누르면 길은 열려도 마음은 닫힙니다. 옹개의 지휘선은 끊되, 마을과 창고는 살려 두십시오.' }, { id: 'forty-seventh-zhao-yun-vanguard', @@ -3413,7 +3413,7 @@ export const fortySeventhBattleIntroPages: StoryPage[] = [ chapter: '남쪽 길의 선봉', background: 'story-nanzhong', speaker: '조운', - text: '산길과 숲길이 겹친 전장이라 기병만 앞세울 수 없습니다. 왕평이 길을 보고, 황권이 보급을 재며, 마량이 마을의 말을 들어야 합니다. 저는 뒤처진 부대를 회수하겠습니다.' + text: '산길과 숲길이 겹친 전장이라 기병만 앞세울 수 없습니다. 왕평이 매복을 보고, 황권이 창고를 재며, 마량이 마을의 말을 들어야 합니다. 저는 뒤처진 부대를 회수하겠습니다.' }, { id: 'forty-seventh-sortie', @@ -3421,7 +3421,7 @@ export const fortySeventhBattleIntroPages: StoryPage[] = [ chapter: '남중 안정로', background: 'story-nanzhong', speaker: '제갈량', - text: '옹개와 남중 반란군이 밀림 길목에 진을 쳤습니다. 반란군 지휘선을 흩뜨리고, 마을과 창고를 확보해 남중 평정의 첫 발판을 세우십시오.' + text: '옹개와 남중 반란군이 밀림 길목에 진을 쳤습니다. 중앙 마을을 안정시키고 남쪽 창고를 확보한 뒤, 옹개의 지휘선을 흩뜨려 남중 평정의 첫 발판을 세우십시오.' } ]; @@ -3431,7 +3431,7 @@ export const fortySeventhBattleVictoryPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '남쪽 길이 열리다', background: 'story-nanzhong', - text: '밀림과 산길 사이의 반란군 지휘선이 흔들렸습니다. 촉한군은 마을을 약탈하지 않고 창고를 정리하며, 남중 평정이 단순한 추격전이 아님을 병사들에게 보였습니다.' + text: '중앙 마을과 남쪽 창고가 크게 무너지지 않은 채, 밀림과 산길 사이의 반란군 지휘선이 흔들렸습니다. 촉한군은 남중 평정이 단순한 추격전이 아님을 병사들에게 보였습니다.' }, { id: 'forty-seventh-meng-huo-shadow', @@ -3439,7 +3439,7 @@ export const fortySeventhBattleVictoryPages: StoryPage[] = [ chapter: '더 깊은 산', background: 'story-nanzhong', speaker: '왕평', - text: '옹개의 선봉은 물러났지만 남중의 산은 아직 깊습니다. 맹획의 이름이 여러 마을 사이에서 오가고 있고, 힘으로 꺾은 길 뒤에는 설득해야 할 마음이 남아 있습니다.' + text: '옹개의 선봉은 물러났지만 남중의 산은 아직 깊습니다. 맹획의 이름이 여러 마을 사이에서 오가고 있고, 오늘 살려 둔 길과 창고 위에서 설득해야 할 마음이 남아 있습니다.' }, { id: 'forty-seventh-next-nanman', diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index 2a145da..297a83b 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -1575,14 +1575,30 @@ const sortieRulesByBattleId: Partial