From 8d199329b789532b393a36f9a0fad76a05da2218 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sat, 4 Jul 2026 17:43:43 +0900 Subject: [PATCH] Refine Bowang ambush battle flow --- src/game/data/battles.ts | 98 ++++++++++++++++++++++++++++++++--- src/game/data/campaignFlow.ts | 4 +- src/game/data/scenario.ts | 8 +-- src/game/scenes/CampScene.ts | 12 ++--- 4 files changed, 102 insertions(+), 20 deletions(-) diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index a48b2b4..2ec0e25 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -2409,16 +2409,89 @@ export const eighteenthBattleScenario: BattleScenarioDefinition = { victoryConditionLabel: '하후돈 퇴각', defeatConditionLabel: '유비 퇴각', openingObjectiveLines: [ - '조조군 선봉 하후돈이 신야로 향합니다. 제갈량은 박망파의 숲길과 좁은 물길을 이용해 적의 속도를 끊으려 합니다.', - '숲길 궁병과 기병이 동시에 압박하지만, 강줄기와 매복 지형을 이용하면 조조군 전열을 갈라낼 수 있습니다. 제갈량의 책략과 조운의 기동을 함께 활용하십시오.', - '하후돈을 퇴각시키고 박망파의 길목을 지키십시오. 27턴 안에 승리하면 강동과 손잡을 시간을 더 벌 수 있습니다.' + '제갈량이 합류한 뒤 처음 맞는 실전입니다. 조조군 선봉 하후돈은 신야로 곧장 밀고 들어오지만, 박망파의 숲길과 물길은 매복에 유리합니다.', + '서쪽 진영은 일부러 길을 내주는 듯 버티고, 중앙 숲길의 화공 매복지를 확보하십시오. 조운은 기병을 끊고, 관우와 장비는 좁은 길목에서 적 전열을 갈라야 합니다.', + '하후돈을 퇴각시키고 박망파의 길목을 지키십시오. 40턴 안에 승리하면 강동과 손잡을 시간을 더 벌 수 있습니다.' ], + tacticalGuide: { + summary: '서쪽 신야 진영에서 조조군 선봉을 숲길 안쪽으로 끌어들인 뒤, 중앙 화공 매복지와 동쪽 길목에서 하후돈의 전열을 끊는 전투입니다.', + route: '서쪽 신야 진영 → 박망 숲길 미끼선 → 화공 매복지 → 하후돈 본대', + focus: + '하후돈을 바로 치기보다 박망 숲길 중앙의 매복지를 먼저 잡아야 제갈량의 첫 계책이 살아납니다. 조운이 기병을 늦추고, 관우와 장비가 길목을 막는 동안 제갈량은 화공과 혼란으로 적 전열을 나눕니다.', + roles: [ + '제갈량: 화공 매복과 적 전열 분리', + '유비: 후방 지휘와 생존 조건 유지', + '조운: 추격 기병 차단과 측면 흔들기', + '관우: 좁은 길목 전열 유지', + '장비: 매복 후 역습과 돌파', + '손건: 강동 사절로 이어질 전후 보고 정리' + ], + events: { + 'village-approach': { + title: '화공 매복지 접근', + lines: [ + '이 숲길 안쪽을 잡으면 하후돈의 선봉을 좁은 길과 불길 사이에 묶을 수 있습니다.', + '제갈량을 너무 뒤에 두지 말고, 관우와 장비가 길목을 누르는 동안 화공 책략을 준비하십시오.' + ] + }, + 'enemy-posture': { + title: '하후돈 선봉 돌입', + lines: [ + '하후돈은 속도를 믿고 곧장 밀고 들어옵니다.', + '초반에는 서쪽 진영을 무리하게 넓히지 말고, 조조군 기병이 숲길 안으로 들어오도록 전열을 낮게 잡으십시오.' + ] + }, + 'cavalry-approach': { + title: '추격 기병 접근', + lines: [ + '조조군 기병이 숲길 측면으로 파고듭니다.', + '조운이 먼저 끊어 내면 제갈량의 화공 매복지가 안정되고, 유비의 후방 지휘선도 흔들리지 않습니다.' + ] + }, + 'leader-wavering': { + title: '하후돈 전열 동요', + lines: [ + '매복지와 길목이 모두 유비군 손에 들어오자 하후돈의 전열이 길게 찢어지고 있습니다.', + '남은 친위병을 정리하고 하후돈을 몰아내면 강동 사절로 이어질 시간을 벌 수 있습니다.' + ] + } + } + }, + sortie: { + sortieLimit: 6, + requiredUnits: ['liu-bei', 'zhuge-liang'], + recommendedUnits: [ + { unitId: 'liu-bei', role: 'support', reason: '후방에서 전열을 묶는 지휘 주체이며 패배 조건입니다.' }, + { unitId: 'zhuge-liang', role: 'support', reason: '박망파 화공 매복과 혼란 책략을 맡는 이번 전투의 핵심입니다.' }, + { unitId: 'zhao-yun', role: 'flank', reason: '추격 기병을 끊고 숲길 측면을 빠르게 흔들 수 있습니다.' }, + { unitId: 'guan-yu', role: 'front', reason: '좁은 길목에서 하후돈 친위와 보병 전열을 받아냅니다.' }, + { unitId: 'zhang-fei', role: 'flank', reason: '매복 후 역습으로 적 선봉을 밀어내는 돌파 역할입니다.' }, + { unitId: 'sun-qian', role: 'support', reason: '전후 보고와 강동 사절로 이어질 명분을 정리합니다.' } + ], + recommendedClasses: [ + { label: '화공 책략', classKeys: ['strategist'], reason: '박망파 매복은 제갈량의 화공과 혼란 책략이 중심입니다.' }, + { label: '후방 지휘', classKeys: ['lord'], reason: '유비가 안전하게 버텨야 조조군 선봉을 끌어들일 수 있습니다.' }, + { label: '길목 전열', classKeys: ['infantry'], reason: '좁은 숲길에서 적 보병과 친위대를 안정적으로 받아낼 수 있습니다.' }, + { label: '기병 차단', classKeys: ['cavalry'], reason: '조조군 기병을 먼저 끊어 화공 매복지가 흔들리지 않게 합니다.' }, + { label: '역습 돌파', classKeys: ['spearman'], reason: '매복이 시작된 뒤 밀려든 적을 밀어내기 좋습니다.' }, + { label: '전후 보고', classKeys: ['strategist'], reason: '강동 사절로 이어질 명분과 보상 흐름을 보조합니다.' } + ], + deploymentSlots: [ + { role: 'support', unitId: 'liu-bei', x: 3, y: 18, label: '후방 지휘' }, + { role: 'front', unitId: 'guan-yu', x: 4, y: 17, label: '길목 전열' }, + { role: 'flank', unitId: 'zhang-fei', x: 4, y: 19, label: '역습 돌파' }, + { role: 'flank', unitId: 'zhao-yun', x: 6, y: 17, label: '기병 차단' }, + { role: 'support', unitId: 'zhuge-liang', x: 6, y: 19, label: '화공 책략' }, + { role: 'support', unitId: 'sun-qian', x: 5, y: 20, label: '전후 보고' } + ], + note: '박망파 매복전은 제갈량의 첫 실전 계책입니다. 유비와 제갈량을 반드시 포함하고, 조운으로 기병을 끊은 뒤 관우와 장비가 숲길 길목을 눌러 화공 매복지를 안정시키는 편성이 좋습니다.' + }, map: eighteenthBattleMap, units: eighteenthBattleUnits, bonds: eighteenthBattleBonds, mapTextureKey: 'battle-map-eighteenth', leaderUnitId: 'bowang-leader-xiahou-dun', - quickVictoryTurnLimit: 27, + quickVictoryTurnLimit: 40, baseVictoryGold: 2080, objectives: [ { @@ -2438,20 +2511,29 @@ export const eighteenthBattleScenario: BattleScenarioDefinition = { { id: 'ambush-village', kind: 'secure-terrain', - label: '박망파 매복지 확보', + label: '박망파 화공 매복지 확보', rewardGold: 760, - terrain: 'village' + terrain: 'village', + targetTile: { x: 27, y: 18, radius: 5 }, + threatRadius: 0 }, { id: 'quick', kind: 'quick-victory', - label: '27턴 이내 승리', + label: '40턴 이내 승리', rewardGold: 600, - maxTurn: 27 + maxTurn: 40 } ], defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }], itemRewards: ['콩 7', '상처약 4', '탁주 2', '강동 풍문 +1'], + campaignReward: { + supplies: ['콩 7', '상처약 4', '탁주 2'], + reputation: ['박망파 첫 계책 +1', '강동 사절 명분 +1'], + unlockBattleId: 'nineteenth-battle-changban-refuge', + unlockLabel: '장판파 피난로 개방', + note: '제갈량의 첫 화공 매복으로 조조군 선봉을 늦추고, 강동과 손잡을 시간을 벌어 장판파 피난로로 이어집니다.' + }, victoryPages: eighteenthBattleVictoryPages, nextCampScene: 'CampScene' }; diff --git a/src/game/data/campaignFlow.ts b/src/game/data/campaignFlow.ts index 9b15b1a..1bfa0d6 100644 --- a/src/game/data/campaignFlow.ts +++ b/src/game/data/campaignFlow.ts @@ -400,8 +400,8 @@ const sortieFlows: Record = { eyebrow: '다음 전장', title: nineteenthBattleScenario.title, description: - '박망파에서 조조군 선봉을 늦췄지만 대군의 남하는 계속됩니다. 신야의 백성을 데리고 장판파 피난로를 열어야 강동 사절로 이어질 시간을 벌 수 있습니다.', - rewardHint: `예상 보상: ${nineteenthBattleScenario.title} 개방 / 장판파 피난로 확보`, + '박망파의 화공 매복으로 조조군 선봉을 늦췄지만 대군의 남하는 계속됩니다. 신야의 백성을 데리고 장판파 피난로를 열어야 강동 사절로 이어질 시간을 벌 수 있습니다.', + rewardHint: `예상 보상: ${nineteenthBattleScenario.title} 개방 / 박망파 지연 성공`, nextBattleId: nineteenthBattleScenario.id, campaignStep: 'nineteenth-battle', pages: [...eighteenthBattleVictoryPages, ...nineteenthBattleIntroPages] diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index 5d2f9ba..2f937b7 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -1461,7 +1461,7 @@ export const eighteenthBattleIntroPages: StoryPage[] = [ chapter: '박망파의 계책', background: 'story-wolong', speaker: '제갈량', - text: '하후돈의 선봉은 빠르나 숲과 좁은 길을 가볍게 여길 것입니다. 길을 내어 주는 척하다가 박망파의 숲길에서 불과 매복으로 그 기세를 꺾겠습니다.' + text: '하후돈의 선봉은 빠르나 숲과 좁은 길을 가볍게 여길 것입니다. 서쪽 진영은 물러나는 듯 버티고, 중앙 숲길의 화공 매복지에서 그 기세를 꺾겠습니다.' }, { id: 'eighteenth-generals-doubt', @@ -1470,7 +1470,7 @@ export const eighteenthBattleIntroPages: StoryPage[] = [ background: 'story-wolong', speaker: '관우', portrait: 'guanYu', - text: '군사의 말이 이치에 맞다 하여도, 전장은 말과 다릅니다. 그러나 형님께서 맡기셨다면 우리 또한 그 계책을 전장에서 증명하겠습니다.' + text: '군사의 말이 이치에 맞다 하여도, 전장은 말과 다릅니다. 그러나 형님께서 맡기셨다면 좁은 길목은 우리가 막고, 그 계책을 전장에서 증명하겠습니다.' }, { id: 'eighteenth-bowang-sortie', @@ -1479,7 +1479,7 @@ export const eighteenthBattleIntroPages: StoryPage[] = [ background: 'story-wolong', speaker: '유비', portrait: 'liuBei', - text: '오늘 싸움은 적을 많이 베는 것보다 조조군의 발을 묶는 것이 중요하오. 공명의 계책을 중심에 두고, 숲길과 불길 사이에서 전열을 흩트리지 맙시다.' + text: '오늘 싸움은 적을 많이 베는 것보다 조조군의 발을 묶는 것이 중요하오. 조운은 기병을 끊고, 관우와 장비는 숲길 길목을 눌러 공명의 화공을 살립시다.' } ]; @@ -1489,7 +1489,7 @@ export const eighteenthBattleVictoryPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '숲길의 불빛', background: 'story-wolong', - text: '박망파의 숲길에 불빛이 번지고, 하후돈의 선봉은 좁은 길에서 서로의 퇴로를 막았다. 유비군은 큰 병력 없이도 조조군의 진격을 늦추었다.' + text: '박망파의 숲길에 불빛이 번지고, 하후돈의 선봉은 좁은 길에서 서로의 퇴로를 막았다. 유비군은 화공 매복지를 지켜 내며 조조군의 진격을 늦추었다.' }, { id: 'eighteenth-zhuge-trust-earned', diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index 281d707..e0c0478 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -765,14 +765,14 @@ const sortieRulesByBattleId: Partial