Add documentation for map block format 27 (#5576)
authorDániel Juhász <juhdanad@gmail.com>
Thu, 13 Apr 2017 08:19:46 +0000 (10:19 +0200)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Thu, 13 Apr 2017 08:19:46 +0000 (10:19 +0200)
doc/world_format.txt
src/mapblock.h

index a4fb3d8f23ac5dd732d9848f476cd97e269fd62c..976d14fd5f0e8ec16b473220dcef614968c29a50 100644 (file)
@@ -1,12 +1,13 @@
 =============================
-Minetest World Format 22...25
+Minetest World Format 22...27
 =============================
 
 This applies to a world format carrying the block serialization version
-22...25, used at least in
+22...27, used at least in
 - 0.4.dev-20120322 ... 0.4.dev-20120606 (22...23)
 - 0.4.0 (23)
 - 24 was never released as stable and existed for ~2 days
+- 27 was added in 0.4.15-dev
 
 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
@@ -262,15 +263,36 @@ u8 flags
   - 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.
+  - 0x04: lighting_expired: Not used in version 27 and above. 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.
   - 0x08: generated: True if the block has been generated. If false, block
     is mostly filled with CONTENT_IGNORE and is likely to contain eg. parts
     of trees of neighboring blocks.
 
+u16 lighting_complete
+- Added in version 27.
+- This contains 12 flags, each of them corresponds to a direction.
+- Indicates if the light is correct at the sides of a map block.
+  Lighting may not be correct if the light changed, but a neighbor
+  block was not loaded at that time.
+  If these flags are false, Minetest will automatically recompute light
+  when both this block and its required neighbor are loaded.
+- The bit order is:
+  nothing,  nothing,  nothing,  nothing,
+  night X-, night Y-, night Z-, night Z+, night Y+, night X+,
+  day X-,   day Y-,   day Z-,   day Z+,   day Y+,   day X+.
+  Where 'day' is for the day light bank, 'night' is for the night
+  light bank.
+  The 'nothing' bits should be always set, as they will be used
+  to indicate if direct sunlight spreading is finished.
+- Example: if the block at (0, 0, 0) has
+  lighting_complete = 0b1111111111111110,
+  then Minetest will correct lighting in the day light bank when
+  the block at (1, 0, 0) is also loaded.
+
 u8 content_width
 - Number of bytes in the content (param0) fields of nodes
 if map format version <= 23:
index c48f337e07efc6a14dc714db0d985d56004b297b..7ff613fe86086010eee748185cf358ad9ebd5fa8 100644 (file)
@@ -633,9 +633,10 @@ private:
        /*!
         * Each bit indicates if light spreading was finished
         * in a direction. (Because the neighbor could also be unloaded.)
-        * Bits: day X+, day Y+, day Z+, day Z-, day Y-, day X-,
-        * night X+, night Y+, night Z+, night Z-, night Y-, night X-,
-        * nothing, nothing, nothing, nothing.
+        * Bits (most significant first):
+        * nothing,  nothing,  nothing,  nothing,
+        * night X-, night Y-, night Z-, night Z+, night Y+, night X+,
+        * day X-,   day Y-,   day Z-,   day Z+,   day Y+,   day X+.
        */
        u16 m_lighting_complete;