Skip to content

Commit 2a74727

Browse files
authoredNov 8, 2019
Randomwalk caves: Add parameters for number, proportion flooded. Allow small caves (#8928)
Add mapgen parameters to set the range of the random number of randomwalk caves per mapchunk, and to set the proportion that are flooded with liquids. Default values are, for now, unchanged from the previous hardcoded values. Add parameters to allow small randomwalk caves Disabled by default for now as they have never been present in the non-mgv6 mapgens.
1 parent 5506e97 commit 2a74727

17 files changed

+416
-188
lines changed
 

Diff for: ‎builtin/settingtypes.txt

+90
Original file line numberDiff line numberDiff line change
@@ -1479,6 +1479,21 @@ mgv5_large_cave_depth (Large cave depth) int -256
14791479
# Y of upper limit of lava in large caves.
14801480
mgv5_lava_depth (Lava depth) int -256
14811481

1482+
# Minimum limit of random number of small caves per mapchunk.
1483+
mgv5_small_cave_num_min (Small cave minimum number) int 0 0 256
1484+
1485+
# Maximum limit of random number of small caves per mapchunk.
1486+
mgv5_small_cave_num_max (Small cave maximum number) int 0 0 256
1487+
1488+
# Minimum limit of random number of large caves per mapchunk.
1489+
mgv5_large_cave_num_min (Large cave minimum number) int 0 0 64
1490+
1491+
# Maximum limit of random number of large caves per mapchunk.
1492+
mgv5_large_cave_num_max (Large cave maximum number) int 2 0 64
1493+
1494+
# Proportion of large caves that contain liquid.
1495+
mgv5_large_cave_flooded (Large cave proportion flooded) float 0.5 0.0 1.0
1496+
14821497
# Y-level of cavern upper limit.
14831498
mgv5_cavern_limit (Cavern limit) int -256
14841499

@@ -1596,6 +1611,21 @@ mgv7_large_cave_depth (Large cave depth) int -33
15961611
# Y of upper limit of lava in large caves.
15971612
mgv7_lava_depth (Lava depth) int -256
15981613

1614+
# Minimum limit of random number of small caves per mapchunk.
1615+
mgv7_small_cave_num_min (Small cave minimum number) int 0 0 256
1616+
1617+
# Maximum limit of random number of small caves per mapchunk.
1618+
mgv7_small_cave_num_max (Small cave maximum number) int 0 0 256
1619+
1620+
# Minimum limit of random number of large caves per mapchunk.
1621+
mgv7_large_cave_num_min (Large cave minimum number) int 0 0 64
1622+
1623+
# Maximum limit of random number of large caves per mapchunk.
1624+
mgv7_large_cave_num_max (Large cave maximum number) int 2 0 64
1625+
1626+
# Proportion of large caves that contain liquid.
1627+
mgv7_large_cave_flooded (Large cave proportion flooded) float 0.5 0.0 1.0
1628+
15991629
# Controls the density of mountain-type floatlands.
16001630
# Is a noise offset added to the 'mgv7_np_mountain' noise value.
16011631
mgv7_float_mount_density (Floatland mountain density) float 0.6
@@ -1704,6 +1734,21 @@ mgcarpathian_large_cave_depth (Large cave depth) int -33
17041734
# Y of upper limit of lava in large caves.
17051735
mgcarpathian_lava_depth (Lava depth) int -256
17061736

1737+
# Minimum limit of random number of small caves per mapchunk.
1738+
mgcarpathian_small_cave_num_min (Small cave minimum number) int 0 0 256
1739+
1740+
# Maximum limit of random number of small caves per mapchunk.
1741+
mgcarpathian_small_cave_num_max (Small cave maximum number) int 0 0 256
1742+
1743+
# Minimum limit of random number of large caves per mapchunk.
1744+
mgcarpathian_large_cave_num_min (Large cave minimum number) int 0 0 64
1745+
1746+
# Maximum limit of random number of large caves per mapchunk.
1747+
mgcarpathian_large_cave_num_max (Large cave maximum number) int 2 0 64
1748+
1749+
# Proportion of large caves that contain liquid.
1750+
mgcarpathian_large_cave_flooded (Large cave proportion flooded) float 0.5 0.0 1.0
1751+
17071752
# Y-level of cavern upper limit.
17081753
mgcarpathian_cavern_limit (Cavern limit) int -256
17091754

@@ -1788,6 +1833,21 @@ mgflat_large_cave_depth (Large cave depth) int -33
17881833
# Y of upper limit of lava in large caves.
17891834
mgflat_lava_depth (Lava depth) int -256
17901835

1836+
# Minimum limit of random number of small caves per mapchunk.
1837+
mgflat_small_cave_num_min (Small cave minimum number) int 0 0 256
1838+
1839+
# Maximum limit of random number of small caves per mapchunk.
1840+
mgflat_small_cave_num_max (Small cave maximum number) int 0 0 256
1841+
1842+
# Minimum limit of random number of large caves per mapchunk.
1843+
mgflat_large_cave_num_min (Large cave minimum number) int 0 0 64
1844+
1845+
# Maximum limit of random number of large caves per mapchunk.
1846+
mgflat_large_cave_num_max (Large cave maximum number) int 2 0 64
1847+
1848+
# Proportion of large caves that contain liquid.
1849+
mgflat_large_cave_flooded (Large cave proportion flooded) float 0.5 0.0 1.0
1850+
17911851
# Controls width of tunnels, a smaller value creates wider tunnels.
17921852
mgflat_cave_width (Cave width) float 0.09
17931853

@@ -1847,6 +1907,21 @@ mgfractal_large_cave_depth (Large cave depth) int -33
18471907
# Y of upper limit of lava in large caves.
18481908
mgfractal_lava_depth (Lava depth) int -256
18491909

1910+
# Minimum limit of random number of small caves per mapchunk.
1911+
mgfractal_small_cave_num_min (Small cave minimum number) int 0 0 256
1912+
1913+
# Maximum limit of random number of small caves per mapchunk.
1914+
mgfractal_small_cave_num_max (Small cave maximum number) int 0 0 256
1915+
1916+
# Minimum limit of random number of large caves per mapchunk.
1917+
mgfractal_large_cave_num_min (Large cave minimum number) int 0 0 64
1918+
1919+
# Maximum limit of random number of large caves per mapchunk.
1920+
mgfractal_large_cave_num_max (Large cave maximum number) int 2 0 64
1921+
1922+
# Proportion of large caves that contain liquid.
1923+
mgfractal_large_cave_flooded (Large cave proportion flooded) float 0.5 0.0 1.0
1924+
18501925
# Lower Y limit of dungeons.
18511926
mgfractal_dungeon_ymin (Dungeon minimum Y) int -31000
18521927

@@ -1970,6 +2045,21 @@ mgvalleys_large_cave_depth (Large cave depth) int -33
19702045
# Y of upper limit of lava in large caves.
19712046
mgvalleys_lava_depth (Lava depth) int 1
19722047

2048+
# Minimum limit of random number of small caves per mapchunk.
2049+
mgvalleys_small_cave_num_min (Small cave minimum number) int 0 0 256
2050+
2051+
# Maximum limit of random number of small caves per mapchunk.
2052+
mgvalleys_small_cave_num_max (Small cave maximum number) int 0 0 256
2053+
2054+
# Minimum limit of random number of large caves per mapchunk.
2055+
mgvalleys_large_cave_num_min (Large cave minimum number) int 0 0 64
2056+
2057+
# Maximum limit of random number of large caves per mapchunk.
2058+
mgvalleys_large_cave_num_max (Large cave maximum number) int 2 0 64
2059+
2060+
# Proportion of large caves that contain liquid.
2061+
mgvalleys_large_cave_flooded (Large cave proportion flooded) float 0.5 0.0 1.0
2062+
19732063
# Depth below which you'll find giant caverns.
19742064
mgvalleys_cavern_limit (Cavern upper limit) int -256
19752065

Diff for: ‎src/mapgen/cavegen.cpp

+10-8
Original file line numberDiff line numberDiff line change
@@ -280,18 +280,20 @@ CavesRandomWalk::CavesRandomWalk(
280280
int water_level,
281281
content_t water_source,
282282
content_t lava_source,
283+
float large_cave_flooded,
283284
int lava_depth,
284285
BiomeGen *biomegen)
285286
{
286287
assert(ndef);
287288

288-
this->ndef = ndef;
289-
this->gennotify = gennotify;
290-
this->seed = seed;
291-
this->water_level = water_level;
292-
this->np_caveliquids = &nparams_caveliquids;
293-
this->lava_depth = lava_depth;
294-
this->bmgn = biomegen;
289+
this->ndef = ndef;
290+
this->gennotify = gennotify;
291+
this->seed = seed;
292+
this->water_level = water_level;
293+
this->np_caveliquids = &nparams_caveliquids;
294+
this->large_cave_flooded = large_cave_flooded;
295+
this->lava_depth = lava_depth;
296+
this->bmgn = biomegen;
295297

296298
c_water_source = water_source;
297299
if (c_water_source == CONTENT_IGNORE)
@@ -322,7 +324,7 @@ void CavesRandomWalk::makeCave(MMVManip *vm, v3s16 nmin, v3s16 nmax,
322324

323325
this->ystride = nmax.X - nmin.X + 1;
324326

325-
flooded = ps->range(1, 2) == 2;
327+
flooded = ps->range(1, 1000) <= large_cave_flooded * 1000.0f;
326328

327329
// If flooded:
328330
// Get biome at mapchunk midpoint. If cave liquid defined for biome, use it.

Diff for: ‎src/mapgen/cavegen.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,14 @@ class CavesRandomWalk
116116
s16 *heightmap;
117117
BiomeGen *bmgn;
118118

119-
// configurable parameters
120119
s32 seed;
121120
int water_level;
121+
float large_cave_flooded;
122122
// TODO 'lava_depth' and 'np_caveliquids' are deprecated and should be removed.
123123
// Cave liquids are now defined and located using biome definitions.
124124
int lava_depth;
125125
NoiseParams *np_caveliquids;
126126

127-
// intermediate state variables
128127
u16 ystride;
129128

130129
s16 min_tunnel_diameter;
@@ -161,7 +160,8 @@ class CavesRandomWalk
161160
CavesRandomWalk(const NodeDefManager *ndef, GenerateNotifier *gennotify =
162161
NULL, s32 seed = 0, int water_level = 1, content_t water_source =
163162
CONTENT_IGNORE, content_t lava_source = CONTENT_IGNORE,
164-
int lava_depth = -256, BiomeGen *biomegen = NULL);
163+
float large_cave_flooded = 0.5f, int lava_depth = -256,
164+
BiomeGen *biomegen = NULL);
165165

166166
// vm and ps are mandatory parameters.
167167
// If heightmap is NULL, the surface level at all points is assumed to

Diff for: ‎src/mapgen/mapgen.cpp

+17-6
Original file line numberDiff line numberDiff line change
@@ -843,18 +843,29 @@ void MapgenBasic::generateCavesNoiseIntersection(s16 max_stone_y)
843843

844844
void MapgenBasic::generateCavesRandomWalk(s16 max_stone_y, s16 large_cave_depth)
845845
{
846-
if (node_min.Y > max_stone_y || node_max.Y > large_cave_depth)
846+
if (node_min.Y > max_stone_y)
847847
return;
848848

849849
PseudoRandom ps(blockseed + 21343);
850-
u32 bruises_count = ps.range(0, 2);
850+
// Small randomwalk caves
851+
u32 num_small_caves = ps.range(small_cave_num_min, small_cave_num_max);
851852

852-
for (u32 i = 0; i < bruises_count; i++) {
853+
for (u32 i = 0; i < num_small_caves; i++) {
853854
CavesRandomWalk cave(ndef, &gennotify, seed, water_level,
854-
c_water_source, c_lava_source, lava_depth, biomegen);
855+
c_water_source, c_lava_source, large_cave_flooded, lava_depth, biomegen);
856+
cave.makeCave(vm, node_min, node_max, &ps, false, max_stone_y, heightmap);
857+
}
858+
859+
if (node_max.Y > large_cave_depth)
860+
return;
861+
862+
// Large randomwalk caves below 'large_cave_depth'
863+
u32 num_large_caves = ps.range(large_cave_num_min, large_cave_num_max);
855864

856-
cave.makeCave(vm, node_min, node_max, &ps, true, max_stone_y,
857-
heightmap);
865+
for (u32 i = 0; i < num_large_caves; i++) {
866+
CavesRandomWalk cave(ndef, &gennotify, seed, water_level,
867+
c_water_source, c_lava_source, large_cave_flooded, lava_depth, biomegen);
868+
cave.makeCave(vm, node_min, node_max, &ps, true, max_stone_y, heightmap);
858869
}
859870
}
860871

Diff for: ‎src/mapgen/mapgen.h

+5
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,11 @@ class MapgenBasic : public Mapgen {
280280
float cavern_limit;
281281
float cavern_taper;
282282
float cavern_threshold;
283+
int small_cave_num_min;
284+
int small_cave_num_max;
285+
int large_cave_num_min;
286+
int large_cave_num_max;
287+
float large_cave_flooded;
283288
// TODO 'lava_depth' is deprecated and should be removed. Cave liquids are
284289
// now defined and located using biome definitions.
285290
int lava_depth;

Diff for: ‎src/mapgen/mapgen_carpathian.cpp

+40-25
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,20 @@ MapgenCarpathian::MapgenCarpathian(MapgenCarpathianParams *params, EmergeManager
5858
river_depth = params->river_depth;
5959
valley_width = params->valley_width;
6060

61-
spflags = params->spflags;
62-
cave_width = params->cave_width;
63-
large_cave_depth = params->large_cave_depth;
64-
lava_depth = params->lava_depth;
65-
cavern_limit = params->cavern_limit;
66-
cavern_taper = params->cavern_taper;
67-
cavern_threshold = params->cavern_threshold;
68-
dungeon_ymin = params->dungeon_ymin;
69-
dungeon_ymax = params->dungeon_ymax;
61+
spflags = params->spflags;
62+
cave_width = params->cave_width;
63+
large_cave_depth = params->large_cave_depth;
64+
lava_depth = params->lava_depth;
65+
small_cave_num_min = params->small_cave_num_min;
66+
small_cave_num_max = params->small_cave_num_max;
67+
large_cave_num_min = params->large_cave_num_min;
68+
large_cave_num_max = params->large_cave_num_max;
69+
large_cave_flooded = params->large_cave_flooded;
70+
cavern_limit = params->cavern_limit;
71+
cavern_taper = params->cavern_taper;
72+
cavern_threshold = params->cavern_threshold;
73+
dungeon_ymin = params->dungeon_ymin;
74+
dungeon_ymax = params->dungeon_ymax;
7075

7176
grad_wl = 1 - water_level;
7277

@@ -148,14 +153,19 @@ void MapgenCarpathianParams::readParams(const Settings *settings)
148153
settings->getFloatNoEx("mgcarpathian_river_depth", river_depth);
149154
settings->getFloatNoEx("mgcarpathian_valley_width", valley_width);
150155

151-
settings->getFloatNoEx("mgcarpathian_cave_width", cave_width);
152-
settings->getS16NoEx("mgcarpathian_large_cave_depth", large_cave_depth);
153-
settings->getS16NoEx("mgcarpathian_lava_depth", lava_depth);
154-
settings->getS16NoEx("mgcarpathian_cavern_limit", cavern_limit);
155-
settings->getS16NoEx("mgcarpathian_cavern_taper", cavern_taper);
156-
settings->getFloatNoEx("mgcarpathian_cavern_threshold", cavern_threshold);
157-
settings->getS16NoEx("mgcarpathian_dungeon_ymin", dungeon_ymin);
158-
settings->getS16NoEx("mgcarpathian_dungeon_ymax", dungeon_ymax);
156+
settings->getFloatNoEx("mgcarpathian_cave_width", cave_width);
157+
settings->getS16NoEx("mgcarpathian_large_cave_depth", large_cave_depth);
158+
settings->getS16NoEx("mgcarpathian_lava_depth", lava_depth);
159+
settings->getU16NoEx("mgcarpathian_small_cave_num_min", small_cave_num_min);
160+
settings->getU16NoEx("mgcarpathian_small_cave_num_max", small_cave_num_max);
161+
settings->getU16NoEx("mgcarpathian_large_cave_num_min", large_cave_num_min);
162+
settings->getU16NoEx("mgcarpathian_large_cave_num_max", large_cave_num_max);
163+
settings->getFloatNoEx("mgcarpathian_large_cave_flooded", large_cave_flooded);
164+
settings->getS16NoEx("mgcarpathian_cavern_limit", cavern_limit);
165+
settings->getS16NoEx("mgcarpathian_cavern_taper", cavern_taper);
166+
settings->getFloatNoEx("mgcarpathian_cavern_threshold", cavern_threshold);
167+
settings->getS16NoEx("mgcarpathian_dungeon_ymin", dungeon_ymin);
168+
settings->getS16NoEx("mgcarpathian_dungeon_ymax", dungeon_ymax);
159169

160170
settings->getNoiseParams("mgcarpathian_np_filler_depth", np_filler_depth);
161171
settings->getNoiseParams("mgcarpathian_np_height1", np_height1);
@@ -186,14 +196,19 @@ void MapgenCarpathianParams::writeParams(Settings *settings) const
186196
settings->setFloat("mgcarpathian_river_depth", river_depth);
187197
settings->setFloat("mgcarpathian_valley_width", valley_width);
188198

189-
settings->setFloat("mgcarpathian_cave_width", cave_width);
190-
settings->setS16("mgcarpathian_large_cave_depth", large_cave_depth);
191-
settings->setS16("mgcarpathian_lava_depth", lava_depth);
192-
settings->setS16("mgcarpathian_cavern_limit", cavern_limit);
193-
settings->setS16("mgcarpathian_cavern_taper", cavern_taper);
194-
settings->setFloat("mgcarpathian_cavern_threshold", cavern_threshold);
195-
settings->setS16("mgcarpathian_dungeon_ymin", dungeon_ymin);
196-
settings->setS16("mgcarpathian_dungeon_ymax", dungeon_ymax);
199+
settings->setFloat("mgcarpathian_cave_width", cave_width);
200+
settings->setS16("mgcarpathian_large_cave_depth", large_cave_depth);
201+
settings->setS16("mgcarpathian_lava_depth", lava_depth);
202+
settings->setU16("mgcarpathian_small_cave_num_min", small_cave_num_min);
203+
settings->setU16("mgcarpathian_small_cave_num_max", small_cave_num_max);
204+
settings->setU16("mgcarpathian_large_cave_num_min", large_cave_num_min);
205+
settings->setU16("mgcarpathian_large_cave_num_max", large_cave_num_max);
206+
settings->setFloat("mgcarpathian_large_cave_flooded", large_cave_flooded);
207+
settings->setS16("mgcarpathian_cavern_limit", cavern_limit);
208+
settings->setS16("mgcarpathian_cavern_taper", cavern_taper);
209+
settings->setFloat("mgcarpathian_cavern_threshold", cavern_threshold);
210+
settings->setS16("mgcarpathian_dungeon_ymin", dungeon_ymin);
211+
settings->setS16("mgcarpathian_dungeon_ymax", dungeon_ymax);
197212

198213
settings->setNoiseParams("mgcarpathian_np_filler_depth", np_filler_depth);
199214
settings->setNoiseParams("mgcarpathian_np_height1", np_height1);

Diff for: ‎src/mapgen/mapgen_carpathian.h

+14-9
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,20 @@ struct MapgenCarpathianParams : public MapgenParams
3737
float river_depth = 24.0f;
3838
float valley_width = 0.25f;
3939

40-
u32 spflags = MGCARPATHIAN_CAVERNS;
41-
float cave_width = 0.09f;
42-
s16 large_cave_depth = -33;
43-
s16 lava_depth = -256;
44-
s16 cavern_limit = -256;
45-
s16 cavern_taper = 256;
46-
float cavern_threshold = 0.7f;
47-
s16 dungeon_ymin = -31000;
48-
s16 dungeon_ymax = 31000;
40+
u32 spflags = MGCARPATHIAN_CAVERNS;
41+
float cave_width = 0.09f;
42+
s16 large_cave_depth = -33;
43+
s16 lava_depth = -256;
44+
u16 small_cave_num_min = 0;
45+
u16 small_cave_num_max = 0;
46+
u16 large_cave_num_min = 0;
47+
u16 large_cave_num_max = 2;
48+
float large_cave_flooded = 0.5f;
49+
s16 cavern_limit = -256;
50+
s16 cavern_taper = 256;
51+
float cavern_threshold = 0.7f;
52+
s16 dungeon_ymin = -31000;
53+
s16 dungeon_ymax = 31000;
4954

5055
NoiseParams np_filler_depth;
5156
NoiseParams np_height1;

Diff for: ‎src/mapgen/mapgen_flat.cpp

+48-33
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,22 @@ FlagDesc flagdesc_mapgen_flat[] = {
5151
MapgenFlat::MapgenFlat(MapgenFlatParams *params, EmergeManager *emerge)
5252
: MapgenBasic(MAPGEN_FLAT, params, emerge)
5353
{
54-
spflags = params->spflags;
55-
ground_level = params->ground_level;
56-
large_cave_depth = params->large_cave_depth;
57-
lava_depth = params->lava_depth;
58-
cave_width = params->cave_width;
59-
lake_threshold = params->lake_threshold;
60-
lake_steepness = params->lake_steepness;
61-
hill_threshold = params->hill_threshold;
62-
hill_steepness = params->hill_steepness;
63-
dungeon_ymin = params->dungeon_ymin;
64-
dungeon_ymax = params->dungeon_ymax;
54+
spflags = params->spflags;
55+
ground_level = params->ground_level;
56+
large_cave_depth = params->large_cave_depth;
57+
lava_depth = params->lava_depth;
58+
small_cave_num_min = params->small_cave_num_min;
59+
small_cave_num_max = params->small_cave_num_max;
60+
large_cave_num_min = params->large_cave_num_min;
61+
large_cave_num_max = params->large_cave_num_max;
62+
large_cave_flooded = params->large_cave_flooded;
63+
cave_width = params->cave_width;
64+
lake_threshold = params->lake_threshold;
65+
lake_steepness = params->lake_steepness;
66+
hill_threshold = params->hill_threshold;
67+
hill_steepness = params->hill_steepness;
68+
dungeon_ymin = params->dungeon_ymin;
69+
dungeon_ymax = params->dungeon_ymax;
6570

6671
// 2D noise
6772
noise_filler_depth = new Noise(&params->np_filler_depth, seed, csize.X, csize.Z);
@@ -96,17 +101,22 @@ MapgenFlatParams::MapgenFlatParams():
96101

97102
void MapgenFlatParams::readParams(const Settings *settings)
98103
{
99-
settings->getFlagStrNoEx("mgflat_spflags", spflags, flagdesc_mapgen_flat);
100-
settings->getS16NoEx("mgflat_ground_level", ground_level);
101-
settings->getS16NoEx("mgflat_large_cave_depth", large_cave_depth);
102-
settings->getS16NoEx("mgflat_lava_depth", lava_depth);
103-
settings->getFloatNoEx("mgflat_cave_width", cave_width);
104-
settings->getFloatNoEx("mgflat_lake_threshold", lake_threshold);
105-
settings->getFloatNoEx("mgflat_lake_steepness", lake_steepness);
106-
settings->getFloatNoEx("mgflat_hill_threshold", hill_threshold);
107-
settings->getFloatNoEx("mgflat_hill_steepness", hill_steepness);
108-
settings->getS16NoEx("mgflat_dungeon_ymin", dungeon_ymin);
109-
settings->getS16NoEx("mgflat_dungeon_ymax", dungeon_ymax);
104+
settings->getFlagStrNoEx("mgflat_spflags", spflags, flagdesc_mapgen_flat);
105+
settings->getS16NoEx("mgflat_ground_level", ground_level);
106+
settings->getS16NoEx("mgflat_large_cave_depth", large_cave_depth);
107+
settings->getS16NoEx("mgflat_lava_depth", lava_depth);
108+
settings->getU16NoEx("mgflat_small_cave_num_min", small_cave_num_min);
109+
settings->getU16NoEx("mgflat_small_cave_num_max", small_cave_num_max);
110+
settings->getU16NoEx("mgflat_large_cave_num_min", large_cave_num_min);
111+
settings->getU16NoEx("mgflat_large_cave_num_max", large_cave_num_max);
112+
settings->getFloatNoEx("mgflat_large_cave_flooded", large_cave_flooded);
113+
settings->getFloatNoEx("mgflat_cave_width", cave_width);
114+
settings->getFloatNoEx("mgflat_lake_threshold", lake_threshold);
115+
settings->getFloatNoEx("mgflat_lake_steepness", lake_steepness);
116+
settings->getFloatNoEx("mgflat_hill_threshold", hill_threshold);
117+
settings->getFloatNoEx("mgflat_hill_steepness", hill_steepness);
118+
settings->getS16NoEx("mgflat_dungeon_ymin", dungeon_ymin);
119+
settings->getS16NoEx("mgflat_dungeon_ymax", dungeon_ymax);
110120

111121
settings->getNoiseParams("mgflat_np_terrain", np_terrain);
112122
settings->getNoiseParams("mgflat_np_filler_depth", np_filler_depth);
@@ -118,17 +128,22 @@ void MapgenFlatParams::readParams(const Settings *settings)
118128

119129
void MapgenFlatParams::writeParams(Settings *settings) const
120130
{
121-
settings->setFlagStr("mgflat_spflags", spflags, flagdesc_mapgen_flat, U32_MAX);
122-
settings->setS16("mgflat_ground_level", ground_level);
123-
settings->setS16("mgflat_large_cave_depth", large_cave_depth);
124-
settings->setS16("mgflat_lava_depth", lava_depth);
125-
settings->setFloat("mgflat_cave_width", cave_width);
126-
settings->setFloat("mgflat_lake_threshold", lake_threshold);
127-
settings->setFloat("mgflat_lake_steepness", lake_steepness);
128-
settings->setFloat("mgflat_hill_threshold", hill_threshold);
129-
settings->setFloat("mgflat_hill_steepness", hill_steepness);
130-
settings->setS16("mgflat_dungeon_ymin", dungeon_ymin);
131-
settings->setS16("mgflat_dungeon_ymax", dungeon_ymax);
131+
settings->setFlagStr("mgflat_spflags", spflags, flagdesc_mapgen_flat, U32_MAX);
132+
settings->setS16("mgflat_ground_level", ground_level);
133+
settings->setS16("mgflat_large_cave_depth", large_cave_depth);
134+
settings->setS16("mgflat_lava_depth", lava_depth);
135+
settings->setU16("mgflat_small_cave_num_min", small_cave_num_min);
136+
settings->setU16("mgflat_small_cave_num_max", small_cave_num_max);
137+
settings->setU16("mgflat_large_cave_num_min", large_cave_num_min);
138+
settings->setU16("mgflat_large_cave_num_max", large_cave_num_max);
139+
settings->setFloat("mgflat_large_cave_flooded", large_cave_flooded);
140+
settings->setFloat("mgflat_cave_width", cave_width);
141+
settings->setFloat("mgflat_lake_threshold", lake_threshold);
142+
settings->setFloat("mgflat_lake_steepness", lake_steepness);
143+
settings->setFloat("mgflat_hill_threshold", hill_threshold);
144+
settings->setFloat("mgflat_hill_steepness", hill_steepness);
145+
settings->setS16("mgflat_dungeon_ymin", dungeon_ymin);
146+
settings->setS16("mgflat_dungeon_ymax", dungeon_ymax);
132147

133148
settings->setNoiseParams("mgflat_np_terrain", np_terrain);
134149
settings->setNoiseParams("mgflat_np_filler_depth", np_filler_depth);

Diff for: ‎src/mapgen/mapgen_flat.h

+5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ struct MapgenFlatParams : public MapgenParams
3636
s16 ground_level = 8;
3737
s16 large_cave_depth = -33;
3838
s16 lava_depth = -256;
39+
u16 small_cave_num_min = 0;
40+
u16 small_cave_num_max = 0;
41+
u16 large_cave_num_min = 0;
42+
u16 large_cave_num_max = 2;
43+
float large_cave_flooded = 0.5f;
3944
float cave_width = 0.09f;
4045
float lake_threshold = -0.45f;
4146
float lake_steepness = 48.0f;

Diff for: ‎src/mapgen/mapgen_fractal.cpp

+60-45
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,26 @@ FlagDesc flagdesc_mapgen_fractal[] = {
5151
MapgenFractal::MapgenFractal(MapgenFractalParams *params, EmergeManager *emerge)
5252
: MapgenBasic(MAPGEN_FRACTAL, params, emerge)
5353
{
54-
spflags = params->spflags;
55-
cave_width = params->cave_width;
56-
large_cave_depth = params->large_cave_depth;
57-
lava_depth = params->lava_depth;
58-
dungeon_ymin = params->dungeon_ymin;
59-
dungeon_ymax = params->dungeon_ymax;
60-
fractal = params->fractal;
61-
iterations = params->iterations;
62-
scale = params->scale;
63-
offset = params->offset;
64-
slice_w = params->slice_w;
65-
julia_x = params->julia_x;
66-
julia_y = params->julia_y;
67-
julia_z = params->julia_z;
68-
julia_w = params->julia_w;
54+
spflags = params->spflags;
55+
cave_width = params->cave_width;
56+
large_cave_depth = params->large_cave_depth;
57+
lava_depth = params->lava_depth;
58+
small_cave_num_min = params->small_cave_num_min;
59+
small_cave_num_max = params->small_cave_num_max;
60+
large_cave_num_min = params->large_cave_num_min;
61+
large_cave_num_max = params->large_cave_num_max;
62+
large_cave_flooded = params->large_cave_flooded;
63+
dungeon_ymin = params->dungeon_ymin;
64+
dungeon_ymax = params->dungeon_ymax;
65+
fractal = params->fractal;
66+
iterations = params->iterations;
67+
scale = params->scale;
68+
offset = params->offset;
69+
slice_w = params->slice_w;
70+
julia_x = params->julia_x;
71+
julia_y = params->julia_y;
72+
julia_z = params->julia_z;
73+
julia_w = params->julia_w;
6974

7075
//// 2D noise
7176
if (spflags & MGFRACTAL_TERRAIN)
@@ -105,21 +110,26 @@ MapgenFractalParams::MapgenFractalParams():
105110

106111
void MapgenFractalParams::readParams(const Settings *settings)
107112
{
108-
settings->getFlagStrNoEx("mgfractal_spflags", spflags, flagdesc_mapgen_fractal);
109-
settings->getFloatNoEx("mgfractal_cave_width", cave_width);
110-
settings->getS16NoEx("mgfractal_large_cave_depth", large_cave_depth);
111-
settings->getS16NoEx("mgfractal_lava_depth", lava_depth);
112-
settings->getS16NoEx("mgfractal_dungeon_ymin", dungeon_ymin);
113-
settings->getS16NoEx("mgfractal_dungeon_ymax", dungeon_ymax);
114-
settings->getU16NoEx("mgfractal_fractal", fractal);
115-
settings->getU16NoEx("mgfractal_iterations", iterations);
116-
settings->getV3FNoEx("mgfractal_scale", scale);
117-
settings->getV3FNoEx("mgfractal_offset", offset);
118-
settings->getFloatNoEx("mgfractal_slice_w", slice_w);
119-
settings->getFloatNoEx("mgfractal_julia_x", julia_x);
120-
settings->getFloatNoEx("mgfractal_julia_y", julia_y);
121-
settings->getFloatNoEx("mgfractal_julia_z", julia_z);
122-
settings->getFloatNoEx("mgfractal_julia_w", julia_w);
113+
settings->getFlagStrNoEx("mgfractal_spflags", spflags, flagdesc_mapgen_fractal);
114+
settings->getFloatNoEx("mgfractal_cave_width", cave_width);
115+
settings->getS16NoEx("mgfractal_large_cave_depth", large_cave_depth);
116+
settings->getS16NoEx("mgfractal_lava_depth", lava_depth);
117+
settings->getU16NoEx("mgfractal_small_cave_num_min", small_cave_num_min);
118+
settings->getU16NoEx("mgfractal_small_cave_num_max", small_cave_num_max);
119+
settings->getU16NoEx("mgfractal_large_cave_num_min", large_cave_num_min);
120+
settings->getU16NoEx("mgfractal_large_cave_num_max", large_cave_num_max);
121+
settings->getFloatNoEx("mgfractal_large_cave_flooded", large_cave_flooded);
122+
settings->getS16NoEx("mgfractal_dungeon_ymin", dungeon_ymin);
123+
settings->getS16NoEx("mgfractal_dungeon_ymax", dungeon_ymax);
124+
settings->getU16NoEx("mgfractal_fractal", fractal);
125+
settings->getU16NoEx("mgfractal_iterations", iterations);
126+
settings->getV3FNoEx("mgfractal_scale", scale);
127+
settings->getV3FNoEx("mgfractal_offset", offset);
128+
settings->getFloatNoEx("mgfractal_slice_w", slice_w);
129+
settings->getFloatNoEx("mgfractal_julia_x", julia_x);
130+
settings->getFloatNoEx("mgfractal_julia_y", julia_y);
131+
settings->getFloatNoEx("mgfractal_julia_z", julia_z);
132+
settings->getFloatNoEx("mgfractal_julia_w", julia_w);
123133

124134
settings->getNoiseParams("mgfractal_np_seabed", np_seabed);
125135
settings->getNoiseParams("mgfractal_np_filler_depth", np_filler_depth);
@@ -131,21 +141,26 @@ void MapgenFractalParams::readParams(const Settings *settings)
131141

132142
void MapgenFractalParams::writeParams(Settings *settings) const
133143
{
134-
settings->setFlagStr("mgfractal_spflags", spflags, flagdesc_mapgen_fractal, U32_MAX);
135-
settings->setFloat("mgfractal_cave_width", cave_width);
136-
settings->setS16("mgfractal_large_cave_depth", large_cave_depth);
137-
settings->setS16("mgfractal_lava_depth", lava_depth);
138-
settings->setS16("mgfractal_dungeon_ymin", dungeon_ymin);
139-
settings->setS16("mgfractal_dungeon_ymax", dungeon_ymax);
140-
settings->setU16("mgfractal_fractal", fractal);
141-
settings->setU16("mgfractal_iterations", iterations);
142-
settings->setV3F("mgfractal_scale", scale);
143-
settings->setV3F("mgfractal_offset", offset);
144-
settings->setFloat("mgfractal_slice_w", slice_w);
145-
settings->setFloat("mgfractal_julia_x", julia_x);
146-
settings->setFloat("mgfractal_julia_y", julia_y);
147-
settings->setFloat("mgfractal_julia_z", julia_z);
148-
settings->setFloat("mgfractal_julia_w", julia_w);
144+
settings->setFlagStr("mgfractal_spflags", spflags, flagdesc_mapgen_fractal, U32_MAX);
145+
settings->setFloat("mgfractal_cave_width", cave_width);
146+
settings->setS16("mgfractal_large_cave_depth", large_cave_depth);
147+
settings->setS16("mgfractal_lava_depth", lava_depth);
148+
settings->setU16("mgfractal_small_cave_num_min", small_cave_num_min);
149+
settings->setU16("mgfractal_small_cave_num_max", small_cave_num_max);
150+
settings->setU16("mgfractal_large_cave_num_min", large_cave_num_min);
151+
settings->setU16("mgfractal_large_cave_num_max", large_cave_num_max);
152+
settings->setFloat("mgfractal_large_cave_flooded", large_cave_flooded);
153+
settings->setS16("mgfractal_dungeon_ymin", dungeon_ymin);
154+
settings->setS16("mgfractal_dungeon_ymax", dungeon_ymax);
155+
settings->setU16("mgfractal_fractal", fractal);
156+
settings->setU16("mgfractal_iterations", iterations);
157+
settings->setV3F("mgfractal_scale", scale);
158+
settings->setV3F("mgfractal_offset", offset);
159+
settings->setFloat("mgfractal_slice_w", slice_w);
160+
settings->setFloat("mgfractal_julia_x", julia_x);
161+
settings->setFloat("mgfractal_julia_y", julia_y);
162+
settings->setFloat("mgfractal_julia_z", julia_z);
163+
settings->setFloat("mgfractal_julia_w", julia_w);
149164

150165
settings->setNoiseParams("mgfractal_np_seabed", np_seabed);
151166
settings->setNoiseParams("mgfractal_np_filler_depth", np_filler_depth);

Diff for: ‎src/mapgen/mapgen_fractal.h

+5
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ struct MapgenFractalParams : public MapgenParams
3939
float cave_width = 0.09f;
4040
s16 large_cave_depth = -33;
4141
s16 lava_depth = -256;
42+
u16 small_cave_num_min = 0;
43+
u16 small_cave_num_max = 0;
44+
u16 large_cave_num_min = 0;
45+
u16 large_cave_num_max = 2;
46+
float large_cave_flooded = 0.5f;
4247
s16 dungeon_ymin = -31000;
4348
s16 dungeon_ymax = 31000;
4449
u16 fractal = 1;

Diff for: ‎src/mapgen/mapgen_v5.cpp

+42-27
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,20 @@ FlagDesc flagdesc_mapgen_v5[] = {
4848
MapgenV5::MapgenV5(MapgenV5Params *params, EmergeManager *emerge)
4949
: MapgenBasic(MAPGEN_V5, params, emerge)
5050
{
51-
spflags = params->spflags;
52-
cave_width = params->cave_width;
53-
large_cave_depth = params->large_cave_depth;
54-
lava_depth = params->lava_depth;
55-
cavern_limit = params->cavern_limit;
56-
cavern_taper = params->cavern_taper;
57-
cavern_threshold = params->cavern_threshold;
58-
dungeon_ymin = params->dungeon_ymin;
59-
dungeon_ymax = params->dungeon_ymax;
51+
spflags = params->spflags;
52+
cave_width = params->cave_width;
53+
large_cave_depth = params->large_cave_depth;
54+
lava_depth = params->lava_depth;
55+
small_cave_num_min = params->small_cave_num_min;
56+
small_cave_num_max = params->small_cave_num_max;
57+
large_cave_num_min = params->large_cave_num_min;
58+
large_cave_num_max = params->large_cave_num_max;
59+
large_cave_flooded = params->large_cave_flooded;
60+
cavern_limit = params->cavern_limit;
61+
cavern_taper = params->cavern_taper;
62+
cavern_threshold = params->cavern_threshold;
63+
dungeon_ymin = params->dungeon_ymin;
64+
dungeon_ymax = params->dungeon_ymax;
6065

6166
// Terrain noise
6267
noise_filler_depth = new Noise(&params->np_filler_depth, seed, csize.X, csize.Z);
@@ -98,15 +103,20 @@ MapgenV5Params::MapgenV5Params():
98103

99104
void MapgenV5Params::readParams(const Settings *settings)
100105
{
101-
settings->getFlagStrNoEx("mgv5_spflags", spflags, flagdesc_mapgen_v5);
102-
settings->getFloatNoEx("mgv5_cave_width", cave_width);
103-
settings->getS16NoEx("mgv5_large_cave_depth", large_cave_depth);
104-
settings->getS16NoEx("mgv5_lava_depth", lava_depth);
105-
settings->getS16NoEx("mgv5_cavern_limit", cavern_limit);
106-
settings->getS16NoEx("mgv5_cavern_taper", cavern_taper);
107-
settings->getFloatNoEx("mgv5_cavern_threshold", cavern_threshold);
108-
settings->getS16NoEx("mgv5_dungeon_ymin", dungeon_ymin);
109-
settings->getS16NoEx("mgv5_dungeon_ymax", dungeon_ymax);
106+
settings->getFlagStrNoEx("mgv5_spflags", spflags, flagdesc_mapgen_v5);
107+
settings->getFloatNoEx("mgv5_cave_width", cave_width);
108+
settings->getS16NoEx("mgv5_large_cave_depth", large_cave_depth);
109+
settings->getS16NoEx("mgv5_lava_depth", lava_depth);
110+
settings->getU16NoEx("mgv5_small_cave_num_min", small_cave_num_min);
111+
settings->getU16NoEx("mgv5_small_cave_num_max", small_cave_num_max);
112+
settings->getU16NoEx("mgv5_large_cave_num_min", large_cave_num_min);
113+
settings->getU16NoEx("mgv5_large_cave_num_max", large_cave_num_max);
114+
settings->getFloatNoEx("mgv5_large_cave_flooded", large_cave_flooded);
115+
settings->getS16NoEx("mgv5_cavern_limit", cavern_limit);
116+
settings->getS16NoEx("mgv5_cavern_taper", cavern_taper);
117+
settings->getFloatNoEx("mgv5_cavern_threshold", cavern_threshold);
118+
settings->getS16NoEx("mgv5_dungeon_ymin", dungeon_ymin);
119+
settings->getS16NoEx("mgv5_dungeon_ymax", dungeon_ymax);
110120

111121
settings->getNoiseParams("mgv5_np_filler_depth", np_filler_depth);
112122
settings->getNoiseParams("mgv5_np_factor", np_factor);
@@ -121,15 +131,20 @@ void MapgenV5Params::readParams(const Settings *settings)
121131

122132
void MapgenV5Params::writeParams(Settings *settings) const
123133
{
124-
settings->setFlagStr("mgv5_spflags", spflags, flagdesc_mapgen_v5, U32_MAX);
125-
settings->setFloat("mgv5_cave_width", cave_width);
126-
settings->setS16("mgv5_large_cave_depth", large_cave_depth);
127-
settings->setS16("mgv5_lava_depth", lava_depth);
128-
settings->setS16("mgv5_cavern_limit", cavern_limit);
129-
settings->setS16("mgv5_cavern_taper", cavern_taper);
130-
settings->setFloat("mgv5_cavern_threshold", cavern_threshold);
131-
settings->setS16("mgv5_dungeon_ymin", dungeon_ymin);
132-
settings->setS16("mgv5_dungeon_ymax", dungeon_ymax);
134+
settings->setFlagStr("mgv5_spflags", spflags, flagdesc_mapgen_v5, U32_MAX);
135+
settings->setFloat("mgv5_cave_width", cave_width);
136+
settings->setS16("mgv5_large_cave_depth", large_cave_depth);
137+
settings->setS16("mgv5_lava_depth", lava_depth);
138+
settings->setU16("mgv5_small_cave_num_min", small_cave_num_min);
139+
settings->setU16("mgv5_small_cave_num_max", small_cave_num_max);
140+
settings->setU16("mgv5_large_cave_num_min", large_cave_num_min);
141+
settings->setU16("mgv5_large_cave_num_max", large_cave_num_max);
142+
settings->setFloat("mgv5_large_cave_flooded", large_cave_flooded);
143+
settings->setS16("mgv5_cavern_limit", cavern_limit);
144+
settings->setS16("mgv5_cavern_taper", cavern_taper);
145+
settings->setFloat("mgv5_cavern_threshold", cavern_threshold);
146+
settings->setS16("mgv5_dungeon_ymin", dungeon_ymin);
147+
settings->setS16("mgv5_dungeon_ymax", dungeon_ymax);
133148

134149
settings->setNoiseParams("mgv5_np_filler_depth", np_filler_depth);
135150
settings->setNoiseParams("mgv5_np_factor", np_factor);

Diff for: ‎src/mapgen/mapgen_v5.h

+5
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ struct MapgenV5Params : public MapgenParams
3535
float cave_width = 0.09f;
3636
s16 large_cave_depth = -256;
3737
s16 lava_depth = -256;
38+
u16 small_cave_num_min = 0;
39+
u16 small_cave_num_max = 0;
40+
u16 large_cave_num_min = 0;
41+
u16 large_cave_num_max = 2;
42+
float large_cave_flooded = 0.5f;
3843
s16 cavern_limit = -256;
3944
s16 cavern_taper = 256;
4045
float cavern_threshold = 0.7f;

Diff for: ‎src/mapgen/mapgen_v7.cpp

+23-8
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,19 @@ MapgenV7::MapgenV7(MapgenV7Params *params, EmergeManager *emerge)
6262
floatland_level = params->floatland_level;
6363
shadow_limit = params->shadow_limit;
6464

65-
cave_width = params->cave_width;
66-
large_cave_depth = params->large_cave_depth;
67-
lava_depth = params->lava_depth;
68-
cavern_limit = params->cavern_limit;
69-
cavern_taper = params->cavern_taper;
70-
cavern_threshold = params->cavern_threshold;
71-
dungeon_ymin = params->dungeon_ymin;
72-
dungeon_ymax = params->dungeon_ymax;
65+
cave_width = params->cave_width;
66+
large_cave_depth = params->large_cave_depth;
67+
lava_depth = params->lava_depth;
68+
small_cave_num_min = params->small_cave_num_min;
69+
small_cave_num_max = params->small_cave_num_max;
70+
large_cave_num_min = params->large_cave_num_min;
71+
large_cave_num_max = params->large_cave_num_max;
72+
large_cave_flooded = params->large_cave_flooded;
73+
cavern_limit = params->cavern_limit;
74+
cavern_taper = params->cavern_taper;
75+
cavern_threshold = params->cavern_threshold;
76+
dungeon_ymin = params->dungeon_ymin;
77+
dungeon_ymax = params->dungeon_ymax;
7378

7479
// This is to avoid a divide-by-zero.
7580
// Parameter will be saved to map_meta.txt in limited form.
@@ -173,6 +178,11 @@ void MapgenV7Params::readParams(const Settings *settings)
173178
settings->getFloatNoEx("mgv7_cave_width", cave_width);
174179
settings->getS16NoEx("mgv7_large_cave_depth", large_cave_depth);
175180
settings->getS16NoEx("mgv7_lava_depth", lava_depth);
181+
settings->getU16NoEx("mgv7_small_cave_num_min", small_cave_num_min);
182+
settings->getU16NoEx("mgv7_small_cave_num_max", small_cave_num_max);
183+
settings->getU16NoEx("mgv7_large_cave_num_min", large_cave_num_min);
184+
settings->getU16NoEx("mgv7_large_cave_num_max", large_cave_num_max);
185+
settings->getFloatNoEx("mgv7_large_cave_flooded", large_cave_flooded);
176186
settings->getFloatNoEx("mgv7_float_mount_density", float_mount_density);
177187
settings->getFloatNoEx("mgv7_float_mount_height", float_mount_height);
178188
settings->getFloatNoEx("mgv7_float_mount_exponent", float_mount_exponent);
@@ -209,6 +219,11 @@ void MapgenV7Params::writeParams(Settings *settings) const
209219
settings->setFloat("mgv7_cave_width", cave_width);
210220
settings->setS16("mgv7_large_cave_depth", large_cave_depth);
211221
settings->setS16("mgv7_lava_depth", lava_depth);
222+
settings->setU16("mgv7_small_cave_num_min", small_cave_num_min);
223+
settings->setU16("mgv7_small_cave_num_max", small_cave_num_max);
224+
settings->setU16("mgv7_large_cave_num_min", large_cave_num_min);
225+
settings->setU16("mgv7_large_cave_num_max", large_cave_num_max);
226+
settings->setFloat("mgv7_large_cave_flooded", large_cave_flooded);
212227
settings->setFloat("mgv7_float_mount_density", float_mount_density);
213228
settings->setFloat("mgv7_float_mount_height", float_mount_height);
214229
settings->setFloat("mgv7_float_mount_exponent", float_mount_exponent);

Diff for: ‎src/mapgen/mapgen_v7.h

+5
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ struct MapgenV7Params : public MapgenParams {
4646
float cave_width = 0.09f;
4747
s16 large_cave_depth = -33;
4848
s16 lava_depth = -256;
49+
u16 small_cave_num_min = 0;
50+
u16 small_cave_num_max = 0;
51+
u16 large_cave_num_min = 0;
52+
u16 large_cave_num_max = 2;
53+
float large_cave_flooded = 0.5f;
4954
s16 cavern_limit = -256;
5055
s16 cavern_taper = 256;
5156
float cavern_threshold = 0.7f;

Diff for: ‎src/mapgen/mapgen_valleys.cpp

+39-24
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ MapgenValleys::MapgenValleys(MapgenValleysParams *params, EmergeManager *emerge)
6868
cave_width = params->cave_width;
6969
large_cave_depth = params->large_cave_depth;
7070
lava_depth = params->lava_depth;
71+
small_cave_num_min = params->small_cave_num_min;
72+
small_cave_num_max = params->small_cave_num_max;
73+
large_cave_num_min = params->large_cave_num_min;
74+
large_cave_num_max = params->large_cave_num_max;
75+
large_cave_flooded = params->large_cave_flooded;
7176
cavern_limit = params->cavern_limit;
7277
cavern_taper = params->cavern_taper;
7378
cavern_threshold = params->cavern_threshold;
@@ -124,18 +129,23 @@ MapgenValleysParams::MapgenValleysParams():
124129

125130
void MapgenValleysParams::readParams(const Settings *settings)
126131
{
127-
settings->getFlagStrNoEx("mgvalleys_spflags", spflags, flagdesc_mapgen_valleys);
128-
settings->getU16NoEx("mgvalleys_altitude_chill", altitude_chill);
129-
settings->getS16NoEx("mgvalleys_large_cave_depth", large_cave_depth);
130-
settings->getS16NoEx("mgvalleys_lava_depth", lava_depth);
131-
settings->getU16NoEx("mgvalleys_river_depth", river_depth);
132-
settings->getU16NoEx("mgvalleys_river_size", river_size);
133-
settings->getFloatNoEx("mgvalleys_cave_width", cave_width);
134-
settings->getS16NoEx("mgvalleys_cavern_limit", cavern_limit);
135-
settings->getS16NoEx("mgvalleys_cavern_taper", cavern_taper);
136-
settings->getFloatNoEx("mgvalleys_cavern_threshold", cavern_threshold);
137-
settings->getS16NoEx("mgvalleys_dungeon_ymin", dungeon_ymin);
138-
settings->getS16NoEx("mgvalleys_dungeon_ymax", dungeon_ymax);
132+
settings->getFlagStrNoEx("mgvalleys_spflags", spflags, flagdesc_mapgen_valleys);
133+
settings->getU16NoEx("mgvalleys_altitude_chill", altitude_chill);
134+
settings->getS16NoEx("mgvalleys_large_cave_depth", large_cave_depth);
135+
settings->getS16NoEx("mgvalleys_lava_depth", lava_depth);
136+
settings->getU16NoEx("mgvalleys_small_cave_num_min", small_cave_num_min);
137+
settings->getU16NoEx("mgvalleys_small_cave_num_max", small_cave_num_max);
138+
settings->getU16NoEx("mgvalleys_large_cave_num_min", large_cave_num_min);
139+
settings->getU16NoEx("mgvalleys_large_cave_num_max", large_cave_num_max);
140+
settings->getFloatNoEx("mgvalleys_large_cave_flooded", large_cave_flooded);
141+
settings->getU16NoEx("mgvalleys_river_depth", river_depth);
142+
settings->getU16NoEx("mgvalleys_river_size", river_size);
143+
settings->getFloatNoEx("mgvalleys_cave_width", cave_width);
144+
settings->getS16NoEx("mgvalleys_cavern_limit", cavern_limit);
145+
settings->getS16NoEx("mgvalleys_cavern_taper", cavern_taper);
146+
settings->getFloatNoEx("mgvalleys_cavern_threshold", cavern_threshold);
147+
settings->getS16NoEx("mgvalleys_dungeon_ymin", dungeon_ymin);
148+
settings->getS16NoEx("mgvalleys_dungeon_ymax", dungeon_ymax);
139149

140150
settings->getNoiseParams("mgvalleys_np_filler_depth", np_filler_depth);
141151
settings->getNoiseParams("mgvalleys_np_inter_valley_fill", np_inter_valley_fill);
@@ -154,18 +164,23 @@ void MapgenValleysParams::readParams(const Settings *settings)
154164

155165
void MapgenValleysParams::writeParams(Settings *settings) const
156166
{
157-
settings->setFlagStr("mgvalleys_spflags", spflags, flagdesc_mapgen_valleys, U32_MAX);
158-
settings->setU16("mgvalleys_altitude_chill", altitude_chill);
159-
settings->setS16("mgvalleys_large_cave_depth", large_cave_depth);
160-
settings->setS16("mgvalleys_lava_depth", lava_depth);
161-
settings->setU16("mgvalleys_river_depth", river_depth);
162-
settings->setU16("mgvalleys_river_size", river_size);
163-
settings->setFloat("mgvalleys_cave_width", cave_width);
164-
settings->setS16("mgvalleys_cavern_limit", cavern_limit);
165-
settings->setS16("mgvalleys_cavern_taper", cavern_taper);
166-
settings->setFloat("mgvalleys_cavern_threshold", cavern_threshold);
167-
settings->setS16("mgvalleys_dungeon_ymin", dungeon_ymin);
168-
settings->setS16("mgvalleys_dungeon_ymax", dungeon_ymax);
167+
settings->setFlagStr("mgvalleys_spflags", spflags, flagdesc_mapgen_valleys, U32_MAX);
168+
settings->setU16("mgvalleys_altitude_chill", altitude_chill);
169+
settings->setS16("mgvalleys_large_cave_depth", large_cave_depth);
170+
settings->setS16("mgvalleys_lava_depth", lava_depth);
171+
settings->setU16("mgvalleys_small_cave_num_min", small_cave_num_min);
172+
settings->setU16("mgvalleys_small_cave_num_max", small_cave_num_max);
173+
settings->setU16("mgvalleys_large_cave_num_min", large_cave_num_min);
174+
settings->setU16("mgvalleys_large_cave_num_max", large_cave_num_max);
175+
settings->setFloat("mgvalleys_large_cave_flooded", large_cave_flooded);
176+
settings->setU16("mgvalleys_river_depth", river_depth);
177+
settings->setU16("mgvalleys_river_size", river_size);
178+
settings->setFloat("mgvalleys_cave_width", cave_width);
179+
settings->setS16("mgvalleys_cavern_limit", cavern_limit);
180+
settings->setS16("mgvalleys_cavern_taper", cavern_taper);
181+
settings->setFloat("mgvalleys_cavern_threshold", cavern_threshold);
182+
settings->setS16("mgvalleys_dungeon_ymin", dungeon_ymin);
183+
settings->setS16("mgvalleys_dungeon_ymax", dungeon_ymax);
169184

170185
settings->setNoiseParams("mgvalleys_np_filler_depth", np_filler_depth);
171186
settings->setNoiseParams("mgvalleys_np_inter_valley_fill", np_inter_valley_fill);

Diff for: ‎src/mapgen/mapgen_valleys.h

+5
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ struct MapgenValleysParams : public MapgenParams {
5050
float cave_width = 0.09f;
5151
s16 large_cave_depth = -33;
5252
s16 lava_depth = 1;
53+
u16 small_cave_num_min = 0;
54+
u16 small_cave_num_max = 0;
55+
u16 large_cave_num_min = 0;
56+
u16 large_cave_num_max = 2;
57+
float large_cave_flooded = 0.5f;
5358
s16 cavern_limit = -256;
5459
s16 cavern_taper = 192;
5560
float cavern_threshold = 0.6f;

0 commit comments

Comments
 (0)
Please sign in to comment.