Skip to content

Commit 2bc7c5f

Browse files
committed
Dungeons: Add Y limits in all mapgens
Preserve the upper limit used in mgvalleys.
1 parent 0f015b2 commit 2bc7c5f

15 files changed

+142
-14
lines changed

builtin/settingtypes.txt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,6 +1323,12 @@ mgv5_cavern_taper (Cavern taper) int 256
13231323
# Defines full size of caverns, smaller values create larger caverns.
13241324
mgv5_cavern_threshold (Cavern threshold) float 0.7
13251325

1326+
# Lower Y limit of dungeons.
1327+
mgv5_dungeon_ymin (Dungeon minimum Y) int -31000
1328+
1329+
# Upper Y limit of dungeons.
1330+
mgv5_dungeon_ymax (Dungeon maximum Y) int 31000
1331+
13261332
[**Noises]
13271333

13281334
# Variation of biome filler depth.
@@ -1364,6 +1370,12 @@ mgv6_freq_desert (Desert noise threshold) float 0.45
13641370
# Sandy beaches occur when np_beach exceeds this value.
13651371
mgv6_freq_beach (Beach noise threshold) float 0.15
13661372

1373+
# Lower Y limit of dungeons.
1374+
mgv6_dungeon_ymin (Dungeon minimum Y) int -31000
1375+
1376+
# Upper Y limit of dungeons.
1377+
mgv6_dungeon_ymax (Dungeon maximum Y) int 31000
1378+
13671379
[**Noises]
13681380

13691381
# Y-level of lower terrain and lakebeds.
@@ -1444,6 +1456,12 @@ mgv7_cavern_taper (Cavern taper) int 256
14441456
# Defines full size of caverns, smaller values create larger caverns.
14451457
mgv7_cavern_threshold (Cavern threshold) float 0.7
14461458

1459+
# Lower Y limit of dungeons.
1460+
mgv7_dungeon_ymin (Dungeon minimum Y) int -31000
1461+
1462+
# Upper Y limit of dungeons.
1463+
mgv7_dungeon_ymax (Dungeon maximum Y) int 31000
1464+
14471465
[**Noises]
14481466

14491467
# Y-level of higher (cliff-top) terrain.
@@ -1516,6 +1534,12 @@ mgcarpathian_cavern_taper (Cavern taper) int 256
15161534
# Defines full size of caverns, smaller values create larger caverns.
15171535
mgcarpathian_cavern_threshold (Cavern threshold) float 0.7
15181536

1537+
# Lower Y limit of dungeons.
1538+
mgcarpathian_dungeon_ymin (Dungeon minimum Y) int -31000
1539+
1540+
# Upper Y limit of dungeons.
1541+
mgcarpathian_dungeon_ymax (Dungeon maximum Y) int 31000
1542+
15191543
[**Noises]
15201544

15211545
# 2D noise that defines the base ground level.
@@ -1602,6 +1626,12 @@ mgflat_hill_threshold (Hill threshold) float 0.45
16021626
# Controls steepness/height of hills.
16031627
mgflat_hill_steepness (Hill steepness) float 64.0
16041628

1629+
# Lower Y limit of dungeons.
1630+
mgflat_dungeon_ymin (Dungeon minimum Y) int -31000
1631+
1632+
# Upper Y limit of dungeons.
1633+
mgflat_dungeon_ymax (Dungeon maximum Y) int 31000
1634+
16051635
[**Noises]
16061636

16071637
# Defines location and terrain of optional hills and lakes.
@@ -1627,6 +1657,12 @@ mgfractal_large_cave_depth (Large cave depth) int -33
16271657
# Y of upper limit of lava in large caves.
16281658
mgfractal_lava_depth (Lava depth) int -256
16291659

1660+
# Lower Y limit of dungeons.
1661+
mgfractal_dungeon_ymin (Dungeon minimum Y) int -31000
1662+
1663+
# Upper Y limit of dungeons.
1664+
mgfractal_dungeon_ymax (Dungeon maximum Y) int 31000
1665+
16301666
# Choice of 18 fractals from 9 formulas.
16311667
# 1 = 4D "Roundy" mandelbrot set.
16321668
# 2 = 4D "Roundy" julia set.
@@ -1734,6 +1770,12 @@ mgvalleys_water_features (Water features) int 0
17341770
# Controls width of tunnels, a smaller value creates wider tunnels.
17351771
mgvalleys_cave_width (Cave width) float 0.09
17361772

