Bladeren bron

Refactoring of serialization versioning handling

- Removed 'version' field from serialize() method
- Handler classes - Binary(De)Serializer now have 'version' field
- Serialization versioning now uses named enum

Save compatibility with 1.4.X saves should be intact
Ivan Savenko 1 jaar geleden
bovenliggende
commit
0c07384293
100 gewijzigde bestanden met toevoegingen van 342 en 352 verwijderingen
  1. 2 2
      AI/EmptyAI/CEmptyAI.cpp
  2. 2 2
      AI/EmptyAI/CEmptyAI.h
  3. 6 8
      AI/Nullkiller/AIGateway.cpp
  4. 4 4
      AI/Nullkiller/AIGateway.h
  5. 2 2
      AI/Nullkiller/AIUtility.h
  6. 1 1
      AI/Nullkiller/Goals/CGoal.h
  7. 2 2
      AI/VCAI/AIUtility.h
  8. 1 1
      AI/VCAI/Goals/AbstractGoal.h
  9. 1 1
      AI/VCAI/Goals/CGoal.h
  10. 2 2
      AI/VCAI/ResourceManager.h
  11. 6 8
      AI/VCAI/VCAI.cpp
  12. 5 5
      AI/VCAI/VCAI.h
  13. 4 4
      client/CPlayerInterface.cpp
  14. 2 2
      client/CPlayerInterface.h
  15. 8 11
      client/Client.cpp
  16. 2 2
      client/Client.h
  17. 2 2
      client/PlayerLocalState.h
  18. 1 1
      client/windows/CMapOverview.cpp
  19. 11 9
      cmake_modules/VCMI_lib.cmake
  20. 2 2
      lib/CArtHandler.h
  21. 3 3
      lib/CArtifactInstance.h
  22. 2 2
      lib/CBonusTypeHandler.h
  23. 5 5
      lib/CCreatureSet.h
  24. 2 4
      lib/CGameInterface.cpp
  25. 4 4
      lib/CGameInterface.h
  26. 2 2
      lib/CGeneralTextHandler.h
  27. 4 4
      lib/CPlayerState.h
  28. 1 1
      lib/CRandomGenerator.h
  29. 1 1
      lib/CStack.h
  30. 1 1
      lib/Color.h
  31. 1 1
      lib/ConstTransitivePtr.h
  32. 1 1
      lib/ExtraOptionsInfo.h
  33. 1 1
      lib/GameSettings.h
  34. 1 1
      lib/JsonNode.h
  35. 2 2
      lib/LogicalExpression.h
  36. 1 1
      lib/MetaString.h
  37. 1 1
      lib/Point.h
  38. 1 1
      lib/Rect.h
  39. 1 1
      lib/ResourceSet.h
  40. 1 1
      lib/ScriptHandler.h
  41. 6 6
      lib/StartInfo.h
  42. 1 1
      lib/TerrainHandler.h
  43. 1 1
      lib/TurnTimerInfo.h
  44. 2 2
      lib/battle/BattleAction.h
  45. 1 1
      lib/battle/BattleHex.h
  46. 2 5
      lib/battle/BattleInfo.h
  47. 1 1
      lib/battle/CBattleInfoCallback.h
  48. 2 2
      lib/battle/CObstacleInstance.h
  49. 1 1
      lib/battle/SideInBattle.h
  50. 1 1
      lib/battle/SiegeInfo.h
  51. 1 1
      lib/bonuses/Bonus.h
  52. 1 1
      lib/bonuses/BonusList.h
  53. 1 1
      lib/bonuses/CBonusSystemNode.h
  54. 11 11
      lib/bonuses/Limiters.h
  55. 2 2
      lib/bonuses/Propagators.h
  56. 6 6
      lib/bonuses/Updaters.h
  57. 1 1
      lib/campaign/CampaignScenarioPrologEpilog.h
  58. 10 10
      lib/campaign/CampaignState.h
  59. 2 2
      lib/constants/EntityIdentifiers.h
  60. 4 4
      lib/constants/IdentifierBase.h
  61. 1 1
      lib/constants/VariantIdentifier.h
  62. 1 1
      lib/filesystem/ResourcePath.h
  63. 2 2
      lib/gameState/CGameState.h
  64. 1 1
      lib/gameState/CGameStateCampaign.h
  65. 1 1
      lib/gameState/EVictoryLossCheckResult.h
  66. 1 1
      lib/gameState/QuestInfo.h
  67. 1 1
      lib/gameState/SThievesGuildInfo.h
  68. 2 2
      lib/gameState/TavernHeroesPool.h
  69. 1 1
      lib/int3.h
  70. 1 1
      lib/mapObjectConstructors/CBankInstanceConstructor.h
  71. 1 1
      lib/mapObjects/CArmedInstance.h
  72. 1 1
      lib/mapObjects/CBank.h
  73. 1 1
      lib/mapObjects/CGCreature.h
  74. 1 1
      lib/mapObjects/CGDwelling.h
  75. 4 4
      lib/mapObjects/CGHeroInstance.h
  76. 3 3
      lib/mapObjects/CGMarket.h
  77. 2 2
      lib/mapObjects/CGObjectInstance.h
  78. 2 2
      lib/mapObjects/CGPandoraBox.h
  79. 4 4
      lib/mapObjects/CGTownBuilding.h
  80. 1 1
      lib/mapObjects/CGTownInstance.h
  81. 8 8
      lib/mapObjects/CQuest.h
  82. 1 1
      lib/mapObjects/CRewardableObject.h
  83. 1 1
      lib/mapObjects/IObjectInterface.h
  84. 18 18
      lib/mapObjects/MiscObjects.h
  85. 2 2
      lib/mapObjects/ObjectTemplate.h
  86. 3 3
      lib/mapping/CMap.h
  87. 3 3
      lib/mapping/CMapDefines.h
  88. 6 6
      lib/mapping/CMapHeader.h
  89. 1 1
      lib/mapping/CMapInfo.cpp
  90. 1 1
      lib/mapping/CMapInfo.h
  91. 1 1
      lib/modding/ActiveModsInSaveList.h
  92. 1 1
      lib/modding/CModVersion.h
  93. 1 1
      lib/modding/ModVerificationInfo.h
  94. 1 1
      lib/networkPacks/ArtifactLocation.h
  95. 2 2
      lib/networkPacks/BattleChanges.h
  96. 1 1
      lib/networkPacks/Component.h
  97. 1 1
      lib/networkPacks/EntityChanges.h
  98. 2 2
      lib/networkPacks/NetPacksBase.h
  99. 74 74
      lib/networkPacks/PacksForClient.h
  100. 23 23
      lib/networkPacks/PacksForClientBattle.h

+ 2 - 2
AI/EmptyAI/CEmptyAI.cpp

@@ -14,11 +14,11 @@
 #include "../../lib/CStack.h"
 #include "../../lib/battle/BattleAction.h"
 
-void CEmptyAI::saveGame(BinarySerializer & h, const int version)
+void CEmptyAI::saveGame(BinarySerializer & h)
 {
 }
 
-void CEmptyAI::loadGame(BinaryDeserializer & h, const int version)
+void CEmptyAI::loadGame(BinaryDeserializer & h)
 {
 }
 

+ 2 - 2
AI/EmptyAI/CEmptyAI.h

@@ -19,8 +19,8 @@ class CEmptyAI : public CGlobalAI
 	std::shared_ptr<CCallback> cb;
 
 public:
-	virtual void saveGame(BinarySerializer & h, const int version) override;
-	virtual void loadGame(BinaryDeserializer & h, const int version) override;
+	virtual void saveGame(BinarySerializer & h) override;
+	virtual void loadGame(BinaryDeserializer & h) override;
 
 	void initGameInterface(std::shared_ptr<Environment> ENV, std::shared_ptr<CCallback> CB) override;
 	void yourTurn(QueryID queryID) override;

+ 6 - 8
AI/Nullkiller/AIGateway.cpp

@@ -747,27 +747,25 @@ void AIGateway::showMapObjectSelectDialog(QueryID askID, const Component & icon,
 	requestActionASAP([=](){ answerQuery(askID, selectedObject.getNum()); });
 }
 
-void AIGateway::saveGame(BinarySerializer & h, const int version)
+void AIGateway::saveGame(BinarySerializer & h)
 {
-	LOG_TRACE_PARAMS(logAi, "version '%i'", version);
 	NET_EVENT_HANDLER;
 	nullkiller->memory->removeInvisibleObjects(myCb.get());
 
-	CAdventureAI::saveGame(h, version);
-	serializeInternal(h, version);
+	CAdventureAI::saveGame(h);
+	serializeInternal(h);
 }
 
-void AIGateway::loadGame(BinaryDeserializer & h, const int version)
+void AIGateway::loadGame(BinaryDeserializer & h)
 {
-	LOG_TRACE_PARAMS(logAi, "version '%i'", version);
 	//NET_EVENT_HANDLER;
 
 	#if 0
 	//disabled due to issue 2890
 	registerGoals(h);
 	#endif // 0
-	CAdventureAI::loadGame(h, version);
-	serializeInternal(h, version);
+	CAdventureAI::loadGame(h);
+	serializeInternal(h);
 }
 
 bool AIGateway::makePossibleUpgrades(const CArmedInstance * obj)

+ 4 - 4
AI/Nullkiller/AIGateway.h

@@ -62,7 +62,7 @@ public:
 	void heroVisit(const CGObjectInstance * obj, bool started);
 
 
