FBNeo Core saving hiscores (or not) depending on how you exit the game

Hello, Installed the latest stable retroarch + fbneo core on pc just days ago.

When a game gets a new hiscore it’s saved and loaded back correctly if I choose to “Close Content” (and then open it again), if I open a different game, or if I quit completely while it’s still running. But, if I select to “Restart” (reset) the content, it is lost.

At first I thought that maybe this is expected behavior but testing it with Mame 2003+, hiscore saving/loading works on “Restart” and helpfully writes out the relevant info if I enable logging too (FBneo is silent on the matter I think).

Is this a known bug?

No, FBNeo has a specific mecanism to save hiscores when you “reset”.

Please be more explicit about the game you were running so that i can try reproducing the issue.

It could be all roms, I must have tried about 10 so far and I just tested 3 at random now: outzone (Outzone), atetris (Tetris), midres (Midnight Resistance). Could it be the roms? It’s weird, they all run and play perfectly, they save and load scores perfectly well … as long as I don’t Restart/Reset the rom. I can’t test all of them, but so far it’s consistent.

Using a fresh install of Retroarch 1.16.0 (64bit, Windows 10) + FinalBurn Neo v1.0.0.03 091431b, setup according to the wiki page.

To add to this, from testing the 3 games I mentioned above:

Basically, if I choose “Close Content” from the menu, the hiscore file is correctly created in “saves\FinalBurn Neo\fbneo”.

If I “Restart” that file is neither created nor updated (if present).

Ok, just to clarify, this is perfectly normal that no .hi files are created/updated when you reset, it’ll only happen when you close the game.

However, hiscores are not supposed to disappear after a reset, they stay in memory, and will still be saved to disk at the end of the day when you finally decide to close the game. Or at the very least that’s how it works in standalone FBNeo and how it is also supposed to work in the libretro port (i never tested that behavior tbh).

Are you telling me the hiscores simply disappear after a reset ?

Interesting, I did not know that. In that case, yes, after a reset any new entries to the hiscore table are lost/disappear and it’s reset to its previous state.

Here’s what I tried now with outzone (it seems the fastest game to get a new hiscore in a few seconds):

  1. Get a hi-score, enter my initials
  2. RESTART.
  3. No file written in saves, checking the game running, the high score table is the default one again.
  4. CLOSE CONTENT.
  5. outzone.hi is saved in the saves folder and it’s the default hi-score table, so any new entries are lost on step 2.

Everything works fine and new entries are saved, if I always exit the game with the “close content” option.

1 Like

Hmmm ok, thanks for the step-by-step process, i can reproduce this.

I’ll need to confirm with other FBNeo devs how this stuff is supposed to work. I don’t use reset & hiscores much so i might have misunderstood something when porting this to libretro.

2 Likes

Sorry for the late answer, it turns out i misunderstood this whole hiscore+reset behavior. It is actually intentional for hiscores to not be kept after reset : it’s like this so that the user can cancel a hiscore he doesn’t want to keep.

3 Likes

That’s not a problem then. I think I can train myself to not restart. First time trying fbneo and mame had trained me for years to check if hiscore saving works by simply restarting since it’s the quickest option to do so. Maybe something more people will run into if they make the switch.

I can see it being useful for some new option in RetroArch to “Restart Core” the system, which would close the core and load it as if the user did that manually. And the current Restart option could be renamed to “Soft Reset” to not confuse with a similar name.

I think simply renaming it to something like “Soft Reset” is fine, more accurate and avoids adding a ton of options. It didn’t occur to me that it’s a soft reset actually. The help text says “restart the content from the beginning” so you can’t really guess. And the mame core making the different decision of saving hiscore files on a soft reset just added to the confusion.

FWIW, the description for the retro_reset libretro api call (which is the one used here) is like this : https://github.com/libretro/libretro-common/blob/master/include/libretro.h#L4350-L4351

It is rather unclear if it is supposed to be a soft reset or a hard reset, however i don’t think they’d make it a specific api call if they expected the same thing as a hard reset.

Maybe it depends on the core itself. In example the SNES had a dedicated button to soft reset. Then the memory on the system was not cleanup up perfectly. But that is probably not “emulated” on an emulator or RetroArch? Just asking here. Which was even used in one game as a feature, the infamous bomb in an X-Men game. So that’s a soft reset on real hardware. Some cores do not even support Restart at the moment.

So the term could still confuse people, depending on the system. But a Hard Reset is clear, as the system is shutdown on RetroArchs side, all hooks to do stuff after closing is done, then reinitialized automatically. This would make it possible to Restart a core which do not support that functionality.

1 Like

On some old home computers the program already running could load special code at the address that was called when you did a “soft reset”, so instead of a reboot (the default behavior), you would see some secret content that was meant to be accessed by pressing reset. Demo groups/coders in particular made use of this trick all the time.

In this case a “Restart/soft reset” would technically not ‘start the content from the beginning’, just jump to a particular address in memory. I’ve got to test if this is emulated with the Hatari/UAE cores when I get to them. The only way out of it was a Cold Reboot (completely turning the system off for a sec).

1 Like