1773+
# Lower Y limit of dungeons.
1774+
mgvalleys_dungeon_ymin (Dungeon minimum Y) int -31000
1775+
1776+
# Upper Y limit of dungeons.
1777+
mgvalleys_dungeon_ymax (Dungeon maximum Y) int 31000
1778+
17371779
[**Noises]
17381780

17391781
# Caves and tunnels form at the intersection of the two noises

src/mapgen/mapgen_carpathian.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ MapgenCarpathian::MapgenCarpathian(
6161
cavern_limit = params->cavern_limit;
6262
cavern_taper = params->cavern_taper;
6363
cavern_threshold = params->cavern_threshold;
64-
grad_wl = 1 - water_level;
64+
dungeon_ymin = params->dungeon_ymin;
65+
dungeon_ymax = params->dungeon_ymax;
66+
67+
grad_wl = 1 - water_level;
6568

6669
//// 2D Terrain noise
6770
noise_base = new Noise(&params->np_base, seed, csize.X, csize.Z);
@@ -136,6 +139,8 @@ void MapgenCarpathianParams::readParams(const Settings *settings)
136139
settings->getS16NoEx("mgcarpathian_cavern_limit", cavern_limit);
137140
settings->getS16NoEx("mgcarpathian_cavern_taper", cavern_taper);
138141
settings->getFloatNoEx("mgcarpathian_cavern_threshold", cavern_threshold);
142+
settings->getS16NoEx("mgcarpathian_dungeon_ymin", dungeon_ymin);
143+
settings->getS16NoEx("mgcarpathian_dungeon_ymax", dungeon_ymax);
139144

140145
settings->getNoiseParams("mgcarpathian_np_base", np_base);
141146
settings->getNoiseParams("mgcarpathian_np_filler_depth", np_filler_depth);
@@ -165,6 +170,8 @@ void MapgenCarpathianParams::writeParams(Settings *settings) const
165170
settings->setS16("mgcarpathian_cavern_limit", cavern_limit);
166171
settings->setS16("mgcarpathian_cavern_taper", cavern_taper);
167172
settings->setFloat("mgcarpathian_cavern_threshold", cavern_threshold);
173+
settings->setS16("mgcarpathian_dungeon_ymin", dungeon_ymin);
174+
settings->setS16("mgcarpathian_dungeon_ymax", dungeon_ymax);
168175

169176
settings->setNoiseParams("mgcarpathian_np_base", np_base);
170177
settings->setNoiseParams("mgcarpathian_np_filler_depth", np_filler_depth);
@@ -264,7 +271,8 @@ void MapgenCarpathian::makeChunk(BlockMakeData *data)
264271
}
265272

266273
// Generate dungeons
267-
if (flags & MG_DUNGEONS)
274+
if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
275+
full_node_max.Y <= dungeon_ymax)
268276
generateDungeons(stone_surface_max_y, mgstone_type, biome_stone);
269277

270278
// Generate the registered decorations

src/mapgen/mapgen_carpathian.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ struct MapgenCarpathianParams : public MapgenParams
4040
s16 cavern_limit = -256;
4141
s16 cavern_taper = 256;
4242
float cavern_threshold = 0.7f;
43+
s16 dungeon_ymin = -31000;
44+
s16 dungeon_ymax = 31000;
4345

4446
NoiseParams np_base;
4547
NoiseParams np_filler_depth;
@@ -83,6 +85,8 @@ class MapgenCarpathian : public MapgenBasic
8385
private:
8486
s16 large_cave_depth;
8587
s32 grad_wl;
88+
s16 dungeon_ymin;
89+
s16 dungeon_ymax;
8690

8791
Noise *noise_base;
8892
Noise *noise_height1;

