Add Changsha veteran chapter
This commit is contained in:
@@ -7,6 +7,8 @@ import { getSortieFlow } from '../data/campaignFlow';
|
||||
import {
|
||||
caoBreakRecruitBonds,
|
||||
caoBreakRecruitUnits,
|
||||
changshaRecruitBonds,
|
||||
changshaRecruitUnits,
|
||||
firstBattleBonds,
|
||||
firstBattleUnits,
|
||||
guiyangRecruitBonds,
|
||||
@@ -304,7 +306,8 @@ const campaignTimelineChapters: CampaignTimelineChapter[] = [
|
||||
battleIds: [
|
||||
'twenty-third-battle-jingzhou-south-entry',
|
||||
'twenty-fourth-battle-guiyang-persuasion',
|
||||
'twenty-fifth-battle-wuling-mountain-road'
|
||||
'twenty-fifth-battle-wuling-mountain-road',
|
||||
'twenty-sixth-battle-changsha-veteran'
|
||||
],
|
||||
nextHints: ['형주 방위', '익주 진입', '장수 대거 합류']
|
||||
},
|
||||
@@ -343,7 +346,8 @@ const campBattleIds = {
|
||||
twentySecond: 'twenty-second-battle-red-cliffs-fire',
|
||||
twentyThird: 'twenty-third-battle-jingzhou-south-entry',
|
||||
twentyFourth: 'twenty-fourth-battle-guiyang-persuasion',
|
||||
twentyFifth: 'twenty-fifth-battle-wuling-mountain-road'
|
||||
twentyFifth: 'twenty-fifth-battle-wuling-mountain-road',
|
||||
twentySixth: 'twenty-sixth-battle-changsha-veteran'
|
||||
} as const;
|
||||
|
||||
const requiredSortieUnitIds = new Set(['liu-bei']);
|
||||
@@ -618,6 +622,18 @@ const sortieRulesByBattleId: Partial<Record<BattleScenarioId, SortieRuleDefiniti
|
||||
{ unitId: 'zhang-fei', reason: '협곡 보병 전열을 밀어붙이는 돌파 역할입니다.' }
|
||||
],
|
||||
note: '무릉 산길 확보전은 열 명 중 여섯 명만 고르는 첫 전장입니다. 마량과 이적을 모두 데려가면 설득은 강해지지만, 전열 무장 한 명을 줄여야 합니다.'
|
||||
},
|
||||
'twenty-sixth-battle-changsha-veteran': {
|
||||
maxUnits: 6,
|
||||
recommended: [
|
||||
{ unitId: 'liu-bei', reason: '장사 노장을 예우하고 한현을 물러나게 할 명분의 중심입니다.' },
|
||||
{ unitId: 'gong-zhi', reason: '무릉에서 얻은 현지 정보로 장사 접근로와 성 안 소문을 읽습니다.' },
|
||||
{ unitId: 'yi-ji', reason: '황충을 예우하고 항복 조건을 문장으로 다듬는 핵심 문사입니다.' },
|
||||
{ unitId: 'zhuge-liang', reason: '한현의 의심과 성문 방어선을 끊는 작전 핵심입니다.' },
|
||||
{ unitId: 'guan-yu', reason: '황충과 무인의 예를 나누며 전열을 받아낼 주력입니다.' },
|
||||
{ unitId: 'zhao-yun', reason: '장사 성문 주변 기병과 척후를 빠르게 정리하기 좋습니다.' }
|
||||
],
|
||||
note: '장사 노장 대면전은 열한 명 중 여섯 명만 고르는 전장입니다. 황충과 위연은 승리 후 합류하므로, 이번에는 예우와 돌파의 균형을 먼저 준비하십시오.'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2700,6 +2716,114 @@ const campDialogues: CampDialogue[] = [
|
||||
rewardExp: 9
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'liu-huang-after-changsha',
|
||||
title: '노장을 예우하다',
|
||||
availableAfterBattleIds: [campBattleIds.twentySixth],
|
||||
unitIds: ['liu-bei', 'huang-zhong'],
|
||||
bondId: 'liu-bei__huang-zhong',
|
||||
rewardExp: 30,
|
||||
lines: [
|
||||
'황충: 늙은 장수의 체면을 지켜 주신 일은 전장의 승리보다 오래 남을 것입니다.',
|
||||
'유비: 활은 나이를 묻지 않고 뜻을 묻는다고 들었소. 장군의 활이 백성을 지키는 데 쓰인다면 더 바랄 것이 없소.',
|
||||
'황충: 그 뜻이라면 제 활과 남은 세월을 맡기겠습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'honor-veteran-bow',
|
||||
label: '노장의 활을 예우한다',
|
||||
response: '유비는 황충의 활과 전공을 병사들 앞에서 높였고, 노장은 조용히 고개를 숙였다.',
|
||||
rewardExp: 12
|
||||
},
|
||||
{
|
||||
id: 'ask-changsha-people',
|
||||
label: '장사 백성을 묻는다',
|
||||
response: '황충은 장사 성 안팎의 창고와 마을 사정을 차분히 들려주었고, 유비는 먼저 살필 곳을 정했다.',
|
||||
rewardExp: 10
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'guan-huang-after-changsha',
|
||||
title: '무인의 존중',
|
||||
availableAfterBattleIds: [campBattleIds.twentySixth],
|
||||
unitIds: ['guan-yu', 'huang-zhong'],
|
||||
bondId: 'guan-yu__huang-zhong',
|
||||
rewardExp: 28,
|
||||
lines: [
|
||||
'관우: 장군의 활은 성루 위에서도 흔들리지 않았소. 칼을 든 몸으로도 그 기개를 알 수 있었소.',
|
||||
'황충: 운장 장군의 칼 역시 병사를 물러서게 하지 않았습니다. 나이는 달라도 무인의 길은 통하는군요.',
|
||||
'관우: 다음 전장에서는 서로의 거리와 호흡을 맞춰 봅시다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'compare-front-and-bow',
|
||||
label: '전열과 활의 거리를 맞춘다',
|
||||
response: '관우와 황충은 전열이 버티는 거리와 활이 닿는 거리를 함께 맞추며 장사 병사들의 시선을 모았다.',
|
||||
rewardExp: 11
|
||||
},
|
||||
{
|
||||
id: 'share-warrior-courtesy',
|
||||
label: '무인의 예를 나눈다',
|
||||
response: '두 장수는 말보다 짧은 예로 서로를 인정했고, 군영의 새 긴장감은 단단한 신뢰로 바뀌기 시작했다.',
|
||||
rewardExp: 10
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'liu-wei-after-changsha',
|
||||
title: '닫힌 문을 여는 창',
|
||||
availableAfterBattleIds: [campBattleIds.twentySixth],
|
||||
unitIds: ['liu-bei', 'wei-yan'],
|
||||
bondId: 'liu-bei__wei-yan',
|
||||
rewardExp: 26,
|
||||
lines: [
|
||||
'위연: 저는 성문 안의 답답함을 참지 못했습니다. 주공의 군이라면 닫힌 문을 여는 데 제 창을 쓰겠습니다.',
|
||||
'유비: 거친 창도 향할 곳이 바르면 백성을 살리는 길이 되오. 다만 급한 마음이 먼저 나서지 않도록 함께 다듬읍시다.',
|
||||
'위연: 명령이 분명하다면, 제 창도 분명히 따르겠습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'set-wei-yan-vanguard-rule',
|
||||
label: '돌파 규칙을 정한다',
|
||||
response: '유비는 위연에게 돌파 전에 반드시 백성의 길을 살피라 명했고, 위연은 거칠게나마 고개를 끄덕였다.',
|
||||
rewardExp: 10
|
||||
},
|
||||
{
|
||||
id: 'temper-wei-yan-ambition',
|
||||
label: '뜻을 먼저 묻는다',
|
||||
response: '위연은 공을 세우고 싶다는 마음을 숨기지 않았지만, 그 공이 누구를 위한 것인지 다시 생각하게 되었다.',
|
||||
rewardExp: 9
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'huang-wei-after-changsha',
|
||||
title: '장사의 전환',
|
||||
availableAfterBattleIds: [campBattleIds.twentySixth],
|
||||
unitIds: ['huang-zhong', 'wei-yan'],
|
||||
bondId: 'huang-zhong__wei-yan',
|
||||
rewardExp: 24,
|
||||
lines: [
|
||||
'황충: 성문이 열릴 때의 결단은 빠르더군. 다만 빠른 결단은 때로 먼저 상처를 남긴다.',
|
||||
'위연: 장군처럼 오래 참는 법은 아직 모릅니다. 하지만 닫힌 성문을 그대로 두는 것도 참기 어렵습니다.',
|
||||
'황충: 그러니 다음에는 내가 거리를 보고, 그대가 길을 열면 되겠군.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'pair-bow-and-breakthrough',
|
||||
label: '활과 돌파를 맞춘다',
|
||||
response: '황충은 위연이 뛰어들 거리의 위험을 짚었고, 위연은 노장의 활이 닿는 길을 익혔다.',
|
||||
rewardExp: 10
|
||||
},
|
||||
{
|
||||
id: 'settle-changsha-memory',
|
||||
label: '장사의 기억을 정리한다',
|
||||
response: '두 사람은 한현 아래에서 서로 달랐던 선택을 말했고, 이제 같은 군에서 다른 역할을 맡기로 했다.',
|
||||
rewardExp: 9
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -3329,6 +3453,66 @@ const campVisits: CampVisitDefinition[] = [
|
||||
itemRewards: ['남부 군현 지도 1']
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'changsha-veteran-honor',
|
||||
title: '장사 노장 예우',
|
||||
location: '장사 성루',
|
||||
availableAfterBattleIds: [campBattleIds.twentySixth],
|
||||
bondId: 'liu-bei__huang-zhong',
|
||||
description: '유비와 황충이 장사 성루에 올라 전투 뒤 흔들린 병사들을 달래고, 노장의 명예를 새 군율 안에 세웁니다.',
|
||||
lines: [
|
||||
'황충: 병사들은 제가 패한 것이 아니라 버림받은 것이라 여길까 두려워합니다.',
|
||||
'유비: 장군을 예로 맞는다면 병사들도 자기 자리를 잃지 않을 것이오. 성루에서 함께 군율을 밝힙시다.',
|
||||
'장사 성루 위에는 아직 화살 자국이 남아 있었지만, 병사들의 시선은 조금씩 아래로 내려왔습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'honor-changsha-soldiers',
|
||||
label: '장사 병사를 예우한다',
|
||||
response: '황충의 이름으로 장사 병사들의 항복 절차가 정리되자, 성 안의 불안은 빠르게 가라앉았다.',
|
||||
bondExp: 22,
|
||||
itemRewards: ['장사 병적 기록 1']
|
||||
},
|
||||
{
|
||||
id: 'open-castle-storehouse',
|
||||
label: '성내 창고를 점검한다',
|
||||
response: '창고를 함부로 열지 않고 장부부터 확인하자, 장사 상인들이 다시 거래를 시작할 수 있게 되었다.',
|
||||
bondExp: 18,
|
||||
gold: 220,
|
||||
itemRewards: ['콩 4']
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'yi-province-road-council',
|
||||
title: '익주 길 논의',
|
||||
location: '장사 군막',
|
||||
availableAfterBattleIds: [campBattleIds.twentySixth],
|
||||
bondId: 'liu-bei__zhuge-liang',
|
||||
description: '제갈량과 새로 합류한 장수들의 정보를 모아, 형주 남부 이후 익주로 향할 큰 방향을 처음 정리합니다.',
|
||||
lines: [
|
||||
'제갈량: 형주 남부는 뿌리가 되었지만, 뿌리만으로 천하를 받칠 수는 없습니다. 익주로 향할 명분과 길이 필요합니다.',
|
||||
'유비: 길이 멀수록 함께 갈 사람을 더 살펴야 하오. 새로 온 장수들의 뜻도 함께 묶읍시다.',
|
||||
'군막의 지도에는 형주 남부 표시 옆으로 익주로 향하는 긴 선이 처음 그어졌습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'draft-yi-province-cause',
|
||||
label: '익주 명분을 적는다',
|
||||
response: '제갈량은 형주 남부 안정과 백성 보호의 기록을 바탕으로, 익주로 향할 첫 명분을 정리했다.',
|
||||
bondExp: 24,
|
||||
itemRewards: ['익주 진입 초안 1']
|
||||
},
|
||||
{
|
||||
id: 'assign-new-officers',
|
||||
label: '새 장수 역할을 나눈다',
|
||||
response: '황충, 위연, 공지의 역할이 정리되자 다음 대장정에서 누가 전열과 후방을 맡을지 윤곽이 생겼다.',
|
||||
bondExp: 20,
|
||||
gold: 220,
|
||||
itemRewards: ['군영 편성 기록 1']
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -3414,6 +3598,33 @@ export class CampScene extends Phaser.Scene {
|
||||
return;
|
||||
}
|
||||
|
||||
if (battleId === campBattleIds.twentySixth) {
|
||||
this.campaign = ensureCampaignRosterUnits(
|
||||
[
|
||||
...xuzhouRecruitUnits,
|
||||
...caoBreakRecruitUnits,
|
||||
...liuBiaoRecruitUnits,
|
||||
...zhugeRecruitUnits,
|
||||
...jingzhouRecruitUnits,
|
||||
...guiyangRecruitUnits,
|
||||
...wulingRecruitUnits,
|
||||
...changshaRecruitUnits
|
||||
],
|
||||
[
|
||||
...xuzhouRecruitBonds,
|
||||
...caoBreakRecruitBonds,
|
||||
...liuBiaoRecruitBonds,
|
||||
...zhugeRecruitBonds,
|
||||
...jingzhouRecruitBonds,
|
||||
...guiyangRecruitBonds,
|
||||
...wulingRecruitBonds,
|
||||
...changshaRecruitBonds
|
||||
]
|
||||
);
|
||||
this.report = this.campaign.firstBattleReport ?? this.report;
|
||||
return;
|
||||
}
|
||||
|
||||
if (battleId === campBattleIds.twentyFifth) {
|
||||
this.campaign = ensureCampaignRosterUnits(
|
||||
[
|
||||
@@ -3535,6 +3746,9 @@ export class CampScene extends Phaser.Scene {
|
||||
|
||||
private currentCampTitle() {
|
||||
const battleId = this.currentCampBattleId();
|
||||
if (battleId === campBattleIds.twentySixth) {
|
||||
return '장사 노장 대면 후 군영';
|
||||
}
|
||||
if (battleId === campBattleIds.twentyFifth) {
|
||||
return '무릉 산길 확보 후 군영';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user