aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/he/sprite_he.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/scumm/he/sprite_he.cpp')
-rw-r--r--engines/scumm/he/sprite_he.cpp137
1 files changed, 68 insertions, 69 deletions
diff --git a/engines/scumm/he/sprite_he.cpp b/engines/scumm/he/sprite_he.cpp
index bef1c0b5eb..16c3b50365 100644
--- a/engines/scumm/he/sprite_he.cpp
+++ b/engines/scumm/he/sprite_he.cpp
@@ -1389,80 +1389,79 @@ void Sprite::processImages(bool arg) {
}
}
-void Sprite::saveOrLoadSpriteData(Serializer *s) {
- static const SaveLoadEntry spriteEntries[] = {
- MKLINE(SpriteInfo, id, sleInt32, VER(48)),
- MKLINE(SpriteInfo, zorder, sleInt32, VER(48)),
- MKLINE(SpriteInfo, flags, sleInt32, VER(48)),
- MKLINE(SpriteInfo, image, sleInt32, VER(48)),
- MKLINE(SpriteInfo, imageState, sleInt32, VER(48)),
- MKLINE(SpriteInfo, group, sleInt32, VER(48)),
- MKLINE(SpriteInfo, palette, sleInt32, VER(48)),
- MKLINE(SpriteInfo, priority, sleInt32, VER(48)),
- MKLINE(SpriteInfo, bbox.left, sleInt32, VER(48)),
- MKLINE(SpriteInfo, bbox.top, sleInt32, VER(48)),
- MKLINE(SpriteInfo, bbox.right, sleInt32, VER(48)),
- MKLINE(SpriteInfo, bbox.bottom, sleInt32, VER(48)),
- MKLINE(SpriteInfo, dx, sleInt32, VER(48)),
- MKLINE(SpriteInfo, dy, sleInt32, VER(48)),
- MKLINE(SpriteInfo, pos.x, sleInt32, VER(48)),
- MKLINE(SpriteInfo, pos.y, sleInt32, VER(48)),
- MKLINE(SpriteInfo, tx, sleInt32, VER(48)),
- MKLINE(SpriteInfo, ty, sleInt32, VER(48)),
- MKLINE(SpriteInfo, userValue, sleInt32, VER(48)),
- MKLINE(SpriteInfo, curImageState, sleInt32, VER(48)),
- MKLINE(SpriteInfo, curImage, sleInt32, VER(48)),
- MKLINE(SpriteInfo, imglistNum, sleInt32, VER(48)),
- MKLINE(SpriteInfo, shadow, sleInt32, VER(48)),
- MKLINE(SpriteInfo, imageStateCount, sleInt32, VER(48)),
- MKLINE(SpriteInfo, angle, sleInt32, VER(48)),
- MKLINE(SpriteInfo, scale, sleInt32, VER(48)),
- MKLINE(SpriteInfo, animProgress, sleInt32, VER(48)),
- MKLINE(SpriteInfo, curAngle, sleInt32, VER(48)),
- MKLINE(SpriteInfo, curScale, sleInt32, VER(48)),
- MKLINE(SpriteInfo, curImgFlags, sleInt32, VER(48)),
- MKLINE(SpriteInfo, animIndex, sleInt32, VER(48)),
- MKLINE(SpriteInfo, animSpeed, sleInt32, VER(48)),
- MKLINE(SpriteInfo, sourceImage, sleInt32, VER(48)),
- MKLINE(SpriteInfo, maskImage, sleInt32, VER(48)),
- MKLINE(SpriteInfo, zbufferImage, sleInt32, VER(48)),
- MKLINE(SpriteInfo, classFlags, sleInt32, VER(48)),
- MKLINE(SpriteInfo, imgFlags, sleInt32, VER(48)),
- MKLINE(SpriteInfo, conditionBits, sleInt32, VER(48)),
- MKEND()
- };
-
- static const SaveLoadEntry spriteGroupEntries[] = {
- MKLINE(SpriteGroup, bbox.left, sleInt32, VER(48)),
- MKLINE(SpriteGroup, bbox.top, sleInt32, VER(48)),
- MKLINE(SpriteGroup, bbox.right, sleInt32, VER(48)),
- MKLINE(SpriteGroup, bbox.bottom, sleInt32, VER(48)),
- MKLINE(SpriteGroup, priority, sleInt32, VER(48)),
- MKLINE(SpriteGroup, flags, sleInt32, VER(48)),
- MKLINE(SpriteGroup, tx, sleInt32, VER(48)),
- MKLINE(SpriteGroup, ty, sleInt32, VER(48)),
- MKLINE(SpriteGroup, image, sleInt32, VER(48)),
- MKLINE(SpriteGroup, scaling, sleInt32, VER(48)),
- MKLINE(SpriteGroup, scale_x_ratio_mul, sleInt32, VER(48)),
- MKLINE(SpriteGroup, scale_x_ratio_div, sleInt32, VER(48)),
- MKLINE(SpriteGroup, scale_y_ratio_mul, sleInt32, VER(48)),
- MKLINE(SpriteGroup, scale_y_ratio_div, sleInt32, VER(48)),
- MKEND()
- };
-
- if (s->getVersion() >= VER(64)) {
- s->saveLoadArrayOf(_spriteTable, _varNumSprites + 1, sizeof(_spriteTable[0]), spriteEntries);
- s->saveLoadArrayOf(_spriteGroups, _varNumSpriteGroups + 1, sizeof(_spriteGroups[0]), spriteGroupEntries);
+static void syncWithSerializer(Common::Serializer &s, SpriteInfo &si) {
+ s.syncAsSint32LE(si.id, VER(48));
+ s.syncAsSint32LE(si.zorder, VER(48));
+ s.syncAsSint32LE(si.flags, VER(48));
+ s.syncAsSint32LE(si.image, VER(48));
+ s.syncAsSint32LE(si.imageState, VER(48));
+ s.syncAsSint32LE(si.group, VER(48));
+ s.syncAsSint32LE(si.palette, VER(48));
+ s.syncAsSint32LE(si.priority, VER(48));
+ s.syncAsSint32LE(si.bbox.left, VER(48));
+ s.syncAsSint32LE(si.bbox.top, VER(48));
+ s.syncAsSint32LE(si.bbox.right, VER(48));
+ s.syncAsSint32LE(si.bbox.bottom, VER(48));
+ s.syncAsSint32LE(si.dx, VER(48));
+ s.syncAsSint32LE(si.dy, VER(48));
+ s.syncAsSint32LE(si.pos.x, VER(48));
+ s.syncAsSint32LE(si.pos.y, VER(48));
+ s.syncAsSint32LE(si.tx, VER(48));
+ s.syncAsSint32LE(si.ty, VER(48));
+ s.syncAsSint32LE(si.userValue, VER(48));
+ s.syncAsSint32LE(si.curImageState, VER(48));
+ s.syncAsSint32LE(si.curImage, VER(48));
+ s.syncAsSint32LE(si.imglistNum, VER(48));
+ s.syncAsSint32LE(si.shadow, VER(48));
+ s.syncAsSint32LE(si.imageStateCount, VER(48));
+ s.syncAsSint32LE(si.angle, VER(48));
+ s.syncAsSint32LE(si.scale, VER(48));
+ s.syncAsSint32LE(si.animProgress, VER(48));
+ s.syncAsSint32LE(si.curAngle, VER(48));
+ s.syncAsSint32LE(si.curScale, VER(48));
+ s.syncAsSint32LE(si.curImgFlags, VER(48));
+ s.syncAsSint32LE(si.animIndex, VER(48));
+ s.syncAsSint32LE(si.animSpeed, VER(48));
+ s.syncAsSint32LE(si.sourceImage, VER(48));
+ s.syncAsSint32LE(si.maskImage, VER(48));
+ s.syncAsSint32LE(si.zbufferImage, VER(48));
+ s.syncAsSint32LE(si.classFlags, VER(48));
+ s.syncAsSint32LE(si.imgFlags, VER(48));
+ s.syncAsSint32LE(si.conditionBits, VER(48));
+}
+
+static void syncWithSerializer(Common::Serializer &s, SpriteGroup &sg) {
+ s.syncAsSint32LE(sg.bbox.left, VER(48));
+ s.syncAsSint32LE(sg.bbox.top, VER(48));
+ s.syncAsSint32LE(sg.bbox.right, VER(48));
+ s.syncAsSint32LE(sg.bbox.bottom, VER(48));
+ s.syncAsSint32LE(sg.priority, VER(48));
+ s.syncAsSint32LE(sg.flags, VER(48));
+ s.syncAsSint32LE(sg.tx, VER(48));
+ s.syncAsSint32LE(sg.ty, VER(48));
+ s.syncAsSint32LE(sg.image, VER(48));
+ s.syncAsSint32LE(sg.scaling, VER(48));
+ s.syncAsSint32LE(sg.scale_x_ratio_mul, VER(48));
+ s.syncAsSint32LE(sg.scale_x_ratio_div, VER(48));
+ s.syncAsSint32LE(sg.scale_y_ratio_mul, VER(48));
+ s.syncAsSint32LE(sg.scale_y_ratio_div, VER(48));
+}
+
+void Sprite::saveLoadWithSerializer(Common::Serializer &s) {
+ if (s.getVersion() >= VER(64)) {
+ s.syncArray(_spriteTable, _varNumSprites + 1, syncWithSerializer);
+ s.syncArray(_spriteGroups, _varNumSpriteGroups + 1, syncWithSerializer);
} else {
- s->saveLoadArrayOf(_activeSpritesTable, _varNumSprites, sizeof(_activeSpritesTable[0]), spriteEntries);
- s->saveLoadArrayOf(_spriteTable, _varNumSprites, sizeof(_spriteTable[0]), spriteEntries);
- s->saveLoadArrayOf(_spriteGroups, _varNumSpriteGroups, sizeof(_spriteGroups[0]), spriteGroupEntries);
+ // TODO: This had been bogus, what is it really supposed to do?
+// s->saveLoadArrayOf(_activeSpritesTable, _varNumSprites, sizeof(_activeSpritesTable[0]), spriteEntries);
+ s.syncArray(*_activeSpritesTable, _varNumSprites, syncWithSerializer);
+ s.syncArray(_spriteTable, _varNumSprites, syncWithSerializer);
+ s.syncArray(_spriteGroups, _varNumSpriteGroups, syncWithSerializer);
}
// Reset active sprite table
- if (s->isLoading())
+ if (s.isLoading())
_numSpritesToProcess = 0;
-
}
} // End of namespace Scumm