valleys_mapgen/plants.lua

419 lines
12 KiB
Lua

local dry_dirt_threshold = vmg.define("dry_dirt_threshold", 0.6)
local clay_threshold = vmg.define("clay_threshold", 1)
local sand_threshold = vmg.define("sand_threshold", 0.75)
local silt_threshold = vmg.define("silt_threshold", 1)
if vmg.define("plants", true) then
vmg.register_plant({
nodes = {"default:papyrus", n=4},
cover = 0.030,
density = 0.014,
priority = 75,
check = function(t)
return t.temp > 1 and t.temp < 1.8 and t.water > 0.7 and t.humidity > 3 and t.v13 > -0.4
end,
})
vmg.register_plant({
nodes = "valleys_mapgen:arrow_arum",
cover = 0.40,
density = 0.32,
priority = 68,
check = function(t, pos)
return t.humidity > 1 and t.v2 < 0.01 and t.v13 > 0.1 and t.v15 < 0.25 and pos.y > 3
end,
})
vmg.register_plant({
nodes = "valleys_mapgen:hibiscus",
cover = 0.012,
density = 0.007,
priority = 65,
check = function(t, pos)
return t.temp > 1 and t.temp < 1.6 and t.v2 < 0.05 and pos.y > 3 and pos.y < 60
end,
})
vmg.register_plant({
nodes = "valleys_mapgen:calla_lily",
cover = 0.32,
density = 0.06,
priority = 63,
check = function(t, pos)
return t.temp > 1.2 and t.v2 < 0.02 and t.v13 < 1 and t.v14 < 0.1 and t.v15 < 0.75 and pos.y > 3
end,
})
-- Grass will be stunted in less ideal soil, but will grow on anything
-- but straight clay or sand as long as it's not dry.
for i = 1, 5 do
vmg.register_plant({
nodes = { "default:grass_"..i},
cover = 0.60,
density = 0.24,
priority = 59,
check = function(t, pos)
return t.v15 < sand_threshold - (i - 1) * 0.1 and t.temp >= 1 and t.temp < 1.5 and t.humidity < 2.6 and t.humidity > dry_dirt_threshold and t.v13 < clay_threshold - (i - 1) * 0.1
end,
})
end
-- Replaced by dry grass on dry dirt
for i = 1, 5 do
vmg.register_plant({
nodes = { "default:dry_grass_"..i},
cover = 0.60,
density = 0.24,
priority = 59,
check = function(t, pos)
return t.v15 < sand_threshold - (i - 1) * 0.1 and t.temp >= 1 and t.temp < 1.5 and t.humidity < 2.6 and t.humidity <= dry_dirt_threshold and t.v13 < clay_threshold - (i - 1) * 0.1
end,
})
end
vmg.register_plant({
nodes = {"default:junglegrass"},
cover = 0.65, --0.65
density = 0.40,
priority = 60,
check = function(t, pos)
return t.v15 > -0.6 and t.temp >= 1.8 and t.humidity > 2.2 and t.v16 > 1.8
end,
})
vmg.register_plant({
nodes = {"valleys_mapgen:bird_of_paradise"},
cover = 0.001, --0.001
density = 0.0003, --0.0003
priority = 52,
check = function(t, pos)
return t.v15 > 0 and t.temp >= 2 and t.humidity > 2.1 and t.v16 > 1.8
end,
})
vmg.register_plant({
nodes = {"valleys_mapgen:mangrove_fern"},
cover = 0.1,
density = 0.05,
priority = 50,
check = function(t, pos)
return t.v2 < 0.03 and t.temp >= 1.7 and t.humidity > 1.5 and pos.y < 6
end,
})
vmg.register_plant({
nodes = {"valleys_mapgen:orchid"},
cover = 0.02,
density = 0.005,
priority = 45,
check = function(t, pos)
return t.v15 < 0.7 and t.temp >= 1.9 and t.humidity > 2 and t.v16 > 2
end,
})
vmg.register_plant({
nodes = {"default:cactus", n=4},
cover = 0.3,
density = 0.008,
priority = 10,
check = function(t, pos)
return t.v15 > 0.65 and t.humidity < 0.5 and t.v16 > 0 and t.temp > 1.6
end,
})
vmg.register_plant({
nodes = {"default:dry_shrub"},
cover = 0.064,
density = 0.064,
priority = 54,
check = function(t, pos)
return t.v15 > 0.65 and t.humidity < 0.5
end,
})
vmg.register_plant({
nodes = {"flowers:rose"},
cover = 0.015,
density = 0.012,
priority = 47,
check = function(t, pos)
return t.temp > 1.2 and t.temp < 1.8 and t.humidity < 1.7 and t.v14 >= -0.1 and t.v15 < 0.4 and t.v15 >= -0.6 and t.v13 < 0.82
end,
})
vmg.register_plant({
nodes = {"valleys_mapgen:gerbera"},
cover = 0.010,
density = 0.008,
priority = 44,
check = function(t, pos)
return t.temp > 1.1 and t.temp < 1.8 and t.humidity < 1.7 and t.v14 >= -0.1 and t.v15 < 0.4 and t.v15 >= -0.6 and t.v13 < 0.82
end,
})
vmg.register_plant({
nodes = {"flowers:geranium"},
cover = 0.040,
density = 0.015,
priority = 48,
check = function(t, pos)
return t.temp > 0.98 and t.temp < 1.8 and t.humidity < 1.7 and t.v14 >= -0.1 and t.v15 < 0.4 and t.v15 >= -0.6 and t.v13 < 0.82 and t.thickness <= 1.3
end,
})
vmg.register_plant({
nodes = {"flowers:viola"},
cover = 0.015,
density = 0.012,
priority = 29,
check = function(t, pos)
return t.temp > 0.98 and t.temp < 1.8 and t.humidity < 1.7 and t.v14 >= -0.1 and t.v15 < 0.4 and t.v15 >= -0.6 and t.v13 < 0.82 and t.v16 < 1.6
end,
})
vmg.register_plant({
nodes = {"flowers:tulip"},
cover = 0.020,
density = 0.003,
priority = 50,
check = function(t, pos)
return t.temp > 1.3 and t.temp < 1.8 and t.humidity < 1.5 and t.v14 >= -0.1 and t.v15 < 0.4 and t.v15 >= -0.6 and t.v13 < 0.82
end,
})
vmg.register_plant({
nodes = {"flowers:dandelion_white", "flowers:dandelion_yellow"},
cover = 0.010,
density = 0.006,
priority = 43,
check = function(t, pos)
return t.temp > 0.98 and t.temp < 1.8 and t.humidity < 1.7 and t.v14 >= -0.1 and t.v15 < 0.4 and t.v15 >= -0.6 and t.v13 < 0.82
end,
})
vmg.register_plant({
nodes = {"flowers:mushroom_fertile_red", "flowers:mushroom_fertile_brown"},
cover = 0.006,
density = 0.006,
priority = 61,
check = function(t, pos)
return t.temp > 1.2 and t.temp < 1.6 and t.humidity > 0.5 and t.v13 < 0.5 and t.v14 < 0.5 and t.v15 < 0.5
end,
})
end
---------
--Trees--
---------
if vmg.define("trees", true) then
vmg.register_plant({ -- Pine tree
nodes = {
trunk = "default:pine_tree",
leaves = "default:pine_needles",
air = "air", ignore = "ignore",
},
cover = 0.4,
density = 0.015,
priority = 80,
check = function(t, pos)
return t.v14 < 0 and t.temp < 1.5 and t.temp >= 0.90 and t.humidity < 1 and t.v15 < 0.8 and math.abs(t.v13) < 0.2
end,
grow = function(nodes, pos, data, area)
local rand = math.random()
local height = math.floor(9 + 6 * rand)
local radius = 4 + 2 * rand
vmg.make_pine_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore)
end,
})
vmg.register_plant({ -- Jungle tree
nodes = {
trunk = "default:jungletree",
leaves = "default:jungleleaves",
air = "air", ignore = "ignore",
},
cover = 0.5,
density = 0.06,
priority = 73,
check = function(t, pos)
return t.v15 < 0.7 and t.temp >= 1.9 and t.humidity > 2 and t.v16 > 2
end,
grow = function(nodes, pos, data, area)
local rand = math.random()
local height = math.floor(8 + 4 * rand)
local radius = 5 + 3 * rand
vmg.make_jungle_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore)
end,
})
vmg.register_plant({ -- Mangrove tree
nodes = {
trunk = "valleys_mapgen:mangrove_tree",
leaves = "valleys_mapgen:mangrove_leaves",
roots = "valleys_mapgen:mangrove_roots",
air = "air", ignore = "ignore",
},
cover = 0.3,
density = 0.2,
priority = 72,
check = function(t, pos)
return t.v2 < 0.03 and t.temp >= 1.7 and t.humidity > 1.5 and pos.y < 5
end,
grow = function(nodes, pos, data, area)
local rand = math.random()
local height = math.floor(3 + 1.5 * rand)
local radius = 2 + 1.5 * rand
vmg.make_mangrove_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.roots, nodes.air, nodes.ignore)
end,
})
local leaves_colors = vmg.define("leaves_colors", true)
vmg.register_plant({ -- Apple tree
nodes = {
trunk = "default:tree",
leaves = { -- get some varied leaves
"default:leaves",
"valleys_mapgen:leaves2",
"valleys_mapgen:leaves3",
"valleys_mapgen:leaves4",
"valleys_mapgen:leaves5"
},
fruit = "default:apple",
air = "air", ignore = "ignore",
},
cover = 0.3,
density = 0.05,
priority = 66,
check = function(t, pos)
return t.v15 < 0.6 and t.temp >= 0.85 and t.temp < 2.3 and t.humidity < 3 and t.v16 < 2 and t.v14 > -0.5 and t.v13 < 0.8 and pos.y > 2
end,
grow = function(nodes, pos, data, area)
local rand = math.random()
local height = math.floor(4 + 2.5 * rand)
local radius = 3 + rand
local leaves = nodes.leaves[1]
if leaves_colors then
leaves = nodes.leaves[math.random(#nodes.leaves)]
end
if math.random(4) == 1 then
vmg.make_apple_tree(pos, data, area, height, radius, nodes.trunk, leaves, nodes.fruit, nodes.air, nodes.ignore)
else
vmg.make_tree(pos, data, area, height, radius, nodes.trunk, leaves, nodes.air, nodes.ignore)
end
end,
})
vmg.register_plant({ -- Banana tree
nodes = {
trunk = "valleys_mapgen:banana_tree",
leaves = "valleys_mapgen:banana_leaves",
fruit = "valleys_mapgen:banana",
air = "air", ignore = "ignore",
},
cover = 0.18,
density = 0.005,
priority = 70,
check = function(t, pos)
return t.v15 > -0.6 and t.temp >= 1.8 and t.humidity > 2.2 and t.v16 > 1.8
end,
grow = function(nodes, pos, data, area)
local rand = math.random()
local height = math.floor(4 + 2.5 * rand)
local radius = 3 + rand
vmg.make_banana_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.fruit, nodes.air, nodes.ignore)
end,
})
vmg.register_plant({ -- Fir tree
nodes = {
trunk = "valleys_mapgen:fir_tree",
leaves = "valleys_mapgen:fir_needles",
air = "air", ignore = "ignore",
},
cover = 0.7,
density = 0.045,
priority = 71,
check = function(t, pos)
return t.temp > 0.38 and t.temp < 1 and t.humidity > 0.9 and t.v15 > 0 and t.v15 < 0.55
end,
grow = function(nodes, pos, data, area)
local rand = math.random()
local height = math.floor(9 + 6 * rand)
local radius = 4 + 2 * rand
vmg.make_fir_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore)
end,
})
vmg.register_plant({ -- Cherry blossom tree
nodes = {
trunk = "valleys_mapgen:cherry_blossom_tree",
leaves = "valleys_mapgen:cherry_blossom_leaves",
air = "air", ignore = "ignore",
},
cover = 0.13,
density = 0.005,
priority = 38,
check = function(t, pos)
return t.temp > 0.6 and t.temp < 1 and t.humidity < 1.4 and t.v15 > 0 and t.v15 < 0.55 and pos.y > 30
end,
grow = function(nodes, pos, data, area)
local rand = math.random()
local height = math.floor(4 + 2.5 * rand)
local radius = 3 + rand
vmg.make_cherry_blossom_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore)
end,
})
vmg.register_plant({ -- Birch tree
nodes = {
trunk = "valleys_mapgen:birch_tree",
leaves = "valleys_mapgen:birch_leaves",
air = "air", ignore = "ignore",
},
cover = 0.07,
density = 0.05,
priority = 69,
check = function(t, pos)
return t.temp > 0.5 and t.temp < 1 and t.humidity < 1.4 and t.v13 < 1 and t.v14 < 0.1 and t.v15 < 0.75 and pos.y > 10
end,
grow = function(nodes, pos, data, area)
local rand = math.random()
local height = math.floor(6 + 2.5 * rand)
local radius = 2 + rand
vmg.make_birch_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore)
end,
})
vmg.register_plant({ -- Willow tree
nodes = {
trunk = "valleys_mapgen:willow_tree",
leaves = "valleys_mapgen:willow_leaves",
air = "air", ignore = "ignore",
},
cover = 0.05,
density = 0.02,
priority = 70,
check = function(t, pos)
return t.temp < 1.5 and t.humidity > 1 and t.humidity < 2 and t.v2 < 0.03 and pos.y > 3
end,
grow = function(nodes, pos, data, area)
local rand = math.random()
local height = math.floor(5 + 2.5 * rand)
local radius = 5 + rand
vmg.make_willow_tree(pos, data, area, height, radius, nodes.trunk, nodes.leaves, nodes.air, nodes.ignore)
end,
})
end