From 3d6286b7d051d8aa47899a1b85166ca91628f3ca Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sun, 5 Jul 2026 00:37:42 +0900 Subject: [PATCH] Refine Jieting crisis battle flow --- src/game/data/battles.ts | 95 ++++++++++++++++++++++++++++++++++-- src/game/data/scenario.ts | 8 +-- src/game/scenes/CampScene.ts | 16 ++++++ 3 files changed, 112 insertions(+), 7 deletions(-) diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index a3ec8ff..9ce0b17 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -8305,6 +8305,80 @@ export const fiftySeventhBattleScenario: BattleScenarioDefinition = { '마속은 높은 곳을 주장하고, 왕평은 물길과 수레 길을 먼저 보아야 한다고 말합니다. 이번 전투는 고지를 차지하는 것보다 버틸 수 있는 진영을 만드는 일이 더 중요합니다.', '장합의 선봉을 막고 물길을 확보하십시오. 강유에게 남긴 길도 여기서 시험받습니다.' ], + tacticalGuide: { + summary: '가정 고지에만 매달리지 말고 물길, 수레 길, 후방 진영을 함께 묶어 장합의 차단을 막고 강유가 돌아올 길을 남깁니다.', + route: '기산 전진막 -> 가정 물길 -> 고지 아래 진영 -> 수레 길목 -> 장합 선봉', + focus: '왕평을 물길과 진영 사이에 세우고, 조운/마대는 장합 기병을 깊이 쫓기보다 퇴로를 회수하십시오. 제갈량은 후방에서 전선을 짧게 유지해야 합니다.', + roles: ['제갈량: 가정 전체 지휘', '왕평: 물길과 고지 배치 판단', '조운/마대: 장합 기병 견제와 퇴로 회수', '황권: 수레 길과 군량 장부', '마량/법정: 강유 접촉과 적 방어선 해석'], + events: { + 'village-approach': { + title: '가정 물길 접근', + lines: [ + '왕평: 고지만 보고 올라가면 물길이 끊깁니다.', + '먼저 이 물길과 수레 길을 붙잡아야 장합이 우리를 말려 죽이지 못합니다.' + ] + }, + 'vanguard-broken': { + title: '장합 선봉 흔들림', + lines: [ + '조운: 장합의 선봉이 물러나도 추격은 짧게 끊어야 합니다.', + '마대: 기병은 돌아올 길을 남길 때 비로소 압박이 됩니다.' + ] + }, + 'cavalry-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: 'wang-ping', role: 'front', reason: '가정의 물길과 고지 배치를 읽는 핵심 장수입니다. 왕평 생존 목표도 직접 걸려 있습니다.' }, + { unitId: 'zhao-yun', role: 'front', reason: '장합 기병의 우회와 빠른 압박을 끊고 퇴로를 회수합니다.' }, + { unitId: 'huang-quan', role: 'support', reason: '물길과 수레 길 보급을 장부로 붙잡아 장기전 붕괴를 막습니다.' }, + { unitId: 'ma-liang', role: 'support', reason: '마속의 고집과 강유 접촉을 말로 풀어 다음 전선의 명분을 지킵니다.' }, + { unitId: 'fa-zheng', role: 'support', reason: '장합의 차단선과 위군 군리의 빈틈을 읽는 책략 담당입니다.' }, + { unitId: 'ma-dai', role: 'flank', reason: '좁은 고개에서 기병을 지나치게 깊이 보내지 않고 되돌리는 역할에 어울립니다.' } + ], + recommendedClasses: [ + { label: '가정 총지휘', classKeys: ['strategist'], reason: '제갈량이 물길, 고지, 강유 접촉 목표를 함께 판단합니다.' }, + { label: '물길 판단', classKeys: ['infantry', 'spearman'], reason: '왕평처럼 버틸 수 있는 전열이 물길과 진영 사이를 잡아야 합니다.' }, + { label: '퇴로 회수', classKeys: ['cavalry'], reason: '장합 기병을 깊이 추격하지 않고 끊어 내는 기동 역할이 필요합니다.' }, + { label: '군량 장부', classKeys: ['strategist', 'archer'], reason: '수레 길과 후방 진영을 안정시켜 장기전 붕괴를 막습니다.' }, + { label: '접촉 명분', classKeys: ['strategist'], reason: '강유가 돌아설 수 있도록 백성과 물길을 해치지 않는 전투 흐름을 만듭니다.' } + ], + deploymentSlots: [ + { x: 38, y: 79, role: 'support', unitId: 'zhuge-liang', label: '가정 지휘' }, + { x: 58, y: 72, role: 'front', unitId: 'wang-ping', label: '물길 판단' }, + { x: 42, y: 80, role: 'front', unitId: 'zhao-yun', label: '퇴로 회수' }, + { x: 38, y: 81, role: 'support', unitId: 'huang-quan', label: '수레 장부' }, + { x: 39, y: 76, role: 'support', unitId: 'ma-liang', label: '강유 접촉' }, + { x: 26, y: 74, role: 'support', unitId: 'fa-zheng', label: '차단선 분석' }, + { x: 55, y: 80, role: 'flank', unitId: 'ma-dai', label: '측면 회수' } + ], + note: + '가정 배치 위기는 전투력보다 배치 판단이 중요한 전장입니다. 제갈량과 왕평을 중심으로 물길, 수레 길, 접촉 명분, 퇴로 회수 역할을 7명 안에 담으십시오.' + }, map: fiftySeventhBattleMap, units: fiftySeventhBattleUnits, bonds: fiftySeventhBattleBonds, @@ -8346,21 +8420,27 @@ export const fiftySeventhBattleScenario: BattleScenarioDefinition = { kind: 'secure-terrain', label: '가정 물길 확보', rewardGold: 5600, - terrain: 'river' + terrain: 'river', + targetTile: { x: 82, y: 72, radius: 5 }, + threatRadius: 0 }, { id: 'ridge-camps', kind: 'secure-terrain', label: '고지 아래 진영 유지', rewardGold: 5360, - terrain: 'camp' + terrain: 'camp', + targetTile: { x: 80, y: 66, radius: 5 }, + threatRadius: 0 }, { id: 'ridge-forts', kind: 'secure-terrain', label: '가정 고지 압박', rewardGold: 5240, - terrain: 'fort' + terrain: 'fort', + targetTile: { x: 66, y: 44, radius: 5 }, + threatRadius: 0 }, { id: 'quick', @@ -8375,6 +8455,15 @@ export const fiftySeventhBattleScenario: BattleScenarioDefinition = { { kind: 'unit-defeated', unitId: 'wang-ping' } ], itemRewards: ['콩 64', '상처약 48', '탁주 24', '가정 물길 장부 1', '강유 합류'], + campaignReward: { + supplies: ['콩 64', '상처약 48', '탁주 24'], + equipment: ['가정 물길 장부 1'], + recruits: ['강유'], + reputation: ['왕평의 지형 판단 1'], + unlockLabel: '기산 후퇴로', + note: + '가정의 물길과 고지 아래 진영을 가까스로 붙잡았습니다. 강유가 촉한에 합류하지만, 길어진 보급선 때문에 다음 전투는 무리한 진격보다 기산 퇴로 확보가 중요합니다.' + }, victoryPages: fiftySeventhBattleVictoryPages, nextCampScene: 'CampScene' }; diff --git a/src/game/data/scenario.ts b/src/game/data/scenario.ts index 0f9879d..6388f47 100644 --- a/src/game/data/scenario.ts +++ b/src/game/data/scenario.ts @@ -3962,7 +3962,7 @@ export const fiftySeventhBattleIntroPages: StoryPage[] = [ chapter: '가정 방면', background: 'story-jieting-crisis', speaker: '제갈량', - text: '천수 길목은 열렸으나 가정의 고개가 흔들리면 북벌의 군량과 퇴로가 한꺼번에 끊깁니다. 높은 곳만 바라보는 진영은 오래 버티지 못합니다. 물길과 길목을 함께 지키십시오.' + text: '천수 길목은 열렸으나 가정의 고개가 흔들리면 북벌의 군량과 퇴로가 한꺼번에 끊깁니다. 높은 곳만 바라보는 진영은 오래 버티지 못합니다. 왕평은 물길을 잡고, 조운과 마대는 돌아올 길을 남기십시오.' }, { id: 'fifty-seventh-ma-su-insists', @@ -3970,7 +3970,7 @@ export const fiftySeventhBattleIntroPages: StoryPage[] = [ chapter: '마속의 주장', background: 'story-jieting-crisis', speaker: '왕평', - text: '마속은 고지를 잡으면 적이 감히 오르지 못한다고 말합니다. 그러나 고개 아래 물길과 수레 길을 잃으면 위군은 우리를 치지 않고도 말릴 수 있습니다. 이번 출전은 강한 장수보다 지형을 읽을 장수가 필요합니다.' + text: '마속은 고지를 잡으면 적이 감히 오르지 못한다고 말합니다. 그러나 고개 아래 물길과 수레 길을 잃으면 위군은 우리를 치지 않고도 말릴 수 있습니다. 제가 물길 쪽에 서겠습니다. 고지는 압박하되 진영은 아래에서 버텨야 합니다.' }, { id: 'fifty-seventh-jiang-wei-contact', @@ -3978,7 +3978,7 @@ export const fiftySeventhBattleIntroPages: StoryPage[] = [ chapter: '강유 접촉', background: 'story-jieting-crisis', speaker: '마량', - text: '천수에서 남긴 글이 강유에게 닿았습니다. 그는 아직 위군의 장수로 서 있지만, 싸움이 명분을 잃는 순간 마음이 흔들릴 것입니다. 가정의 길을 지키며 강유에게 돌아올 길도 남겨 두어야 합니다.' + text: '천수에서 남긴 글이 강유에게 닿았습니다. 그는 아직 위군의 장수로 서 있지만, 백성과 물길을 해치지 않는 전투를 보면 마음이 흔들릴 것입니다. 가정의 길을 지키며 강유에게 돌아올 길도 남겨 두어야 합니다.' } ]; @@ -3988,7 +3988,7 @@ export const fiftySeventhBattleVictoryPages: StoryPage[] = [ bgm: 'militia-theme', chapter: '가정 방면 수습', background: 'story-jieting-crisis', - text: '장합의 선봉은 고개 아래에서 멈췄고, 촉한군은 가정의 물길과 수레 길을 간신히 잇는 데 성공했습니다. 마속의 고집은 큰 위험을 남겼지만, 왕평의 지형 판단이 북벌의 퇴로를 붙잡았습니다.' + text: '장합의 선봉은 고개 아래에서 멈췄고, 촉한군은 가정의 물길과 수레 길을 간신히 잇는 데 성공했습니다. 고지만 바라본 판단은 큰 위험을 남겼지만, 왕평의 낮은 진영 판단이 북벌의 퇴로를 붙잡았습니다.' }, { id: 'fifty-seventh-victory-jiang-wei-joins', diff --git a/src/game/scenes/CampScene.ts b/src/game/scenes/CampScene.ts index 8c0f075..f63f370 100644 --- a/src/game/scenes/CampScene.ts +++ b/src/game/scenes/CampScene.ts @@ -1885,6 +1885,22 @@ const sortieRulesByBattleId: Partial