mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
extended content-type range
This commit is contained in:
parent
f706644a50
commit
90d793f8f3
27 changed files with 428 additions and 318 deletions
106
src/mapgen.cpp
106
src/mapgen.cpp
|
@ -67,8 +67,8 @@ static s16 find_ground_level_clever(VoxelManipulator &vmanip, v2s16 p2d)
|
|||
{
|
||||
MapNode &n = vmanip.m_data[i];
|
||||
if(content_walkable(n.d)
|
||||
&& n.d != CONTENT_TREE
|
||||
&& n.d != CONTENT_LEAVES)
|
||||
&& n.getContent() != CONTENT_TREE
|
||||
&& n.getContent() != CONTENT_LEAVES)
|
||||
break;
|
||||
|
||||
vmanip.m_area.add_y(em, i, -1);
|
||||
|
@ -143,8 +143,8 @@ static void make_tree(VoxelManipulator &vmanip, v3s16 p0)
|
|||
if(vmanip.m_area.contains(p) == false)
|
||||
continue;
|
||||
u32 vi = vmanip.m_area.index(p);
|
||||
if(vmanip.m_data[vi].d != CONTENT_AIR
|
||||
&& vmanip.m_data[vi].d != CONTENT_IGNORE)
|
||||
if(vmanip.m_data[vi].getContent() != CONTENT_AIR
|
||||
&& vmanip.m_data[vi].getContent() != CONTENT_IGNORE)
|
||||
continue;
|
||||
u32 i = leaves_a.index(x,y,z);
|
||||
if(leaves_d[i] == 1)
|
||||
|
@ -223,8 +223,8 @@ static void make_randomstone(VoxelManipulator &vmanip, v3s16 p0)
|
|||
if(vmanip.m_area.contains(p) == false)
|
||||
continue;
|
||||
u32 vi = vmanip.m_area.index(p);
|
||||
if(vmanip.m_data[vi].d != CONTENT_AIR
|
||||
&& vmanip.m_data[vi].d != CONTENT_IGNORE)
|
||||
if(vmanip.m_data[vi].getContent() != CONTENT_AIR
|
||||
&& vmanip.m_data[vi].getContent() != CONTENT_IGNORE)
|
||||
continue;
|
||||
u32 i = stone_a.index(x,y,z);
|
||||
if(stone_d[i] == 1)
|
||||
|
@ -307,8 +307,8 @@ static void make_largestone(VoxelManipulator &vmanip, v3s16 p0)
|
|||
if(vmanip.m_area.contains(p) == false)
|
||||
continue;
|
||||
u32 vi = vmanip.m_area.index(p);
|
||||
/*if(vmanip.m_data[vi].d != CONTENT_AIR
|
||||
&& vmanip.m_data[vi].d != CONTENT_IGNORE)
|
||||
/*if(vmanip.m_data[vi].getContent() != CONTENT_AIR
|
||||
&& vmanip.m_data[vi].getContent() != CONTENT_IGNORE)
|
||||
continue;*/
|
||||
u32 i = stone_a.index(x,y,z);
|
||||
if(stone_d[i] == 1)
|
||||
|
@ -516,9 +516,9 @@ static void make_corridor(VoxelManipulator &vmanip, v3s16 doorplace,
|
|||
p.Y += make_stairs;
|
||||
|
||||
/*// If already empty
|
||||
if(vmanip.getNodeNoExNoEmerge(p).d
|
||||
if(vmanip.getNodeNoExNoEmerge(p).getContent()
|
||||
== CONTENT_AIR
|
||||
&& vmanip.getNodeNoExNoEmerge(p+v3s16(0,1,0)).d
|
||||
&& vmanip.getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent()
|
||||
== CONTENT_AIR)
|
||||
{
|
||||
}*/
|
||||
|
@ -614,9 +614,9 @@ public:
|
|||
randomizeDir();
|
||||
continue;
|
||||
}
|
||||
if(vmanip.getNodeNoExNoEmerge(p).d
|
||||
if(vmanip.getNodeNoExNoEmerge(p).getContent()
|
||||
== CONTENT_COBBLE
|
||||
&& vmanip.getNodeNoExNoEmerge(p1).d
|
||||
&& vmanip.getNodeNoExNoEmerge(p1).getContent()
|
||||
== CONTENT_COBBLE)
|
||||
{
|
||||
// Found wall, this is a good place!
|
||||
|
@ -630,25 +630,25 @@ public:
|
|||
Determine where to move next
|
||||
*/
|
||||
// Jump one up if the actual space is there
|
||||
if(vmanip.getNodeNoExNoEmerge(p+v3s16(0,0,0)).d
|
||||
if(vmanip.getNodeNoExNoEmerge(p+v3s16(0,0,0)).getContent()
|
||||
== CONTENT_COBBLE
|
||||
&& vmanip.getNodeNoExNoEmerge(p+v3s16(0,1,0)).d
|
||||
&& vmanip.getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent()
|
||||
== CONTENT_AIR
|
||||
&& vmanip.getNodeNoExNoEmerge(p+v3s16(0,2,0)).d
|
||||
&& vmanip.getNodeNoExNoEmerge(p+v3s16(0,2,0)).getContent()
|
||||
== CONTENT_AIR)
|
||||
p += v3s16(0,1,0);
|
||||
// Jump one down if the actual space is there
|
||||
if(vmanip.getNodeNoExNoEmerge(p+v3s16(0,1,0)).d
|
||||
if(vmanip.getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent()
|
||||
== CONTENT_COBBLE
|
||||
&& vmanip.getNodeNoExNoEmerge(p+v3s16(0,0,0)).d
|
||||
&& vmanip.getNodeNoExNoEmerge(p+v3s16(0,0,0)).getContent()
|
||||
== CONTENT_AIR
|
||||
&& vmanip.getNodeNoExNoEmerge(p+v3s16(0,-1,0)).d
|
||||
&& vmanip.getNodeNoExNoEmerge(p+v3s16(0,-1,0)).getContent()
|
||||
== CONTENT_AIR)
|
||||
p += v3s16(0,-1,0);
|
||||
// Check if walking is now possible
|
||||
if(vmanip.getNodeNoExNoEmerge(p).d
|
||||
if(vmanip.getNodeNoExNoEmerge(p).getContent()
|
||||
!= CONTENT_AIR
|
||||
|| vmanip.getNodeNoExNoEmerge(p+v3s16(0,1,0)).d
|
||||
|| vmanip.getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent()
|
||||
!= CONTENT_AIR)
|
||||
{
|
||||
// Cannot continue walking here
|
||||
|
@ -770,7 +770,7 @@ static void make_dungeon1(VoxelManipulator &vmanip, PseudoRandom &random)
|
|||
fits = false;
|
||||
break;
|
||||
}
|
||||
if(vmanip.m_data[vi].d == CONTENT_IGNORE)
|
||||
if(vmanip.m_data[vi].getContent() == CONTENT_IGNORE)
|
||||
{
|
||||
fits = false;
|
||||
break;
|
||||
|
@ -1245,11 +1245,11 @@ void add_random_objects(MapBlock *block)
|
|||
{
|
||||
v3s16 p(x0,y0,z0);
|
||||
MapNode n = block->getNodeNoEx(p);
|
||||
if(n.d == CONTENT_IGNORE)
|
||||
if(n.getContent() == CONTENT_IGNORE)
|
||||
continue;
|
||||
if(content_features(n.d).liquid_type != LIQUID_NONE)
|
||||
if(content_features(n).liquid_type != LIQUID_NONE)
|
||||
continue;
|
||||
if(content_features(n.d).walkable)
|
||||
if(content_features(n).walkable)
|
||||
{
|
||||
last_node_walkable = true;
|
||||
continue;
|
||||
|
@ -1257,7 +1257,7 @@ void add_random_objects(MapBlock *block)
|
|||
if(last_node_walkable)
|
||||
{
|
||||
// If block contains light information
|
||||
if(content_features(n.d).param_type == CPT_LIGHT)
|
||||
if(content_features(n).param_type == CPT_LIGHT)
|
||||
{
|
||||
if(n.getLight(LIGHTBANK_DAY) <= 3)
|
||||
{
|
||||
|
@ -1363,7 +1363,7 @@ void make_block(BlockMakeData *data)
|
|||
for(s16 y=node_min.Y; y<=node_max.Y; y++)
|
||||
{
|
||||
// Only modify places that have no content
|
||||
if(vmanip.m_data[i].d == CONTENT_IGNORE)
|
||||
if(vmanip.m_data[i].getContent() == CONTENT_IGNORE)
|
||||
{
|
||||
if(y <= WATER_LEVEL)
|
||||
vmanip.m_data[i] = MapNode(CONTENT_WATERSOURCE);
|
||||
|
@ -1468,7 +1468,7 @@ void make_block(BlockMakeData *data)
|
|||
for(s16 y=node_min.Y; y<=node_max.Y; y++)
|
||||
{
|
||||
// Only modify places that have no content
|
||||
if(vmanip.m_data[i].d == CONTENT_IGNORE)
|
||||
if(vmanip.m_data[i].getContent() == CONTENT_IGNORE)
|
||||
{
|
||||
// First priority: make air and water.
|
||||
// This avoids caves inside water.
|
||||
|
@ -1513,7 +1513,7 @@ void make_block(BlockMakeData *data)
|
|||
{
|
||||
v3s16 p = v3s16(x,y,z) + g_27dirs[i];
|
||||
u32 vi = vmanip.m_area.index(p);
|
||||
if(vmanip.m_data[vi].d == CONTENT_STONE)
|
||||
if(vmanip.m_data[vi].getContent() == CONTENT_STONE)
|
||||
if(mineralrandom.next()%8 == 0)
|
||||
vmanip.m_data[vi] = MapNode(CONTENT_MESE);
|
||||
}
|
||||
|
@ -1554,13 +1554,13 @@ void make_block(BlockMakeData *data)
|
|||
{
|
||||
}*/
|
||||
|
||||
if(new_content.d != CONTENT_IGNORE)
|
||||
if(new_content.getContent() != CONTENT_IGNORE)
|
||||
{
|
||||
for(u16 i=0; i<27; i++)
|
||||
{
|
||||
v3s16 p = v3s16(x,y,z) + g_27dirs[i];
|
||||
u32 vi = vmanip.m_area.index(p);
|
||||
if(vmanip.m_data[vi].d == base_content)
|
||||
if(vmanip.m_data[vi].getContent() == base_content)
|
||||
{
|
||||
if(mineralrandom.next()%sparseness == 0)
|
||||
vmanip.m_data[vi] = new_content;
|
||||
|
@ -1591,7 +1591,7 @@ void make_block(BlockMakeData *data)
|
|||
{
|
||||
v3s16 p = v3s16(x,y,z) + g_27dirs[i];
|
||||
u32 vi = vmanip.m_area.index(p);
|
||||
if(vmanip.m_data[vi].d == CONTENT_STONE)
|
||||
if(vmanip.m_data[vi].getContent() == CONTENT_STONE)
|
||||
if(mineralrandom.next()%8 == 0)
|
||||
vmanip.m_data[vi] = MapNode(CONTENT_STONE, MINERAL_COAL);
|
||||
}
|
||||
|
@ -1617,7 +1617,7 @@ void make_block(BlockMakeData *data)
|
|||
{
|
||||
v3s16 p = v3s16(x,y,z) + g_27dirs[i];
|
||||
u32 vi = vmanip.m_area.index(p);
|
||||
if(vmanip.m_data[vi].d == CONTENT_STONE)
|
||||
if(vmanip.m_data[vi].getContent() == CONTENT_STONE)
|
||||
if(mineralrandom.next()%8 == 0)
|
||||
vmanip.m_data[vi] = MapNode(CONTENT_STONE, MINERAL_IRON);
|
||||
}
|
||||
|
@ -1640,7 +1640,7 @@ void make_block(BlockMakeData *data)
|
|||
u32 i = vmanip.m_area.index(v3s16(p2d.X, node_max.Y, p2d.Y));
|
||||
for(s16 y=node_max.Y; y>=node_min.Y; y--)
|
||||
{
|
||||
if(vmanip.m_data[i].d == CONTENT_STONE)
|
||||
if(vmanip.m_data[i].getContent() == CONTENT_STONE)
|
||||
{
|
||||
if(noisebuf_ground_crumbleness.get(x,y,z) > 1.3)
|
||||
{
|
||||
|
@ -1692,9 +1692,9 @@ void make_block(BlockMakeData *data)
|
|||
u32 i = vmanip.m_area.index(v3s16(p2d.X, full_node_max.Y, p2d.Y));
|
||||
for(s16 y=full_node_max.Y; y>=full_node_min.Y; y--)
|
||||
{
|
||||
if(vmanip.m_data[i].d == CONTENT_AIR)
|
||||
if(vmanip.m_data[i].getContent() == CONTENT_AIR)
|
||||
vmanip.m_flags[i] |= VMANIP_FLAG_DUNGEON_PRESERVE;
|
||||
else if(vmanip.m_data[i].d == CONTENT_WATERSOURCE)
|
||||
else if(vmanip.m_data[i].getContent() == CONTENT_WATERSOURCE)
|
||||
vmanip.m_flags[i] |= VMANIP_FLAG_DUNGEON_PRESERVE;
|
||||
data->vmanip->m_area.add_y(em, i, -1);
|
||||
}
|
||||
|
@ -1725,17 +1725,17 @@ void make_block(BlockMakeData *data)
|
|||
double d = noise3d_perlin((float)x/2.5,
|
||||
(float)y/2.5,(float)z/2.5,
|
||||
blockseed, 2, 1.4);
|
||||
if(vmanip.m_data[i].d == CONTENT_COBBLE)
|
||||
if(vmanip.m_data[i].getContent() == CONTENT_COBBLE)
|
||||
{
|
||||
if(d < wetness/3.0)
|
||||
{
|
||||
vmanip.m_data[i].d = CONTENT_MOSSYCOBBLE;
|
||||
vmanip.m_data[i].setContent(CONTENT_MOSSYCOBBLE);
|
||||
}
|
||||
}
|
||||
/*else if(vmanip.m_flags[i] & VMANIP_FLAG_DUNGEON_INSIDE)
|
||||
{
|
||||
if(wetness > 1.2)
|
||||
vmanip.m_data[i].d = CONTENT_MUD;
|
||||
vmanip.m_data[i].setContent(CONTENT_MUD);
|
||||
}*/
|
||||
data->vmanip->m_area.add_y(em, i, -1);
|
||||
}
|
||||
|
@ -1761,7 +1761,7 @@ void make_block(BlockMakeData *data)
|
|||
{
|
||||
if(water_found == false)
|
||||
{
|
||||
if(vmanip.m_data[i].d == CONTENT_WATERSOURCE)
|
||||
if(vmanip.m_data[i].getContent() == CONTENT_WATERSOURCE)
|
||||
{
|
||||
v3s16 p = v3s16(p2d.X, y, p2d.Y);
|
||||
data->transforming_liquid.push_back(p);
|
||||
|
@ -1773,7 +1773,7 @@ void make_block(BlockMakeData *data)
|
|||
// This can be done because water_found can only
|
||||
// turn to true and end up here after going through
|
||||
// a single block.
|
||||
if(vmanip.m_data[i+1].d != CONTENT_WATERSOURCE)
|
||||
if(vmanip.m_data[i+1].getContent() != CONTENT_WATERSOURCE)
|
||||
{
|
||||
v3s16 p = v3s16(p2d.X, y+1, p2d.Y);
|
||||
data->transforming_liquid.push_back(p);
|
||||
|
@ -1814,16 +1814,16 @@ void make_block(BlockMakeData *data)
|
|||
u32 i = vmanip.m_area.index(v3s16(p2d.X, start_y, p2d.Y));
|
||||
for(s16 y=start_y; y>=node_min.Y-3; y--)
|
||||
{
|
||||
if(vmanip.m_data[i].d == CONTENT_WATERSOURCE)
|
||||
if(vmanip.m_data[i].getContent() == CONTENT_WATERSOURCE)
|
||||
water_detected = true;
|
||||
if(vmanip.m_data[i].d == CONTENT_AIR)
|
||||
if(vmanip.m_data[i].getContent() == CONTENT_AIR)
|
||||
air_detected = true;
|
||||
|
||||
if((vmanip.m_data[i].d == CONTENT_STONE
|
||||
|| vmanip.m_data[i].d == CONTENT_GRASS
|
||||
|| vmanip.m_data[i].d == CONTENT_MUD
|
||||
|| vmanip.m_data[i].d == CONTENT_SAND
|
||||
|| vmanip.m_data[i].d == CONTENT_GRAVEL
|
||||
if((vmanip.m_data[i].getContent() == CONTENT_STONE
|
||||
|| vmanip.m_data[i].getContent() == CONTENT_GRASS
|
||||
|| vmanip.m_data[i].getContent() == CONTENT_MUD
|
||||
|| vmanip.m_data[i].getContent() == CONTENT_SAND
|
||||
|| vmanip.m_data[i].getContent() == CONTENT_GRAVEL
|
||||
) && (air_detected || water_detected))
|
||||
{
|
||||
if(current_depth == 0 && y <= WATER_LEVEL+2
|
||||
|
@ -1846,8 +1846,8 @@ void make_block(BlockMakeData *data)
|
|||
}
|
||||
else
|
||||
{
|
||||
if(vmanip.m_data[i].d == CONTENT_MUD
|
||||
|| vmanip.m_data[i].d == CONTENT_GRASS)
|
||||
if(vmanip.m_data[i].getContent() == CONTENT_MUD
|
||||
|| vmanip.m_data[i].getContent() == CONTENT_GRASS)
|
||||
vmanip.m_data[i] = MapNode(CONTENT_STONE);
|
||||
}
|
||||
|
||||
|
@ -1894,7 +1894,7 @@ void make_block(BlockMakeData *data)
|
|||
{
|
||||
u32 i = data->vmanip->m_area.index(p);
|
||||
MapNode *n = &data->vmanip->m_data[i];
|
||||
if(n->d != CONTENT_AIR && n->d != CONTENT_IGNORE)
|
||||
if(n->getContent() != CONTENT_AIR && n->getContent() != CONTENT_IGNORE)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
|
@ -1909,7 +1909,7 @@ void make_block(BlockMakeData *data)
|
|||
{
|
||||
u32 i = data->vmanip->m_area.index(p);
|
||||
MapNode *n = &data->vmanip->m_data[i];
|
||||
if(n->d != CONTENT_MUD && n->d != CONTENT_GRASS)
|
||||
if(n->getContent() != CONTENT_MUD && n->getContent() != CONTENT_GRASS)
|
||||
continue;
|
||||
}
|
||||
// Tree will be placed one higher
|
||||
|
@ -1942,7 +1942,7 @@ void make_block(BlockMakeData *data)
|
|||
/*{
|
||||
u32 i = data->vmanip->m_area.index(v3s16(p));
|
||||
MapNode *n = &data->vmanip->m_data[i];
|
||||
if(n->d != CONTENT_MUD && n->d != CONTENT_GRASS)
|
||||
if(n->getContent() != CONTENT_MUD && n->getContent() != CONTENT_GRASS)
|
||||
continue;
|
||||
}*/
|
||||
// Will be placed one higher
|
||||
|
@ -1977,7 +1977,7 @@ void make_block(BlockMakeData *data)
|
|||
/*{
|
||||
u32 i = data->vmanip->m_area.index(v3s16(p));
|
||||
MapNode *n = &data->vmanip->m_data[i];
|
||||
if(n->d != CONTENT_MUD && n->d != CONTENT_GRASS)
|
||||
if(n->getContent() != CONTENT_MUD && n->getContent() != CONTENT_GRASS)
|
||||
continue;
|
||||
}*/
|
||||
// Will be placed one lower
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue