Re-add jungles, apple trees

This commit is contained in:
kwolekr 2013-03-16 17:06:11 -04:00
parent 1f1ad9fd23
commit 6823ce99a7
8 changed files with 118 additions and 44 deletions

@ -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)
@ -465,12 +493,6 @@ void MapgenV6::calculateNoise() {
x + 0.5 * noise_height_select->np->spread.X, x + 0.5 * noise_height_select->np->spread.X,
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(
@ -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,12 +50,14 @@ 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;
freq_beach = 0.15; freq_beach = 0.15;
@ -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++)