Add Fan Castle siege chapter

This commit is contained in:
2026-06-23 16:42:33 +09:00
parent 628e73ba58
commit 6a55313492
11 changed files with 902 additions and 50 deletions

View File

@@ -24,6 +24,10 @@ import {
fortiethBattleMap,
fortiethBattleUnits,
fortiethBattleVictoryPages,
fortyFirstBattleBonds,
fortyFirstBattleMap,
fortyFirstBattleUnits,
fortyFirstBattleVictoryPages,
firstBattleMap,
firstBattleUnits,
firstBattleVictoryPages,
@@ -205,7 +209,8 @@ export type BattleScenarioId =
| 'thirty-seventh-battle-hanzhong-decisive'
| 'thirty-eighth-battle-jing-defense'
| 'thirty-ninth-battle-fan-castle-vanguard'
| 'fortieth-battle-han-river-flood';
| 'fortieth-battle-han-river-flood'
| 'forty-first-battle-fan-castle-siege';
export type BattleObjectiveKind = 'defeat-leader' | 'keep-unit-alive' | 'secure-terrain' | 'quick-victory';
@@ -2585,6 +2590,69 @@ export const fortiethBattleScenario: BattleScenarioDefinition = {
nextCampScene: 'CampScene'
};
export const fortyFirstBattleScenario: BattleScenarioDefinition = {
id: 'forty-first-battle-fan-castle-siege',
title: '번성 공성전',
victoryConditionLabel: '조인 성문 방어선 격파',
defeatConditionLabel: '유비 또는 관우 퇴각',
openingObjectiveLines: [
'한수 수공으로 칠군은 무너졌지만 번성 성문은 아직 버티고 있습니다. 외성 보루와 수문을 끊어 조인의 방어선을 흔드십시오.',
'관우는 성문 압박의 핵심입니다. 관우가 무너지면 번성 포위의 명분과 형주 전선의 사기가 함께 꺾입니다.',
'방덕의 결사 기병은 정면 돌파를 노리고, 강동 정찰대는 뒤의 나루를 살핍니다. 성벽 압박과 후방 경계를 함께 맡을 무장을 고르십시오.'
],
map: fortyFirstBattleMap,
units: fortyFirstBattleUnits,
bonds: fortyFirstBattleBonds,
mapTextureKey: 'battle-map-forty-first',
leaderUnitId: 'fan-siege-leader-cao-ren',
quickVictoryTurnLimit: 66,
baseVictoryGold: 8240,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '조인 성문 방어선 격파',
rewardGold: 5320,
unitId: 'fan-siege-leader-cao-ren'
},
{
id: 'liu-bei',
kind: 'keep-unit-alive',
label: '유비 생존',
rewardGold: 1280,
unitId: 'liu-bei'
},
{
id: 'guan-yu',
kind: 'keep-unit-alive',
label: '관우 생존',
rewardGold: 2020,
unitId: 'guan-yu'
},
{
id: 'outer-wall',
kind: 'secure-terrain',
label: '번성 외성 보루 확보',
rewardGold: 2560,
terrain: 'fort'
},
{
id: 'quick',
kind: 'quick-victory',
label: '66턴 이내 승리',
rewardGold: 1880,
maxTurn: 66
}
],
defeatConditions: [
{ kind: 'unit-defeated', unitId: 'liu-bei' },
{ kind: 'unit-defeated', unitId: 'guan-yu' }
],
itemRewards: ['콩 38', '상처약 28', '탁주 12', '번성 성문도 1', '방덕 결사문 1'],
victoryPages: fortyFirstBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const defaultBattleScenarioId: BattleScenarioId = firstBattleScenario.id;
export const battleScenarios: Record<BattleScenarioId, BattleScenarioDefinition> = {
@@ -2627,7 +2695,8 @@ export const battleScenarios: Record<BattleScenarioId, BattleScenarioDefinition>
'thirty-seventh-battle-hanzhong-decisive': thirtySeventhBattleScenario,
'thirty-eighth-battle-jing-defense': thirtyEighthBattleScenario,
'thirty-ninth-battle-fan-castle-vanguard': thirtyNinthBattleScenario,
'fortieth-battle-han-river-flood': fortiethBattleScenario
'fortieth-battle-han-river-flood': fortiethBattleScenario,
'forty-first-battle-fan-castle-siege': fortyFirstBattleScenario
};
export const defaultBattleScenario = battleScenarios[defaultBattleScenarioId];