Add Hanzhong rainy pass campaign chapter

This commit is contained in:
2026-06-24 12:37:06 +09:00
parent f3d23a13be
commit 630be9969c
10 changed files with 859 additions and 78 deletions

View File

@@ -39,6 +39,10 @@ import {
sixtiethBattleMap,
sixtiethBattleUnits,
sixtiethBattleVictoryPages,
sixtyFirstBattleBonds,
sixtyFirstBattleMap,
sixtyFirstBattleUnits,
sixtyFirstBattleVictoryPages,
fiftySeventhBattleBonds,
fiftySeventhBattleMap,
fiftySeventhBattleUnits,
@@ -305,7 +309,8 @@ export type BattleScenarioId =
| 'fifty-seventh-battle-jieting-crisis'
| 'fifty-eighth-battle-qishan-retreat'
| 'fifty-ninth-battle-chencang-siege'
| 'sixtieth-battle-wudu-yinping';
| 'sixtieth-battle-wudu-yinping'
| 'sixty-first-battle-hanzhong-rain-defense';
export type BattleObjectiveKind = 'defeat-leader' | 'pacify-leader' | 'keep-unit-alive' | 'secure-terrain' | 'quick-victory';
@@ -4033,6 +4038,87 @@ export const sixtiethBattleScenario: BattleScenarioDefinition = {
nextCampScene: 'CampScene'
};
export const sixtyFirstBattleScenario: BattleScenarioDefinition = {
id: 'sixty-first-battle-hanzhong-rain-defense',
title: '한중 우로 방어전',
victoryConditionLabel: '한중 북문과 두 고을 보급선 방어',
defeatConditionLabel: '제갈량 퇴각 또는 보급 방어선 붕괴',
openingObjectiveLines: [
'무도와 음평을 확보한 뒤 위군은 조진을 앞세워 한중 북문의 빗길을 압박합니다. 새로 얻은 두 고을은 이제 전리품이 아니라 지켜야 할 보급 책임입니다.',
'조진의 본대를 늦추고 사마의 별동대가 봉화로 길을 잇기 전에 끊으십시오. 강유와 왕평은 길을 보고, 이엄과 황권은 군량 흐름을 맞추며, 위연은 반격할 순간을 기다립니다.',
'한중 창고 진영, 무도·음평 수레 길, 전방 마을을 함께 지키십시오. 어느 하나가 무너지면 다음 북벌은 출발하기 전에 숨이 막힙니다.'
],
map: sixtyFirstBattleMap,
units: sixtyFirstBattleUnits,
bonds: sixtyFirstBattleBonds,
mapTextureKey: 'battle-map-sixty-first',
leaderUnitId: 'northern-seventh-leader-cao-zhen',
quickVictoryTurnLimit: 122,
baseVictoryGold: 18480,
objectives: [
{
id: 'repel-cao-zhen-main',
kind: 'defeat-leader',
label: '조진 본대 격퇴',
rewardGold: 13000,
unitId: 'northern-seventh-leader-cao-zhen'
},
{
id: 'check-sima-yi-column',
kind: 'defeat-leader',
label: '사마의 별동대 견제',
rewardGold: 6680,
unitId: 'northern-seventh-officer-sima-yi'
},
{
id: 'hold-wudu-yinping-supply',
kind: 'defeat-leader',
label: '무도·음평 보급선 방어',
rewardGold: 6540,
unitId: 'northern-seventh-officer-supply'
},
{
id: 'zhuge-liang',
kind: 'keep-unit-alive',
label: '제갈량 생존',
rewardGold: 3300,
unitId: 'zhuge-liang'
},
{
id: 'hanzhong-granary-camps',
kind: 'secure-terrain',
label: '한중 창고 진영 유지',
rewardGold: 6260,
terrain: 'camp'
},
{
id: 'rain-pass-roads',
kind: 'secure-terrain',
label: '빗길 수레길 확보',
rewardGold: 6120,
terrain: 'road'
},
{
id: 'front-villages',
kind: 'secure-terrain',
label: '전방 마을 안심',
rewardGold: 5960,
terrain: 'village'
},
{
id: 'quick',
kind: 'quick-victory',
label: '122턴 이내 방어선 안정',
rewardGold: 4040,
maxTurn: 122
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'zhuge-liang' }],
itemRewards: ['금 118', '상처약 94', '군주 46', '한중 우로 장부 1', '조진 역공 기록 1'],
victoryPages: sixtyFirstBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const defaultBattleScenarioId: BattleScenarioId = firstBattleScenario.id;
export const battleScenarios: Record<BattleScenarioId, BattleScenarioDefinition> = {
@@ -4095,7 +4181,8 @@ export const battleScenarios: Record<BattleScenarioId, BattleScenarioDefinition>
'fifty-seventh-battle-jieting-crisis': fiftySeventhBattleScenario,
'fifty-eighth-battle-qishan-retreat': fiftyEighthBattleScenario,
'fifty-ninth-battle-chencang-siege': fiftyNinthBattleScenario,
'sixtieth-battle-wudu-yinping': sixtiethBattleScenario
'sixtieth-battle-wudu-yinping': sixtiethBattleScenario,
'sixty-first-battle-hanzhong-rain-defense': sixtyFirstBattleScenario
};
export const defaultBattleScenario = battleScenarios[defaultBattleScenarioId];