321 lines
15 KiB
TypeScript
321 lines
15 KiB
TypeScript
import type { CampaignStep } from '../state/campaignState';
|
|
import {
|
|
defaultBattleScenario,
|
|
eighthBattleScenario,
|
|
eighteenthBattleScenario,
|
|
eleventhBattleScenario,
|
|
fifthBattleScenario,
|
|
fifteenthBattleScenario,
|
|
fourteenthBattleScenario,
|
|
fourthBattleScenario,
|
|
ninthBattleScenario,
|
|
nineteenthBattleScenario,
|
|
secondBattleScenario,
|
|
seventhBattleScenario,
|
|
sixthBattleScenario,
|
|
sixteenthBattleScenario,
|
|
seventeenthBattleScenario,
|
|
tenthBattleScenario,
|
|
thirteenthBattleScenario,
|
|
twentyFirstBattleScenario,
|
|
twentySecondBattleScenario,
|
|
twentiethBattleScenario,
|
|
twelfthBattleScenario,
|
|
thirdBattleScenario,
|
|
type BattleScenarioId
|
|
} from './battles';
|
|
import {
|
|
eighthBattleIntroPages,
|
|
eighthBattleVictoryPages,
|
|
eighteenthBattleIntroPages,
|
|
eighteenthBattleVictoryPages,
|
|
eleventhBattleIntroPages,
|
|
eleventhBattleVictoryPages,
|
|
fifthBattleIntroPages,
|
|
fifthBattleVictoryPages,
|
|
fifteenthBattleIntroPages,
|
|
fifteenthBattleVictoryPages,
|
|
fourteenthBattleIntroPages,
|
|
fourteenthBattleVictoryPages,
|
|
firstBattleVictoryPages,
|
|
fourthBattleIntroPages,
|
|
fourthBattleVictoryPages,
|
|
ninthBattleIntroPages,
|
|
ninthBattleVictoryPages,
|
|
nineteenthBattleIntroPages,
|
|
nineteenthBattleVictoryPages,
|
|
secondBattleIntroPages,
|
|
secondBattleVictoryPages,
|
|
seventhBattleIntroPages,
|
|
seventhBattleVictoryPages,
|
|
sixthBattleIntroPages,
|
|
sixthBattleVictoryPages,
|
|
sixteenthBattleIntroPages,
|
|
sixteenthBattleVictoryPages,
|
|
seventeenthBattleIntroPages,
|
|
seventeenthBattleVictoryPages,
|
|
tenthBattleIntroPages,
|
|
tenthBattleVictoryPages,
|
|
thirteenthBattleIntroPages,
|
|
thirteenthBattleVictoryPages,
|
|
twentyFirstBattleIntroPages,
|
|
twentyFirstBattleVictoryPages,
|
|
twentySecondBattleIntroPages,
|
|
twentySecondBattleVictoryPages,
|
|
twentiethBattleIntroPages,
|
|
twentiethBattleVictoryPages,
|
|
twelfthBattleIntroPages,
|
|
twelfthBattleVictoryPages,
|
|
thirdBattleIntroPages,
|
|
thirdBattleVictoryPages,
|
|
type StoryPage
|
|
} from './scenario';
|
|
|
|
export type SortieFlow = {
|
|
afterBattleId: string;
|
|
eyebrow: string;
|
|
title: string;
|
|
description: string;
|
|
rewardHint: string;
|
|
nextBattleId?: BattleScenarioId;
|
|
campaignStep?: CampaignStep;
|
|
pages: StoryPage[];
|
|
unavailableNotice?: string;
|
|
};
|
|
|
|
const sortieFlows: Record<string, SortieFlow> = {
|
|
[defaultBattleScenario.id]: {
|
|
afterBattleId: defaultBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: secondBattleScenario.title,
|
|
description: '탁현을 물러난 황건 잔당이 인근 마을을 위협하고 있습니다. 의용군은 첫 승리의 기세를 몰아 추격에 나섭니다.',
|
|
rewardHint: '예상 보상: 군자금, 소모품, 의용군 명성',
|
|
nextBattleId: secondBattleScenario.id,
|
|
campaignStep: 'second-battle',
|
|
pages: [...firstBattleVictoryPages, ...secondBattleIntroPages]
|
|
},
|
|
[secondBattleScenario.id]: {
|
|
afterBattleId: secondBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: thirdBattleScenario.title,
|
|
description: '탁현을 넘어 광종으로 향하는 길목에서 황건 전령이 관군의 움직임을 본대로 전하려 합니다. 강가 요새와 좁은 길을 돌파해야 합니다.',
|
|
rewardHint: `예상 보상: ${thirdBattleScenario.title} 개방`,
|
|
nextBattleId: thirdBattleScenario.id,
|
|
campaignStep: 'third-battle',
|
|
pages: [...secondBattleVictoryPages, ...thirdBattleIntroPages]
|
|
},
|
|
[thirdBattleScenario.id]: {
|
|
afterBattleId: thirdBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: fourthBattleScenario.title,
|
|
description: '광종 구원로를 연 의용군은 이제 황건 본영을 향합니다. 장각을 격파해 황건적 토벌의 큰 고비를 넘겨야 합니다.',
|
|
rewardHint: `예상 보상: ${fourthBattleScenario.title} 개방`,
|
|
nextBattleId: fourthBattleScenario.id,
|
|
campaignStep: 'fourth-battle',
|
|
pages: [...thirdBattleVictoryPages, ...fourthBattleIntroPages]
|
|
},
|
|
[fourthBattleScenario.id]: {
|
|
afterBattleId: fourthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: fifthBattleScenario.title,
|
|
description: '황건적 토벌로 이름을 알린 세 형제는 반동탁 연합의 흐름에 몸을 싣습니다. 공손찬의 진영으로 향하는 길목에서 사수관 전초 병력을 상대해야 합니다.',
|
|
rewardHint: `예상 보상: ${fifthBattleScenario.title} 개방`,
|
|
nextBattleId: fifthBattleScenario.id,
|
|
campaignStep: 'fifth-battle',
|
|
pages: [...fourthBattleVictoryPages, ...fifthBattleIntroPages]
|
|
},
|
|
[fifthBattleScenario.id]: {
|
|
afterBattleId: fifthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: sixthBattleScenario.title,
|
|
description: '공손찬의 군영에 의탁한 세 형제는 북방 전선의 보급로를 지키는 임무를 맡습니다. 계교로 향하는 길목에서 원소군 별동대를 상대해야 합니다.',
|
|
rewardHint: `예상 보상: ${sixthBattleScenario.title} 개방`,
|
|
nextBattleId: sixthBattleScenario.id,
|
|
campaignStep: 'sixth-battle',
|
|
pages: [...fifthBattleVictoryPages, ...sixthBattleIntroPages]
|
|
},
|
|
[sixthBattleScenario.id]: {
|
|
afterBattleId: sixthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: seventhBattleScenario.title,
|
|
description: '계교 원군로를 열어 공손찬의 신뢰를 얻은 유비군에게 서주의 도겸이 원군을 청합니다. 조조군 선봉을 밀어내고 서주 피난로를 열어야 합니다.',
|
|
rewardHint: `예상 보상: ${seventhBattleScenario.title} 개방`,
|
|
nextBattleId: seventhBattleScenario.id,
|
|
campaignStep: 'seventh-battle',
|
|
pages: [...sixthBattleVictoryPages, ...seventhBattleIntroPages]
|
|
},
|
|
[seventhBattleScenario.id]: {
|
|
afterBattleId: seventhBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: eighthBattleScenario.title,
|
|
description: '도겸에게 서주를 맡은 뒤 첫 과제는 소패 보급로를 지키는 일입니다. 여포군의 그림자가 드리우기 전에 새로 합류한 장수들과 방위선을 세워야 합니다.',
|
|
rewardHint: `예상 보상: ${eighthBattleScenario.title} 개방`,
|
|
nextBattleId: eighthBattleScenario.id,
|
|
campaignStep: 'eighth-battle',
|
|
pages: [...seventhBattleVictoryPages, ...eighthBattleIntroPages]
|
|
},
|
|
[eighthBattleScenario.id]: {
|
|
afterBattleId: eighthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: ninthBattleScenario.title,
|
|
description: '여포를 의탁시킨 뒤 서주 성문 안팎의 불안이 터집니다. 조표의 야습을 막아 성문을 지켜내야 합니다.',
|
|
rewardHint: `예상 보상: ${ninthBattleScenario.title} 개방`,
|
|
nextBattleId: ninthBattleScenario.id,
|
|
campaignStep: 'ninth-battle',
|
|
pages: [...eighthBattleVictoryPages, ...ninthBattleIntroPages]
|
|
},
|
|
[ninthBattleScenario.id]: {
|
|
afterBattleId: ninthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: tenthBattleScenario.title,
|
|
description: '장비의 성급함과 여포의 야심이 맞물려 서주는 무너집니다. 성을 되찾기보다 포위망을 뚫고 다음 길을 찾는 전투가 됩니다.',
|
|
rewardHint: `예상 보상: ${tenthBattleScenario.title} 개방`,
|
|
nextBattleId: tenthBattleScenario.id,
|
|
campaignStep: 'tenth-battle',
|
|
pages: [...ninthBattleVictoryPages, ...tenthBattleIntroPages]
|
|
},
|
|
[tenthBattleScenario.id]: {
|
|
afterBattleId: tenthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: eleventhBattleScenario.title,
|
|
description: '조조는 유비군을 받아들이되 허도 입성로의 원술 잔군을 치게 합니다. 의탁은 시작되지만, 동시에 유비군의 군율과 힘을 재는 시험입니다.',
|
|
rewardHint: `예상 보상: ${eleventhBattleScenario.title} 개방`,
|
|
nextBattleId: eleventhBattleScenario.id,
|
|
campaignStep: 'eleventh-battle',
|
|
pages: [...tenthBattleVictoryPages, ...eleventhBattleIntroPages]
|
|
},
|
|
[eleventhBattleScenario.id]: {
|
|
afterBattleId: eleventhBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: twelfthBattleScenario.title,
|
|
description: '조조는 유비군을 하비 포위망에 투입합니다. 여포를 다시 마주하는 이 싸움에서 유비군은 조조의 명을 따르되, 서주 백성을 위한 뜻도 지켜야 합니다.',
|
|
rewardHint: `예상 보상: ${twelfthBattleScenario.title} 개방`,
|
|
nextBattleId: twelfthBattleScenario.id,
|
|
campaignStep: 'twelfth-battle',
|
|
pages: [...eleventhBattleVictoryPages, ...twelfthBattleIntroPages]
|
|
},
|
|
[twelfthBattleScenario.id]: {
|
|
afterBattleId: twelfthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: thirteenthBattleScenario.title,
|
|
description: '하비 외곽 포위망이 좁혀졌고, 여포의 마지막 운명도 가까워졌습니다. 성문과 수문을 뚫고 여포를 격파하면 조조 휘하에서 깊어지는 긴장이 다음 흐름으로 이어집니다.',
|
|
rewardHint: `예상 보상: ${thirteenthBattleScenario.title} 개방`,
|
|
nextBattleId: thirteenthBattleScenario.id,
|
|
campaignStep: 'thirteenth-battle',
|
|
pages: [...twelfthBattleVictoryPages, ...thirteenthBattleIntroPages]
|
|
},
|
|
[thirteenthBattleScenario.id]: {
|
|
afterBattleId: thirteenthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: fourteenthBattleScenario.title,
|
|
description:
|
|
'여포가 무너진 뒤 조조의 경계는 더 깊어졌습니다. 손건이 합류해 서주 길목의 문서와 민심을 준비하고, 유비군은 조조의 장막 밖으로 나갈 첫 전투를 맞습니다.',
|
|
rewardHint: `예상 보상: ${fourteenthBattleScenario.title} 개방 / 손건 합류`,
|
|
nextBattleId: fourteenthBattleScenario.id,
|
|
campaignStep: 'fourteenth-battle',
|
|
pages: [...thirteenthBattleVictoryPages, ...fourteenthBattleIntroPages]
|
|
},
|
|
[fourteenthBattleScenario.id]: {
|
|
afterBattleId: fourteenthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: fifteenthBattleScenario.title,
|
|
description:
|
|
'조조의 장막을 벗어난 유비군은 원소 진영으로 향해야 합니다. 그러나 북상로에는 채양의 추격대가 깔려 있어, 접선지까지 길을 열어야 합니다.',
|
|
rewardHint: `예상 보상: ${fifteenthBattleScenario.title} 개방 / 원소 접선`,
|
|
nextBattleId: fifteenthBattleScenario.id,
|
|
campaignStep: 'fifteenth-battle',
|
|
pages: [...fourteenthBattleVictoryPages, ...fifteenthBattleIntroPages]
|
|
},
|
|
[fifteenthBattleScenario.id]: {
|
|
afterBattleId: fifteenthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: sixteenthBattleScenario.title,
|
|
description:
|
|
'원소 진영의 형세가 흔들리자 유비군은 다시 몸을 옮겨 형주로 향합니다. 조운이 재합류하며 기동력이 늘지만, 조조군 추격대가 형주 관문 앞을 막아섭니다.',
|
|
rewardHint: `예상 보상: ${sixteenthBattleScenario.title} 개방 / 조운 합류`,
|
|
nextBattleId: sixteenthBattleScenario.id,
|
|
campaignStep: 'sixteenth-battle',
|
|
pages: [...fifteenthBattleVictoryPages, ...sixteenthBattleIntroPages]
|
|
},
|
|
[sixteenthBattleScenario.id]: {
|
|
afterBattleId: sixteenthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: seventeenthBattleScenario.title,
|
|
description:
|
|
'유표에게 의탁한 유비군은 형주에서 숨을 돌리지만, 손님으로 머무는 것만으로 천하의 길을 열 수는 없습니다. 형주에서 모은 와룡의 단서를 따라 융중으로 향해야 합니다.',
|
|
rewardHint: `예상 보상: ${seventeenthBattleScenario.title} 개방 / 제갈량 영입`,
|
|
nextBattleId: seventeenthBattleScenario.id,
|
|
campaignStep: 'seventeenth-battle',
|
|
pages: [...sixteenthBattleVictoryPages, ...seventeenthBattleIntroPages]
|
|
},
|
|
[seventeenthBattleScenario.id]: {
|
|
afterBattleId: seventeenthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: eighteenthBattleScenario.title,
|
|
description:
|
|
'제갈량이 합류하며 유비군은 비로소 천하의 큰 판을 바라보게 됩니다. 조조군 선봉이 신야로 다가오자, 공명은 박망파의 숲길에서 첫 계책을 펼치려 합니다.',
|
|
rewardHint: `예상 보상: ${eighteenthBattleScenario.title} 개방 / 제갈량 책략 실전`,
|
|
nextBattleId: eighteenthBattleScenario.id,
|
|
campaignStep: 'eighteenth-battle',
|
|
pages: [...seventeenthBattleVictoryPages, ...eighteenthBattleIntroPages]
|
|
},
|
|
[eighteenthBattleScenario.id]: {
|
|
afterBattleId: eighteenthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: nineteenthBattleScenario.title,
|
|
description:
|
|
'박망파에서 조조군 선봉을 늦췄지만 대군의 남하는 계속됩니다. 신야의 백성을 데리고 장판파 피난로를 열어야 강동 사절로 이어질 시간을 벌 수 있습니다.',
|
|
rewardHint: `예상 보상: ${nineteenthBattleScenario.title} 개방 / 장판파 피난로 확보`,
|
|
nextBattleId: nineteenthBattleScenario.id,
|
|
campaignStep: 'nineteenth-battle',
|
|
pages: [...eighteenthBattleVictoryPages, ...nineteenthBattleIntroPages]
|
|
},
|
|
[nineteenthBattleScenario.id]: {
|
|
afterBattleId: nineteenthBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: twentiethBattleScenario.title,
|
|
description:
|
|
'장판파에서 피난로를 열어 백성과 군을 다시 모았습니다. 이제 제갈량과 손건을 강나루까지 보내 강동 사절의 길을 열어야 합니다.',
|
|
rewardHint: `예상 보상: ${twentiethBattleScenario.title} 개방 / 강동 사절 문서 확보`,
|
|
nextBattleId: twentiethBattleScenario.id,
|
|
campaignStep: 'twentieth-battle',
|
|
pages: [...nineteenthBattleVictoryPages, ...twentiethBattleIntroPages]
|
|
},
|
|
[twentiethBattleScenario.id]: {
|
|
afterBattleId: twentiethBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: twentyFirstBattleScenario.title,
|
|
description:
|
|
'강동으로 향하는 길이 열렸습니다. 제갈량과 손건이 손권과 주유를 설득한 뒤, 조조군 수군 선봉을 상대로 손유 동맹의 첫 전선을 세워야 합니다.',
|
|
rewardHint: `예상 보상: ${twentyFirstBattleScenario.title} 개방 / 화공 논의 진전`,
|
|
nextBattleId: twentyFirstBattleScenario.id,
|
|
campaignStep: 'twenty-first-battle',
|
|
pages: [...twentiethBattleVictoryPages, ...twentyFirstBattleIntroPages]
|
|
},
|
|
[twentyFirstBattleScenario.id]: {
|
|
afterBattleId: twentyFirstBattleScenario.id,
|
|
eyebrow: '다음 전장',
|
|
title: twentySecondBattleScenario.title,
|
|
description:
|
|
'조조군 수군 선봉을 밀어내며 손유 동맹의 첫 전선이 세워졌습니다. 이제 주유와 황개, 제갈량의 계책이 맞물려 본격적인 화공을 준비해야 합니다.',
|
|
rewardHint: `예상 보상: ${twentySecondBattleScenario.title} 개방 / 적벽대전 결전`,
|
|
nextBattleId: twentySecondBattleScenario.id,
|
|
campaignStep: 'twenty-second-battle',
|
|
pages: [...twentyFirstBattleVictoryPages, ...twentySecondBattleIntroPages]
|
|
},
|
|
[twentySecondBattleScenario.id]: {
|
|
afterBattleId: twentySecondBattleScenario.id,
|
|
eyebrow: '다음 장 준비',
|
|
title: '형주 확보 준비',
|
|
description:
|
|
'적벽의 불길로 조조의 남하가 꺾였습니다. 이제 유비군은 머물 땅을 마련하기 위해 형주 남부와 익주로 이어질 근거지를 준비해야 합니다.',
|
|
rewardHint: '다음 장: 형주 남부 확보 준비 중',
|
|
pages: twentySecondBattleVictoryPages,
|
|
unavailableNotice: '형주 남부 확보 장은 다음 작업에서 이어집니다. 군영에서 전후 수습, 공명, 보급을 정비하십시오.'
|
|
}
|
|
};
|
|
|
|
export function getSortieFlow(latestBattleId?: string) {
|
|
return sortieFlows[latestBattleId ?? defaultBattleScenario.id] ?? sortieFlows[defaultBattleScenario.id];
|
|
}
|