diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index 610698fbd92..ab355cebb44 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 026a2ff4050..ab4a2c9c1a3 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 93d61ba22e2..347ecb9424b 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;