diff options
Diffstat (limited to 'engines/kyra/saveload.cpp')
-rw-r--r-- | engines/kyra/saveload.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/engines/kyra/saveload.cpp b/engines/kyra/saveload.cpp index 45d34de88e..747091d328 100644 --- a/engines/kyra/saveload.cpp +++ b/engines/kyra/saveload.cpp @@ -29,14 +29,16 @@ #include "kyra/animator.h" #include "kyra/screen.h" #include "kyra/resource.h" +#include "kyra/sound.h" -#define CURRENT_VERSION 6 +#define CURRENT_VERSION 7 // TODO: our current savefiles still use the old // flag system to check the version, we should // change that some day, but for now it works #define GF_FLOPPY (1 << 0) #define GF_TALKIE (1 << 1) +#define GF_FMTOWNS (1 << 2) namespace Kyra { void KyraEngine::loadGame(const char *fileName) { @@ -78,11 +80,15 @@ void KyraEngine::loadGame(const char *fileName) { warning("Can not load cdrom savefile for this (non cdrom) gameversion"); delete in; return; + } else if ((flags & GF_FMTOWNS) && !(_flags.platform == Common::kPlatformFMTowns)) { + warning("can not load FM-Towns savefile for this (non FM-Towns) gameversion"); + delete in; + return; } } else { warning("Make sure your savefile was from this version! (too old savefile version to detect that)"); } - + snd_playSoundEffect(0x0A); snd_playWanderScoreViaMap(0, 1); @@ -198,6 +204,10 @@ void KyraEngine::loadGame(const char *fileName) { in->readByte(); // Voice } + if (version >= 7) { + _curSfxFile = in->readByte(); + } + _screen->_disableScreen = true; loadMainScreen(8); @@ -265,7 +275,12 @@ void KyraEngine::saveGame(const char *fileName, const char *saveName) { out->writeUint32BE(MKID_BE('KYRA')); out->writeUint32BE(CURRENT_VERSION); out->write(saveName, 31); - out->writeUint32BE((_flags.isTalkie ? GF_TALKIE : GF_FLOPPY)); + if (_flags.isTalkie) + out->writeUint32BE(GF_TALKIE); + else if (_flags.platform == Common::kPlatformFMTowns) + out->writeUint32BE(GF_FMTOWNS); + else + out->writeUint32BE(GF_FLOPPY); for (int i = 0; i < 11; i++) { out->writeUint16BE(_characterList[i].sceneId); @@ -335,6 +350,8 @@ void KyraEngine::saveGame(const char *fileName, const char *saveName) { out->writeSint16BE(_lastMusicCommand); + out->writeByte(_curSfxFile); + out->flush(); // check for errors |