this->m_emerge = emerge;
this->ystride = csize.X; //////fix this
+ this->heightmap = new s16[csize.X * csize.Z];
+
MapgenV6Params *sp = (MapgenV6Params *)params->sparams;
this->spflags = sp->spflags;
this->freq_desert = sp->freq_desert;
delete noise_mud;
delete noise_beach;
delete noise_biome;
+
+ delete[] heightmap;
}
}
-void MapgenV6Params::readParams(Settings *settings)
+void MapgenV6Params::readParams(const Settings *settings)
{
settings->getFlagStrNoEx("mgv6_spflags", spflags, flagdesc_mapgen_v6);
settings->getFloatNoEx("mgv6_freq_desert", freq_desert);
}
-void MapgenV6Params::writeParams(Settings *settings)
+void MapgenV6Params::writeParams(Settings *settings) const
{
settings->setFlagStr("mgv6_spflags", spflags, flagdesc_mapgen_v6, (u32)-1);
settings->setFloat("mgv6_freq_desert", freq_desert);
void MapgenV6::makeChunk(BlockMakeData *data)
{
+ // Pre-conditions
assert(data->vmanip);
assert(data->nodedef);
assert(data->blockpos_requested.X >= data->blockpos_min.X &&
this->ndef = data->nodedef;
// Hack: use minimum block coords for old code that assumes a single block
- v3s16 blockpos = data->blockpos_requested;
v3s16 blockpos_min = data->blockpos_min;
v3s16 blockpos_max = data->blockpos_max;
generateExperimental();
+ // Create initial heightmap to limit caves
+ updateHeightmap(node_min, node_max);
+
const s16 max_spread_amount = MAP_BLOCKSIZE;
// Limit dirt flow area by 1 because mud is flown into neighbors.
s16 mudflow_minpos = -max_spread_amount + 1;
}
+ // Update heightmap after mudflow
+ updateHeightmap(node_min, node_max);
+
// Add dungeons
if ((flags & MG_DUNGEONS) && (stone_surface_max_y >= node_min.Y)) {
DungeonParams dp;
}
// Add top and bottom side of water to transforming_liquid queue
- //updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
+ updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
// Grow grass
growGrass();