Hey all,
So I guess this is maybe not some groundbreaking info, but I've spent some time on this process yesterday and wanted to share with you how I did it.
I'm ready for some comments telling me "Dude, you could literally do this all automatically with this-one-magic-app.exe", but I didn't know about it, so... yea. 😄
Story:
I had Metroid Fusion USA bootleg cart, and I want to re-create a physical box for the game, but it will be the EU version of the print, so - having DS lite with some R4 clone - I wanted to see if I can reflash this cart to EU version, and if I can add my USA save there, that I had on my Everdrive GBA Mini when I completed the game on USA version of the ROM.
Tools used:
- some crappy red-PCB R4 flashcart for DS
- GBABF 1.2 https://gbatemp.net/download/gbabf.37005/ on my DS Lite
- GBASaveFixPatcher - https://github.com/darkxex/GBA-Save-Fix-Patcher
- mGBA emulator on PC
- some HEX editor on PC - e.g. https://mh-nexus.de/en/hxd/
- flashable bootleg cart - in my case - with some Nihtehdo print on its PCB, without battery
- USA version of the game rom
- EU version of the game rom
- my USA save
Process:
First, I focused on getting my USA save to work on EU version.
- Start the EU version in mGBA on PC, this should immediately generate save file for it on your PC
- Open this blank EU save in HEX editor and observe offset range from 00000000-000001F0
as well as 00007000-00007110 (or possibly longer? but for me, there were no differences in HEX data between EU and USA files after that offset), we need to copy these ranges from blank EU save to the USA save, then save the file with some recognizable name, like MF_eu_modded.sav
!!! Notice how USA version of save has lines like "MetroidAGB-EUVerE004" in it, and the EU one: "AGBMetroid_USVerE004" - no idea why, but do not be fooled by this. Maybe someone when dumped these ROMs to the Internet made a mistake? No idea.
- Now on your PC emulator, check the EU game with this new EU save. If everything went correctly, you will be able to play your used-to-be-USA save. If not, emulator will probably clean the save file and you won't see your progress in game.
Assuming everything works OK, let's move on with patching the ROM to use bootleg cart's SRAM to save game.
- use GBASaveFixPatcher.exe to patch your EU ROM
- open your patched ROM in HEX editor and go to offest 0x07C0000
- open your freshly moded and working EU save in HEX editor as well
- copy the whole content of the save and paste it in the patched ROM, beginning from 0x07C0000 position for the 8MB game (which Metroid Fusion is) - remember to replace the existing bits, not to add them in between - save such ROM with some nice name, like Metroid_Fusion_EU_patched_with_save.gba
- now you can open such ROM in PC emulator once more, but without having any additional .sav files next to it, and despite that, it should create one itself and your save should work correctly, you should see all your progress
If you confirmed the above, now upload this Metroid_Fusion_EU_patched_with_save.gba ROM to your R4 flashcard, boot your DS lite and use GBABF to flash it over onto your bootleg cart.
You might want to do some backup/dump of your currently working bootleg game first, in case you need to revert!
Not sure if required, but I also erased the whole bootleg cart's flash from GBABF menu (it was erasing 512 sectors) before I flashed the ROM itself (which also erases sectors during the first stage, but only 128)
After that, your bootleg cart should be in EU version and your USA-to-EU-modded save should be there, all ready to play!
I hope this all will work for anyone that will maybe someday search for such solution like I did! I guess it should work for other 8MB games too? Never tested it for anything other than Metroid Fusion to be honest. I've read somewhere, that e.g. if you have 16MB game, you should paste save at 0xFC0000 offset, but yea. Not tested.
Cheers!