Simple deco: Allow setting param2 value on placement
authorAuke Kok <sofar@foo-projects.org>
Wed, 7 Dec 2016 00:39:33 +0000 (16:39 -0800)
committerparamat <mat.gregory@virginmedia.com>
Wed, 7 Dec 2016 04:17:17 +0000 (04:17 +0000)
Schematics can already be placed with a param2 value, but not
simple 1-node plant decorations of the simple type.

This adds a `param2` field to the simple deco type that is
checked to be between 0 and 255, and put to the placed node
at mapgen.

This can be used to put a degrotate value in, or e.g. a fill
value for leveltype nodes, or a place_param2 value at mapgen
placement, or vary the shape of meshoptions plantlike drawtype.

doc/lua_api.txt
src/mg_decoration.cpp
src/mg_decoration.h
src/script/lua_api/l_mapgen.cpp

index bab3e11f7034eba3ca776f840b387d24dff4bd74..62cd6bb468235a8573d1b64e97163a17dc592d67 100644 (file)
@@ -4040,8 +4040,10 @@ The Biome API is still in an experimental phase and subject to change.
     --  ^ Number of nodes high the decoration is made.
     --  ^ If height_max is not 0, this is the lower bound of the randomly selected height.
         height_max = 0,
-    --      ^ Number of nodes the decoration can be at maximum.
+    --  ^ Number of nodes the decoration can be at maximum.
     --  ^ If absent, the parameter 'height' is used as a constant.
+        param2 = 0,
+    --  ^ Param2 value of placed decoration node.
 
         ----- Schematic-type parameters
         schematic = "foobar.mts",
index 92483abc3d13c7c6f049bbe15d4d64d38c9f8bb6..51e4fbbcc9e3714f14fcffe994b1084a387c8e45 100644 (file)
@@ -315,7 +315,7 @@ size_t DecoSimple::generate(MMVManip *vm, PcgRandom *pr, v3s16 p)
                                !force_placement)
                        break;
 
-               vm->m_data[vi] = MapNode(c_place);
+               vm->m_data[vi] = MapNode(c_place, 0, deco_param2);
        }
 
        return 1;
index be0ba44d779646a5abf2450475f38a818f9c7b29..986328ec3bc86be4a4ba741823d96bca45920057 100644 (file)
@@ -100,6 +100,7 @@ public:
        std::vector<content_t> c_decos;
        s16 deco_height;
        s16 deco_height_max;
+       u8 deco_param2;
 };
 
 class DecoSchematic : public Decoration {
index da8e71cdc67554a719eb9794a6ed4c039531546d..cefea3da9a5896c6e7c0d319abfb02e39d498652 100644 (file)
@@ -975,6 +975,7 @@ bool read_deco_simple(lua_State *L, DecoSimple *deco)
 
        deco->deco_height     = getintfield_default(L, index, "height", 1);
        deco->deco_height_max = getintfield_default(L, index, "height_max", 0);
+       deco->deco_param2     = getintfield_default(L, index, "param2", 0);
 
        if (deco->deco_height <= 0) {
                errorstream << "register_decoration: simple decoration height"
@@ -990,6 +991,12 @@ bool read_deco_simple(lua_State *L, DecoSimple *deco)
                return false;
        }
 
+       if ((deco->deco_param2 < 0) || (deco->deco_param2 > 255)) {
+               errorstream << "register_decoration: param2 out of bounds (0-255)"
+                       << std::endl;
+               return false;
+       }
+
        return true;
 }