[Scummvm-devel] Global menu save/load dialogs
Johannes Schickel
lordhoto at gmail.com
Tue Nov 11 13:48:15 CET 2008
On Tuesday 11 November 2008 11:17:00 Max Horn wrote:
> Could you please elaborate? What needs interrupting? The animation
> code is not run while the GUI is up. Do you mean you need to pause
> timers?
A 'simple' example from HoF:
When processing a mouse click in KyraEngine_HoF::handleInput, it could very
vell be that we run some script in the following sub functions:
KyraEngine_HoF::runSceneScript2
KyraEngine_HoF::handleInputUnkSub
Both could execute some script, which maybe makes the character move towards
a scene exit, create some items in off scene rooms etc.
Now this is all done via the functions named above. So I'm unable to create
a proper savegame at that point, since there is no way to go back to those
functions on save load.
On the other hand I simply can not allow loading at those points, since
after loading, it would return to script execution in those functions. So
there's a chance of doing really unexpected things, i.e. trying to execute
stuff from the new room scripts, accessing bad memory etc.
The original did not allow save/load in those cases at all, to be precise it
did not show up the menu.
Now on the other hand in some branches of KyraEngine_HoF::handleInput, it
might very vell be possible to allow saving/loading, for example when
KyraEngine_HoF::handleInput calls the KyraEngine_HoF::inputSceneChange
function, which basically just moves the character to a given position.
Of course KyraEngine_HoF::inputSceneChange might change a room somewhere in
some called function, where saving/loading is not possible at all.
To prevent such accidental saves/loads in the original, the original engine
(as we do), has some handling for input checks in those called functions
and when there's some mouse input event found, it would just return to the
caller, thus allow a clean state on save/load.
I also can not add faked input events in pauseEngineIntern, since those
would for example skip dialog lines when the GMM is opened up in a dialog
=> bad. So the whole pauseEngine thingy is not really useful to slove that.
I *could* of course search through all the code, and check all places where
saving is possible and set the '_isSaveAllowed' flag of KyraEngine_v1 to
true, but that would be major work and it would have to be done very
carefully. So I'm currently only enabling save/load in the safe parts of
the run loop of the kyra engine.
// Johannes
More information about the Scummvm-devel
mailing list