changeset 466:3d173ea43ad5

Add version number to saved games.
author Simon Cross <hodgestar@gmail.com>
date Tue, 24 Nov 2009 20:53:54 +0000
parents 263dea6d226b
children fdda0f3c956b
files gamelib/toolbar.py gamelib/version.py
diffstat 2 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/toolbar.py	Tue Nov 24 09:53:00 2009 +0000
+++ b/gamelib/toolbar.py	Tue Nov 24 20:53:54 2009 +0000
@@ -8,6 +8,7 @@
 import equipment
 import cursors
 import engine
+import version
 
 class OpaqueLabel(gui.Label):
     def __init__(self, value, **params):
@@ -168,7 +169,8 @@
             if dialog.value is None:
                 return
             data = self.gameboard.save_game()
-            xml = xmlrpclib.dumps((data,), "foxassault")
+            params = (version.SAVE_GAME_VERSION, data)
+            xml = xmlrpclib.dumps(params, "foxassault")
             try:
                 open(dialog.value, "wb").write(xml)
             except Exception, e:
@@ -188,8 +190,12 @@
                 xml = open(dialog.value, "rb").read()
                 params, methodname = xmlrpclib.loads(xml)
                 if methodname != "foxassault":
-                    raise ValueError("Bad XML save game.")
-                data = params[0]
+                    raise ValueError("File does not appear to be a "
+                        "Fox Assault save game.")
+                save_version = params[0]
+                if save_version != version.SAVE_GAME_VERSION:
+                    raise ValueError("Incompatible save game version.")
+                data = params[1]
             except Exception, e:
                 "Failed to load game: %s" % (e,)
                 return
--- a/gamelib/version.py	Tue Nov 24 09:53:00 2009 +0000
+++ b/gamelib/version.py	Tue Nov 24 20:53:54 2009 +0000
@@ -8,6 +8,9 @@
     'rc': BASE_VERSION_STR + 'rc' + str(VERSION[4]),
 }[VERSION[3]]
 
+# incremement whenever a change breaks the save game file format
+SAVE_GAME_VERSION = 1
+
 NAME = 'Operation Fox Assault'
 DESCRIPTION = 'Turn-based strategy game written using Pygame.'