Remove unused functions
parent
c49ab06eb9
commit
c0c17da5fe
|
@ -163,7 +163,7 @@ mcl_vars.mg_end_min = -27073 -- Carefully chosen to be at a mapchunk border
|
||||||
mcl_vars.mg_end_max_official = mcl_vars.mg_end_min + minecraft_height_limit
|
mcl_vars.mg_end_max_official = mcl_vars.mg_end_min + minecraft_height_limit
|
||||||
mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000
|
mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000
|
||||||
mcl_vars.mg_end_platform_pos = { x = 100, y = mcl_vars.mg_end_min + 74, z = 0 }
|
mcl_vars.mg_end_platform_pos = { x = 100, y = mcl_vars.mg_end_min + 74, z = 0 }
|
||||||
mcl_vars.mg_end_exit_portal_pos = vector.new(-3, mcl_vars.mg_end_min + 72, -3)
|
mcl_vars.mg_end_exit_portal_pos = vector.new(0, mcl_vars.mg_end_min + 72, 0)
|
||||||
|
|
||||||
-- Realm barrier used to safely separate the End from the void below the Overworld
|
-- Realm barrier used to safely separate the End from the void below the Overworld
|
||||||
mcl_vars.mg_realm_barrier_overworld_end_max = mcl_vars.mg_end_max
|
mcl_vars.mg_realm_barrier_overworld_end_max = mcl_vars.mg_end_max
|
||||||
|
|
|
@ -98,7 +98,6 @@ mcl_vars.mg_dungeons = mg_flags.dungeons and not superflat
|
||||||
-- Disable builtin dungeons, we provide our own dungeons
|
-- Disable builtin dungeons, we provide our own dungeons
|
||||||
mg_flags.dungeons = false
|
mg_flags.dungeons = false
|
||||||
|
|
||||||
|
|
||||||
if superflat then
|
if superflat then
|
||||||
-- Enforce superflat-like mapgen: no caves, decor, lakes and hills
|
-- Enforce superflat-like mapgen: no caves, decor, lakes and hills
|
||||||
mg_flags.caves = false
|
mg_flags.caves = false
|
||||||
|
@ -162,18 +161,6 @@ local function minecraft_chunk_probability(x, minp, maxp)
|
||||||
return x * (((maxp.x-minp.x+1)*(maxp.z-minp.z+1)) / 256)
|
return x * (((maxp.x-minp.x+1)*(maxp.z-minp.z+1)) / 256)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Takes an index of a biomemap table (from minetest.get_mapgen_object),
|
|
||||||
-- minp and maxp (from an on_generated callback) and returns the real world coordinates
|
|
||||||
-- as X, Z.
|
|
||||||
-- Inverse function of xz_to_biomemap
|
|
||||||
--[[local function biomemap_to_xz(index, minp, maxp)
|
|
||||||
local xwidth = maxp.x - minp.x + 1
|
|
||||||
local zwidth = maxp.z - minp.z + 1
|
|
||||||
local x = ((index-1) % xwidth) + minp.x
|
|
||||||
local z = ((index-1) / zwidth) + minp.z
|
|
||||||
return x, z
|
|
||||||
end]]
|
|
||||||
|
|
||||||
-- Takes x and z coordinates and minp and maxp of a generated chunk
|
-- Takes x and z coordinates and minp and maxp of a generated chunk
|
||||||
-- (in on_generated callback) and returns a biomemap index)
|
-- (in on_generated callback) and returns a biomemap index)
|
||||||
-- Inverse function of biomemap_to_xz
|
-- Inverse function of biomemap_to_xz
|
||||||
|
@ -185,277 +172,9 @@ local function xz_to_biomemap_index(x, z, minp, maxp)
|
||||||
|
|
||||||
return (minix + miniz * zwidth) + 1
|
return (minix + miniz * zwidth) + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Perlin noise objects
|
|
||||||
local perlin_structures
|
|
||||||
local perlin_vines, perlin_vines_fine, perlin_vines_upwards, perlin_vines_length, perlin_vines_density
|
|
||||||
local perlin_clay
|
|
||||||
|
|
||||||
local function generate_clay(minp, maxp, blockseed, voxelmanip_data, voxelmanip_area, lvm_used)
|
|
||||||
-- TODO: Make clay generation reproducible for same seed.
|
|
||||||
if maxp.y < -5 or minp.y > 0 then
|
|
||||||
return lvm_used
|
|
||||||
end
|
|
||||||
|
|
||||||
local pr = PseudoRandom(blockseed)
|
|
||||||
|
|
||||||
perlin_clay = perlin_clay or minetest.get_perlin({
|
|
||||||
offset = 0.5,
|
|
||||||
scale = 0.2,
|
|
||||||
spread = {x = 5, y = 5, z = 5},
|
|
||||||
seed = -316,
|
|
||||||
octaves = 1,
|
|
||||||
persist = 0.0
|
|
||||||
})
|
|
||||||
|
|
||||||
for y=math.max(minp.y, 0), math.min(maxp.y, -8), -1 do
|
|
||||||
-- Assume X and Z lengths are equal
|
|
||||||
local divlen = 4
|
|
||||||
local divs = (maxp.x-minp.x)/divlen+1;
|
|
||||||
for divx=0+1,divs-2 do
|
|
||||||
for divz=0+1,divs-2 do
|
|
||||||
-- Get position and shift it a bit randomly so the clay do not obviously appear in a grid
|
|
||||||
local cx = minp.x + math.floor((divx+0.5)*divlen) + pr:next(-1,1)
|
|
||||||
local cz = minp.z + math.floor((divz+0.5)*divlen) + pr:next(-1,1)
|
|
||||||
|
|
||||||
local water_pos = voxelmanip_area:index(cx, y+1, cz)
|
|
||||||
local waternode = voxelmanip_data[water_pos]
|
|
||||||
local surface_pos = voxelmanip_area:index(cx, y, cz)
|
|
||||||
local surfacenode = voxelmanip_data[surface_pos]
|
|
||||||
|
|
||||||
local genrnd = pr:next(1, 20)
|
|
||||||
if genrnd == 1 and perlin_clay:get_3d({x=cx,y=y,z=cz}) > 0 and waternode == c_water and
|
|
||||||
(surfacenode == c_dirt or minetest.get_item_group(minetest.get_name_from_content_id(surfacenode), "sand") == 1) then
|
|
||||||
local diamondsize = pr:next(1, 3)
|
|
||||||
for x1 = -diamondsize, diamondsize do
|
|
||||||
for z1 = -(diamondsize - math.abs(x1)), diamondsize - math.abs(x1) do
|
|
||||||
local ccpos = voxelmanip_area:index(cx+x1, y, cz+z1)
|
|
||||||
local claycandidate = voxelmanip_data[ccpos]
|
|
||||||
if voxelmanip_data[ccpos] == c_dirt or minetest.get_item_group(minetest.get_name_from_content_id(claycandidate), "sand") == 1 then
|
|
||||||
voxelmanip_data[ccpos] = c_clay
|
|
||||||
lvm_used = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return lvm_used
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Buffers for LuaVoxelManip
|
-- Buffers for LuaVoxelManip
|
||||||
-- local lvm_buffer = {}
|
-- local lvm_buffer = {}
|
||||||
-- local lvm_buffer_param2 = {}
|
-- local lvm_buffer_param2 = {}
|
||||||
|
|
||||||
-- Generate tree decorations in the bounding box. This adds:
|
|
||||||
-- * Cocoa at jungle trees
|
|
||||||
-- * Jungle tree vines
|
|
||||||
-- * Oak vines in swamplands
|
|
||||||
local function generate_tree_decorations(minp, maxp, seed, data, param2_data, area, biomemap, lvm_used, pr)
|
|
||||||
if maxp.y < 0 then
|
|
||||||
return lvm_used
|
|
||||||
end
|
|
||||||
|
|
||||||
local oaktree, oakleaves, jungletree, jungleleaves = {}, {}, {}, {}
|
|
||||||
local swampland = minetest.get_biome_id("Swampland")
|
|
||||||
local swampland_shore = minetest.get_biome_id("Swampland_shore")
|
|
||||||
local jungle = minetest.get_biome_id("Jungle")
|
|
||||||
local jungle_shore = minetest.get_biome_id("Jungle_shore")
|
|
||||||
local jungle_m = minetest.get_biome_id("JungleM")
|
|
||||||
local jungle_m_shore = minetest.get_biome_id("JungleM_shore")
|
|
||||||
local jungle_edge = minetest.get_biome_id("JungleEdge")
|
|
||||||
local jungle_edge_shore = minetest.get_biome_id("JungleEdge_shore")
|
|
||||||
local jungle_edge_m = minetest.get_biome_id("JungleEdgeM")
|
|
||||||
local jungle_edge_m_shore = minetest.get_biome_id("JungleEdgeM_shore")
|
|
||||||
|
|
||||||
-- Modifier for Jungle M biome: More vines and cocoas
|
|
||||||
local dense_vegetation = false
|
|
||||||
|
|
||||||
if biomemap then
|
|
||||||
-- Biome map available: Check if the required biome (jungle or swampland)
|
|
||||||
-- is in this mapchunk. We are only interested in trees in the correct biome.
|
|
||||||
-- The nodes are added if the correct biome is *anywhere* in the mapchunk.
|
|
||||||
-- TODO: Strictly generate vines in the correct biomes only.
|
|
||||||
local swamp_biome_found, jungle_biome_found = false, false
|
|
||||||
for b=1, #biomemap do
|
|
||||||
local id = biomemap[b]
|
|
||||||
|
|
||||||
if not swamp_biome_found and (id == swampland or id == swampland_shore) then
|
|
||||||
oaktree = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:tree"})
|
|
||||||
oakleaves = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:leaves"})
|
|
||||||
swamp_biome_found = true
|
|
||||||
end
|
|
||||||
if not jungle_biome_found and (id == jungle or id == jungle_shore or id == jungle_m or id == jungle_m_shore or id == jungle_edge or id == jungle_edge_shore or id == jungle_edge_m or id == jungle_edge_m_shore) then
|
|
||||||
jungletree = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:jungletree"})
|
|
||||||
jungleleaves = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:jungleleaves"})
|
|
||||||
jungle_biome_found = true
|
|
||||||
end
|
|
||||||
if not dense_vegetation and (id == jungle_m or id == jungle_m_shore) then
|
|
||||||
dense_vegetation = true
|
|
||||||
end
|
|
||||||
if swamp_biome_found and jungle_biome_found and dense_vegetation then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
-- If there is no biome map, we just count all jungle things we can find.
|
|
||||||
-- Oak vines will not be generated.
|
|
||||||
jungletree = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:jungletree"})
|
|
||||||
jungleleaves = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:jungleleaves"})
|
|
||||||
end
|
|
||||||
|
|
||||||
local pos, treepos, dir
|
|
||||||
|
|
||||||
local cocoachance = 40
|
|
||||||
if dense_vegetation then
|
|
||||||
cocoachance = 32
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Pass 1: Generate cocoas at jungle trees
|
|
||||||
for n = 1, #jungletree do
|
|
||||||
|
|
||||||
pos = table.copy(jungletree[n])
|
|
||||||
treepos = table.copy(pos)
|
|
||||||
|
|
||||||
if minetest.find_node_near(pos, 1, {"mcl_core:jungleleaves"}) then
|
|
||||||
|
|
||||||
dir = pr:next(1, cocoachance)
|
|
||||||
|
|
||||||
if dir == 1 then
|
|
||||||
pos.z = pos.z + 1
|
|
||||||
elseif dir == 2 then
|
|
||||||
pos.z = pos.z - 1
|
|
||||||
elseif dir == 3 then
|
|
||||||
pos.x = pos.x + 1
|
|
||||||
elseif dir == 4 then
|
|
||||||
pos.x = pos.x -1
|
|
||||||
end
|
|
||||||
|
|
||||||
local p_pos = area:index(pos.x, pos.y, pos.z)
|
|
||||||
local l = minetest.get_node_light(pos)
|
|
||||||
|
|
||||||
if dir < 5
|
|
||||||
and data[p_pos] == c_air
|
|
||||||
and l and l > 12 then
|
|
||||||
local c = pr:next(1, 3)
|
|
||||||
if c == 1 then
|
|
||||||
data[p_pos] = c_cocoa_1
|
|
||||||
elseif c == 2 then
|
|
||||||
data[p_pos] = c_cocoa_2
|
|
||||||
else
|
|
||||||
data[p_pos] = c_cocoa_3
|
|
||||||
end
|
|
||||||
param2_data[p_pos] = minetest.dir_to_facedir(vector.subtract(treepos, pos))
|
|
||||||
lvm_used = true
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Pass 2: Generate vines at jungle wood, jungle leaves in jungle and oak wood, oak leaves in swampland
|
|
||||||
perlin_vines = perlin_vines or minetest.get_perlin(555, 4, 0.6, 500)
|
|
||||||
perlin_vines_fine = perlin_vines_fine or minetest.get_perlin(43000, 3, 0.6, 1)
|
|
||||||
perlin_vines_length = perlin_vines_length or minetest.get_perlin(435, 4, 0.6, 75)
|
|
||||||
perlin_vines_upwards = perlin_vines_upwards or minetest.get_perlin(436, 3, 0.6, 10)
|
|
||||||
perlin_vines_density = perlin_vines_density or minetest.get_perlin(436, 3, 0.6, 500)
|
|
||||||
|
|
||||||
-- Extra long vines in Jungle M
|
|
||||||
local maxvinelength = 7
|
|
||||||
if dense_vegetation then
|
|
||||||
maxvinelength = 14
|
|
||||||
end
|
|
||||||
local treething
|
|
||||||
for i=1, 4 do
|
|
||||||
if i==1 then
|
|
||||||
treething = jungletree
|
|
||||||
elseif i == 2 then
|
|
||||||
treething = jungleleaves
|
|
||||||
elseif i == 3 then
|
|
||||||
treething = oaktree
|
|
||||||
elseif i == 4 then
|
|
||||||
treething = oakleaves
|
|
||||||
end
|
|
||||||
|
|
||||||
for n = 1, #treething do
|
|
||||||
pos = treething[n]
|
|
||||||
|
|
||||||
treepos = table.copy(pos)
|
|
||||||
|
|
||||||
local dirs = {
|
|
||||||
{x=1,y=0,z=0},
|
|
||||||
{x=-1,y=0,z=0},
|
|
||||||
{x=0,y=0,z=1},
|
|
||||||
{x=0,y=0,z=-1},
|
|
||||||
}
|
|
||||||
|
|
||||||
for d = 1, #dirs do
|
|
||||||
local pos = vector.add(pos, dirs[d])
|
|
||||||
local p_pos = area:index(pos.x, pos.y, pos.z)
|
|
||||||
|
|
||||||
local vine_threshold = math.max(0.33333, perlin_vines_density:get_2d(pos))
|
|
||||||
if dense_vegetation then
|
|
||||||
vine_threshold = vine_threshold * (2/3)
|
|
||||||
end
|
|
||||||
|
|
||||||
if perlin_vines:get_2d(pos) > -1.0 and perlin_vines_fine:get_3d(pos) > vine_threshold and data[p_pos] == c_air then
|
|
||||||
|
|
||||||
local rdir = {}
|
|
||||||
rdir.x = -dirs[d].x
|
|
||||||
rdir.y = dirs[d].y
|
|
||||||
rdir.z = -dirs[d].z
|
|
||||||
local param2 = minetest.dir_to_wallmounted(rdir)
|
|
||||||
|
|
||||||
-- Determine growth direction
|
|
||||||
local grow_upwards = false
|
|
||||||
-- Only possible on the wood, not on the leaves
|
|
||||||
if i == 1 then
|
|
||||||
grow_upwards = perlin_vines_upwards:get_3d(pos) > 0.8
|
|
||||||
end
|
|
||||||
if grow_upwards then
|
|
||||||
-- Grow vines up 1-4 nodes, even through jungleleaves.
|
|
||||||
-- This may give climbing access all the way to the top of the tree :-)
|
|
||||||
-- But this will be fairly rare.
|
|
||||||
local length = math.ceil(math.abs(perlin_vines_length:get_3d(pos)) * 4)
|
|
||||||
for l=0, length-1 do
|
|
||||||
local t_pos = area:index(treepos.x, treepos.y, treepos.z)
|
|
||||||
|
|
||||||
if (data[p_pos] == c_air or data[p_pos] == c_jungleleaves or data[p_pos] == c_leaves) and mcl_core.supports_vines(minetest.get_name_from_content_id(data[t_pos])) then
|
|
||||||
data[p_pos] = c_vine
|
|
||||||
param2_data[p_pos] = param2
|
|
||||||
lvm_used = true
|
|
||||||
|
|
||||||
else
|
|
||||||
break
|
|
||||||
end
|
|
||||||
pos.y = pos.y + 1
|
|
||||||
p_pos = area:index(pos.x, pos.y, pos.z)
|
|
||||||
treepos.y = treepos.y + 1
|
|
||||||
end
|
|
||||||
else
|
|
||||||
-- Grow vines down, length between 1 and maxvinelength
|
|
||||||
local length = math.ceil(math.abs(perlin_vines_length:get_3d(pos)) * maxvinelength)
|
|
||||||
for l=0, length-1 do
|
|
||||||
if data[p_pos] == c_air then
|
|
||||||
data[p_pos] = c_vine
|
|
||||||
param2_data[p_pos] = param2
|
|
||||||
lvm_used = true
|
|
||||||
|
|
||||||
else
|
|
||||||
break
|
|
||||||
end
|
|
||||||
pos.y = pos.y - 1
|
|
||||||
p_pos = area:index(pos.x, pos.y, pos.z)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return lvm_used
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_on_generated(function(minp, maxp, blockseed)
|
minetest.register_on_generated(function(minp, maxp, blockseed)
|
||||||
minetest.log("action", "[mcl_mapgen_core] Generating chunk " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp))
|
minetest.log("action", "[mcl_mapgen_core] Generating chunk " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp))
|
||||||
local p1, p2 = {x=minp.x, y=minp.y, z=minp.z}, {x=maxp.x, y=maxp.y, z=maxp.z}
|
local p1, p2 = {x=minp.x, y=minp.y, z=minp.z}, {x=maxp.x, y=maxp.y, z=maxp.z}
|
||||||
|
|
Loading…
Reference in New Issue