-	template<typename Handler> void serialize(Handler & h, const int version)
+	template<typename Handler> void serialize(Handler & h)
 	{
 		h & battle;
 		h & remainingQueries;
@@ -119,8 +119,8 @@ public:
 	void showGarrisonDialog(const CArmedInstance * up, const CGHeroInstance * down, bool removableUnits, QueryID queryID) override; //all stacks operations between these objects become allowed, interface has to call onEnd when done
 	void showTeleportDialog(const CGHeroInstance * hero, TeleportChannelID channel, TTeleportExitsList exits, bool impassable, QueryID askID) override;
 	void showMapObjectSelectDialog(QueryID askID, const Component & icon, const MetaString & title, const MetaString & description, const std::vector<ObjectInstanceID> & objects) override;
-	void saveGame(BinarySerializer & h, const int version) override; //saving
-	void loadGame(BinaryDeserializer & h, const int version) override; //loading
+	void saveGame(BinarySerializer & h) override; //saving
+	void loadGame(BinaryDeserializer & h) override; //loading
 	void finish() override;
 
 	void availableCreaturesChanged(const CGDwelling * town) override;
@@ -203,7 +203,7 @@ public:
 	//special function that can be called ONLY from game events handling thread and will send request ASAP
 	void requestActionASAP(std::function<void()> whatToDo);
 
-	template<typename Handler> void serializeInternal(Handler & h, const int version)
+	template<typename Handler> void serializeInternal(Handler & h)
 	{
 		h & nullkiller->memory->knownTeleportChannels;
 		h & nullkiller->memory->knownSubterraneanGates;

+ 2 - 2
AI/Nullkiller/AIUtility.h

@@ -115,7 +115,7 @@ public:
 	bool validAndSet() const;
 
 
-	template<typename Handler> void serialize(Handler & h, const int version)
+	template<typename Handler> void serialize(Handler & h)
 	{
 		h & this->h;
 		h & hid;
@@ -147,7 +147,7 @@ struct ObjectIdRef
 	bool operator<(const ObjectIdRef & rhs) const;
 
 
-	template<typename Handler> void serialize(Handler & h, const int version)
+	template<typename Handler> void serialize(Handler & h)
 	{
 		h & id;
 	}

+ 1 - 1
AI/Nullkiller/Goals/CGoal.h

@@ -37,7 +37,7 @@ namespace Goals
 		{
 			return new T(static_cast<T const &>(*this)); //casting enforces template instantiation
 		}
-		template<typename Handler> void serialize(Handler & h, const int version)
+		template<typename Handler> void serialize(Handler & h)
 		{
 			h & static_cast<AbstractGoal &>(*this);
 			//h & goalType & isElementar & isAbstract & priority;

+ 2 - 2
AI/VCAI/AIUtility.h

@@ -70,7 +70,7 @@ public:
 	bool validAndSet() const;
 
 
-	template<typename Handler> void serialize(Handler & h, const int version)
+	template<typename Handler> void serialize(Handler & h)
 	{
 		h & this->h;
 		h & hid;
@@ -102,7 +102,7 @@ struct ObjectIdRef
 	bool operator<(const ObjectIdRef & rhs) const;
 
 
-	template<typename Handler> void serialize(Handler & h, const int version)
+	template<typename Handler> void serialize(Handler & h)
 	{
 		h & id;
 	}

+ 1 - 1
AI/VCAI/Goals/AbstractGoal.h

@@ -176,7 +176,7 @@ namespace Goals
 			return !(*this == g);
 		}
 
-		template<typename Handler> void serialize(Handler & h, const int version)
+		template<typename Handler> void serialize(Handler & h)
 		{
 			h & goalType;
 			h & isElementar;

+ 1 - 1
AI/VCAI/Goals/CGoal.h

@@ -69,7 +69,7 @@ namespace Goals
 
 			return ptr;
 		}
-		template<typename Handler> void serialize(Handler & h, const int version)
+		template<typename Handler> void serialize(Handler & h)
 		{
 			h & static_cast<AbstractGoal &>(*this);
 			//h & goalType & isElementar & isAbstract & priority;

+ 2 - 2
AI/VCAI/ResourceManager.h

@@ -28,7 +28,7 @@ struct DLL_EXPORT ResourceObjective
 	Goals::TSubgoal goal; //what for (build, gather army etc...)
 
 	 //TODO: register?
-	template<typename Handler> void serializeInternal(Handler & h, const int version)
+	template<typename Handler> void serializeInternal(Handler & h)
 	{
 		h & resources;
 		//h & goal; //FIXME: goal serialization is broken
@@ -105,7 +105,7 @@ private:
 	void dumpToLog() const;
 
 	//TODO: register?
-	template<typename Handler> void serializeInternal(Handler & h, const int version)
+	template<typename Handler> void serializeInternal(Handler & h)
 	{
 		h & saving;
 		h & queue;

+ 6 - 8
AI/VCAI/VCAI.cpp

@@ -746,9 +746,8 @@ void VCAI::showMapObjectSelectDialog(QueryID askID, const Component & icon, cons
 	requestActionASAP([=](){ answerQuery(askID, selectedObject.getNum()); });
 }
 
-void VCAI::saveGame(BinarySerializer & h, const int version)
+void VCAI::saveGame(BinarySerializer & h)
 {
-	LOG_TRACE_PARAMS(logAi, "version '%i'", version);
 	NET_EVENT_HANDLER;
 	validateVisitableObjs();
 
@@ -756,21 +755,20 @@ void VCAI::saveGame(BinarySerializer & h, const int version)
 	//disabled due to issue 2890
 	registerGoals(h);
 	#endif // 0
-	CAdventureAI::saveGame(h, version);
-	serializeInternal(h, version);
+	CAdventureAI::saveGame(h);
+	serializeInternal(h);
 }
 
-void VCAI::loadGame(BinaryDeserializer & h, const int version)
+void VCAI::loadGame(BinaryDeserializer & h)
 {
-	LOG_TRACE_PARAMS(logAi, "version '%i'", version);
 	//NET_EVENT_HANDLER;
 
 	#if 0
 	//disabled due to issue 2890
 	registerGoals(h);
 	#endif // 0
-	CAdventureAI::loadGame(h, version);
-	serializeInternal(h, version);
+	CAdventureAI::loadGame(h);
+	serializeInternal(h);
 }
 
 void makePossibleUpgrades(const CArmedInstance * obj)

+ 5 - 5
AI/VCAI/VCAI.h

@@ -68,7 +68,7 @@ public:
 	void heroVisit(const CGObjectInstance * obj, bool started);
 
 
-	template<typename Handler> void serialize(Handler & h, const int version)
+	template<typename Handler> void serialize(Handler & h)
 	{
 		h & battle;
 		h & remainingQueries;
@@ -152,8 +152,8 @@ public:
 	void showGarrisonDialog(const CArmedInstance * up, const CGHeroInstance * down, bool removableUnits, QueryID queryID) override; //all stacks operations between these objects become allowed, interface has to call onEnd when done
 	void showTeleportDialog(const CGHeroInstance * hero, TeleportChannelID channel, TTeleportExitsList exits, bool impassable, QueryID askID) override;
 	void showMapObjectSelectDialog(QueryID askID, const Component & icon, const MetaString & title, const MetaString & description, const std::vector<ObjectInstanceID> & objects) override;
-	void saveGame(BinarySerializer & h, const int version) override; //saving
-	void loadGame(BinaryDeserializer & h, const int version) override; //loading
+	void saveGame(BinarySerializer & h) override; //saving
+	void loadGame(BinaryDeserializer & h) override; //loading
 	void finish() override;
 
 	void availableCreaturesChanged(const CGDwelling * town) override;
@@ -301,7 +301,7 @@ public:
 	}
 	#endif
 
-	template<typename Handler> void serializeInternal(Handler & h, const int version)
+	template<typename Handler> void serializeInternal(Handler & h)
 	{
 		h & knownTeleportChannels;
 		h & knownSubterraneanGates;
@@ -341,7 +341,7 @@ public:
 							//we have to explicitly ignore invalid goal class type id
 							h & typeId;
 							Goals::AbstractGoal ignored2;
-							ignored2.serialize(h, version);
+							ignored2.serialize(h);
 						}
 					}
 				}

+ 4 - 4
client/CPlayerInterface.cpp

@@ -1150,16 +1150,16 @@ void CPlayerInterface::heroBonusChanged( const CGHeroInstance *hero, const Bonus
 	}
 }
 
-void CPlayerInterface::saveGame( BinarySerializer & h, const int version )
+void CPlayerInterface::saveGame( BinarySerializer & h )
 {
 	EVENT_HANDLER_CALLED_BY_CLIENT;
-	localState->serialize(h, version);
+	localState->serialize(h);
 }
 
-void CPlayerInterface::loadGame( BinaryDeserializer & h, const int version )
+void CPlayerInterface::loadGame( BinaryDeserializer & h )
 {
 	EVENT_HANDLER_CALLED_BY_CLIENT;
-	localState->serialize(h, version);
+	localState->serialize(h);
 	firstCall = -1;
 }
 

+ 2 - 2
client/CPlayerInterface.h

@@ -145,8 +145,8 @@ protected: // Call-ins from server, should not be called directly, but only via
 	void gameOver(PlayerColor player, const EVictoryLossCheckResult & victoryLossCheckResult) override;
 	void playerStartsTurn(PlayerColor player) override; //called before yourTurn on active itnerface
 	void playerEndsTurn(PlayerColor player) override;
-	void saveGame(BinarySerializer & h, const int version) override; //saving
-	void loadGame(BinaryDeserializer & h, const int version) override; //loading
+	void saveGame(BinarySerializer & h) override; //saving
+	void loadGame(BinaryDeserializer & h) override; //loading
 	void showWorldViewEx(const std::vector<ObjectPosInfo> & objectPositions, bool showTerrain) override;
 
 	//for battles

+ 8 - 11
client/Client.cpp

@@ -225,7 +225,7 @@ void CClient::loadGame(CGameState * initializedGameState)
 			throw std::runtime_error("Cannot open client part of " + CSH->si->mapname);
 
 		std::unique_ptr<CLoadFile> loader (new CLoadFile(clientSaveName));
-		serialize(loader->serializer, loader->serializer.fileVersion);
+		serialize(loader->serializer, loader->serializer.version);
 
 		logNetwork->info("Client data loaded.");
 	}
@@ -238,7 +238,7 @@ void CClient::loadGame(CGameState * initializedGameState)
 	initPlayerInterfaces();
 }
 
-void CClient::serialize(BinarySerializer & h, const int version)
+void CClient::serialize(BinarySerializer & h)
 {
 	assert(h.saving);
 	ui8 players = static_cast<ui8>(playerint.size());
@@ -251,20 +251,17 @@ void CClient::serialize(BinarySerializer & h, const int version)
 		h & i->first;
 		h & i->second->dllName;
 		h & i->second->human;
-		i->second->saveGame(h, version);
+		i->second->saveGame(h);
 	}
 
 #if SCRIPTING_ENABLED
-	if(version >= 800)
-	{
-		JsonNode scriptsState;
-		clientScripts->serializeState(h.saving, scriptsState);
-		h & scriptsState;
-	}
+	JsonNode scriptsState;
+	clientScripts->serializeState(h.saving, scriptsState);
+	h & scriptsState;
 #endif
 }
 
-void CClient::serialize(BinaryDeserializer & h, const int version)
+void CClient::serialize(BinaryDeserializer & h)
 {
 	assert(!h.saving);
 	ui8 players = 0;
@@ -320,7 +317,7 @@ void CClient::serialize(BinaryDeserializer & h, const int version)
 
 		// loadGame needs to be called after initGameInterface to load paths correctly
 		// initGameInterface is called in installNewPlayerInterface
-		nInt->loadGame(h, version);
+		nInt->loadGame(h);
 
 		if (shouldResetInterface)
 		{

+ 2 - 2
client/Client.h

@@ -131,8 +131,8 @@ public:
 
 	void newGame(CGameState * gameState);
 	void loadGame(CGameState * gameState);
-	void serialize(BinarySerializer & h, const int version);
-	void serialize(BinaryDeserializer & h, const int version);
+	void serialize(BinarySerializer & h);
+	void serialize(BinaryDeserializer & h);
 
 	void save(const std::string & fname);
 	void endGame();

+ 2 - 2
client/PlayerLocalState.h

@@ -47,7 +47,7 @@ public:
 		int spellbookLastTabAdvmap = 4;
 
 		template<typename Handler>
-		void serialize(Handler & h, const int version)
+		void serialize(Handler & h)
 		{
 			h & spellbookLastPageBattle;
 			h & spellbookLastPageAdvmap;
@@ -94,7 +94,7 @@ public:
 	void setSelection(const CArmedInstance *sel);
 
 	template<typename Handler>
-	void serialize(Handler & h, int version)
+	void serialize(Handler & h)
 	{
 		//WARNING: this code is broken and not used. See CClient::loadGame
 		std::map<const CGHeroInstance *, int3> pathsMap; //hero -> dest

+ 1 - 1
client/windows/CMapOverview.cpp

@@ -161,7 +161,7 @@ CMapOverviewWidget::CMapOverviewWidget(CMapOverview& parent):
 		std::unique_ptr<CMap> campaignMap = nullptr;
 		if(p.tabType != ESelectionScreen::newGame && config["variables"]["mapPreviewForSaves"].Bool())
 		{
-			CLoadFile lf(*CResourceHandler::get()->getResourceName(ResourcePath(p.resource.getName(), EResType::SAVEGAME)), MINIMAL_SERIALIZATION_VERSION);
+			CLoadFile lf(*CResourceHandler::get()->getResourceName(ResourcePath(p.resource.getName(), EResType::SAVEGAME)), ESerializationVersion::MINIMAL);
 			lf.checkMagicBytes(SAVEGAME_MAGIC);
 
 			auto mapHeader = std::make_unique<CMapHeader>();

+ 11 - 9
cmake_modules/VCMI_lib.cmake

@@ -2,7 +2,7 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
 	if(NOT DEFINED MAIN_LIB_DIR)
 		set(MAIN_LIB_DIR "${CMAKE_SOURCE_DIR}/lib")
 	endif()
-	
+
 	set(lib_SRCS
 		${MAIN_LIB_DIR}/StdInc.cpp
 
@@ -264,13 +264,13 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
 		${MAIN_LIB_DIR}/VCMI_Lib.cpp
 	)
 
-	# Version.cpp is a generated file
+    # Version.cpp is a generated file
 	if(ENABLE_GITVERSION)
 		list(APPEND lib_SRCS ${CMAKE_BINARY_DIR}/Version.cpp)
 		set_source_files_properties(${CMAKE_BINARY_DIR}/Version.cpp
 			PROPERTIES GENERATED TRUE
 		)
-	endif()
+    endif()
 
 	set(lib_HEADERS
 		${MAIN_LIB_DIR}/../include/vstd/CLoggerBase.h
@@ -557,6 +557,7 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
 		${MAIN_LIB_DIR}/serializer/JsonSerializer.h
 		${MAIN_LIB_DIR}/serializer/JsonUpdater.h
 		${MAIN_LIB_DIR}/serializer/Cast.h
+		${MAIN_LIB_DIR}/serializer/SerializerVersion.h
 
 		${MAIN_LIB_DIR}/spells/AbilityCaster.h
 		${MAIN_LIB_DIR}/spells/AdventureSpellMechanics.h
@@ -618,6 +619,7 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
 		${MAIN_LIB_DIR}/CStopWatch.h
 		${MAIN_LIB_DIR}/CThreadHelper.h
 		${MAIN_LIB_DIR}/CTownHandler.h
+		${MAIN_LIB_DIR}/ExtraOptionsInfo.h
 		${MAIN_LIB_DIR}/FunctionList.h
 		${MAIN_LIB_DIR}/GameCallbackHolder.h
 		${MAIN_LIB_DIR}/GameConstants.h
@@ -653,7 +655,7 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
 		${MAIN_LIB_DIR}/VCMI_Lib.h
 	)
 
-	assign_source_group(${lib_SRCS} ${lib_HEADERS})
+    assign_source_group(${lib_SRCS} ${lib_HEADERS})
 
 	add_library(${TARGET_NAME} ${LIBRARY_TYPE} ${lib_SRCS} ${lib_HEADERS})
 	set_target_properties(${TARGET_NAME} PROPERTIES COMPILE_DEFINITIONS "VCMI_DLL=1")
@@ -661,7 +663,7 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
 		minizip::minizip ZLIB::ZLIB
 		${SYSTEM_LIBS} Boost::boost Boost::thread Boost::filesystem Boost::program_options Boost::locale Boost::date_time
 	)
-	if(APPLE_IOS)
+    if(APPLE_IOS)
 		target_link_libraries(${TARGET_NAME} PUBLIC iOS_utils)
 	endif()
 
@@ -672,13 +674,13 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
 		PUBLIC ${MAIN_LIB_DIR}
 	)
 
-	if(WIN32)
+    if(WIN32)
 		set_target_properties(${TARGET_NAME}
 			PROPERTIES
-				OUTPUT_NAME "VCMI_lib"
+			    OUTPUT_NAME "VCMI_lib"
 				PROJECT_LABEL "VCMI_lib"
 		)
-	endif()
+    endif()
 
 	vcmi_set_output_dir(${TARGET_NAME} "")
 
@@ -692,7 +694,7 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
 			COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake_modules/create_link.cmake ${MAIN_LIB_DIR}/../config ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/config
 			COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake_modules/create_link.cmake ${MAIN_LIB_DIR}/../Mods ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/Mods
 		)
-	endif()
+    endif()
 
 	# Update version before vcmi compiling
 	if(TARGET update_version)

+ 2 - 2
lib/CArtHandler.h

@@ -179,7 +179,7 @@ struct DLL_LINKAGE ArtSlotInfo
 	ArtSlotInfo() : locked(false) {}
 	const CArtifactInstance * getArt() const;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & artifact;
 		h & locked;
@@ -223,7 +223,7 @@ public:
 	virtual void removeArtifact(ArtifactPosition slot);
 	virtual ~CArtifactSet();
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & artifactsInBackpack;
 		h & artifactsWorn;

+ 3 - 3
lib/CArtifactInstance.h

@@ -27,7 +27,7 @@ public:
 	{
 		ConstTransitivePtr<CArtifactInstance> art;
 		ArtifactPosition slot;
-		template <typename Handler> void serialize(Handler & h, const int version)
+		template <typename Handler> void serialize(Handler & h)
 		{
 			h & art;
 			h & slot;
@@ -41,7 +41,7 @@ public:
 	const std::vector<PartInfo> & getPartsInfo() const;
 	void addPlacementMap(CArtifactSet::ArtPlacementMap & placementMap);
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & partsInfo;
 	}
@@ -93,7 +93,7 @@ public:
 	void move(CArtifactSet & srcSet, const ArtifactPosition srcSlot, CArtifactSet & dstSet, const ArtifactPosition dstSlot);
 	
 	void deserializationFix();
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & static_cast<CBonusSystemNode&>(*this);
 		h & static_cast<CCombinedArtifactInstance&>(*this);

+ 2 - 2
lib/CBonusTypeHandler.h

@@ -27,7 +27,7 @@ public:
 	std::string getNameTextID() const;
 	std::string getDescriptionTextID() const;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & icon;
 		h & identifier;
@@ -53,7 +53,7 @@ public:
 	std::string bonusToString(const std::shared_ptr<Bonus> & bonus, const IBonusBearer * bearer, bool description) const override;
 	ImagePath bonusToGraphics(const std::shared_ptr<Bonus> & bonus) const override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		//for now always use up to date configuration
 		//once modded bonus type will be implemented, serialize only them

+ 5 - 5
lib/CCreatureSet.h

@@ -46,7 +46,7 @@ public:
 	
 	friend bool operator== (const CStackBasicDescriptor & l, const CStackBasicDescriptor & r);
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		if(h.saving)
 		{
@@ -85,7 +85,7 @@ public:
 	const CArmedInstance * const & armyObj; //stack must be part of some army, army must be part of some object
 	TExpType experience;//commander needs same amount of exp as hero
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CBonusSystemNode&>(*this);
 		h & static_cast<CStackBasicDescriptor&>(*this);
@@ -157,7 +157,7 @@ public:
 	int getLevel() const override;
 	ArtBearer::ArtBearer bearerType() const override; //from CArtifactSet
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CStackInstance&>(*this);
 		h & alive;
@@ -197,7 +197,7 @@ public:
 	bool setCreature(SlotID slot, CreatureID cre, TQuantity count) override;
 	operator bool() const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & army;
 	}
@@ -280,7 +280,7 @@ public:
 	bool contains(const CStackInstance *stack) const;
 	bool canBeMergedWith(const CCreatureSet &cs, bool allowMergingStacks = true) const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & stacks;
 		h & formation;

+ 2 - 4
lib/CGameInterface.cpp

@@ -243,9 +243,8 @@ void CAdventureAI::yourTacticPhase(const BattleID & battleID, int distance)
 	battleAI->yourTacticPhase(battleID, distance);
 }
 
-void CAdventureAI::saveGame(BinarySerializer & h, const int version) /*saving */
+void CAdventureAI::saveGame(BinarySerializer & h) /*saving */
 {
-	LOG_TRACE_PARAMS(logAi, "version '%i'", version);
 	bool hasBattleAI = static_cast<bool>(battleAI);
 	h & hasBattleAI;
 	if(hasBattleAI)
@@ -254,9 +253,8 @@ void CAdventureAI::saveGame(BinarySerializer & h, const int version) /*saving */
 	}
 }
 
-void CAdventureAI::loadGame(BinaryDeserializer & h, const int version) /*loading */
+void CAdventureAI::loadGame(BinaryDeserializer & h) /*loading */
 {
-	LOG_TRACE_PARAMS(logAi, "version '%i'", version);
 	bool hasBattleAI = false;
 	h & hasBattleAI;
 	if(hasBattleAI)

+ 4 - 4
lib/CGameInterface.h

@@ -111,8 +111,8 @@ public:
 
 	virtual std::optional<BattleAction> makeSurrenderRetreatDecision(const BattleID & battleID, const BattleStateInfoForRetreat & battleState) = 0;
 
-	virtual void saveGame(BinarySerializer & h, const int version) = 0;
-	virtual void loadGame(BinaryDeserializer & h, const int version) = 0;
+	virtual void saveGame(BinarySerializer & h) = 0;
+	virtual void loadGame(BinaryDeserializer & h) = 0;
 };
 
 class DLL_LINKAGE CDynLibHandler
@@ -162,8 +162,8 @@ public:
 	virtual void battleEnd(const BattleID & battleID, const BattleResult *br, QueryID queryID) override;
 	virtual void battleUnitsChanged(const BattleID & battleID, const std::vector<UnitChanges> & units) override;
 
-	virtual void saveGame(BinarySerializer & h, const int version) override;
-	virtual void loadGame(BinaryDeserializer & h, const int version) override;
+	virtual void saveGame(BinarySerializer & h) override;
+	virtual void loadGame(BinaryDeserializer & h) override;
 };
 
 VCMI_LIB_NAMESPACE_END

+ 2 - 2
lib/CGeneralTextHandler.h

@@ -135,7 +135,7 @@ protected:
 		std::string modContext;
 		
 		template <typename Handler>
-		void serialize(Handler & h, const int Version)
+		void serialize(Handler & h)
 		{
 			h & baseValue;
 			h & baseLanguage;
@@ -193,7 +193,7 @@ public:
 	void jsonSerialize(JsonNode & dest) const;
 	
 	template <typename Handler>
-	void serialize(Handler & h, const int Version)
+	void serialize(Handler & h)
 	{
 		std::string key;
 		auto sz = stringsLocalizations.size();

+ 4 - 4
lib/CPlayerState.h

@@ -40,10 +40,10 @@ struct DLL_LINKAGE PlayerState : public CBonusSystemNode, public Player
 				return subID < other.subID;
 		}
 
-		template <typename Handler> void serialize(Handler &h, const int version)
+		template <typename Handler> void serialize(Handler &h)
 		{
 			h & id;
-			subID.serializeIdentifier(h, id, version);
+			subID.serializeIdentifier(h, id);
 		}
 	};
 
@@ -89,7 +89,7 @@ public:
 		return heroes.empty() && towns.empty();
 	}
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & color;
 		h & human;
