Add Jiangdong envoy sortie chapter
This commit is contained in:
@@ -281,7 +281,7 @@ const campaignTimelineChapters: CampaignTimelineChapter[] = [
|
||||
title: '적벽대전',
|
||||
period: '강동의 바람',
|
||||
description: '제갈량의 계책과 강동의 힘이 맞물려 조조의 대군을 막아서는 큰 전환 장입니다.',
|
||||
battleIds: ['eighteenth-battle-bowang-ambush', 'nineteenth-battle-changban-refuge'],
|
||||
battleIds: ['eighteenth-battle-bowang-ambush', 'nineteenth-battle-changban-refuge', 'twentieth-battle-jiangdong-envoy'],
|
||||
nextHints: ['강동 사절', '화공 준비', '조조 남하']
|
||||
},
|
||||
{
|
||||
@@ -321,7 +321,8 @@ const campBattleIds = {
|
||||
sixteenth: 'sixteenth-battle-liu-biao-refuge',
|
||||
seventeenth: 'seventeenth-battle-wolong-visit-road',
|
||||
eighteenth: 'eighteenth-battle-bowang-ambush',
|
||||
nineteenth: 'nineteenth-battle-changban-refuge'
|
||||
nineteenth: 'nineteenth-battle-changban-refuge',
|
||||
twentieth: 'twentieth-battle-jiangdong-envoy'
|
||||
} as const;
|
||||
|
||||
const requiredSortieUnitIds = new Set(['liu-bei']);
|
||||
@@ -524,6 +525,18 @@ const sortieRulesByBattleId: Partial<Record<BattleScenarioId, SortieRuleDefiniti
|
||||
{ unitId: 'sun-qian', reason: '강동에 보낼 기록과 외교 명분을 정리합니다.' }
|
||||
],
|
||||
note: '장판파는 출전 제한보다 역할이 많은 전장입니다. 조운과 장비를 중심으로 기동, 전열, 책략, 보급 중 무엇을 우선할지 직접 선택하십시오.'
|
||||
},
|
||||
'twentieth-battle-jiangdong-envoy': {
|
||||
maxUnits: 6,
|
||||
recommended: [
|
||||
{ unitId: 'liu-bei', reason: '사절을 보내는 결단과 패배 조건의 중심입니다.' },
|
||||
{ unitId: 'zhuge-liang', reason: '강동 설득의 핵심 인물이며 반드시 보호해야 할 사절입니다.' },
|
||||
{ unitId: 'sun-qian', reason: '문서와 외교 명분을 지니고 있어 이번 전투의 생존 목표입니다.' },
|
||||
{ unitId: 'zhao-yun', reason: '추격 기병을 끊고 사절의 측면을 지키는 데 좋습니다.' },
|
||||
{ unitId: 'guan-yu', reason: '강나루 보병과 포구 수비대를 받아낼 전열 핵심입니다.' },
|
||||
{ unitId: 'mi-zhu', reason: '사절 보급과 장기전 회복 운용에 유리합니다.' }
|
||||
],
|
||||
note: '강동 사절로는 전투력만으로 고르기 어렵습니다. 제갈량과 손건을 보호하면서 전열, 기동, 보급 중 무엇을 남길지 선택하십시오.'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2120,6 +2133,87 @@ const campDialogues: CampDialogue[] = [
|
||||
rewardExp: 10
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'sun-zhuge-after-jiangdong-envoy',
|
||||
title: '강동으로 보낼 논리',
|
||||
availableAfterBattleIds: [campBattleIds.twentieth],
|
||||
unitIds: ['sun-qian', 'zhuge-liang'],
|
||||
bondId: 'sun-qian__zhuge-liang',
|
||||
rewardExp: 28,
|
||||
lines: [
|
||||
'손건: 문서는 갖추었습니다. 하지만 강동은 글보다 사람의 눈빛을 먼저 볼 것입니다.',
|
||||
'제갈량: 그러니 말의 순서가 중요합니다. 조조의 위협, 주공의 뜻, 강동이 얻을 계산을 차례로 놓아야 합니다.',
|
||||
'손건: 그 순서라면 두려움과 이익, 명분이 한 문장 안에서 다투지 않겠습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'sharpen-envoy-argument',
|
||||
label: '설득의 순서를 다듬는다',
|
||||
response: '손건은 제갈량의 큰 논리를 짧은 문장으로 정리했고, 강동 회담의 첫 마디가 또렷해졌다.',
|
||||
rewardExp: 11
|
||||
},
|
||||
{
|
||||
id: 'prepare-sun-quan-questions',
|
||||
label: '손권의 질문을 예상한다',
|
||||
response: '두 사람은 손권이 물을 병력, 보급, 퇴로 문제를 하나씩 적었고, 사절 문서는 훨씬 실전적인 답안을 품게 되었다.',
|
||||
rewardExp: 10
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'liu-zhuge-after-jiangdong-envoy',
|
||||
title: '적벽을 보는 눈',
|
||||
availableAfterBattleIds: [campBattleIds.twentieth],
|
||||
unitIds: ['liu-bei', 'zhuge-liang'],
|
||||
bondId: 'liu-bei__zhuge-liang',
|
||||
rewardExp: 30,
|
||||
lines: [
|
||||
'유비: 강동으로 가는 길은 열렸지만, 손권의 마음까지 열린 것은 아니오.',
|
||||
'제갈량: 그래서 주공의 뜻이 필요합니다. 우리는 땅을 빼앗으러 가는 것이 아니라 조조를 막을 길을 함께 찾으러 갑니다.',
|
||||
'유비: 그 말을 들으니 적벽의 불길도 결국 사람을 지키기 위한 불길이어야 하겠구려.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'entrust-red-cliffs-parley',
|
||||
label: '강동 회담을 맡긴다',
|
||||
response: '유비는 제갈량에게 강동 회담의 전권을 맡겼고, 군영의 장수들도 다음 명령의 방향을 이해하기 시작했다.',
|
||||
rewardExp: 12
|
||||
},
|
||||
{
|
||||
id: 'anchor-strategy-in-people',
|
||||
label: '백성의 뜻을 기준으로 삼는다',
|
||||
response: '제갈량은 유비의 말을 회담의 중심 문장으로 남겼다. 전략은 숫자만이 아니라 지켜야 할 사람에서 출발했다.',
|
||||
rewardExp: 10
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'zhao-zhuge-after-jiangdong-envoy',
|
||||
title: '사절을 지킨 창',
|
||||
availableAfterBattleIds: [campBattleIds.twentieth],
|
||||
unitIds: ['zhao-yun', 'zhuge-liang'],
|
||||
bondId: 'zhao-yun__zhuge-liang',
|
||||
rewardExp: 22,
|
||||
lines: [
|
||||
'조운: 사절을 지키는 길은 적장을 베는 길보다 더 조심스러웠습니다.',
|
||||
'제갈량: 자룡 장군의 창이 길을 흔들림 없이 붙들었기에 문서도 사람도 강나루에 닿았습니다.',
|
||||
'조운: 다음에도 지켜야 할 사람이 있다면 제 창은 그쪽으로 먼저 향하겠습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'guard-envoy-flank',
|
||||
label: '사절 측면 호위를 맡긴다',
|
||||
response: '조운은 사절단이 움직일 때 어느 길을 먼저 살필지 정했고, 제갈량은 그 기동력을 믿고 더 과감한 동선을 그렸다.',
|
||||
rewardExp: 9
|
||||
},
|
||||
{
|
||||
id: 'map-river-crossing',
|
||||
label: '강나루 길을 표시한다',
|
||||
response: '조운이 본 강변의 샛길이 지도에 더해지자, 다음 장강 전장으로 향할 발판이 생겼다.',
|
||||
rewardExp: 8
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -2389,6 +2483,66 @@ const campVisits: CampVisitDefinition[] = [
|
||||
itemRewards: ['상처약 1', '탁주 1']
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'jiangdong-parley-records',
|
||||
title: '강동 회담 문서 정리',
|
||||
location: '강나루 막사',
|
||||
availableAfterBattleIds: [campBattleIds.twentieth],
|
||||
bondId: 'sun-qian__zhuge-liang',
|
||||
description: '손권과 주유를 설득하기 위해 조조군 남하 정보와 유비군의 피난 기록을 회담 문서로 정리합니다.',
|
||||
lines: [
|
||||
'손건: 강동은 싸울 명분만이 아니라 승산을 볼 것입니다. 숫자와 길, 사람의 마음을 모두 적어야 합니다.',
|
||||
'제갈량: 문서는 짧아야 하지만 빈틈은 없어야 합니다. 손권이 물을 질문을 먼저 문서 안에 넣겠습니다.',
|
||||
'강나루 막사의 등불 아래, 장판파의 먼지와 강동의 바람이 같은 종이에 적힙니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'compile-cao-army-scale',
|
||||
label: '조조군 규모를 정리한다',
|
||||
response: '손건은 추격대의 규모와 조조군의 남하 속도를 정리했고, 강동 회담의 위기감이 분명해졌다.',
|
||||
bondExp: 20,
|
||||
itemRewards: ['강동 사절 문서 1']
|
||||
},
|
||||
{
|
||||
id: 'write-liu-bei-cause',
|
||||
label: '유비의 명분을 적는다',
|
||||
response: '제갈량은 유비가 피난민을 버리지 않았다는 기록을 회담의 첫 문장에 두었다.',
|
||||
bondExp: 18,
|
||||
gold: 160,
|
||||
itemRewards: ['민심 기록 1']
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'river-port-firecraft',
|
||||
title: '강나루 화공 논의',
|
||||
location: '강나루 선착장',
|
||||
availableAfterBattleIds: [campBattleIds.twentieth],
|
||||
bondId: 'liu-bei__zhuge-liang',
|
||||
description: '장강 전장을 대비해 배, 바람, 불길의 가능성을 조심스럽게 검토합니다.',
|
||||
lines: [
|
||||
'제갈량: 큰 군세는 넓은 땅에서 강하지만, 강 위에서는 바람과 배가 전장의 절반을 차지합니다.',
|
||||
'유비: 불을 쓰더라도 백성이 피할 길은 먼저 열어야 하오. 이 싸움 역시 사람을 살리기 위한 길이어야 하오.',
|
||||
'선착장에는 작은 배와 젖은 밧줄이 놓여 있고, 병사들은 처음으로 강 위의 전장을 상상합니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'inspect-boats-and-wind',
|
||||
label: '배와 바람을 살핀다',
|
||||
response: '제갈량은 바람의 방향과 배의 간격을 기록했고, 훗날 화공을 논할 작은 단서가 마련되었다.',
|
||||
bondExp: 22,
|
||||
itemRewards: ['화공 논의 1']
|
||||
},
|
||||
{
|
||||
id: 'secure-river-medicine',
|
||||
label: '강가 보급을 챙긴다',
|
||||
response: '유비는 강가 병사들의 상처와 추위를 살폈고, 미축은 젖지 않는 약품 꾸러미를 따로 묶었다.',
|
||||
bondExp: 16,
|
||||
gold: 140,
|
||||
itemRewards: ['상처약 2']
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -2474,7 +2628,12 @@ export class CampScene extends Phaser.Scene {
|
||||
return;
|
||||
}
|
||||
|
||||
if (battleId === campBattleIds.seventeenth || battleId === campBattleIds.eighteenth || battleId === campBattleIds.nineteenth) {
|
||||
if (
|
||||
battleId === campBattleIds.seventeenth ||
|
||||
battleId === campBattleIds.eighteenth ||
|
||||
battleId === campBattleIds.nineteenth ||
|
||||
battleId === campBattleIds.twentieth
|
||||
) {
|
||||
this.campaign = ensureCampaignRosterUnits(
|
||||
[...xuzhouRecruitUnits, ...caoBreakRecruitUnits, ...liuBiaoRecruitUnits, ...zhugeRecruitUnits],
|
||||
[...xuzhouRecruitBonds, ...caoBreakRecruitBonds, ...liuBiaoRecruitBonds, ...zhugeRecruitBonds]
|
||||
@@ -2531,6 +2690,9 @@ export class CampScene extends Phaser.Scene {
|
||||
|
||||
private currentCampTitle() {
|
||||
const battleId = this.currentCampBattleId();
|
||||
if (battleId === campBattleIds.twentieth) {
|
||||
return '강동 사절 준비 군영';
|
||||
}
|
||||
if (battleId === campBattleIds.nineteenth) {
|
||||
return '장판파 돌파 후 군영';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user