From 34d91edab14172a6d62bb93d5bbf2bb2cdc7c309 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sun, 31 Dec 2023 13:39:04 -0500 Subject: [PATCH] Reduce size of system data by shortening keys --- src/system/game-data.ts | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 1cb24ef51..d14a6b215 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -118,6 +118,14 @@ export interface DexAttrProps { formIndex: integer; } +const systemShortKeys = { + seenAttr: '$sa', + caughtAttr: '$ca', + seenCount: '$s' , + caughtCount: '$c', + ivs: '$i' +}; + export class GameData { private scene: BattleScene; @@ -256,6 +264,15 @@ export class GameData { }) as SystemSaveData; } + private convertSystemDataStr(dataStr: string, shorten: boolean = false): string { + const fromKeys = shorten ? Object.keys(systemShortKeys) : Object.values(systemShortKeys); + const toKeys = shorten ? Object.values(systemShortKeys) : Object.keys(systemShortKeys); + for (let k in fromKeys) + dataStr = dataStr.replace(new RegExp(`${fromKeys[k].replace('$', '\\$')}`, 'g'), toKeys[k]); + + return dataStr; + } + public saveSetting(setting: Setting, valueIndex: integer): boolean { let settings: object = {}; if (localStorage.hasOwnProperty('settings')) @@ -439,7 +456,12 @@ export class GameData { public exportData(dataType: GameDataType): void { const dataKey: string = getDataTypeKey(dataType); - const dataStr = atob(localStorage.getItem(dataKey)); + let dataStr = atob(localStorage.getItem(dataKey)); + switch (dataType) { + case GameDataType.SYSTEM: + dataStr = this.convertSystemDataStr(dataStr, true); + break; + } const encryptedData = AES.encrypt(dataStr, saveKey); const blob = new Blob([ encryptedData.toString() ], {type: 'text/json'}); const link = document.createElement('a'); @@ -467,11 +489,12 @@ export class GameData { reader.onload = (_ => { return e => { - const dataStr = AES.decrypt(e.target.result.toString(), saveKey).toString(enc.Utf8); + let dataStr = AES.decrypt(e.target.result.toString(), saveKey).toString(enc.Utf8); let valid = false; try { switch (dataType) { case GameDataType.SYSTEM: + dataStr = this.convertSystemDataStr(dataStr); const systemData = this.parseSystemData(dataStr); valid = !!systemData.dexData && !!systemData.timestamp; break;