@@ -123,7 +123,7 @@ public:
 
 	TeamState();
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & id;
 		h & players;

+ 1 - 1
lib/CRandomGenerator.h

@@ -87,7 +87,7 @@ private:
 
 public:
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		if(h.saving)
 		{

+ 1 - 1
lib/CStack.h

@@ -93,7 +93,7 @@ public:
 		return this->owner;
 	}
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		//this assumes that stack objects is newly created
 		//stackState is not serialized here

+ 1 - 1
lib/Color.h

@@ -50,7 +50,7 @@ public:
 	{}
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		h & r;
 		h & g;

+ 1 - 1
lib/ConstTransitivePtr.h

@@ -69,7 +69,7 @@ public:
 		ptr = nullptr;
 	}
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & ptr;
 	}

+ 1 - 1
lib/ExtraOptionsInfo.h

@@ -20,7 +20,7 @@ struct DLL_LINKAGE ExtraOptionsInfo
 	bool operator == (const ExtraOptionsInfo & other) const;
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		h & cheatsAllowed;
 		h & unlimitedReplay;

+ 1 - 1
lib/GameSettings.h

@@ -96,7 +96,7 @@ public:
 	const JsonNode & getValue(EGameSettings option) const override;
 
 	template<typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & gameSettings;
 	}

