Better apple tree generation
authorPerttu Ahola <celeron55@gmail.com>
Wed, 21 Sep 2011 20:31:55 +0000 (23:31 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Wed, 21 Sep 2011 20:31:55 +0000 (23:31 +0300)
src/mapgen.cpp

index 026248ad430755bc730172082b99bf2fcb863255..a07f4cac897b95cc1f15786201c40e37230b7da1 100644 (file)
@@ -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);
                                }