#include "dungeongen.h"
#include "cavegen.h"
#include "treegen.h"
+#include "mg_ore.h"
+#include "mg_decoration.h"
#include "mapgen_v6.h"
FlagDesc flagdesc_mapgen_v6[] = {
- {"v6_jungles", MGV6_JUNGLES},
- {"v6_biome_blend", MGV6_BIOME_BLEND},
- {"v6_nomudflow", MGV6_NOMUDFLOW},
- {NULL, 0}
+ {"jungles", MGV6_JUNGLES},
+ {"biomeblend", MGV6_BIOMEBLEND},
+ {"mudflow", MGV6_MUDFLOW},
+ {NULL, 0}
};
///////////////////////////////////////////////////////////////////////////////
np_trees = &sp->np_trees;
np_apple_trees = &sp->np_apple_trees;
+ //// Create noise objects
noise_terrain_base = new Noise(&sp->np_terrain_base, seed, csize.X, csize.Y);
noise_terrain_higher = new Noise(&sp->np_terrain_higher, seed, csize.X, csize.Y);
noise_steepness = new Noise(&sp->np_steepness, seed, csize.X, csize.Y);
noise_mud = new Noise(&sp->np_mud, seed, csize.X, csize.Y);
noise_beach = new Noise(&sp->np_beach, seed, csize.X, csize.Y);
noise_biome = new Noise(&sp->np_biome, seed, csize.X, csize.Y);
+
+ //// Resolve nodes to be used
+ INodeDefManager *ndef = emerge->ndef;
+
+ c_stone = ndef->getId("mapgen_stone");
+ c_dirt = ndef->getId("mapgen_dirt");
+ c_dirt_with_grass = ndef->getId("mapgen_dirt_with_grass");
+ c_sand = ndef->getId("mapgen_sand");
+ c_water_source = ndef->getId("mapgen_water_source");
+ c_lava_source = ndef->getId("mapgen_lava_source");
+ c_gravel = ndef->getId("mapgen_gravel");
+ c_cobble = ndef->getId("mapgen_cobble");
+ c_desert_sand = ndef->getId("mapgen_desert_sand");
+ c_desert_stone = ndef->getId("mapgen_desert_stone");
+ c_mossycobble = ndef->getId("mapgen_mossycobble");
+ c_sandbrick = ndef->getId("mapgen_sandstonebrick");
+ c_stair_cobble = ndef->getId("mapgen_stair_cobble");
+ c_stair_sandstone = ndef->getId("mapgen_stair_sandstone");
+ if (c_desert_sand == CONTENT_IGNORE)
+ c_desert_sand = c_sand;
+ if (c_desert_stone == CONTENT_IGNORE)
+ c_desert_stone = c_stone;
+ if (c_mossycobble == CONTENT_IGNORE)
+ c_mossycobble = c_cobble;
+ if (c_sandbrick == CONTENT_IGNORE)
+ c_sandbrick = c_desert_stone;
+ if (c_stair_cobble == CONTENT_IGNORE)
+ c_stair_cobble = c_cobble;
+ if (c_stair_sandstone == CONTENT_IGNORE)
+ c_stair_sandstone = c_sandbrick;
}
MapgenV6Params::MapgenV6Params() {
- spflags = MGV6_BIOME_BLEND;
+ spflags = MGV6_BIOMEBLEND | MGV6_MUDFLOW;
freq_desert = 0.45;
freq_beach = 0.15;
void MapgenV6Params::readParams(Settings *settings) {
- settings->tryGetFlagStr("mgv6_spflags", spflags, flagdesc_mapgen_v6);
- settings->tryGetFloat("mgv6_freq_desert", freq_desert);
- settings->tryGetFloat("mgv6_freq_beach", freq_beach);
+ settings->getFlagStrNoEx("mgv6_spflags", spflags, flagdesc_mapgen_v6);
+ settings->getFloatNoEx("mgv6_freq_desert", freq_desert);
+ settings->getFloatNoEx("mgv6_freq_beach", freq_beach);
settings->getNoiseParams("mgv6_np_terrain_base", np_terrain_base);
settings->getNoiseParams("mgv6_np_terrain_higher", np_terrain_higher);
void MapgenV6Params::writeParams(Settings *settings) {
- settings->setFlagStr("mgv6_spflags", spflags, flagdesc_mapgen_v6);
+ settings->setFlagStr("mgv6_spflags", spflags, flagdesc_mapgen_v6, (u32)-1);
settings->setFloat("mgv6_freq_desert", freq_desert);
settings->setFloat("mgv6_freq_beach", freq_beach);
}
-BiomeType MapgenV6::getBiome(v2s16 p) {
+BiomeV6Type MapgenV6::getBiome(v2s16 p) {
int index = (p.Y - node_min.Z) * ystride + (p.X - node_min.X);
return getBiome(index, p);
}
}
-BiomeType MapgenV6::getBiome(int index, v2s16 p)
+BiomeV6Type MapgenV6::getBiome(int index, v2s16 p)
{
// Just do something very simple as for now
/*double d = noise2d_perlin(
if (d > freq_desert)
return BT_DESERT;
- if ((spflags & MGV6_BIOME_BLEND) &&
+ if ((spflags & MGV6_BIOMEBLEND) &&
(d > freq_desert - 0.10) &&
((noise2d(p.X, p.Y, seed) + 1.0) > (freq_desert - d) * 20.0))
return BT_DESERT;
// Make some noise
calculateNoise();
- c_stone = ndef->getId("mapgen_stone");
- c_dirt = ndef->getId("mapgen_dirt");
- c_dirt_with_grass = ndef->getId("mapgen_dirt_with_grass");
- c_sand = ndef->getId("mapgen_sand");
- c_water_source = ndef->getId("mapgen_water_source");
- c_lava_source = ndef->getId("mapgen_lava_source");
- c_gravel = ndef->getId("mapgen_gravel");
- c_cobble = ndef->getId("mapgen_cobble");
- c_desert_sand = ndef->getId("mapgen_desert_sand");
- c_desert_stone = ndef->getId("mapgen_desert_stone");
- c_mossycobble = ndef->getId("mapgen_mossycobble");
- c_sandbrick = ndef->getId("mapgen_sandstonebrick");
- c_stair_cobble = ndef->getId("mapgen_stair_cobble");
- c_stair_sandstone = ndef->getId("mapgen_stair_sandstone");
- if (c_desert_sand == CONTENT_IGNORE)
- c_desert_sand = c_sand;
- if (c_desert_stone == CONTENT_IGNORE)
- c_desert_stone = c_stone;
- if (c_mossycobble == CONTENT_IGNORE)
- c_mossycobble = c_cobble;
- if (c_sandbrick == CONTENT_IGNORE)
- c_sandbrick = c_desert_stone;
- if (c_stair_cobble == CONTENT_IGNORE)
- c_stair_cobble = c_cobble;
- if (c_stair_sandstone == CONTENT_IGNORE)
- c_stair_sandstone = c_sandbrick;
-
// Maximum height of the stone surface and obstacles.
// This is used to guide the cave generation
s16 stone_surface_max_y;
addDirtGravelBlobs();
// Flow mud away from steep edges
- if (!(spflags & MGV6_NOMUDFLOW))
+ if (spflags & MGV6_MUDFLOW)
flowMud(mudflow_minpos, mudflow_maxpos);
}
placeTreesAndJungleGrass();
// Generate the registered decorations
- for (unsigned int i = 0; i != emerge->decorations.size(); i++) {
- Decoration *deco = emerge->decorations[i];
- deco->placeDeco(this, blockseed + i, node_min, node_max);
- }
+ emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max);
// Generate the registered ores
- for (unsigned int i = 0; i != emerge->ores.size(); i++) {
- Ore *ore = emerge->ores[i];
- ore->placeOre(this, blockseed + i, node_min, node_max);
- }
+ emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
// Calculate lighting
- if (!(flags & MG_NOLIGHT))
+ if (flags & MG_LIGHT)
calcLighting(node_min - v3s16(1, 1, 1) * MAP_BLOCKSIZE,
node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE);
if (surface_y > stone_surface_max_y)
stone_surface_max_y = surface_y;
- BiomeType bt = getBiome(index, v2s16(x, z));
+ BiomeV6Type bt = getBiome(index, v2s16(x, z));
// Fill ground with stone
v3s16 em = vm->m_area.getExtent();
if (surface_y == vm->m_area.MinEdge.Y - 1)
continue;
- BiomeType bt = getBiome(index, v2s16(x, z));
+ BiomeV6Type bt = getBiome(index, v2s16(x, z));
addnode = (bt == BT_DESERT) ? n_desert_sand : n_dirt;
if (bt == BT_DESERT && surface_y + mud_add_amount <= water_level + 1) {