From e74668ef7f68156ef9c24ecc97d130ca53f8c624 Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
Date: Fri, 8 Jun 2012 14:57:02 +0300
Subject: [PATCH] Update and fix doc/mapformat.txt; make current format more
 solid in mapblock.cpp

---
 doc/mapformat.txt | 26 +++++++++++++-------------
 src/mapblock.cpp  | 18 +++++++++++++-----
 2 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/doc/mapformat.txt b/doc/mapformat.txt
index a7380b35e..ce00d276e 100644
--- a/doc/mapformat.txt
+++ b/doc/mapformat.txt
@@ -1,13 +1,13 @@
-=================================================
-Minetest World Format used as of 0.4.dev-20120322
-=================================================
+=============================
+Minetest World Format 22...23
+=============================
 
-This applies to a world format carrying the block serialization version 22
-which is used at least in version 0.4.dev-20120322.
+This applies to a world format carrying the block serialization version
+22...23, used at least in 0.4.dev-20120322 ... 0.4.dev-20120606.
 
-The block serialization version used is 22. It does not fully specify every
-aspect of this format; if compliance with this format is to be checked, it
-needs to be done by detecting if the files and data indeed follows it.
+The block serialization version does not fully specify every aspect of this
+format; if compliance with this format is to be checked, it needs to be
+done by detecting if the files and data indeed follows it.
 
 Legacy stuff
 =============
@@ -20,8 +20,8 @@ Files
 Everything is contained in a directory, the name of which is freeform, but
 often serves as the name of the world.
 
-Currently the authentication and ban data is stored on a per-world basis. It
-can be copied over from an old world to a newly created world.
+Currently the authentication and ban data is stored on a per-world basis.
+It can be copied over from an old world to a newly created world.
 
 World
 |-- auth.txt ----- Authentication data
@@ -283,9 +283,9 @@ zlib-compressed node metadata list
     u16 content_size
     u8[content_size] (content of metadata)
 
-u16 mapblockobject_count
-- Always 0
-- Should be removed in version 23 (TODO)
+- unused node timers (version will be 24 when they are actually used):
+if version == 23:
+  u8 unused version (always 0)
 
 u8 static object version:
 - Always 0
diff --git a/src/mapblock.cpp b/src/mapblock.cpp
index 70a0f6ed0..c4d3c422e 100644
--- a/src/mapblock.cpp
+++ b/src/mapblock.cpp
@@ -616,9 +616,13 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk)
 	*/
 	if(disk)
 	{
-		// Node timers
-		if(version >= 23)
-			m_node_timers.serialize(os);
+		// Version 23 doesn't actually contain node timers
+		// (this field should have not been added)
+		if(version == 23)
+			writeU8(os, 0);
+		// Node timers (uncomment when node timers are taken into use)
+		/*if(version >= 24)
+			m_node_timers.serialize(os);*/
 
 		// Static objects
 		m_static_objects.serialize(os);
@@ -698,11 +702,15 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk)
 	if(disk)
 	{
 		// Node timers
-		if(version >= 23){
+		if(version == 23)
+			// Read unused zero
+			readU8(is);
+		// Uncomment when node timers are taken into use
+		/*else if(version >= 24){
 			TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
 					<<": Node timers"<<std::endl);
 			m_node_timers.deSerialize(is);
-		}
+		}*/
 
 		// Static objects
 		TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
-- 
GitLab