MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge)
: Mapgen(mapgenid, params, emerge)
{
- this->emerge = emerge;
- this->bmgr = emerge->biomemgr;
+ this->m_emerge = emerge;
+ this->bmgr = emerge->biomemgr;
// amount of elements to skip for the next index
// for noise/height/biome maps (not vmanip)
noise_wetness = new Noise(&sp->np_wetness, seed, csize.X, csize.Y + 2, csize.Z);
// Biome noise
- noise_heat = new Noise(bmgr->np_heat, seed, csize.X, csize.Z);
- noise_humidity = new Noise(bmgr->np_humidity, seed, csize.X, csize.Z);
+ noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z);
+ noise_humidity = new Noise(¶ms->np_biome_humidity, seed, csize.X, csize.Z);
//// Resolve nodes to be used
INodeDefManager *ndef = emerge->ndef;
MapgenV5Params::MapgenV5Params() {
spflags = MGV5_BLOBS;
- np_filler_depth = NoiseParams(0, 1, v3f(150, 150, 150), 261, 4, 0.7, 2.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, 6, v3f(50, 50, 50), 52534, 4, 0.5, 2.0, NOISE_FLAG_EASED);
- np_cave2 = NoiseParams(0, 6, v3f(50, 50, 50), 10325, 4, 0.5, 2.0, NOISE_FLAG_EASED);
+ np_height = NoiseParams(0, 10, v3f(250, 250, 250), 84174, 4, 0.5, 2.0);
+ np_cave1 = NoiseParams(0, 6, v3f(50, 50, 50), 52534, 4, 0.5, 2.0, NOISE_FLAG_EASED);
+ np_cave2 = NoiseParams(0, 6, v3f(50, 50, 50), 10325, 4, 0.5, 2.0, NOISE_FLAG_EASED);
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);
+ 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);
}
int MapgenV5::getGroundLevelAtPoint(v2s16 p) {
//TimeTaker t("getGroundLevelAtPoint", NULL, PRECISION_MICRO);
- float f = 0.55 + NoisePerlin2D(noise_factor->np, p.X, p.Y, seed);
+ float f = 0.55 + NoisePerlin2D(&noise_factor->np, p.X, p.Y, seed);
if(f < 0.01)
f = 0.01;
else if(f >= 1.0)
f *= 1.6;
- float h = water_level + NoisePerlin2D(noise_height->np, p.X, p.Y, seed);
+ float h = water_level + NoisePerlin2D(&noise_height->np, p.X, p.Y, seed);
s16 search_top = water_level + 15;
s16 search_base = water_level;
s16 level = -31000;
for (s16 y = search_top; y >= search_base; y--) {
- float n_ground = NoisePerlin3DEased(noise_ground->np, p.X, y, p.Y, seed);
+ float n_ground = NoisePerlin3D(&noise_ground->np, p.X, y, p.Y, seed);
if(n_ground * f > y - h) {
if(y >= search_top - 7)
break;
full_node_max = (blockpos_max + 2) * MAP_BLOCKSIZE - v3s16(1, 1, 1);
// Create a block-specific seed
- blockseed = emerge->getBlockSeed(full_node_min); //////use getBlockSeed2()!
+ blockseed = m_emerge->getBlockSeed(full_node_min); //////use getBlockSeed2()!
// Make some noise
calculateNoise();
}
// Generate the registered decorations
- emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
+ m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
// Generate the registered ores
- emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
+ m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
// Sprinkle some dust on top after everything else was generated
dustTopNodes();
noise_filler_depth->perlinMap2D(x, z);
noise_factor->perlinMap2D(x, z);
noise_height->perlinMap2D(x, z);
- noise_height->transformNoiseMap();
noise_cave1->perlinMap3D(x, y, z);
- noise_cave1->transformNoiseMap();
noise_cave2->perlinMap3D(x, y, z);
- noise_cave2->transformNoiseMap();
noise_ground->perlinMap3D(x, y, z);
- noise_ground->transformNoiseMap();
if (spflags & MGV5_BLOBS) {
noise_crumble->perlinMap3D(x, y, z);
if (c_below != CONTENT_AIR) {
if (nplaced < y0_top) {
- if(y < water_level)
- vm->m_data[i] = MapNode(biome->c_filler);
- else
- vm->m_data[i] = MapNode(biome->c_top);
+ // A hack to prevent dirt_with_grass from being
+ // placed below water. TODO: fix later
+ content_t c_place = ((y < water_level) &&
+ (biome->c_top == c_dirt_with_grass)) ?
+ c_dirt : biome->c_top;
+ vm->m_data[i] = MapNode(c_place);
nplaced++;
} else if (nplaced < y0_filler && nplaced >= y0_top) {
vm->m_data[i] = MapNode(biome->c_filler);