+ 1 - 1
lib/JsonNode.h

@@ -117,7 +117,7 @@ public:
 
 	std::string toJson(bool compact = false) const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & meta;
 		h & flags;

+ 2 - 2
lib/LogicalExpression.h

@@ -57,7 +57,7 @@ namespace LogicalExpressionDetail
 			}
 
 			template <typename Handler>
-			void serialize(Handler & h, const int version)
+			void serialize(Handler & h)
 			{
 				h & expressions;
 			}
@@ -614,7 +614,7 @@ public:
 	}
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & data;
 	}

+ 1 - 1
lib/MetaString.h

@@ -125,7 +125,7 @@ public:
 	
 	void serializeJson(JsonSerializeFormat & handler);
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & exactStrings;
 		h & localStrings;

+ 1 - 1
lib/Point.h

@@ -122,7 +122,7 @@ public:
 	}
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		h & x;
 		h & y;

+ 1 - 1
lib/Rect.h

@@ -163,7 +163,7 @@ public:
 	DLL_LINKAGE Rect include(const Rect & other) const;
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		h & x;
 		h & y;

+ 1 - 1
lib/ResourceSet.h

@@ -180,7 +180,7 @@ public:
 // 			return true;
 // 		}
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & container;
 	}

+ 1 - 1
lib/ScriptHandler.h

@@ -108,7 +108,7 @@ public:
 
 	void run(std::shared_ptr<Pool> pool) const override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		JsonNode state;
 		if(h.saving)

+ 6 - 6
lib/StartInfo.h

@@ -41,7 +41,7 @@ struct DLL_LINKAGE SimturnsInfo
 	}
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		h & requiredTurns;
 		h & optionalTurns;
@@ -76,7 +76,7 @@ struct DLL_LINKAGE PlayerSettings
 	std::set<ui8> connectedPlayerIDs; //Empty - AI, or connectrd player ids
 	bool compOnly; //true if this player is a computer only player; required for RMG
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		h & castle;
 		h & hero;
@@ -131,7 +131,7 @@ struct DLL_LINKAGE StartInfo
 	std::string getCampaignName() const;
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		h & mode;
 		h & difficulty;
@@ -143,7 +143,7 @@ struct DLL_LINKAGE StartInfo
 		h & fileURI;
 		h & simturnsInfo;
 		h & turnTimerInfo;
-		if(version >= 832)
+		if(h.version >= Handler::Version::HAS_EXTRA_OPTIONS)
 			h & extraOptionsInfo;
 		else
 			extraOptionsInfo = ExtraOptionsInfo();
@@ -164,7 +164,7 @@ struct ClientPlayer
 	int connection;
 	std::string name;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & connection;
 		h & name;
@@ -184,7 +184,7 @@ struct DLL_LINKAGE LobbyState
 
 	LobbyState() : si(new StartInfo()), hostClientId(-1), campaignMap(CampaignScenarioID::NONE), campaignBonus(-1) {}
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & si;
 		h & mi;

+ 1 - 1
lib/TerrainHandler.h

@@ -26,7 +26,7 @@ struct DLL_LINKAGE TerrainPaletteAnimation
 	/// total numbers of colors to cycle
 	int32_t length;
 
-	template <typename Handler> void serialize(Handler& h, const int version)
+	template <typename Handler> void serialize(Handler& h)
 	{
 		h & start;
 		h & length;

+ 1 - 1
lib/TurnTimerInfo.h

@@ -34,7 +34,7 @@ struct DLL_LINKAGE TurnTimerInfo
 	bool operator == (const TurnTimerInfo & other) const;
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		h & turnTimer;
 		h & baseTimer;

+ 2 - 2
lib/battle/BattleAction.h

@@ -55,7 +55,7 @@ public:
 	battle::Target getTarget(const CBattleInfoCallback * cb) const;
 	void setTarget(const battle::Target & target_);
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & side;
 		h & stackNumber;
@@ -70,7 +70,7 @@ private:
 		int32_t unitValue;
 		BattleHex hexValue;
 
-		template <typename Handler> void serialize(Handler & h, const int version)
+		template <typename Handler> void serialize(Handler & h)
 		{
 			h & unitValue;
 			h & hexValue;

+ 1 - 1
lib/battle/BattleHex.h

@@ -105,7 +105,7 @@ struct DLL_LINKAGE BattleHex //TODO: decide if this should be changed to class f
 	static BattleHex getClosestTile(ui8 side, BattleHex initialPos, std::set<BattleHex> & possibilities); //TODO: vector or set? copying one to another is bad
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		h & hex;
 	}

+ 2 - 5
lib/battle/BattleInfo.h

@@ -50,7 +50,7 @@ public:
 	ui8 tacticsSide; //which side is requested to play tactics phase
 	ui8 tacticDistance; //how many hexes we can go forward (1 = only hexes adjacent to margin line)
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & battleID;
 		h & sides;
@@ -66,10 +66,7 @@ public:
 		h & tacticsSide;
 		h & tacticDistance;
 		h & static_cast<CBonusSystemNode&>(*this);
-		if (version > 824)
-			h & replayAllowed;
-		else
-			replayAllowed = false;
+		h & replayAllowed;
 	}
 
 	//////////////////////////////////////////////////////////////////////////

+ 1 - 1
lib/battle/CBattleInfoCallback.h

@@ -36,7 +36,7 @@ struct DLL_LINKAGE AttackableTiles
 {
 	std::set<BattleHex> hostileCreaturePositions;
 	std::set<BattleHex> friendlyCreaturePositions; //for Dragon Breath
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & hostileCreaturePositions;
 		h & friendlyCreaturePositions;

+ 2 - 2
lib/battle/CObstacleInstance.h

@@ -63,7 +63,7 @@ struct DLL_LINKAGE CObstacleInstance
 	
 	virtual void serializeJson(JsonSerializeFormat & handler);
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & ID;
 		h & pos;
@@ -118,7 +118,7 @@ struct DLL_LINKAGE SpellCreatedObstacle : CObstacleInstance
 
 	void serializeJson(JsonSerializeFormat & handler) override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CObstacleInstance&>(*this);
 		h & turnsRemaining;

+ 1 - 1
lib/battle/SideInBattle.h

@@ -28,7 +28,7 @@ struct DLL_LINKAGE SideInBattle
 	void init(const CGHeroInstance * Hero, const CArmedInstance * Army);
 
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & color;
 		h & hero;

+ 1 - 1
lib/battle/SiegeInfo.h

@@ -23,7 +23,7 @@ struct DLL_LINKAGE SiegeInfo
 	// return EWallState decreased by value of damage points
 	static EWallState applyDamage(EWallState state, unsigned int value);
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & wallState;
 		h & gateState;

+ 1 - 1
lib/bonuses/Bonus.h

@@ -86,7 +86,7 @@ struct DLL_LINKAGE Bonus : public std::enable_shared_from_this<Bonus>
 	Bonus(BonusDuration::Type Duration, BonusType Type, BonusSource Src, si32 Val, BonusSourceID sourceID, BonusSubtypeID subtype, BonusValueType ValType);
 	Bonus() = default;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & duration;
 		h & type;

+ 1 - 1
lib/bonuses/BonusList.h

@@ -91,7 +91,7 @@ public:
 	void insert(TInternalContainer::iterator position, TInternalContainer::size_type n, const std::shared_ptr<Bonus> & x);
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		h & static_cast<TInternalContainer&>(bonuses);
 	}

+ 1 - 1
lib/bonuses/CBonusSystemNode.h

@@ -130,7 +130,7 @@ public:
 		return PlayerColor::NEUTRAL;
 	}
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & nodeType;
 		h & exportedBonuses;

+ 11 - 11
lib/bonuses/Limiters.h

@@ -38,7 +38,7 @@ public:
 	virtual std::string toString() const;
 	virtual JsonNode toJsonNode() const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 	}
 };
@@ -53,7 +53,7 @@ public:
 	void add(const TLimiterPtr & limiter);
 	JsonNode toJsonNode() const override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & static_cast<ILimiter&>(*this);
 		h & limiters;
@@ -104,7 +104,7 @@ public:
 	std::string toString() const override;
 	JsonNode toJsonNode() const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<ILimiter&>(*this);
 		h & creature;
@@ -132,7 +132,7 @@ public:
 	std::string toString() const override;
 	JsonNode toJsonNode() const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<ILimiter&>(*this);
 		h & type;
@@ -156,7 +156,7 @@ public:
 	std::string toString() const override;
 	JsonNode toJsonNode() const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<ILimiter&>(*this);
 		h & terrainType;
@@ -175,7 +175,7 @@ public:
 	std::string toString() const override;
 	JsonNode toJsonNode() const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<ILimiter&>(*this);
 		h & minLevel;
@@ -193,7 +193,7 @@ public:
 	std::string toString() const override;
 	JsonNode toJsonNode() const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<ILimiter&>(*this);
 		h & faction;
@@ -210,7 +210,7 @@ public:
 	std::string toString() const override;
 	JsonNode toJsonNode() const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<ILimiter&>(*this);
 		h & alignment;
@@ -225,7 +225,7 @@ public:
 
 	EDecision limit(const BonusLimitationContext &context) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<ILimiter&>(*this);
 		h & owner;
@@ -242,7 +242,7 @@ public:
 	RankRangeLimiter(ui8 Min, ui8 Max = 255);
 	EDecision limit(const BonusLimitationContext &context) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<ILimiter&>(*this);
 		h & minRank;
@@ -259,7 +259,7 @@ public:
 	EDecision limit(const BonusLimitationContext &context) const override;
 	JsonNode toJsonNode() const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<ILimiter&>(*this);
 		h & applicableHexes;

