Add King of Hanzhong council milestone

This commit is contained in:
2026-06-23 14:21:47 +09:00
parent b4c34afeed
commit 43347fb33b
7 changed files with 140 additions and 16 deletions

View File

@@ -55,6 +55,7 @@ import {
firstBattleVictoryPages,
fourthBattleIntroPages,
fourthBattleVictoryPages,
hanzhongKingCouncilPages,
ninthBattleIntroPages,
ninthBattleVictoryPages,
nineteenthBattleIntroPages,
@@ -86,7 +87,6 @@ import {
thirtySixthBattleIntroPages,
thirtySixthBattleVictoryPages,
thirtySeventhBattleIntroPages,
thirtySeventhBattleVictoryPages,
thirtiethBattleIntroPages,
thirtiethBattleVictoryPages,
twentyEighthBattleIntroPages,
@@ -515,13 +515,14 @@ const sortieFlows: Record<string, SortieFlow> = {
},
[thirtySeventhBattleScenario.id]: {
afterBattleId: thirtySeventhBattleScenario.id,
eyebrow: '다음 장 준비',
title: '촉한 건국 준비',
eyebrow: '군영 의정',
title: '한중왕 즉위 준비',
description:
'한중 결전에서 조조군을 물리치고 북문을 얻었습니다. 다음은 한중왕 즉위와 촉한의 이름을 세우는 정치적 전환을 군영 이벤트와 다음 전장으로 준비해야 합니다.',
rewardHint: '다음 장: 한중왕 즉위 촉한 건국 준비 중',
pages: thirtySeventhBattleVictoryPages,
unavailableNotice: '한중왕 즉위와 촉한 건국 선포는 다음 작업에서 이어집니다. 유비의 명분, 제갈량의 국정 구상, 관우가 지키는 형주의 긴장을 함께 준비하십시오.'
'한중 결전에서 조조군을 물리치고 북문을 얻었습니다. 출진 준비를 통해 새 전투가 아니라 한중왕 즉위 논의를 진행하고, 촉한 건국의 명분을 군영 안에서 정리합니다.',
rewardHint: '군영 목표: 한중왕 즉위 준비 / 촉한 건국 명분 정리',
campaignStep: 'hanzhong-king-camp',
pages: hanzhongKingCouncilPages,
unavailableNotice: '한중왕 즉위 준비가 완료되었습니다. 다음 작업에서는 촉한 건국 선포와 형주 방면의 긴장을 이어 준비합니다.'
}
};

View File

@@ -2387,6 +2387,43 @@ export const thirtySeventhBattleVictoryPages: StoryPage[] = [
}
];
export const hanzhongKingCouncilPages: StoryPage[] = [
{
id: 'hanzhong-king-council-open',
bgm: 'story-dark',
chapter: '한중왕 즉위 논의',
background: 'story-three-heroes',
speaker: '제갈량',
text: '한중을 얻은 뒤 군영의 분위기는 전장의 승리에서 나라의 이름으로 옮겨 갔습니다. 이제 유비군은 어디를 지키는 군대인지, 누구의 뜻을 잇는 세력인지 밝혀야 합니다.'
},
{
id: 'hanzhong-king-liu-bei-doubt',
bgm: 'battle-prep',
chapter: '이름의 무게',
background: 'story-liu-bei',
speaker: '유비',
portrait: 'liuBei',
text: '내가 왕의 이름을 받는 것이 백성을 위한 길이라면 마다하지 않겠소. 다만 그 이름이 욕심으로 보인다면 지금까지 따른 이들의 뜻을 해칠까 두렵소.'
},
{
id: 'hanzhong-king-officers',
bgm: 'battle-prep',
chapter: '장수들의 서명',
background: 'story-militia',
speaker: '관우',
portrait: 'guanYu',
text: '형님이 세우는 이름은 한실을 잇기 위한 깃발입니다. 전장마다 모인 장수들이 그 깃발 아래 서명한다면, 병사들도 무엇을 위해 싸우는지 알게 될 것입니다.'
},
{
id: 'hanzhong-king-next-foundation',
bgm: 'militia-theme',
chapter: '촉한의 문 앞에서',
background: 'story-sortie',
speaker: '제갈량',
text: '한중왕의 격문이 준비되면 다음은 촉한의 이름을 세울 차례입니다. 그러나 나라의 이름은 새 전장을 부릅니다. 형주의 긴장과 북방의 그림자도 함께 보아야 합니다.'
}
];
export const firstBattleMap: BattleMap = {
width: 20,
height: 18,

View File

@@ -5854,6 +5854,9 @@ export class CampScene extends Phaser.Scene {
private currentCampTitle() {
const battleId = this.currentCampBattleId();
if (this.campaign?.step === 'hanzhong-king-camp') {
return '한중왕 즉위 준비 군영';
}
if (battleId === campBattleIds.thirtySeventh) {
return '한중 결전 후 군영';
}
@@ -6673,6 +6676,19 @@ export class CampScene extends Phaser.Scene {
if (!flow.nextBattleId || !flow.campaignStep || flow.pages.length === 0) {
this.hideSortiePrep();
if (!flow.nextBattleId && flow.campaignStep && flow.pages.length > 0) {
if (this.campaign?.step === flow.campaignStep) {
this.showCampNotice(flow.unavailableNotice ?? '다음 장은 아직 준비 중입니다. 군영에서 성장 상태를 정비하세요.');
return;
}
markCampaignStep(flow.campaignStep);
this.campaign = getCampaignState();
this.scene.start('StoryScene', {
pages: flow.pages,
nextScene: 'CampScene'
});
return;
}
if (flow.pages.length > 0) {
this.scene.start('StoryScene', {
pages: flow.pages,
@@ -6950,14 +6966,21 @@ export class CampScene extends Phaser.Scene {
const activeChapterIndex = this.activeTimelineChapterIndex(completedIds);
const activeChapter = campaignTimelineChapters[activeChapterIndex];
const latestBattleId = this.campaign?.latestBattleId ?? this.report?.battleId;
const nextBattleId = getSortieFlow(this.campaign?.latestBattleId).nextBattleId;
const flow = getSortieFlow(this.campaign?.latestBattleId);
const nextBattleId = flow.nextBattleId;
return {
completedKnown,
totalKnown,
activeChapterIndex,
activeChapter,
latestBattleTitle: latestBattleId ? getBattleScenario(latestBattleId).title : '없음',
nextBattleTitle: nextBattleId ? getBattleScenario(nextBattleId).title : '준비 중'
nextBattleTitle: this.campaign?.step === 'hanzhong-king-camp'
? '촉한 건국 준비'
: nextBattleId
? getBattleScenario(nextBattleId).title
: flow.campaignStep
? flow.title
: '준비 중'
};
}

View File

@@ -373,7 +373,8 @@ export class TitleScene extends Phaser.Scene {
campaign.step === 'thirty-fourth-camp' ||
campaign.step === 'thirty-fifth-camp' ||
campaign.step === 'thirty-sixth-camp' ||
campaign.step === 'thirty-seventh-camp'
campaign.step === 'thirty-seventh-camp' ||
campaign.step === 'hanzhong-king-camp'
) {
this.scene.start('CampScene');
return;

View File

@@ -115,7 +115,8 @@ export type CampaignStep =
| 'thirty-sixth-battle'
| 'thirty-sixth-camp'
| 'thirty-seventh-battle'
| 'thirty-seventh-camp';
| 'thirty-seventh-camp'
| 'hanzhong-king-camp';
export type CampaignUnitProgressSnapshot = {
unitId: string;