diff options
author | kwolekr <kwolekr@minetest.net> | 2015-09-13 00:09:00 -0400 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2015-09-13 00:11:50 -0400 |
commit | beba96941365a750f8b681df7a73566bdf797f0c (patch) | |
tree | 74bfb88c53b4584f757c37e1d1360cc317ea3b94 /src | |
parent | 1d6911676e8e9eadba76ef9f170d750fe6fa31bc (diff) | |
download | minetest-beba96941365a750f8b681df7a73566bdf797f0c.tar.gz minetest-beba96941365a750f8b681df7a73566bdf797f0c.tar.bz2 minetest-beba96941365a750f8b681df7a73566bdf797f0c.zip |
Ore: Add ore sheet column height range selection
Modders are now able to select the range of ore column height,
and the midpoint at which they 'grow' starting from.
This commit adds three new parameters for the 'sheet' ore type:
column_height_min, column_height_max, and column_midpoint_factor.
clust_size is now deprecated for this ore type.
Diffstat (limited to 'src')
-rw-r--r-- | src/mg_ore.cpp | 12 | ||||
-rw-r--r-- | src/mg_ore.h | 4 | ||||
-rw-r--r-- | src/script/lua_api/l_mapgen.cpp | 13 |
3 files changed, 23 insertions, 6 deletions
diff --git a/src/mg_ore.cpp b/src/mg_ore.cpp index 0d0f74bf5..f5d312ba2 100644 --- a/src/mg_ore.cpp +++ b/src/mg_ore.cpp @@ -176,8 +176,8 @@ void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed, PseudoRandom pr(blockseed + 4234); MapNode n_ore(c_ore, 0, ore_param2); - int max_height = clust_size; - int y_start = pr.range(nmin.Y, nmax.Y - max_height); + u16 max_height = column_height_max; + int y_start = pr.range(nmin.Y + max_height, nmax.Y - max_height); if (!noise) { int sx = nmax.X - nmin.X + 1; @@ -200,10 +200,12 @@ void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed, continue; } - int height = max_height * (1. / pr.range(1, 3)); - int y0 = y_start + np.scale * noiseval; //pr.range(1, 3) - 1; + u16 height = pr.range(column_height_min, column_height_max); + int ymidpoint = y_start + noiseval; + int y0 = ymidpoint - height * (1 - column_midpoint_factor); int y1 = y0 + height; - for (int y = y0; y != y1; y++) { + + for (int y = y0; y < y1; y++) { u32 i = vm->m_area.index(x, y, z); if (!vm->m_area.contains(i)) continue; diff --git a/src/mg_ore.h b/src/mg_ore.h index ffe8cfe50..db204437e 100644 --- a/src/mg_ore.h +++ b/src/mg_ore.h @@ -87,6 +87,10 @@ class OreSheet : public Ore { public: static const bool NEEDS_NOISE = true; + u16 column_height_min; + u16 column_height_max; + float column_midpoint_factor; + virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, u8 *biomemap); }; diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index d30b68054..9050816bb 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -937,8 +937,19 @@ int ModApiMapgen::l_register_ore(lua_State *L) } lua_pop(L, 1); - if (oretype == ORE_VEIN) { + //// Get type-specific parameters + if (oretype == ORE_SHEET) { + OreSheet *oresheet = (OreSheet *)ore; + + oresheet->column_height_min = getintfield_default(L, index, + "column_height_min", 1); + oresheet->column_height_max = getintfield_default(L, index, + "column_height_max", ore->clust_size); + oresheet->column_midpoint_factor = getfloatfield_default(L, index, + "column_midpoint_factor", 0.5f); + } else if (oretype == ORE_VEIN) { OreVein *orevein = (OreVein *)ore; + orevein->random_factor = getfloatfield_default(L, index, "random_factor", 1.f); } |