diff options
-rw-r--r-- | engines/tsage/ringworld_scenes1.cpp | 8 | ||||
-rw-r--r-- | engines/tsage/saveload.cpp | 13 | ||||
-rw-r--r-- | engines/tsage/saveload.h | 1 |
3 files changed, 18 insertions, 4 deletions
diff --git a/engines/tsage/ringworld_scenes1.cpp b/engines/tsage/ringworld_scenes1.cpp index 7fe2610fd7..8299a05967 100644 --- a/engines/tsage/ringworld_scenes1.cpp +++ b/engines/tsage/ringworld_scenes1.cpp @@ -3105,10 +3105,10 @@ void Scene6100::Object::synchronize(Serializer &s) { SceneObject::synchronize(s); // Save the double fields of the FloatSet - s.syncBytes((byte *)&_floats._float1, sizeof(double)); - s.syncBytes((byte *)&_floats._float2, sizeof(double)); - s.syncBytes((byte *)&_floats._float3, sizeof(double)); - s.syncBytes((byte *)&_floats._float4, sizeof(double)); + s.syncAsDouble(_floats._float1); + s.syncAsDouble(_floats._float2); + s.syncAsDouble(_floats._float3); + s.syncAsDouble(_floats._float4); } /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index b184e59c9e..40444cd630 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -103,6 +103,19 @@ void Serializer::validate(int v, Common::Serializer::Version minVersion, error("Savegame is corrupt"); } +#define DOUBLE_PRECISION 1000000000 + +void Serializer::syncAsDouble(double &v) { + int32 num = (int32)(v); + uint32 fraction = (uint32)((v - (int32)v) * DOUBLE_PRECISION); + + syncAsSint32LE(num); + syncAsUint32LE(fraction); + + if (isLoading()) + v = num + (double)fraction / DOUBLE_PRECISION; +} + /*--------------------------------------------------------------------------*/ Common::Error Saver::save(int slot, const Common::String &saveName) { diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h index 0382e4a1fc..ce181cbc8f 100644 --- a/engines/tsage/saveload.h +++ b/engines/tsage/saveload.h @@ -77,6 +77,7 @@ public: Common::Serializer::Version maxVersion = kLastVersion); void validate(int v, Common::Serializer::Version minVersion = 0, Common::Serializer::Version maxVersion = kLastVersion); + void syncAsDouble(double &v); }; /*--------------------------------------------------------------------------*/ |