aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorparamat <mat.gregory@virginmedia.com>2015-06-03 08:59:07 +0100
committerparamat <mat.gregory@virginmedia.com>2015-06-18 07:05:22 +0100
commite45ecad3ab401e169d1c8c9ba9448360b215b3e5 (patch)
tree37ee377eb171a4aeec150bc846db374f982705e1 /src
parent2da150378039371761b2f8d1a13036382228e248 (diff)
downloadminetest-e45ecad3ab401e169d1c8c9ba9448360b215b3e5.tar.gz
minetest-e45ecad3ab401e169d1c8c9ba9448360b215b3e5.tar.bz2
minetest-e45ecad3ab401e169d1c8c9ba9448360b215b3e5.zip
Biome API: Add noise defined biome blend
Diffstat (limited to 'src')
-rw-r--r--src/mapgen.cpp4
-rw-r--r--src/mapgen.h4
-rw-r--r--src/mapgen_v5.cpp20
-rw-r--r--src/mapgen_v5.h3
-rw-r--r--src/mapgen_v7.cpp29
-rw-r--r--src/mapgen_v7.h2
6 files changed, 49 insertions, 13 deletions
diff --git a/src/mapgen.cpp b/src/mapgen.cpp
index 7965730e4..d1171e29d 100644
--- a/src/mapgen.cpp
+++ b/src/mapgen.cpp
@@ -445,7 +445,9 @@ void MapgenParams::load(const Settings &settings)
settings.getS16NoEx("chunksize", chunksize);
settings.getFlagStrNoEx("mg_flags", flags, flagdesc_mapgen);
settings.getNoiseParams("mg_biome_np_heat", np_biome_heat);
+ settings.getNoiseParams("mg_biome_np_heat_blend", np_biome_heat_blend);
settings.getNoiseParams("mg_biome_np_humidity", np_biome_humidity);
+ settings.getNoiseParams("mg_biome_np_humidity_blend", np_biome_humidity_blend);
delete sparams;
sparams = EmergeManager::createMapgenParams(mg_name);
@@ -462,7 +464,9 @@ void MapgenParams::save(Settings &settings) const
settings.setS16("chunksize", chunksize);
settings.setFlagStr("mg_flags", flags, flagdesc_mapgen, (u32)-1);
settings.setNoiseParams("mg_biome_np_heat", np_biome_heat);
+ settings.setNoiseParams("mg_biome_np_heat_blend", np_biome_heat_blend);
settings.setNoiseParams("mg_biome_np_humidity", np_biome_humidity);
+ settings.setNoiseParams("mg_biome_np_humidity_blend", np_biome_humidity_blend);
if (sparams)
sparams->writeParams(&settings);
diff --git a/src/mapgen.h b/src/mapgen.h
index a875e0f3d..a1cc8af53 100644
--- a/src/mapgen.h
+++ b/src/mapgen.h
@@ -115,7 +115,9 @@ struct MapgenParams {
u32 flags;
NoiseParams np_biome_heat;
+ NoiseParams np_biome_heat_blend;
NoiseParams np_biome_humidity;
+ NoiseParams np_biome_humidity_blend;
MapgenSpecificParams *sparams;
@@ -126,7 +128,9 @@ struct MapgenParams {
water_level(1),
flags(MG_TREES | MG_CAVES | MG_LIGHT),
np_biome_heat(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 5349, 3, 0.5, 2.0)),
+ np_biome_heat_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 13, 2, 1.0, 2.0)),
np_biome_humidity(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 842, 3, 0.5, 2.0)),
+ np_biome_humidity_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 90003, 2, 1.0, 2.0)),
sparams(NULL)
{}
diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp
index 92febf43b..f748e7b86 100644
--- a/src/mapgen_v5.cpp
+++ b/src/mapgen_v5.cpp
@@ -68,13 +68,15 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge)
noise_height = new Noise(&sp->np_height, seed, csize.X, csize.Z);
// 3D terrain noise
- noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z);
- noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z);
- noise_ground = new Noise(&sp->np_ground, seed, csize.X, csize.Y + 2, csize.Z);
+ noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z);
+ noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z);
+ noise_ground = new Noise(&sp->np_ground, seed, csize.X, csize.Y + 2, csize.Z);
// Biome noise
- noise_heat = new Noise(&params->np_biome_heat, seed, csize.X, csize.Z);
- noise_humidity = new Noise(&params->np_biome_humidity, seed, csize.X, csize.Z);
+ noise_heat = new Noise(&params->np_biome_heat, seed, csize.X, csize.Z);
+ noise_humidity = new Noise(&params->np_biome_humidity, seed, csize.X, csize.Z);
+ noise_heat_blend = new Noise(&params->np_biome_heat_blend, seed, csize.X, csize.Z);
+ noise_humidity_blend = new Noise(&params->np_biome_humidity_blend, seed, csize.X, csize.Z);
//// Resolve nodes to be used
INodeDefManager *ndef = emerge->ndef;
@@ -116,6 +118,8 @@ MapgenV5::~MapgenV5()
delete noise_heat;
delete noise_humidity;
+ delete noise_heat_blend;
+ delete noise_humidity_blend;
delete[] heightmap;
delete[] biomemap;
@@ -330,7 +334,13 @@ void MapgenV5::calculateNoise()
noise_filler_depth->perlinMap2D(x, z);
noise_heat->perlinMap2D(x, z);
noise_humidity->perlinMap2D(x, z);
+ noise_heat_blend->perlinMap2D(x, z);
+ noise_humidity_blend->perlinMap2D(x, z);
+ for (s32 i = 0; i < csize.X * csize.Z; i++) {
+ noise_heat->result[i] += noise_heat_blend->result[i];
+ noise_humidity->result[i] += noise_humidity_blend->result[i];
+ }
//printf("calculateNoise: %dus\n", t.stop());
}
diff --git a/src/mapgen_v5.h b/src/mapgen_v5.h
index 5575dfe61..911975e7f 100644
--- a/src/mapgen_v5.h
+++ b/src/mapgen_v5.h
@@ -69,8 +69,11 @@ public:
Noise *noise_cave1;
Noise *noise_cave2;
Noise *noise_ground;
+
Noise *noise_heat;
Noise *noise_humidity;
+ Noise *noise_heat_blend;
+ Noise *noise_humidity_blend;
content_t c_stone;
content_t c_water_source;
diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp
index 247d9debc..6e97c2c16 100644
--- a/src/mapgen_v7.cpp
+++ b/src/mapgen_v7.cpp
@@ -82,8 +82,10 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge)
noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z);
//// Biome noise
- noise_heat = new Noise(&params->np_biome_heat, seed, csize.X, csize.Z);
- noise_humidity = new Noise(&params->np_biome_humidity, seed, csize.X, csize.Z);
+ noise_heat = new Noise(&params->np_biome_heat, seed, csize.X, csize.Z);
+ noise_humidity = new Noise(&params->np_biome_humidity, seed, csize.X, csize.Z);
+ noise_heat_blend = new Noise(&params->np_biome_heat_blend, seed, csize.X, csize.Z);
+ noise_humidity_blend = new Noise(&params->np_biome_humidity_blend, seed, csize.X, csize.Z);
//// Resolve nodes to be used
INodeDefManager *ndef = emerge->ndef;
@@ -130,6 +132,8 @@ MapgenV7::~MapgenV7()
delete noise_heat;
delete noise_humidity;
+ delete noise_heat_blend;
+ delete noise_humidity_blend;
delete[] ridge_heightmap;
delete[] heightmap;
@@ -227,11 +231,11 @@ void MapgenV7::makeChunk(BlockMakeData *data)
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;
@@ -365,14 +369,23 @@ void MapgenV7::calculateNoise()
noise_filler_depth->perlinMap2D(x, z);
noise_heat->perlinMap2D(x, z);
noise_humidity->perlinMap2D(x, z);
+ noise_heat_blend->perlinMap2D(x, z);
+ noise_humidity_blend->perlinMap2D(x, z);
+
+ for (s32 i = 0; i < csize.X * csize.Z; i++) {
+ noise_heat->result[i] += noise_heat_blend->result[i];
+ noise_humidity->result[i] += noise_humidity_blend->result[i];
+ }
//printf("calculateNoise: %dus\n", t.stop());
}
Biome *MapgenV7::getBiomeAtPoint(v3s16 p)
{
- float heat = NoisePerlin2D(&noise_heat->np, p.X, p.Z, seed);
- float humidity = NoisePerlin2D(&noise_humidity->np, p.X, p.Z, seed);
+ float heat = NoisePerlin2D(&noise_heat->np, p.X, p.Z, seed) +
+ NoisePerlin2D(&noise_heat_blend->np, p.X, p.Z, seed);
+ float humidity = NoisePerlin2D(&noise_humidity->np, p.X, p.Z, seed) +
+ NoisePerlin2D(&noise_humidity_blend->np, p.X, p.Z, seed);
s16 groundlevel = baseTerrainLevelAtPoint(p.X, p.Z);
return bmgr->getBiome(heat, humidity, groundlevel);
diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h
index eb46c371b..0a8a8c876 100644
--- a/src/mapgen_v7.h
+++ b/src/mapgen_v7.h
@@ -82,6 +82,8 @@ public:
Noise *noise_heat;
Noise *noise_humidity;
+ Noise *noise_heat_blend;
+ Noise *noise_humidity_blend;
content_t c_stone;
content_t c_water_source;