Add Jiangdong envoy sortie chapter

This commit is contained in:
2026-06-23 06:45:10 +09:00
parent 697ce8837d
commit 0af7c9cfe8
11 changed files with 1057 additions and 24 deletions

View File

@@ -39,6 +39,10 @@ import {
thirteenthBattleMap,
thirteenthBattleUnits,
thirteenthBattleVictoryPages,
twentiethBattleBonds,
twentiethBattleMap,
twentiethBattleUnits,
twentiethBattleVictoryPages,
twelfthBattleBonds,
twelfthBattleMap,
twelfthBattleUnits,
@@ -100,7 +104,8 @@ export type BattleScenarioId =
| 'sixteenth-battle-liu-biao-refuge'
| 'seventeenth-battle-wolong-visit-road'
| 'eighteenth-battle-bowang-ambush'
| 'nineteenth-battle-changban-refuge';
| 'nineteenth-battle-changban-refuge'
| 'twentieth-battle-jiangdong-envoy';
export type BattleObjectiveKind = 'defeat-leader' | 'keep-unit-alive' | 'secure-terrain' | 'quick-victory';
@@ -1156,6 +1161,70 @@ export const nineteenthBattleScenario: BattleScenarioDefinition = {
nextCampScene: 'CampScene'
};
export const twentiethBattleScenario: BattleScenarioDefinition = {
id: 'twentieth-battle-jiangdong-envoy',
title: '강동 사절로',
victoryConditionLabel: '문빙 퇴각',
defeatConditionLabel: '유비, 제갈량 또는 손건 퇴각',
openingObjectiveLines: [
'장판파를 벗어난 유비군은 강동과 손잡을 사절을 보내야 합니다. 문빙의 추격대가 강나루를 닫기 전에 길을 열어야 합니다.',
'이번 전투는 제갈량과 손건을 지키는 것이 핵심입니다. 전열이 다리목을 붙들고, 기동 장수가 추격 기병을 끊어야 사절 문서가 강동으로 향할 수 있습니다.',
'문빙을 퇴각시키고 강나루를 확보하십시오. 제갈량과 손건이 살아남으면 적벽대전으로 향할 외교 명분이 완성됩니다.'
],
map: twentiethBattleMap,
units: twentiethBattleUnits,
bonds: twentiethBattleBonds,
mapTextureKey: 'battle-map-twentieth',
leaderUnitId: 'envoy-road-leader-wen-pin',
quickVictoryTurnLimit: 29,
baseVictoryGold: 2380,
objectives: [
{
id: 'leader',
kind: 'defeat-leader',
label: '문빙 퇴각',
rewardGold: 1540,
unitId: 'envoy-road-leader-wen-pin'
},
{
id: 'zhuge-liang',
kind: 'keep-unit-alive',
label: '제갈량 생존',
rewardGold: 760,
unitId: 'zhuge-liang'
},
{
id: 'sun-qian',
kind: 'keep-unit-alive',
label: '손건 생존',
rewardGold: 620,
unitId: 'sun-qian'
},
{
id: 'river-port',
kind: 'secure-terrain',
label: '강나루 확보',
rewardGold: 860,
terrain: 'fort'
},
{
id: 'quick',
kind: 'quick-victory',
label: '29턴 이내 승리',
rewardGold: 640,
maxTurn: 29
}
],
defeatConditions: [
{ kind: 'unit-defeated', unitId: 'liu-bei' },
{ kind: 'unit-defeated', unitId: 'zhuge-liang' },
{ kind: 'unit-defeated', unitId: 'sun-qian' }
],
itemRewards: ['콩 8', '상처약 5', '탁주 3', '강동 사절 문서 +1', '화공 논의 +1'],
victoryPages: twentiethBattleVictoryPages,
nextCampScene: 'CampScene'
};
export const defaultBattleScenarioId: BattleScenarioId = firstBattleScenario.id;
export const battleScenarios: Record<BattleScenarioId, BattleScenarioDefinition> = {
@@ -1177,7 +1246,8 @@ export const battleScenarios: Record<BattleScenarioId, BattleScenarioDefinition>
'sixteenth-battle-liu-biao-refuge': sixteenthBattleScenario,
'seventeenth-battle-wolong-visit-road': seventeenthBattleScenario,
'eighteenth-battle-bowang-ambush': eighteenthBattleScenario,
'nineteenth-battle-changban-refuge': nineteenthBattleScenario
'nineteenth-battle-changban-refuge': nineteenthBattleScenario,
'twentieth-battle-jiangdong-envoy': twentiethBattleScenario
};
export const defaultBattleScenario = battleScenarios[defaultBattleScenarioId];

View File

@@ -17,6 +17,7 @@ import {
seventeenthBattleScenario,
tenthBattleScenario,
thirteenthBattleScenario,
twentiethBattleScenario,
twelfthBattleScenario,
thirdBattleScenario,
type BattleScenarioId
@@ -55,6 +56,8 @@ import {
tenthBattleVictoryPages,
thirteenthBattleIntroPages,
thirteenthBattleVictoryPages,
twentiethBattleIntroPages,
twentiethBattleVictoryPages,
twelfthBattleIntroPages,
twelfthBattleVictoryPages,
thirdBattleIntroPages,
@@ -263,13 +266,24 @@ const sortieFlows: Record<string, SortieFlow> = {
},
[nineteenthBattleScenario.id]: {
afterBattleId: nineteenthBattleScenario.id,
eyebrow: '다음 장 준비',
title: '강동 사절 준비',
eyebrow: '다음 장',
title: twentiethBattleScenario.title,
description:
'장판파에서 피난로를 열어 백성과 군을 다시 모았습니다. 이제 제갈량과 손건동으로 보낼 말과 증거를 정리하고, 손권과 마주할 준비를 해야 합니다.',
rewardHint: '다음 장: 강동 사절과 적벽대전 준비 중',
pages: nineteenthBattleVictoryPages,
unavailableNotice: '강동 사절과 적벽대전 장은 다음 작업에서 이어집니다. 군영에서 출전 후보, 공명, 보급을 정비하십시오.'
'장판파에서 피난로를 열어 백성과 군을 다시 모았습니다. 이제 제갈량과 손건나루까지 보내 강동 사절의 길을 열어야 합니다.',
rewardHint: `예상 보상: ${twentiethBattleScenario.title} 개방 / 강동 사절 문서 확보`,
nextBattleId: twentiethBattleScenario.id,
campaignStep: 'twentieth-battle',
pages: [...nineteenthBattleVictoryPages, ...twentiethBattleIntroPages]
},
[twentiethBattleScenario.id]: {
afterBattleId: twentiethBattleScenario.id,
eyebrow: '다음 장 준비',
title: '적벽 첫 전투 준비',
description:
'강동으로 향하는 길이 열렸습니다. 이제 제갈량과 손건은 손권과 주유를 설득해야 하고, 유비군은 장강에서 조조의 대군을 맞을 준비를 시작합니다.',
rewardHint: '다음 장: 강동 회담과 적벽대전 첫 전투 준비 중',
pages: twentiethBattleVictoryPages,
unavailableNotice: '강동 회담과 적벽대전 첫 전투는 다음 작업에서 이어집니다. 군영에서 사절 문서, 화공 준비, 출전 후보를 정비하십시오.'
}
};

View File

@@ -1260,6 +1260,69 @@ export const nineteenthBattleVictoryPages: StoryPage[] = [
}
];
export const twentiethBattleIntroPages: StoryPage[] = [
{
id: 'twentieth-envoy-road-opens',
bgm: 'story-dark',
chapter: '강동으로 가는 길',
background: 'story-militia',
speaker: '손건',
text: '장판파의 피난로를 지나 유비군은 하구로 향합니다. 강동에 사절을 보내려면 조조군 추격대가 강나루를 닫기 전에 길을 열어야 합니다.'
},
{
id: 'twentieth-zhuge-envoy-plan',
bgm: 'battle-prep',
chapter: '사절의 문서',
background: 'story-liu-bei',
speaker: '제갈량',
text: '강동은 조조를 두려워하지만, 싸울 계산이 서야 움직입니다. 손건의 문서와 장판파의 기록을 나루까지 지켜야 합니다.'
},
{
id: 'twentieth-generals-protect-envoy',
bgm: 'battle-prep',
chapter: '호위와 돌파',
background: 'story-three-heroes',
speaker: '관우',
portrait: 'guanYu',
text: '이번 길은 적을 많이 베는 것보다 사절을 온전히 보내는 일이 먼저입니다. 전열과 기동, 보급을 골고루 세우는 편성이 필요하겠습니다.'
},
{
id: 'twentieth-jiangdong-envoy-sortie',
bgm: 'battle-prep',
chapter: '강동 사절로',
background: 'story-sortie',
speaker: '유비',
portrait: 'liuBei',
text: '선생과 손건이 강동에 닿아야 조조의 큰 군세를 막을 길이 열리오. 오늘은 칼끝만이 아니라 말과 문서를 지키는 싸움이오.'
}
];
export const twentiethBattleVictoryPages: StoryPage[] = [
{
id: 'twentieth-victory-river-port',
bgm: 'militia-theme',
chapter: '나루가 열리다',
background: 'story-sortie',
text: '문빙의 추격대가 물러서자 강나루의 문이 열렸습니다. 유비군은 피난 행렬을 뒤에 두고, 강동으로 향할 작은 배와 사절 문서를 지켜냈습니다.'
},
{
id: 'twentieth-sun-qian-letter-ready',
bgm: 'battle-prep',
chapter: '손권에게 보낼 말',
background: 'story-militia',
speaker: '손건',
text: '강동에 전할 말은 이제 분명합니다. 조조의 남하, 장판파의 피난로, 그리고 주공께서 백성을 버리지 않았다는 사실을 함께 적겠습니다.'
},
{
id: 'twentieth-red-cliffs-near',
bgm: 'story-dark',
chapter: '적벽으로 부는 바람',
background: 'story-three-heroes',
speaker: '제갈량',
text: '이제 강동의 마음을 움직일 차례입니다. 손권과 주유가 계산을 마치면, 조조의 대군은 장강 위에서 처음으로 멈춰 서게 될 것입니다.'
}
];
export const firstBattleMap: BattleMap = {
width: 20,
height: 18,
@@ -1519,6 +1582,12 @@ export const nineteenthBattleMap: BattleMap = {
terrain: createNineteenthBattleTerrain()
};
export const twentiethBattleMap: BattleMap = {
width: 40,
height: 28,
terrain: createTwentiethBattleTerrain()
};
export const firstBattleUnits: UnitData[] = [
{
id: 'liu-bei',
@@ -7239,6 +7308,384 @@ export const nineteenthBattleUnits: UnitData[] = [
}
];
const twentiethBattleAllyPositions: Record<string, { x: number; y: number }> = {
'liu-bei': { x: 4, y: 22 },
'guan-yu': { x: 5, y: 20 },
'zhang-fei': { x: 6, y: 23 },
'jian-yong': { x: 3, y: 24 },
'mi-zhu': { x: 5, y: 25 },
'sun-qian': { x: 7, y: 22 },
'zhao-yun': { x: 8, y: 20 },
'zhuge-liang': { x: 6, y: 21 }
};
export const twentiethBattleUnits: UnitData[] = [
...[
...firstBattleUnits.filter((unit) => unit.faction === 'ally'),
...xuzhouRecruitUnits,
...caoBreakRecruitUnits,
...liuBiaoRecruitUnits,
...zhugeRecruitUnits
].map((unit) => placeScenarioUnit(unit, twentiethBattleAllyPositions[unit.id] ?? { x: unit.x, y: unit.y })),
{
id: 'envoy-road-scout-a',
name: '조조군 척후',
faction: 'enemy',
className: '나루 척후',
classKey: 'bandit',
level: 24,
exp: 34,
hp: 70,
maxHp: 70,
attack: 27,
move: 4,
stats: { might: 102, intelligence: 74, leadership: 80, agility: 100, luck: 70 },
equipment: {
weapon: { itemId: 'yellow-turban-saber', level: 3, exp: 36 },
armor: { itemId: 'rebel-vest', level: 3, exp: 4 },
accessory: { itemId: 'grain-pouch', level: 1, exp: 0 }
},
x: 13,
y: 21
},
{
id: 'envoy-road-scout-b',
name: '조조군 척후',
faction: 'enemy',
className: '강변 척후',
classKey: 'bandit',
level: 24,
exp: 34,
hp: 70,
maxHp: 70,
attack: 27,
move: 4,
stats: { might: 102, intelligence: 74, leadership: 80, agility: 100, luck: 70 },
equipment: {
weapon: { itemId: 'yellow-turban-saber', level: 3, exp: 36 },
armor: { itemId: 'rebel-vest', level: 3, exp: 4 },
accessory: { itemId: 'grain-pouch', level: 1, exp: 0 }
},
x: 14,
y: 24
},
{
id: 'envoy-road-cavalry-a',
name: '조조 추격기',
faction: 'enemy',
className: '추격 기병',
classKey: 'cavalry',
level: 25,
exp: 36,
hp: 94,
maxHp: 94,
attack: 32,
move: 5,
stats: { might: 116, intelligence: 74, leadership: 92, agility: 110, luck: 72 },
equipment: {
weapon: { itemId: 'iron-spear', level: 3, exp: 44 },
armor: { itemId: 'lamellar-armor', level: 3, exp: 18 },
accessory: { itemId: 'bravery-token', level: 1, exp: 0 }
},
x: 17,
y: 19
},
{
id: 'envoy-road-cavalry-b',
name: '조조 추격기',
faction: 'enemy',
className: '추격 기병',
classKey: 'cavalry',
level: 25,
exp: 36,
hp: 94,
maxHp: 94,
attack: 32,
move: 5,
stats: { might: 116, intelligence: 74, leadership: 92, agility: 110, luck: 72 },
equipment: {
weapon: { itemId: 'iron-spear', level: 3, exp: 44 },
armor: { itemId: 'lamellar-armor', level: 3, exp: 18 },
accessory: { itemId: 'bravery-token', level: 1, exp: 0 }
},
x: 18,
y: 23
},
{
id: 'envoy-road-cavalry-c',
name: '문빙 기병',
faction: 'enemy',
className: '나루 기병',
classKey: 'cavalry',
level: 26,
exp: 38,
hp: 98,
maxHp: 98,
attack: 33,
move: 5,
stats: { might: 118, intelligence: 76, leadership: 94, agility: 112, luck: 72 },
equipment: {
weapon: { itemId: 'iron-spear', level: 3, exp: 50 },
armor: { itemId: 'reinforced-lamellar', level: 3, exp: 26 },
accessory: { itemId: 'bravery-token', level: 1, exp: 0 }
},
x: 25,
y: 18
},
{
id: 'envoy-road-cavalry-d',
name: '문빙 기병',
faction: 'enemy',
className: '나루 기병',
classKey: 'cavalry',
level: 26,
exp: 38,
hp: 98,
maxHp: 98,
attack: 33,
move: 5,
stats: { might: 118, intelligence: 76, leadership: 94, agility: 112, luck: 72 },
equipment: {
weapon: { itemId: 'iron-spear', level: 3, exp: 50 },
armor: { itemId: 'reinforced-lamellar', level: 3, exp: 26 },
accessory: { itemId: 'bravery-token', level: 1, exp: 0 }
},
x: 28,
y: 21
},
{
id: 'envoy-road-infantry-a',
name: '나루 보병',
faction: 'enemy',
className: '강나루 보병',
classKey: 'yellowTurban',
level: 24,
exp: 34,
hp: 88,
maxHp: 88,
attack: 29,
move: 3,
stats: { might: 110, intelligence: 76, leadership: 94, agility: 82, luck: 70 },
equipment: {
weapon: { itemId: 'iron-spear', level: 3, exp: 40 },
armor: { itemId: 'lamellar-armor', level: 3, exp: 14 },
accessory: { itemId: 'war-manual', level: 1, exp: 0 }
},
x: 21,
y: 19
},
{
id: 'envoy-road-infantry-b',
name: '나루 보병',
faction: 'enemy',
className: '강나루 보병',
classKey: 'yellowTurban',
level: 24,
exp: 34,
hp: 88,
maxHp: 88,
attack: 29,
move: 3,
stats: { might: 110, intelligence: 76, leadership: 94, agility: 82, luck: 70 },
equipment: {
weapon: { itemId: 'iron-spear', level: 3, exp: 40 },
armor: { itemId: 'lamellar-armor', level: 3, exp: 14 },
accessory: { itemId: 'war-manual', level: 1, exp: 0 }
},
x: 23,
y: 21
},
{
id: 'envoy-road-infantry-c',
name: '문빙 보병',
faction: 'enemy',
className: '포구 보병',
classKey: 'yellowTurban',
level: 25,
exp: 36,
hp: 92,
maxHp: 92,
attack: 30,
move: 3,
stats: { might: 112, intelligence: 78, leadership: 96, agility: 84, luck: 71 },
equipment: {
weapon: { itemId: 'iron-spear', level: 3, exp: 46 },
armor: { itemId: 'reinforced-lamellar', level: 3, exp: 22 },
accessory: { itemId: 'war-manual', level: 1, exp: 0 }
},
x: 31,
y: 16
},
{
id: 'envoy-road-infantry-d',
name: '문빙 보병',
faction: 'enemy',
className: '포구 보병',
classKey: 'yellowTurban',
level: 25,
exp: 36,
hp: 92,
maxHp: 92,
attack: 30,
move: 3,
stats: { might: 112, intelligence: 78, leadership: 96, agility: 84, luck: 71 },
equipment: {
weapon: { itemId: 'iron-spear', level: 3, exp: 46 },
armor: { itemId: 'reinforced-lamellar', level: 3, exp: 22 },
accessory: { itemId: 'war-manual', level: 1, exp: 0 }
},
x: 33,
y: 19
},
{
id: 'envoy-road-archer-a',
name: '강변 궁병',
faction: 'enemy',
className: '강변 궁병',
classKey: 'archer',
level: 24,
exp: 34,
hp: 68,
maxHp: 68,
attack: 29,
move: 3,
stats: { might: 98, intelligence: 88, leadership: 86, agility: 96, luck: 72 },
equipment: {
weapon: { itemId: 'short-bow', level: 3, exp: 42 },
armor: { itemId: 'cloth-armor', level: 3, exp: 16 },
accessory: { itemId: 'wind-quiver', level: 1, exp: 0 }
},
x: 20,
y: 15
},
{
id: 'envoy-road-archer-b',
name: '강변 궁병',
faction: 'enemy',
className: '언덕 궁병',
classKey: 'archer',
level: 24,
exp: 34,
hp: 68,
maxHp: 68,
attack: 29,
move: 3,
stats: { might: 98, intelligence: 88, leadership: 86, agility: 96, luck: 72 },
equipment: {
weapon: { itemId: 'short-bow', level: 3, exp: 42 },
armor: { itemId: 'cloth-armor', level: 3, exp: 16 },
accessory: { itemId: 'wind-quiver', level: 1, exp: 0 }
},
x: 27,
y: 14
},
{
id: 'envoy-road-archer-c',
name: '포구 궁병',
faction: 'enemy',
className: '포구 궁병',
classKey: 'archer',
level: 25,
exp: 36,
hp: 70,
maxHp: 70,
attack: 30,
move: 3,
stats: { might: 100, intelligence: 90, leadership: 88, agility: 98, luck: 72 },
equipment: {
weapon: { itemId: 'short-bow', level: 3, exp: 48 },
armor: { itemId: 'cloth-armor', level: 3, exp: 20 },
accessory: { itemId: 'wind-quiver', level: 1, exp: 0 }
},
x: 35,
y: 15
},
{
id: 'envoy-road-guard-a',
name: '포구 수비대',
faction: 'enemy',
className: '포구 수비대',
classKey: 'yellowTurban',
level: 26,
exp: 38,
hp: 100,
maxHp: 100,
attack: 32,
move: 3,
stats: { might: 118, intelligence: 80, leadership: 104, agility: 86, luck: 72 },
equipment: {
weapon: { itemId: 'iron-spear', level: 3, exp: 52 },
armor: { itemId: 'reinforced-lamellar', level: 3, exp: 28 },
accessory: { itemId: 'war-manual', level: 1, exp: 0 }
},
x: 35,
y: 18
},
{
id: 'envoy-road-guard-b',
name: '포구 수비대',
faction: 'enemy',
className: '포구 수비대',
classKey: 'yellowTurban',
level: 26,
exp: 38,
hp: 100,
maxHp: 100,
attack: 32,
move: 3,
stats: { might: 118, intelligence: 80, leadership: 104, agility: 86, luck: 72 },
equipment: {
weapon: { itemId: 'iron-spear', level: 3, exp: 52 },
armor: { itemId: 'reinforced-lamellar', level: 3, exp: 28 },
accessory: { itemId: 'war-manual', level: 1, exp: 0 }
},
x: 36,
y: 20
},
{
id: 'envoy-road-strategist-a',
name: '조조군 군리',
faction: 'enemy',
className: '군리',
classKey: 'archer',
level: 25,
exp: 36,
hp: 72,
maxHp: 72,
attack: 29,
move: 3,
stats: { might: 78, intelligence: 98, leadership: 90, agility: 86, luck: 74 },
equipment: {
weapon: { itemId: 'short-bow', level: 3, exp: 50 },
armor: { itemId: 'cloth-armor', level: 3, exp: 22 },
accessory: { itemId: 'war-manual', level: 1, exp: 0 }
},
x: 34,
y: 14
},
{
id: 'envoy-road-leader-wen-pin',
name: '문빙',
faction: 'enemy',
className: '조조군 추격장',
classKey: 'rebelLeader',
level: 27,
exp: 42,
hp: 132,
maxHp: 132,
attack: 34,
move: 4,
stats: { might: 120, intelligence: 86, leadership: 112, agility: 90, luck: 76 },
equipment: {
weapon: { itemId: 'leader-axe', level: 4, exp: 4 },
armor: { itemId: 'reinforced-lamellar', level: 3, exp: 36 },
accessory: { itemId: 'war-manual', level: 1, exp: 0 }
},
x: 37,
y: 17
}
];
export const firstBattleBonds: BattleBond[] = [
{
id: 'liu-bei__guan-yu',
@@ -7390,6 +7837,7 @@ export const eighteenthBattleBonds: BattleBond[] = [...sixteenthBattleBonds, ...
cloneBattleBondForScenario
);
export const nineteenthBattleBonds: BattleBond[] = [...eighteenthBattleBonds].map(cloneBattleBondForScenario);
export const twentiethBattleBonds: BattleBond[] = [...nineteenthBattleBonds].map(cloneBattleBondForScenario);
function createEighthBattleTerrain(): TerrainType[][] {
return Array.from({ length: 22 }, (_, y) =>
@@ -7954,6 +8402,62 @@ function createNineteenthBattleTerrain(): TerrainType[][] {
);
}
function createTwentiethBattleTerrain(): TerrainType[][] {
return Array.from({ length: 28 }, (_, y) =>
Array.from({ length: 40 }, (_, x): TerrainType => {
if ((x <= 3 && y >= 21 && y <= 26) || (x >= 4 && x <= 7 && y >= 23 && y <= 26)) {
return 'camp';
}
if ((x >= 34 && x <= 39 && y >= 14 && y <= 21) || (x >= 31 && x <= 34 && y >= 15 && y <= 18)) {
return 'fort';
}
if ((x >= 13 && x <= 16 && y >= 18 && y <= 20) || (x >= 29 && x <= 31 && y >= 15 && y <= 17)) {
return 'village';
}
if (
(y === 22 && x >= 3 && x <= 15) ||
(y === 20 && x >= 14 && x <= 26) ||
(y === 17 && x >= 26 && x <= 36) ||
(x === 34 && y >= 14 && y <= 22)
) {
return 'road';
}
if (
(x >= 6 && x <= 16 && y === 24 - Math.floor(x / 2)) ||
(x >= 16 && x <= 31 && y === Math.floor(x / 2) + 8) ||
(x >= 5 && x <= 12 && y === 23)
) {
return 'road';
}
if ((x === 22 || x === 23) && y >= 0 && y <= 27) {
return 'river';
}
if ((x === 28 || x === 29) && y >= 0 && y <= 14) {
return 'river';
}
if (
(x >= 5 && x <= 15 && y >= 8 && y <= 17) ||
(x >= 16 && x <= 21 && y >= 21 && y <= 27) ||
(x <= 9 && y <= 8) ||
(x >= 29 && x <= 38 && y <= 9)
) {
return 'forest';
}
if (
(x >= 10 && x <= 17 && y >= 2 && y <= 6) ||
(x >= 25 && x <= 33 && y >= 22 && y <= 27) ||
(x >= 31 && x <= 39 && y >= 3 && y <= 7)
) {
return 'hill';
}
if ((x <= 1 && y <= 13) || (x >= 38 && y <= 11) || (x >= 38 && y >= 23)) {
return 'cliff';
}
return 'plain';
})
);
}
function placeScenarioUnit(unit: UnitData, position: { x: number; y: number }): UnitData {
return {
...cloneUnitForScenario(unit),