diff options
-rw-r--r-- | src/mapgen.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 026248ad4..a07f4cac8 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -80,16 +80,12 @@ static s16 find_ground_level_clever(VoxelManipulator &vmanip, v2s16 p2d) } #endif -static void make_tree(VoxelManipulator &vmanip, v3s16 p0) +static void make_tree(VoxelManipulator &vmanip, v3s16 p0, bool is_apple_tree) { MapNode treenode(CONTENT_TREE); MapNode leavesnode(CONTENT_LEAVES); MapNode applenode(CONTENT_APPLE); - bool is_apple_tree = myrand_range(0,100) < 35?true:false; - s16 apple_count = 0; - - s16 trunk_h = myrand_range(4, 5); v3s16 p1 = p0; for(s16 ii=0; ii<trunk_h; ii++) @@ -143,7 +139,6 @@ static void make_tree(VoxelManipulator &vmanip, v3s16 p0) for(s16 y=leaves_a.MinEdge.Y; y<=leaves_a.MaxEdge.Y; y++) for(s16 x=leaves_a.MinEdge.X; x<=leaves_a.MaxEdge.X; x++) { - bool is_apple = myrand_range(0,100) < 50?true:false; v3s16 p(x,y,z); p += p1; if(vmanip.m_area.contains(p) == false) @@ -154,9 +149,9 @@ static void make_tree(VoxelManipulator &vmanip, v3s16 p0) continue; u32 i = leaves_a.index(x,y,z); if(leaves_d[i] == 1) { - if(is_apple_tree && is_apple && apple_count < 4) { + bool is_apple = myrand_range(0,99) < 10; + if(is_apple_tree && is_apple) { vmanip.m_data[vi] = applenode; - apple_count++; } else { vmanip.m_data[vi] = leavesnode; } @@ -2141,7 +2136,16 @@ void make_block(BlockMakeData *data) p.Y++; //if(surface_humidity_2d(data->seed, v2s16(x, y)) < 0.5) if(is_jungle == false) - make_tree(vmanip, p); + { + bool is_apple_tree; + if(myrand_range(0,4) != 0) + is_apple_tree = false; + else + is_apple_tree = noise2d_perlin( + 0.5+(float)p.X/100, 0.5+(float)p.Z/100, + data->seed+342902, 3, 0.45) > 0.2; + make_tree(vmanip, p, is_apple_tree); + } else make_jungletree(vmanip, p); } |