SCI: fix saving in mother goose sci0 (bug #6486)
This commit is contained in:
parent
98dbb8070b
commit
d4de84bf8b
2 changed files with 15 additions and 1 deletions
|
@ -896,12 +896,25 @@ reg_t kRestoreGame(EngineState *s, int argc, reg_t *argv) {
|
||||||
gamestate_restore(s, in);
|
gamestate_restore(s, in);
|
||||||
delete in;
|
delete in;
|
||||||
|
|
||||||
if (g_sci->getGameId() == GID_MOTHERGOOSE256) {
|
switch (g_sci->getGameId()) {
|
||||||
|
case GID_MOTHERGOOSE:
|
||||||
|
// WORKAROUND: Mother Goose SCI0
|
||||||
|
// Script 200 / rm200::newRoom will set global C5h directly right after creating a child to the
|
||||||
|
// current number of children plus 1.
|
||||||
|
// We can't trust that global, that's why we set the actual savedgame id right here directly after
|
||||||
|
// restore a saved game.
|
||||||
|
// If we didn't, the game would always save to a new slot
|
||||||
|
s->variables[VAR_GLOBAL][0xC5].setOffset(SAVEGAMEID_OFFICIALRANGE_START + savegameId);
|
||||||
|
break;
|
||||||
|
case GID_MOTHERGOOSE256:
|
||||||
// WORKAROUND: Mother Goose SCI1/SCI1.1 does some weird things for
|
// WORKAROUND: Mother Goose SCI1/SCI1.1 does some weird things for
|
||||||
// saving a previously restored game.
|
// saving a previously restored game.
|
||||||
// We set the current savedgame-id directly and remove the script
|
// We set the current savedgame-id directly and remove the script
|
||||||
// code concerning this via script patch.
|
// code concerning this via script patch.
|
||||||
s->variables[VAR_GLOBAL][0xB3].setOffset(SAVEGAMEID_OFFICIALRANGE_START + savegameId);
|
s->variables[VAR_GLOBAL][0xB3].setOffset(SAVEGAMEID_OFFICIALRANGE_START + savegameId);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
s->r_acc = TRUE_REG;
|
s->r_acc = TRUE_REG;
|
||||||
|
|
|
@ -511,6 +511,7 @@ void SciEngine::patchGameSaveRestore() {
|
||||||
case GID_HOYLE1: // gets confused, although the game doesnt support saving/restoring at all
|
case GID_HOYLE1: // gets confused, although the game doesnt support saving/restoring at all
|
||||||
case GID_HOYLE2: // gets confused, see hoyle1
|
case GID_HOYLE2: // gets confused, see hoyle1
|
||||||
case GID_JONES: // gets confused, when we patch us in, the game is only able to save to 1 slot, so hooking is not required
|
case GID_JONES: // gets confused, when we patch us in, the game is only able to save to 1 slot, so hooking is not required
|
||||||
|
case GID_MOTHERGOOSE: // mother goose EGA saves/restores directly and has no save/restore dialogs
|
||||||
case GID_MOTHERGOOSE256: // mother goose saves/restores directly and has no save/restore dialogs
|
case GID_MOTHERGOOSE256: // mother goose saves/restores directly and has no save/restore dialogs
|
||||||
case GID_PHANTASMAGORIA: // has custom save/load code
|
case GID_PHANTASMAGORIA: // has custom save/load code
|
||||||
case GID_SHIVERS: // has custom save/load code
|
case GID_SHIVERS: // has custom save/load code
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue