From 2321f5ba6cd62f2f9cd838d5a4d16548f0e109d0 Mon Sep 17 00:00:00 2001 From: the lemons Date: Tue, 15 Feb 2022 22:35:12 -0600 Subject: add desert and plains biomes --- mods/vzxv/nodes.lua | 4 +-- mods/vzxv/tools.lua | 7 +++-- mods/vzxv_worldgen/biome.lua | 74 ++++++++++++++++++++++++++++++++++++++------ 3 files changed, 71 insertions(+), 14 deletions(-) diff --git a/mods/vzxv/nodes.lua b/mods/vzxv/nodes.lua index b342032..b10acd2 100644 --- a/mods/vzxv/nodes.lua +++ b/mods/vzxv/nodes.lua @@ -1,6 +1,6 @@ vzxv.mundane_block("vzxv:stone", "Stone", nil, - { groups = { cracky = 2, stone = 1 } } + { groups = { cracky = 3, stone = 1 } } ) vzxv.mundane_block("vzxv:cobblestone", "Cobblestone", nil, @@ -34,7 +34,7 @@ vzxv.mundane_block("vzxv:sedimentary", "Stone", "vzxvstone.png","vzxvsedimentary_bottom.png","vzxvsedimentary.png", "vzxvsedimentary.png", }, - { groups = { cracky = 1, stone = 1 } } + { groups = { cracky = 2, stone = 1 } } ) minetest.register_craftitem("vzxv:stoneplate", { diff --git a/mods/vzxv/tools.lua b/mods/vzxv/tools.lua index 26307ec..020aa47 100644 --- a/mods/vzxv/tools.lua +++ b/mods/vzxv/tools.lua @@ -51,7 +51,7 @@ stonepick.groups.pick = 2 minetest.register_item("vzxv:stonepick",stonepick) local metalpick = deepclone(base_tool) -metalpick.tool_capabilities.groupcaps = {cracky = {times = {0.25,0.5,1,4}}} +metalpick.tool_capabilities.groupcaps = {cracky = {times = {0.25,0.5,0.75,4}}} metalpick.inventory_image = "vzxvmetalpick.png" metalpick.description = "Metal pick" metalpick.groups.pick = 3 @@ -67,7 +67,8 @@ minetest.register_item("vzxv:woodaxe",woodaxe) local woodadze = deepclone(base_tool) woodadze.tool_capabilities.groupcaps = { - choppy = {times = {4,16}}, crumbly = {times ={1.5, 3}} + choppy = {times = {4,16}}, crumbly = {times ={1.5, 3}}, + cracky = {times = {3,5,60}}, } woodadze.inventory_image = "vzxvwoodadze.png" woodadze.description = "Adze" @@ -89,4 +90,4 @@ metalaxe.tool_capabilities.groupcaps = {choppy = {times = {0.25,0.5}}} metalaxe.inventory_image = "vzxvmetalaxe.png" metalaxe.description = "Metal axe" metalaxe.groups.axe = 3 -minetest.register_item("vzxv:metalaxe",metalaxe) \ No newline at end of file +minetest.register_item("vzxv:metalaxe",metalaxe) diff --git a/mods/vzxv_worldgen/biome.lua b/mods/vzxv_worldgen/biome.lua index 69f7533..fe573bf 100644 --- a/mods/vzxv_worldgen/biome.lua +++ b/mods/vzxv_worldgen/biome.lua @@ -13,15 +13,24 @@ end local noise_params = { elevation = { - seed = 1, - offset = -50, - scale = 50, - spread = {x=2500,y=2500,z=500}, + seed = 0xA410, + offset = -175, + scale = 100, + spread = {x=3500,y=3500,z=500}, octaves = 5, persistence = 0.8, lacunarity = 2.0, flags = "defaults, absvalue", }, + temperature = { + seed = 0xBEE, + offset = 30, + scale = 13, + spread = {x=5000,y=5000,z=500}, + octaves = 3, + persistence = 0.3, + lacunarity = 0.5, + }, } function vzxv.biome_generator:noisemap(mapname, pos) @@ -55,11 +64,20 @@ function vzxv.biome_generator:noisemap_3d(mapname, pos) return map[z][y][x] end -local water_level = 14 +local water_level = -45 + +function vzxv.biome_generator:humidity(pos) + local height = self:noisemap("elevation", pos) + local temperature = self:noisemap("temperature", pos) + local humidity = 1 - math.min((height - water_level) / 86, 1) + humidity = humidity / (math.min(temperature / 25, 1)) + return humidity +end +local bee = 0 function vzxv.biome_generator:get_biome(pos) -- TODO: underground biomes - if pos.y < -75 then + if pos.y < -175 then return "underground" -- TODO: sky biomes elseif pos.y > 120 then @@ -68,8 +86,19 @@ function vzxv.biome_generator:get_biome(pos) if self:noisemap("elevation", pos) <= water_level + 2 then return "sea" else - -- TODO: surface biomes - return "surface" + local temp = self:noisemap("temperature", pos) + local humidity = self:humidity(pos) + bee = bee + 1 + if bee % (16 * 16) == 0 then + print(temp, humidity) + end + if temp > 35 then + return "desert" + end + if humidity < 0.5 then + return "plains" + end + return "forest" end end end @@ -78,7 +107,7 @@ local id = minetest.get_content_id local biomes = {} -function biomes.surface(pos, gen) +function biomes.forest(pos, gen) local height = gen:noisemap("elevation", pos) if pos.y > height then return @@ -106,6 +135,21 @@ function biomes.surface(pos, gen) end end +function biomes.plains(pos, gen) + local height = gen:noisemap("elevation", pos) + if pos.y > height then + return + elseif pos.y == math.floor(height) then + return id "vzxv:grass" + elseif pos.y > height - 3 then + return id "vzxv:dirt" + elseif pos.y > height - 5 and math.random(2) == 1 then + return id "vzxv:dirt" + else + return id "vzxv:stone" + end +end + function biomes.sea(pos, gen) local height = gen:noisemap("elevation", pos) if pos.y > height then @@ -125,6 +169,18 @@ function biomes.sea(pos, gen) end end +function biomes.desert(pos, gen) + local height = gen:noisemap("elevation", pos) + if pos.y > height then + return + elseif pos.y > height - 4 then + return id "vzxv:sand" + else + -- sandstone? + return id "vzxv:stone" + end +end + function biomes.underground(pos) return id "vzxv:stone" end -- cgit v1.2.3