+ 2 - 2
lib/bonuses/Propagators.h

@@ -23,7 +23,7 @@ public:
 	virtual bool shouldBeAttached(CBonusSystemNode *dest);
 	virtual CBonusSystemNode::ENodeTypes getPropagatorType() const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{}
 };
 
@@ -36,7 +36,7 @@ public:
 	bool shouldBeAttached(CBonusSystemNode *dest) override;
 	CBonusSystemNode::ENodeTypes getPropagatorType() const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & nodeType;
 	}

+ 6 - 6
lib/bonuses/Updaters.h

@@ -26,7 +26,7 @@ public:
 	virtual std::string toString() const;
 	virtual JsonNode toJsonNode() const;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 	}
 };
@@ -40,7 +40,7 @@ public:
 	GrowsWithLevelUpdater() = default;
 	GrowsWithLevelUpdater(int valPer20, int stepSize = 1);
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & static_cast<IUpdater &>(*this);
 		h & valPer20;
@@ -55,7 +55,7 @@ public:
 class DLL_LINKAGE TimesHeroLevelUpdater : public IUpdater
 {
 public:
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & static_cast<IUpdater &>(*this);
 	}
@@ -68,7 +68,7 @@ public:
 class DLL_LINKAGE TimesStackLevelUpdater : public IUpdater
 {
 public:
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & static_cast<IUpdater &>(*this);
 	}
@@ -87,7 +87,7 @@ public:
 	si32 max;
 	ArmyMovementUpdater();
 	ArmyMovementUpdater(int base, int divider, int multiplier, int max);
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & static_cast<IUpdater &>(*this);
 		h & base;
@@ -104,7 +104,7 @@ public:
 class DLL_LINKAGE OwnerUpdater : public IUpdater
 {
 public:
-	template <typename Handler> void serialize(Handler& h, const int version)
+	template <typename Handler> void serialize(Handler& h)
 	{
 		h & static_cast<IUpdater &>(*this);
 	}

+ 1 - 1
lib/campaign/CampaignScenarioPrologEpilog.h

@@ -22,7 +22,7 @@ struct DLL_LINKAGE CampaignScenarioPrologEpilog
 	AudioPath prologVoice;
 	MetaString prologText;
 
-	template <typename Handler> void serialize(Handler &h, const int formatVersion)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & hasPrologEpilog;
 		h & prologVideo;

+ 10 - 10
lib/campaign/CampaignState.h

@@ -40,7 +40,7 @@ class DLL_LINKAGE CampaignRegions
 		int xpos;
 		int ypos;
 
-		template <typename Handler> void serialize(Handler &h, const int formatVersion)
+		template <typename Handler> void serialize(Handler &h)
 		{
 			h & infix;
 			h & xpos;
@@ -61,7 +61,7 @@ public:
 	ImagePath getSelectedName(CampaignScenarioID which, int color) const;
 	ImagePath getConqueredName(CampaignScenarioID which, int color) const;
 
-	template <typename Handler> void serialize(Handler &h, const int formatVersion)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & campPrefix;
 		h & colorSuffixLength;
@@ -106,7 +106,7 @@ public:
 	const CampaignRegions & getRegions() const;
 	TextContainerRegistrable & getTexts();
 
-	template <typename Handler> void serialize(Handler &h, const int formatVersion)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & version;
 		h & campaignRegions;
@@ -118,7 +118,7 @@ public:
 		h & modName;
 		h & music;
 		h & encoding;
-		if (formatVersion >= 832)
+		if (h.version >= Handler::Version::RELEASE_143)
 			h & textContainer;
 	}
 };
@@ -134,7 +134,7 @@ struct DLL_LINKAGE CampaignBonus
 
 	bool isBonusForHero() const;
 
-	template <typename Handler> void serialize(Handler &h, const int formatVersion)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & type;
 		h & info1;
@@ -153,7 +153,7 @@ struct DLL_LINKAGE CampaignTravel
 		bool spells = false;
 		bool artifacts = false;
 
-		template <typename Handler> void serialize(Handler &h, const int formatVersion)
+		template <typename Handler> void serialize(Handler &h)
 		{
 			h & experience;
 			h & primarySkills;
@@ -171,7 +171,7 @@ struct DLL_LINKAGE CampaignTravel
 	CampaignStartOptions startOptions = CampaignStartOptions::NONE; //1 - start bonus, 2 - traveling hero, 3 - hero options
 	PlayerColor playerColor = PlayerColor::NEUTRAL; //only for startOptions == 1
 
-	template <typename Handler> void serialize(Handler &h, const int formatVersion)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & whatHeroKeeps;
 		h & monstersKeptByHero;
@@ -199,7 +199,7 @@ struct DLL_LINKAGE CampaignScenario
 	void loadPreconditionRegions(ui32 regions);
 	bool isNotVoid() const;
 
-	template <typename Handler> void serialize(Handler &h, const int formatVersion)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & mapName;
 		h & scenarioName;
@@ -225,7 +225,7 @@ public:
 	std::set<CampaignScenarioID> allScenarios() const;
 	int scenariosCount() const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CampaignHeader&>(*this);
 		h & scenarios;
@@ -304,7 +304,7 @@ public:
 
 	std::string campaignSet;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<Campaign&>(*this);
 		h & scenarioHeroPool;

+ 2 - 2
lib/constants/EntityIdentifiers.h

@@ -527,7 +527,7 @@ public:
 	}
 
 	template <typename Handler>
-	void serializeIdentifier(Handler &h, const MapObjectID & primaryID, const int version)
+	void serializeIdentifier(Handler &h, const MapObjectID & primaryID)
 	{
 		std::string secondaryStringID;
 
@@ -959,7 +959,7 @@ public:
 	using Identifier<BuildingTypeUniqueID>::Identifier;
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		FactionID faction = getFaction();
 		BuildingID building = getBuilding();

+ 4 - 4
lib/constants/IdentifierBase.h

@@ -186,7 +186,7 @@ public:
 	using Identifier<FinalClass>::Identifier;
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		auto * finalClass = static_cast<FinalClass*>(this);
 		std::string value;
@@ -208,7 +208,7 @@ public:
 	using IdentifierWithEnum<FinalClass, BaseClass>::IdentifierWithEnum;
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		auto * finalClass = static_cast<FinalClass*>(this);
 		std::string value;
@@ -230,7 +230,7 @@ public:
 	using Identifier<FinalClass>::Identifier;
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		auto * finalClass = static_cast<FinalClass*>(this);
 		h & finalClass->num;
@@ -244,7 +244,7 @@ public:
 	using IdentifierWithEnum<FinalClass, BaseClass>::IdentifierWithEnum;
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		auto * finalClass = static_cast<FinalClass*>(this);
 		h & finalClass->num;

+ 1 - 1
lib/constants/VariantIdentifier.h

@@ -59,7 +59,7 @@ public:
 			return IdentifierType();
 	}
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & value;
 	}

+ 1 - 1
lib/filesystem/ResourcePath.h

@@ -102,7 +102,7 @@ public:
 
 	void serializeJson(JsonSerializeFormat & handler);
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & type;
 		h & name;

+ 2 - 2
lib/gameState/CGameState.h

@@ -59,7 +59,7 @@ struct DLL_LINKAGE RumorState
 	RumorState(){type = TYPE_NONE;};
 	bool update(int id, int extra);
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & type;
 		h & last;
@@ -174,7 +174,7 @@ public:
 	/// Any server-side code outside of GH must use CRandomGenerator::getDefault
 	CRandomGenerator & getRandomGenerator();
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & scenarioOps;
 		h & initialOpts;

+ 1 - 1
lib/gameState/CGameStateCampaign.h

@@ -58,7 +58,7 @@ public:
 	bool playerHasStartingHero(PlayerColor player) const;
 	std::unique_ptr<CMap> getCurrentMap() const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & gameState;
 	}

+ 1 - 1
lib/gameState/EVictoryLossCheckResult.h

@@ -58,7 +58,7 @@ public:
 	MetaString messageToSelf;
 	MetaString messageToOthers;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & intValue;
 		h & messageToSelf;

+ 1 - 1
lib/gameState/QuestInfo.h

@@ -44,7 +44,7 @@ struct DLL_LINKAGE QuestInfo //universal interface for human and AI
 		return (quest == qi.quest && obj == qi.obj);
 	}
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & quest;
 		h & obj;

+ 1 - 1
lib/gameState/SThievesGuildInfo.h

@@ -25,7 +25,7 @@ struct DLL_LINKAGE SThievesGuildInfo
 	std::map<PlayerColor, EAiTactic> personality; // color to personality // ai tactic
 	std::map<PlayerColor, CreatureID> bestCreature; // color to ID // id or -1 if not known
 
-//	template <typename Handler> void serialize(Handler &h, const int version)
+//	template <typename Handler> void serialize(Handler &h)
 //	{
 //		h & playerColors;
 //		h & numOfTowns;

+ 2 - 2
lib/gameState/TavernHeroesPool.h

@@ -30,7 +30,7 @@ class DLL_LINKAGE TavernHeroesPool
 		TavernSlotRole role;
 		PlayerColor player;
 
-		template <typename Handler> void serialize(Handler &h, const int version)
+		template <typename Handler> void serialize(Handler &h)
 		{
 			h & hero;
 			h & slot;
@@ -76,7 +76,7 @@ public:
 	/// Makes hero available in tavern of specified player
 	void setHeroForPlayer(PlayerColor player, TavernHeroSlot slot, HeroTypeID hero, CSimpleArmy & army, TavernSlotRole role, bool replenishPoints);
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & heroesPool;
 		h & perPlayerAvailability;

+ 1 - 1
lib/int3.h

@@ -170,7 +170,7 @@ public:
 	}
 
 	template <typename Handler>
