0
0
mirror of https://github.com/marcrobledo/savegame-editors.git synced 2025-04-28 09:05:10 +00:00

105 lines
3.7 KiB
JavaScript

/*
Super Kirby Clash savegame editor v20200425
by Marc Robledo 2019-2020
*/
SavegameEditor={
Name:'Super Kirby Clash',
Filename:'savedata.dat',
/* Constants */
Constants:{
HEROIC_MISSION_HIDDEN:0x00,
HEROIC_MISSION_VISIBLE:0x01,
HEROIC_MISSION_UNLOCKED_NEW:0x02,
HEROIC_MISSION_UNLOCKED:0x04,
},
Offsets:{
APPLE_GEMS:0x3ef0,
BOUGHT_APPLE_GEMS:0x3f00,
SHARDS_RED:0x3f20,
SHARDS_BLUE:0x3f24,
SHARDS_YELLOW:0x3f28,
SHARDS_RARE:0x3f2c,
MISSION_PASSWORDS: 0x3a3c,
MISSION_ESHOP: 0x3a44,
MISSION_ALL_HEROIC_MISSIONS: 0x3aa4
//PROFILE_NAME:0x1bb4,
//PROFILE_PLAYED_TIME:0x1b74,
//PROFILE_COMPLETED_MISSIONS:0x1b90,
//PROFILE_MULTIPLAYER_BATTLES:0x1b94,
//PROFILE_MULTIPLAYER_ENCOUNTERS:0x1b64
},
/* check if savegame is valid */
checkValidSavegame:function(){
return (tempFile.fileSize===54344)
},
/* heroic missions */
heroicMissionCheck:function(offset){
var b=tempFile.readU8(offset);
return (b!==this.Constants.HEROIC_MISSION_HIDDEN && b!==this.Constants.HEROIC_MISSION_VISIBLE)
},
heroicMissionUnlock:function(offset){
tempFile.writeU8(offset, this.Constants.HEROIC_MISSION_UNLOCKED_NEW);
},
/* preload function */
preload:function(){
setNumericRange('applegems', 0, 99999);
setNumericRange('boughtapplegems', 0, 5000);
setNumericRange('shards-red', 0, 9999);
setNumericRange('shards-blue', 0, 9999);
setNumericRange('shards-yellow', 0, 9999);
setNumericRange('shards-rare', 0, 9999);
//setNumericRange('encounters', 0, 65535);
//setNumericRange('multiplayerbattles', 0, 65535);
//setNumericRange('time', 0, 0xffffffff);
//setNumericRange('missions', 0, 0xffffffff);
},
/* load function */
load:function(){
tempFile.littleEndian=true;
tempFile.fileName='savedata.dat';
/* load data */
//setValue('name', tempFile.readU16String(this.Offsets.PROFILE_NAME, 16));
//setValue('time', tempFile.readU32(this.Offsets.PROFILE_PLAYED_TIME));
//setValue('missions', tempFile.readU32(this.Offsets.PROFILE_COMPLETED_MISSIONS));
//setValue('encounters', tempFile.readU32(this.Offsets.PROFILE_MULTIPLAYER_ENCOUNTERS));
//setValue('multiplayerbattles', tempFile.readU32(this.Offsets.PROFILE_MULTIPLAYER_BATTLES));
setValue('applegems', tempFile.readU32(this.Offsets.APPLE_GEMS));
setValue('boughtapplegems', tempFile.readU16(this.Offsets.BOUGHT_APPLE_GEMS));
setValue('shards-red', tempFile.readU16(this.Offsets.SHARDS_RED));
setValue('shards-blue', tempFile.readU16(this.Offsets.SHARDS_BLUE));
setValue('shards-yellow', tempFile.readU16(this.Offsets.SHARDS_YELLOW));
setValue('shards-rare', tempFile.readU16(this.Offsets.SHARDS_RARE));
get('button-mission-passwords').disabled=this.heroicMissionCheck(this.Offsets.MISSION_PASSWORDS);
get('button-mission-eshop').disabled=this.heroicMissionCheck(this.Offsets.MISSION_ESHOP);
},
/* save function */
save:function(){
//tempFile.writeU16String(this.Offsets.PROFILE_NAME, 16, getValue('name'));
//tempFile.writeU32(this.Offsets.PROFILE_PLAYED_TIME, getValue('time'));
//tempFile.writeU32(this.Offsets.PROFILE_COMPLETED_MISSIONS, getValue('missions'));
//tempFile.writeU32(this.Offsets.PROFILE_MULTIPLAYER_ENCOUNTERS, getValue('encounters'));
//tempFile.writeU32(this.Offsets.PROFILE_MULTIPLAYER_BATTLES, getValue('multiplayerbattles'));
tempFile.writeU32(this.Offsets.APPLE_GEMS, getValue('applegems'));
tempFile.writeU16(this.Offsets.BOUGHT_APPLE_GEMS, getValue('boughtapplegems'));
tempFile.writeU16(this.Offsets.SHARDS_RED, getValue('shards-red'));
tempFile.writeU16(this.Offsets.SHARDS_BLUE, getValue('shards-blue'));
tempFile.writeU16(this.Offsets.SHARDS_YELLOW, getValue('shards-yellow'));
tempFile.writeU16(this.Offsets.SHARDS_RARE, getValue('shards-rare'));
}
}