From 11bfc2ef938e9bbb0f4a18bc980edc64cb7e66fe Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sat, 4 Jul 2026 19:30:29 +0900 Subject: [PATCH] Refine Fu Pass entry battle flow --- src/game/data/battles.ts | 116 ++++++++++++++++++++++++++++++++-- src/game/data/campaignFlow.ts | 2 +- src/game/data/scenario.ts | 8 +-- src/game/scenes/CampScene.ts | 28 ++++++-- 4 files changed, 137 insertions(+), 17 deletions(-) diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index 6d1fe9b..24fc8a1 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -3935,15 +3935,82 @@ export const twentyEighthBattleScenario: BattleScenarioDefinition = { defeatConditionLabel: '유비 또는 제갈량 퇴각', openingObjectiveLines: [ '익주 원군로를 연 유비군은 부수관의 첫 문 앞에 섰습니다. 고패는 좁은 협곡과 성루 궁병을 이용해 원군의 명분을 관문 앞에서 묶으려 합니다.', - '이번 전투부터 방통이 출전 후보에 들어옵니다. 와룡과 봉추를 함께 세우면 계책은 강해지지만, 전열과 보급 선택이 더 날카로워집니다.', - '유비와 제갈량을 지키며 고패를 물러나게 하면 익주 내부 인재 법정이 군영에 합류합니다.' + '이번 전투부터 방통이 출전 후보에 들어옵니다. 와룡과 봉추를 함께 세우면 성루와 보급선 압박이 강해지지만, 전열과 회복 선택은 더 날카로워집니다.', + '유비와 제갈량을 지키며 관문 창고를 봉인하고 고패를 물러나게 하면, 익주 내부 인재 법정이 군영에 합류합니다.' ], + tacticalGuide: { + summary: + '부수관 진입전은 방통이 처음 전장 선택지로 들어오는 관문전입니다. 관문을 무작정 부수기보다 창고를 봉인하고 성루 사격선을 꺾어 익주 내부의 의심을 낮추십시오.', + route: '서남 유비군 진영 → 협곡 척후 차단 → 부수관 마을 안정 → 성루 사격선 억제 → 고패 퇴각', + focus: + '방통은 성루와 보급선을 흔드는 기책에 강하고, 제갈량은 전체 전열을 안정시킵니다. 둘을 함께 세우면 관문 압박은 좋아지지만 전열 한 자리가 비므로 위연이나 조운으로 빈틈을 메우십시오.', + roles: [ + '유비: 부수관 진입 명분과 패배 조건의 중심', + '제갈량: 협곡 전열과 보급선 압박 순서 판단', + '방통: 성루 사격선과 관문 창고를 흔드는 기책 담당', + '위연: 좁은 관문 보병 전열을 여는 돌파 역할', + '황충: 성루 궁병과 산루 궁병 견제', + '조운: 협곡 기병과 복병 차단' + ], + events: { + 'village-approach': { + title: '부수관 마을', + lines: [ + '방통: 관문을 열어도 마을 창고를 건드리면 익주의 문은 다시 닫힐 것입니다. 먼저 보급을 봉인하십시오.', + '유비: 군량을 탐하지 마시오. 이 길은 백성을 지키러 들어가는 길이오.' + ] + }, + 'cavalry-approach': { + title: '협곡 기병 차단', + lines: [ + '조운: 협곡 기병이 후방을 끊으려 합니다. 방통 선생의 계책이 닿기 전에 길부터 지키겠습니다.', + '제갈량: 기병을 놓치면 성루 압박이 늦어집니다. 전열과 후방을 동시에 보십시오.' + ] + }, + 'leader-wavering': { + title: '고패의 흔들림', + lines: [ + '성루 사격선과 관문 창고가 동시에 묶이자 고패의 병사들이 더는 좁은 길을 믿고 버티지 못합니다.', + '법정: 창고를 봉인하고도 관문을 연다라. 익주 안쪽에도 이 소식이 닿을 것입니다.' + ] + } + } + }, + sortie: { + sortieLimit: 6, + requiredUnits: ['liu-bei', 'zhuge-liang'], + recommendedUnits: [ + { unitId: 'liu-bei', role: 'reserve', reason: '부수관 진입 명분이자 패배 조건의 중심입니다.' }, + { unitId: 'pang-tong', role: 'support', reason: '성루 사격선과 관문 창고를 흔드는 이번 전투의 새 기책 축입니다.' }, + { unitId: 'zhuge-liang', role: 'support', reason: '방통의 기책을 전체 전열과 보급선 판단으로 연결합니다.' }, + { unitId: 'wei-yan', role: 'front', reason: '좁은 관문 보병 전열을 빠르게 열어 책사들의 압박 시간을 벌어 줍니다.' }, + { unitId: 'huang-zhong', role: 'support', reason: '성루 궁병과 산루 궁병을 안정적으로 견제합니다.' }, + { unitId: 'zhao-yun', role: 'flank', reason: '협곡 기병과 복병을 빠르게 끊어 후방을 지킵니다.' } + ], + recommendedClasses: [ + { label: '관문 명분', classKeys: ['lord'], reason: '유비가 살아 남아야 부수관 진입의 명분이 유지됩니다.' }, + { label: '와룡봉추', classKeys: ['strategist'], reason: '제갈량과 방통을 함께 세우면 관문 압박과 계책 성공률이 안정됩니다.' }, + { label: '협곡 돌파', classKeys: ['infantry', 'spearman'], reason: '위연 같은 돌파 장수가 좁은 길의 보병 전열을 열어야 합니다.' }, + { label: '기병 차단', classKeys: ['cavalry'], reason: '기동 장수가 협곡 기병과 복병을 끊어 책사를 보호합니다.' }, + { label: '성루 견제', classKeys: ['archer'], reason: '황충의 원거리 견제가 성루 궁병을 억제합니다.' } + ], + deploymentSlots: [ + { x: 4, y: 32, role: 'reserve', unitId: 'liu-bei', label: '관문 명분' }, + { x: 5, y: 32, role: 'support', unitId: 'zhuge-liang', label: '전열 판단' }, + { x: 9, y: 33, role: 'support', unitId: 'pang-tong', label: '성루 기책' }, + { x: 10, y: 31, role: 'front', unitId: 'wei-yan', label: '협곡 돌파' }, + { x: 7, y: 33, role: 'support', unitId: 'huang-zhong', label: '성루 견제' }, + { x: 8, y: 32, role: 'flank', unitId: 'zhao-yun', label: '기병 차단' } + ], + note: + '부수관 진입전은 방통을 처음 실전 편성으로 시험하는 전장입니다. 와룡과 봉추를 같이 세우면 관문 압박은 강해지지만, 전열과 보급 선택을 더 신중히 해야 합니다.' + }, map: twentyEighthBattleMap, units: twentyEighthBattleUnits, bonds: twentyEighthBattleBonds, mapTextureKey: 'battle-map-twenty-eighth', leaderUnitId: 'fupass-leader-gao-pei', - quickVictoryTurnLimit: 37, + quickVictoryTurnLimit: 50, baseVictoryGold: 3980, objectives: [ { @@ -3972,14 +4039,43 @@ export const twentyEighthBattleScenario: BattleScenarioDefinition = { kind: 'secure-terrain', label: '부수관 마을 안정', rewardGold: 1220, - terrain: 'village' + terrain: 'village', + targetTile: { x: 40, y: 19, radius: 13 }, + threatRadius: 0 + }, + { + id: 'canyon-screen', + kind: 'secure-terrain', + label: '협곡 기병 차단', + rewardGold: 1160, + terrain: 'road', + targetTile: { x: 42, y: 24, radius: 16 }, + threatRadius: 0 + }, + { + id: 'tower-archers', + kind: 'secure-terrain', + label: '성루 궁병 억제', + rewardGold: 1200, + terrain: 'fort', + targetTile: { x: 46, y: 17, radius: 10 }, + threatRadius: 0 + }, + { + id: 'gate-granary', + kind: 'secure-terrain', + label: '관문 창고 봉인', + rewardGold: 1280, + terrain: 'fort', + targetTile: { x: 49, y: 18, radius: 8 }, + threatRadius: 0 }, { id: 'quick', kind: 'quick-victory', - label: '37턴 이내 승리', + label: '50턴 이내 승리', rewardGold: 960, - maxTurn: 37 + maxTurn: 50 } ], defeatConditions: [ @@ -3987,6 +4083,14 @@ export const twentyEighthBattleScenario: BattleScenarioDefinition = { { kind: 'unit-defeated', unitId: 'zhuge-liang' } ], itemRewards: ['콩 13', '상처약 9', '탁주 6', '부수관 보급표 +1', '법정 합류'], + campaignReward: { + supplies: ['콩 13', '상처약 9', '탁주 6'], + reputation: ['부수관 보급표 +1', '와룡봉추 편성 경험 +1'], + recruits: ['fa-zheng'], + unlockBattleId: 'twenty-ninth-battle-luo-outer-wall', + unlockLabel: '낙성 외곽전 개방', + note: '부수관 창고를 봉인하고 관문을 열었습니다. 법정이 합류하고 낙성 외곽으로 향하는 길이 열립니다.' + }, victoryPages: twentyEighthBattleVictoryPages, nextCampScene: 'CampScene' }; diff --git a/src/game/data/campaignFlow.ts b/src/game/data/campaignFlow.ts index 6b57c14..a0c88e9 100644 --- a/src/game/data/campaignFlow.ts +++ b/src/game/data/campaignFlow.ts @@ -510,7 +510,7 @@ const sortieFlows: Record = { eyebrow: '다음 전장', title: twentyNinthBattleScenario.title, description: - '부수관이 열리고 법정이 합류했습니다. 이제 낙성 외곽으로 들어가 장임의 방어선과 오의의 흔들리는 마음을 동시에 상대해야 합니다.', + '부수관 창고를 봉인하고 성루 압박을 넘어선 유비군에게 법정이 합류했습니다. 이제 낙성 외곽으로 들어가 장임의 방어선과 오의의 흔들리는 마음을 동시에 상대해야 합니다.', rewardHint: `예상 보상: ${twentyNinthBattleScenario.title} 개방 / 오의 합류`, nextBattleId: twentyNinthBattleScenario.id, campaignStep: 'twenty-ninth-battle', diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index af76c23..632c66c 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -2086,7 +2086,7 @@ export const twentyEighthBattleIntroPages: StoryPage[] = [ chapter: '부수관의 그림자', background: 'story-yizhou-luo-road', speaker: '방통', - text: '익주 원군로는 열렸으나 부수관은 아직 닫혀 있습니다. 고패가 관문 병력을 모아 길을 끊으면, 우리 명분은 산문 앞에서 멈출 것입니다.' + text: '익주 원군로는 열렸으나 부수관은 아직 닫혀 있습니다. 고패가 성루와 창고를 함께 틀어쥐면, 우리 명분은 산문 앞에서 멈출 것입니다.' }, { id: 'twenty-eighth-fa-zheng-message', @@ -2102,7 +2102,7 @@ export const twentyEighthBattleIntroPages: StoryPage[] = [ chapter: '와룡과 봉추의 첫 편성', background: 'story-yizhou-luo-road', speaker: '마량', - text: '이번 전투부터 방통도 출전 후보가 됩니다. 책사 둘을 모두 데려가면 관문 계책은 강해지지만, 전열과 보급 중 하나가 얇아질 수 있습니다.' + text: '이번 전투부터 방통도 출전 후보가 됩니다. 와룡과 봉추를 모두 데려가면 성루와 보급선 계책은 강해지지만, 전열과 회복 중 하나가 얇아질 수 있습니다.' }, { id: 'twenty-eighth-fu-pass-sortie', @@ -2111,7 +2111,7 @@ export const twentyEighthBattleIntroPages: StoryPage[] = [ background: 'story-yizhou-luo-road', speaker: '유비', portrait: 'liuBei', - text: '관문을 부수는 일보다 중요한 것은, 그 너머의 백성이 우리를 어떻게 기억하느냐요. 방통의 기책과 제갈량의 큰 판을 살려 부수관의 길을 열겠소.' + text: '관문을 부수는 일보다 중요한 것은, 그 너머의 백성이 우리를 어떻게 기억하느냐요. 창고를 봉인하고 성루 사격선을 꺾어 부수관의 길을 열겠소.' } ]; @@ -2121,7 +2121,7 @@ export const twentyEighthBattleVictoryPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '부수관이 열리다', background: 'story-yizhou-luo-road', - text: '고패의 관문 병력이 물러나고 부수관의 첫 문이 열렸습니다. 유비군은 관문 창고를 봉인하고 마을의 곡식을 지켜, 익주 내부의 의심을 조금 누그러뜨렸습니다.' + text: '고패의 관문 병력이 물러나고 부수관의 첫 문이 열렸습니다. 유비군은 성루 사격선을 꺾고 관문 창고를 봉인해, 익주 내부의 의심을 조금 누그러뜨렸습니다.' }, { id: 'twenty-eighth-fa-zheng-joins', diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index 0aa1bf0..fea3c82 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -1020,15 +1020,31 @@ const sortieRulesByBattleId: Partial