Add Tianshui advance sortie flow
This commit is contained in:
@@ -50,6 +50,7 @@ import {
|
||||
mengHuoSecondCaptureBonds,
|
||||
nanzhongRecoveryBonds,
|
||||
northernFirstBattleBonds,
|
||||
northernSecondBattleBonds,
|
||||
wulingRecruitBonds,
|
||||
wulingRecruitUnits,
|
||||
xuzhouRecruitBonds,
|
||||
@@ -432,8 +433,8 @@ const campaignTimelineChapters: CampaignTimelineChapter[] = [
|
||||
title: '북벌 준비',
|
||||
period: '출사표를 향해',
|
||||
description: '남중 평정으로 뒤를 안정시킨 뒤, 한중 창고와 출전 무장 편성을 정비해 첫 북벌을 준비하는 장입니다.',
|
||||
battleIds: ['fifty-fifth-battle-northern-qishan-road'],
|
||||
nextHints: ['한중 창고 정비', '출전 무장 재편', '기산 출진로', '장기전 보급']
|
||||
battleIds: ['fifty-fifth-battle-northern-qishan-road', 'fifty-sixth-battle-tianshui-advance'],
|
||||
nextHints: ['한중 창고 정비', '출전 무장 재편', '기산 출진로', '천수·가정 방면']
|
||||
}
|
||||
];
|
||||
|
||||
@@ -492,7 +493,8 @@ const campBattleIds = {
|
||||
fiftySecond: 'fifty-second-battle-meng-huo-fifth-capture',
|
||||
fiftyThird: 'fifty-third-battle-meng-huo-sixth-capture',
|
||||
fiftyFourth: 'fifty-fourth-battle-meng-huo-final-capture',
|
||||
fiftyFifth: 'fifty-fifth-battle-northern-qishan-road'
|
||||
fiftyFifth: 'fifty-fifth-battle-northern-qishan-road',
|
||||
fiftySixth: 'fifty-sixth-battle-tianshui-advance'
|
||||
} as const;
|
||||
|
||||
const defaultRequiredSortieUnitIds = ['liu-bei'];
|
||||
@@ -1166,6 +1168,21 @@ const sortieRulesByBattleId: Partial<Record<BattleScenarioId, SortieRuleDefiniti
|
||||
{ unitId: 'wei-yan', reason: '좁은 길에서 돌파력이 필요할 때 전초 보병과 요새 수비를 흔들 수 있습니다.' }
|
||||
],
|
||||
note: '북벌부터는 유비가 후방에 남고 제갈량이 직접 출진을 지휘합니다. 새로 합류한 무장들 중 기동, 보급, 산길 수비, 민심 수습 역할을 골라 7명을 구성하십시오.'
|
||||
},
|
||||
'fifty-sixth-battle-tianshui-advance': {
|
||||
maxUnits: 7,
|
||||
requiredUnitIds: ['zhuge-liang'],
|
||||
excludedUnitIds: ['liu-bei'],
|
||||
recommended: [
|
||||
{ unitId: 'zhuge-liang', reason: '천수 진군과 강유의 움직임을 직접 판단해야 하는 총지휘관입니다.' },
|
||||
{ unitId: 'wang-ping', reason: '가정으로 이어지는 고개와 물길이 먼 지형을 읽는 핵심 장수입니다.' },
|
||||
{ unitId: 'zhao-yun', reason: '강유와 위군 기병의 빠른 움직임에 대응할 기동 담당입니다.' },
|
||||
{ unitId: 'huang-quan', reason: '천수 길목의 보급선과 물길 확보 목표에서 안정적인 판단을 제공합니다.' },
|
||||
{ unitId: 'ma-liang', reason: '천수 마을과 강유 접촉의 명분을 부드럽게 정리할 문사입니다.' },
|
||||
{ unitId: 'fa-zheng', reason: '위군 방어선의 빈틈과 장수들의 속내를 읽는 책략 담당입니다.' },
|
||||
{ unitId: 'ma-dai', reason: '서량 기병의 감각으로 우회 기병과 물목 차단에 대응하기 좋습니다.' }
|
||||
],
|
||||
note: '천수 진군로는 길을 뚫는 전투이면서 강유의 재능을 처음 확인하는 전장입니다. 제갈량을 중심으로 지형, 기동, 보급, 설득 역할을 7명 안에 담으십시오.'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -5891,6 +5908,87 @@ const campDialogues: CampDialogue[] = [
|
||||
rewardExp: 23
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'northern-second-zhuge-wang-jieting',
|
||||
title: '가정의 진영 위치',
|
||||
availableAfterBattleIds: [campBattleIds.fiftySixth],
|
||||
unitIds: ['zhuge-liang', 'wang-ping'],
|
||||
bondId: 'zhuge-liang__wang-ping_northern-second',
|
||||
rewardExp: 86,
|
||||
lines: [
|
||||
'왕평: 승상, 가정으로 이어지는 고개는 높은 곳만 보고 진영을 잡으면 물길이 멉니다.',
|
||||
'제갈량: 산을 얻고도 군량과 물을 잃으면 승리의 모양만 남고 전선은 무너집니다.',
|
||||
'왕평: 다음 전장에서는 길과 물을 함께 보겠습니다. 고집이 앞서면 제가 먼저 막겠습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'mark-waterline-before-ridge',
|
||||
label: '물길을 먼저 표시한다',
|
||||
response: '왕평은 고개 아래 물길을 지도에 표시했고, 제갈량은 진영 후보지를 그 물길과 함께 다시 검토했습니다.',
|
||||
rewardExp: 30
|
||||
},
|
||||
{
|
||||
id: 'assign-ridge-observers',
|
||||
label: '능선 관측병을 세운다',
|
||||
response: '제갈량은 고개마다 관측병을 두었고, 왕평은 관측병이 물러날 길까지 함께 정했습니다.',
|
||||
rewardExp: 28
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'northern-second-zhao-madai-flank',
|
||||
title: '우회 기병의 신호',
|
||||
availableAfterBattleIds: [campBattleIds.fiftySixth],
|
||||
unitIds: ['zhao-yun', 'ma-dai'],
|
||||
bondId: 'zhao-yun__ma-dai_northern-second',
|
||||
rewardExp: 82,
|
||||
lines: [
|
||||
'마대: 천수의 길은 말이 달릴 수 있는 곳과 달릴 수 없는 곳이 번갈아 나옵니다.',
|
||||
'조운: 그러니 빠른 부대일수록 멈출 곳을 알아야 합니다. 앞서가는 창은 돌아올 길을 잃지 않아야 하오.',
|
||||
'마대: 다음에는 말발굽 소리보다 깃발 신호를 먼저 보겠습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'set-flank-signal-flags',
|
||||
label: '우회 신호 깃발을 맞춘다',
|
||||
response: '조운과 마대는 기병 신호 깃발을 맞추었고, 정찰대는 멀리 돌더라도 본대와 끊어지지 않게 되었습니다.',
|
||||
rewardExp: 27
|
||||
},
|
||||
{
|
||||
id: 'rotate-horse-scouts',
|
||||
label: '기병 정찰을 교대한다',
|
||||
response: '마대는 말의 숨이 찰 때마다 교대할 지점을 정했고, 조운은 그 지점마다 엄호병을 붙였습니다.',
|
||||
rewardExp: 26
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'northern-second-ma-fa-jiangwei',
|
||||
title: '강유라는 이름',
|
||||
availableAfterBattleIds: [campBattleIds.fiftySixth],
|
||||
unitIds: ['ma-liang', 'fa-zheng'],
|
||||
bondId: 'ma-liang__fa-zheng_northern-second',
|
||||
rewardExp: 78,
|
||||
lines: [
|
||||
'마량: 강유는 전장에서 끝까지 물러나지 않았지만, 백성을 해치며 버티지는 않았습니다.',
|
||||
'법정: 그런 장수는 칼로만 꺾기 아깝습니다. 의심과 명분 사이에 들어갈 말이 필요합니다.',
|
||||
'마량: 그렇다면 다음에는 먼저 글을 준비하겠습니다. 항복을 요구하기보다 길을 묻는 글이어야 하겠지요.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'write-jiangwei-letter',
|
||||
label: '강유에게 보낼 글을 쓴다',
|
||||
response: '마량은 부드러운 문장을 고르고, 법정은 그 문장 안에 위군의 의심을 흔들 작은 틈을 남겼습니다.',
|
||||
rewardExp: 25
|
||||
},
|
||||
{
|
||||
id: 'collect-tianshui-rumors',
|
||||
label: '천수 소문을 모은다',
|
||||
response: '법정은 천수 장수들의 평판을 모았고, 마량은 강유가 백성에게 어떤 이름으로 불리는지 따로 적었습니다.',
|
||||
rewardExp: 24
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -8437,6 +8535,66 @@ const campVisits: CampVisitDefinition[] = [
|
||||
itemRewards: ['탁주 5']
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'northern-second-waterline-ledger',
|
||||
title: '천수 물길 장부',
|
||||
location: '천수 하곡 보급막',
|
||||
availableAfterBattleIds: [campBattleIds.fiftySixth],
|
||||
bondId: 'huang-quan__wang-ping_northern-second',
|
||||
description: '황권과 왕평이 천수 방면의 물길, 군량 수레, 가정 고개까지 이어지는 진영 후보지를 하나의 장부로 정리합니다.',
|
||||
lines: [
|
||||
'황권: 길을 얻어도 물을 잃으면 군량은 반나절 만에 짐이 됩니다.',
|
||||
'왕평: 고개 위가 좋아 보여도 아래 물길이 멀면 오래 버틸 수 없습니다.',
|
||||
'보급막에는 물길, 수레 회전 지점, 진영 후보가 함께 표시된 천수 장부가 펼쳐졌습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'mark-tianshui-waterline',
|
||||
label: '물길을 장부에 새긴다',
|
||||
response: '황권은 수레가 멈출 곳을 적었고, 왕평은 그 옆에 진영을 세워서는 안 될 고지를 표시했습니다.',
|
||||
bondExp: 62,
|
||||
itemRewards: ['천수 물길 장부 1']
|
||||
},
|
||||
{
|
||||
id: 'stock-ridge-water',
|
||||
label: '고개 물자를 따로 쌓는다',
|
||||
response: '왕평은 고개 아래 임시 창고를 정했고, 황권은 그곳에 보낼 물자를 본대 보급과 분리했습니다.',
|
||||
bondExp: 60,
|
||||
gold: 2260,
|
||||
itemRewards: ['상처약 14', '콩 22']
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'northern-second-jiangwei-letter',
|
||||
title: '강유에게 남긴 글',
|
||||
location: '천수 마을 서고',
|
||||
availableAfterBattleIds: [campBattleIds.fiftySixth],
|
||||
bondId: 'ma-liang__fa-zheng_northern-second',
|
||||
description: '마량과 법정이 강유의 평판과 천수 사람들의 말을 모아, 다음 전선에서 그를 설득할 실마리를 남깁니다.',
|
||||
lines: [
|
||||
'마량: 강유는 전장에서 졌지만, 병사와 백성에게 남긴 이름은 쉽게 꺾이지 않았습니다.',
|
||||
'법정: 그러니 설득은 항복 권고가 아니라 판단의 틈을 보여 주는 말이어야 합니다.',
|
||||
'서고에는 강유의 이름, 천수 사람들의 증언, 위군 내부의 의심이 조심스럽게 기록되었습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'seal-jiangwei-letter',
|
||||
label: '강유의 이름을 남긴다',
|
||||
response: '마량은 강유에게 보낼 글을 봉했고, 법정은 그 글이 위군 군리의 손에 들어가도 뜻이 흐트러지지 않게 다듬었습니다.',
|
||||
bondExp: 62,
|
||||
itemRewards: ['강유 접촉 서한 1']
|
||||
},
|
||||
{
|
||||
id: 'gather-tianshui-testimony',
|
||||
label: '천수 증언을 모은다',
|
||||
response: '마량은 마을 사람의 말을 적었고, 법정은 그 증언에서 강유가 흔들릴 만한 지점을 따로 표시했습니다.',
|
||||
bondExp: 60,
|
||||
gold: 2140,
|
||||
itemRewards: ['탁주 6']
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -8540,7 +8698,8 @@ export class CampScene extends Phaser.Scene {
|
||||
battleId === campBattleIds.fiftySecond ||
|
||||
battleId === campBattleIds.fiftyThird ||
|
||||
battleId === campBattleIds.fiftyFourth ||
|
||||
battleId === campBattleIds.fiftyFifth
|
||||
battleId === campBattleIds.fiftyFifth ||
|
||||
battleId === campBattleIds.fiftySixth
|
||||
) {
|
||||
this.campaign = ensureCampaignRosterUnits(
|
||||
[
|
||||
@@ -8598,7 +8757,8 @@ export class CampScene extends Phaser.Scene {
|
||||
...mengHuoFifthCaptureBonds,
|
||||
...mengHuoSixthCaptureBonds,
|
||||
...mengHuoFinalCaptureBonds,
|
||||
...northernFirstBattleBonds
|
||||
...northernFirstBattleBonds,
|
||||
...northernSecondBattleBonds
|
||||
]
|
||||
);
|
||||
this.report = this.campaign.firstBattleReport ?? this.report;
|
||||
@@ -9239,6 +9399,9 @@ export class CampScene extends Phaser.Scene {
|
||||
if (this.campaign?.step === 'northern-campaign-prep-camp') {
|
||||
return '북벌 준비 군영';
|
||||
}
|
||||
if (battleId === campBattleIds.fiftySixth) {
|
||||
return '천수 진군로 후 군영';
|
||||
}
|
||||
if (battleId === campBattleIds.fiftyFifth) {
|
||||
return '기산 출진로 후 군영';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user