meleu / RetroArch-problematic-cheevos

A place to put the savestates of games with cheevos problems when running in RetroArch and no problems in official emulators.
6 stars 10 forks source link

Super Mario Land GB #2

Closed grenade44 closed 7 years ago

meleu commented 7 years ago

@grenade44 Thanks!

meleu commented 7 years ago

@leiradel I noticed that when I load a Game Boy ROM, the log says testing NES. Is it correct? Like this:

cat super_mario_land_-_gambatte.log | grep -i cheevos
RetroArch [INFO] :: CHEEVOS testing NES (discards VROM).
RetroArch [INFO] :: CHEEVOS testing Generic (plain content).
RetroArch [INFO] :: CHEEVOS getting game id for hash b259feb41811c7e4e1dc200167985c84
RetroArch [INFO] :: CHEEVOS got game id 504.
RetroArch [INFO] :: CHEEVOS got achievements for game id 504.
RetroArch [INFO] :: CHEEVOS deactivated unlocked achievements in softcore mode.
RetroArch [INFO] :: CHEEVOS deactivated unlocked achievements in hardcore mode.
RetroArch [INFO] :: CHEEVOS posted playing game 504 activity.
leiradel commented 7 years ago

@meleu yes, RetroArch can't know what the file is just by the extension, so it has a couple of different algorithms to identify the game.

In this log, you can see that it tries the NES algorithm, but it fails (the failure is not logged) and then it tests the Generic algorithm, which correctly identifies the game.

meleu commented 7 years ago

@leiradel I thought it strange because when I load a MegaDrive/Genesis ROM it correctly says testing Genesis, this way:

RetroArch [INFO] :: CHEEVOS testing Genesis (6Mb padding).
RetroArch [INFO] :: CHEEVOS getting game id for hash d55356b9f362f49bc395e79bfb656a0e
RetroArch [INFO] :: CHEEVOS got game id 98.
RetroArch [INFO] :: CHEEVOS got achievements for game id 98.
...

Well, going back to the main subject :-) the Game Boy cheevos seem to be problematic yet.

leiradel commented 7 years ago

I've oversimplified the explanation :)

The extension is in fact used as a hint for which methods to try first, It's used for SNES and Genesis. The algorithm is:

  1. If the extension is a SNES extension, try the SNES method
  2. If the extension is a Genesis extension, try the Genesis method
  3. Try the NES method
  4. Try the generic method
leiradel commented 7 years ago

The Collect 50 coins achievement needs access to the Zero Page RAM, and to the Interrupt Enable Flag, and Gambatte does not exposed them. I already know how to take care of the Zero Page RAM, but the flag is harder. Let me investigate more.

meleu commented 7 years ago

@leiradel just giving one more info, not sure if it can help... As some users ( @grenade44 inclusive) said that mGBA is working fine, and this core is able to run Game Boy ROMs, I tried Super Mario Land with mGBA, it loads the Achievement List correctly, but the Fire Power didn't work (didn't try others).

I don't the low level details, but I'm saying it just in case the Interrupt Enable Flag is easier to work in mGBA...

leiradel commented 7 years ago

I've fixed Gambatte, but it's a bit hackish. I won't make a pull request to the upstream repository before speaking to some people on the libretro team about it.

For now, it's available in my cloned repo: https://github.com/leiradel/gambatte-libretro

meleu commented 7 years ago

I'm gonna test right now! :-)

leiradel commented 7 years ago

From a quick look at the mGBA core, I believe that it will only work with achievements for GBA games.

meleu commented 7 years ago

@leiradel your forked version is working fine here! I've got Fire Power, Pocket Money (50 coins) and 3 lives on bonus stage cheevos!

Hope to see these changes on upstream!

Thanks again for your good job!

grenade44 commented 7 years ago

I wish I saw this before I let my pc do update so I could add this lol

leiradel commented 7 years ago

@meleu just to make it clear: it's RetroArch that identifies the games and loads the achievements, and that tests them each frame. The core doesn't have the slightest idea that it's being sneaked upon :)

So, when an achievements list is loaded, it's not an indication that the core will support them.

leiradel commented 7 years ago

@meleu I've implemented the fix a bit different to avoid writing into the emulated memory, and it worked in my tests with Super Mario Land. Do you mind also testing on your end?

meleu commented 7 years ago

Testing right now...

grenade44 commented 7 years ago

I just tested with Super mario land and seems to work fine

meleu commented 7 years ago

@leiradel It's working fine here. Tested with Super Mario Land, Alleyway and Mega Man II (Game Boy version, of course).

Well done sir!

grenade44 commented 7 years ago

Ive also tested with Alleyway and the first couple of achievements seem to be working fine.

leiradel commented 7 years ago

Thanks guys, I had to make further changes but I did a quick test with Super Mario Land and it works, so I don't think further tests are necessary.

The changes aren't merged yet, I'll let you know when they are.

meleu commented 7 years ago

I'm keeping an eye on that PR! :-)

leiradel commented 7 years ago

Merged!

meleu commented 7 years ago

Great! And the compatibility list has been updated accordingly. :-)

meleu commented 7 years ago

I had a better idea. I've put the compatibility list at the RetroArch Wiki: https://github.com/libretro/RetroArch/wiki/RetroAchievements Then anyone can edit it. ;-)

leiradel commented 7 years ago

May I ask to keep that list with only the compatible cores? Right now there is a list of cheevos that don't work with FCEUmm, but I think it just makes the list confusing.

Just a link to the save state repository where those issues should be tracked would be better IMHO.

meleu commented 7 years ago

May I ask to keep that list with only the compatible cores? Right now there is a list of cheevos that don't work with FCEUmm

I've just removed that list.

Is it enough or do you mean the "untested" cores should be removed too?

leiradel commented 7 years ago

It's better to leave the untested cores there, we will get questions about them if we take them out.

FCEUmm

There are a few known achievements that aren't working with FCEUmm and are working fine with QuickNES.

Maybe this should read just "has issues with some achievements"?

Also, I think it would be cool to have a TL;DR version at the top, listing the compatible cores for each system, like:

meleu commented 7 years ago

Good point! I'll do it.

meleu commented 7 years ago

Sadly that issue that @PKstarship said in retroachievements.org forum (quicknes crashing retroarch on Android) happens to me too. Not with Metroid only, but with every game I tested. I opened an issue https://github.com/libretro/RetroArch/issues/3973

I'm still using fceumm in some cases. I think I have to say something about it on the wiki...

leiradel commented 7 years ago

I think it's too much work to keep track of what core from what date is working in what platform. They should be working on all platforms, unless a platform is officially not supported (and in this case I think a note in the Wiki is necessary.)

So unless it's a problem with cheevos, I'd leave it out of the Wiki.

leiradel commented 7 years ago

Hm, move the notice about QuickNES on Android below, where more information is given, the recommended cores list will stay clean and the information won't be lost that way.

grenade44 commented 7 years ago

Thanks @leiradel for your hard work and making retroachievements compatible.