-	void serialize(Handler &h, const int version)
+	void serialize(Handler &h)
 	{
 		h & x;
 		h & y;

+ 1 - 1
lib/mapObjectConstructors/CBankInstanceConstructor.h

@@ -27,7 +27,7 @@ struct BankConfig
 	std::vector<ArtifactID> artifacts; //artifacts given in case of victory
 	std::vector<SpellID> spells; // granted spell(s), for Pyramid
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & chance;
 		h & guards;

+ 1 - 1
lib/mapObjects/CArmedInstance.h

@@ -52,7 +52,7 @@ public:
 	
 	void serializeJsonOptions(JsonSerializeFormat & handler) override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 		h & static_cast<CBonusSystemNode&>(*this);

+ 1 - 1
lib/mapObjects/CBank.h

@@ -43,7 +43,7 @@ public:
 
 	std::vector<Component> getPopupComponents(PlayerColor player) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CArmedInstance&>(*this);
 		h & daycounter;

+ 1 - 1
lib/mapObjects/CGCreature.h

@@ -56,7 +56,7 @@ public:
 	bool containsUpgradedStack() const;
 	int getNumberOfStacks(const CGHeroInstance *hero) const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CArmedInstance&>(*this);
 		h & identifier;

+ 1 - 1
lib/mapObjects/CGDwelling.h

@@ -61,7 +61,7 @@ private:
 	void heroAcceptsCreatures(const CGHeroInstance *h) const;
 
 public:
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CArmedInstance&>(*this);
 		h & creatures;

+ 4 - 4
lib/mapObjects/CGHeroInstance.h

@@ -36,7 +36,7 @@ public:
 	/// if this is placeholder by type, then hero type of desired hero
 	std::optional<HeroTypeID> heroType;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 		h & powerRank;
@@ -103,7 +103,7 @@ public:
 		bool patrolling;
 		int3 initialPos;
 		ui32 patrolRadius;
-		template <typename Handler> void serialize(Handler &h, const int version)
+		template <typename Handler> void serialize(Handler &h)
 		{
 			h & patrolling;
 			h & initialPos;
@@ -121,7 +121,7 @@ public:
 		void resetMagicSchoolCounter();
 		void resetWisdomCounter();
 
-		template <typename Handler> void serialize(Handler &h, const int version)
+		template <typename Handler> void serialize(Handler &h)
 		{
 			h & magicSchoolCounter;
 			h & wisdomCounter;
@@ -321,7 +321,7 @@ public:
 
 	void serializeJsonDefinition(JsonSerializeFormat & handler);
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CArmedInstance&>(*this);
 		h & static_cast<CArtifactSet&>(*this);

+ 3 - 3
lib/mapObjects/CGMarket.h

@@ -36,7 +36,7 @@ public:
 	int availableUnits(EMarketMode mode, int marketItemSerial) const override; //-1 if unlimited
 	std::vector<TradeItemBuy> availableItemsIds(EMarketMode mode) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 		h & marketModes;
@@ -56,7 +56,7 @@ public:
 	void newTurn(CRandomGenerator & rand) const override; //reset artifacts for black market every month
 	std::vector<TradeItemBuy> availableItemsIds(EMarketMode mode) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGMarket&>(*this);
 		h & artifacts;
@@ -73,7 +73,7 @@ public:
 	std::vector<TradeItemBuy> availableItemsIds(EMarketMode mode) const override;
 	void onHeroVisit(const CGHeroInstance * h) const override; //open window
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGMarket&>(*this);
 		h & skills;

+ 2 - 2
lib/mapObjects/CGObjectInstance.h

@@ -137,14 +137,14 @@ public:
 	virtual void afterRemoveFromMap(CMap * map);
 
 	///Entry point of binary (de-)serialization
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & instanceName;
 		h & typeName;
 		h & subTypeName;
 		h & pos;
 		h & ID;
-		subID.serializeIdentifier(h, ID, version);
+		subID.serializeIdentifier(h, ID);
 		h & id;
 		h & tempOwner;
 		h & blockVisit;

+ 2 - 2
lib/mapObjects/CGPandoraBox.h

@@ -28,7 +28,7 @@ public:
 	void battleFinished(const CGHeroInstance *hero, const BattleResult &result) const override;
 	void blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CRewardableObject&>(*this);
 		h & message;
@@ -50,7 +50,7 @@ public:
 	bool computerActivate = false; //true if computer player can activate this event
 	bool humanActivate = false; //true if human player can activate this event
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGPandoraBox &>(*this);
 		h & removeAfterVisit;

+ 4 - 4
lib/mapObjects/CGTownBuilding.h

@@ -54,7 +54,7 @@ public:
 	int3 visitablePos() const override;
 	int3 getPosition() const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & bID;
 		h & indexOnTV;
@@ -79,7 +79,7 @@ public:
 	COPWBonus(const BuildingID & index, BuildingSubID::EBuildingSubID subId, CGTownInstance * TOWN);
 	COPWBonus(IGameCallback *cb);
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGTownBuilding&>(*this);
 		h & visitors;
@@ -98,7 +98,7 @@ public:
 	CTownBonus(const BuildingID & index, BuildingSubID::EBuildingSubID subId, CGTownInstance * TOWN);
 	CTownBonus(IGameCallback *cb);
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGTownBuilding&>(*this);
 		h & visitors;
@@ -136,7 +136,7 @@ public:
 	CTownRewardableBuilding(const BuildingID & index, BuildingSubID::EBuildingSubID subId, CGTownInstance * town, CRandomGenerator & rand);
 	CTownRewardableBuilding(IGameCallback *cb);
 	
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGTownBuilding&>(*this);
 		h & static_cast<Rewardable::Interface&>(*this);

+ 1 - 1
lib/mapObjects/CGTownInstance.h

@@ -67,7 +67,7 @@ public:
 	std::pair<si32, si32> bonusValue;//var to store town bonuses (rampart = resources from mystic pond);
 
 	//////////////////////////////////////////////////////////////////////////
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGDwelling&>(*this);
 		h & nameTextId;

+ 8 - 8
lib/mapObjects/CQuest.h

@@ -69,7 +69,7 @@ public:
 		return (quest.qid == qid);
 	}
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & qid;
 		h & isCompleted;
@@ -106,7 +106,7 @@ public:
 	virtual void getVisitText (MetaString &text, std::vector<Component> &components, bool FirstVisit, const CGHeroInstance * h = nullptr) const = 0;
 	virtual bool checkQuest (const CGHeroInstance * h) const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & quest;
 	}
@@ -142,7 +142,7 @@ public:
 
 	void afterAddToMap(CMap * map) override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CRewardableObject&>(*this);
 		h & static_cast<IQuestObject&>(*this);
@@ -164,7 +164,7 @@ public:
 	void onHeroVisit(const CGHeroInstance * h) const override;
 	bool passableFor(PlayerColor color) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGSeerHut&>(*this);
 	}
@@ -182,7 +182,7 @@ public:
 	std::string getObjectName() const override; //depending on color
 	std::string getHoverText(PlayerColor player) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 	}
@@ -196,7 +196,7 @@ public:
 	bool wasVisited (PlayerColor player) const override;
 	void onHeroVisit(const CGHeroInstance * h) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 	}
@@ -217,7 +217,7 @@ public:
 
 	void afterAddToMap(CMap * map) override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<IQuestObject&>(*this);
 		h & static_cast<CGObjectInstance&>(*this);
@@ -233,7 +233,7 @@ public:
 
 	bool passableFor(PlayerColor color) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGBorderGuard&>(*this); //need to serialize or object will be empty
 	}

+ 1 - 1
lib/mapObjects/CRewardableObject.h

@@ -78,7 +78,7 @@ public:
 	std::vector<Component> getPopupComponents(PlayerColor player) const override;
 	std::vector<Component> getPopupComponents(const CGHeroInstance * hero) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CArmedInstance&>(*this);
 		h & static_cast<Rewardable::Interface&>(*this);

+ 1 - 1
lib/mapObjects/IObjectInterface.h

@@ -67,7 +67,7 @@ public:
 	static void preInit(); //called before objs receive their initObj
 	static void postInit();//called after objs receive their initObj
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		logGlobal->error("IObjectInterface serialized, unexpected, should not happen!");
 	}

+ 18 - 18
lib/mapObjects/MiscObjects.h

@@ -33,7 +33,7 @@ public:
 	bool wasVisited(const TeamID & team) const;
 	void setPropertyDer(ObjProperty what, ObjPropertyID identifier) override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 		h & players;
@@ -50,7 +50,7 @@ public:
 	void onHeroVisit(const CGHeroInstance * h) const override;
 	void initObj(CRandomGenerator & rand) override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 		h & message;
@@ -71,7 +71,7 @@ public:
 	void onHeroVisit(const CGHeroInstance * h) const override;
 	void battleFinished(const CGHeroInstance *hero, const BattleResult &result) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CArmedInstance&>(*this);
 		h & removableUnits;
@@ -107,7 +107,7 @@ public:
 
 	ArtifactID getArtifact() const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CArmedInstance&>(*this);
 		h & message;
@@ -137,7 +137,7 @@ public:
 	void collectRes(const PlayerColor & player) const;
 	GameResID resourceID() const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CArmedInstance&>(*this);
 		h & amount;
@@ -172,7 +172,7 @@ private:
 	std::string getHoverText(PlayerColor player) const override;
 
 public:
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CArmedInstance&>(*this);
 		h & producedResource;
@@ -193,7 +193,7 @@ struct DLL_LINKAGE TeleportChannel
 	std::vector<ObjectInstanceID> exits;
 	EPassability passability = EPassability::UNKNOWN;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & entrances;
 		h & exits;
@@ -232,7 +232,7 @@ public:
 	static std::vector<ObjectInstanceID> getPassableExits(CGameState * gs, const CGHeroInstance * h, std::vector<ObjectInstanceID> exits);
 	static bool isExitPassable(CGameState * gs, const CGHeroInstance * h, const CGObjectInstance * obj);
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & type;
 		h & channel;
@@ -252,7 +252,7 @@ protected:
 public:
 	using CGTeleport::CGTeleport;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGTeleport&>(*this);
 	}
@@ -268,7 +268,7 @@ public:
 
 	static void postInit(IGameCallback * cb);
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGMonolith&>(*this);
 	}
@@ -283,7 +283,7 @@ class DLL_LINKAGE CGWhirlpool : public CGMonolith
 public:
 	using CGMonolith::CGMonolith;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGMonolith&>(*this);
 	}
@@ -298,7 +298,7 @@ public:
 	std::string getHoverText(const CGHeroInstance * hero) const override;
 	void initObj(CRandomGenerator & rand) override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 	}
@@ -323,7 +323,7 @@ public:
 	CGBoat(IGameCallback * cb);
 	bool isCoastVisitable() const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 		h & static_cast<CBonusSystemNode&>(*this);
@@ -353,7 +353,7 @@ protected:
 public:
 	using CGObjectInstance::CGObjectInstance;
 
-	template<typename Handler> void serialize(Handler & h, const int version)
+	template<typename Handler> void serialize(Handler & h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 		h & createdBoat;
@@ -371,7 +371,7 @@ public:
 	void initObj(CRandomGenerator & rand) override;
 	void onHeroVisit(const CGHeroInstance * h) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 	}
@@ -393,7 +393,7 @@ public:
 	void initObj(CRandomGenerator & rand) override;
 	std::string getHoverText(PlayerColor player) const override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CTeamVisited&>(*this);
 	}
@@ -409,7 +409,7 @@ public:
 	void onHeroVisit(const CGHeroInstance * h) const override;
 	void initObj(CRandomGenerator & rand) override;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 	}
@@ -443,7 +443,7 @@ protected:
 public:
 	using CGObjectInstance::CGObjectInstance;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & static_cast<CGObjectInstance&>(*this);
 		h & upgradeCostPercentage;

+ 2 - 2
lib/mapObjects/ObjectTemplate.h

@@ -156,7 +156,7 @@ private:
 	void calculateTopVisibleOffset();
 
 public:
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & usedTiles;
 		h & allowedTerrains;
@@ -164,7 +164,7 @@ public:
 		h & animationFile;
 		h & stringID;
 		h & id;
-		subid.serializeIdentifier(h, id, version);
+		subid.serializeIdentifier(h, id);
 		h & printPriority;
 		h & visitDir;
 		h & editorAnimationFile;

+ 3 - 3
lib/mapping/CMap.h

@@ -44,7 +44,7 @@ struct DLL_LINKAGE Rumor
 	~Rumor() = default;
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & name;
 		h & text;