src/mapgen/mapgen_flat.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ MapgenFlat::MapgenFlat(int mapgenid, MapgenFlatParams *params, EmergeManager *em
6060
lake_steepness = params->lake_steepness;
6161
hill_threshold = params->hill_threshold;
6262
hill_steepness = params->hill_steepness;
63+
dungeon_ymin = params->dungeon_ymin;
64+
dungeon_ymax = params->dungeon_ymax;
6365

6466
// 2D noise
6567
noise_filler_depth = new Noise(&params->np_filler_depth, seed, csize.X, csize.Z);
@@ -101,6 +103,8 @@ void MapgenFlatParams::readParams(const Settings *settings)
101103
settings->getFloatNoEx("mgflat_lake_steepness", lake_steepness);
102104
settings->getFloatNoEx("mgflat_hill_threshold", hill_threshold);
103105
settings->getFloatNoEx("mgflat_hill_steepness", hill_steepness);
106+
settings->getS16NoEx("mgflat_dungeon_ymin", dungeon_ymin);
107+
settings->getS16NoEx("mgflat_dungeon_ymax", dungeon_ymax);
104108

105109
settings->getNoiseParams("mgflat_np_terrain", np_terrain);
106110
settings->getNoiseParams("mgflat_np_filler_depth", np_filler_depth);
@@ -120,6 +124,8 @@ void MapgenFlatParams::writeParams(Settings *settings) const
120124
settings->setFloat("mgflat_lake_steepness", lake_steepness);
121125
settings->setFloat("mgflat_hill_threshold", hill_threshold);
122126
settings->setFloat("mgflat_hill_steepness", hill_steepness);
127+
settings->setS16("mgflat_dungeon_ymin", dungeon_ymin);
128+
settings->setS16("mgflat_dungeon_ymax", dungeon_ymax);
123129

124130
settings->setNoiseParams("mgflat_np_terrain", np_terrain);
125131
settings->setNoiseParams("mgflat_np_filler_depth", np_filler_depth);
@@ -198,7 +204,8 @@ void MapgenFlat::makeChunk(BlockMakeData *data)
198204
if (flags & MG_CAVES)
199205
generateCaves(stone_surface_max_y, large_cave_depth);
200206

201-
if (flags & MG_DUNGEONS)
207+
if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
208+
full_node_max.Y <= dungeon_ymax)
202209
generateDungeons(stone_surface_max_y, mgstone_type, biome_stone);
203210

204211
// Generate the registered decorations

src/mapgen/mapgen_flat.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ struct MapgenFlatParams : public MapgenParams
4141
float lake_steepness = 48.0f;
4242
float hill_threshold = 0.45f;
4343
float hill_steepness = 64.0f;
44+
s16 dungeon_ymin = -31000;
45+
s16 dungeon_ymax = 31000;
46+
4447
NoiseParams np_terrain;
4548
NoiseParams np_filler_depth;
4649
NoiseParams np_cave1;
@@ -72,5 +75,8 @@ class MapgenFlat : public MapgenBasic
7275
float lake_steepness;
7376
float hill_threshold;
7477
float hill_steepness;
78+
s16 dungeon_ymin;
79+
s16 dungeon_ymax;
80+
7581
Noise *noise_terrain;
7682
};

