1
1
/*
2
2
Minetest
3
- Copyright (C) 2015-2018 paramat
4
- Copyright (C) 2015-2018 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
3
+ Copyright (C) 2015-2020 paramat
4
+ Copyright (C) 2015-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
5
5
6
6
This program is free software; you can redistribute it and/or modify
7
7
it under the terms of the GNU Lesser General Public License as published by
@@ -39,8 +39,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
39
39
40
40
41
41
FlagDesc flagdesc_mapgen_flat[] = {
42
- {" lakes" , MGFLAT_LAKES},
43
- {" hills" , MGFLAT_HILLS},
42
+ {" lakes" , MGFLAT_LAKES},
43
+ {" hills" , MGFLAT_HILLS},
44
+ {" caverns" , MGFLAT_CAVERNS},
44
45
{NULL , 0 }
45
46
};
46
47
@@ -52,17 +53,21 @@ MapgenFlat::MapgenFlat(MapgenFlatParams *params, EmergeParams *emerge)
52
53
{
53
54
spflags = params->spflags ;
54
55
ground_level = params->ground_level ;
55
- large_cave_depth = params->large_cave_depth ;
56
+ lake_threshold = params->lake_threshold ;
57
+ lake_steepness = params->lake_steepness ;
58
+ hill_threshold = params->hill_threshold ;
59
+ hill_steepness = params->hill_steepness ;
60
+
61
+ cave_width = params->cave_width ;
56
62
small_cave_num_min = params->small_cave_num_min ;
57
63
small_cave_num_max = params->small_cave_num_max ;
58
64
large_cave_num_min = params->large_cave_num_min ;
59
65
large_cave_num_max = params->large_cave_num_max ;
66
+ large_cave_depth = params->large_cave_depth ;
60
67
large_cave_flooded = params->large_cave_flooded ;
61
- cave_width = params->cave_width ;
62
- lake_threshold = params->lake_threshold ;
63
- lake_steepness = params->lake_steepness ;
64
- hill_threshold = params->hill_threshold ;
65
- hill_steepness = params->hill_steepness ;
68
+ cavern_limit = params->cavern_limit ;
69
+ cavern_taper = params->cavern_taper ;
70
+ cavern_threshold = params->cavern_threshold ;
66
71
dungeon_ymin = params->dungeon_ymin ;
67
72
dungeon_ymax = params->dungeon_ymax ;
68
73
@@ -71,9 +76,11 @@ MapgenFlat::MapgenFlat(MapgenFlatParams *params, EmergeParams *emerge)
71
76
72
77
if ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS))
73
78
noise_terrain = new Noise (¶ms->np_terrain , seed, csize.X , csize.Z );
79
+
74
80
// 3D noise
75
81
MapgenBasic::np_cave1 = params->np_cave1 ;
76
82
MapgenBasic::np_cave2 = params->np_cave2 ;
83
+ MapgenBasic::np_cavern = params->np_cavern ;
77
84
MapgenBasic::np_dungeons = params->np_dungeons ;
78
85
}
79
86
@@ -88,11 +95,12 @@ MapgenFlat::~MapgenFlat()
88
95
89
96
90
97
MapgenFlatParams::MapgenFlatParams ():
91
- np_terrain (0 , 1 , v3f(600 , 600 , 600 ), 7244, 5, 0.6, 2.0),
92
- np_filler_depth (0 , 1.2 , v3f(150 , 150 , 150 ), 261, 3, 0.7, 2.0),
93
- np_cave1 (0 , 12 , v3f(61 , 61 , 61 ), 52534, 3, 0.5, 2.0),
94
- np_cave2 (0 , 12 , v3f(67 , 67 , 67 ), 10325, 3, 0.5, 2.0),
95
- np_dungeons (0.9 , 0.5 , v3f(500 , 500 , 500 ), 0, 2, 0.8, 2.0)
98
+ np_terrain (0 , 1 , v3f(600 , 600 , 600 ), 7244, 5, 0.6, 2.0),
99
+ np_filler_depth (0 , 1.2 , v3f(150 , 150 , 150 ), 261, 3, 0.7, 2.0),
100
+ np_cavern (0.0 , 1.0 , v3f(384 , 128 , 384 ), 723, 5, 0.63, 2.0),
101
+ np_cave1 (0 , 12 , v3f(61 , 61 , 61 ), 52534, 3, 0.5, 2.0),
102
+ np_cave2 (0 , 12 , v3f(67 , 67 , 67 ), 10325, 3, 0.5, 2.0),
103
+ np_dungeons (0.9 , 0.5 , v3f(500 , 500 , 500 ), 0, 2, 0.8, 2.0)
96
104
{
97
105
}
98
106
@@ -112,11 +120,15 @@ void MapgenFlatParams::readParams(const Settings *settings)
112
120
settings->getFloatNoEx (" mgflat_lake_steepness" , lake_steepness);
113
121
settings->getFloatNoEx (" mgflat_hill_threshold" , hill_threshold);
114
122
settings->getFloatNoEx (" mgflat_hill_steepness" , hill_steepness);
123
+ settings->getS16NoEx (" mgflat_cavern_limit" , cavern_limit);
124
+ settings->getS16NoEx (" mgflat_cavern_taper" , cavern_taper);
125
+ settings->getFloatNoEx (" mgflat_cavern_threshold" , cavern_threshold);
115
126
settings->getS16NoEx (" mgflat_dungeon_ymin" , dungeon_ymin);
116
127
settings->getS16NoEx (" mgflat_dungeon_ymax" , dungeon_ymax);
117
128
118
129
settings->getNoiseParams (" mgflat_np_terrain" , np_terrain);
119
130
settings->getNoiseParams (" mgflat_np_filler_depth" , np_filler_depth);
131
+ settings->getNoiseParams (" mgflat_np_cavern" , np_cavern);
120
132
settings->getNoiseParams (" mgflat_np_cave1" , np_cave1);
121
133
settings->getNoiseParams (" mgflat_np_cave2" , np_cave2);
122
134
settings->getNoiseParams (" mgflat_np_dungeons" , np_dungeons);
@@ -138,11 +150,15 @@ void MapgenFlatParams::writeParams(Settings *settings) const
138
150
settings->setFloat (" mgflat_lake_steepness" , lake_steepness);
139
151
settings->setFloat (" mgflat_hill_threshold" , hill_threshold);
140
152
settings->setFloat (" mgflat_hill_steepness" , hill_steepness);
153
+ settings->setS16 (" mgflat_cavern_limit" , cavern_limit);
154
+ settings->setS16 (" mgflat_cavern_taper" , cavern_taper);
155
+ settings->setFloat (" mgflat_cavern_threshold" , cavern_threshold);
141
156
settings->setS16 (" mgflat_dungeon_ymin" , dungeon_ymin);
142
157
settings->setS16 (" mgflat_dungeon_ymax" , dungeon_ymax);
143
158
144
159
settings->setNoiseParams (" mgflat_np_terrain" , np_terrain);
145
160
settings->setNoiseParams (" mgflat_np_filler_depth" , np_filler_depth);
161
+ settings->setNoiseParams (" mgflat_np_cavern" , np_cavern);
146
162
settings->setNoiseParams (" mgflat_np_cave1" , np_cave1);
147
163
settings->setNoiseParams (" mgflat_np_cave2" , np_cave2);
148
164
settings->setNoiseParams (" mgflat_np_dungeons" , np_dungeons);
@@ -226,11 +242,25 @@ void MapgenFlat::makeChunk(BlockMakeData *data)
226
242
generateBiomes ();
227
243
}
228
244
245
+ // Generate tunnels, caverns and large randomwalk caves
229
246
if (flags & MG_CAVES) {
230
- // Generate tunnels
247
+ // Generate tunnels first as caverns confuse them
231
248
generateCavesNoiseIntersection (stone_surface_max_y);
249
+
250
+ // Generate caverns
251
+ bool near_cavern = false ;
252
+ if (spflags & MGFLAT_CAVERNS)
253
+ near_cavern = generateCavernsNoise (stone_surface_max_y);
254
+
232
255
// Generate large randomwalk caves
233
- generateCavesRandomWalk (stone_surface_max_y, large_cave_depth);
256
+ if (near_cavern)
257
+ // Disable large randomwalk caves in this mapchunk by setting
258
+ // 'large cave depth' to world base. Avoids excessive liquid in
259
+ // large caverns and floating blobs of overgenerated liquid.
260
+ generateCavesRandomWalk (stone_surface_max_y,
261
+ -MAX_MAP_GENERATION_LIMIT);
262
+ else
263
+ generateCavesRandomWalk (stone_surface_max_y, large_cave_depth);
234
264
}
235
265
236
266
// Generate the registered ores
0 commit comments