Files
heros_web/src/game/data/battles.ts

1122 lines
36 KiB
TypeScript

import {
firstBattleBonds,
fifteenthBattleBonds,
fifteenthBattleMap,
fifteenthBattleUnits,
fifteenthBattleVictoryPages,
fourteenthBattleBonds,
fourteenthBattleMap,
fourteenthBattleUnits,
fourteenthBattleVictoryPages,
eighthBattleBonds,
eighthBattleMap,
eighthBattleUnits,
eighthBattleVictoryPages,
eighteenthBattleBonds,
eighteenthBattleMap,
eighteenthBattleUnits,
eighteenthBattleVictoryPages,
eleventhBattleBonds,
eleventhBattleMap,
eleventhBattleUnits,
eleventhBattleVictoryPages,
firstBattleMap,
firstBattleUnits,
firstBattleVictoryPages,
ninthBattleBonds,
ninthBattleMap,
ninthBattleUnits,
ninthBattleVictoryPages,
tenthBattleBonds,
tenthBattleMap,
tenthBattleUnits,
tenthBattleVictoryPages,
thirteenthBattleBonds,
thirteenthBattleMap,
thirteenthBattleUnits,
thirteenthBattleVictoryPages,
twelfthBattleBonds,
twelfthBattleMap,
twelfthBattleUnits,
twelfthBattleVictoryPages,
fifthBattleBonds,
fifthBattleMap,
fifthBattleUnits,
fifthBattleVictoryPages,
secondBattleBonds,
secondBattleMap,
secondBattleUnits,
secondBattleVictoryPages,
seventhBattleBonds,
seventhBattleMap,
seventhBattleUnits,
seventhBattleVictoryPages,
sixthBattleBonds,
sixthBattleMap,
sixthBattleUnits,
sixthBattleVictoryPages,
thirdBattleBonds,
fourthBattleBonds,
fourthBattleMap,
fourthBattleUnits,
fourthBattleVictoryPages,
sixteenthBattleBonds,
sixteenthBattleMap,
sixteenthBattleUnits,
sixteenthBattleVictoryPages,
seventeenthBattleBonds,
seventeenthBattleMap,
seventeenthBattleUnits,
seventeenthBattleVictoryPages,
thirdBattleMap,
thirdBattleUnits,
thirdBattleVictoryPages,
type BattleBond,
type BattleMap,
type StoryPage,
type UnitData
} from './scenario';
export type BattleScenarioId =
| 'first-battle-zhuo-commandery'
| 'second-battle-yellow-turban-pursuit'
| 'third-battle-guangzong-road'
| 'fourth-battle-guangzong-camp'
| 'fifth-battle-sishui-vanguard'
| 'sixth-battle-jieqiao-relief'
| 'seventh-battle-xuzhou-rescue'
| 'eighth-battle-xiaopei-supply-road'
| 'ninth-battle-xuzhou-gate-night-raid'
| 'tenth-battle-xuzhou-breakout'
| 'eleventh-battle-xudu-refuge-road'
| 'twelfth-battle-xiapi-outer-siege'
| 'thirteenth-battle-xiapi-final'
| 'fourteenth-battle-cao-break'
| 'fifteenth-battle-yuan-refuge-road'
| 'sixteenth-battle-liu-biao-refuge'
| 'seventeenth-battle-wolong-visit-road'
| 'eighteenth-battle-bowang-ambush';
export type BattleObjectiveKind = 'defeat-leader' | 'keep-unit-alive' | 'secure-terrain' | 'quick-victory';
export type BattleObjectiveDefinition = {
id: string;
kind: BattleObjectiveKind;
label: string;
rewardGold: number;
unitId?: string;
terrain?: string;
maxTurn?: number;
};
export type BattleDefeatConditionDefinition = {
kind: 'unit-defeated';
unitId: string;
};
export type BattleScenarioDefinition = {
id: BattleScenarioId;
title: string;
victoryConditionLabel: string;
defeatConditionLabel: string;
openingObjectiveLines: string[];
map: BattleMap;
units: UnitData[];
bonds: BattleBond[];
mapTextureKey: string;
leaderUnitId: string;
quickVictoryTurnLimit: number;
baseVictoryGold: number;
objectives: BattleObjectiveDefinition[];
defeatConditions: BattleDefeatConditionDefinition[];
itemRewards: string[];
victoryPages: StoryPage[];
nextCampScene: string;
};
export const firstBattleScenario: BattleScenarioDefinition = {
id: 'first-battle-zhuo-commandery',
title: '탁현의 전투',
victoryConditionLabel: '두령 한석 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'두령 한석을 격파하면 황건적의 전열이 무너집니다.',
'유비가 퇴각하면 의용군은 전투를 지속할 수 없습니다.',
'마을을 확보하고 8턴 안에 승리하면 추가 보상이 붙습니다.'
],
map: firstBattleMap,
units: firstBattleUnits,
bonds: firstBattleBonds,
mapTextureKey: 'battle-map-first',
leaderUnitId: 'rebel-leader',
quickVictoryTurnLimit: 8,
baseVictoryGold: 300,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '황건 두령 격파',
rewardGold: 200,
unitId: 'rebel-leader'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 100,
unitId: 'liu-bei'
},
{
id: 'village',
kind: 'secure-terrain',
label: '마을 확보',
rewardGold: 150,
terrain: 'village'
},
{
id: 'quick',
kind: 'quick-victory',
label: '8턴 안에 승리',
rewardGold: 120,
maxTurn: 8
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 1', '탁주 1', '의용군 명성 +1'],
victoryPages: firstBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const secondBattleScenario: BattleScenarioDefinition = {
id: 'second-battle-yellow-turban-pursuit',
title: '황건 잔당 추격',
victoryConditionLabel: '두령 한석 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'황건 잔당이 북쪽 마을로 달아났습니다. 두령 한석을 격파하면 적의 퇴로가 무너집니다.',
'마을 주변에 적 위협이 남아 있으면 보상이 줄어듭니다. 길목의 습격조를 먼저 정리하십시오.',
'12턴 이내에 승리하면 의용군의 추격전 명성이 오릅니다.'
],
map: secondBattleMap,
units: secondBattleUnits,
bonds: secondBattleBonds,
mapTextureKey: 'battle-map-second',
leaderUnitId: 'pursuit-leader-han-seok',
quickVictoryTurnLimit: 12,
baseVictoryGold: 420,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '두령 한석 격파',
rewardGold: 260,
unitId: 'pursuit-leader-han-seok'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 120,
unitId: 'liu-bei'
},
{
id: 'village',
kind: 'secure-terrain',
label: '북쪽 마을 확보',
rewardGold: 180,
terrain: 'village'
},
{
id: 'quick',
kind: 'quick-victory',
label: '12턴 이내 승리',
rewardGold: 150,
maxTurn: 12
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 2', '탁주 1', '의용군 명성 +2'],
victoryPages: secondBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const thirdBattleScenario: BattleScenarioDefinition = {
id: 'third-battle-guangzong-road',
title: '광종 구원로',
victoryConditionLabel: '전령 마원 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'황건 전령 마원이 광종 본대로 향하고 있습니다. 마원을 격파하면 적의 연락망이 끊어집니다.',
'강가 길목과 요새 주변의 궁병을 방치하면 전선이 오래 묶입니다. 지형 보정을 살펴 진군하십시오.',
'14턴 이내에 승리하면 광종 구원로 확보 명성이 오릅니다.'
],
map: thirdBattleMap,
units: thirdBattleUnits,
bonds: thirdBattleBonds,
mapTextureKey: 'battle-map-third',
leaderUnitId: 'guangzong-leader-ma-yuan',
quickVictoryTurnLimit: 14,
baseVictoryGold: 520,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '전령 마원 격파',
rewardGold: 320,
unitId: 'guangzong-leader-ma-yuan'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 140,
unitId: 'liu-bei'
},
{
id: 'fort',
kind: 'secure-terrain',
label: '강가 요새 확보',
rewardGold: 220,
terrain: 'fort'
},
{
id: 'quick',
kind: 'quick-victory',
label: '14턴 이내 승리',
rewardGold: 180,
maxTurn: 14
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 2', '상처약 1', '의용군 명성 +3'],
victoryPages: thirdBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const fourthBattleScenario: BattleScenarioDefinition = {
id: 'fourth-battle-guangzong-camp',
title: '광종 본영전',
victoryConditionLabel: '장각 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'황건 본영의 중심에는 장각이 있습니다. 장각을 격파하면 광종의 황건 세력은 무너집니다.',
'요새와 숲의 궁병이 진입로를 막고 있습니다. 측면의 기병과 중앙 수비병을 나누어 상대하십시오.',
'16턴 이내에 승리하면 황건적 토벌의 공적이 크게 오릅니다.'
],
map: fourthBattleMap,
units: fourthBattleUnits,
bonds: fourthBattleBonds,
mapTextureKey: 'battle-map-fourth',
leaderUnitId: 'guangzong-main-leader-zhang-jue',
quickVictoryTurnLimit: 16,
baseVictoryGold: 700,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '장각 격파',
rewardGold: 420,
unitId: 'guangzong-main-leader-zhang-jue'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 180,
unitId: 'liu-bei'
},
{
id: 'fort',
kind: 'secure-terrain',
label: '광종 본영 확보',
rewardGold: 260,
terrain: 'fort'
},
{
id: 'quick',
kind: 'quick-victory',
label: '16턴 이내 승리',
rewardGold: 220,
maxTurn: 16
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 2', '상처약 1', '탁주 1', '황건 토벌 공적 +1'],
victoryPages: fourthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const fifthBattleScenario: BattleScenarioDefinition = {
id: 'fifth-battle-sishui-vanguard',
title: '사수관 전초전',
victoryConditionLabel: '호진 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'반동탁 연합으로 향하는 길목을 동탁군 장수 호진이 막고 있습니다. 호진을 격파하면 사수관 앞 전초 진지가 흔들립니다.',
'중앙 길은 빠르지만 궁병과 기병의 반격을 받기 쉽습니다. 숲길 척후를 처리하고 요새 주변을 차근히 압박하십시오.',
'14턴 이내에 승리하면 공손찬 진영에서 세 형제의 무공이 더 크게 알려집니다.'
],
map: fifthBattleMap,
units: fifthBattleUnits,
bonds: fifthBattleBonds,
mapTextureKey: 'battle-map-fifth',
leaderUnitId: 'sishui-leader-hu-zhen',
quickVictoryTurnLimit: 14,
baseVictoryGold: 760,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '호진 격파',
rewardGold: 460,
unitId: 'sishui-leader-hu-zhen'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 190,
unitId: 'liu-bei'
},
{
id: 'fort',
kind: 'secure-terrain',
label: '사수관 전초 요새 확보',
rewardGold: 280,
terrain: 'fort'
},
{
id: 'quick',
kind: 'quick-victory',
label: '14턴 이내 승리',
rewardGold: 230,
maxTurn: 14
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 2', '상처약 1', '탁주 1', '반동탁 공적 +1'],
victoryPages: fifthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const sixthBattleScenario: BattleScenarioDefinition = {
id: 'sixth-battle-jieqiao-relief',
title: '계교 원군로',
victoryConditionLabel: '곡의 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'공손찬의 보급로를 원소군 교위 곡의가 끊으려 합니다. 곡의를 격파하면 계교로 향하는 길을 다시 열 수 있습니다.',
'강가의 궁병과 측면 기병이 동시에 압박합니다. 숲길 척후를 먼저 밀어내고 중앙 길을 확보하십시오.',
'15턴 이내에 승리하면 공손찬 진영에서 세 형제의 신뢰가 커집니다.'
],
map: sixthBattleMap,
units: sixthBattleUnits,
bonds: sixthBattleBonds,
mapTextureKey: 'battle-map-sixth',
leaderUnitId: 'jieqiao-leader-qu-yi',
quickVictoryTurnLimit: 15,
baseVictoryGold: 860,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '곡의 격파',
rewardGold: 520,
unitId: 'jieqiao-leader-qu-yi'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 210,
unitId: 'liu-bei'
},
{
id: 'village',
kind: 'secure-terrain',
label: '계교 보급촌 확보',
rewardGold: 300,
terrain: 'village'
},
{
id: 'quick',
kind: 'quick-victory',
label: '15턴 이내 승리',
rewardGold: 250,
maxTurn: 15
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 2', '상처약 2', '탁주 1', '공손찬 신뢰 +1'],
victoryPages: sixthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const seventhBattleScenario: BattleScenarioDefinition = {
id: 'seventh-battle-xuzhou-rescue',
title: '서주 구원전',
victoryConditionLabel: '하후돈 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'조조군 선봉 하후돈이 서주 피난로와 마을을 압박하고 있습니다. 하후돈을 격파하면 서주 성문까지 길을 열 수 있습니다.',
'강가 궁병은 자리를 지키고, 기병은 길을 따라 빠르게 추격합니다. 마을을 확보하며 선봉을 단계적으로 끊어 내십시오.',
'16턴 이내에 승리하면 도겸과 서주 백성의 신뢰가 크게 오릅니다.'
],
map: seventhBattleMap,
units: seventhBattleUnits,
bonds: seventhBattleBonds,
mapTextureKey: 'battle-map-seventh',
leaderUnitId: 'xuzhou-leader-xiahou-dun',
quickVictoryTurnLimit: 16,
baseVictoryGold: 960,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '하후돈 격파',
rewardGold: 580,
unitId: 'xuzhou-leader-xiahou-dun'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 230,
unitId: 'liu-bei'
},
{
id: 'village',
kind: 'secure-terrain',
label: '서주 피난촌 확보',
rewardGold: 330,
terrain: 'village'
},
{
id: 'quick',
kind: 'quick-victory',
label: '16턴 이내 승리',
rewardGold: 270,
maxTurn: 16
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 2', '상처약 2', '탁주 1', '서주 민심 +1'],
victoryPages: seventhBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const eighthBattleScenario: BattleScenarioDefinition = {
id: 'eighth-battle-xiaopei-supply-road',
title: '소패 보급로 방위전',
victoryConditionLabel: '고순 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'여포군의 척후와 습격병이 소패 보급로를 흔들고 있습니다. 고순을 격파하면 서주의 첫 방위선을 지킬 수 있습니다.',
'기병은 길을 타고 빠르게 파고들고, 궁병은 강 건너와 언덕에서 사거리를 잡습니다. 마을과 창고 지형을 이용해 버티십시오.',
'18턴 이내 승리하면 서주 보급망과 새 합류 무장의 명성이 크게 오릅니다.'
],
map: eighthBattleMap,
units: eighthBattleUnits,
bonds: eighthBattleBonds,
mapTextureKey: 'battle-map-eighth',
leaderUnitId: 'xiaopei-leader-gao-shun',
quickVictoryTurnLimit: 18,
baseVictoryGold: 1080,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '고순 격파',
rewardGold: 640,
unitId: 'xiaopei-leader-gao-shun'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 250,
unitId: 'liu-bei'
},
{
id: 'village',
kind: 'secure-terrain',
label: '소패 보급촌 확보',
rewardGold: 360,
terrain: 'village'
},
{
id: 'quick',
kind: 'quick-victory',
label: '18턴 이내 승리',
rewardGold: 300,
maxTurn: 18
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 3', '상처약 2', '탁주 1', '서주 보급망 +1'],
victoryPages: eighthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const ninthBattleScenario: BattleScenarioDefinition = {
id: 'ninth-battle-xuzhou-gate-night-raid',
title: '서주 성문 야습',
victoryConditionLabel: '조표 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'조표가 성문 수비병을 움직이고 여포군 기병이 밤길을 타고 접근합니다. 조표를 격파하면 성문을 다시 장악할 수 있습니다.',
'성벽 궁병은 높은 곳을 지키고, 여포군 기병은 길을 따라 빠르게 파고듭니다. 마을과 성문 지형을 이용해 전열을 끊어야 합니다.',
'18턴 이내 성문을 안정시키면 서주 내부 불안을 잠시나마 눌러 둘 수 있습니다.'
],
map: ninthBattleMap,
units: ninthBattleUnits,
bonds: ninthBattleBonds,
mapTextureKey: 'battle-map-ninth',
leaderUnitId: 'xuzhou-leader-cao-bao',
quickVictoryTurnLimit: 18,
baseVictoryGold: 1160,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '조표 격파',
rewardGold: 700,
unitId: 'xuzhou-leader-cao-bao'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 280,
unitId: 'liu-bei'
},
{
id: 'fort',
kind: 'secure-terrain',
label: '서주 성문 확보',
rewardGold: 400,
terrain: 'fort'
},
{
id: 'quick',
kind: 'quick-victory',
label: '18턴 이내 승리',
rewardGold: 320,
maxTurn: 18
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 3', '상처약 2', '탁주 1', '서주 성문 수비 +1'],
victoryPages: ninthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const tenthBattleScenario: BattleScenarioDefinition = {
id: 'tenth-battle-xuzhou-breakout',
title: '서주 탈출전',
victoryConditionLabel: '송헌 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'서주는 여포에게 넘어갔고, 유비군은 성 밖으로 빠져나갈 길을 열어야 합니다. 송헌을 격파하면 추격대의 지휘가 무너집니다.',
'여포군 기병은 길을 따라 빠르게 압박하고, 성내 배반병은 숲과 마을 근처에서 퇴로를 끊으려 합니다.',
'서쪽 진영과 마을을 확보한 채 20턴 안에 돌파하면 조조 의탁으로 이어질 병력과 보급을 더 많이 보존합니다.'
],
map: tenthBattleMap,
units: tenthBattleUnits,
bonds: tenthBattleBonds,
mapTextureKey: 'battle-map-tenth',
leaderUnitId: 'xuzhou-escape-leader-song-xian',
quickVictoryTurnLimit: 20,
baseVictoryGold: 1240,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '송헌 격파',
rewardGold: 760,
unitId: 'xuzhou-escape-leader-song-xian'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 300,
unitId: 'liu-bei'
},
{
id: 'village',
kind: 'secure-terrain',
label: '피난 마을 확보',
rewardGold: 420,
terrain: 'village'
},
{
id: 'quick',
kind: 'quick-victory',
label: '20턴 이내 돌파',
rewardGold: 340,
maxTurn: 20
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 4', '상처약 2', '탁주 1', '서주 피난민 보호 +1'],
victoryPages: tenthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const eleventhBattleScenario: BattleScenarioDefinition = {
id: 'eleventh-battle-xudu-refuge-road',
title: '허도 입성로',
victoryConditionLabel: '기령 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'조조는 유비군을 받아들이는 대신 허도 입성로를 어지럽히는 원술 잔군을 치라는 명을 내립니다. 기령을 격파하면 길이 열립니다.',
'원술군 기병은 길을 따라 돌파하고, 약탈병은 숲과 마을을 끼고 보급을 노립니다. 조조군의 감시 속에서 군율을 증명해야 합니다.',
'마을을 확보하고 18턴 안에 승리하면 조조 의탁 이후에도 병력과 민심을 더 많이 보존합니다.'
],
map: eleventhBattleMap,
units: eleventhBattleUnits,
bonds: eleventhBattleBonds,
mapTextureKey: 'battle-map-eleventh',
leaderUnitId: 'xudu-road-leader-ji-ling',
quickVictoryTurnLimit: 18,
baseVictoryGold: 1320,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '기령 격파',
rewardGold: 820,
unitId: 'xudu-road-leader-ji-ling'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 320,
unitId: 'liu-bei'
},
{
id: 'village',
kind: 'secure-terrain',
label: '허도 길목 마을 확보',
rewardGold: 460,
terrain: 'village'
},
{
id: 'quick',
kind: 'quick-victory',
label: '18턴 이내 승리',
rewardGold: 360,
maxTurn: 18
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 4', '상처약 3', '탁주 1', '조조군 군문 통행 +1'],
victoryPages: eleventhBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const twelfthBattleScenario: BattleScenarioDefinition = {
id: 'twelfth-battle-xiapi-outer-siege',
title: '하비 외곽전',
victoryConditionLabel: '장료 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'조조는 하비 포위망의 남쪽 둑길을 유비군에게 맡깁니다. 장료를 격파하면 여포군 선봉은 성 안으로 물러납니다.',
'강줄기와 둑길이 전장을 나눕니다. 여포군 기병은 길을 타고 돌파하고, 성루 궁병과 진궁은 후방에서 압박합니다.',
'둑길 진영을 확보하고 20턴 안에 승리하면 조조 휘하에서의 공적과 유비군의 독자 보급을 함께 지킬 수 있습니다.'
],
map: twelfthBattleMap,
units: twelfthBattleUnits,
bonds: twelfthBattleBonds,
mapTextureKey: 'battle-map-twelfth',
leaderUnitId: 'xiapi-leader-zhang-liao',
quickVictoryTurnLimit: 20,
baseVictoryGold: 1440,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '장료 격파',
rewardGold: 900,
unitId: 'xiapi-leader-zhang-liao'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 340,
unitId: 'liu-bei'
},
{
id: 'camp',
kind: 'secure-terrain',
label: '하비 둑길 진영 확보',
rewardGold: 500,
terrain: 'camp'
},
{
id: 'quick',
kind: 'quick-victory',
label: '20턴 이내 승리',
rewardGold: 390,
maxTurn: 20
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 4', '상처약 3', '탁주 2', '하비 포위 공적 +1'],
victoryPages: twelfthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const thirteenthBattleScenario: BattleScenarioDefinition = {
id: 'thirteenth-battle-xiapi-final',
title: '하비 결전',
victoryConditionLabel: '여포 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'여포가 하비 성 안에서 마지막 돌파를 준비합니다. 여포를 격파하면 서주를 뒤흔든 난전도 끝을 맞습니다.',
'진궁은 성루 궁병과 수문 수비를 이용해 접근로를 끊으려 합니다. 기병 돌파대와 성문 수비대를 나누어 상대하십시오.',
'성문 요새를 확보하고 22턴 안에 승리하면 조조 휘하에서도 유비군의 전공과 독자 보급 명분을 모두 남길 수 있습니다.'
],
map: thirteenthBattleMap,
units: thirteenthBattleUnits,
bonds: thirteenthBattleBonds,
mapTextureKey: 'battle-map-thirteenth',
leaderUnitId: 'xiapi-final-leader-lu-bu',
quickVictoryTurnLimit: 22,
baseVictoryGold: 1560,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '여포 격파',
rewardGold: 980,
unitId: 'xiapi-final-leader-lu-bu'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 360,
unitId: 'liu-bei'
},
{
id: 'gate',
kind: 'secure-terrain',
label: '하비 성문 확보',
rewardGold: 560,
terrain: 'fort'
},
{
id: 'quick',
kind: 'quick-victory',
label: '22턴 이내 승리',
rewardGold: 420,
maxTurn: 22
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 5', '상처약 3', '탁주 2', '하비 결전 공적 +1'],
victoryPages: thirteenthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const fourteenthBattleScenario: BattleScenarioDefinition = {
id: 'fourteenth-battle-cao-break',
title: '서주 재기',
victoryConditionLabel: '차주 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'조조의 감시대가 서주 관문과 역참을 틀어쥐고 있습니다. 차주를 격파하면 유비군은 조조 휘하를 벗어날 첫 발판을 세웁니다.',
'조조군 기병은 길을 따라 추격하고, 궁병은 관문 뒤에서 사거리를 잡습니다. 손건의 문서와 간옹의 말로 민심을 흔들며 길목을 열어야 합니다.',
'서주 관문을 확보하고 22턴 안에 승리하면 원소 진영으로 향할 명분과 보급을 더 많이 보존합니다.'
],
map: fourteenthBattleMap,
units: fourteenthBattleUnits,
bonds: fourteenthBattleBonds,
mapTextureKey: 'battle-map-fourteenth',
leaderUnitId: 'cao-break-leader-che-zhou',
quickVictoryTurnLimit: 22,
baseVictoryGold: 1660,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '차주 격파',
rewardGold: 1040,
unitId: 'cao-break-leader-che-zhou'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 380,
unitId: 'liu-bei'
},
{
id: 'gate',
kind: 'secure-terrain',
label: '서주 관문 확보',
rewardGold: 600,
terrain: 'fort'
},
{
id: 'quick',
kind: 'quick-victory',
label: '22턴 이내 승리',
rewardGold: 460,
maxTurn: 22
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 5', '상처약 3', '탁주 2', '손건 문서 +1'],
victoryPages: fourteenthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const fifteenthBattleScenario: BattleScenarioDefinition = {
id: 'fifteenth-battle-yuan-refuge-road',
title: '원소 의탁로',
victoryConditionLabel: '채양 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'유비군은 조조의 추격을 피해 원소 진영으로 향합니다. 채양을 격파하면 북상로의 압박을 끊고 접선지로 나아갈 수 있습니다.',
'강줄기와 고갯길 사이로 추격 기병이 파고들고, 궁병은 접선지를 향한 길을 끊으려 합니다. 전열을 세우면서도 손건과 간옹의 책략 지원을 살려야 합니다.',
'원소 사자가 기다리는 북동쪽 접선지를 확보하고 24턴 안에 승리하면 다음 의탁 장을 더 유리하게 시작합니다.'
],
map: fifteenthBattleMap,
units: fifteenthBattleUnits,
bonds: fifteenthBattleBonds,
mapTextureKey: 'battle-map-fifteenth',
leaderUnitId: 'yuan-refuge-leader-cai-yang',
quickVictoryTurnLimit: 24,
baseVictoryGold: 1760,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '채양 격파',
rewardGold: 1120,
unitId: 'yuan-refuge-leader-cai-yang'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 400,
unitId: 'liu-bei'
},
{
id: 'rendezvous',
kind: 'secure-terrain',
label: '원소 사자 접선지 확보',
rewardGold: 640,
terrain: 'fort'
},
{
id: 'quick',
kind: 'quick-victory',
label: '24턴 이내 승리',
rewardGold: 500,
maxTurn: 24
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 6', '상처약 3', '탁주 2', '원소 접선 문서 +1'],
victoryPages: fifteenthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const sixteenthBattleScenario: BattleScenarioDefinition = {
id: 'sixteenth-battle-liu-biao-refuge',
title: '유표 의탁로',
victoryConditionLabel: '조인 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'원소 진영을 떠난 유비군은 형주의 유표에게 의탁하기 위해 남쪽 길을 엽니다. 조운이 합류했지만 조조군 추격대도 형주 관문 앞에 따라붙었습니다.',
'중앙 강줄기와 숲길은 행군을 늦추고, 동쪽 관문은 수비병과 궁병이 지키고 있습니다. 조운의 기동력과 책사들의 지원을 함께 활용하십시오.',
'조인을 격파하고 형주 관문을 확보하십시오. 25턴 안에 승리하면 유비군의 의탁 명분과 군자금을 더 단단히 챙길 수 있습니다.'
],
map: sixteenthBattleMap,
units: sixteenthBattleUnits,
bonds: sixteenthBattleBonds,
mapTextureKey: 'battle-map-sixteenth',
leaderUnitId: 'liu-biao-road-leader-cao-ren',
quickVictoryTurnLimit: 25,
baseVictoryGold: 1880,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '조인 격파',
rewardGold: 1200,
unitId: 'liu-biao-road-leader-cao-ren'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 420,
unitId: 'liu-bei'
},
{
id: 'jingzhou-gate',
kind: 'secure-terrain',
label: '형주 관문 확보',
rewardGold: 680,
terrain: 'fort'
},
{
id: 'quick',
kind: 'quick-victory',
label: '25턴 이내 승리',
rewardGold: 540,
maxTurn: 25
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 6', '상처약 4', '탁주 2', '형주 접선 문서 +1'],
victoryPages: sixteenthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const seventeenthBattleScenario: BattleScenarioDefinition = {
id: 'seventeenth-battle-wolong-visit-road',
title: '융중 방문로',
victoryConditionLabel: '채순 격파',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'형주에서 모은 와룡의 단서를 따라 유비군은 융중으로 향합니다. 그러나 산길에는 채씨 가병이 먼저 길목을 잡고 있습니다.',
'숲과 언덕, 좁은 물길이 많은 전장입니다. 조운의 기동력과 책사들의 후원을 살려 산길의 궁병과 감시병을 끊어 내십시오.',
'채순을 격파하고 융중 초가로 향하는 길을 확보하십시오. 26턴 안에 승리하면 제갈량 영입의 명분과 보급을 더 단단히 챙길 수 있습니다.'
],
map: seventeenthBattleMap,
units: seventeenthBattleUnits,
bonds: seventeenthBattleBonds,
mapTextureKey: 'battle-map-seventeenth',
leaderUnitId: 'wolong-road-leader-cai-xun',
quickVictoryTurnLimit: 26,
baseVictoryGold: 1960,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '채순 격파',
rewardGold: 1260,
unitId: 'wolong-road-leader-cai-xun'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 440,
unitId: 'liu-bei'
},
{
id: 'longzhong-cottage',
kind: 'secure-terrain',
label: '융중 초가 길 확보',
rewardGold: 720,
terrain: 'village'
},
{
id: 'quick',
kind: 'quick-victory',
label: '26턴 이내 승리',
rewardGold: 560,
maxTurn: 26
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 6', '상처약 4', '탁주 2', '와룡의 서찰 +1'],
victoryPages: seventeenthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const eighteenthBattleScenario: BattleScenarioDefinition = {
id: 'eighteenth-battle-bowang-ambush',
title: '박망파 매복전',
victoryConditionLabel: '하후돈 퇴각',
defeatConditionLabel: '유비 퇴각',
openingObjectiveLines: [
'조조군 선봉 하후돈이 신야로 향합니다. 제갈량은 박망파의 숲길과 좁은 물길을 이용해 적의 속도를 끊으려 합니다.',
'숲길 궁병과 기병이 동시에 압박하지만, 강줄기와 매복 지형을 이용하면 조조군 전열을 갈라낼 수 있습니다. 제갈량의 책략과 조운의 기동을 함께 활용하십시오.',
'하후돈을 퇴각시키고 박망파의 길목을 지키십시오. 27턴 안에 승리하면 강동과 손잡을 시간을 더 벌 수 있습니다.'
],
map: eighteenthBattleMap,
units: eighteenthBattleUnits,
bonds: eighteenthBattleBonds,
mapTextureKey: 'battle-map-eighteenth',
leaderUnitId: 'bowang-leader-xiahou-dun',
quickVictoryTurnLimit: 27,
baseVictoryGold: 2080,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '하후돈 퇴각',
rewardGold: 1340,
unitId: 'bowang-leader-xiahou-dun'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 460,
unitId: 'liu-bei'
},
{
id: 'ambush-village',
kind: 'secure-terrain',
label: '박망파 매복지 확보',
rewardGold: 760,
terrain: 'village'
},
{
id: 'quick',
kind: 'quick-victory',
label: '27턴 이내 승리',
rewardGold: 600,
maxTurn: 27
}
],
defeatConditions: [{ kind: 'unit-defeated', unitId: 'liu-bei' }],
itemRewards: ['콩 7', '상처약 4', '탁주 2', '강동 풍문 +1'],
victoryPages: eighteenthBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const defaultBattleScenarioId: BattleScenarioId = firstBattleScenario.id;
export const battleScenarios: Record<BattleScenarioId, BattleScenarioDefinition> = {
'first-battle-zhuo-commandery': firstBattleScenario,
'second-battle-yellow-turban-pursuit': secondBattleScenario,
'third-battle-guangzong-road': thirdBattleScenario,
'fourth-battle-guangzong-camp': fourthBattleScenario,
'fifth-battle-sishui-vanguard': fifthBattleScenario,
'sixth-battle-jieqiao-relief': sixthBattleScenario,
'seventh-battle-xuzhou-rescue': seventhBattleScenario,
'eighth-battle-xiaopei-supply-road': eighthBattleScenario,
'ninth-battle-xuzhou-gate-night-raid': ninthBattleScenario,
'tenth-battle-xuzhou-breakout': tenthBattleScenario,
'eleventh-battle-xudu-refuge-road': eleventhBattleScenario,
'twelfth-battle-xiapi-outer-siege': twelfthBattleScenario,
'thirteenth-battle-xiapi-final': thirteenthBattleScenario,
'fourteenth-battle-cao-break': fourteenthBattleScenario,
'fifteenth-battle-yuan-refuge-road': fifteenthBattleScenario,
'sixteenth-battle-liu-biao-refuge': sixteenthBattleScenario,
'seventeenth-battle-wolong-visit-road': seventeenthBattleScenario,
'eighteenth-battle-bowang-ambush': eighteenthBattleScenario
};
export const defaultBattleScenario = battleScenarios[defaultBattleScenarioId];
export function getBattleScenario(id: string | undefined) {
if (id && id in battleScenarios) {
return battleScenarios[id as BattleScenarioId];
}
return defaultBattleScenario;
}