diff options
author | Colin Snover | 2016-08-01 09:52:12 -0500 |
---|---|---|
committer | Colin Snover | 2016-08-01 10:37:14 -0500 |
commit | d5d42d5066df7eb4c11bf703506aea54af18ec93 (patch) | |
tree | a06085f21574f3cac9fecf0d0d3297ea461582f0 /engines | |
parent | 6d1f8e8c876983f22e94ba8966b02d8cc088d2a5 (diff) | |
download | scummvm-rg350-d5d42d5066df7eb4c11bf703506aea54af18ec93.tar.gz scummvm-rg350-d5d42d5066df7eb4c11bf703506aea54af18ec93.tar.bz2 scummvm-rg350-d5d42d5066df7eb4c11bf703506aea54af18ec93.zip |
SCI32: Implement bitmap save routine
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sci/engine/savegame.cpp | 47 | ||||
-rw-r--r-- | engines/sci/engine/segment.h | 4 |
2 files changed, 38 insertions, 13 deletions
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index 62f9c5aada..d86af50f9a 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -159,16 +159,22 @@ void syncWithSerializer(Common::Serializer &s, SciString &obj) { } } -void syncWithSerializer(Common::Serializer &s, SciBitmap *obj) { - debug("TODO: Sync bitmap"); - -// if (s.isSaving()) { -// size = obj.getSize(); -// s.syncAsUint32LE(size); -// } else { -// s.syncAsUint32LE(size); -// obj.setSize(size); -// } +void syncWithSerializer(Common::Serializer &s, SciBitmap *&obj) { + bool hasEntry; + if (s.isSaving()) { + hasEntry = obj != nullptr; + } + s.syncAsByte(hasEntry); + + if (hasEntry) { + if (s.isLoading()) { + obj = new SciBitmap; + } + + obj->saveLoadWithSerializer(s); + } else { + obj = nullptr; + } } #endif @@ -703,12 +709,29 @@ void StringTable::saveLoadWithSerializer(Common::Serializer &ser) { } void BitmapTable::saveLoadWithSerializer(Common::Serializer &ser) { - if (ser.getVersion() < 36) + if (ser.getVersion() < 36) { return; + } - // TODO: Should only include bitmaps with gc = true sync_Table(ser, *this); } + +void SciBitmap::saveLoadWithSerializer(Common::Serializer &s) { + if (s.getVersion() < 36) { + return; + } + + s.syncAsByte(_gc); + s.syncAsUint32LE(_dataSize); + if (s.isLoading()) { + _data = (byte *)malloc(_dataSize); + } + s.syncBytes(_data, _dataSize); + + if (s.isLoading()) { + _buffer = Buffer(getWidth(), getHeight(), getPixels()); + } +} #endif void GfxPalette::palVarySaveLoadPalette(Common::Serializer &s, Palette *palette) { diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h index 8e7cf9ef06..a99f61333b 100644 --- a/engines/sci/engine/segment.h +++ b/engines/sci/engine/segment.h @@ -541,7 +541,7 @@ class BitmapTable; * A convenience class for creating and modifying in-memory * bitmaps. */ -class SciBitmap { +class SciBitmap : public Common::Serializable { byte *_data; int _dataSize; Buffer _buffer; @@ -773,6 +773,8 @@ public: } return _data + getHunkPaletteOffset(); } + + virtual void saveLoadWithSerializer(Common::Serializer &ser); }; struct BitmapTable : public SegmentObjTable<SciBitmap *> { |