diff options
author | Matthew Hoops | 2011-02-14 22:38:12 -0500 |
---|---|---|
committer | Matthew Hoops | 2011-02-14 22:38:12 -0500 |
commit | ee09af6a12e26f100a9a0457dcb552707abd4288 (patch) | |
tree | 4899f6bc8b41a926ae89ecbc3c5fd38fac54ee03 | |
parent | 8ef4594f9b9016f6b93fc176dd8aea8bdd7d85cf (diff) | |
download | scummvm-rg350-ee09af6a12e26f100a9a0457dcb552707abd4288.tar.gz scummvm-rg350-ee09af6a12e26f100a9a0457dcb552707abd4288.tar.bz2 scummvm-rg350-ee09af6a12e26f100a9a0457dcb552707abd4288.zip |
SCI: Fix loading SCI32 games
The frames/items in GfxFrameout need to be cleared upon loading
-rw-r--r-- | engines/sci/engine/savegame.cpp | 16 | ||||
-rw-r--r-- | engines/sci/graphics/frameout.cpp | 6 | ||||
-rw-r--r-- | engines/sci/graphics/frameout.h | 3 |
3 files changed, 22 insertions, 3 deletions
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index 610698fbd9..ab355cebb4 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -47,6 +47,10 @@ #include "sci/sound/audio.h" #include "sci/sound/music.h" +#ifdef ENABLE_SCI32 +#include "sci/graphics/frameout.h" +#endif + namespace Sci { @@ -130,6 +134,13 @@ void SegManager::saveLoadWithSerializer(Common::Serializer &s) { // Reset _scriptSegMap, to be restored below _scriptSegMap.clear(); + +#ifdef ENABLE_SCI32 + // Clear any planes/screen items currently showing so they + // don't show up after the load. + if (getSciVersion() >= SCI_VERSION_2) + g_sci->_gfxFrameout->clear(); +#endif } s.skip(4, VER(14), VER(18)); // OBSOLETE: Used to be _exportsAreWide @@ -166,16 +177,15 @@ void SegManager::saveLoadWithSerializer(Common::Serializer &s) { _heap[i] = NULL; // set as freed continue; } - } #ifdef ENABLE_SCI32 - else if (type == SEG_TYPE_ARRAY) { + } else if (type == SEG_TYPE_ARRAY) { // Set the correct segment for SCI32 arrays _arraysSegId = i; } else if (type == SEG_TYPE_STRING) { // Set the correct segment for SCI32 strings _stringSegId = i; - } #endif + } if (s.isLoading()) mobj = SegmentObj::createSegmentObj(type); diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp index 026a2ff405..ab4a2c9c1a 100644 --- a/engines/sci/graphics/frameout.cpp +++ b/engines/sci/graphics/frameout.cpp @@ -58,6 +58,12 @@ GfxFrameout::GfxFrameout(SegManager *segMan, ResourceManager *resMan, GfxCoordAd GfxFrameout::~GfxFrameout() { } +void GfxFrameout::clear() { + _screenItems.clear(); + _planes.clear(); + _planePictures.clear(); +} + void GfxFrameout::kernelAddPlane(reg_t object) { PlaneEntry newPlane; diff --git a/engines/sci/graphics/frameout.h b/engines/sci/graphics/frameout.h index 93d61ba22e..347ecb9424 100644 --- a/engines/sci/graphics/frameout.h +++ b/engines/sci/graphics/frameout.h @@ -28,6 +28,8 @@ namespace Sci { +class GfxPicture; + struct PlaneEntry { reg_t object; uint16 priority; @@ -99,6 +101,7 @@ public: void addPlanePicture(reg_t object, GuiResourceId pictureId, uint16 startX); void deletePlanePictures(reg_t object); + void clear(); private: SegManager *_segMan; |