mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-16 06:39:17 +00:00
SCI: Fix loading SCI32 games
The frames/items in GfxFrameout need to be cleared upon loading
This commit is contained in:
parent
8ef4594f9b
commit
ee09af6a12
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user