@@ -64,7 +64,7 @@ struct DLL_LINKAGE DisposedHero
 	std::set<PlayerColor> players; /// Who can hire this hero (bitfield).
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & heroId;
 		h & portrait;
@@ -173,7 +173,7 @@ private:
 
 public:
 	template <typename Handler>
-	void serialize(Handler &h, const int formatVersion)
+	void serialize(Handler &h)
 	{
 		h & static_cast<CMapHeader&>(*this);
 		h & triggeredEvents; //from CMapHeader

+ 3 - 3
lib/mapping/CMapDefines.h

@@ -43,7 +43,7 @@ public:
 	ui32 nextOccurence; /// specifies after how many days the event will occur the next time; 0 if event occurs only one time
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & name;
 		h & message;
@@ -68,7 +68,7 @@ public:
 	std::vector<si32> creatures;
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & static_cast<CMapEvent &>(*this);
 		h & buildings;
@@ -112,7 +112,7 @@ struct DLL_LINKAGE TerrainTile
 	std::vector<CGObjectInstance *> blockingObjects;
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & terType;
 		h & terView;

+ 6 - 6
lib/mapping/CMapHeader.h

@@ -32,7 +32,7 @@ struct DLL_LINKAGE SHeroName
 	std::string heroName;
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & heroId;
 		h & heroName;
@@ -76,7 +76,7 @@ struct DLL_LINKAGE PlayerInfo
 	TeamID team; /// The default value NO_TEAM
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & hasRandomHero;
 		h & mainCustomHeroId;
@@ -128,7 +128,7 @@ struct DLL_LINKAGE EventCondition
 	EWinLoseType condition;
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & objectID;
 		h & value;
@@ -156,7 +156,7 @@ struct DLL_LINKAGE EventEffect
 	MetaString toOtherMessage;
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & type;
 		h & toOtherMessage;
@@ -181,7 +181,7 @@ struct DLL_LINKAGE TriggeredEvent
 	EventEffect effect;
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & identifier;
 		h & trigger;
@@ -245,7 +245,7 @@ public:
 	void registerMapStrings();
 
 	template <typename Handler>
-	void serialize(Handler & h, const int Version)
+	void serialize(Handler & h)
 	{
 		h & texts;
 		h & version;

+ 1 - 1
lib/mapping/CMapInfo.cpp

@@ -55,7 +55,7 @@ void CMapInfo::mapInit(const std::string & fname)
 
 void CMapInfo::saveInit(const ResourcePath & file)
 {
-	CLoadFile lf(*CResourceHandler::get()->getResourceName(file), MINIMAL_SERIALIZATION_VERSION);
+	CLoadFile lf(*CResourceHandler::get()->getResourceName(file), ESerializationVersion::MINIMAL);
 	lf.checkMagicBytes(SAVEGAME_MAGIC);
 
 	mapHeader = std::make_unique<CMapHeader>();

+ 1 - 1
lib/mapping/CMapInfo.h

@@ -58,7 +58,7 @@ public:
 	int getMapSizeFormatIconId() const;
 	std::string getMapSizeName() const;
 
-	template <typename Handler> void serialize(Handler &h, const int Version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & mapHeader;
 		h & campaign;

+ 1 - 1
lib/modding/ActiveModsInSaveList.h

@@ -22,7 +22,7 @@ class ActiveModsInSaveList
 	/// Checks whether provided mod list is compatible with current VLC and throws on failure
 	void verifyActiveMods(const std::vector<std::pair<TModID, ModVerificationInfo>> & modList);
 public:
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		if(h.saving)
 		{

+ 1 - 1
lib/modding/CModVersion.h

@@ -38,7 +38,7 @@ struct DLL_LINKAGE CModVersion
 	bool compatible(const CModVersion & other, bool checkMinor = false, bool checkPatch = false) const;
 	bool isNull() const;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & major;
 		h & minor;

+ 1 - 1
lib/modding/ModVerificationInfo.h

@@ -31,7 +31,7 @@ struct ModVerificationInfo
 	bool impactsGameplay = true;
 
 	template <typename Handler>
-	void serialize(Handler & h, const int v)
+	void serialize(Handler & h)
 	{
 		h & name;
 		h & version;

+ 1 - 1
lib/networkPacks/ArtifactLocation.h

@@ -38,7 +38,7 @@ struct ArtifactLocation
 	{
 	}
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & artHolder;
 		h & slot;

+ 2 - 2
lib/networkPacks/BattleChanges.h

@@ -47,7 +47,7 @@ public:
 	{
 	}
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & id;
 		h & healthDelta;
@@ -69,7 +69,7 @@ public:
 	{
 	}
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & id;
 		h & data;

+ 1 - 1
lib/networkPacks/Component.h

@@ -43,7 +43,7 @@ struct Component
 	ComponentSubType subType;
 	std::optional<int32_t> value; // + give; - take
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & type;
 		h & subType;

+ 1 - 1
lib/networkPacks/EntityChanges.h

@@ -21,7 +21,7 @@ public:
 	Metatype metatype = Metatype::UNKNOWN;
 	int32_t entityIndex = 0;
 	JsonNode data;
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & metatype;
 		h & entityIndex;

+ 2 - 2
lib/networkPacks/NetPacksBase.h

@@ -27,7 +27,7 @@ struct DLL_LINKAGE CPack
 	CPack() = default;
 	virtual ~CPack() = default;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		logNetwork->error("CPack serialized... this should not happen!");
 		assert(false && "CPack serialized");
@@ -66,7 +66,7 @@ struct DLL_LINKAGE CPackForServer : public CPack
 	mutable PlayerColor player = PlayerColor::NEUTRAL;
 	mutable si32 requestID;
 
-	template <typename Handler> void serialize(Handler &h, const int version)
+	template <typename Handler> void serialize(Handler &h)
 	{
 		h & player;
 		h & requestID;

+ 74 - 74
lib/networkPacks/PacksForClient.h

@@ -62,7 +62,7 @@ struct DLL_LINKAGE PackageApplied : public CPackForClient
 	ui32 requestID = 0; //an ID given by client to the request that was applied
 	PlayerColor player;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & result;
 		h & packType;
@@ -83,7 +83,7 @@ struct DLL_LINKAGE SystemMessage : public CPackForClient
 
 	std::string text;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & text;
 	}
@@ -100,7 +100,7 @@ struct DLL_LINKAGE PlayerBlocked : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & reason;
 		h & startOrEnd;
@@ -118,7 +118,7 @@ struct DLL_LINKAGE PlayerCheated : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & player;
 		h & losingCheatCode;
@@ -133,7 +133,7 @@ struct DLL_LINKAGE TurnTimeUpdate : public CPackForClient
 	PlayerColor player;
 	TurnTimerInfo turnTimer;
 		
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & player;
 		h & turnTimer;
@@ -148,7 +148,7 @@ struct DLL_LINKAGE PlayerStartsTurn : public Query
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & queryID;
 		h & player;
@@ -164,7 +164,7 @@ struct DLL_LINKAGE DaysWithoutTown : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & player;
 		h & daysWithoutCastle;
@@ -179,7 +179,7 @@ struct DLL_LINKAGE EntitiesChanged : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & changes;
 	}
@@ -195,7 +195,7 @@ struct DLL_LINKAGE SetResources : public CPackForClient
 	PlayerColor player;
 	ResourceSet res; //res[resid] => res amount
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & abs;
 		h & player;
@@ -214,7 +214,7 @@ struct DLL_LINKAGE SetPrimSkill : public CPackForClient
 	PrimarySkill which = PrimarySkill::ATTACK;
 	si64 val = 0;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & abs;
 		h & id;
@@ -234,7 +234,7 @@ struct DLL_LINKAGE SetSecSkill : public CPackForClient
 	SecondarySkill which;
 	ui16 val = 0;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & abs;
 		h & id;
@@ -258,7 +258,7 @@ struct DLL_LINKAGE HeroVisitCastle : public CPackForClient
 		return flags & 1;
 	}
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & flags;
 		h & tid;
@@ -276,7 +276,7 @@ struct DLL_LINKAGE ChangeSpells : public CPackForClient
 	ObjectInstanceID hid;
 	std::set<SpellID> spells;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & learn;
 		h & hid;
@@ -294,7 +294,7 @@ struct DLL_LINKAGE SetMana : public CPackForClient
 	si32 val = 0;
 	bool absolute = true;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & val;
 		h & hid;
@@ -312,7 +312,7 @@ struct DLL_LINKAGE SetMovePoints : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & val;
 		h & hid;
@@ -331,7 +331,7 @@ struct DLL_LINKAGE FoWChange : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & tiles;
 		h & player;
@@ -357,7 +357,7 @@ struct DLL_LINKAGE SetAvailableHero : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & slotID;
 		h & roleID;
@@ -386,7 +386,7 @@ struct DLL_LINKAGE GiveBonus : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & bonus;
 		h & id;
@@ -409,7 +409,7 @@ struct DLL_LINKAGE ChangeObjPos : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & objid;
 		h & nPos;
@@ -425,7 +425,7 @@ struct DLL_LINKAGE PlayerEndsTurn : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & player;
 	}
@@ -440,7 +440,7 @@ struct DLL_LINKAGE PlayerEndsGame : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & player;
 		h & victoryLossCheckResult;
@@ -456,7 +456,7 @@ struct DLL_LINKAGE PlayerReinitInterface : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & players;
 		h & playerConnectionId;
@@ -484,7 +484,7 @@ struct DLL_LINKAGE RemoveBonus : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & source;
 		h & id;
@@ -508,7 +508,7 @@ struct DLL_LINKAGE SetCommanderProperty : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & heroid;
 		h & which;
@@ -527,7 +527,7 @@ struct DLL_LINKAGE AddQuest : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & player;
 		h & quest;
@@ -541,7 +541,7 @@ struct DLL_LINKAGE UpdateArtHandlerLists : public CPackForClient
 	void applyGs(CGameState * gs) const;
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & allocatedArtifacts;
 	}
@@ -554,7 +554,7 @@ struct DLL_LINKAGE UpdateMapEvents : public CPackForClient
 	void applyGs(CGameState * gs) const;
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & events;
 	}
@@ -568,7 +568,7 @@ struct DLL_LINKAGE UpdateCastleEvents : public CPackForClient
 	void applyGs(CGameState * gs) const;
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & town;
 		h & events;
@@ -583,7 +583,7 @@ struct DLL_LINKAGE ChangeFormation : public CPackForClient
 	void applyGs(CGameState * gs) const;
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & hid;
 		h & formation;
@@ -608,7 +608,7 @@ struct DLL_LINKAGE RemoveObject : public CPackForClient
 	/// Player that initiated this action, if any
 	PlayerColor initiator;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & objectID;
 		h & initiator;
@@ -644,7 +644,7 @@ struct DLL_LINKAGE TryMoveHero : public CPackForClient
 		return result != SUCCESS && result != EMBARK && result != DISEMBARK && result != TELEPORTATION;
 	}
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & id;
 		h & result;
@@ -666,7 +666,7 @@ struct DLL_LINKAGE NewStructures : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & tid;
 		h & bid;
@@ -684,7 +684,7 @@ struct DLL_LINKAGE RazeStructures : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & tid;
 		h & bid;
