From 4468b53fdd4fac9a1cb08e480dca6f7405136862 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 12 Sep 2017 05:20:03 +0200 Subject: [PATCH] Add Jungle M biome --- mods/MAPGEN/mcl_biomes/init.lua | 159 ++++++++++++++++++++++++--- mods/MAPGEN/mcl_mapgen_core/init.lua | 30 ++++- 2 files changed, 171 insertions(+), 18 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index a41e2e8e4..11eb2cf9a 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -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) diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index b4c034622..7b179e94a 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -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)