Add Luofeng Slope ambush chapter
This commit is contained in:
@@ -316,7 +316,8 @@ const campaignTimelineChapters: CampaignTimelineChapter[] = [
|
||||
'twenty-sixth-battle-changsha-veteran',
|
||||
'twenty-seventh-battle-yizhou-relief-road',
|
||||
'twenty-eighth-battle-fu-pass-entry',
|
||||
'twenty-ninth-battle-luo-outer-wall'
|
||||
'twenty-ninth-battle-luo-outer-wall',
|
||||
'thirtieth-battle-luofeng-ambush'
|
||||
],
|
||||
nextHints: ['형주 방위', '익주 진입', '방통·법정 합류']
|
||||
},
|
||||
@@ -359,7 +360,8 @@ const campBattleIds = {
|
||||
twentySixth: 'twenty-sixth-battle-changsha-veteran',
|
||||
twentySeventh: 'twenty-seventh-battle-yizhou-relief-road',
|
||||
twentyEighth: 'twenty-eighth-battle-fu-pass-entry',
|
||||
twentyNinth: 'twenty-ninth-battle-luo-outer-wall'
|
||||
twentyNinth: 'twenty-ninth-battle-luo-outer-wall',
|
||||
thirtieth: 'thirtieth-battle-luofeng-ambush'
|
||||
} as const;
|
||||
|
||||
const requiredSortieUnitIds = new Set(['liu-bei']);
|
||||
@@ -682,6 +684,18 @@ const sortieRulesByBattleId: Partial<Record<BattleScenarioId, SortieRuleDefiniti
|
||||
{ unitId: 'zhao-yun', reason: '넓어진 외곽 맵에서 정찰과 기병 대응을 맡기 좋습니다.' }
|
||||
],
|
||||
note: '낙성 외곽전은 열다섯 명 중 여섯 명만 출전합니다. 법정을 데려가면 설득과 정보가 강해지고, 무장을 더 넣으면 전열이 단단해지는 선택지가 생깁니다.'
|
||||
},
|
||||
'thirtieth-battle-luofeng-ambush': {
|
||||
maxUnits: 6,
|
||||
recommended: [
|
||||
{ unitId: 'liu-bei', reason: '유비가 살아 남아야 익주 백성에게 명분을 이어갈 수 있습니다.' },
|
||||
{ unitId: 'pang-tong', reason: '낙봉파 매복을 읽는 핵심 책사이며 생존 조건의 중심입니다.' },
|
||||
{ unitId: 'wu-yi', reason: '오의는 낙성 안쪽 길과 고지 매복 위치를 알고 있는 새 합류 장수입니다.' },
|
||||
{ unitId: 'fa-zheng', reason: '법정은 익주 장수들의 심리와 장임의 방어 습관을 꿰뚫습니다.' },
|
||||
{ unitId: 'zhao-yun', reason: '좁은 길에서 급히 방통을 보호하거나 궁병을 끊는 기동력이 좋습니다.' },
|
||||
{ unitId: 'huang-zhong', reason: '고지 궁병과 매복 부대를 안정적으로 견제하는 원거리 전력입니다.' }
|
||||
],
|
||||
note: '낙봉파 매복전은 열여섯 명 중 여섯 명만 출전합니다. 오의가 새로 후보에 들어오며, 방통 생존과 매복 대응 때문에 책사와 기동 무장 사이의 선택이 더 중요해집니다.'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -3115,6 +3129,87 @@ const campDialogues: CampDialogue[] = [
|
||||
rewardExp: 10
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'liu-pang-after-luofeng',
|
||||
title: '살아 돌아온 봉추',
|
||||
availableAfterBattleIds: [campBattleIds.thirtieth],
|
||||
unitIds: ['liu-bei', 'pang-tong'],
|
||||
bondId: 'liu-bei__pang-tong',
|
||||
rewardExp: 34,
|
||||
lines: [
|
||||
'유비: 낙봉파의 화살이 그대에게 닿을 뻔했소. 오늘 그대를 잃었다면 익주 길은 물론 내 마음도 크게 꺾였을 것이오.',
|
||||
'방통: 주공께서 길을 의심해 주셨기에 제가 길 위에서 목숨을 붙였습니다. 이제는 빠른 계책보다 오래 버틸 계책을 먼저 보겠습니다.',
|
||||
'유비: 그대의 말이 오늘 군영의 경계가 되었소. 다음 낙성 본성 앞에서도 그 눈을 믿겠소.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'thank-pang-tong-survival-luofeng',
|
||||
label: '방통의 생환을 기뻐한다',
|
||||
response: '유비가 직접 술잔을 낮추자 방통도 장난스러운 미소를 거두고 다음 전장의 방비도를 다시 펼쳤습니다.',
|
||||
rewardExp: 13
|
||||
},
|
||||
{
|
||||
id: 'ask-pang-tong-next-risk-luofeng',
|
||||
label: '다음 위험을 묻는다',
|
||||
response: '방통은 낙성 본성의 성문, 물길, 민심을 한 줄로 엮어 보이며 무리한 돌파를 피해야 한다고 답했습니다.',
|
||||
rewardExp: 12
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'pang-wu-after-luofeng',
|
||||
title: '매복을 읽은 두 사람',
|
||||
availableAfterBattleIds: [campBattleIds.thirtieth],
|
||||
unitIds: ['pang-tong', 'wu-yi'],
|
||||
bondId: 'pang-tong__wu-yi',
|
||||
rewardExp: 32,
|
||||
lines: [
|
||||
'오의: 장임이 숨어들 만한 길을 말씀드렸을 뿐인데, 선생께서는 적의 숨소리까지 짚어 내셨습니다.',
|
||||
'방통: 길을 아는 사람과 마음을 읽는 사람이 같이 보면, 매복도 길 표지처럼 보이는 법이지요.',
|
||||
'오의: 다음 성문 앞에서도 제가 아는 익주의 길을 숨기지 않겠습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'share-luofeng-slope-map',
|
||||
label: '낙봉파 지도를 보완한다',
|
||||
response: '오의가 놓친 샛길을 더하고 방통이 그 길마다 적의 시야를 적어 넣자, 낙성 진입로가 더 분명해졌습니다.',
|
||||
rewardExp: 12
|
||||
},
|
||||
{
|
||||
id: 'honor-wu-yi-guide',
|
||||
label: '오의의 안내를 치하한다',
|
||||
response: '방통이 오의의 공을 군영 앞에서 분명히 말하자, 새로 합류한 장수의 어깨에서 긴장이 조금 풀렸습니다.',
|
||||
rewardExp: 11
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'zhuge-fa-after-luofeng',
|
||||
title: '낙성 본성의 문',
|
||||
availableAfterBattleIds: [campBattleIds.thirtieth],
|
||||
unitIds: ['zhuge-liang', 'fa-zheng'],
|
||||
bondId: 'zhuge-liang__fa-zheng',
|
||||
rewardExp: 32,
|
||||
lines: [
|
||||
'제갈량: 낙봉파의 매복을 깨뜨렸으니 장임은 성문 뒤에서 더 단단히 버틸 것입니다.',
|
||||
'법정: 성문은 군사만으로 열리지 않습니다. 익주의 장수들이 유비공을 두려워하지 않게 만드는 말도 함께 준비해야 합니다.',
|
||||
'제갈량: 그렇다면 다음 싸움은 성벽을 치는 전투이자 마음을 여는 전투가 되겠군요.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'prepare-luo-castle-parley',
|
||||
label: '항복 권고문을 준비한다',
|
||||
response: '두 책사가 문장을 다듬자 낙성 안쪽으로 보낼 글에는 위협보다 약속이 먼저 놓였습니다.',
|
||||
rewardExp: 12
|
||||
},
|
||||
{
|
||||
id: 'mark-main-gate-weakness',
|
||||
label: '성문 약점을 표시한다',
|
||||
response: '법정의 내부 정보와 제갈량의 배치도가 겹쳐지며, 다음 전장의 첫 돌파 지점이 좁혀졌습니다.',
|
||||
rewardExp: 11
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -3984,6 +4079,66 @@ const campVisits: CampVisitDefinition[] = [
|
||||
itemRewards: ['매복 대응 초안 1']
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'luofeng-slope-shrine',
|
||||
title: '낙봉파 길가의 제단',
|
||||
location: '낙봉파 비탈',
|
||||
availableAfterBattleIds: [campBattleIds.thirtieth],
|
||||
bondId: 'liu-bei__pang-tong',
|
||||
description: '유비와 방통이 매복을 넘긴 비탈의 작은 제단에 들러, 살아 남은 병사들과 다음 길의 마음을 다집니다.',
|
||||
lines: [
|
||||
'방통: 이곳에서 한 걸음만 늦었다면 제 이름은 길가의 이야기가 되었을지도 모릅니다.',
|
||||
'유비: 그러니 살아 남은 오늘을 가볍게 쓰지 맙시다. 다음 성문 앞에서도 백성을 먼저 보겠소.',
|
||||
'제단 앞에 놓인 낡은 향이 꺼지고, 병사들은 낙봉파를 넘었다는 사실을 뒤늦게 실감했습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'comfort-luofeng-wounded',
|
||||
label: '부상병을 위문한다',
|
||||
response: '유비가 부상병의 손을 잡자 방통도 다음 행군표에서 무리한 구간을 줄였습니다.',
|
||||
bondExp: 26,
|
||||
itemRewards: ['상처약 3']
|
||||
},
|
||||
{
|
||||
id: 'offer-luofeng-prayer',
|
||||
label: '전몰자를 기린다',
|
||||
response: '군영의 말소리가 낮아지고, 방통은 다음 계책에 병사들이 돌아올 길을 먼저 적었습니다.',
|
||||
bondExp: 24,
|
||||
gold: 340,
|
||||
itemRewards: ['맑은 향 1']
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 'luo-castle-main-council',
|
||||
title: '낙성 본성 공략 회의',
|
||||
location: '낙성 앞 군영',
|
||||
availableAfterBattleIds: [campBattleIds.thirtieth],
|
||||
bondId: 'fa-zheng__wu-yi',
|
||||
description: '법정과 오의가 낙성 본성의 문, 물길, 수비 장수들의 성향을 대조하며 다음 공략의 밑그림을 만듭니다.',
|
||||
lines: [
|
||||
'법정: 장임은 강하지만, 낙성 안의 모든 장수가 같은 마음으로 버티는 것은 아닙니다.',
|
||||
'오의: 제가 아는 이름들을 적겠습니다. 문을 여는 사람과 끝까지 막을 사람을 나누어 보지요.',
|
||||
'두 사람이 성문 지도를 다시 그리자, 다음 전장의 목표가 단순한 격파가 아니라 설득을 포함한 공략으로 바뀌었습니다.'
|
||||
],
|
||||
choices: [
|
||||
{
|
||||
id: 'sort-luo-officer-names',
|
||||
label: '장수 명단을 분류한다',
|
||||
response: '익주 장수들의 이름 옆에 설득, 견제, 격파라는 표시가 붙으며 다음 전장의 말길이 열렸습니다.',
|
||||
bondExp: 26,
|
||||
itemRewards: ['낙성 장수 명단 1']
|
||||
},
|
||||
{
|
||||
id: 'trace-luo-supply-water',
|
||||
label: '보급 수로를 추적한다',
|
||||
response: '오의가 작은 물길을 짚자 법정은 그 길이 성 안의 불안을 흔들 수 있다고 판단했습니다.',
|
||||
bondExp: 24,
|
||||
gold: 360,
|
||||
itemRewards: ['낙성 수로도 1']
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -4069,7 +4224,7 @@ export class CampScene extends Phaser.Scene {
|
||||
return;
|
||||
}
|
||||
|
||||
if (battleId === campBattleIds.twentyNinth) {
|
||||
if (battleId === campBattleIds.thirtieth || battleId === campBattleIds.twentyNinth) {
|
||||
this.campaign = ensureCampaignRosterUnits(
|
||||
[
|
||||
...xuzhouRecruitUnits,
|
||||
@@ -4310,6 +4465,9 @@ export class CampScene extends Phaser.Scene {
|
||||
|
||||
private currentCampTitle() {
|
||||
const battleId = this.currentCampBattleId();
|
||||
if (battleId === campBattleIds.thirtieth) {
|
||||
return '낙봉파 매복전 후 군영';
|
||||
}
|
||||
if (battleId === campBattleIds.twentyNinth) {
|
||||
return '낙성 외곽전 후 군영';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user