src/mapgen/mapgen_fractal.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ MapgenFractal::MapgenFractal(int mapgenid, MapgenFractalParams *params, EmergeMa
5353
cave_width = params->cave_width;
5454
large_cave_depth = params->large_cave_depth;
5555
lava_depth = params->lava_depth;
56+
dungeon_ymin = params->dungeon_ymin;
57+
dungeon_ymax = params->dungeon_ymax;
5658
fractal = params->fractal;
5759
iterations = params->iterations;
5860
scale = params->scale;
@@ -97,6 +99,8 @@ void MapgenFractalParams::readParams(const Settings *settings)
9799
settings->getFloatNoEx("mgfractal_cave_width", cave_width);
98100
settings->getS16NoEx("mgfractal_large_cave_depth", large_cave_depth);
99101
settings->getS16NoEx("mgfractal_lava_depth", lava_depth);
102+
settings->getS16NoEx("mgfractal_dungeon_ymin", dungeon_ymin);
103+
settings->getS16NoEx("mgfractal_dungeon_ymax", dungeon_ymax);
100104
settings->getU16NoEx("mgfractal_fractal", fractal);
101105
settings->getU16NoEx("mgfractal_iterations", iterations);
102106
settings->getV3FNoEx("mgfractal_scale", scale);
@@ -120,6 +124,8 @@ void MapgenFractalParams::writeParams(Settings *settings) const
120124
settings->setFloat("mgfractal_cave_width", cave_width);
121125
settings->setS16("mgfractal_large_cave_depth", large_cave_depth);
122126
settings->setS16("mgfractal_lava_depth", lava_depth);
127+
settings->setS16("mgfractal_dungeon_ymin", dungeon_ymin);
128+
settings->setS16("mgfractal_dungeon_ymax", dungeon_ymax);
123129
settings->setU16("mgfractal_fractal", fractal);
124130
settings->setU16("mgfractal_iterations", iterations);
125131
settings->setV3F("mgfractal_scale", scale);
@@ -208,7 +214,8 @@ void MapgenFractal::makeChunk(BlockMakeData *data)
208214
if (flags & MG_CAVES)
209215
generateCaves(stone_surface_max_y, large_cave_depth);
210216

211-
if (flags & MG_DUNGEONS)
217+
if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
218+
full_node_max.Y <= dungeon_ymax)
212219
generateDungeons(stone_surface_max_y, mgstone_type, biome_stone);
213220

214221
// Generate the registered decorations

src/mapgen/mapgen_fractal.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ struct MapgenFractalParams : public MapgenParams
3535
float cave_width = 0.09f;
3636
s16 large_cave_depth = -33;
3737
s16 lava_depth = -256;
38+
s16 dungeon_ymin = -31000;
39+
s16 dungeon_ymax = 31000;
3840
u16 fractal = 1;
3941
u16 iterations = 11;
4042
v3f scale = v3f(4096.0, 1024.0, 4096.0);
@@ -44,6 +46,7 @@ struct MapgenFractalParams : public MapgenParams
4446
float julia_y = 0.2f;
4547
float julia_z = 0.133f;
4648
float julia_w = 0.067f;
49+
4750
NoiseParams np_seabed;
4851
NoiseParams np_filler_depth;
4952
NoiseParams np_cave1;
@@ -74,6 +77,8 @@ class MapgenFractal : public MapgenBasic
7477
bool julia;
7578

7679
s16 large_cave_depth;
80+
s16 dungeon_ymin;
81+
s16 dungeon_ymax;
7782
u16 fractal;
7883
u16 iterations;
7984
v3f scale;

src/mapgen/mapgen_v5.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ MapgenV5::MapgenV5(int mapgenid, MapgenV5Params *params, EmergeManager *emerge)
5555
cavern_limit = params->cavern_limit;
5656
cavern_taper = params->cavern_taper;
5757
cavern_threshold = params->cavern_threshold;
58+
dungeon_ymin = params->dungeon_ymin;
59+
dungeon_ymax = params->dungeon_ymax;
5860

5961
// Terrain noise
6062
noise_filler_depth = new Noise(&params->np_filler_depth, seed, csize.X, csize.Z);
@@ -101,6 +103,8 @@ void MapgenV5Params::readParams(const Settings *settings)
101103
settings->getS16NoEx("mgv5_cavern_limit", cavern_limit);
102104
settings->getS16NoEx("mgv5_cavern_taper", cavern_taper);
103105
settings->getFloatNoEx("mgv5_cavern_threshold", cavern_threshold);
106+
settings->getS16NoEx("mgv5_dungeon_ymin", dungeon_ymin);
107+
settings->getS16NoEx("mgv5_dungeon_ymax", dungeon_ymax);
104108

105109
settings->getNoiseParams("mgv5_np_filler_depth", np_filler_depth);
106110
settings->getNoiseParams("mgv5_np_factor", np_factor);
@@ -121,6 +125,8 @@ void MapgenV5Params::writeParams(Settings *settings) const
121125
settings->setS16("mgv5_cavern_limit", cavern_limit);
122126
settings->setS16("mgv5_cavern_taper", cavern_taper);
123127
settings->setFloat("mgv5_cavern_threshold", cavern_threshold);
128+
settings->setS16("mgv5_dungeon_ymin", dungeon_ymin);
129+
settings->setS16("mgv5_dungeon_ymax", dungeon_ymax);
124130

