diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp index e8c60c0de..24cf140db 100644 --- a/src/mapgen/mapgen.cpp +++ b/src/mapgen/mapgen.cpp @@ -769,6 +769,22 @@ void MapgenBasic::generateBiomes() } +void MapgenBasic::removeOvergeneratedCStone() +{ + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 x = node_min.X; x <= node_max.X; x++) { + u32 vi = vm->m_area.index(x, node_max.Y + 1, z); // top + if (vm->m_data[vi].getContent() == c_stone) { + vm->m_data[vi].setContent(CONTENT_IGNORE); + } + vi = vm->m_area.index(x, node_min.Y - 1, z); // bottom + if (vm->m_data[vi].getContent() == c_stone) { + vm->m_data[vi].setContent(CONTENT_IGNORE); + } + } +} + + void MapgenBasic::dustTopNodes() { if (node_max.Y < water_level) @@ -955,7 +971,6 @@ void MapgenBasic::generateDungeons(s16 max_stone_y) dgen.generate(vm, blockseed, full_node_min, full_node_max); } - //// //// GenerateNotifier //// diff --git a/src/mapgen/mapgen.h b/src/mapgen/mapgen.h index 31313b35f..94e58be82 100644 --- a/src/mapgen/mapgen.h +++ b/src/mapgen/mapgen.h @@ -289,6 +289,7 @@ public: virtual void generateCavesRandomWalk(s16 max_stone_y, s16 large_cave_ymax); virtual bool generateCavernsNoise(s16 max_stone_y); virtual void generateDungeons(s16 max_stone_y); + virtual void removeOvergeneratedCStone(); protected: BiomeManager *m_bmgr; diff --git a/src/mapgen/mapgen_carpathian.cpp b/src/mapgen/mapgen_carpathian.cpp index 7d00b3d38..83060972e 100644 --- a/src/mapgen/mapgen_carpathian.cpp +++ b/src/mapgen/mapgen_carpathian.cpp @@ -318,6 +318,8 @@ void MapgenCarpathian::makeChunk(BlockMakeData *data) full_node_min, full_node_max); } + removeOvergeneratedCStone(); + this->generating = false; } diff --git a/src/mapgen/mapgen_flat.cpp b/src/mapgen/mapgen_flat.cpp index cbd5202d0..16058bb59 100644 --- a/src/mapgen/mapgen_flat.cpp +++ b/src/mapgen/mapgen_flat.cpp @@ -268,6 +268,8 @@ void MapgenFlat::makeChunk(BlockMakeData *data) //setLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE, // node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE, 0xFF); + removeOvergeneratedCStone(); + this->generating = false; } diff --git a/src/mapgen/mapgen_fractal.cpp b/src/mapgen/mapgen_fractal.cpp index 71c49b035..edcf4ec5d 100644 --- a/src/mapgen/mapgen_fractal.cpp +++ b/src/mapgen/mapgen_fractal.cpp @@ -263,6 +263,8 @@ void MapgenFractal::makeChunk(BlockMakeData *data) calcLighting(node_min - v3s16(0, 1, 0), node_max + v3s16(0, 1, 0), full_node_min, full_node_max); + removeOvergeneratedCStone(); + this->generating = false; //printf("makeChunk: %lums\n", t.stop()); diff --git a/src/mapgen/mapgen_v5.cpp b/src/mapgen/mapgen_v5.cpp index 6d42f5833..f281fa148 100644 --- a/src/mapgen/mapgen_v5.cpp +++ b/src/mapgen/mapgen_v5.cpp @@ -262,6 +262,8 @@ void MapgenV5::makeChunk(BlockMakeData *data) full_node_min, full_node_max); } + removeOvergeneratedCStone(); + this->generating = false; } diff --git a/src/mapgen/mapgen_v6.cpp b/src/mapgen/mapgen_v6.cpp index 2b4d37c6b..bb73cc8a7 100644 --- a/src/mapgen/mapgen_v6.cpp +++ b/src/mapgen/mapgen_v6.cpp @@ -620,10 +620,27 @@ void MapgenV6::makeChunk(BlockMakeData *data) calcLighting(node_min - v3s16(1, 1, 1) * MAP_BLOCKSIZE, node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE, full_node_min, full_node_max); + + removeOvergeneratedCStone(); this->generating = false; } +void MapgenV6::removeOvergeneratedCStone() +{ + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 x = node_min.X; x <= node_max.X; x++) { + u32 vi = vm->m_area.index(x, node_max.Y + 1, z); // top + if (vm->m_data[vi].getContent() == c_stone) { + vm->m_data[vi].setContent(CONTENT_IGNORE); + } + vi = vm->m_area.index(x, node_min.Y - 1, z); // bottom + if (vm->m_data[vi].getContent() == c_stone) { + vm->m_data[vi].setContent(CONTENT_IGNORE); + } + } +} + void MapgenV6::calculateNoise() { diff --git a/src/mapgen/mapgen_v6.h b/src/mapgen/mapgen_v6.h index 820577187..1bc8f91d2 100644 --- a/src/mapgen/mapgen_v6.h +++ b/src/mapgen/mapgen_v6.h @@ -125,6 +125,7 @@ public: void makeChunk(BlockMakeData *data); int getGroundLevelAtPoint(v2s16 p); int getSpawnLevelAtPoint(v2s16 p); + virtual void removeOvergeneratedCStone(); float baseTerrainLevel(float terrain_base, float terrain_higher, float steepness, float height_select); diff --git a/src/mapgen/mapgen_v7.cpp b/src/mapgen/mapgen_v7.cpp index fdd971d28..b6510502b 100644 --- a/src/mapgen/mapgen_v7.cpp +++ b/src/mapgen/mapgen_v7.cpp @@ -379,6 +379,8 @@ void MapgenV7::makeChunk(BlockMakeData *data) calcLighting(node_min - v3s16(0, 1, 0), node_max + v3s16(0, 1, 0), full_node_min, full_node_max, propagate_shadow); + removeOvergeneratedCStone(); + this->generating = false; //printf("makeChunk: %lums\n", t.stop()); diff --git a/src/mapgen/mapgen_valleys.cpp b/src/mapgen/mapgen_valleys.cpp index 9d17e50e4..cbeee1e0f 100644 --- a/src/mapgen/mapgen_valleys.cpp +++ b/src/mapgen/mapgen_valleys.cpp @@ -271,6 +271,8 @@ void MapgenValleys::makeChunk(BlockMakeData *data) calcLighting(node_min - v3s16(0, 1, 0), node_max + v3s16(0, 1, 0), full_node_min, full_node_max); + removeOvergeneratedCStone(); + this->generating = false; //printf("makeChunk: %lums\n", t.stop());