Skip to content

Commit 27144b4

Browse files
committedSep 17, 2017
Biome API: Revert biomes, decos, ores being relative to water level
Feature is unnecessary and would greatly complicate future development, it would also make 'get biome at pos' extremely complex. Mgv7: Revert option to repeat surface biomes in floatlands, which depended on the above.
1 parent 76817fd commit 27144b4

16 files changed

+42
-99
lines changed
 

Diff for: ‎builtin/settingtypes.txt

+1-2
Original file line numberDiff line numberDiff line change
@@ -1346,10 +1346,9 @@ mgv6_np_apple_trees (Apple trees noise) noise_params 0, 1, (100, 100, 100), 3429
13461346

13471347
# Map generation attributes specific to Mapgen v7.
13481348
# 'ridges' enables the rivers.
1349-
# 'biomerepeat' causes surface biomes to repeat in the floatlands.
13501349
# Flags that are not specified in the flag string are not modified from the default.
13511350
# Flags starting with 'no' are used to explicitly disable them.
1352-
mgv7_spflags (Mapgen V7 specific flags) flags mountains,ridges,nofloatlands,caverns,biomerepeat mountains,ridges,floatlands,caverns,biomerepeat,nomountains,noridges,nofloatlands,nocaverns,nobiomerepeat
1351+
mgv7_spflags (Mapgen V7 specific flags) flags mountains,ridges,nofloatlands,caverns mountains,ridges,floatlands,caverns,nomountains,noridges,nofloatlands,nocaverns
13531352

13541353
# Y of mountain density gradient zero level. Used to shift mountains vertically.
13551354
mgv7_mount_zero_level (Mountain zero level) int 0

Diff for: ‎doc/lua_api.txt

-5
Original file line numberDiff line numberDiff line change
@@ -4609,8 +4609,6 @@ Definition tables
46094609
y_min = -31000,
46104610
y_max = 64,
46114611
-- ^ Lower and upper limits for ore.
4612-
-- ^ Limits are relative to y = water_level - 1 for core mapgen, or
4613-
-- ^ relative to y = 0 for minetest.generate_ores().
46144612
flags = "",
46154613
-- ^ Attributes for this ore generation
46164614
noise_threshold = 0.5,
@@ -4655,7 +4653,6 @@ Definition tables
46554653
y_min = 1,
46564654
y_max = 31000,
46574655
-- ^ Lower and upper limits for biome.
4658-
-- ^ Limits are relative to y = water_level - 1.
46594656
heat_point = 0,
46604657
humidity_point = 50,
46614658
-- ^ Characteristic average temperature and humidity for the biome.
@@ -4692,8 +4689,6 @@ Definition tables
46924689
y_min = -31000
46934690
y_max = 31000
46944691
-- ^ Lower and upper limits for decoration.
4695-
-- ^ Limits are relative to y = water_level - 1 for core mapgen, or
4696-
-- ^ relative to y = 0 for minetest.generate_decorations().
46974692
-- ^ This parameter refers to the `y` position of the decoration base, so
46984693
-- the actual maximum height would be `height_max + size.Y`.
46994694
spawn_by = "default:water",

Diff for: ‎src/mapgen.cpp

+3-7
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,7 @@ MapgenBasic::~MapgenBasic()
613613

614614

