aboutsummaryrefslogtreecommitdiff
path: root/src/mapgen/dungeongen.cpp
diff options
context:
space:
mode:
authorParamat <paramat@users.noreply.github.com>2019-06-01 20:50:43 +0100
committerGitHub <noreply@github.com>2019-06-01 20:50:43 +0100
commit7379aa74cf98c7e4c7aa5325ef1531d412a0abac (patch)
tree45a3c608dce1fd03182f4f84f1968439dbfa4dbc /src/mapgen/dungeongen.cpp
parenta1459a9eac4eeb35a6c578a8b8f96393f87ed53d (diff)
downloadminetest-7379aa74cf98c7e4c7aa5325ef1531d412a0abac.tar.gz
minetest-7379aa74cf98c7e4c7aa5325ef1531d412a0abac.tar.bz2
minetest-7379aa74cf98c7e4c7aa5325ef1531d412a0abac.zip
Dungeons: Settable density noise, move number calculation to mapgens (#8473)
Add user-settable noise parameters for dungeon density to each mapgen, except V6 which hardcodes this noise parameter. Move the calculation of number of dungeons generated in a mapchunk out of dungeongen.cpp and into mapgen code, to allow mapgens to generate any desired number of dungeons in a mapchunk, instead of being forced to have number of dungeons determined by a density noise. This is more flexible and allows mapgens to use dungeon generation to create custom structures, such as occasional mega-dungeons.
Diffstat (limited to 'src/mapgen/dungeongen.cpp')
-rw-r--r--src/mapgen/dungeongen.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/mapgen/dungeongen.cpp b/src/mapgen/dungeongen.cpp
index 1aa3317cf..1cb46f140 100644
--- a/src/mapgen/dungeongen.cpp
+++ b/src/mapgen/dungeongen.cpp
@@ -31,9 +31,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
//#define DGEN_USE_TORCHES
-NoiseParams nparams_dungeon_density(0.9, 0.5, v3f(500.0, 500.0, 500.0), 0, 2, 0.8, 2.0);
-NoiseParams nparams_dungeon_alt_wall(-0.4, 1.0, v3f(40.0, 40.0, 40.0), 32474, 6, 1.1, 2.0);
-
///////////////////////////////////////////////////////////////////////////////
@@ -73,22 +70,22 @@ DungeonGen::DungeonGen(const NodeDefManager *ndef,
dp.rooms_max = 16;
dp.notifytype = GENNOTIFY_DUNGEON;
- dp.np_density = nparams_dungeon_density;
- dp.np_alt_wall = nparams_dungeon_alt_wall;
+ dp.np_alt_wall =
+ NoiseParams(-0.4, 1.0, v3f(40.0, 40.0, 40.0), 32474, 6, 1.1, 2.0);
}
}
-void DungeonGen::generate(MMVManip *vm, u32 bseed, v3s16 nmin, v3s16 nmax)
+void DungeonGen::generate(MMVManip *vm, u32 bseed, v3s16 nmin, v3s16 nmax,
+ u16 num_dungeons)
{
+ if (num_dungeons == 0)
+ return;
+
assert(vm);
//TimeTaker t("gen dungeons");
- float nval_density = NoisePerlin3D(&dp.np_density, nmin.X, nmin.Y, nmin.Z, dp.seed);
- if (nval_density < 1.0f)
- return;
-
static const bool preserve_ignore = !g_settings->getBool("projecting_dungeons");
this->vm = vm;
@@ -122,7 +119,7 @@ void DungeonGen::generate(MMVManip *vm, u32 bseed, v3s16 nmin, v3s16 nmax)
}
// Add them
- for (u32 i = 0; i < std::floor(nval_density); i++)
+ for (u32 i = 0; i < num_dungeons; i++)
makeDungeon(v3s16(1, 1, 1) * MAP_BLOCKSIZE);
// Optionally convert some structure to alternative structure