aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/player.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2014-04-22 23:00:41 -0400
committerPaul Gilbert2014-04-22 23:00:41 -0400
commit0e9e6cda40ee0bf739e6c7a6320a81307df7c8b9 (patch)
treed69131833413f6bd75ef84e95c64cc54da568e8e /engines/mads/player.cpp
parent3f1a49b567aac10fe8a195f7a2b8e07603470a72 (diff)
downloadscummvm-rg350-0e9e6cda40ee0bf739e6c7a6320a81307df7c8b9.tar.gz
scummvm-rg350-0e9e6cda40ee0bf739e6c7a6320a81307df7c8b9.tar.bz2
scummvm-rg350-0e9e6cda40ee0bf739e6c7a6320a81307df7c8b9.zip
MADS: Beginnings of savegame synchronisation
Diffstat (limited to 'engines/mads/player.cpp')
-rw-r--r--engines/mads/player.cpp72
1 files changed, 70 insertions, 2 deletions
diff --git a/engines/mads/player.cpp b/engines/mads/player.cpp
index cc482c0608..3b727b397e 100644
--- a/engines/mads/player.cpp
+++ b/engines/mads/player.cpp
@@ -48,7 +48,7 @@ Player::Player(MADSEngine *vm): _vm(vm) {
_priorVisible = false;
_needToWalk = false;
_readyToWalk = false;
- _visible3 = false;
+ _beenVisible = false;
_loadsFirst = false;
_loadedFirst = false;
_walkAnywhere = false;
@@ -337,7 +337,7 @@ void Player::update() {
}
}
- _visible3 = _visible;
+ _beenVisible |= _visible;
_priorVisible = _visible;
_forceRefresh = false;
}
@@ -691,4 +691,72 @@ void Player::releasePlayerSprites() {
_spritesChanged = true;
}
+void Player::synchronize(Common::Serializer &s) {
+ s.syncAsByte(_visible);
+ s.syncAsByte(_priorVisible);
+ s.syncAsByte(_beenVisible);
+ s.syncAsByte(_moving);
+ s.syncAsByte(_stepEnabled);
+ s.syncAsSint16LE(_playerPos.x);
+ s.syncAsSint16LE(_playerPos.y);
+ s.syncAsSint16LE(_targetPos.x);
+ s.syncAsSint16LE(_targetPos.y);
+ s.syncAsSint16LE(_posChange.x);
+ s.syncAsSint16LE(_posChange.y);
+ s.syncAsSint16LE(_posDiff.x);
+ s.syncAsSint16LE(_posDiff.y);
+ s.syncAsSint16LE(_xDirection);
+ s.syncAsSint16LE(_yDirection);
+ s.syncAsUint16LE(_facing);
+ s.syncAsUint16LE(_targetFacing);
+ s.syncAsByte(_spritesChanged);
+ s.syncAsByte(_walkAnywhere);
+ s.syncAsByte(_walkOffScreen);
+ s.syncAsSint16LE(_ticksAmount);
+ s.syncAsSint16LE(_centerOfGravity);
+ s.syncAsUint16LE(_walkOffScreenSceneId);
+ s.syncAsByte(_needToWalk);
+ s.syncAsByte(_readyToWalk);
+ s.syncAsUint16LE(_prepareWalkFacing);
+ s.syncAsSint16LE(_prepareWalkPos.x);
+ s.syncAsSint16LE(_prepareWalkPos.y);
+
+ s.syncAsByte(_mirror);
+ s.syncAsUint16LE(_frameCount);
+ s.syncAsSint16LE(_frameListIndex);
+ s.syncAsSint16LE(_distAccum);
+ s.syncAsSint16LE(_pixelAccum);
+ s.syncAsSint16LE(_deltaDistance);
+
+ for (int i = 0; i < 12; ++i) {
+ s.syncAsSint16LE(_stopWalkerList[i]);
+ s.syncAsSint16LE(_stopWalkerTrigger[i]);
+ }
+ s.syncAsSint16LE(_stopWalkerIndex);
+ s.syncAsSint16LE(_totalDistance);
+ s.syncAsSint16LE(_frameNumber);
+ s.syncAsSint16LE(_special);
+ s.syncAsSint16LE(_velocity);
+ s.syncAsSint16LE(_scalingVelocity);
+ s.syncAsSint16LE(_upcomingTrigger);
+ s.syncAsSint16LE(_trigger);
+ s.syncAsSint16LE(_currentDepth);
+ s.syncAsSint16LE(_currentScale);
+
+ int count;
+ char ch;
+ if (s.isSaving()) {
+ count = _spritesPrefix.size();
+ s.syncAsUint16LE(count);
+ s.syncBytes((byte *)_spritesPrefix.c_str(), count);
+ } else {
+ s.syncAsSint16LE(count);
+ _spritesPrefix.clear();
+ for (int i = 0; i < count; ++i) {
+ s.syncAsByte(ch);
+ _spritesPrefix += ch;
+ }
+ }
+}
+
} // End of namespace MADS