From ad7e80b58f31b3456395b7d3e36b3496ac16aafa Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sun, 5 Jul 2026 13:30:09 +0900 Subject: [PATCH] Clamp battle save unit levels --- scripts/verify-battle-save-normalization.mjs | 1 + src/game/state/battleSaveState.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/scripts/verify-battle-save-normalization.mjs b/scripts/verify-battle-save-normalization.mjs index 3be028c..ba5f9c2 100644 --- a/scripts/verify-battle-save-normalization.mjs +++ b/scripts/verify-battle-save-normalization.mjs @@ -55,6 +55,7 @@ try { ['self-targeting attack intent', { attackIntents: [{ attackerId: 'liu-bei', targetId: 'liu-bei' }] }], ['duplicate attack intent attacker id', { attackIntents: [{ attackerId: 'liu-bei', targetId: 'rebel-1' }, { attackerId: 'liu-bei', targetId: 'rebel-1' }] }], ['invalid units array', { units: {} }], + ['too high unit level', { units: patchUnit(0, { level: 100, exp: 0 }) }], ['invalid unit exp threshold', { units: patchUnit(0, { exp: 100 }) }], ['invalid max-level unit exp threshold', { units: patchUnit(0, { level: 99, exp: 101 }) }], ['invalid unit hp', { units: patchUnit(0, { hp: 99, maxHp: 30 }) }], diff --git a/src/game/state/battleSaveState.ts b/src/game/state/battleSaveState.ts index e083fde..a9a9bb9 100644 --- a/src/game/state/battleSaveState.ts +++ b/src/game/state/battleSaveState.ts @@ -294,6 +294,7 @@ function isEquipmentStateForSlot(value: unknown, slot: EquipmentSlot, options: B function isValidCharacterProgress(level: unknown, exp: unknown) { return ( isPositiveInteger(level) && + Number(level) <= 99 && Number.isInteger(exp) && Number(exp) >= 0 && (Number(level) >= 99 ? Number(exp) <= 100 : Number(exp) < 100)