aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPaul Gilbert2011-07-02 13:49:27 +1000
committerPaul Gilbert2011-07-02 13:49:27 +1000
commit160a8d96d943c878a1c8bed742507d540d51a15d (patch)
treef3f174f3da514577efa207996c9d2ce1f8def7cf /engines
parentab7fdccc3b69d6ded7eb0c978da8804901ff95a9 (diff)
downloadscummvm-rg350-160a8d96d943c878a1c8bed742507d540d51a15d.tar.gz
scummvm-rg350-160a8d96d943c878a1c8bed742507d540d51a15d.tar.bz2
scummvm-rg350-160a8d96d943c878a1c8bed742507d540d51a15d.zip
TSAGE: Fixed problem with saving double values
Diffstat (limited to 'engines')
-rw-r--r--engines/tsage/ringworld_scenes1.cpp8
-rw-r--r--engines/tsage/saveload.cpp13
-rw-r--r--engines/tsage/saveload.h1
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);
};
/*--------------------------------------------------------------------------*/