76 changes: 12 additions & 64 deletions src/mapgen_v5.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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}
};

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand All @@ -130,26 +125,19 @@ 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);
np_height = NoiseParams(0, 10, v3f(250, 250, 250), 84174, 4, 0.5, 2.0);
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)
Expand All @@ -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);
}


Expand All @@ -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);
}


Expand All @@ -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--) {
Expand Down Expand Up @@ -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)) {
Expand All @@ -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);

Expand Down Expand Up @@ -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);
Expand All @@ -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]);
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -470,7 +439,7 @@ void MapgenV5::generateBiomes()
}


void MapgenV5::generateCaves()
void MapgenV5::generateCaves(int max_stone_y)
{
u32 index = 0;
u32 index2d = 0;
Expand All @@ -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);
}
}

Expand Down
11 changes: 4 additions & 7 deletions src/mapgen_v5.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapgen.h"

/////////////////// Mapgen V5 flags
#define MGV5_BLOBS 0x01
//#define MGV5_ 0x01

class BiomeManager;

extern FlagDesc flagdesc_mapgen_v5[];

Expand All @@ -36,8 +38,6 @@ struct MapgenV5Params : public MapgenSpecificParams {
NoiseParams np_cave1;
NoiseParams np_cave2;
NoiseParams np_ground;
NoiseParams np_crumble;
NoiseParams np_wetness;

MapgenV5Params();
~MapgenV5Params() {}
Expand Down Expand Up @@ -67,8 +67,6 @@ class MapgenV5 : public Mapgen {
Noise *noise_cave1;
Noise *noise_cave2;
Noise *noise_ground;
Noise *noise_crumble;
Noise *noise_wetness;
Noise *noise_heat;
Noise *noise_humidity;

Expand Down Expand Up @@ -96,8 +94,7 @@ class MapgenV5 : public Mapgen {
void calculateNoise();
int generateBaseTerrain();
void generateBiomes();
void generateCaves();
void generateBlobs();
void generateCaves(int max_stone_y);
void dustTopNodes();
};

Expand Down