aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/savegame.cpp
diff options
context:
space:
mode:
authorColin Snover2016-08-01 09:52:12 -0500
committerColin Snover2016-08-01 10:37:14 -0500
commitd5d42d5066df7eb4c11bf703506aea54af18ec93 (patch)
treea06085f21574f3cac9fecf0d0d3297ea461582f0 /engines/sci/engine/savegame.cpp
parent6d1f8e8c876983f22e94ba8966b02d8cc088d2a5 (diff)
downloadscummvm-rg350-d5d42d5066df7eb4c11bf703506aea54af18ec93.tar.gz
scummvm-rg350-d5d42d5066df7eb4c11bf703506aea54af18ec93.tar.bz2
scummvm-rg350-d5d42d5066df7eb4c11bf703506aea54af18ec93.zip
SCI32: Implement bitmap save routine
Diffstat (limited to 'engines/sci/engine/savegame.cpp')
-rw-r--r--engines/sci/engine/savegame.cpp47
1 files changed, 35 insertions, 12 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) {