]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/mapgen/mapgen_valleys.cpp
Merge pull request #59 from PrairieAstronomer/readme_irrlicht_change
[dragonfireclient.git] / src / mapgen / mapgen_valleys.cpp
index a27a3120184ba85de71fc9cc69c645fd8716a7e0..80a99b1f0fd728c16d4a905cdeb2dd5f338ae014 100644 (file)
@@ -54,11 +54,11 @@ FlagDesc flagdesc_mapgen_valleys[] = {
 };
 
 
-MapgenValleys::MapgenValleys(int mapgenid, MapgenValleysParams *params,
-       EmergeManager *emerge)
-       : MapgenBasic(mapgenid, params, emerge)
+MapgenValleys::MapgenValleys(MapgenValleysParams *params, EmergeParams *emerge)
+       : MapgenBasic(MAPGEN_VALLEYS, params, emerge)
 {
-       // NOTE: MapgenValleys has a hard dependency on BiomeGenOriginal
+       FATAL_ERROR_IF(biomegen->getType() != BIOMEGEN_ORIGINAL,
+               "MapgenValleys has a hard dependency on BiomeGenOriginal");
        m_bgen = (BiomeGenOriginal *)biomegen;
 
        spflags            = params->spflags;
@@ -68,7 +68,11 @@ MapgenValleys::MapgenValleys(int mapgenid, MapgenValleysParams *params,
 
        cave_width         = params->cave_width;
        large_cave_depth   = params->large_cave_depth;
-       lava_depth         = params->lava_depth;
+       small_cave_num_min = params->small_cave_num_min;
+       small_cave_num_max = params->small_cave_num_max;
+       large_cave_num_min = params->large_cave_num_min;
+       large_cave_num_max = params->large_cave_num_max;
+       large_cave_flooded = params->large_cave_flooded;
        cavern_limit       = params->cavern_limit;
        cavern_taper       = params->cavern_taper;
        cavern_threshold   = params->cavern_threshold;
@@ -88,9 +92,10 @@ MapgenValleys::MapgenValleys(int mapgenid, MapgenValleysParams *params,
        noise_inter_valley_fill = new Noise(&params->np_inter_valley_fill,
                seed, csize.X, csize.Y + 2, csize.Z);
        // 1-down overgeneraion
-       MapgenBasic::np_cave1   = params->np_cave1;
-       MapgenBasic::np_cave2   = params->np_cave2;
-       MapgenBasic::np_cavern  = params->np_cavern;
+       MapgenBasic::np_cave1    = params->np_cave1;
+       MapgenBasic::np_cave2    = params->np_cave2;
+       MapgenBasic::np_cavern   = params->np_cavern;
+       MapgenBasic::np_dungeons = params->np_dungeons;
 }
 
 
@@ -116,25 +121,30 @@ MapgenValleysParams::MapgenValleysParams():
        np_valley_profile     (0.6,   0.50, v3f(512,  512,  512),  777,   1, 1.0,  2.0),
        np_cave1              (0.0,   12.0, v3f(61,   61,   61),   52534, 3, 0.5,  2.0),
        np_cave2              (0.0,   12.0, v3f(67,   67,   67),   10325, 3, 0.5,  2.0),
-       np_cavern             (0.0,   1.0,  v3f(768,  256,  768),  59033, 6, 0.63, 2.0)
+       np_cavern             (0.0,   1.0,  v3f(768,  256,  768),  59033, 6, 0.63, 2.0),
+       np_dungeons           (0.9,   0.5,  v3f(500,  500,  500),  0,     2, 0.8,  2.0)
 {
 }
 
 
 void MapgenValleysParams::readParams(const Settings *settings)
 {
-       settings->getFlagStrNoEx("mgvalleys_spflags",        spflags, flagdesc_mapgen_valleys);
-       settings->getU16NoEx("mgvalleys_altitude_chill",     altitude_chill);
-       settings->getS16NoEx("mgvalleys_large_cave_depth",   large_cave_depth);
-       settings->getS16NoEx("mgvalleys_lava_depth",         lava_depth);
-       settings->getU16NoEx("mgvalleys_river_depth",        river_depth);
-       settings->getU16NoEx("mgvalleys_river_size",         river_size);
-       settings->getFloatNoEx("mgvalleys_cave_width",       cave_width);
-       settings->getS16NoEx("mgvalleys_cavern_limit",       cavern_limit);
-       settings->getS16NoEx("mgvalleys_cavern_taper",       cavern_taper);
-       settings->getFloatNoEx("mgvalleys_cavern_threshold", cavern_threshold);
-       settings->getS16NoEx("mgvalleys_dungeon_ymin",       dungeon_ymin);
-       settings->getS16NoEx("mgvalleys_dungeon_ymax",       dungeon_ymax);
+       settings->getFlagStrNoEx("mgvalleys_spflags", spflags, flagdesc_mapgen_valleys);
+       settings->getU16NoEx("mgvalleys_altitude_chill",       altitude_chill);
+       settings->getS16NoEx("mgvalleys_large_cave_depth",     large_cave_depth);
+       settings->getU16NoEx("mgvalleys_small_cave_num_min",   small_cave_num_min);
+       settings->getU16NoEx("mgvalleys_small_cave_num_max",   small_cave_num_max);
+       settings->getU16NoEx("mgvalleys_large_cave_num_min",   large_cave_num_min);
+       settings->getU16NoEx("mgvalleys_large_cave_num_max",   large_cave_num_max);
+       settings->getFloatNoEx("mgvalleys_large_cave_flooded", large_cave_flooded);
+       settings->getU16NoEx("mgvalleys_river_depth",          river_depth);
+       settings->getU16NoEx("mgvalleys_river_size",           river_size);
+       settings->getFloatNoEx("mgvalleys_cave_width",         cave_width);
+       settings->getS16NoEx("mgvalleys_cavern_limit",         cavern_limit);
+       settings->getS16NoEx("mgvalleys_cavern_taper",         cavern_taper);
+       settings->getFloatNoEx("mgvalleys_cavern_threshold",   cavern_threshold);
+       settings->getS16NoEx("mgvalleys_dungeon_ymin",         dungeon_ymin);
+       settings->getS16NoEx("mgvalleys_dungeon_ymax",         dungeon_ymax);
 
        settings->getNoiseParams("mgvalleys_np_filler_depth",       np_filler_depth);
        settings->getNoiseParams("mgvalleys_np_inter_valley_fill",  np_inter_valley_fill);
@@ -147,23 +157,28 @@ void MapgenValleysParams::readParams(const Settings *settings)
        settings->getNoiseParams("mgvalleys_np_cave1",              np_cave1);
        settings->getNoiseParams("mgvalleys_np_cave2",              np_cave2);
        settings->getNoiseParams("mgvalleys_np_cavern",             np_cavern);
+       settings->getNoiseParams("mgvalleys_np_dungeons",           np_dungeons);
 }
 
 
 void MapgenValleysParams::writeParams(Settings *settings) const
 {
-       settings->setFlagStr("mgvalleys_spflags",        spflags, flagdesc_mapgen_valleys, U32_MAX);
-       settings->setU16("mgvalleys_altitude_chill",     altitude_chill);
-       settings->setS16("mgvalleys_large_cave_depth",   large_cave_depth);
-       settings->setS16("mgvalleys_lava_depth",         lava_depth);
-       settings->setU16("mgvalleys_river_depth",        river_depth);
-       settings->setU16("mgvalleys_river_size",         river_size);
-       settings->setFloat("mgvalleys_cave_width",       cave_width);
-       settings->setS16("mgvalleys_cavern_limit",       cavern_limit);
-       settings->setS16("mgvalleys_cavern_taper",       cavern_taper);
-       settings->setFloat("mgvalleys_cavern_threshold", cavern_threshold);
-       settings->setS16("mgvalleys_dungeon_ymin",       dungeon_ymin);
-       settings->setS16("mgvalleys_dungeon_ymax",       dungeon_ymax);
+       settings->setFlagStr("mgvalleys_spflags", spflags, flagdesc_mapgen_valleys);
+       settings->setU16("mgvalleys_altitude_chill",       altitude_chill);
+       settings->setS16("mgvalleys_large_cave_depth",     large_cave_depth);
+       settings->setU16("mgvalleys_small_cave_num_min",   small_cave_num_min);
+       settings->setU16("mgvalleys_small_cave_num_max",   small_cave_num_max);
+       settings->setU16("mgvalleys_large_cave_num_min",   large_cave_num_min);
+       settings->setU16("mgvalleys_large_cave_num_max",   large_cave_num_max);
+       settings->setFloat("mgvalleys_large_cave_flooded", large_cave_flooded);
+       settings->setU16("mgvalleys_river_depth",          river_depth);
+       settings->setU16("mgvalleys_river_size",           river_size);
+       settings->setFloat("mgvalleys_cave_width",         cave_width);
+       settings->setS16("mgvalleys_cavern_limit",         cavern_limit);
+       settings->setS16("mgvalleys_cavern_taper",         cavern_taper);
+       settings->setFloat("mgvalleys_cavern_threshold",   cavern_threshold);
+       settings->setS16("mgvalleys_dungeon_ymin",         dungeon_ymin);
+       settings->setS16("mgvalleys_dungeon_ymax",         dungeon_ymax);
 
        settings->setNoiseParams("mgvalleys_np_filler_depth",       np_filler_depth);
        settings->setNoiseParams("mgvalleys_np_inter_valley_fill",  np_inter_valley_fill);
@@ -176,20 +191,26 @@ void MapgenValleysParams::writeParams(Settings *settings) const
        settings->setNoiseParams("mgvalleys_np_cave1",              np_cave1);
        settings->setNoiseParams("mgvalleys_np_cave2",              np_cave2);
        settings->setNoiseParams("mgvalleys_np_cavern",             np_cavern);
+       settings->setNoiseParams("mgvalleys_np_dungeons",           np_dungeons);
 }
 
 
+void MapgenValleysParams::setDefaultSettings(Settings *settings)
+{
+       settings->setDefault("mgvalleys_spflags", flagdesc_mapgen_valleys,
+               MGVALLEYS_ALT_CHILL | MGVALLEYS_HUMID_RIVERS |
+               MGVALLEYS_VARY_RIVER_DEPTH | MGVALLEYS_ALT_DRY);
+}
+
+
+/////////////////////////////////////////////////////////////////
+
+
 void MapgenValleys::makeChunk(BlockMakeData *data)
 {
        // Pre-conditions
        assert(data->vmanip);
        assert(data->nodedef);
-       assert(data->blockpos_requested.X >= data->blockpos_min.X &&
-               data->blockpos_requested.Y >= data->blockpos_min.Y &&
-               data->blockpos_requested.Z >= data->blockpos_min.Z);
-       assert(data->blockpos_requested.X <= data->blockpos_max.X &&
-               data->blockpos_requested.Y <= data->blockpos_max.Y &&
-               data->blockpos_requested.Z <= data->blockpos_max.Z);
 
        //TimeTaker t("makeChunk");
 
@@ -242,11 +263,11 @@ void MapgenValleys::makeChunk(BlockMakeData *data)
        }
 
        // Generate the registered ores
-       m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
+       if (flags & MG_ORES)
+               m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max);
 
        // Dungeon creation
-       if ((flags & MG_DUNGEONS) && full_node_min.Y >= dungeon_ymin &&
-                       full_node_max.Y <= dungeon_ymax)
+       if (flags & MG_DUNGEONS)
                generateDungeons(stone_surface_max_y);
 
        // Generate the registered decorations
@@ -365,7 +386,7 @@ int MapgenValleys::generateTerrain()
 
                // Rivers are placed where 'river' is negative
                if (river < 0.0f) {
-                       // Use the the function -sqrt(1-x^2) which models a circle
+                       // Use the function -sqrt(1-x^2) which models a circle
                        float tr = river / river_size_factor + 1.0f;
                        float depth = (river_depth_bed *
                                std::sqrt(std::fmax(0.0f, 1.0f - tr * tr)));