forked from Mirrorlandia_minetest/minetest
Mgv7: Always carve river channels in mountain terrain
Previously, rivers were sometimes blocked by vertical walls of mountain terrain due to river carving being disabled when base terrain height was below water_level - 16 Remove now unused base terrain heightmap created in generateTerrain()
This commit is contained in:
parent
14ef2b445a
commit
569998011e
@ -206,13 +206,15 @@ void MapgenV7::makeChunk(BlockMakeData *data)
|
|||||||
|
|
||||||
blockseed = getBlockSeed2(full_node_min, seed);
|
blockseed = getBlockSeed2(full_node_min, seed);
|
||||||
|
|
||||||
// Generate terrain and ridges with initial heightmaps
|
// Generate base and mountain terrain
|
||||||
|
// An initial heightmap is no longer created here for use in generateRidgeTerrain()
|
||||||
s16 stone_surface_max_y = generateTerrain();
|
s16 stone_surface_max_y = generateTerrain();
|
||||||
|
|
||||||
|
// Generate rivers
|
||||||
if (spflags & MGV7_RIDGES)
|
if (spflags & MGV7_RIDGES)
|
||||||
generateRidgeTerrain();
|
generateRidgeTerrain();
|
||||||
|
|
||||||
// Update heightmap to include mountain terrain
|
// Create heightmap
|
||||||
updateHeightmap(node_min, node_max);
|
updateHeightmap(node_min, node_max);
|
||||||
|
|
||||||
// Init biome generator, place biome-specific nodes, and build biomemap
|
// Init biome generator, place biome-specific nodes, and build biomemap
|
||||||
@ -331,7 +333,6 @@ int MapgenV7::generateTerrain()
|
|||||||
for (s16 z = node_min.Z; z <= node_max.Z; z++)
|
for (s16 z = node_min.Z; z <= node_max.Z; z++)
|
||||||
for (s16 x = node_min.X; x <= node_max.X; x++, index2d++) {
|
for (s16 x = node_min.X; x <= node_max.X; x++, index2d++) {
|
||||||
s16 surface_y = baseTerrainLevelFromMap(index2d);
|
s16 surface_y = baseTerrainLevelFromMap(index2d);
|
||||||
heightmap[index2d] = surface_y; // Create base terrain heightmap
|
|
||||||
|
|
||||||
if (surface_y > stone_surface_max_y)
|
if (surface_y > stone_surface_max_y)
|
||||||
stone_surface_max_y = surface_y;
|
stone_surface_max_y = surface_y;
|
||||||
@ -382,9 +383,6 @@ void MapgenV7::generateRidgeTerrain()
|
|||||||
for (s16 x = node_min.X; x <= node_max.X; x++, index++, vi++) {
|
for (s16 x = node_min.X; x <= node_max.X; x++, index++, vi++) {
|
||||||
int j = (z - node_min.Z) * csize.X + (x - node_min.X);
|
int j = (z - node_min.Z) * csize.X + (x - node_min.X);
|
||||||
|
|
||||||
if (heightmap[j] < water_level - 16) // Use base terrain heightmap
|
|
||||||
continue;
|
|
||||||
|
|
||||||
float uwatern = noise_ridge_uwater->result[j] * 2;
|
float uwatern = noise_ridge_uwater->result[j] * 2;
|
||||||
if (fabs(uwatern) > width)
|
if (fabs(uwatern) > width)
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
Reference in New Issue
Block a user