Biome API decorations: 'spawnby' searches a 3D neighbourhood
authorparamat <mat.gregory@virginmedia.com>
Wed, 8 Jul 2015 19:01:29 +0000 (20:01 +0100)
committerparamat <mat.gregory@virginmedia.com>
Wed, 8 Jul 2015 21:44:10 +0000 (22:44 +0100)
The neighbours checked are the 8 nodes horizontally surrounding the decoration base
and the 8 nodes horizontally surrounding the ground node below the decoration

doc/lua_api.txt
src/mg_decoration.cpp

index 95b514a92986fe321c0f0403e7c8176ed0f97287..49292d2b480774da830c38805f8c51226a59e443 100644 (file)
@@ -3331,7 +3331,9 @@ Definition tables
     --      ^ Number of nodes the decoration can be at maximum.
     --  ^ If absent, the parameter 'height' is used as a constant.
         spawn_by = "default:water",
-    --  ^ Node that the decoration only spawns next to, in a 1-node square radius.
+    --  ^ Node that the decoration only spawns next to.
+    --  ^ The neighbours checked are the 8 nodes horizontally surrounding the lowest node of the
+    --  ^ decoration, and the 8 nodes horizontally surrounding the ground node below the decoration.
         num_spawn_by = 1,
     --  ^ Number of spawn_by nodes that must be surrounding the decoration position to occur.
     --  ^ If absent or -1, decorations occur next to any nodes.
index f133788de4fd0415a9c1238d38b858cfd282f0d4..0d669392991827a1741844ee597252c6321c333f 100644 (file)
@@ -246,7 +246,7 @@ bool DecoSimple::canPlaceDecoration(MMVManip *vm, v3s16 p)
                return true;
 
        int nneighs = 0;
-       v3s16 dirs[8] = {
+       v3s16 dirs[16] = {
                v3s16( 0, 0,  1),
                v3s16( 0, 0, -1),
                v3s16( 1, 0,  0),
@@ -254,7 +254,16 @@ bool DecoSimple::canPlaceDecoration(MMVManip *vm, v3s16 p)
                v3s16( 1, 0,  1),
                v3s16(-1, 0,  1),
                v3s16(-1, 0, -1),
-               v3s16( 1, 0, -1)
+               v3s16( 1, 0, -1),
+
+               v3s16( 0, 1,  1),
+               v3s16( 0, 1, -1),
+               v3s16( 1, 1,  0),
+               v3s16(-1, 1,  0),
+               v3s16( 1, 1,  1),
+               v3s16(-1, 1,  1),
+               v3s16(-1, 1, -1),
+               v3s16( 1, 1, -1)
        };
 
        // Check a Moore neighborhood if there are enough spawnby nodes