mirror of
https://git.minetest.land/Mineclonia/Mineclonia.git
synced 2024-12-01 00:13:05 +00:00
Add Jungle M biome
This commit is contained in:
parent
b86b83cc58
commit
4468b53fdd
2 changed files with 171 additions and 18 deletions
|
@ -45,7 +45,6 @@ local function register_biomes()
|
|||
|
||||
TODO:
|
||||
* Extreme Hills+ M
|
||||
* Jungle M
|
||||
* Better beaches (varying height)
|
||||
|
||||
Tricky are the beach (esp. stone beach) and mushroom island biomes as they have specific conditions we can't check in MT. :(
|
||||
|
@ -56,7 +55,6 @@ local function register_biomes()
|
|||
local DEEP_OCEAN_MAX = -11
|
||||
local DEEP_OCEAN_MIN = -32 -- Careful when changing this. You might end up caves covered in gravel around Y=32!
|
||||
local OCEAN_MIN = DEEP_OCEAN_MAX+1
|
||||
|
||||
-- Ice Plains Spikes
|
||||
minetest.register_biome({
|
||||
name = "ice_plains_spikes",
|
||||
|
@ -925,6 +923,50 @@ local function register_biomes()
|
|||
humidity_point = 91,
|
||||
})
|
||||
|
||||
-- Jungle M
|
||||
-- Like jungle but with even more dense vegetation
|
||||
minetest.register_biome({
|
||||
name = "jungle_m",
|
||||
node_top = "mcl_core:dirt_with_grass",
|
||||
depth_top = 1,
|
||||
node_filler = "mcl_core:dirt",
|
||||
depth_filler = 3,
|
||||
node_riverbed = "mcl_core:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = 1,
|
||||
y_max = mcl_vars.mg_overworld_max,
|
||||
heat_point = 90,
|
||||
humidity_point = 100,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "jungle_m_shore",
|
||||
node_top = "mcl_core:dirt",
|
||||
depth_top = 1,
|
||||
node_filler = "mcl_core:dirt",
|
||||
depth_filler = 3,
|
||||
node_riverbed = "mcl_core:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = -1,
|
||||
y_max = 0,
|
||||
heat_point = 90,
|
||||
humidity_point = 100,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "jungle_m_ocean",
|
||||
node_top = "mcl_core:dirt",
|
||||
depth_top = 1,
|
||||
node_filler = "mcl_core:dirt",
|
||||
depth_filler = 3,
|
||||
node_riverbed = "mcl_core:sand",
|
||||
depth_riverbed = 2,
|
||||
y_min = OCEAN_MIN,
|
||||
y_max = -2,
|
||||
heat_point = 90,
|
||||
humidity_point = 100,
|
||||
})
|
||||
|
||||
-- Jungle Edge
|
||||
minetest.register_biome({
|
||||
name = "jungle_edge",
|
||||
|
@ -954,7 +996,7 @@ local function register_biomes()
|
|||
})
|
||||
|
||||
-- Jungle Edge M
|
||||
-- Almost identical Jungle Edge. Has deeper dirt. Melons spawn here a lot (TODO).
|
||||
-- Almost identical to Jungle Edge. Has deeper dirt. Melons spawn here a lot (TODO).
|
||||
-- TODO: Must be super rare
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -1775,13 +1817,38 @@ local function register_decorations()
|
|||
rotation = "random",
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "schematic",
|
||||
place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
|
||||
sidelen = 80,
|
||||
fill_ratio = 0.008,
|
||||
biomes = {"jungle_m"},
|
||||
y_min = 4,
|
||||
y_max = mcl_vars.mg_overworld_max,
|
||||
schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_jungle_tree_huge.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
rotation = "random",
|
||||
})
|
||||
minetest.register_decoration({
|
||||
deco_type = "schematic",
|
||||
place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
|
||||
sidelen = 80,
|
||||
fill_ratio = 0.09,
|
||||
biomes = {"jungle_m"},
|
||||
y_min = 1,
|
||||
y_max = mcl_vars.mg_overworld_max,
|
||||
schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_jungle_tree.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
rotation = "random",
|
||||
})
|
||||
|
||||
-- Oak in jungle / jungle edge
|
||||
minetest.register_decoration({
|
||||
deco_type = "schematic",
|
||||
place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
|
||||
sidelen = 80,
|
||||
fill_ratio = 0.004,
|
||||
biomes = {"jungle"},
|
||||
biomes = {"jungle", "jungle_m"},
|
||||
y_min = 1,
|
||||
y_max = mcl_vars.mg_overworld_max,
|
||||
schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_classic.mts",
|
||||
|
@ -2274,13 +2341,42 @@ local function register_decorations()
|
|||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = 0.01,
|
||||
scale = 0.01,
|
||||
scale = 0.03,
|
||||
spread = {x = 250, y = 250, z = 250},
|
||||
seed = 333,
|
||||
octaves = 2,
|
||||
persist = 0.66,
|
||||
},
|
||||
biomes = { "jungle", "jungle_edge", "jungle_edge_m", "taiga", "cold_taiga", "mega_taiga", "mega_spruce_taiga" },
|
||||
biomes = { "jungle", "jungle_m", "jungle_edge", "jungle_edge_m", "taiga", "cold_taiga", "mega_taiga", "mega_spruce_taiga" },
|
||||
y_min = 1,
|
||||
y_max = mcl_vars.mg_overworld_max,
|
||||
})
|
||||
|
||||
minetest.register_decoration({
|
||||
deco_type = "schematic",
|
||||
schematic = {
|
||||
size = { x=1, y=3, z=1 },
|
||||
data = {
|
||||
{ name = "air", prob = 0 },
|
||||
{ name = "mcl_flowers:double_fern", param1=255, },
|
||||
{ name = "mcl_flowers:double_fern_top", param1=255, },
|
||||
},
|
||||
},
|
||||
replacements = {
|
||||
["mcl_flowers:fern"] = "mcl_flowers:double_fern"
|
||||
},
|
||||
place_on = {"mcl_core:dirt_with_grass"},
|
||||
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = 0.15,
|
||||
scale = 0.1,
|
||||
spread = {x = 250, y = 250, z = 250},
|
||||
seed = 333,
|
||||
octaves = 2,
|
||||
persist = 0.60,
|
||||
},
|
||||
biomes = { "jungle_m" },
|
||||
y_min = 1,
|
||||
y_max = mcl_vars.mg_overworld_max,
|
||||
})
|
||||
|
@ -2357,6 +2453,24 @@ local function register_decorations()
|
|||
schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_jungle_bush.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
})
|
||||
minetest.register_decoration({
|
||||
deco_type = "schematic",
|
||||
place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
|
||||
sidelen = 80,
|
||||
noise_params = {
|
||||
offset = 0.05,
|
||||
scale = 0.025,
|
||||
spread = {x = 250, y = 250, z = 250},
|
||||
seed = 2930,
|
||||
octaves = 4,
|
||||
persist = 0.6,
|
||||
},
|
||||
biomes = {"jungle_m"},
|
||||
y_min = 1,
|
||||
y_max = mcl_vars.mg_overworld_max,
|
||||
schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_jungle_bush.mts",
|
||||
flags = "place_center_x, place_center_z",
|
||||
})
|
||||
minetest.register_decoration({
|
||||
deco_type = "schematic",
|
||||
place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
|
||||
|
@ -2487,7 +2601,7 @@ local function register_decorations()
|
|||
place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt"},
|
||||
sidelen = 80,
|
||||
fill_ratio = 0.005,
|
||||
biomes = {"jungle"},
|
||||
biomes = {"jungle", "jungle_m"},
|
||||
y_min = 1,
|
||||
y_max = mcl_vars.mg_overworld_max,
|
||||
schematic = {
|
||||
|
@ -2601,6 +2715,23 @@ local function register_decorations()
|
|||
decoration = "mcl_farming:melon",
|
||||
biomes = { "jungle" },
|
||||
})
|
||||
minetest.register_decoration({
|
||||
deco_type = "simple",
|
||||
place_on = {"mcl_core:dirt_with_grass"},
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = 0.0,
|
||||
scale = 0.006,
|
||||
spread = {x = 250, y = 250, z = 250},
|
||||
seed = 333,
|
||||
octaves = 3,
|
||||
persist = 0.6
|
||||
},
|
||||
y_min = 1,
|
||||
y_max = mcl_vars.mg_overworld_max,
|
||||
decoration = "mcl_farming:melon",
|
||||
biomes = { "jungle_m" },
|
||||
})
|
||||
minetest.register_decoration({
|
||||
deco_type = "simple",
|
||||
place_on = {"mcl_core:dirt_with_grass"},
|
||||
|
@ -2616,7 +2747,7 @@ local function register_decorations()
|
|||
y_min = 1,
|
||||
y_max = mcl_vars.mg_overworld_max,
|
||||
decoration = "mcl_farming:melon",
|
||||
biomes = { "jungle_edge" },
|
||||
biomes = { "jungle_edge", "jungle_edge_m" },
|
||||
})
|
||||
--[[
|
||||
-- Lots of melons in Jungle Edge M
|
||||
|
@ -2671,7 +2802,7 @@ local function register_decorations()
|
|||
local grass_forest = {"plains", "taiga", "forest", "flower_forest", "birch_forest", "birch_forest_m", "roofed_forest", "swampland", "mesa_plateau_f_grasstop" }
|
||||
local grass_plains = {"plains", "sunflower_plains", "jungle_edge", "jungle_edge_m" }
|
||||
local grass_savanna = {"savanna", "savanna_m"}
|
||||
local grass_sparse = {"extreme_hills", "extreme_hills_plus", "extreme_hills_plus_snowtop", "extreme_hills_m" }
|
||||
local grass_sparse = {"extreme_hills", "extreme_hills_plus", "extreme_hills_plus_snowtop", "extreme_hills_m", "jungle", }
|
||||
|
||||
register_grass_decoration("tallgrass", -0.03, 0.09, grass_forest)
|
||||
register_grass_decoration("tallgrass", -0.015, 0.075, grass_forest)
|
||||
|
@ -2686,9 +2817,10 @@ local function register_decorations()
|
|||
register_grass_decoration("tallgrass", 0.18, -0.03, grass_savanna)
|
||||
register_grass_decoration("tallgrass", 0.05, -0.03, grass_sparse)
|
||||
|
||||
local fern_minimal = { "jungle", "jungle_edge", "jungle_edge_m", "taiga", "mega_taiga", "mega_spruce_taiga", "cold_taiga" }
|
||||
local fern_low = { "jungle", "jungle_edge", "jungle_edge_m", "taiga", "mega_taiga", "mega_spruce_taiga" }
|
||||
local fern_jungle = { "jungle", "jungle_edge", "jungle_edge_m" }
|
||||
local fern_minimal = { "jungle", "jungle_m", "jungle_edge", "jungle_edge_m", "taiga", "mega_taiga", "mega_spruce_taiga", "cold_taiga" }
|
||||
local fern_low = { "jungle", "jungle_m", "jungle_edge", "jungle_edge_m", "taiga", "mega_taiga", "mega_spruce_taiga" }
|
||||
local fern_jungle = { "jungle", "jungle_m", "jungle_edge", "jungle_edge_m" }
|
||||
local fern_jungle_m = { "jungle_m" },
|
||||
register_grass_decoration("fern", -0.03, 0.09, fern_minimal)
|
||||
register_grass_decoration("fern", -0.015, 0.075, fern_minimal)
|
||||
register_grass_decoration("fern", 0, 0.06, fern_minimal)
|
||||
|
@ -2699,6 +2831,7 @@ local function register_decorations()
|
|||
register_grass_decoration("fern", 0.05, 0.01, fern_jungle)
|
||||
register_grass_decoration("fern", 0.07, -0.01, fern_jungle)
|
||||
register_grass_decoration("fern", 0.09, -0.03, fern_jungle)
|
||||
register_grass_decoration("fern", 0.12, -0.03, fern_jungle_m)
|
||||
|
||||
-- Place tall grass on snow in Ice Plains and Extreme Hills+
|
||||
minetest.register_decoration({
|
||||
|
@ -2904,7 +3037,7 @@ local function register_decorations()
|
|||
end
|
||||
end
|
||||
|
||||
local flower_biomes1 = {"plains", "sunflower_plains", "roofed_forest", "forest", "birch_forest", "birch_forest_m", "taiga", "cold_taiga", "jungle", "jungle_edge", "jungle_edge_m", "savanna", "savanna_m", "extreme_hills", "extreme_hills_m", "extreme_hills_plus", "extreme_hills_plus_snowtop" }
|
||||
local flower_biomes1 = {"plains", "sunflower_plains", "roofed_forest", "forest", "birch_forest", "birch_forest_m", "taiga", "cold_taiga", "jungle", "jungle_m", "jungle_edge", "jungle_edge_m", "savanna", "savanna_m", "extreme_hills", "extreme_hills_m", "extreme_hills_plus", "extreme_hills_plus_snowtop" }
|
||||
|
||||
register_flower("dandelion", flower_biomes1, 8)
|
||||
register_flower("poppy", flower_biomes1, 9439)
|
||||
|
|
|
@ -1298,9 +1298,14 @@ local function generate_tree_decorations(minp, maxp, seed, biomemap)
|
|||
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("jungle_m")
|
||||
local jungle_shore_m = minetest.get_biome_id("jungle_m_shore")
|
||||
local jungle_edge = minetest.get_biome_id("jungle_edge")
|
||||
local jungle_edge_shore = minetest.get_biome_id("jungle_edge_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.
|
||||
|
@ -1314,12 +1319,16 @@ local function generate_tree_decorations(minp, maxp, seed, biomemap)
|
|||
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
|
||||
elseif not jungle_biome_found and (id == jungle or id == jungle_shore or id == jungle_edge or id == jungle_edge_shore) then
|
||||
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) 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 swamp_biome_found and jungle_biome_found then
|
||||
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
|
||||
|
@ -1332,6 +1341,11 @@ local function generate_tree_decorations(minp, maxp, seed, biomemap)
|
|||
|
||||
local pos, treepos, dir
|
||||
|
||||
local cocoachange = 40
|
||||
if dense_vegetation then
|
||||
cocoachance = 32
|
||||
end
|
||||
|
||||
-- Pass 1: Generate cocoas at jungle trees
|
||||
for n = 1, #jungletree do
|
||||
|
||||
|
@ -1340,7 +1354,7 @@ local function generate_tree_decorations(minp, maxp, seed, biomemap)
|
|||
|
||||
if minetest.find_node_near(pos, 1, {"mcl_core:jungleleaves"}) then
|
||||
|
||||
dir = math.random(1, 40)
|
||||
dir = math.random(1, cocoachance)
|
||||
|
||||
if dir == 1 then
|
||||
pos.z = pos.z + 1
|
||||
|
@ -1372,6 +1386,12 @@ local function generate_tree_decorations(minp, maxp, seed, biomemap)
|
|||
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
|
||||
|
@ -1431,8 +1451,8 @@ local function generate_tree_decorations(minp, maxp, seed, biomemap)
|
|||
treepos.y = treepos.y + 1
|
||||
end
|
||||
else
|
||||
-- Grow vines down 1-7 nodes
|
||||
local length = math.ceil(math.abs(perlin_vines_length:get3d(pos)) * 7)
|
||||
-- Grow vines down, length between 1 and maxvinelength
|
||||
local length = math.ceil(math.abs(perlin_vines_length:get3d(pos)) * maxvinelength)
|
||||
for l=0, length-1 do
|
||||
if minetest.get_node(pos).name == "air" then
|
||||
minetest.set_node(pos, newnode)
|
||||
|
|
Loading…
Reference in a new issue