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

Seems, I have to bother you again.

Looks like if I change the system directory to anything other than the default one and in a cfg file I’m using:

system_directory = ":\system\someotherdirectory"

then hiscore saving (and loading) stops working.

I reverted back to the default system dir and removed the line and all is good, just thought I’d share. Curious if it’s a legit issue or if I’m wrong.

Do you even have hiscore.dat in that “other directory” slash fbneo ?

I can’t imagine how this would be a core issue anyway, whether you are using retroarch’s default folder or another folder is the same as far as the core is concerned. Make sure you are following the instructions from https://docs.libretro.com/library/fbneo/#hiscores

Yes it’s setup correctly with a hiscore.dat and everything. It was always working from when I originally opened the thread. Now what changed is that I have ton of game override files just because I setup individual overlays for the games.

It’s certainly a more complete/complex setup as I have core-overrides -> content-dir overrides -> game specific overrides.

The mere existence of a system_directory = “:\system\fbneo” line in any of those .cfg files makes it instantly not work. It’s certainly weird, tried it a dozen times now: Remove the line, everything works. Add the line, scores are not loaded/saved. No idea what’s going on behind the scenes. Is there a debug line to look for in the logs when hiscores are loaded/saved?

Like you said, maybe a retroarch issue then. I’ll just keep things in the default system directory.

I think I can explain this now.

By default the system dir is “:\system\fbneo”. If however for any reason the config option system_directory = “:\system\fbneo” creeps up anywhere in your config files, then the system dir is NOT “:\system\fbneo” but “:\system\fbneo\fbneo”, retroarch keeps appending an “fbneo” subdir so things can break unexpectedly.

Remove the system_directory option and it’s ok again.

When I saved game specific overrides just to setup my overlays, retroarch included the “system_directory” option for some reason, and I’m guessing that’s how & when hiscores stopped working.

If that’s the systemdir path set in your retroarch config, then “:\system\fbneo\fbneo\hiscore.dat” is the correct path for your hiscore.dat as said in the documentation.

1 Like