Composer engine saving/loading now functions, with only audio sync issues remaining, so it seems a good time to discuss the roadmap for the main body of the task.
My design is as follows:
There will be a new entry added to the EngineFeature enum: kSupportsAnytimeSaving.
Engines which support anytime saving will return true when queried about this, and implement doQuickSave(int slot, const Common::String &desc). and doQuickLoad(int slot). It will likely also be necessary for these engines to support listSaves() in order to allow the user to select a save to load.
For cases where the engine only disallows saving to prevent cheating, these functions will simply call saveGameState() and loadGameState() without regard to the status of canSaveGameCurrently(). For more complex cases, where the engine disallows saving because it doesn’t implement saving for its current state, these functions will, of course, have to implement saving in those states, which can potentially require some extensive engine refactoring.
When I have the audio issues worked out of the composer engine, it should immediately be capable of supporting anytime saving, so the next step will just be creating those wrapper functions. After that, I intend to move on to the SCUMM engine module and make it ready for anytime saving.
After that, we’ll see…