aboutsummaryrefslogtreecommitdiff
path: root/src/mapgen/mapgen_flat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mapgen/mapgen_flat.cpp')
-rw-r--r--src/mapgen/mapgen_flat.cpp207
1 files changed, 97 insertions, 110 deletions
diff --git a/src/mapgen/mapgen_flat.cpp b/src/mapgen/mapgen_flat.cpp
index 369777ad2..e24f1e4a1 100644
--- a/src/mapgen/mapgen_flat.cpp
+++ b/src/mapgen/mapgen_flat.cpp
@@ -18,7 +18,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
#include "mapgen.h"
#include "voxel.h"
#include "noise.h"
@@ -37,34 +36,29 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mg_decoration.h"
#include "mapgen_flat.h"
-
FlagDesc flagdesc_mapgen_flat[] = {
- {"lakes", MGFLAT_LAKES},
- {"hills", MGFLAT_HILLS},
- {NULL, 0}
-};
+ {"lakes", MGFLAT_LAKES}, {"hills", MGFLAT_HILLS}, {NULL, 0}};
///////////////////////////////////////////////////////////////////////////////////////
-
-MapgenFlat::MapgenFlat(MapgenFlatParams *params, EmergeParams *emerge)
- : MapgenBasic(MAPGEN_FLAT, params, emerge)
+MapgenFlat::MapgenFlat(MapgenFlatParams *params, EmergeParams *emerge) :
+ MapgenBasic(MAPGEN_FLAT, params, emerge)
{
- spflags = params->spflags;
- ground_level = params->ground_level;
- large_cave_depth = params->large_cave_depth;
+ spflags = params->spflags;
+ ground_level = params->ground_level;
+ large_cave_depth = params->large_cave_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;
- cave_width = params->cave_width;
- lake_threshold = params->lake_threshold;
- lake_steepness = params->lake_steepness;
- hill_threshold = params->hill_threshold;
- hill_steepness = params->hill_steepness;
- dungeon_ymin = params->dungeon_ymin;
- dungeon_ymax = params->dungeon_ymax;
+ cave_width = params->cave_width;
+ lake_threshold = params->lake_threshold;
+ lake_steepness = params->lake_steepness;
+ hill_threshold = params->hill_threshold;
+ hill_steepness = params->hill_steepness;
+ dungeon_ymin = params->dungeon_ymin;
+ dungeon_ymax = params->dungeon_ymax;
// 2D noise
noise_filler_depth = new Noise(&params->np_filler_depth, seed, csize.X, csize.Z);
@@ -72,12 +66,11 @@ MapgenFlat::MapgenFlat(MapgenFlatParams *params, EmergeParams *emerge)
if ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS))
noise_terrain = new Noise(&params->np_terrain, seed, csize.X, csize.Z);
// 3D noise
- MapgenBasic::np_cave1 = params->np_cave1;
- MapgenBasic::np_cave2 = params->np_cave2;
+ MapgenBasic::np_cave1 = params->np_cave1;
+ MapgenBasic::np_cave2 = params->np_cave2;
MapgenBasic::np_dungeons = params->np_dungeons;
}
-
MapgenFlat::~MapgenFlat()
{
delete noise_filler_depth;
@@ -86,92 +79,86 @@ MapgenFlat::~MapgenFlat()
delete noise_terrain;
}
-
-MapgenFlatParams::MapgenFlatParams():
- np_terrain (0, 1, v3f(600, 600, 600), 7244, 5, 0.6, 2.0),
- np_filler_depth (0, 1.2, v3f(150, 150, 150), 261, 3, 0.7, 2.0),
- np_cave1 (0, 12, v3f(61, 61, 61), 52534, 3, 0.5, 2.0),
- np_cave2 (0, 12, v3f(67, 67, 67), 10325, 3, 0.5, 2.0),
- np_dungeons (0.9, 0.5, v3f(500, 500, 500), 0, 2, 0.8, 2.0)
+MapgenFlatParams::MapgenFlatParams() :
+ np_terrain(0, 1, v3f(600, 600, 600), 7244, 5, 0.6, 2.0),
+ np_filler_depth(0, 1.2, v3f(150, 150, 150), 261, 3, 0.7, 2.0),
+ np_cave1(0, 12, v3f(61, 61, 61), 52534, 3, 0.5, 2.0),
+ np_cave2(0, 12, v3f(67, 67, 67), 10325, 3, 0.5, 2.0),
+ np_dungeons(0.9, 0.5, v3f(500, 500, 500), 0, 2, 0.8, 2.0)
{
}
-
void MapgenFlatParams::readParams(const Settings *settings)
{
settings->getFlagStrNoEx("mgflat_spflags", spflags, flagdesc_mapgen_flat);
- settings->getS16NoEx("mgflat_ground_level", ground_level);
- settings->getS16NoEx("mgflat_large_cave_depth", large_cave_depth);
- settings->getU16NoEx("mgflat_small_cave_num_min", small_cave_num_min);
- settings->getU16NoEx("mgflat_small_cave_num_max", small_cave_num_max);
- settings->getU16NoEx("mgflat_large_cave_num_min", large_cave_num_min);
- settings->getU16NoEx("mgflat_large_cave_num_max", large_cave_num_max);
+ settings->getS16NoEx("mgflat_ground_level", ground_level);
+ settings->getS16NoEx("mgflat_large_cave_depth", large_cave_depth);
+ settings->getU16NoEx("mgflat_small_cave_num_min", small_cave_num_min);
+ settings->getU16NoEx("mgflat_small_cave_num_max", small_cave_num_max);
+ settings->getU16NoEx("mgflat_large_cave_num_min", large_cave_num_min);
+ settings->getU16NoEx("mgflat_large_cave_num_max", large_cave_num_max);
settings->getFloatNoEx("mgflat_large_cave_flooded", large_cave_flooded);
- settings->getFloatNoEx("mgflat_cave_width", cave_width);
- settings->getFloatNoEx("mgflat_lake_threshold", lake_threshold);
- settings->getFloatNoEx("mgflat_lake_steepness", lake_steepness);
- settings->getFloatNoEx("mgflat_hill_threshold", hill_threshold);
- settings->getFloatNoEx("mgflat_hill_steepness", hill_steepness);
- settings->getS16NoEx("mgflat_dungeon_ymin", dungeon_ymin);
- settings->getS16NoEx("mgflat_dungeon_ymax", dungeon_ymax);
-
- settings->getNoiseParams("mgflat_np_terrain", np_terrain);
+ settings->getFloatNoEx("mgflat_cave_width", cave_width);
+ settings->getFloatNoEx("mgflat_lake_threshold", lake_threshold);
+ settings->getFloatNoEx("mgflat_lake_steepness", lake_steepness);
+ settings->getFloatNoEx("mgflat_hill_threshold", hill_threshold);
+ settings->getFloatNoEx("mgflat_hill_steepness", hill_steepness);
+ settings->getS16NoEx("mgflat_dungeon_ymin", dungeon_ymin);
+ settings->getS16NoEx("mgflat_dungeon_ymax", dungeon_ymax);
+
+ settings->getNoiseParams("mgflat_np_terrain", np_terrain);
settings->getNoiseParams("mgflat_np_filler_depth", np_filler_depth);
- settings->getNoiseParams("mgflat_np_cave1", np_cave1);
- settings->getNoiseParams("mgflat_np_cave2", np_cave2);
- settings->getNoiseParams("mgflat_np_dungeons", np_dungeons);
+ settings->getNoiseParams("mgflat_np_cave1", np_cave1);
+ settings->getNoiseParams("mgflat_np_cave2", np_cave2);
+ settings->getNoiseParams("mgflat_np_dungeons", np_dungeons);
}
-
void MapgenFlatParams::writeParams(Settings *settings) const
{
settings->setFlagStr("mgflat_spflags", spflags, flagdesc_mapgen_flat);
- settings->setS16("mgflat_ground_level", ground_level);
- settings->setS16("mgflat_large_cave_depth", large_cave_depth);
- settings->setU16("mgflat_small_cave_num_min", small_cave_num_min);
- settings->setU16("mgflat_small_cave_num_max", small_cave_num_max);
- settings->setU16("mgflat_large_cave_num_min", large_cave_num_min);
- settings->setU16("mgflat_large_cave_num_max", large_cave_num_max);
+ settings->setS16("mgflat_ground_level", ground_level);
+ settings->setS16("mgflat_large_cave_depth", large_cave_depth);
+ settings->setU16("mgflat_small_cave_num_min", small_cave_num_min);
+ settings->setU16("mgflat_small_cave_num_max", small_cave_num_max);
+ settings->setU16("mgflat_large_cave_num_min", large_cave_num_min);
+ settings->setU16("mgflat_large_cave_num_max", large_cave_num_max);
settings->setFloat("mgflat_large_cave_flooded", large_cave_flooded);
- settings->setFloat("mgflat_cave_width", cave_width);
- settings->setFloat("mgflat_lake_threshold", lake_threshold);
- settings->setFloat("mgflat_lake_steepness", lake_steepness);
- settings->setFloat("mgflat_hill_threshold", hill_threshold);
- settings->setFloat("mgflat_hill_steepness", hill_steepness);
- settings->setS16("mgflat_dungeon_ymin", dungeon_ymin);
- settings->setS16("mgflat_dungeon_ymax", dungeon_ymax);
-
- settings->setNoiseParams("mgflat_np_terrain", np_terrain);
+ settings->setFloat("mgflat_cave_width", cave_width);
+ settings->setFloat("mgflat_lake_threshold", lake_threshold);
+ settings->setFloat("mgflat_lake_steepness", lake_steepness);
+ settings->setFloat("mgflat_hill_threshold", hill_threshold);
+ settings->setFloat("mgflat_hill_steepness", hill_steepness);
+ settings->setS16("mgflat_dungeon_ymin", dungeon_ymin);
+ settings->setS16("mgflat_dungeon_ymax", dungeon_ymax);
+
+ settings->setNoiseParams("mgflat_np_terrain", np_terrain);
settings->setNoiseParams("mgflat_np_filler_depth", np_filler_depth);
- settings->setNoiseParams("mgflat_np_cave1", np_cave1);
- settings->setNoiseParams("mgflat_np_cave2", np_cave2);
- settings->setNoiseParams("mgflat_np_dungeons", np_dungeons);
+ settings->setNoiseParams("mgflat_np_cave1", np_cave1);
+ settings->setNoiseParams("mgflat_np_cave2", np_cave2);
+ settings->setNoiseParams("mgflat_np_dungeons", np_dungeons);
}
-
void MapgenFlatParams::setDefaultSettings(Settings *settings)
{
settings->setDefault("mgflat_spflags", flagdesc_mapgen_flat, 0);
}
-
/////////////////////////////////////////////////////////////////
-
int MapgenFlat::getSpawnLevelAtPoint(v2s16 p)
{
s16 stone_level = ground_level;
- float n_terrain =
- ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS)) ?
- NoisePerlin2D(&noise_terrain->np, p.X, p.Y, seed) :
- 0.0f;
+ float n_terrain = ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS))
+ ? NoisePerlin2D(&noise_terrain->np, p.X, p.Y,
+ seed)
+ : 0.0f;
if ((spflags & MGFLAT_LAKES) && n_terrain < lake_threshold) {
s16 depress = (lake_threshold - n_terrain) * lake_steepness;
stone_level = ground_level - depress;
} else if ((spflags & MGFLAT_HILLS) && n_terrain > hill_threshold) {
s16 rise = (n_terrain - hill_threshold) * hill_steepness;
- stone_level = ground_level + rise;
+ stone_level = ground_level + rise;
}
if (ground_level < water_level)
@@ -187,23 +174,22 @@ int MapgenFlat::getSpawnLevelAtPoint(v2s16 p)
return MAX_MAP_GENERATION_LIMIT;
}
-
void MapgenFlat::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);
+ 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);
+ data->blockpos_requested.Y <= data->blockpos_max.Y &&
+ data->blockpos_requested.Z <= data->blockpos_max.Z);
this->generating = true;
- this->vm = data->vmanip;
+ this->vm = data->vmanip;
this->ndef = data->nodedef;
- //TimeTaker t("makeChunk");
+ // TimeTaker t("makeChunk");
v3s16 blockpos_min = data->blockpos_min;
v3s16 blockpos_max = data->blockpos_max;
@@ -247,21 +233,20 @@ void MapgenFlat::makeChunk(BlockMakeData *data)
if (flags & MG_BIOMES)
dustTopNodes();
- //printf("makeChunk: %dms\n", t.stop());
+ // printf("makeChunk: %dms\n", t.stop());
updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
if (flags & MG_LIGHT)
calcLighting(node_min - v3s16(0, 1, 0), node_max + v3s16(0, 1, 0),
- full_node_min, full_node_max);
+ full_node_min, full_node_max);
- //setLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
+ // setLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
// node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE, 0xFF);
this->generating = false;
}
-
s16 MapgenFlat::generateTerrain()
{
MapNode n_air(CONTENT_AIR);
@@ -277,34 +262,36 @@ s16 MapgenFlat::generateTerrain()
noise_terrain->perlinMap2D(node_min.X, node_min.Z);
for (s16 z = node_min.Z; z <= node_max.Z; z++)
- for (s16 x = node_min.X; x <= node_max.X; x++, ni2d++) {
- s16 stone_level = ground_level;
- float n_terrain = use_noise ? noise_terrain->result[ni2d] : 0.0f;
-
- if ((spflags & MGFLAT_LAKES) && n_terrain < lake_threshold) {
- s16 depress = (lake_threshold - n_terrain) * lake_steepness;
- stone_level = ground_level - depress;
- } else if ((spflags & MGFLAT_HILLS) && n_terrain > hill_threshold) {
- s16 rise = (n_terrain - hill_threshold) * hill_steepness;
- stone_level = ground_level + rise;
- }
+ for (s16 x = node_min.X; x <= node_max.X; x++, ni2d++) {
+ s16 stone_level = ground_level;
+ float n_terrain = use_noise ? noise_terrain->result[ni2d] : 0.0f;
+
+ if ((spflags & MGFLAT_LAKES) && n_terrain < lake_threshold) {
+ s16 depress = (lake_threshold - n_terrain) *
+ lake_steepness;
+ stone_level = ground_level - depress;
+ } else if ((spflags & MGFLAT_HILLS) &&
+ n_terrain > hill_threshold) {
+ s16 rise = (n_terrain - hill_threshold) * hill_steepness;
+ stone_level = ground_level + rise;
+ }
- u32 vi = vm->m_area.index(x, node_min.Y - 1, z);
- for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
- if (vm->m_data[vi].getContent() == CONTENT_IGNORE) {
- if (y <= stone_level) {
- vm->m_data[vi] = n_stone;
- if (y > stone_surface_max_y)
- stone_surface_max_y = y;
- } else if (y <= water_level) {
- vm->m_data[vi] = n_water;
- } else {
- vm->m_data[vi] = n_air;
+ u32 vi = vm->m_area.index(x, node_min.Y - 1, z);
+ for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) {
+ if (vm->m_data[vi].getContent() == CONTENT_IGNORE) {
+ if (y <= stone_level) {
+ vm->m_data[vi] = n_stone;
+ if (y > stone_surface_max_y)
+ stone_surface_max_y = y;
+ } else if (y <= water_level) {
+ vm->m_data[vi] = n_water;
+ } else {
+ vm->m_data[vi] = n_air;
+ }
}
+ VoxelArea::add_y(em, vi, 1);
}
- VoxelArea::add_y(em, vi, 1);
}
- }
return stone_surface_max_y;
}