diff options
author | Paul Gilbert | 2011-07-02 13:49:27 +1000 |
---|---|---|
committer | Paul Gilbert | 2011-07-02 13:49:27 +1000 |
commit | 160a8d96d943c878a1c8bed742507d540d51a15d (patch) | |
tree | f3f174f3da514577efa207996c9d2ce1f8def7cf | |
parent | ab7fdccc3b69d6ded7eb0c978da8804901ff95a9 (diff) | |
download | scummvm-rg350-160a8d96d943c878a1c8bed742507d540d51a15d.tar.gz scummvm-rg350-160a8d96d943c878a1c8bed742507d540d51a15d.tar.bz2 scummvm-rg350-160a8d96d943c878a1c8bed742507d540d51a15d.zip |
TSAGE: Fixed problem with saving double values
-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); }; /*--------------------------------------------------------------------------*/ |