125131
settings->setNoiseParams("mgv5_np_filler_depth", np_filler_depth);
126132
settings->setNoiseParams("mgv5_np_factor", np_factor);
@@ -223,7 +229,8 @@ void MapgenV5::makeChunk(BlockMakeData *data)
223229
}
224230

225231
// Generate dungeons and desert temples
226-
if (flags & MG_DUNGEONS)
232+
if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
233+
full_node_max.Y <= dungeon_ymax)
227234
generateDungeons(stone_surface_max_y, mgstone_type, biome_stone);
228235

229236
// Generate the registered decorations

src/mapgen/mapgen_v5.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ struct MapgenV5Params : public MapgenParams
3838
s16 cavern_limit = -256;
3939
s16 cavern_taper = 256;
4040
float cavern_threshold = 0.7f;
41+
s16 dungeon_ymin = -31000;
42+
s16 dungeon_ymax = 31000;
4143

4244
NoiseParams np_filler_depth;
4345
NoiseParams np_factor;
@@ -68,6 +70,9 @@ class MapgenV5 : public MapgenBasic
6870

6971
private:
7072
s16 large_cave_depth;
73+
s16 dungeon_ymin;
74+
s16 dungeon_ymax;
75+
7176
Noise *noise_factor;
7277
Noise *noise_height;
7378
Noise *noise_ground;

src/mapgen/mapgen_v6.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,11 @@ MapgenV6::MapgenV6(int mapgenid, MapgenV6Params *params, EmergeManager *emerge)
6363

6464
heightmap = new s16[csize.X * csize.Z];
6565

66-
spflags = params->spflags;
67-
freq_desert = params->freq_desert;
68-
freq_beach = params->freq_beach;
66+
spflags = params->spflags;
67+
freq_desert = params->freq_desert;
68+
freq_beach = params->freq_beach;
69+
dungeon_ymin = params->dungeon_ymin;
70+
dungeon_ymax = params->dungeon_ymax;
6971

7072
np_cave = &params->np_cave;
7173
np_humidity = &params->np_humidity;
@@ -166,6 +168,8 @@ void MapgenV6Params::readParams(const Settings *settings)
166168
settings->getFlagStrNoEx("mgv6_spflags", spflags, flagdesc_mapgen_v6);
167169
settings->getFloatNoEx("mgv6_freq_desert", freq_desert);
168170
settings->getFloatNoEx("mgv6_freq_beach", freq_beach);
171+
settings->getS16NoEx("mgv6_dungeon_ymin", dungeon_ymin);
172+
settings->getS16NoEx("mgv6_dungeon_ymax", dungeon_ymax);
169173

170174
settings->getNoiseParams("mgv6_np_terrain_base", np_terrain_base);
171175
settings->getNoiseParams("mgv6_np_terrain_higher", np_terrain_higher);
@@ -186,6 +190,8 @@ void MapgenV6Params::writeParams(Settings *settings) const
186190
settings->setFlagStr("mgv6_spflags", spflags, flagdesc_mapgen_v6, U32_MAX);
187191
settings->setFloat("mgv6_freq_desert", freq_desert);
188192
settings->setFloat("mgv6_freq_beach", freq_beach);
193+
settings->setS16("mgv6_dungeon_ymin", dungeon_ymin);
194+
settings->setS16("mgv6_dungeon_ymax", dungeon_ymax);
189195

190196
settings->setNoiseParams("mgv6_np_terrain_base", np_terrain_base);
191197
settings->setNoiseParams("mgv6_np_terrain_higher", np_terrain_higher);
@@ -553,7 +559,8 @@ void MapgenV6::makeChunk(BlockMakeData *data)
553559
updateHeightmap(node_min, node_max);
554560

555561
// Add dungeons
556-
if ((flags & MG_DUNGEONS) && (stone_surface_max_y >= node_min.Y)) {
562+
if ((flags & MG_DUNGEONS) && stone_surface_max_y >= node_min.Y &&
563+
full_node_min.Y >= dungeon_ymin && full_node_max.Y <= dungeon_ymax) {
557564
DungeonParams dp;
558565

559566
dp.seed = seed;

0 commit comments

Comments
 (0)