libretro / mupen64plus-libretro-nx

Improved mupen64plus libretro core reimplementation
GNU General Public License v2.0
227 stars 112 forks source link

EEPROM16K save type needed for Donkey Kong 64 - Tag Anywhere (V5) (U) to save #405

Closed Isotarge closed 2 years ago

Isotarge commented 2 years ago

This emulator provides a fantastic experience with this ROM hack, with one exception. EEPROM16K save type is not automatically detected, so the game cannot save (without using the savestate feature built into their libretro frontend).

I have filed a PR with upstream https://github.com/mupen64plus/mupen64plus-core/pull/911 just wanted to make this project's maintainers aware that the new ini will need to be pulled from upstream to fix this.

Is there a way we can automatically detect which save type the ROM is using? Perhaps a write to a specific register on the system bus? Adding every single DK64 ROM hack under the sun to the upstream ini feels a bit silly to me, especially since the EverDrive64 can somehow detect it correctly.

Jj0YzL5nvJ commented 2 years ago

Without the changes in this PR, it is not possible to exercise the "EEPROM not detected" code-path since Mupen64Plus will always have a 4K EEPROM (unless 16K EEPROM is specified)

https://github.com/mupen64plus/mupen64plus-core/pull/878#issuecomment-867653998

m4xw commented 2 years ago

Pulling core is on my TODO; I generally always generate the inis then for good practice. Kinda busy IRL currently so the gliden rebase has been slacking too, been working on some low end perf improvements for the dynarec as well

m4xw commented 2 years ago

should be fixed

Xii-Nyth commented 2 years ago

Ive been unable to save even without this rom hack :/ can you not save from a save state?

Jj0YzL5nvJ commented 2 years ago

mupen64plus-ae/mupen64plus-ae#908

Xii-Nyth commented 2 years ago

huh weird that its just this game. then again it doesnt save widescreen/story skip but saves sound and chimpy cam, and has a seemingly useless save button in the game.

Jj0YzL5nvJ commented 2 years ago

Or you use native save or you use savestate. You can't use both, if you use savestate it corrupts the native save.

huh weird that its just this game.

Actually there are quite a few depending on what you consider "corruption" in your dictionary. The real difference is that in the other games you can "repair" the native save by re-saving again. My theory is that the game saves only the differential information from the last memory access instead of overwriting the whole "save block" again. Another possibility would be that it gets corrupted by timing issues, similar to this one.

Xii-Nyth commented 2 years ago

Maybe its something do do with the anticheat which bricked the game?

Jj0YzL5nvJ commented 2 years ago

If that were the case, the error would be reproducible on devices like EverDrive and ROM hacks in real hardware.

Xii-Nyth commented 2 years ago

Oh didnt know it wasnt, I only use my old n64 for reference when debugging these days

turntable97 commented 3 months ago

I just can't manage to save on a DK64 Widescreen hacked ROM. How is this possible? Do I need to make a specific setting in RetroArch to make it work? I'd appreciate any help I can get!

Jj0YzL5nvJ commented 3 months ago

You must add your ROM hacks to your mupen64plus.ini file. Or make a PR (pull request) for said ROM hacks.

turntable97 commented 3 months ago

Alright:

I added a widescreen patch to my "Donkey Kong 64 (U) [!]" and tried to add it to the ini file.

I managed find the correct values. With a Hexeditor i found the correct MD5 128bit checksum. And I took the "GoodName" from the retroarch log. The CRC values are shown in the ROM information when loading the rom in Project64.

In retroarch\cores\system\Mupen64plus I edited the mupen64plus.ini and listed my hacked rom below the original:

[9EC41ABF2519FC386CADD0731F6E868C] GoodName=Donkey Kong 64 (U) [!] CRC=EC58EABF AD7C7169 SaveType=Eeprom 16KB Players=4 CountPerOp=1 Rumble=Yes

[FCA204F4E43816D489355D9EDE736D1D] GoodName=DONKEY KONG 64 (unknown rom) CRC=1611B29B 3EEF9034 RefMD5=9EC41ABF2519FC386CADD0731F6E868C

What happens now is everytime I load the game the whole entry seems to be automatically deleted. When I check the INI file after I close the game the entry is completely gone.

Why does that happen?

I hope someone can help me. Thanks!

Jj0YzL5nvJ commented 3 months ago

Why does that happen?

RetroArch thing? I don't know, I don't really use RetroArch/Libretro. I more alike to a lurker when it comes to N64 emulation and I provide support if I'm in the mood.

See: libretro/mupen64plus-libretro-nx#539

In short, change the file attribute to read-only to prevent it from self-restoring.

turntable97 commented 3 months ago

I've managed to make the INI write protected. And it doesn't overwrite anymore when launching the game like before. Thanks!! But still, it creates and .srm savefile but the saveslots in the menu stay empty. HELP :'(

Xii-Nyth commented 2 months ago

Oh turns out in my case the emu I was working with had the wrong save type set and assumed it waasnt the issue since much old emus (1964) had it defaulting to the correct one. Maybe whatever stock mupen config peole grab when making emus is wrong. Not sure how to change this stuff in retroarch since thats all very "put together" but it seems you found the setting in an ini somewhere and set it to read only so it didnt change back. Ive played not tag anywhere but start with lanky and saves and states seem to work fine in RMG... so I guess for the time being might have to use that instead.