mirror of
https://github.com/moparisthebest/minetest
synced 2024-11-16 22:35:07 -05:00
Tune mapgen
This commit is contained in:
parent
202658678d
commit
0a59605e05
@ -70,13 +70,14 @@ static s16 find_ground_level_clever(VoxelManipulator &vmanip, v2s16 p2d,
|
|||||||
s16 y_nodes_min = vmanip.m_area.MinEdge.Y;
|
s16 y_nodes_min = vmanip.m_area.MinEdge.Y;
|
||||||
u32 i = vmanip.m_area.index(v3s16(p2d.X, y_nodes_max, p2d.Y));
|
u32 i = vmanip.m_area.index(v3s16(p2d.X, y_nodes_max, p2d.Y));
|
||||||
s16 y;
|
s16 y;
|
||||||
|
content_t c_tree = LEGN(ndef, "CONTENT_TREE");
|
||||||
|
content_t c_leaves = LEGN(ndef, "CONTENT_LEAVES");
|
||||||
for(y=y_nodes_max; y>=y_nodes_min; y--)
|
for(y=y_nodes_max; y>=y_nodes_min; y--)
|
||||||
{
|
{
|
||||||
MapNode &n = vmanip.m_data[i];
|
MapNode &n = vmanip.m_data[i];
|
||||||
if(ndef->get(n).walkable
|
if(ndef->get(n).walkable
|
||||||
// TODO: Cache LEGN values
|
&& n.getContent() != c_tree
|
||||||
&& n.getContent() != LEGN(ndef, "CONTENT_TREE")
|
&& n.getContent() != c_leaves)
|
||||||
&& n.getContent() != LEGN(ndef, "CONTENT_LEAVES"))
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
vmanip.m_area.add_y(em, i, -1);
|
vmanip.m_area.add_y(em, i, -1);
|
||||||
@ -1200,9 +1201,9 @@ double base_rock_level_2d(u64 seed, v2s16 p)
|
|||||||
base = base2;*/
|
base = base2;*/
|
||||||
#if 1
|
#if 1
|
||||||
// Higher ground level
|
// Higher ground level
|
||||||
double higher = (double)WATER_LEVEL + 20. + 10. * noise2d_perlin(
|
double higher = (double)WATER_LEVEL + 20. + 16. * noise2d_perlin(
|
||||||
0.5+(float)p.X/250., 0.5+(float)p.Y/250.,
|
0.5+(float)p.X/500., 0.5+(float)p.Y/500.,
|
||||||
seed+85039, 4, 0.6);
|
seed+85039, 5, 0.6);
|
||||||
//higher = 30; // For debugging
|
//higher = 30; // For debugging
|
||||||
|
|
||||||
// Limit higher to at least base
|
// Limit higher to at least base
|
||||||
@ -1214,11 +1215,19 @@ double base_rock_level_2d(u64 seed, v2s16 p)
|
|||||||
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-932, 5, 0.7);
|
seed-932, 5, 0.7);
|
||||||
b = rangelim(b, 0.0, 1000.0);
|
b = rangelim(b, 0.0, 1000.0);
|
||||||
b = pow(b, 8);
|
b = pow(b, 7);
|
||||||
b *= 5;
|
b *= 5;
|
||||||
b = rangelim(b, 3.0, 1000.0);
|
b = rangelim(b, 0.5, 1000.0);
|
||||||
|
// Values 1.5...100 give quite horrible looking slopes
|
||||||
|
if(b > 1.5 && b < 100.0){
|
||||||
|
if(b < 10.0)
|
||||||
|
b = 1.5;
|
||||||
|
else
|
||||||
|
b = 100.0;
|
||||||
|
}
|
||||||
//dstream<<"b="<<b<<std::endl;
|
//dstream<<"b="<<b<<std::endl;
|
||||||
//double b = 20;
|
//double b = 20;
|
||||||
|
//b = 0.25;
|
||||||
|
|
||||||
// Offset to more low
|
// Offset to more low
|
||||||
double a_off = -0.20;
|
double a_off = -0.20;
|
||||||
@ -1542,6 +1551,7 @@ void make_block(BlockMakeData *data)
|
|||||||
);
|
);
|
||||||
|
|
||||||
MapNode airnode(CONTENT_AIR);
|
MapNode airnode(CONTENT_AIR);
|
||||||
|
MapNode waternode(c_water_source);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Generate some tunnel starting from orp
|
Generate some tunnel starting from orp
|
||||||
@ -1567,7 +1577,7 @@ void make_block(BlockMakeData *data)
|
|||||||
v3s16 maxlen;
|
v3s16 maxlen;
|
||||||
if(bruise_surface)
|
if(bruise_surface)
|
||||||
{
|
{
|
||||||
maxlen = v3s16(rs*7,rs*7,rs*7);
|
maxlen = v3s16(rs*7,rs*2,rs*7);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1593,6 +1603,14 @@ void make_block(BlockMakeData *data)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(bruise_surface){
|
||||||
|
v3f p = orp + vec;
|
||||||
|
s16 h = find_ground_level_clever(vmanip,
|
||||||
|
v2s16(p.X, p.Z), ndef);
|
||||||
|
route_y_min = h - rs/3;
|
||||||
|
route_y_max = h + rs;
|
||||||
|
}
|
||||||
|
|
||||||
vec += main_direction;
|
vec += main_direction;
|
||||||
|
|
||||||
v3f rp = orp + vec;
|
v3f rp = orp + vec;
|
||||||
@ -1613,14 +1631,16 @@ void make_block(BlockMakeData *data)
|
|||||||
for(float f=0; f<1.0; f+=1.0/vec.getLength())
|
for(float f=0; f<1.0; f+=1.0/vec.getLength())
|
||||||
{
|
{
|
||||||
v3f fp = orp + vec * f;
|
v3f fp = orp + vec * f;
|
||||||
|
fp.X += 0.1*myrand_range(-10,10);
|
||||||
|
fp.Z += 0.1*myrand_range(-10,10);
|
||||||
v3s16 cp(fp.X, fp.Y, fp.Z);
|
v3s16 cp(fp.X, fp.Y, fp.Z);
|
||||||
|
|
||||||
s16 d0 = -rs/2;
|
s16 d0 = -rs/2;
|
||||||
s16 d1 = d0 + rs - 1;
|
s16 d1 = d0 + rs - 1;
|
||||||
for(s16 z0=d0; z0<=d1; z0++)
|
for(s16 z0=d0; z0<=d1; z0++)
|
||||||
{
|
{
|
||||||
//s16 si = rs - MYMAX(0, abs(z0)-rs/4);
|
s16 si = rs - MYMAX(0, abs(z0)-rs/4);
|
||||||
s16 si = rs - MYMAX(0, abs(z0)-rs/7);
|
//s16 si = rs - MYMAX(0, abs(z0)-rs/7);
|
||||||
for(s16 x0=-si; x0<=si-1; x0++)
|
for(s16 x0=-si; x0<=si-1; x0++)
|
||||||
{
|
{
|
||||||
s16 maxabsxz = MYMAX(abs(x0), abs(z0));
|
s16 maxabsxz = MYMAX(abs(x0), abs(z0));
|
||||||
@ -1657,7 +1677,14 @@ void make_block(BlockMakeData *data)
|
|||||||
// Just set it to air, it will be changed to
|
// Just set it to air, it will be changed to
|
||||||
// water afterwards
|
// water afterwards
|
||||||
u32 i = vmanip.m_area.index(p);
|
u32 i = vmanip.m_area.index(p);
|
||||||
vmanip.m_data[i] = airnode;
|
if(bruise_surface){
|
||||||
|
if(p.Y <= WATER_LEVEL)
|
||||||
|
vmanip.m_data[i] = waternode;
|
||||||
|
else
|
||||||
|
vmanip.m_data[i] = airnode;
|
||||||
|
} else {
|
||||||
|
vmanip.m_data[i] = airnode;
|
||||||
|
}
|
||||||
|
|
||||||
if(bruise_surface == false)
|
if(bruise_surface == false)
|
||||||
{
|
{
|
||||||
@ -1692,9 +1719,16 @@ void make_block(BlockMakeData *data)
|
|||||||
// Node position in 2d
|
// Node position in 2d
|
||||||
v2s16 p2d = v2s16(x,z);
|
v2s16 p2d = v2s16(x,z);
|
||||||
|
|
||||||
|
MapNode addnode(c_dirt);
|
||||||
|
|
||||||
// Randomize mud amount
|
// Randomize mud amount
|
||||||
s16 mud_add_amount = get_mud_add_amount(data->seed, p2d) / 2.0;
|
s16 mud_add_amount = get_mud_add_amount(data->seed, p2d) / 2.0;
|
||||||
|
|
||||||
|
if(mud_add_amount <= 0){
|
||||||
|
mud_add_amount = 1 - mud_add_amount;
|
||||||
|
addnode = MapNode(c_gravel);
|
||||||
|
}
|
||||||
|
|
||||||
// Find ground level
|
// Find ground level
|
||||||
s16 surface_y = find_stone_level(vmanip, p2d, ndef);
|
s16 surface_y = find_stone_level(vmanip, p2d, ndef);
|
||||||
// Handle area not found
|
// Handle area not found
|
||||||
@ -1727,7 +1761,7 @@ void make_block(BlockMakeData *data)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
MapNode &n = vmanip.m_data[i];
|
MapNode &n = vmanip.m_data[i];
|
||||||
n = MapNode(c_dirt);
|
n = addnode;
|
||||||
mudcount++;
|
mudcount++;
|
||||||
|
|
||||||
vmanip.m_area.add_y(em, i, 1);
|
vmanip.m_area.add_y(em, i, 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user