Vary ore sheet y position by noise
authorkwolekr <kwolekr@minetest.net>
Mon, 25 Mar 2013 02:35:23 +0000 (22:35 -0400)
committerkwolekr <kwolekr@minetest.net>
Mon, 25 Mar 2013 02:35:23 +0000 (22:35 -0400)
doc/lua_api.txt
src/mapgen.cpp

index 23f7f8568295ba0d53e079b36eccafc8fddd32db..38b89f140eaa595f986a8446db426ca81cebe70b 100644 (file)
@@ -383,9 +383,12 @@ All default ores are of the uniformly-distributed scatter type.
     that point is greater than the noise_threshhold, giving the ability to create a non-equal
     distribution of ore.
 - sheet
-    Creates a sheet of ore in a blob shape according to the 2d perlin noise described by
-    the noise_params structure.  The height of the blob is randomly scattered, with a maximum
-    height of clust_size.  Here, clust_scarcity and clust_num_ores are ignored.
+    Creates a sheet of ore in a blob shape according to the 2d perlin noise described by noise_params.
+    The relative height of the sheet can be controlled by the same perlin noise as well, by specifying
+    a non-zero 'scale' parameter in noise_params.  IMPORTANT: The noise is not transformed by offset or
+    scale when comparing against the noise threshhold, but scale is used to determine relative height.
+    The height of the blob is randomly scattered, with a maximum height of clust_size.
+    clust_scarcity and clust_num_ores are ignored.
     This is essentially an improved version of the so-called "stratus" ore seen in some unofficial mods.
 - claylike - NOT YET IMPLEMENTED
     Places ore if there are no more than clust_scarcity number of specified nodes within a Von Neumann
index 689ad63cbe5ab66364f474d8fc669aae217c2035..b5deaae52c5775d4386902686df875be11eb63d8 100644 (file)
@@ -165,12 +165,12 @@ void OreSheet::generate(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) {
        int index = 0;
        for (int z = z0; z != z1; z++)
        for (int x = x0; x != x1; x++) {
-               
-               if (noise->result[index++] < nthresh)
+               float noiseval = noise->result[index++];
+               if (noiseval < nthresh)
                        continue;
                        
                int height = max_height * (1. / pr.range(1, 3));
-               int y0 = y_start + pr.range(1, 3) - 1;
+               int y0 = y_start + np->scale * noiseval; //pr.range(1, 3) - 1;
                int y1 = y0 + height;
                for (int y = y0; y != y1; y++) {
                        u32 i = vm->m_area.index(x, y, z);