mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
Re-add jungles, apple trees
This commit is contained in:
parent
1f1ad9fd23
commit
6823ce99a7
@ -314,22 +314,25 @@
|
|||||||
#water_level = 1
|
#water_level = 1
|
||||||
# Size of chunks to be generated.
|
# Size of chunks to be generated.
|
||||||
#chunksize = 5
|
#chunksize = 5
|
||||||
# Map generation attributes. Currently supported: trees, caves, flat, v6_biome_blend
|
# Map generation attributes. Currently supported: trees, caves, flat, v6_biome_blend, v6_jungles
|
||||||
#mg_flags = trees, caves, v6_biome_blend
|
#mg_flags = trees, caves, v6_biome_blend
|
||||||
# How large deserts and beaches are
|
# How large deserts and beaches are
|
||||||
#mgv6_freq_desert = 0.45
|
#mgv6_freq_desert = 0.45
|
||||||
#mgv6_freq_beach = 0.15
|
#mgv6_freq_beach = 0.15
|
||||||
# Perlin noise attributes for different map generation parameters
|
# Perlin noise attributes for different map generation parameters
|
||||||
# Offset, scale, spread factor, seed offset, number of octaves, persistence
|
# Offset, scale, spread factor, seed offset, number of octaves, persistence
|
||||||
#mgv6_np_terrain_base = -4, 20, (250.0, 250, 250), 82341, 5, 0.6
|
#mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6
|
||||||
#mgv6_np_terrain_higher = 20, 16, (500, 500, 500), 85039, 5, 0.6
|
#mgv6_np_terrain_higher = 20, 16, (500, 500, 500), 85039, 5, 0.6
|
||||||
#mgv6_np_steepness = 0.85, 0.5, (125, 125, 125), -932, 5, 0.7
|
#mgv6_np_steepness = 0.85, 0.5, (125, 125, 125), -932, 5, 0.7
|
||||||
#mgv6_np_height_select = 0.5, 1, (250, 250, 250), 4213, 5, 0.69
|
#mgv6_np_height_select = 0.5, 1, (250, 250, 250), 4213, 5, 0.69
|
||||||
#mgv6_np_trees = 0, 1, (125, 125, 125), 2, 4, 0.66
|
|
||||||
#mgv6_np_mud = 4, 2, (200, 200, 200), 91013, 3, 0.55
|
#mgv6_np_mud = 4, 2, (200, 200, 200), 91013, 3, 0.55
|
||||||
#mgv6_np_beach = 0, 1, (250, 250, 250), 59420, 3, 0.50
|
#mgv6_np_beach = 0, 1, (250, 250, 250), 59420, 3, 0.50
|
||||||
#mgv6_np_biome = 0, 1, (250, 250, 250), 9130, 3, 0.50
|
#mgv6_np_biome = 0, 1, (250, 250, 250), 9130, 3, 0.50
|
||||||
#mgv6_np_cave = 6, 6, (250, 250, 250), 34329, 3, 0.50
|
#mgv6_np_cave = 6, 6, (250, 250, 250), 34329, 3, 0.50
|
||||||
|
#mgv6_np_humidity = 0.5, 0.5, (500, 500, 500), 72384, 4, 0.66
|
||||||
|
#mgv6_np_trees = 0, 1, (125, 125, 125), 2, 4, 0.66
|
||||||
|
#mgv6_np_apple_trees = 0, 1, (100, 100, 100), 342902, 3, 0.45
|
||||||
|
|
||||||
#mgv7_np_terrain = 10, 12, (350, 350, 350), 82341, 5, 0.6
|
#mgv7_np_terrain = 10, 12, (350, 350, 350), 82341, 5, 0.6
|
||||||
#mgv7_np_bgroup = 0.5, 0.3125, (350, 350, 350), 5923, 2, 0.6
|
#mgv7_np_bgroup = 0.5, 0.3125, (350, 350, 350), 5923, 2, 0.6
|
||||||
#mgv7_np_heat = 25, 50, (500, 500, 500), 35293, 1, 0
|
#mgv7_np_heat = 25, 50, (500, 500, 500), 35293, 1, 0
|
||||||
|
@ -99,6 +99,7 @@ public:
|
|||||||
{
|
{
|
||||||
std::set<std::string> s;
|
std::set<std::string> s;
|
||||||
s.insert("sapling");
|
s.insert("sapling");
|
||||||
|
s.insert("junglesapling");
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
virtual float getTriggerInterval()
|
virtual float getTriggerInterval()
|
||||||
@ -111,16 +112,25 @@ public:
|
|||||||
INodeDefManager *ndef = env->getGameDef()->ndef();
|
INodeDefManager *ndef = env->getGameDef()->ndef();
|
||||||
ServerMap *map = &env->getServerMap();
|
ServerMap *map = &env->getServerMap();
|
||||||
|
|
||||||
actionstream<<"A sapling grows into a tree at "
|
bool is_jungle_tree = n.getContent() == ndef->getId("junglesapling");
|
||||||
<<PP(p)<<std::endl;
|
|
||||||
|
actionstream <<"A " << (is_jungle_tree ? "jungle " : "")
|
||||||
|
<< "sapling grows into a tree at "
|
||||||
|
<< PP(p) << std::endl;
|
||||||
|
|
||||||
std::map<v3s16, MapBlock*> modified_blocks;
|
std::map<v3s16, MapBlock*> modified_blocks;
|
||||||
v3s16 tree_p = p;
|
v3s16 tree_p = p;
|
||||||
ManualMapVoxelManipulator vmanip(map);
|
ManualMapVoxelManipulator vmanip(map);
|
||||||
v3s16 tree_blockp = getNodeBlockPos(tree_p);
|
v3s16 tree_blockp = getNodeBlockPos(tree_p);
|
||||||
vmanip.initialEmerge(tree_blockp - v3s16(1,1,1), tree_blockp + v3s16(1,1,1));
|
vmanip.initialEmerge(tree_blockp - v3s16(1,1,1), tree_blockp + v3s16(1,1,1));
|
||||||
bool is_apple_tree = myrand()%4 == 0;
|
|
||||||
treegen::make_tree(vmanip, tree_p, is_apple_tree, ndef, myrand());
|
if (is_jungle_tree) {
|
||||||
|
treegen::make_jungletree(vmanip, tree_p, ndef, myrand());
|
||||||
|
} else {
|
||||||
|
bool is_apple_tree = myrand() % 4 == 0;
|
||||||
|
treegen::make_tree(vmanip, tree_p, is_apple_tree, ndef, myrand());
|
||||||
|
}
|
||||||
|
|
||||||
vmanip.blitBackAll(&modified_blocks);
|
vmanip.blitBackAll(&modified_blocks);
|
||||||
|
|
||||||
// update lighting
|
// update lighting
|
||||||
|
@ -219,15 +219,17 @@ void set_default_settings(Settings *settings)
|
|||||||
settings->setDefault("mgv6_freq_desert", "0.45");
|
settings->setDefault("mgv6_freq_desert", "0.45");
|
||||||
settings->setDefault("mgv6_freq_beach", "0.15");
|
settings->setDefault("mgv6_freq_beach", "0.15");
|
||||||
|
|
||||||
settings->setDefault("mgv6_np_terrain_base", "-4, 20, (250.0, 250, 250), 82341, 5, 0.6");
|
settings->setDefault("mgv6_np_terrain_base", "-4, 20, (250, 250, 250), 82341, 5, 0.6");
|
||||||
settings->setDefault("mgv6_np_terrain_higher", "20, 16, (500, 500, 500), 85039, 5, 0.6");
|
settings->setDefault("mgv6_np_terrain_higher", "20, 16, (500, 500, 500), 85039, 5, 0.6");
|
||||||
settings->setDefault("mgv6_np_steepness", "0.85, 0.5, (125, 125, 125), -932, 5, 0.7");
|
settings->setDefault("mgv6_np_steepness", "0.85, 0.5, (125, 125, 125), -932, 5, 0.7");
|
||||||
settings->setDefault("mgv6_np_height_select", "0.5, 1, (250, 250, 250), 4213, 5, 0.69");
|
settings->setDefault("mgv6_np_height_select", "0.5, 1, (250, 250, 250), 4213, 5, 0.69");
|
||||||
settings->setDefault("mgv6_np_trees", "0, 1, (125, 125, 125), 2, 4, 0.66");
|
|
||||||
settings->setDefault("mgv6_np_mud", "4, 2, (200, 200, 200), 91013, 3, 0.55");
|
settings->setDefault("mgv6_np_mud", "4, 2, (200, 200, 200), 91013, 3, 0.55");
|
||||||
settings->setDefault("mgv6_np_beach", "0, 1, (250, 250, 250), 59420, 3, 0.50");
|
settings->setDefault("mgv6_np_beach", "0, 1, (250, 250, 250), 59420, 3, 0.50");
|
||||||
settings->setDefault("mgv6_np_biome", "0, 1, (250, 250, 250), 9130, 3, 0.50");
|
settings->setDefault("mgv6_np_biome", "0, 1, (250, 250, 250), 9130, 3, 0.50");
|
||||||
settings->setDefault("mgv6_np_cave", "6, 6, (250, 250, 250), 34329, 3, 0.50");
|
settings->setDefault("mgv6_np_cave", "6, 6, (250, 250, 250), 34329, 3, 0.50");
|
||||||
|
settings->setDefault("mgv6_np_humidity", "0.5, 0.5, (500, 500, 500), 72384, 4, 0.66");
|
||||||
|
settings->setDefault("mgv6_np_trees", "0, 1, (125, 125, 125), 2, 4, 0.66");
|
||||||
|
settings->setDefault("mgv6_np_apple_trees", "0, 1, (100, 100, 100), 342902, 3, 0.45");
|
||||||
|
|
||||||
settings->setDefault("mgv7_np_terrain", "10, 12, (350, 350, 350), 82341, 5, 0.6");
|
settings->setDefault("mgv7_np_terrain", "10, 12, (350, 350, 350), 82341, 5, 0.6");
|
||||||
settings->setDefault("mgv7_np_bgroup", "0.5, 0.3125, (350, 350, 350), 5923, 2, 0.6");
|
settings->setDefault("mgv7_np_bgroup", "0.5, 0.3125, (350, 350, 350), 5923, 2, 0.6");
|
||||||
|
@ -39,7 +39,7 @@ FlagDesc flagdesc_mapgen[] = {
|
|||||||
{"trees", MG_TREES},
|
{"trees", MG_TREES},
|
||||||
{"caves", MG_CAVES},
|
{"caves", MG_CAVES},
|
||||||
{"dungeons", MG_DUNGEONS},
|
{"dungeons", MG_DUNGEONS},
|
||||||
{"v6_forests", MGV6_FORESTS},
|
{"v6_jungles", MGV6_JUNGLES},
|
||||||
{"v6_biome_blend", MGV6_BIOME_BLEND},
|
{"v6_biome_blend", MGV6_BIOME_BLEND},
|
||||||
{"flat", MG_FLAT},
|
{"flat", MG_FLAT},
|
||||||
{NULL, 0}
|
{NULL, 0}
|
||||||
@ -209,16 +209,19 @@ bool MapgenV6Params::readParams(Settings *settings) {
|
|||||||
np_terrain_higher = settings->getNoiseParams("mgv6_np_terrain_higher");
|
np_terrain_higher = settings->getNoiseParams("mgv6_np_terrain_higher");
|
||||||
np_steepness = settings->getNoiseParams("mgv6_np_steepness");
|
np_steepness = settings->getNoiseParams("mgv6_np_steepness");
|
||||||
np_height_select = settings->getNoiseParams("mgv6_np_height_select");
|
np_height_select = settings->getNoiseParams("mgv6_np_height_select");
|
||||||
np_trees = settings->getNoiseParams("mgv6_np_trees");
|
|
||||||
np_mud = settings->getNoiseParams("mgv6_np_mud");
|
np_mud = settings->getNoiseParams("mgv6_np_mud");
|
||||||
np_beach = settings->getNoiseParams("mgv6_np_beach");
|
np_beach = settings->getNoiseParams("mgv6_np_beach");
|
||||||
np_biome = settings->getNoiseParams("mgv6_np_biome");
|
np_biome = settings->getNoiseParams("mgv6_np_biome");
|
||||||
np_cave = settings->getNoiseParams("mgv6_np_cave");
|
np_cave = settings->getNoiseParams("mgv6_np_cave");
|
||||||
|
np_humidity = settings->getNoiseParams("mgv6_np_humidity");
|
||||||
|
np_trees = settings->getNoiseParams("mgv6_np_trees");
|
||||||
|
np_apple_trees = settings->getNoiseParams("mgv6_np_apple_trees");
|
||||||
|
|
||||||
bool success =
|
bool success =
|
||||||
np_terrain_base && np_terrain_higher && np_steepness &&
|
np_terrain_base && np_terrain_higher && np_steepness &&
|
||||||
np_height_select && np_trees && np_mud &&
|
np_height_select && np_trees && np_mud &&
|
||||||
np_beach && np_biome && np_cave;
|
np_beach && np_biome && np_cave &&
|
||||||
|
np_humidity && np_apple_trees;
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,11 +234,13 @@ void MapgenV6Params::writeParams(Settings *settings) {
|
|||||||
settings->setNoiseParams("mgv6_np_terrain_higher", np_terrain_higher);
|
settings->setNoiseParams("mgv6_np_terrain_higher", np_terrain_higher);
|
||||||
settings->setNoiseParams("mgv6_np_steepness", np_steepness);
|
settings->setNoiseParams("mgv6_np_steepness", np_steepness);
|
||||||
settings->setNoiseParams("mgv6_np_height_select", np_height_select);
|
settings->setNoiseParams("mgv6_np_height_select", np_height_select);
|
||||||
settings->setNoiseParams("mgv6_np_trees", np_trees);
|
|
||||||
settings->setNoiseParams("mgv6_np_mud", np_mud);
|
settings->setNoiseParams("mgv6_np_mud", np_mud);
|
||||||
settings->setNoiseParams("mgv6_np_beach", np_beach);
|
settings->setNoiseParams("mgv6_np_beach", np_beach);
|
||||||
settings->setNoiseParams("mgv6_np_biome", np_biome);
|
settings->setNoiseParams("mgv6_np_biome", np_biome);
|
||||||
settings->setNoiseParams("mgv6_np_cave", np_cave);
|
settings->setNoiseParams("mgv6_np_cave", np_cave);
|
||||||
|
settings->setNoiseParams("mgv6_np_humidity", np_humidity);
|
||||||
|
settings->setNoiseParams("mgv6_np_trees", np_trees);
|
||||||
|
settings->setNoiseParams("mgv6_np_apple_trees", np_apple_trees);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#define MG_TREES 0x01
|
#define MG_TREES 0x01
|
||||||
#define MG_CAVES 0x02
|
#define MG_CAVES 0x02
|
||||||
#define MG_DUNGEONS 0x04
|
#define MG_DUNGEONS 0x04
|
||||||
#define MGV6_FORESTS 0x08
|
#define MGV6_JUNGLES 0x08
|
||||||
#define MGV6_BIOME_BLEND 0x10
|
#define MGV6_BIOME_BLEND 0x10
|
||||||
#define MG_FLAT 0x20
|
#define MG_FLAT 0x20
|
||||||
|
|
||||||
|
@ -45,8 +45,6 @@ NoiseParams nparams_v6_def_steepness =
|
|||||||
{0.85, 0.5, v3f(125.0, 125.0, 125.0), -932, 5, 0.7};
|
{0.85, 0.5, v3f(125.0, 125.0, 125.0), -932, 5, 0.7};
|
||||||
NoiseParams nparams_v6_def_height_select =
|
NoiseParams nparams_v6_def_height_select =
|
||||||
{0.5, 1.0, v3f(250.0, 250.0, 250.0), 4213, 5, 0.69};
|
{0.5, 1.0, v3f(250.0, 250.0, 250.0), 4213, 5, 0.69};
|
||||||
NoiseParams nparams_v6_def_trees =
|
|
||||||
{0.0, 1.0, v3f(125.0, 125.0, 125.0), 2, 4, 0.66};
|
|
||||||
NoiseParams nparams_v6_def_mud =
|
NoiseParams nparams_v6_def_mud =
|
||||||
{AVERAGE_MUD_AMOUNT, 2.0, v3f(200.0, 200.0, 200.0), 91013, 3, 0.55};
|
{AVERAGE_MUD_AMOUNT, 2.0, v3f(200.0, 200.0, 200.0), 91013, 3, 0.55};
|
||||||
NoiseParams nparams_v6_def_beach =
|
NoiseParams nparams_v6_def_beach =
|
||||||
@ -55,6 +53,12 @@ NoiseParams nparams_v6_def_biome =
|
|||||||
{0.0, 1.0, v3f(250.0, 250.0, 250.0), 9130, 3, 0.50};
|
{0.0, 1.0, v3f(250.0, 250.0, 250.0), 9130, 3, 0.50};
|
||||||
NoiseParams nparams_v6_def_cave =
|
NoiseParams nparams_v6_def_cave =
|
||||||
{6.0, 6.0, v3f(250.0, 250.0, 250.0), 34329, 3, 0.50};
|
{6.0, 6.0, v3f(250.0, 250.0, 250.0), 34329, 3, 0.50};
|
||||||
|
NoiseParams nparams_v6_def_humidity =
|
||||||
|
{0.5, 0.5, v3f(500.0, 500.0, 500.0), 72384, 4, 0.66};
|
||||||
|
NoiseParams nparams_v6_def_trees =
|
||||||
|
{0.0, 1.0, v3f(125.0, 125.0, 125.0), 2, 4, 0.66};
|
||||||
|
NoiseParams nparams_v6_def_apple_trees =
|
||||||
|
{0.0, 1.0, v3f(100.0, 100.0, 100.0), 342902, 3, 0.45};
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -74,13 +78,15 @@ MapgenV6::MapgenV6(int mapgenid, MapgenV6Params *params) {
|
|||||||
|
|
||||||
this->ystride = csize.X; //////fix this
|
this->ystride = csize.X; //////fix this
|
||||||
|
|
||||||
np_cave = params->np_cave;
|
np_cave = params->np_cave;
|
||||||
|
np_humidity = params->np_humidity;
|
||||||
|
np_trees = params->np_trees;
|
||||||
|
np_apple_trees = params->np_apple_trees;
|
||||||
|
|
||||||
noise_terrain_base = new Noise(params->np_terrain_base, seed, csize.X, csize.Y);
|
noise_terrain_base = new Noise(params->np_terrain_base, seed, csize.X, csize.Y);
|
||||||
noise_terrain_higher = new Noise(params->np_terrain_higher, seed, csize.X, csize.Y);
|
noise_terrain_higher = new Noise(params->np_terrain_higher, seed, csize.X, csize.Y);
|
||||||
noise_steepness = new Noise(params->np_steepness, seed, csize.X, csize.Y);
|
noise_steepness = new Noise(params->np_steepness, seed, csize.X, csize.Y);
|
||||||
noise_height_select = new Noise(params->np_height_select, seed, csize.X, csize.Y);
|
noise_height_select = new Noise(params->np_height_select, seed, csize.X, csize.Y);
|
||||||
noise_trees = new Noise(params->np_trees, seed, csize.X, csize.Y);
|
|
||||||
noise_mud = new Noise(params->np_mud, seed, csize.X, csize.Y);
|
noise_mud = new Noise(params->np_mud, seed, csize.X, csize.Y);
|
||||||
noise_beach = new Noise(params->np_beach, seed, csize.X, csize.Y);
|
noise_beach = new Noise(params->np_beach, seed, csize.X, csize.Y);
|
||||||
noise_biome = new Noise(params->np_biome, seed, csize.X, csize.Y);
|
noise_biome = new Noise(params->np_biome, seed, csize.X, csize.Y);
|
||||||
@ -92,7 +98,6 @@ MapgenV6::~MapgenV6() {
|
|||||||
delete noise_terrain_higher;
|
delete noise_terrain_higher;
|
||||||
delete noise_steepness;
|
delete noise_steepness;
|
||||||
delete noise_height_select;
|
delete noise_height_select;
|
||||||
delete noise_trees;
|
|
||||||
delete noise_mud;
|
delete noise_mud;
|
||||||
delete noise_beach;
|
delete noise_beach;
|
||||||
delete noise_biome;
|
delete noise_biome;
|
||||||
@ -234,12 +239,6 @@ int MapgenV6::getGroundLevelAtPoint(v2s16 p) {
|
|||||||
|
|
||||||
//////////////////////// Noise functions
|
//////////////////////// Noise functions
|
||||||
|
|
||||||
float MapgenV6::getTreeAmount(v2s16 p) {
|
|
||||||
int index = (p.Y - node_min.Z) * ystride + (p.X - node_min.X);
|
|
||||||
return getTreeAmount(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
float MapgenV6::getMudAmount(v2s16 p) {
|
float MapgenV6::getMudAmount(v2s16 p) {
|
||||||
int index = (p.Y - node_min.Z) * ystride + (p.X - node_min.X);
|
int index = (p.Y - node_min.Z) * ystride + (p.X - node_min.X);
|
||||||
return getMudAmount(index);
|
return getMudAmount(index);
|
||||||
@ -258,13 +257,30 @@ BiomeType MapgenV6::getBiome(v2s16 p) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
float MapgenV6::getTreeAmount(int index)
|
float MapgenV6::getHumidity(v2s16 p)
|
||||||
|
{
|
||||||
|
/*double noise = noise2d_perlin(
|
||||||
|
0.5+(float)p.X/500, 0.5+(float)p.Y/500,
|
||||||
|
seed+72384, 4, 0.66);
|
||||||
|
noise = (noise + 1.0)/2.0;*/
|
||||||
|
|
||||||
|
float noise = NoisePerlin2D(np_humidity, p.X, p.Y, seed);
|
||||||
|
|
||||||
|
if (noise < 0.0)
|
||||||
|
noise = 0.0;
|
||||||
|
if (noise > 1.0)
|
||||||
|
noise = 1.0;
|
||||||
|
return noise;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float MapgenV6::getTreeAmount(v2s16 p)
|
||||||
{
|
{
|
||||||
/*double noise = noise2d_perlin(
|
/*double noise = noise2d_perlin(
|
||||||
0.5+(float)p.X/125, 0.5+(float)p.Y/125,
|
0.5+(float)p.X/125, 0.5+(float)p.Y/125,
|
||||||
seed+2, 4, 0.66);*/
|
seed+2, 4, 0.66);*/
|
||||||
|
|
||||||
float noise = noise_trees->result[index];
|
float noise = NoisePerlin2D(np_trees, p.X, p.Y, seed);
|
||||||
float zeroval = -0.39;
|
float zeroval = -0.39;
|
||||||
if (noise < zeroval)
|
if (noise < zeroval)
|
||||||
return 0;
|
return 0;
|
||||||
@ -273,6 +289,18 @@ float MapgenV6::getTreeAmount(int index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool MapgenV6::getHaveAppleTree(v2s16 p)
|
||||||
|
{
|
||||||
|
/*is_apple_tree = noise2d_perlin(
|
||||||
|
0.5+(float)p.X/100, 0.5+(float)p.Z/100,
|
||||||
|
data->seed+342902, 3, 0.45) > 0.2;*/
|
||||||
|
|
||||||
|
float noise = NoisePerlin2D(np_apple_trees, p.X, p.Y, seed);
|
||||||
|
|
||||||
|
return noise > 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
float MapgenV6::getMudAmount(int index)
|
float MapgenV6::getMudAmount(int index)
|
||||||
{
|
{
|
||||||
if (flags & MG_FLAT)
|
if (flags & MG_FLAT)
|
||||||
@ -466,12 +494,6 @@ void MapgenV6::calculateNoise() {
|
|||||||
z + 0.5 * noise_height_select->np->spread.Z);
|
z + 0.5 * noise_height_select->np->spread.Z);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & MG_TREES) {
|
|
||||||
noise_trees->perlinMap2D(
|
|
||||||
x + 0.5 * noise_trees->np->spread.X,
|
|
||||||
z + 0.5 * noise_trees->np->spread.Z);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(flags & MG_FLAT)) {
|
if (!(flags & MG_FLAT)) {
|
||||||
noise_mud->perlinMap2D(
|
noise_mud->perlinMap2D(
|
||||||
x + 0.5 * noise_mud->np->spread.X,
|
x + 0.5 * noise_mud->np->spread.X,
|
||||||
@ -762,6 +784,8 @@ void MapgenV6::addDirtGravelBlobs() {
|
|||||||
|
|
||||||
|
|
||||||
void MapgenV6::placeTrees() {
|
void MapgenV6::placeTrees() {
|
||||||
|
//TimeTaker t("placeTrees");
|
||||||
|
|
||||||
// Divide area into parts
|
// Divide area into parts
|
||||||
s16 div = 8;
|
s16 div = 8;
|
||||||
s16 sidelen = central_area_size.X / div;
|
s16 sidelen = central_area_size.X / div;
|
||||||
@ -784,8 +808,13 @@ void MapgenV6::placeTrees() {
|
|||||||
node_min.X + sidelen + sidelen * x0 - 1,
|
node_min.X + sidelen + sidelen * x0 - 1,
|
||||||
node_min.Z + sidelen + sidelen * z0 - 1
|
node_min.Z + sidelen + sidelen * z0 - 1
|
||||||
);
|
);
|
||||||
// Amount of trees
|
|
||||||
u32 tree_count = area * getTreeAmount(p2d_center); /////////////optimize this!
|
// Amount of trees, jungle area
|
||||||
|
u32 tree_count = area * getTreeAmount(p2d_center);
|
||||||
|
bool is_jungle = (flags & MGV6_JUNGLES) && (getHumidity(p2d_center) > 0.75);
|
||||||
|
if (is_jungle)
|
||||||
|
tree_count *= 4;
|
||||||
|
|
||||||
// Put trees in random places on part of division
|
// Put trees in random places on part of division
|
||||||
for (u32 i = 0; i < tree_count; i++) {
|
for (u32 i = 0; i < tree_count; i++) {
|
||||||
s16 x = myrand_range(p2d_min.X, p2d_max.X);
|
s16 x = myrand_range(p2d_min.X, p2d_max.X);
|
||||||
@ -806,10 +835,18 @@ void MapgenV6::placeTrees() {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
p.Y++;
|
p.Y++;
|
||||||
|
|
||||||
// Make a tree
|
// Make a tree
|
||||||
treegen::make_tree(*vm, p, false, ndef, myrand());
|
if (is_jungle) {
|
||||||
|
treegen::make_jungletree(*vm, p, ndef, myrand());
|
||||||
|
} else {
|
||||||
|
bool is_apple_tree = (myrand_range(0, 3) == 0) &&
|
||||||
|
getHaveAppleTree(v2s16(x, z));
|
||||||
|
treegen::make_tree(*vm, p, is_apple_tree, ndef, myrand());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//printf("placeTrees: %dms\n", t.stop());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,11 +35,13 @@ extern NoiseParams nparams_v6_def_terrain_base;
|
|||||||
extern NoiseParams nparams_v6_def_terrain_higher;
|
extern NoiseParams nparams_v6_def_terrain_higher;
|
||||||
extern NoiseParams nparams_v6_def_steepness;
|
extern NoiseParams nparams_v6_def_steepness;
|
||||||
extern NoiseParams nparams_v6_def_height_select;
|
extern NoiseParams nparams_v6_def_height_select;
|
||||||
extern NoiseParams nparams_v6_def_trees;
|
|
||||||
extern NoiseParams nparams_v6_def_mud;
|
extern NoiseParams nparams_v6_def_mud;
|
||||||
extern NoiseParams nparams_v6_def_beach;
|
extern NoiseParams nparams_v6_def_beach;
|
||||||
extern NoiseParams nparams_v6_def_biome;
|
extern NoiseParams nparams_v6_def_biome;
|
||||||
extern NoiseParams nparams_v6_def_cave;
|
extern NoiseParams nparams_v6_def_cave;
|
||||||
|
extern NoiseParams nparams_v6_def_humidity;
|
||||||
|
extern NoiseParams nparams_v6_def_trees;
|
||||||
|
extern NoiseParams nparams_v6_def_apple_trees;
|
||||||
|
|
||||||
struct MapgenV6Params : public MapgenParams {
|
struct MapgenV6Params : public MapgenParams {
|
||||||
float freq_desert;
|
float freq_desert;
|
||||||
@ -48,11 +50,13 @@ struct MapgenV6Params : public MapgenParams {
|
|||||||
NoiseParams *np_terrain_higher;
|
NoiseParams *np_terrain_higher;
|
||||||
NoiseParams *np_steepness;
|
NoiseParams *np_steepness;
|
||||||
NoiseParams *np_height_select;
|
NoiseParams *np_height_select;
|
||||||
NoiseParams *np_trees;
|
|
||||||
NoiseParams *np_mud;
|
NoiseParams *np_mud;
|
||||||
NoiseParams *np_beach;
|
NoiseParams *np_beach;
|
||||||
NoiseParams *np_biome;
|
NoiseParams *np_biome;
|
||||||
NoiseParams *np_cave;
|
NoiseParams *np_cave;
|
||||||
|
NoiseParams *np_humidity;
|
||||||
|
NoiseParams *np_trees;
|
||||||
|
NoiseParams *np_apple_trees;
|
||||||
|
|
||||||
MapgenV6Params() {
|
MapgenV6Params() {
|
||||||
freq_desert = 0.45;
|
freq_desert = 0.45;
|
||||||
@ -61,11 +65,14 @@ struct MapgenV6Params : public MapgenParams {
|
|||||||
np_terrain_higher = &nparams_v6_def_terrain_higher;
|
np_terrain_higher = &nparams_v6_def_terrain_higher;
|
||||||
np_steepness = &nparams_v6_def_steepness;
|
np_steepness = &nparams_v6_def_steepness;
|
||||||
np_height_select = &nparams_v6_def_height_select;
|
np_height_select = &nparams_v6_def_height_select;
|
||||||
np_trees = &nparams_v6_def_trees;
|
|
||||||
np_mud = &nparams_v6_def_mud;
|
np_mud = &nparams_v6_def_mud;
|
||||||
np_beach = &nparams_v6_def_beach;
|
np_beach = &nparams_v6_def_beach;
|
||||||
np_biome = &nparams_v6_def_biome;
|
np_biome = &nparams_v6_def_biome;
|
||||||
np_cave = &nparams_v6_def_cave;
|
np_cave = &nparams_v6_def_cave;
|
||||||
|
np_humidity = &nparams_v6_def_humidity;
|
||||||
|
np_trees = &nparams_v6_def_trees;
|
||||||
|
np_apple_trees = &nparams_v6_def_apple_trees;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool readParams(Settings *settings);
|
bool readParams(Settings *settings);
|
||||||
@ -90,11 +97,13 @@ public:
|
|||||||
Noise *noise_terrain_higher;
|
Noise *noise_terrain_higher;
|
||||||
Noise *noise_steepness;
|
Noise *noise_steepness;
|
||||||
Noise *noise_height_select;
|
Noise *noise_height_select;
|
||||||
Noise *noise_trees;
|
|
||||||
Noise *noise_mud;
|
Noise *noise_mud;
|
||||||
Noise *noise_beach;
|
Noise *noise_beach;
|
||||||
Noise *noise_biome;
|
Noise *noise_biome;
|
||||||
NoiseParams *np_cave;
|
NoiseParams *np_cave;
|
||||||
|
NoiseParams *np_humidity;
|
||||||
|
NoiseParams *np_trees;
|
||||||
|
NoiseParams *np_apple_trees;
|
||||||
float freq_desert;
|
float freq_desert;
|
||||||
float freq_beach;
|
float freq_beach;
|
||||||
|
|
||||||
@ -126,8 +135,9 @@ public:
|
|||||||
bool block_is_underground(u64 seed, v3s16 blockpos);
|
bool block_is_underground(u64 seed, v3s16 blockpos);
|
||||||
s16 find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision);
|
s16 find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision);
|
||||||
|
|
||||||
|
float getHumidity(v2s16 p);
|
||||||
float getTreeAmount(v2s16 p);
|
float getTreeAmount(v2s16 p);
|
||||||
float getTreeAmount(int index);
|
bool getHaveAppleTree(v2s16 p);
|
||||||
float getMudAmount(v2s16 p);
|
float getMudAmount(v2s16 p);
|
||||||
float getMudAmount(int index);
|
float getMudAmount(int index);
|
||||||
bool getHaveBeach(v2s16 p);
|
bool getHaveBeach(v2s16 p);
|
||||||
|
@ -510,8 +510,15 @@ v3f transposeMatrix(irr::core::matrix4 M, v3f v)
|
|||||||
void make_jungletree(VoxelManipulator &vmanip, v3s16 p0,
|
void make_jungletree(VoxelManipulator &vmanip, v3s16 p0,
|
||||||
INodeDefManager *ndef, int seed)
|
INodeDefManager *ndef, int seed)
|
||||||
{
|
{
|
||||||
MapNode treenode(ndef->getId("mapgen_jungletree"));
|
content_t c_tree = ndef->getId("mapgen_jungletree");
|
||||||
MapNode leavesnode(ndef->getId("mapgen_leaves"));
|
content_t c_leaves = ndef->getId("mapgen_jungleleaves");
|
||||||
|
if (c_tree == CONTENT_IGNORE)
|
||||||
|
c_tree = ndef->getId("mapgen_tree");
|
||||||
|
if (c_leaves == CONTENT_IGNORE)
|
||||||
|
c_leaves = ndef->getId("mapgen_leaves");
|
||||||
|
|
||||||
|
MapNode treenode(c_tree);
|
||||||
|
MapNode leavesnode(c_leaves);
|
||||||
|
|
||||||
PseudoRandom pr(seed);
|
PseudoRandom pr(seed);
|
||||||
for(s16 x=-1; x<=1; x++)
|
for(s16 x=-1; x<=1; x++)
|
||||||
|
Loading…
Reference in New Issue
Block a user