From 99e32de51e6accc4df9a9901ac527275c571923c Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Sat, 18 May 2024 02:34:25 +0300
Subject: [PATCH 81/81] Savegame: Save last_turn_change_time as a float

See RM #643

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 server/savegame/savecompat.c | 16 ++++++++++++++++
 server/savegame/savegame2.c  |  2 +-
 server/savegame/savegame3.c  | 10 +++++-----
 utility/registry_ini.h       |  3 +++
 4 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/server/savegame/savecompat.c b/server/savegame/savecompat.c
index 152b756cb3..8c5326e217 100644
--- a/server/savegame/savecompat.c
+++ b/server/savegame/savecompat.c
@@ -2441,6 +2441,14 @@ static void compat_load_030300(struct loaddata *loading,
   game.info.turn = secfile_lookup_int_default(loading->file, 0, "game.turn");
   secfile_insert_int(loading->file, game.info.turn, "game.world_peace_start");
 
+  /* Last turn change time as a float, not integer multiplied by 100 */
+  {
+    float tct = secfile_lookup_int_default(loading->file, 0,
+                                           "game.last_turn_change_time") / 100.0;
+
+    secfile_replace_float(loading->file, tct, "game.last_turn_change_time");
+  }
+
   {
     int ssa_count;
 
@@ -3357,6 +3365,14 @@ static void compat_load_dev(struct loaddata *loading)
     secfile_replace_int(loading->file, game.server.world_peace_start,
                         "game.world_peace_start");
 
+    /* Last turn change time as a float, not integer multiplied by 100 */
+    {
+      float tct = secfile_lookup_int_default(loading->file, 0,
+                                             "game.last_turn_change_time") / 100.0;
+
+      secfile_replace_float(loading->file, tct, "game.last_turn_change_time");
+    }
+
     /* Add actions for unit activities */
     loading->activities.size
       = secfile_lookup_int_default(loading->file, 0,
diff --git a/server/savegame/savegame2.c b/server/savegame/savegame2.c
index 54288d4e78..e752b790ca 100644
--- a/server/savegame/savegame2.c
+++ b/server/savegame/savegame2.c
@@ -1977,7 +1977,7 @@ static void sg_load_game(struct loaddata *loading)
     = !secfile_lookup_bool_default(loading->file, TRUE, "game.save_players");
 
   game.server.turn_change_time
-    = secfile_lookup_int_default(loading->file, 0, "game.last_turn_change_time") / 100.0;
+    = secfile_lookup_float_default(loading->file, 0, "game.last_turn_change_time");
 }
 
 /* =======================================================================
diff --git a/server/savegame/savegame3.c b/server/savegame/savegame3.c
index 8c349fc295..4ccc61a632 100644
--- a/server/savegame/savegame3.c
+++ b/server/savegame/savegame3.c
@@ -2234,7 +2234,7 @@ static void sg_load_game(struct loaddata *loading)
     = !secfile_lookup_bool_default(loading->file, TRUE, "game.save_players");
 
   game.server.turn_change_time
-    = secfile_lookup_int_default(loading->file, 0, "game.last_turn_change_time") / 100.0;
+    = secfile_lookup_float_default(loading->file, 0, "game.last_turn_change_time");
 }
 
 /************************************************************************//**
@@ -2360,11 +2360,11 @@ static void sg_save_game(struct savedata *saving)
       saving->save_players = TRUE;
     }
 #ifndef SAVE_DUMMY_TURN_CHANGE_TIME
-    secfile_insert_int(saving->file, game.server.turn_change_time * 100,
-                       "game.last_turn_change_time");
+    secfile_insert_float(saving->file, game.server.turn_change_time,
+                         "game.last_turn_change_time");
 #else  /* SAVE_DUMMY_TURN_CHANGE_TIME */
-    secfile_insert_int(saving->file, game.info.turn * 10,
-                       "game.last_turn_change_time");
+    secfile_insert_float(saving->file, game.info.turn * 0.1,
+                         "game.last_turn_change_time");
 #endif /* SAVE_DUMMY_TURN_CHANGE_TIME */
   }
   secfile_insert_bool(saving->file, saving->save_players,
diff --git a/utility/registry_ini.h b/utility/registry_ini.h
index 0f24b1bd78..de621f6943 100644
--- a/utility/registry_ini.h
+++ b/utility/registry_ini.h
@@ -153,6 +153,9 @@ struct entry *secfile_insert_float_full(struct section_file *secfile,
 #define secfile_insert_float(secfile, value, path, ...)                     \
   secfile_insert_float_full(secfile, value, nullptr, FALSE,                 \
                             path, ## __VA_ARGS__)
+#define secfile_replace_float(secfile, value, path, ...)                    \
+  secfile_insert_float_full(secfile, value, nullptr, TRUE,                  \
+                            path, ## __VA_ARGS__)
 
 struct section *secfile_insert_include(struct section_file *secfile,
                                        const char *filename);
-- 
2.43.0