@@ -701,7 +701,7 @@ struct DLL_LINKAGE SetAvailableCreatures : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & tid;
 		h & creatures;
@@ -718,7 +718,7 @@ struct DLL_LINKAGE SetHeroesInTown : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & tid;
 		h & visiting;
@@ -738,7 +738,7 @@ struct DLL_LINKAGE HeroRecruited : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & hid;
 		h & tid;
@@ -758,7 +758,7 @@ struct DLL_LINKAGE GiveHero : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & id;
 		h & boatId;
@@ -774,7 +774,7 @@ struct DLL_LINKAGE OpenWindow : public Query
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & queryID;
 		h & window;
@@ -800,10 +800,10 @@ struct DLL_LINKAGE NewObject : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & ID;
-		subID.serializeIdentifier(h, ID, version);
+		subID.serializeIdentifier(h, ID);
 		h & targetPos;
 		h & initiator;
 	}
@@ -819,7 +819,7 @@ struct DLL_LINKAGE SetAvailableArtifacts : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & id;
 		h & arts;
@@ -841,7 +841,7 @@ struct DLL_LINKAGE ChangeStackCount : CGarrisonOperationPack
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & army;
 		h & slot;
@@ -860,7 +860,7 @@ struct DLL_LINKAGE SetStackType : CGarrisonOperationPack
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & army;
 		h & slot;
@@ -876,7 +876,7 @@ struct DLL_LINKAGE EraseStack : CGarrisonOperationPack
 	void applyGs(CGameState * gs);
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & army;
 		h & slot;
@@ -893,7 +893,7 @@ struct DLL_LINKAGE SwapStacks : CGarrisonOperationPack
 	void applyGs(CGameState * gs);
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & srcArmy;
 		h & dstArmy;
@@ -912,7 +912,7 @@ struct DLL_LINKAGE InsertNewStack : CGarrisonOperationPack
 	void applyGs(CGameState * gs);
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & army;
 		h & slot;
@@ -934,7 +934,7 @@ struct DLL_LINKAGE RebalanceStacks : CGarrisonOperationPack
 	void applyGs(CGameState * gs);
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & srcArmy;
 		h & dstArmy;
@@ -952,7 +952,7 @@ struct DLL_LINKAGE BulkRebalanceStacks : CGarrisonOperationPack
 	void visitTyped(ICPackVisitor & visitor) override;
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & moves;
 	}
@@ -967,7 +967,7 @@ struct DLL_LINKAGE BulkSmartRebalanceStacks : CGarrisonOperationPack
 	void visitTyped(ICPackVisitor & visitor) override;
 
 	template <typename Handler>
-	void serialize(Handler & h, const int version)
+	void serialize(Handler & h)
 	{
 		h & moves;
 		h & changes;
@@ -993,7 +993,7 @@ struct DLL_LINKAGE PutArtifact : CArtifactOperationPack
 	void applyGs(CGameState * gs);
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & al;
 		h & askAssemble;
@@ -1008,7 +1008,7 @@ struct DLL_LINKAGE NewArtifact : public CArtifactOperationPack
 	void applyGs(CGameState * gs);
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & art;
 	}
@@ -1021,7 +1021,7 @@ struct DLL_LINKAGE EraseArtifact : CArtifactOperationPack
 	void applyGs(CGameState * gs);
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & al;
 	}
@@ -1041,7 +1041,7 @@ struct DLL_LINKAGE MoveArtifact : CArtifactOperationPack
 	void applyGs(CGameState * gs);
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & src;
 		h & dst;
@@ -1062,7 +1062,7 @@ struct DLL_LINKAGE BulkMoveArtifacts : CArtifactOperationPack
 			, dstPos(dstPos)
 		{
 		}
-		template <typename Handler> void serialize(Handler & h, const int version)
+		template <typename Handler> void serialize(Handler & h)
 		{
 			h & srcPos;
 			h & dstPos;
@@ -1102,7 +1102,7 @@ struct DLL_LINKAGE BulkMoveArtifacts : CArtifactOperationPack
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & artsPack0;
 		h & artsPack1;
@@ -1124,7 +1124,7 @@ struct DLL_LINKAGE AssembledArtifact : CArtifactOperationPack
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & al;
 		h & builtArt;
@@ -1139,7 +1139,7 @@ struct DLL_LINKAGE DisassembledArtifact : CArtifactOperationPack
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & al;
 	}
@@ -1157,7 +1157,7 @@ struct DLL_LINKAGE HeroVisit : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & player;
 		h & heroId;
@@ -1179,7 +1179,7 @@ struct DLL_LINKAGE NewTurn : public CPackForClient
 		ObjectInstanceID id; //id is a general serial id
 		ui32 move;
 		ui32 mana;
-		template <typename Handler> void serialize(Handler & h, const int version)
+		template <typename Handler> void serialize(Handler & h)
 		{
 			h & id;
 			h & move;
@@ -1197,7 +1197,7 @@ struct DLL_LINKAGE NewTurn : public CPackForClient
 
 	NewTurn() = default;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & heroes;
 		h & cres;
@@ -1218,7 +1218,7 @@ struct DLL_LINKAGE InfoWindow : public CPackForClient //103  - displays simple i
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & type;
 		h & text;
@@ -1241,7 +1241,7 @@ struct DLL_LINKAGE SetObjectProperty : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & id;
 		h & what;
@@ -1276,7 +1276,7 @@ struct DLL_LINKAGE ChangeObjectVisitors : public CPackForClient
 	{
 	}
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & object;
 		h & hero;
@@ -1296,7 +1296,7 @@ struct DLL_LINKAGE HeroLevelUp : public Query
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & queryID;
 		h & player;
@@ -1317,7 +1317,7 @@ struct DLL_LINKAGE CommanderLevelUp : public Query
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & queryID;
 		h & player;
@@ -1356,7 +1356,7 @@ struct DLL_LINKAGE BlockingDialog : public Query
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & queryID;
 		h & text;
@@ -1375,7 +1375,7 @@ struct DLL_LINKAGE GarrisonDialog : public Query
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & queryID;
 		h & objid;
@@ -1393,7 +1393,7 @@ struct DLL_LINKAGE ExchangeDialog : public Query
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & queryID;
 		h & player;
@@ -1418,7 +1418,7 @@ struct DLL_LINKAGE TeleportDialog : public Query
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & queryID;
 		h & hero;
@@ -1438,7 +1438,7 @@ struct DLL_LINKAGE MapObjectSelectDialog : public Query
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & queryID;
 		h & player;
@@ -1453,7 +1453,7 @@ struct DLL_LINKAGE AdvmapSpellCast : public CPackForClient
 {
 	ObjectInstanceID casterID;
 	SpellID spellID;
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & casterID;
 		h & spellID;
@@ -1470,7 +1470,7 @@ struct DLL_LINKAGE ShowWorldViewEx : public CPackForClient
 
 	std::vector<ObjectPosInfo> objectPositions;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & player;
 		h & showTerrain;
@@ -1494,7 +1494,7 @@ struct DLL_LINKAGE PlayerMessageClient : public CPackForClient
 	PlayerColor player;
 	std::string text;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & player;
 		h & text;
@@ -1509,7 +1509,7 @@ struct DLL_LINKAGE CenterView : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & pos;
 		h & player;

+ 23 - 23
lib/networkPacks/PacksForClientBattle.h

@@ -32,7 +32,7 @@ struct DLL_LINKAGE BattleStart : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & info;
@@ -48,7 +48,7 @@ struct DLL_LINKAGE BattleNextRound : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		assert(battleID != BattleID::NONE);
@@ -65,7 +65,7 @@ struct DLL_LINKAGE BattleSetActiveStack : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & stack;
@@ -80,7 +80,7 @@ struct DLL_LINKAGE BattleCancelled: public CPackForClient
 
 	BattleID battleID = BattleID::NONE;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		assert(battleID != BattleID::NONE);
@@ -100,7 +100,7 @@ struct DLL_LINKAGE BattleResultAccepted : public CPackForClient
 		CArmedInstance * army;
 		TExpType exp;
 
-		template <typename Handler> void serialize(Handler & h, const int version)
+		template <typename Handler> void serialize(Handler & h)
 		{
 			h & hero;
 			h & army;
@@ -112,7 +112,7 @@ struct DLL_LINKAGE BattleResultAccepted : public CPackForClient
 	std::array<HeroBattleResults, 2> heroResult;
 	ui8 winnerSide;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & heroResult;
@@ -134,7 +134,7 @@ struct DLL_LINKAGE BattleResult : public Query
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & queryID;
@@ -158,7 +158,7 @@ struct DLL_LINKAGE BattleLogMessage : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & lines;
@@ -179,7 +179,7 @@ struct DLL_LINKAGE BattleStackMoved : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & stack;
@@ -200,7 +200,7 @@ struct DLL_LINKAGE BattleUnitsChanged : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & changedStacks;
@@ -248,7 +248,7 @@ struct BattleStackAttacked
 		return flags & FIRE_SHIELD;
 	}
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & stackAttacked;
@@ -315,7 +315,7 @@ struct DLL_LINKAGE BattleAttack : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & bsa;
@@ -343,7 +343,7 @@ struct DLL_LINKAGE StartAction : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & ba;
@@ -357,7 +357,7 @@ struct DLL_LINKAGE EndAction : public CPackForClient
 
 	BattleID battleID = BattleID::NONE;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 	}
@@ -381,7 +381,7 @@ struct DLL_LINKAGE BattleSpellCast : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & side;
@@ -408,7 +408,7 @@ struct DLL_LINKAGE StacksInjured : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & stacks;
@@ -422,7 +422,7 @@ struct DLL_LINKAGE BattleResultsApplied : public CPackForClient
 	PlayerColor player1, player2;
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & player1;
@@ -441,7 +441,7 @@ struct DLL_LINKAGE BattleObstaclesChanged : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & changes;
@@ -457,7 +457,7 @@ struct DLL_LINKAGE CatapultAttack : public CPackForClient
 		EWallPart attackedPart;
 		ui8 damageDealt;
 
-		template <typename Handler> void serialize(Handler & h, const int version)
+		template <typename Handler> void serialize(Handler & h)
 		{
 			h & destinationTile;
 			h & attackedPart;
@@ -477,7 +477,7 @@ struct DLL_LINKAGE CatapultAttack : public CPackForClient
 
 	void visitTyped(ICPackVisitor & visitor) override;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & attackedParts;
@@ -498,7 +498,7 @@ struct DLL_LINKAGE BattleSetStackProperty : public CPackForClient
 	int val = 0;
 	int absolute = 0;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & stackID;
@@ -523,7 +523,7 @@ struct DLL_LINKAGE BattleTriggerEffect : public CPackForClient
 	int val = 0;
 	int additionalInfo = 0;
 
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & stackID;
@@ -543,7 +543,7 @@ struct DLL_LINKAGE BattleUpdateGateState : public CPackForClient
 
 	BattleID battleID = BattleID::NONE;
 	EGateState state = EGateState::NONE;
-	template <typename Handler> void serialize(Handler & h, const int version)
+	template <typename Handler> void serialize(Handler & h)
 	{
 		h & battleID;
 		h & state;

Some files were not shown because too many files changed in this diff