diff --git a/scripts/verify-battle-scenario-data.mjs b/scripts/verify-battle-scenario-data.mjs index c073d38..d140f95 100644 --- a/scripts/verify-battle-scenario-data.mjs +++ b/scripts/verify-battle-scenario-data.mjs @@ -218,6 +218,9 @@ function validateSortie(errors, scenario, classKeys, formationRoles, terrainRule if ((sortie.requiredUnits?.length ?? 0) > sortie.sortieLimit) { errors.push(`${context}: requiredUnits count exceeds sortieLimit`); } + if ((sortie.recommendedUnits?.length ?? 0) > sortie.sortieLimit) { + errors.push(`${context}: recommendedUnits count exceeds sortieLimit`); + } const requiredUnits = sortie.requiredUnits ?? []; const excludedUnits = sortie.excludedUnits ?? []; diff --git a/src/game/data/battles.ts b/src/game/data/battles.ts index 8d3d9d5..9f45df9 100644 --- a/src/game/data/battles.ts +++ b/src/game/data/battles.ts @@ -8876,7 +8876,6 @@ export const sixtiethBattleScenario: BattleScenarioDefinition = { { unitId: 'ma-dai', role: 'flank', reason: '서량 기병의 우회 감각으로 음평 물목과 곽회 기병의 측면을 견제합니다.' }, { unitId: 'wang-ping', role: 'front', reason: '산길 진영과 정지선을 표시해 두 갈래 전선이 흩어지지 않게 합니다.' }, { unitId: 'huang-quan', role: 'support', reason: '무도와 음평으로 갈라지는 군량 장부를 맞춰 장기전 붕괴를 막습니다.' }, - { unitId: 'ma-liang', role: 'support', reason: '새로 확보할 고을의 백성에게 승리보다 약속을 먼저 설명할 문서 담당입니다.' } ], recommendedClasses: [ { label: '두 길 총지휘', classKeys: ['strategist'], reason: '제갈량이 무도와 음평 양쪽 전선을 동시에 정리합니다.' }, @@ -9048,7 +9047,6 @@ export const sixtyFirstBattleScenario: BattleScenarioDefinition = { { unitId: 'wang-ping', role: 'front', reason: '비에 흐려지는 산길 표식과 회수선을 다시 세우는 산길 담당입니다.' }, { unitId: 'zhao-yun', role: 'front', reason: '별동 기병이 수레길을 흔들 때 안정적으로 틈을 막는 기동 예비대입니다.' }, { unitId: 'ma-liang', role: 'support', reason: '전방 마을을 안심시켜 보급선이 약탈로 보이지 않게 만드는 문관 역할입니다.' }, - { unitId: 'ma-dai', role: 'flank', reason: '동쪽 물목과 별동 기병을 견제할 수 있는 서량 기병 선택지입니다.' } ], recommendedClasses: [ { label: '우로 방어 총지휘', classKeys: ['strategist'], reason: '제갈량을 중심으로 방어선과 반격 타이밍을 함께 봅니다.' }, @@ -9221,7 +9219,6 @@ export const sixtySecondBattleScenario: BattleScenarioDefinition = { { unitId: 'huang-quan', role: 'support', reason: '기산 보급 진영의 장부를 공격로와 연결하는 보급 담당입니다.' }, { unitId: 'ma-liang', role: 'support', reason: '노성 앞 마을을 안심시켜 공세가 민심을 잃지 않게 합니다.' }, { unitId: 'ma-dai', role: 'flank', reason: '곽회의 측면 차단과 동쪽 물목을 견제할 수 있는 기병 선택지입니다.' }, - { unitId: 'ma-chao', role: 'flank', reason: '측면 돌파를 강하게 잡고 싶을 때 넣는 서량 기병 선택지입니다.' } ], recommendedClasses: [ { label: '재출정 총지휘', classKeys: ['strategist'], reason: '제갈량을 중심으로 돌파와 회수선을 동시에 관리합니다.' }, @@ -9378,7 +9375,6 @@ export const sixtyThirdBattleScenario: BattleScenarioDefinition = { { unitId: 'huang-quan', role: 'support', reason: '수레 진영을 유지해 추격로가 보급로로 남도록 돕습니다.' }, { unitId: 'ma-liang', role: 'support', reason: '노성 주변 마을을 안심시켜 추격이 민심을 잃지 않게 합니다.' }, { unitId: 'ma-dai', role: 'flank', reason: '곽회 봉화 차단로와 동쪽 기병로를 견제하는 측면 선택지입니다.' }, - { unitId: 'ma-chao', role: 'flank', reason: '봉화 차단과 기병 압박을 강하게 가져갈 때 쓰는 돌파 선택지입니다.' } ], recommendedClasses: [ { label: '추격 판단 총지휘', classKeys: ['strategist'], reason: '제갈량이 추격 속도와 회수 표식을 함께 봅니다.' }, @@ -9535,8 +9531,6 @@ export const sixtyFourthBattleScenario: BattleScenarioDefinition = { { unitId: 'wei-yan', role: 'front', reason: '사마의 본영과 봉화 사이의 지연 보병을 흔드는 돌파 장수입니다.' }, { unitId: 'ma-dai', role: 'flank', reason: '곽회 봉화선과 동쪽 차단로를 끊는 측면 선택지입니다.' }, { unitId: 'zhao-yun', role: 'front', reason: '장합 기병이 물목을 우회할 때 가장 안정적으로 받아낼 예비대입니다.' }, - { unitId: 'ma-chao', role: 'flank', reason: '동쪽 기병 압박을 강하게 가져갈 때 쓰는 돌파 선택지입니다.' }, - { unitId: 'ma-liang', role: 'support', reason: '강가 마을을 안심시켜 보급 진영 확보가 민심 손실로 바뀌지 않게 합니다.' } ], recommendedClasses: [ { label: '강안 진영 총지휘', classKeys: ['strategist'], reason: '제갈량이 남안 확보와 강을 건널 시점을 조절합니다.' }, @@ -9693,8 +9687,6 @@ export const sixtyFifthBattleScenario: BattleScenarioDefinition = { { unitId: 'ma-dai', role: 'flank', reason: '곽회 봉화선과 동쪽 측면로를 차단하는 기병 선택지입니다.' }, { unitId: 'zhao-yun', role: 'front', reason: '장합 재추격대가 뒤를 흔들 때 안정적으로 받아낼 예비대입니다.' }, { unitId: 'ma-chao', role: 'flank', reason: '동쪽 봉화 차단과 기병 압박을 더 강하게 가져갈 때 유효합니다.' }, - { unitId: 'wei-yan', role: 'front', reason: '사마의 지연선 앞 보병 진영을 흔드는 돌파 장수입니다.' }, - { unitId: 'ma-liang', role: 'support', reason: '강북 마을을 안정시켜 전진 진영 확보가 민심 손실로 번지지 않게 합니다.' } ], recommendedClasses: [ { label: '북안 압박 총지휘', classKeys: ['strategist'], reason: '제갈량이 깊은 추격과 전진 진영 고정을 조절합니다.' }, @@ -9852,8 +9844,6 @@ export const sixtySixthBattleScenario: BattleScenarioDefinition = { { unitId: 'ma-chao', role: 'flank', reason: '적 측면 기병을 빠르게 눌러 본영 압박을 줄입니다.' }, { unitId: 'huang-quan', role: 'support', reason: '귀환로 보급 장부를 정리해 장기전의 손실을 줄입니다.' }, { unitId: 'li-yan', role: 'support', reason: '군량 수레와 본영 보급 기준을 보전하는 역할입니다.' }, - { unitId: 'ma-liang', role: 'support', reason: '귀환로 마을을 안정시켜 전투 후 수습을 돕습니다.' }, - { unitId: 'wei-yan', role: 'front', reason: '사마의 본대 앞 전면 보병을 빠르게 흔들고 싶을 때 유효합니다.' } ], recommendedClasses: [ { label: '본영 장부 보전', classKeys: ['strategist'], reason: '제갈량과 참모가 본영 질서와 상태효과 지원을 맡습니다.' },