[Scummvm-tracker] [ScummVM :: Bugs] #11440: MOHAWK: RIVEN: Autosave no longer tests against game state at time of exit call. (was: MOHAWK: RIVEN: Autosave doesn’t test against game state at time of exit call.)

ScummVM :: Bugs trac at scummvm.org
Sun May 17 03:00:33 UTC 2020


#11440: MOHAWK: RIVEN: Autosave no longer tests against game state at time of exit
call.
---------------------+----------------------------
  Reporter:  macca8  |      Owner:  (none)
      Type:  defect  |     Status:  new
  Priority:  normal  |  Component:  Engine: Mohawk
Resolution:          |   Keywords:
      Game:  Riven   |
---------------------+----------------------------
Changes (by macca8):

 * summary:
     MOHAWK: RIVEN: Autosave doesn’t test against game state at time of
     exit call.
     =>
     MOHAWK: RIVEN: Autosave no longer tests against game state at time of
     exit call.


Old description:

> This is a change from previous behaviour, caused by one of the changes in
> commit 40cb2f8 in resolving #11399, which affects the handling of
> autosaves when exiting during a cutscene.
>
> Current Daily Build: 2.2.0git4606-g900b86ff7f (21 April 2020)
> Game Version: English, 5-CD (contains v1.02 patch files)
> Platform: Intel Mac (OS X 10.6.8, 10.11.6)
>
> For the record, when exiting during a cutscene, the game state
> transitions from non-interactive (when the player makes the exit call) to
> interactive (after skipping to the next available fully-interactive
> frame), before exiting.
>
> Confirmation of this can be observed by the disabled Save/Load buttons in
> the GMM, and the brief display of the next fully-interactive frame before
> the game exits. Cutscenes containing an embedded interactive element
> (Gehn visits) differ slightly in that they briefly pause the current
> frame, instead of displaying the next available frame, but still complete
> the transition to interactive before exit.
>
> Understanding this exit behaviour makes predicting autosave-on-exit
> performance reliable, regardless of game state… if non-interactive, no
> save is performed, and if interactive, a save is performed (except where
> autosaving is disabled by default, such as the Start Menu).
>
> The role of autosaving is to track the player’s progress. That progress
> stops when the player elects to exit the game, so autosaving should test
> against the prevailing game state when that call is made.
>
> There’s also an expectation that if manual saving is disabled, then
> autosaving is also disabled.
>
> Current autosave-on-exit behaviour confirms that the game completes its
> transition to an interactive state before it’s called. This behaviour
> should be corrected, since it skips gameplay not experienced by the
> player prior to the exit call.
>
> Player’s expectations aside, for those dependent on autosaving, this
> unexpected overwrite can make some cutscenes inaccessible upon restart
> (for example, if interacting with Gehn).
>
> Fortunately, this issue can be resolved by moving the
> ''saveAutosaveIfEnabled()'' method to where it can be called while the
> game is still in a non-interactive state.
>
> We already know that, prior to the fix applied in #11399, Quit/RTL calls
> from keyboard & GMM (via Ctrl+F5) were handled correctly by
> ''saveAutosaveIfEnabled()'' when called from within the
> ''processInput()'' method, inside ''doFrame()''.
>
> Now positioned outside the ''doFrame()'' method,
> ''saveAutosaveIfEnabled()'' is not called until after the game has
> transitioned to an interactive state, before exiting. As a result,
> ''canSaveAutosaveCurrently()'' returns true, instead of the expected
> false, prompting the unwanted autosave.
>
> Would repositioning ''saveAutosaveIfEnabled()'' back inside the
> ''doFrame()'' method, but placing it immediately after ''processInput()''
> and contained within an ''if hasGameEnded()'' statement - completing the
> autosave call before ''doFrame()'' continues, as was the case previously
> - possibly fix this issue?

New description:

 This is a change from previously correct autosave-on-exit behaviour
 (before rebinding F5 to open the GMM was implemented), subsequently caused
 by one of the changes in commit 40cb2f8 in resolving #11399, which now
 adversely affects the handling of autosaves when exiting during a
 cutscene.

 Current Daily Build: 2.2.0git4606-g900b86ff7f (21 April 2020)
 Game Version: English, 5-CD (contains v1.02 patch files)
 Platform: Intel Mac (OS X 10.6.8, 10.11.6)

 For the record, when exiting during a cutscene, the game state transitions
 from non-interactive (when the player makes the exit call) to interactive
 (after skipping to the next available fully-interactive frame), before
 exiting.

 Confirmation of this can be observed by the disabled Save/Load buttons in
 the GMM, and the brief display of the next fully-interactive frame before
 the game exits. Cutscenes containing an embedded interactive element (Gehn
 visits) differ slightly in that they briefly pause the current frame,
 instead of displaying the next available frame, but still complete the
 transition to interactive before exit.

 Understanding this exit behaviour makes predicting autosave-on-exit
 performance reliable, regardless of game state… if non-interactive, no
 save is performed, and if interactive, a save is performed (except where
 autosaving is disabled by default, such as the Start Menu).

 The role of autosaving is to track the player’s progress. That progress
 stops when the player elects to exit the game, so autosaving should test
 against the prevailing game state when that call is made.

 There’s also an expectation that if manual saving is disabled, then
 autosaving is also disabled.

 Current autosave-on-exit behaviour confirms that the game completes its
 transition to an interactive state before it’s called. This behaviour
 should be corrected, since it skips gameplay not experienced by the player
 prior to the exit call.

 Player’s expectations aside, for those dependent on autosaving, this
 unexpected overwrite can make some cutscenes inaccessible upon restart
 (for example, if interacting with Gehn).

 Fortunately, this issue can be resolved by moving the
 ''saveAutosaveIfEnabled()'' method to where it can be called while the
 game is still in a non-interactive state.

 We already know that, prior to the fix applied in #11399, Quit/RTL calls
 from keyboard & GMM (via Ctrl+F5) were handled correctly by
 ''saveAutosaveIfEnabled()'' when called from within the ''processInput()''
 method, inside ''doFrame()''.

 Now positioned outside the ''doFrame()'' method,
 ''saveAutosaveIfEnabled()'' is not called until after the game has
 transitioned to an interactive state, before exiting. As a result,
 ''canSaveAutosaveCurrently()'' returns true, instead of the expected
 false, prompting the unwanted autosave.

 Would repositioning ''saveAutosaveIfEnabled()'' back inside the
 ''doFrame()'' method, but placing it immediately after ''processInput()''
 and contained within an ''if hasGameEnded()'' statement - completing the
 autosave call before ''doFrame()'' continues, as was the case previously -
 possibly fix this issue?

--
-- 
Ticket URL: <https://bugs.scummvm.org/ticket/11440#comment:2>
ScummVM :: Bugs <https://bugs.scummvm.org>
ScummVM


More information about the Scummvm-tracker mailing list