diff --git a/Assets/dll/melonDS.wbx.zst b/Assets/dll/melonDS.wbx.zst index d0ec7dfe77..da11f495e3 100644 Binary files a/Assets/dll/melonDS.wbx.zst and b/Assets/dll/melonDS.wbx.zst differ diff --git a/waterbox/melon/BizPlatform/BizSaveManager.cpp b/waterbox/melon/BizPlatform/BizSaveManager.cpp index 5915096973..288a5abc7c 100644 --- a/waterbox/melon/BizPlatform/BizSaveManager.cpp +++ b/waterbox/melon/BizPlatform/BizSaveManager.cpp @@ -23,12 +23,11 @@ ECL_EXPORT void PutSaveRam(u8* data, u32 len) NDS::LoadSave(data, len); NdsSaveRamIsDirty = false; - data += ndsSaveLen; - len -= ndsSaveLen; - - if (gbaSaveLen && len >= gbaSaveLen) + if (gbaSaveLen && len >= (ndsSaveLen + gbaSaveLen)) { - GBACart::LoadSave(data, gbaSaveLen); + // don't use GBACart::LoadSave! it will re-allocate the save buffer (bad!) + // NDS::LoadSave is fine (and should be used) + memcpy(GBACart::GetSaveMemory(), data + ndsSaveLen, gbaSaveLen); GbaSaveRamIsDirty = false; } }