diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 28509a267..4ae62bddc 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2130,7 +2130,7 @@ treedef={ thin_branches, - boolean true -> use thin (1 node) branches fruit, - string fruit node name fruit_chance, - num chance (0-100) to replace leaves with fruit node - seed, - num random seed + seed, - num random seed; if no seed is provided, the engine will create one } Key for Special L-System Symbols used in Axioms diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 42bfc4beb..10aaddcc5 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -757,7 +757,7 @@ int ModApiEnvMod::l_spawn_tree(lua_State *L) tree_def.fruitnode=ndef->getId(fruit); getintfield(L, 2, "fruit_chance",tree_def.fruit_chance); } - getintfield(L, 2, "seed", tree_def.seed); + tree_def.explicit_seed = getintfield(L, 2, "seed", tree_def.seed); } else return 0; diff --git a/src/treegen.cpp b/src/treegen.cpp index 542bdf21c..0afe08bf4 100644 --- a/src/treegen.cpp +++ b/src/treegen.cpp @@ -149,8 +149,17 @@ void make_ltree(ManualMapVoxelManipulator &vmanip, v3s16 p0, INodeDefManager *nd TreeDef tree_definition) { MapNode dirtnode(ndef->getId("mapgen_dirt")); + int seed; + if (tree_definition.explicit_seed) + { + seed = tree_definition.seed+14002; + } + else + { + seed = p0.X*2 + p0.Y*4 + p0.Z; // use the tree position to seed PRNG + } + PseudoRandom ps(seed); - PseudoRandom ps(tree_definition.seed+14002); // chance of inserting abcd rules double prop_a = 9; double prop_b = 8; diff --git a/src/treegen.h b/src/treegen.h index 55da6f9e5..1700daa1b 100644 --- a/src/treegen.h +++ b/src/treegen.h @@ -50,6 +50,7 @@ namespace treegen { MapNode fruitnode; int fruit_chance; int seed; + bool explicit_seed; }; // Add default tree