Skip to content

Commit f61928d

Browse files
committedJul 26, 2017
Mgv7: Add 'mount_zero_level' parameter
Allows setting of the mountain 'zero level' (y where density gradient is zero). It is easy to vertically shift smooth terrain by editing noise parameter 'offset', but vertically shifting mountain terrain was complex and imprecise, involving making a calculation based on an average of the mountain height parameter.
1 parent 31b84ce commit f61928d

File tree

4 files changed

+14
-2
lines changed

4 files changed

+14
-2
lines changed
 

Diff for: ‎builtin/settingtypes.txt

+3
Original file line numberDiff line numberDiff line change
@@ -1157,6 +1157,9 @@ mgv6_np_apple_trees (Apple trees noise) noise_params 0, 1, (100, 100, 100), 3429
11571157
# Flags starting with 'no' are used to explicitly disable them.
11581158
mgv7_spflags (Mapgen v7 specific flags) flags mountains,ridges,nofloatlands,caverns,biomerepeat mountains,ridges,floatlands,caverns,biomerepeat,nomountains,noridges,nofloatlands,nocaverns,nobiomerepeat
11591159

1160+
# Y of mountain density gradient zero level. Used to shift mountains vertically.
1161+
mgv7_mount_zero_level (Mountain zero level) int 0
1162+
11601163
# Controls width of tunnels, a smaller value creates wider tunnels.
11611164
mgv7_cave_width (Cave width) float 0.09
11621165

Diff for: ‎minetest.conf.example

+4
Original file line numberDiff line numberDiff line change
@@ -1397,6 +1397,10 @@
13971397
# type: flags possible values: mountains, ridges, floatlands, caverns, biomerepeat, nomountains, noridges, nofloatlands, nocaverns, nobiomerepeat
13981398
# mgv7_spflags = mountains,ridges,nofloatlands,caverns,biomerepeat
13991399

1400+
# Y of mountain density gradient zero level. Used to shift mountains vertically.
1401+
# type: int
1402+
# mgv7_mount_zero_level = 0
1403+
14001404
# Controls width of tunnels, a smaller value creates wider tunnels.
14011405
# type: float
14021406
# mgv7_cave_width = 0.09

Diff for: ‎src/mapgen_v7.cpp

+5-2
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ MapgenV7::MapgenV7(int mapgenid, MapgenV7Params *params, EmergeManager *emerge)
5656
: MapgenBasic(mapgenid, params, emerge)
5757
{
5858
spflags = params->spflags;
59+
mount_zero_level = params->mount_zero_level;
5960
cave_width = params->cave_width;
6061
large_cave_depth = params->large_cave_depth;
6162
lava_depth = params->lava_depth;
@@ -149,6 +150,7 @@ MapgenV7Params::MapgenV7Params()
149150
void MapgenV7Params::readParams(const Settings *settings)
150151
{
151152
settings->getFlagStrNoEx("mgv7_spflags", spflags, flagdesc_mapgen_v7);
153+
settings->getS16NoEx("mgv7_mount_zero_level", mount_zero_level);
152154
settings->getFloatNoEx("mgv7_cave_width", cave_width);
153155
settings->getS16NoEx("mgv7_large_cave_depth", large_cave_depth);
154156
settings->getS16NoEx("mgv7_lava_depth", lava_depth);
@@ -180,6 +182,7 @@ void MapgenV7Params::readParams(const Settings *settings)
180182
void MapgenV7Params::writeParams(Settings *settings) const
181183
{
182184
settings->setFlagStr("mgv7_spflags", spflags, flagdesc_mapgen_v7, U32_MAX);
185+
settings->setS16("mgv7_mount_zero_level", mount_zero_level);
183186
settings->setFloat("mgv7_cave_width", cave_width);
184187
settings->setS16("mgv7_large_cave_depth", large_cave_depth);
185188
settings->setS16("mgv7_lava_depth", lava_depth);
@@ -397,7 +400,7 @@ bool MapgenV7::getMountainTerrainAtPoint(s16 x, s16 y, s16 z)
397400
{
398401
float mnt_h_n =
399402
MYMAX(NoisePerlin2D(&noise_mount_height->np, x, z, seed), 1.0f);
400-
float density_gradient = -((float)y / mnt_h_n);
403+
float density_gradient = -((float)(y - mount_zero_level) / mnt_h_n);
401404
float mnt_n = NoisePerlin3D(&noise_mountain->np, x, y, z, seed);
402405

403406
return mnt_n + density_gradient >= 0.0;
@@ -407,7 +410,7 @@ bool MapgenV7::getMountainTerrainAtPoint(s16 x, s16 y, s16 z)
407410
bool MapgenV7::getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y)
408411
{
409412
float mounthn = MYMAX(noise_mount_height->result[idx_xz], 1.0f);
410-
float density_gradient = -((float)y / mounthn);
413+
float density_gradient = -((float)(y - mount_zero_level) / mounthn);
411414
float mountn = noise_mountain->result[idx_xyz];
412415

413416
return mountn + density_gradient >= 0.0;

Diff for: ‎src/mapgen_v7.h

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ extern FlagDesc flagdesc_mapgen_v7[];
3838
struct MapgenV7Params : public MapgenParams {
3939
u32 spflags = MGV7_MOUNTAINS | MGV7_RIDGES |
4040
MGV7_CAVERNS | MGV7_BIOMEREPEAT;
41+
s16 mount_zero_level = 0;
4142
float cave_width = 0.09f;
4243
s16 large_cave_depth = -33;
4344
s16 lava_depth = -256;
@@ -92,6 +93,7 @@ class MapgenV7 : public MapgenBasic {
9293
void generateRidgeTerrain();
9394

9495
private:
96+
s16 mount_zero_level;
9597
s16 large_cave_depth;
9698
float float_mount_density;
9799
float float_mount_height;

0 commit comments

Comments
 (0)
Please sign in to comment.