diff --git a/scripts/verify-battle-scenario-data.mjs b/scripts/verify-battle-scenario-data.mjs index 893ddaf..d8adf9e 100644 --- a/scripts/verify-battle-scenario-data.mjs +++ b/scripts/verify-battle-scenario-data.mjs @@ -251,6 +251,7 @@ function validateSortie(errors, scenario, classKeys, formationRoles, terrainRule } }); const recommendedUnitIds = new Set(); + const recommendedRoleByUnitId = new Map(); sortie.recommendedUnits.forEach((recommendation) => { if (recommendedUnitIds.has(recommendation.unitId)) { errors.push(`${context}: duplicate recommended unit "${recommendation.unitId}"`); @@ -267,6 +268,9 @@ function validateSortie(errors, scenario, classKeys, formationRoles, terrainRule if (recommendation.role && !formationRoles.has(recommendation.role)) { errors.push(`${context}/${recommendation.unitId}: invalid recommendation role "${recommendation.role}"`); } + if (recommendation.role) { + recommendedRoleByUnitId.set(recommendation.unitId, recommendation.role); + } assertNonEmptyString(errors, recommendation.reason, `${context}/${recommendation.unitId}: recommendation reason`); }); sortie.recommendedClasses.forEach((recommendation) => { @@ -327,6 +331,12 @@ function validateSortie(errors, scenario, classKeys, formationRoles, terrainRule if (slot.unitId && !requiredUnitIds.has(slot.unitId) && !recommendedUnitIds.has(slot.unitId)) { errors.push(`${context}: deployment slot unit "${slot.unitId}" must be required or recommended`); } + const recommendedRole = slot.unitId ? recommendedRoleByUnitId.get(slot.unitId) : undefined; + if (slot.role && recommendedRole && slot.role !== recommendedRole) { + errors.push( + `${context}: deployment slot unit "${slot.unitId}" role "${slot.role}" does not match recommendation role "${recommendedRole}"` + ); + } if (slot.unitId) { if (deploymentUnitIds.has(slot.unitId)) { errors.push(`${context}: duplicate deployment unit slot "${slot.unitId}"`);