summaryrefslogtreecommitdiff
path: root/src/mapgen_v5.cpp
diff options
context:
space:
mode:
authorparamat <mat.gregory@virginmedia.com>2015-01-21 13:24:11 +0000
committerparamat <mat.gregory@virginmedia.com>2015-02-21 01:43:25 +0000
commit38e62805527b774e478617d9781bde72ce2bdcb9 (patch)
treee1e79a813f15ab167fb47470a8f58d00e7b865a6 /src/mapgen_v5.cpp
parent109f0ffeab1e38a74cfc7ec4787548ed8a6230b5 (diff)
downloadminetest-38e62805527b774e478617d9781bde72ce2bdcb9.tar.gz
minetest-38e62805527b774e478617d9781bde72ce2bdcb9.tar.bz2
minetest-38e62805527b774e478617d9781bde72ce2bdcb9.zip
Mgv5: Remove blobgen. Remove crumble and wetness noises
Add large pseudorandom caves below -256 De-link terrain level from water_level Cavegen: Mgv5 large cave code
Diffstat (limited to 'src/mapgen_v5.cpp')
-rw-r--r--src/mapgen_v5.cpp76
1 files changed, 12 insertions, 64 deletions
diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp
index f7efc4e18..ed18f7d0b 100644
--- a/src/mapgen_v5.cpp
+++ b/src/mapgen_v5.cpp
@@ -42,7 +42,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
FlagDesc flagdesc_mapgen_v5[] = {
- {"blobs", MGV5_BLOBS},
{NULL, 0}
};
@@ -73,8 +72,6 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge)
noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z);
noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z);
noise_ground = new Noise(&sp->np_ground, seed, csize.X, csize.Y + 2, csize.Z);
- noise_crumble = new Noise(&sp->np_crumble, seed, csize.X, csize.Y + 2, csize.Z);
- noise_wetness = new Noise(&sp->np_wetness, seed, csize.X, csize.Y + 2, csize.Z);
// Biome noise
noise_heat = new Noise(&params->np_biome_heat, seed, csize.X, csize.Z);
@@ -117,8 +114,6 @@ MapgenV5::~MapgenV5()
delete noise_cave1;
delete noise_cave2;
delete noise_ground;
- delete noise_crumble;
- delete noise_wetness;
delete noise_heat;
delete noise_humidity;
@@ -130,7 +125,7 @@ MapgenV5::~MapgenV5()
MapgenV5Params::MapgenV5Params()
{
- spflags = MGV5_BLOBS;
+ spflags = 0;
np_filler_depth = NoiseParams(0, 1, v3f(150, 150, 150), 261, 4, 0.7, 2.0);
np_factor = NoiseParams(0, 1, v3f(250, 250, 250), 920381, 3, 0.45, 2.0);
@@ -138,18 +133,11 @@ MapgenV5Params::MapgenV5Params()
np_cave1 = NoiseParams(0, 12, v3f(50, 50, 50), 52534, 4, 0.5, 2.0);
np_cave2 = NoiseParams(0, 12, v3f(50, 50, 50), 10325, 4, 0.5, 2.0);
np_ground = NoiseParams(0, 40, v3f(80, 80, 80), 983240, 4, 0.55, 2.0, NOISE_FLAG_EASED);
- np_crumble = NoiseParams(0, 1, v3f(20, 20, 20), 34413, 3, 1.3, 2.0, NOISE_FLAG_EASED);
- np_wetness = NoiseParams(0, 1, v3f(40, 40, 40), 32474, 4, 1.1, 2.0);
}
-// Scaling the output of the noise function affects the overdrive of the
-// contour function, which affects the shape of the output considerably.
-
-// Two original MT 0.3 parameters for non-eased noise:
-
//#define CAVE_NOISE_SCALE 12.0
-//#define CAVE_NOISE_THRESHOLD (1.5/CAVE_NOISE_SCALE)
+//#define CAVE_NOISE_THRESHOLD (1.5/CAVE_NOISE_SCALE) = 0.125
void MapgenV5Params::readParams(Settings *settings)
@@ -162,8 +150,6 @@ void MapgenV5Params::readParams(Settings *settings)
settings->getNoiseParams("mgv5_np_cave1", np_cave1);
settings->getNoiseParams("mgv5_np_cave2", np_cave2);
settings->getNoiseParams("mgv5_np_ground", np_ground);
- settings->getNoiseParams("mgv5_np_crumble", np_crumble);
- settings->getNoiseParams("mgv5_np_wetness", np_wetness);
}
@@ -177,8 +163,6 @@ void MapgenV5Params::writeParams(Settings *settings)
settings->setNoiseParams("mgv5_np_cave1", np_cave1);
settings->setNoiseParams("mgv5_np_cave2", np_cave2);
settings->setNoiseParams("mgv5_np_ground", np_ground);
- settings->setNoiseParams("mgv5_np_crumble", np_crumble);
- settings->setNoiseParams("mgv5_np_wetness", np_wetness);
}
@@ -195,9 +179,6 @@ int MapgenV5::getGroundLevelAtPoint(v2s16 p)
s16 search_top = water_level + 15;
s16 search_base = water_level;
- // Use these 2 lines instead for a slower search returning highest ground level:
- //s16 search_top = h + f * noise_ground->np->octaves * noise_ground->np->scale;
- //s16 search_base = h - f * noise_ground->np->octaves * noise_ground->np->scale;
s16 level = -31000;
for (s16 y = search_top; y >= search_base; y--) {
@@ -258,7 +239,7 @@ void MapgenV5::makeChunk(BlockMakeData *data)
// Generate caves
if ((flags & MG_CAVES) && (stone_surface_max_y >= node_min.Y))
- generateCaves();
+ generateCaves(stone_surface_max_y);
// Generate dungeons and desert temples
if ((flags & MG_DUNGEONS) && (stone_surface_max_y >= node_min.Y)) {
@@ -269,11 +250,6 @@ void MapgenV5::makeChunk(BlockMakeData *data)
// Generate the registered decorations
m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
- // Generate underground dirt, sand, gravel and lava blobs
- if (spflags & MGV5_BLOBS) {
- generateBlobs();
- }
-
// Generate the registered ores
m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
@@ -311,11 +287,6 @@ void MapgenV5::calculateNoise()
noise_cave2->perlinMap3D(x, y, z);
}
- if (spflags & MGV5_BLOBS) {
- noise_crumble->perlinMap3D(x, y, z);
- noise_wetness->perlinMap3D(x, y, z);
- }
-
if (node_max.Y >= water_level) {
noise_filler_depth->perlinMap2D(x, z);
noise_heat->perlinMap2D(x, z);
@@ -326,8 +297,6 @@ void MapgenV5::calculateNoise()
}
-// Two original MT 0.3 functions:
-
//bool is_cave(u32 index) {
// double d1 = contour(noise_cave1->result[index]);
// double d2 = contour(noise_cave2->result[index]);
@@ -363,7 +332,7 @@ int MapgenV5::generateBaseTerrain()
f = 0.01;
else if(f >= 1.0)
f *= 1.6;
- float h = water_level + noise_height->result[index2d];
+ float h = noise_height->result[index2d];
if(noise_ground->result[index] * f < y - h) {
if(y <= water_level)
@@ -470,7 +439,7 @@ void MapgenV5::generateBiomes()
}
-void MapgenV5::generateCaves()
+void MapgenV5::generateCaves(int max_stone_y)
{
u32 index = 0;
u32 index2d = 0;
@@ -496,36 +465,15 @@ void MapgenV5::generateCaves()
}
index2d = index2d + ystride;
}
-}
-
-
-void MapgenV5::generateBlobs()
-{
- u32 index = 0;
- for(s16 z=node_min.Z; z<=node_max.Z; z++) {
- for(s16 y=node_min.Y - 1; y<=node_max.Y + 1; y++) {
- u32 i = vm->m_area.index(node_min.X, y, z);
- for(s16 x=node_min.X; x<=node_max.X; x++, i++, index++) {
- content_t c = vm->m_data[i].getContent();
- if(c != c_stone)
- continue;
+ if (node_max.Y > -256)
+ return;
- if(noise_crumble->result[index] > 1.3) {
- if(noise_wetness->result[index] > 0.0)
- vm->m_data[i] = MapNode(c_dirt);
- else
- vm->m_data[i] = MapNode(c_sand);
- } else if(noise_crumble->result[index] > 0.7) {
- if(noise_wetness->result[index] < -0.6)
- vm->m_data[i] = MapNode(c_gravel);
- } else if(noise_crumble->result[index] < -3.5 +
- MYMIN(0.1 *
- sqrt((float)MYMAX(0, -y)), 1.5)) {
- vm->m_data[i] = MapNode(c_lava_source);
- }
- }
- }
+ PseudoRandom ps(blockseed + 21343);
+ u32 bruises_count = (ps.range(1, 5) == 1) ? ps.range(1, 2) : 0;
+ for (u32 i = 0; i < bruises_count; i++) {
+ CaveV5 cave(this, &ps);
+ cave.makeCave(node_min, node_max, max_stone_y);
}
}