libretro / libretro/RetroArch

[Feature Request] Dynamic Save States

Open
#15,867 9 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C
Stars
14.1k
Forks
2.2k
Avg merge
7h 35m
Merged PRs (30d)
51

Description

First and foremost consider this:

  • Only RetroArch bugs should be filed here. Not core bugs or game bugs
  • This is not a forum or a help section, this is strictly developer oriented

Description

Alright, last idea I'm posting here for a while. Very pie in the sky idea, and one i've considered tinkering with in rust via: https://www.retroreversing.com/CreateALibRetroFrontEndInRust.

Basically, it's sort of a less jarring, more performant, and more natural feeling alternative to rewind. I call it "Dynamic Save States" or dynamic checkpoints. The idea is that the game automatically makes savestates during moments it determines are "safe", rather than a set timeout (like every 5 minutes). Safety is determined by "not a lot of motion on screen" and "no controller inputs" for roughly a second.

"Not a lot of motion on screen" is based on the principle that libretro already handles entire frames of the core's video buffer in memory. And these buffers, I imagine (but don't know for sure) are relatively small at 320x240 at the smallest and 720 x480 at the largest in terms of images.

So the idea is to save a copy of the prior video frame in memory in addition to the current. If no controller input is taking place and prior video frame is roughly equal (like 70 or 80%) to the current video frame for sixty frames (that is one second), then create a save state. Some notification or millisecond countdown should occur when this happens and/or begins to happen, etc.

[Expected Result]
The end result is that the illusion of checkpoints in modern games is created in just about any context, the user doesn't have to micro manage saves to undo mistakes, nor do they have to put such a heavy load on their system making MANY save states per second with rewind. This is of course, as with any quality of life or gameplay affecting option, optional.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Begin by reviewing RetroArch's existing rewind and save-state paths and the libretro video-buffer handling described in the issue. Done would mean an optional dynamic-checkpoint feature with the proposed input and frame-stability trigger plus a notification or countdown, but the issue does not identify files, tests, or an implementation boundary.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
frontend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.