schellingb / dosbox-pure

DOSBox Pure is a new fork of DOSBox built for RetroArch/Libretro aiming for simplicity and ease of use.
GNU General Public License v2.0
731 stars 61 forks source link

[Feature request] Add a Load/Save menu that displays all previous save states #467

Closed PoloniumRain closed 5 months ago

PoloniumRain commented 5 months ago

Many emulators have some form of 'Load' menu that displays all your previous saves. These are extremely useful. The ScummVM core is a good example of this. If you press the Enter key when using this core it will have menus for 'Save' and 'Load', although both of these menu screens could probably just be combined into one screen...

For example, here's a mockup of how it could look within DOSBox-Pure:

LoadSave

Ideally a thumbnail image for each save would be very helpful, and even better would be if these thumbnails used the superior AVIF image format to save significant space.

Obviously it's possible to create multiple save states for a single game by using the RetroArch save state slots, which allow for up to 999 slots. But this method is awkward to use and i'm ALWAYS accidentally saving over stuff, because i've accidentally changed the save slot or forgot what slot i'm using. It's just not a very user friendly system and lacks any kind of interface, so a lot of the time you'll have load each slot to find the one you're looking for. The ScummVM save/load menu is so much more useful, especailly when you're coming back to a game that you've not played in a long time. DBP would really benefit from something similar. Implementing this menu may also benefit DBP if it was to ever get a standalone version.

schellingb commented 5 months ago

This is purely a frontend issue. DOSBox Pure is just a libretro core, so the user interface for saving and loading is out of our control. If you want improvements in that regard in RetroArch, you should ask there.

As a libretro core we have no knowledge about how the frontend handles saving. The core doesn't know where saves are saved, in what format or what saves exist, etc. We couldn't hook into RetroArch's save states (or whatever frontend the user is using, it might not be RetroArch). And this is one of the benefits of being a libretro core, there is no need to make all these things because the frontend does it already - and in a unified way for all cores. Which is great for users and core developers :-) Adding an independent in-core save system would be fully independent of the existing saving which would be rather confusing I'd say.

Yes, we partially do our own things when it comes to controls. But this is to battle shortcomings offered by the libretro API (which was originally intended and designed for console emulators not computer emulators). Saving/loading on the other hand has all the functionality we need in the API so it's best to leave things to the frontend.

ScummVM is probably the only core that has its own save/load system, I think for a reason. It's special in this regard because it emulates an engine that offers a very specific "save game" and "load game" function. So even as a libretro core it needs to present some save/load functionality to the games. I doubt any other core does this just because RetroArch doesn't have the most perfect user interface for it just yet.

PoloniumRain commented 5 months ago

Ah right thanks for explaining. That's a shame but i kinda suspected this might be the case... But i was hoping that ScummVM was making use of an RA feature for it's saving/loading. I now see that the standalone ScummVM has the same saving/loading implementation, because like you say, it's basically a game engine. Oh well, i'll request this feature for RetroArch then, and it would be better to have it for all cores anyway!