From 38e62805527b774e478617d9781bde72ce2bdcb9 Mon Sep 17 00:00:00 2001 From: paramat Date: Wed, 21 Jan 2015 13:24:11 +0000 Subject: 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 --- src/mapgen_v5.cpp | 76 +++++++++---------------------------------------------- 1 file changed, 12 insertions(+), 64 deletions(-) (limited to 'src/mapgen_v5.cpp') 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(¶ms->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); } } -- cgit v1.2.3