Index: binary-improvements/7dtd-server-fixes/src/MapRendering/Constants.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/MapRendering/Constants.cs	(revision 168)
+++ binary-improvements/7dtd-server-fixes/src/MapRendering/Constants.cs	(revision 187)
@@ -3,12 +3,12 @@
 namespace AllocsFixes.MapRendering
 {
-	public static class Constants
+	public class Constants
 	{
-		public const int MAP_BLOCK_SIZE = 128;
-		public const int MAP_CHUNK_SIZE = 16;
-		public const int MAP_REGION_SIZE = 512;
-		public const int MAP_BLOCK_TO_CHUNK_DIV = MAP_BLOCK_SIZE / MAP_CHUNK_SIZE;
-		public const int MAP_REGION_TO_CHUNK_DIV = MAP_REGION_SIZE / MAP_CHUNK_SIZE;
-		public const int ZOOMLEVELS = 5;
+		public static int MAP_BLOCK_SIZE = 128;
+		public static int MAP_CHUNK_SIZE = 16;
+		public static int MAP_REGION_SIZE = 512;
+		public static int MAP_BLOCK_TO_CHUNK_DIV { get { return MAP_BLOCK_SIZE / MAP_CHUNK_SIZE; } }
+		public static int MAP_REGION_TO_CHUNK_DIV { get { return MAP_REGION_SIZE / MAP_CHUNK_SIZE; } }
+		public static int ZOOMLEVELS = 5;
 		public static string MAP_DIRECTORY = string.Empty;
 	}
Index: binary-improvements/7dtd-server-fixes/src/MapRendering/MapRendering.cs
===================================================================
--- binary-improvements/7dtd-server-fixes/src/MapRendering/MapRendering.cs	(revision 168)
+++ binary-improvements/7dtd-server-fixes/src/MapRendering/MapRendering.cs	(revision 187)
@@ -1,5 +1,7 @@
+using AllocsFixes.JSON;
 using System;
 using System.Collections.Generic;
 using System.IO;
+using System.Text;
 using System.Threading;
 using UnityEngine;
@@ -20,5 +22,5 @@
 		}
 
-		private MapRenderBlockBuffer[] zoomLevelBuffers = new MapRenderBlockBuffer[Constants.ZOOMLEVELS];
+		private MapRenderBlockBuffer[] zoomLevelBuffers;
 		private Dictionary<Vector2i, Color[]> dirtyChunks = new Dictionary<Vector2i, Color[]> ();
 		private System.Timers.Timer chunkSaveTimer = new System.Timers.Timer (500);
@@ -31,4 +33,11 @@
 			Constants.MAP_DIRECTORY = StaticDirectories.GetSaveGameDir () + "/map";
 
+			if (File.Exists (Constants.MAP_DIRECTORY + "/mapinfo.json")) {
+				LoadMapInfo ();
+			} else {
+				WriteMapInfo ();
+			}
+
+			zoomLevelBuffers = new MapRenderBlockBuffer[Constants.ZOOMLEVELS];
 			for (int i = 0; i < Constants.ZOOMLEVELS; i++) {
 				zoomLevelBuffers [i] = new MapRenderBlockBuffer (i);
@@ -100,6 +109,8 @@
 				}
 
-				if (Directory.Exists (Constants.MAP_DIRECTORY))
+				if (Directory.Exists (Constants.MAP_DIRECTORY)) {
 					Directory.Delete (Constants.MAP_DIRECTORY, true);
+				}
+				WriteMapInfo ();
 
 				renderingFullMap = true;
@@ -239,4 +250,29 @@
 		}
 
+		private void WriteMapInfo ()
+		{
+			JSONObject mapInfo = new JSONObject ();
+			mapInfo.Add ("blockSize", new JSONNumber (Constants.MAP_BLOCK_SIZE));
+			mapInfo.Add ("maxZoom", new JSONNumber (Constants.ZOOMLEVELS - 1));
+
+			Directory.CreateDirectory (Constants.MAP_DIRECTORY);
+			File.WriteAllText (Constants.MAP_DIRECTORY + "/mapinfo.json", mapInfo.ToString (), Encoding.UTF8);
+		}
+
+		private void LoadMapInfo ()
+		{
+			if (File.Exists (Constants.MAP_DIRECTORY + "/mapinfo.json")) {
+				string json = File.ReadAllText (Constants.MAP_DIRECTORY + "/mapinfo.json", Encoding.UTF8);
+				JSONNode node = Parser.Parse (json);
+				if (node is JSONObject) {
+					JSONObject jo = (JSONObject)node;
+					if (jo.ContainsKey ("blockSize"))
+						Constants.MAP_BLOCK_SIZE = ((JSONNumber)jo ["blockSize"]).GetInt ();
+					if (jo.ContainsKey ("maxZoom"))
+						Constants.ZOOMLEVELS = ((JSONNumber)jo ["maxZoom"]).GetInt () + 1;
+				}
+			}
+		}
+
 		private void getWorldExtent (RegionFileManager rfm, out Vector2i minChunk, out Vector2i maxChunk,
 	                                    out Vector2i minPos, out Vector2i maxPos,