615615
void MapgenBasic::generateBiomes(MgStoneType *mgstone_type,
616-
content_t *biome_stone, s16 biome_zero_level)
616+
content_t *biome_stone)
617617
{
618618
// can't generate biomes without a biome generator!
619619
assert(biomegen);
@@ -665,10 +665,7 @@ void MapgenBasic::generateBiomes(MgStoneType *mgstone_type,
665665

666666
if (is_stone_surface || is_water_surface) {
667667
// (Re)calculate biome
668-
// Limit to +-MAX MAP GENERATION LIMIT to work with biome y_min / y_max.
669-
s32 relative_y = rangelim(y - biome_zero_level,
670-
-MAX_MAP_GENERATION_LIMIT, MAX_MAP_GENERATION_LIMIT);
671-
biome = biomegen->getBiomeAtIndex(index, relative_y);
668+
biome = biomegen->getBiomeAtIndex(index, y);
672669

673670
if (biomemap[index] == BIOME_NONE && is_stone_surface)
674671
biomemap[index] = biome->index;
@@ -679,8 +676,7 @@ void MapgenBasic::generateBiomes(MgStoneType *mgstone_type,
679676
noise_filler_depth->result[index], 0.0f);
680677
depth_water_top = biome->depth_water_top;
681678
depth_riverbed = biome->depth_riverbed;
682-
biome_y_min = rangelim(biome->y_min + biome_zero_level,
683-
-MAX_MAP_GENERATION_LIMIT, MAX_MAP_GENERATION_LIMIT);
679+
biome_y_min = biome->y_min;
684680

685681
// Detect stone type for dungeons during every biome calculation.
686682
// If none detected the last selected biome stone is chosen.

Diff for: ‎src/mapgen.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ class MapgenBasic : public Mapgen {
251251
virtual void generateDungeons(s16 max_stone_y,
252252
MgStoneType stone_type, content_t biome_stone);
253253
virtual void generateBiomes(MgStoneType *mgstone_type,
254-
content_t *biome_stone, s16 biome_zero_level);
254+
content_t *biome_stone);
255255
virtual void dustTopNodes();
256256

257257
protected:

Diff for: ‎src/mapgen_carpathian.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ void MapgenCarpathian::makeChunk(BlockMakeData *data)
245245

246246
MgStoneType mgstone_type;
247247
content_t biome_stone;
248-
generateBiomes(&mgstone_type, &biome_stone, water_level - 1);
248+
generateBiomes(&mgstone_type, &biome_stone);
249249

250250
// Generate caverns, tunnels and classic caves
251251
if (flags & MG_CAVES) {
@@ -269,12 +269,10 @@ void MapgenCarpathian::makeChunk(BlockMakeData *data)
269269

270270
// Generate the registered decorations
271271
if (flags & MG_DECORATIONS)
272-
m_emerge->decomgr->placeAllDecos(this, blockseed,
273-
node_min, node_max, water_level - 1);
272+
m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
274273

275274
// Generate the registered ores
276-
m_emerge->oremgr->placeAllOres(this, blockseed,
277-
node_min, node_max, water_level - 1);
275+
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
278276

279277
// Sprinkle some dust on top after everything else was generated
280278
dustTopNodes();

Diff for: ‎src/mapgen_flat.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ void MapgenFlat::makeChunk(BlockMakeData *data)
193193

194194
MgStoneType mgstone_type;
195195
content_t biome_stone;
196-
generateBiomes(&mgstone_type, &biome_stone, water_level - 1);
196+
generateBiomes(&mgstone_type, &biome_stone);
197197

198198
if (flags & MG_CAVES)
199199
generateCaves(stone_surface_max_y, large_cave_depth);
@@ -203,12 +203,10 @@ void MapgenFlat::makeChunk(BlockMakeData *data)
203203

204204
// Generate the registered decorations
205205
if (flags & MG_DECORATIONS)
206-
m_emerge->decomgr->placeAllDecos(this, blockseed,
207-
node_min, node_max, water_level - 1);
206+
m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
208207

209208
// Generate the registered ores
210-
m_emerge->oremgr->placeAllOres(this, blockseed,
211-
node_min, node_max, water_level - 1);
209+
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
212210

213211
// Sprinkle some dust on top after everything else was generated
214212
dustTopNodes();

Diff for: ‎src/mapgen_fractal.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ void MapgenFractal::makeChunk(BlockMakeData *data)
203203

204204
MgStoneType mgstone_type;
205205
content_t biome_stone;
206-
generateBiomes(&mgstone_type, &biome_stone, water_level - 1);
206+
generateBiomes(&mgstone_type, &biome_stone);
207207

208208
if (flags & MG_CAVES)
209209
generateCaves(stone_surface_max_y, large_cave_depth);
@@ -213,12 +213,10 @@ void MapgenFractal::makeChunk(BlockMakeData *data)
213213

214214
// Generate the registered decorations
215215
if (flags & MG_DECORATIONS)
216-
m_emerge->decomgr->placeAllDecos(this, blockseed,
217-
node_min, node_max, water_level - 1);
216+
m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
218217

219218
// Generate the registered ores
220-
m_emerge->oremgr->placeAllOres(this, blockseed,
221-
node_min, node_max, water_level - 1);
219+
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
222220

223221
// Sprinkle some dust on top after everything else was generated
224222
dustTopNodes();

Diff for: ‎src/mapgen_v5.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ void MapgenV5::makeChunk(BlockMakeData *data)
204204

205205
MgStoneType mgstone_type;
206206
content_t biome_stone;
207-
generateBiomes(&mgstone_type, &biome_stone, water_level - 1);
207+
generateBiomes(&mgstone_type, &biome_stone);
208208

209209
// Generate caverns, tunnels and classic caves
210210
if (flags & MG_CAVES) {
@@ -228,12 +228,10 @@ void MapgenV5::makeChunk(BlockMakeData *data)
228228

229229
// Generate the registered decorations
230230
if (flags & MG_DECORATIONS)
231-
m_emerge->decomgr->placeAllDecos(this, blockseed,
232-
node_min, node_max, water_level - 1);
231+
m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
233232

234233
// Generate the registered ores
235-
m_emerge->oremgr->placeAllOres(this, blockseed,
236-
node_min, node_max, water_level - 1);
234+
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
237235

238236
// Sprinkle some dust on top after everything else was generated
239237
dustTopNodes();

Diff for: ‎src/mapgen_v6.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -615,12 +615,10 @@ void MapgenV6::makeChunk(BlockMakeData *data)
615615

616616
// Generate the registered decorations
617617
if (flags & MG_DECORATIONS)
618-
m_emerge->decomgr->placeAllDecos(this, blockseed,
619-
node_min, node_max, water_level - 1);
618+
m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
620619

621620
// Generate the registered ores
622-
m_emerge->oremgr->placeAllOres(this, blockseed,
623-
node_min, node_max, water_level - 1);
621+
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
624622

625623
// Calculate lighting
626624
if (flags & MG_LIGHT)

Diff for: ‎src/mapgen_v7.cpp

+3-12
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ FlagDesc flagdesc_mapgen_v7[] = {
4444
{"ridges", MGV7_RIDGES},
4545
{"floatlands", MGV7_FLOATLANDS},
4646
{"caverns", MGV7_CAVERNS},
47-
{"biomerepeat", MGV7_BIOMEREPEAT},
4847
{NULL, 0}
4948
};
5049

@@ -290,12 +289,6 @@ void MapgenV7::makeChunk(BlockMakeData *data)
290289

291290
blockseed = getBlockSeed2(full_node_min, seed);
292291

293-
// Get zero level for biomes and decorations
294-
// Optionally repeat surface biomes in floatlands
295-
s16 biome_zero_level = ((spflags & MGV7_FLOATLANDS) &&
296-
(spflags & MGV7_BIOMEREPEAT) && node_max.Y >= shadow_limit) ?
297-
floatland_level - 1 : water_level - 1;
298-
299292
// Generate base and mountain terrain
300293
// An initial heightmap is no longer created here for use in generateRidgeTerrain()
301294
s16 stone_surface_max_y = generateTerrain();
@@ -312,7 +305,7 @@ void MapgenV7::makeChunk(BlockMakeData *data)
312305

313306
MgStoneType mgstone_type;
314307
content_t biome_stone;
315-
generateBiomes(&mgstone_type, &biome_stone, water_level - 1);
308+
generateBiomes(&mgstone_type, &biome_stone);
316309

317310
// Generate caverns, tunnels and classic caves
318311
if (flags & MG_CAVES) {
@@ -336,12 +329,10 @@ void MapgenV7::makeChunk(BlockMakeData *data)
336329

337330
// Generate the registered decorations
338331
if (flags & MG_DECORATIONS)
339-
m_emerge->decomgr->placeAllDecos(this, blockseed,
340-
node_min, node_max, biome_zero_level);
332+
m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
341333

342334
// Generate the registered ores
343-
m_emerge->oremgr->placeAllOres(this, blockseed,
344-
node_min, node_max, water_level - 1);
335+
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
345336

346337
// Sprinkle some dust on top after everything else was generated
347338
dustTopNodes();

Diff for: ‎src/mapgen_v7.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,20 @@ with this program; if not, write to the Free Software Foundation, Inc.,
2222

2323
#include "mapgen.h"
2424

25-
/////////////// Mapgen V7 flags
25+
///////////// Mapgen V7 flags
2626
#define MGV7_MOUNTAINS 0x01
2727
#define MGV7_RIDGES 0x02
2828
#define MGV7_FLOATLANDS 0x04
2929
#define MGV7_CAVERNS 0x08
30-
#define MGV7_BIOMEREPEAT 0x10
30+
#define MGV7_BIOMEREPEAT 0x10 // Now unused
3131

3232
class BiomeManager;
3333

3434
extern FlagDesc flagdesc_mapgen_v7[];
3535

3636

3737
struct MapgenV7Params : public MapgenParams {
38-
u32 spflags = MGV7_MOUNTAINS | MGV7_RIDGES |
39-
MGV7_CAVERNS | MGV7_BIOMEREPEAT;
38+
u32 spflags = MGV7_MOUNTAINS | MGV7_RIDGES | MGV7_CAVERNS;
4039
s16 mount_zero_level = 0;
4140
float cave_width = 0.09f;
4241
s16 large_cave_depth = -33;

Diff for: ‎src/mapgen_valleys.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ void MapgenValleys::makeChunk(BlockMakeData *data)
237237
// Place biome-specific nodes and build biomemap
238238
MgStoneType mgstone_type;
239239
content_t biome_stone;
240-
generateBiomes(&mgstone_type, &biome_stone, water_level - 1);
240+
generateBiomes(&mgstone_type, &biome_stone);
241241

242242
// Cave creation.
243243
if (flags & MG_CAVES)
@@ -249,12 +249,10 @@ void MapgenValleys::makeChunk(BlockMakeData *data)
249249

250250
// Generate the registered decorations
251251
if (flags & MG_DECORATIONS)
252-
m_emerge->decomgr->placeAllDecos(this, blockseed,
253-
node_min, node_max, water_level - 1);
252+
m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
254253

255254
// Generate the registered ores
256-
m_emerge->oremgr->placeAllOres(this, blockseed,
257-
node_min, node_max, water_level - 1);
255+
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
258256

259257
// Sprinkle some dust on top after everything else was generated
260258
dustTopNodes();

Diff for: ‎src/mg_decoration.cpp

+4-14
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ DecorationManager::DecorationManager(IGameDef *gamedef) :
4848

4949

5050
size_t DecorationManager::placeAllDecos(Mapgen *mg, u32 blockseed,
51-
v3s16 nmin, v3s16 nmax, s16 deco_zero_level)
51+
v3s16 nmin, v3s16 nmax)
5252
{
5353
size_t nplaced = 0;
5454

@@ -57,7 +57,7 @@ size_t DecorationManager::placeAllDecos(Mapgen *mg, u32 blockseed,
5757
if (!deco)
5858
continue;
5959

60-
nplaced += deco->placeDeco(mg, blockseed, nmin, nmax, deco_zero_level);
60+
nplaced += deco->placeDeco(mg, blockseed, nmin, nmax);
6161
blockseed++;
6262
}
6363

@@ -124,18 +124,8 @@ bool Decoration::canPlaceDecoration(MMVManip *vm, v3s16 p)
124124
}
125125

126126

127-
size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed,
128-
v3s16 nmin, v3s16 nmax, s16 deco_zero_level)
127+
size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
129128
{
130-
// Decoration y_min / y_max is displaced by deco_zero_level or remains
131-
// unchanged. Any decoration with a limit at +-MAX_MAP_GENERATION_LIMIT is
132-
// considered to have that limit at +-infinity, so we do not alter that limit.
133-
s32 y_min_disp = (y_min <= -MAX_MAP_GENERATION_LIMIT) ?
134-
-MAX_MAP_GENERATION_LIMIT : y_min + deco_zero_level;
135-
136-
s32 y_max_disp = (y_max >= MAX_MAP_GENERATION_LIMIT) ?
137-
MAX_MAP_GENERATION_LIMIT : y_max + deco_zero_level;
138-
139129
PcgRandom ps(blockseed + 53);
140130
int carea_size = nmax.X - nmin.X + 1;
141131

@@ -190,7 +180,7 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed,
190180
else
191181
y = mg->findGroundLevel(v2s16(x, z), nmin.Y, nmax.Y);
192182

193-
if (y < y_min_disp || y > y_max_disp || y < nmin.Y || y > nmax.Y)
183+
if (y < y_min || y > y_max || y < nmin.Y || y > nmax.Y)
194184
continue;
195185

196186
if (y + getHeight() > mg->vm->m_area.MaxEdge.Y)

Diff for: ‎src/mg_decoration.h

+2-4
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ class Decoration : public ObjDef, public NodeResolver {
5454
virtual void resolveNodeNames();
5555

5656
bool canPlaceDecoration(MMVManip *vm, v3s16 p);
57-
size_t placeDeco(Mapgen *mg, u32 blockseed,
58-
v3s16 nmin, v3s16 nmax, s16 deco_zero_level);
57+
size_t placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
5958

6059
virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p) = 0;
6160
virtual int getHeight() = 0;
@@ -133,6 +132,5 @@ class DecorationManager : public ObjDefManager {
133132
}
134133
}
135134

136-
size_t placeAllDecos(Mapgen *mg, u32 blockseed,
137-
v3s16 nmin, v3s16 nmax, s16 deco_zero_level = 0);
135+
size_t placeAllDecos(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
138136
};

Diff for: ‎src/mg_ore.cpp

+6-17
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ OreManager::OreManager(IGameDef *gamedef) :
4444
}
4545

4646

47-
size_t OreManager::placeAllOres(Mapgen *mg, u32 blockseed,
48-
v3s16 nmin, v3s16 nmax, s16 ore_zero_level)
47+
size_t OreManager::placeAllOres(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
4948
{
5049
size_t nplaced = 0;
5150

@@ -54,7 +53,7 @@ size_t OreManager::placeAllOres(Mapgen *mg, u32 blockseed,
5453
if (!ore)
5554
continue;
5655

57-
nplaced += ore->placeOre(mg, blockseed, nmin, nmax, ore_zero_level);
56+
nplaced += ore->placeOre(mg, blockseed, nmin, nmax);
5857
blockseed++;
5958
}
6059

@@ -88,23 +87,13 @@ void Ore::resolveNodeNames()
8887
}
8988

9089

91-
size_t Ore::placeOre(Mapgen *mg, u32 blockseed,
92-
v3s16 nmin, v3s16 nmax, s16 ore_zero_level)
90+
size_t Ore::placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
9391
{
94-
// Ore y_min / y_max is displaced by ore_zero_level or remains unchanged.
95-
// Any ore with a limit at +-MAX_MAP_GENERATION_LIMIT is considered to have
96-
// that limit at +-infinity, so we do not alter that limit.
97-
s32 y_min_disp = (y_min <= -MAX_MAP_GENERATION_LIMIT) ?
98-
-MAX_MAP_GENERATION_LIMIT : y_min + ore_zero_level;
99-
100-
s32 y_max_disp = (y_max >= MAX_MAP_GENERATION_LIMIT) ?
101-
MAX_MAP_GENERATION_LIMIT : y_max + ore_zero_level;
102-
103-
if (nmin.Y > y_max_disp || nmax.Y < y_min_disp)
92+
if (nmin.Y > y_max || nmax.Y < y_min)
10493
return 0;
10594

106-
int actual_ymin = MYMAX(nmin.Y, y_min_disp);
107-
int actual_ymax = MYMIN(nmax.Y, y_max_disp);
95+
int actual_ymin = MYMAX(nmin.Y, y_min);
96+
int actual_ymax = MYMIN(nmax.Y, y_max);
10897
if (clust_size >= actual_ymax - actual_ymin + 1)
10998
return 0;
11099

Diff for: ‎src/mg_ore.h

+2-4
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ class Ore : public ObjDef, public NodeResolver {
7070

7171
virtual void resolveNodeNames();
7272

73-
size_t placeOre(Mapgen *mg, u32 blockseed,
74-
v3s16 nmin, v3s16 nmax, s16 ore_zero_level);
73+
size_t placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
7574
virtual void generate(MMVManip *vm, int mapseed, u32 blockseed,
7675
v3s16 nmin, v3s16 nmax, u8 *biomemap) = 0;
7776
};
@@ -180,6 +179,5 @@ class OreManager : public ObjDefManager {
180179

181180
void clear();
182181

183-
size_t placeAllOres(Mapgen *mg, u32 blockseed,
184-
v3s16 nmin, v3s16 nmax, s16 ore_zero_level = 0);
182+
size_t placeAllOres(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
185183
};

0 commit comments

Comments
 (0)
Please sign in to comment.