Add Wuzhang finale and lazy unit loading

This commit is contained in:
2026-06-26 22:53:47 +09:00
parent eb5328d6b1
commit 8ef5800584
13 changed files with 970 additions and 235 deletions

View File

@@ -59,6 +59,10 @@ import {
sixtyFifthBattleMap,
sixtyFifthBattleUnits,
sixtyFifthBattleVictoryPages,
sixtySixthBattleBonds,
sixtySixthBattleMap,
sixtySixthBattleUnits,
sixtySixthBattleVictoryPages,
fiftySeventhBattleBonds,
fiftySeventhBattleMap,
fiftySeventhBattleUnits,
@@ -330,7 +334,8 @@ export type BattleScenarioId =
| 'sixty-second-battle-qishan-renewed-offensive'
| 'sixty-third-battle-lucheng-pursuit'
| 'sixty-fourth-battle-weishui-camps'
| 'sixty-fifth-battle-weishui-northbank';
| 'sixty-fifth-battle-weishui-northbank'
| 'sixty-sixth-battle-wuzhang-final';
export type BattleObjectiveKind = 'defeat-leader' | 'pacify-leader' | 'keep-unit-alive' | 'secure-terrain' | 'quick-victory';
@@ -4407,6 +4412,73 @@ export const sixtyFifthBattleScenario: BattleScenarioDefinition = {
nextCampScene: 'CampScene'
};
export const sixtySixthBattleScenario: BattleScenarioDefinition = {
id: 'sixty-sixth-battle-wuzhang-final',
title: '오장원 최종전',
victoryConditionLabel: '오장원 본영 방어와 장부 계승 확보',
defeatConditionLabel: '제갈량 퇴각 또는 귀환 장부 붕괴',
openingObjectiveLines: [
'위수 북안의 압박을 지나 오장원 본영까지 돌아왔습니다. 이번 싸움은 더 멀리 나아가는 전투가 아니라, 촉한군이 살아서 돌아가고 다음 세대가 장부를 이어 받을 길을 지키는 최종전입니다.',
'강유는 제갈량의 작전도를 이어 받고, 왕평과 마대는 퇴로와 측면을 나누어 맡았습니다. 황권과 이엄은 군량 장부를 보전하며 본영의 질서를 붙들어야 합니다.',
'사마의의 본대, 장합의 추격 기병, 곽회의 봉화 차단대를 동시에 누르십시오. 오장원 본영과 주변 마을을 지켜 내면 북벌의 뜻은 패배가 아니라 계승으로 남습니다.'
],
map: sixtySixthBattleMap,
units: sixtySixthBattleUnits,
bonds: sixtySixthBattleBonds,
mapTextureKey: 'battle-map-sixty-sixth',
leaderUnitId: 'northern-twelfth-leader-sima-yi',
quickVictoryTurnLimit: 132,
baseVictoryGold: 22400,
objectives: [
{
id: 'hold-wuzhang-main-camp',
kind: 'defeat-leader',
label: '사마의 오장원 본대 격파',
rewardGold: 16000,
unitId: 'northern-twelfth-leader-sima-yi'
},
{
id: 'stop-zhang-he-final-pursuit',
kind: 'defeat-leader',
label: '장합 최종 추격대 저지',
rewardGold: 9800,
unitId: 'northern-twelfth-officer-zhang-he'
},
{
id: 'silence-guo-huai-wuzhang-beacons',
kind: 'defeat-leader',
label: '곽회 봉화 차단',
rewardGold: 9100,
unitId: 'northern-twelfth-officer-guo-huai'
},
{
id: 'preserve-wuzhang-camps',
kind: 'secure-terrain',
label: '오장원 본영 확보',
rewardGold: 7600,
terrain: 'camp'
},
{
id: 'protect-returning-villages',
kind: 'secure-terrain',
label: '귀환로 마을 보호',
rewardGold: 7200,
terrain: 'village'
},
{
id: 'quick',
kind: 'quick-victory',
label: '132턴 이내 오장원 수습',
rewardGold: 5000,
maxTurn: 132
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'zhuge-liang' }],
itemRewards: ['금 150', '상처약 114', '군주 56', '오장원 귀환 장부 1', '강유 계승 지도 1'],
victoryPages: sixtySixthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const defaultBattleScenarioId: BattleScenarioId = firstBattleScenario.id;
export const battleScenarios: Record<BattleScenarioId, BattleScenarioDefinition> = {
@@ -4474,7 +4546,8 @@ export const battleScenarios: Record<BattleScenarioId, BattleScenarioDefinition>
'sixty-second-battle-qishan-renewed-offensive': sixtySecondBattleScenario,
'sixty-third-battle-lucheng-pursuit': sixtyThirdBattleScenario,
'sixty-fourth-battle-weishui-camps': sixtyFourthBattleScenario,
'sixty-fifth-battle-weishui-northbank': sixtyFifthBattleScenario
'sixty-fifth-battle-weishui-northbank': sixtyFifthBattleScenario,
'sixty-sixth-battle-wuzhang-final': sixtySixthBattleScenario
};
export const defaultBattleScenario = battleScenarios[defaultBattleScenarioId];