SCI: Fix loading SCI32 games

The frames/items in GfxFrameout need to be cleared upon loading
This commit is contained in:
Matthew Hoops 2011-02-14 22:38:12 -05:00
parent 8ef4594f9b
commit ee09af6a12
3 changed files with 22 additions and 3 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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;