documentation update (mapformat.txt mainly)
authorPerttu Ahola <celeron55@gmail.com>
Sat, 4 Jun 2011 13:54:26 +0000 (16:54 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Sat, 4 Jun 2011 13:54:26 +0000 (16:54 +0300)
doc/mapformat.txt [new file with mode: 0644]
src/main.cpp

diff --git a/doc/mapformat.txt b/doc/mapformat.txt
new file mode 100644 (file)
index 0000000..5ee33c1
--- /dev/null
@@ -0,0 +1,75 @@
+I'll try to quickly document the newest block format in here (might contain
+errors). Refer to the mapgen or minetestmapper script for the directory
+structure and file naming. There are two sector namings possible,
+sector/XXXXZZZZ and sector/XXX/ZZZ.
+
+There also exists files map_meta.txt and chunk_meta, that are used by the
+generator. If they are not found or invalid, the generator will currently
+behave quite strangely.
+
+The MapBlock file format (sectors2/XXX/ZZZ/YYYY):
+
+NOTE: Byte order is MSB first.
+
+u8 version
+- map format version number, this one is version 17
+
+u8 flags
+- Flag bitmasks:
+  - 0x01: is_underground: Should be set to 0 if there will be no light
+    obstructions above the block. If/when sunlight of a block is updated and
+       there is no block above it, this value is checked for determining whether
+       sunlight comes from the top.
+  - 0x02: day_night_differs: Whether the lighting of the block is different on
+    day and night. Only blocks that have this bit set are updated when day
+       transforms to night.
+  - 0x04: lighting_expired: If true, lighting is invalid and should be updated.
+    If you can't calculate lighting in your generator properly, you could try
+       setting this 1 to everything and setting the uppermost block in every
+       sector as is_underground=0. I am quite sure it doesn't work properly,
+       though.
+
+zlib-compressed map data:
+- content:
+  u8[4096]: content types
+  u8[4096]: param1 values
+  u8[4096]: param2 values
+
+zlib-compressed node metadata
+- content:
+  u16 version (=1)
+  u16 count of metadata
+  foreach count:
+    u16 position (= p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X)
+       u16 type_id
+       u16 content_size
+       u8[content_size] misc. stuff contained in the metadata
+
+u16 mapblockobject_count
+- always write as 0.
+- if read != 0, just fail.
+
+foreach mapblockobject_count:
+  - deprecated, should not be used. Length of this data can only be known by
+    properly parsing it. Just hope not to run into any of this.
+
+u8 static object version:
+- currently 0
+
+u16 static_object_count
+
+foreach static_object_count:
+  u8 type (object type-id)
+  s32 pos_x * 1000
+  s32 pos_y * 1000
+  s32 pos_z * 1000
+  u16 data_size
+  u8[data_size] data
+
+u32 timestamp
+- Timestamp when last saved, as seconds from starting the game.
+- 0xffffffff = invalid/unknown timestamp, nothing will be done with the time
+               difference when loaded (recommended)
+
+// END
+
index 881aa9bf78ce7710dcc6193e062e2a868c511c8b..4bf741b967db2ea9d70015bc6bbf383edc7efd87 100644 (file)
@@ -174,6 +174,12 @@ TODO: Better control of draw_control.wanted_max_blocks
 \r
 TODO: Block mesh generator to tile properly on smooth lighting\r
 \r
+TODO: Further investigate the use of GPU lighting in addition to the\r
+      current one\r
+\r
+TODO: Quick drawing of huge distances according to heightmap has to be\r
+      tested once again.\r
+\r
 Configuration:\r
 --------------\r
 \r