Add Han River flood chapter
This commit is contained in:
@@ -20,6 +20,7 @@ import {
|
||||
guiyangRecruitBonds,
|
||||
guiyangRecruitUnits,
|
||||
hanzhongDecisiveBonds,
|
||||
hanRiverFloodBonds,
|
||||
hanzhongOpeningRecruitBonds,
|
||||
hanzhongOpeningRecruitUnits,
|
||||
hanzhongMainRecruitBonds,
|
||||
@@ -353,7 +354,8 @@ const campaignTimelineChapters: CampaignTimelineChapter[] = [
|
||||
'thirty-sixth-battle-dingjun-vanguard',
|
||||
'thirty-seventh-battle-hanzhong-decisive',
|
||||
'thirty-eighth-battle-jing-defense',
|
||||
'thirty-ninth-battle-fan-castle-vanguard'
|
||||
'thirty-ninth-battle-fan-castle-vanguard',
|
||||
'fortieth-battle-han-river-flood'
|
||||
],
|
||||
nextHints: ['왕업 선언', '오호대장군', '북벌 준비']
|
||||
}
|
||||
@@ -398,7 +400,8 @@ const campBattleIds = {
|
||||
thirtySixth: 'thirty-sixth-battle-dingjun-vanguard',
|
||||
thirtySeventh: 'thirty-seventh-battle-hanzhong-decisive',
|
||||
thirtyEighth: 'thirty-eighth-battle-jing-defense',
|
||||
thirtyNinth: 'thirty-ninth-battle-fan-castle-vanguard'
|
||||
thirtyNinth: 'thirty-ninth-battle-fan-castle-vanguard',
|
||||
fortieth: 'fortieth-battle-han-river-flood'
|
||||
} as const;
|
||||
|
||||
const defaultRequiredSortieUnitIds = ['liu-bei'];
|
||||
@@ -847,6 +850,20 @@ const sortieRulesByBattleId: Partial<Record<BattleScenarioId, SortieRuleDefiniti
|
||||
{ unitId: 'ma-liang', reason: '형주 민심과 보급선을 안정시키며 관우 전선을 보조합니다.' }
|
||||
],
|
||||
note: '번성 외곽 압박전은 스물두 명 중 일곱 명만 출전합니다. 유비와 관우는 필수 출전하며, 나머지 다섯 자리에 기동, 원거리, 책략, 보급을 어떻게 배치할지 고르는 전투입니다.'
|
||||
},
|
||||
'fortieth-battle-han-river-flood': {
|
||||
maxUnits: 7,
|
||||
requiredUnitIds: ['liu-bei', 'guan-yu'],
|
||||
recommended: [
|
||||
{ unitId: 'liu-bei', reason: '칠군을 흔드는 대의명분과 패배 조건의 중심입니다.' },
|
||||
{ unitId: 'guan-yu', reason: '한수 수공의 전선 지휘관이며 생존 목표입니다.' },
|
||||
{ unitId: 'fa-zheng', reason: '수위와 둑길을 읽어 수공의 타이밍을 잡는 핵심 참모입니다.' },
|
||||
{ unitId: 'ma-liang', reason: '형주 현지의 제방과 민심을 함께 살피는 보조 책사입니다.' },
|
||||
{ unitId: 'huang-quan', reason: '물길과 퇴로를 신중하게 판정해 포위 안정성을 높입니다.' },
|
||||
{ unitId: 'zhao-yun', reason: '제방과 나루 사이를 빠르게 보강하는 기동 축입니다.' },
|
||||
{ unitId: 'ma-chao', reason: '방덕 기병의 돌파를 맞받아치는 기병 대응 카드입니다.' }
|
||||
],
|
||||
note: '한수 수공은 스물두 명 중 일곱 명만 출전합니다. 유비와 관우는 필수이며, 나머지 다섯 자리에 물길 참모, 기동대, 원거리 압박을 어떻게 섞을지 고르는 전투입니다.'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -4090,6 +4107,87 @@ const campDialogues: CampDialogue[] = [
|
||||
rewardExp: 13
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'guan-huangquan-after-han-river',
|
||||
title: '물길의 뒷정리',
|
||||
availableAfterBattleIds: [campBattleIds.fortieth],
|
||||
unitIds: ['guan-yu', 'huang-quan'],
|
||||
bondId: 'guan-yu__huang-quan',
|
||||
rewardExp: 42,
|
||||
lines: [
|
||||
'황권: 물이 이긴 뒤가 더 어렵습니다. 젖은 병사와 흔들린 백성을 함께 다독여야 합니다.',
|
||||
'관우: 적을 무너뜨린 물길이 백성의 삶까지 무너뜨려서는 안 되오. 그대의 신중함이 필요하오.',
|
||||
'황권: 둑의 약한 곳과 마을의 낮은 길을 먼저 적겠습니다. 다음 포위전은 뒤가 단단해야 오래 갑니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'inspect-flooded-villages',
|
||||
label: '잠긴 마을을 살핀다',
|
||||
response: '황권은 낮은 마을의 길을 정리했고, 관우군은 백성을 해치지 않는 수공 군령을 다시 세웠습니다.',
|
||||
rewardExp: 16
|
||||
},
|
||||
{
|
||||
id: 'write-bank-repair-orders',
|
||||
label: '제방 보수 군령을 쓴다',
|
||||
response: '관우와 황권이 제방 보수 순서를 정리하며 번성 포위 뒤의 민심 관리가 조금 더 단단해졌습니다.',
|
||||
rewardExp: 15
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'guan-li-after-han-river',
|
||||
title: '젖은 보급선',
|
||||
availableAfterBattleIds: [campBattleIds.fortieth],
|
||||
unitIds: ['guan-yu', 'li-yan'],
|
||||
bondId: 'guan-yu__li-yan',
|
||||
rewardExp: 40,
|
||||
lines: [
|
||||
'이엄: 수공은 이겼지만 곡식도 젖었습니다. 병사들이 물을 이기려면 창고가 먼저 말라야 합니다.',
|
||||
'관우: 앞에서 칼이 이겨도 뒤의 곡식이 상하면 오래 버티지 못하오. 창고를 맡아 주시오.',
|
||||
'이엄: 젖은 포대를 버릴 것과 살릴 것을 나누겠습니다. 다음 포위전에서 병사들의 밥이 끊기지 않게 하겠습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'dry-flooded-grain',
|
||||
label: '젖은 곡식을 말린다',
|
||||
response: '이엄이 곡식을 나누어 말리게 하자 병사들의 보급 불안이 줄었습니다.',
|
||||
rewardExp: 15
|
||||
},
|
||||
{
|
||||
id: 'split-siege-rations',
|
||||
label: '포위전 군량을 나눈다',
|
||||
response: '관우군의 군량이 여러 창고에 나뉘어 다음 장기전 준비가 더 안정되었습니다.',
|
||||
rewardExp: 14
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'guan-fa-after-han-river',
|
||||
title: '수공의 대가',
|
||||
availableAfterBattleIds: [campBattleIds.fortieth],
|
||||
unitIds: ['guan-yu', 'fa-zheng'],
|
||||
bondId: 'guan-yu__fa-zheng',
|
||||
rewardExp: 38,
|
||||
lines: [
|
||||
'법정: 우금의 본대는 무너졌지만, 물이 만든 승리는 오래 설명해야 합니다. 두려움도 함께 남기 때문입니다.',
|
||||
'관우: 군령이 칼보다 무거운 날이었소. 다음에는 성문 앞에서 그 무게를 다시 견뎌야 하오.',
|
||||
'법정: 방덕과 조인의 반응을 보면 아직 끝난 싸움은 아닙니다. 승리 뒤의 긴장을 놓치지 않겠습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'explain-water-orders',
|
||||
label: '수공 군령을 설명한다',
|
||||
response: '법정은 병사들에게 물길을 쓴 이유와 다음 포위전의 순서를 설명했고, 관우군의 동요가 줄었습니다.',
|
||||
rewardExp: 14
|
||||
},
|
||||
{
|
||||
id: 'prepare-siege-after-flood',
|
||||
label: '포위전 순서를 정한다',
|
||||
response: '관우와 법정은 수공 뒤의 진격 순서를 다시 짰고, 번성 성문을 향한 압박이 더 선명해졌습니다.',
|
||||
rewardExp: 13
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -5559,6 +5657,66 @@ const campVisits: CampVisitDefinition[] = [
|
||||
itemRewards: ['콩 12']
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'han-river-dike-repair',
|
||||
title: '한수 제방 보수',
|
||||
location: '한수 남쪽 둑',
|
||||
availableAfterBattleIds: [campBattleIds.fortieth],
|
||||
bondId: 'guan-yu__huang-quan',
|
||||
description: '관우와 황권이 수공 뒤 약해진 제방을 살피며, 민심과 다음 포위전의 길을 동시에 다집니다.',
|
||||
lines: [
|
||||
'황권: 승리한 물길도 그대로 두면 아군의 뒤를 칩니다. 둑의 약한 곳을 먼저 막아야 합니다.',
|
||||
'관우: 백성의 밭이 물에 잠기면 승리의 깃발도 가벼워지오. 제방을 보수하시오.',
|
||||
'병사들은 젖은 흙을 걷어 내고 새 말뚝을 박으며, 다음 전장의 퇴로와 보급로를 다시 표시했습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'repair-weak-bank',
|
||||
label: '약한 둑을 먼저 막는다',
|
||||
response: '제방의 약한 곳이 보수되어 강변 마을과 보급로가 조금 더 안정되었습니다.',
|
||||
bondExp: 34,
|
||||
itemRewards: ['제방 보수도 1']
|
||||
},
|
||||
{
|
||||
id: 'mark-dry-routes',
|
||||
label: '마른길을 표시한다',
|
||||
response: '황권은 물이 빠지는 길을 표시했고, 관우군은 다음 포위전의 이동 순서를 다시 익혔습니다.',
|
||||
bondExp: 32,
|
||||
gold: 760,
|
||||
itemRewards: ['상처약 5']
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'han-river-prisoners',
|
||||
title: '칠군 포로 정리',
|
||||
location: '한수 임시 포로진',
|
||||
availableAfterBattleIds: [campBattleIds.fortieth],
|
||||
bondId: 'guan-yu__li-yan',
|
||||
description: '관우와 이엄이 물에 젖은 포로와 노획 물자를 정리하며, 번성 포위 전의 후방 부담을 줄입니다.',
|
||||
lines: [
|
||||
'이엄: 포로를 굶기면 후방이 흔들리고, 너무 풀어 주면 적의 귀가 됩니다. 순서가 필요합니다.',
|
||||
'관우: 항복한 병사를 함부로 대하면 의로움이 상하오. 다만 군령은 엄정해야 하오.',
|
||||
'포로진에는 이름표와 식량 표식이 붙었고, 노획 물자는 공성 준비에 쓸 것과 백성에게 돌릴 것으로 나뉘었습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'separate-prisoner-units',
|
||||
label: '포로 부대를 나눈다',
|
||||
response: '포로들이 소대별로 정리되어 후방 혼란이 줄고, 이엄의 보급 관리가 더 쉬워졌습니다.',
|
||||
bondExp: 32,
|
||||
itemRewards: ['칠군 항복문 1', '콩 10']
|
||||
},
|
||||
{
|
||||
id: 'return-flooded-tools',
|
||||
label: '노획 농기구를 돌려준다',
|
||||
response: '젖은 농기구가 강변 백성에게 돌아가자 수공 뒤의 민심이 조금 누그러졌습니다.',
|
||||
bondExp: 30,
|
||||
gold: 860,
|
||||
itemRewards: ['탁주 3']
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -5645,6 +5803,55 @@ export class CampScene extends Phaser.Scene {
|
||||
return;
|
||||
}
|
||||
|
||||
if (battleId === campBattleIds.fortieth) {
|
||||
this.campaign = ensureCampaignRosterUnits(
|
||||
[
|
||||
...xuzhouRecruitUnits,
|
||||
...caoBreakRecruitUnits,
|
||||
...liuBiaoRecruitUnits,
|
||||
...zhugeRecruitUnits,
|
||||
...jingzhouRecruitUnits,
|
||||
...guiyangRecruitUnits,
|
||||
...wulingRecruitUnits,
|
||||
...changshaRecruitUnits,
|
||||
...yizhouRecruitUnits,
|
||||
...fuPassRecruitUnits,
|
||||
...luoCastleRecruitUnits,
|
||||
...luoCastleProperRecruitUnits,
|
||||
...chengduPressureRecruitUnits,
|
||||
...chengduSurrenderRecruitUnits,
|
||||
...hanzhongOpeningRecruitUnits,
|
||||
...hanzhongScoutRecruitUnits,
|
||||
...hanzhongMainRecruitUnits
|
||||
],
|
||||
[
|
||||
...xuzhouRecruitBonds,
|
||||
...caoBreakRecruitBonds,
|
||||
...liuBiaoRecruitBonds,
|
||||
...zhugeRecruitBonds,
|
||||
...jingzhouRecruitBonds,
|
||||
...guiyangRecruitBonds,
|
||||
...wulingRecruitBonds,
|
||||
...changshaRecruitBonds,
|
||||
...yizhouRecruitBonds,
|
||||
...fuPassRecruitBonds,
|
||||
...luoCastleRecruitBonds,
|
||||
...luoCastleProperRecruitBonds,
|
||||
...chengduPressureRecruitBonds,
|
||||
...chengduSurrenderRecruitBonds,
|
||||
...hanzhongOpeningRecruitBonds,
|
||||
...hanzhongScoutRecruitBonds,
|
||||
...hanzhongMainRecruitBonds,
|
||||
...hanzhongDecisiveBonds,
|
||||
...jingDefenseBonds,
|
||||
...fanCastleBonds,
|
||||
...hanRiverFloodBonds
|
||||
]
|
||||
);
|
||||
this.report = this.campaign.firstBattleReport ?? this.report;
|
||||
return;
|
||||
}
|
||||
|
||||
if (battleId === campBattleIds.thirtyNinth) {
|
||||
this.campaign = ensureCampaignRosterUnits(
|
||||
[
|
||||
@@ -6273,6 +6480,9 @@ export class CampScene extends Phaser.Scene {
|
||||
if (this.campaign?.step === 'hanzhong-king-camp') {
|
||||
return '한중왕 즉위 준비 군영';
|
||||
}
|
||||
if (battleId === campBattleIds.fortieth) {
|
||||
return '한수 수공 후 군영';
|
||||
}
|
||||
if (battleId === campBattleIds.thirtyNinth) {
|
||||
return '번성 외곽 압박전 후 군영';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user