Mod nodes drop default:dirt. Trees now use vi = vi + 1. Emerlen for vertical columns. Autumn forest started
parent
9ab8aeced7
commit
d0ad46653c
|
@ -1,4 +1,4 @@
|
|||
riverdev 0.4.3 by paramat
|
||||
riverdev 0.4.4 by paramat
|
||||
For latest stable Minetest back to 0.4.8
|
||||
Depends default
|
||||
Licenses: code WTFPL
|
||||
|
|
159
functions.lua
159
functions.lua
|
@ -1,31 +1,34 @@
|
|||
function riverdev_appletree(x, y, z, area, data)
|
||||
local c_tree = minetest.get_content_id("default:tree")
|
||||
local c_apple = minetest.get_content_id("default:apple")
|
||||
local c_appleaf = minetest.get_content_id("riverdev:appleleaf")
|
||||
local c_appleleaf = minetest.get_content_id("riverdev:appleleaf")
|
||||
local top = 3 + math.random(2)
|
||||
for j = -2, top do
|
||||
if j == top - 1 or j == top then
|
||||
for i = -2, 2 do
|
||||
for k = -2, 2 do
|
||||
local vi = area:index(x + i, y + j, z + k)
|
||||
if math.random(5) ~= 2 then
|
||||
data[vi] = c_appleaf
|
||||
if j == top and math.random() < 0.04 then -- apples hang from leaves
|
||||
local viu = area:index(x + i, y + j - 1, z + k)
|
||||
data[viu] = c_apple
|
||||
local vi = area:index(x - 2, y + j, z + k)
|
||||
local viu = area:index(x - 2, y + j - 1, z + k)
|
||||
for i = -2, 2 do
|
||||
if math.random() < 0.8 then
|
||||
data[vi] = c_appleleaf
|
||||
if j == top and math.random() < 0.04 then
|
||||
data[viu] = c_apple
|
||||
end
|
||||
end
|
||||
vi = vi + 1
|
||||
viu = viu + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif j == top - 2 then
|
||||
for i = -1, 1 do
|
||||
for k = -1, 1 do
|
||||
if math.abs(i) + math.abs(k) == 2 then
|
||||
local vi = area:index(x + i, y + j, z + k)
|
||||
data[vi] = c_tree
|
||||
local vi = area:index(x - 1, y + j, z + k)
|
||||
for i = -1, 1 do
|
||||
if math.abs(i) + math.abs(k) == 2 then
|
||||
data[vi] = c_tree
|
||||
end
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
local vi = area:index(x, y + j, z)
|
||||
data[vi] = c_tree
|
||||
|
@ -33,51 +36,86 @@ function riverdev_appletree(x, y, z, area, data)
|
|||
end
|
||||
end
|
||||
|
||||
function riverdev_autumntree(x, y, z, area, data)
|
||||
local c_tree = minetest.get_content_id("default:tree")
|
||||
local c_yellowleaf = minetest.get_content_id("riverdev:yellowleaf")
|
||||
local c_yellowleafinit = minetest.get_content_id("riverdev:yellowleafinit")
|
||||
local top = 3 + math.random(2)
|
||||
for j = -2, top do
|
||||
if j == top - 1 or j == top then
|
||||
for k = -2, 2 do
|
||||
local vi = area:index(x - 2, y + j, z + k)
|
||||
for i = -2, 2 do
|
||||
if math.random() < 0.6 then
|
||||
data[vi] = c_yellowleaf
|
||||
end
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
elseif j == top - 2 then
|
||||
for k = -1, 1 do
|
||||
local vi = area:index(x - 1, y + j, z + k)
|
||||
for i = -1, 1 do
|
||||
if math.abs(i) + math.abs(k) == 2 then
|
||||
data[vi] = c_tree
|
||||
end
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
else
|
||||
local vi = area:index(x, y + j, z)
|
||||
data[vi] = c_tree
|
||||
end
|
||||
end
|
||||
local vi = area:index(x, y + top, z)
|
||||
data[vi] = c_yellowleafinit
|
||||
end
|
||||
|
||||
function riverdev_pinetree(x, y, z, area, data)
|
||||
local c_pinetree = minetest.get_content_id("riverdev:pinetree")
|
||||
local c_needles = minetest.get_content_id("riverdev:needles")
|
||||
for j = -4, 14 do
|
||||
if j == 3 or j == 6 or j == 9 or j == 12 then
|
||||
for i = -2, 2 do
|
||||
for k = -2, 2 do
|
||||
if math.abs(i) == 2 or math.abs(k) == 2 then
|
||||
if math.random(7) ~= 2 then
|
||||
local vil = area:index(x + i, y + j, z + k)
|
||||
data[vil] = c_needles
|
||||
local vi = area:index(x - 2, y + j, z + k)
|
||||
for i = -2, 2 do
|
||||
if math.abs(i) == 2 or math.abs(k) == 2 then
|
||||
data[vi] = c_needles
|
||||
end
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif j == 4 or j == 7 or j == 10 then
|
||||
for i = -1, 1 do
|
||||
for k = -1, 1 do
|
||||
if not (i == 0 and j == 0) then
|
||||
if math.random(11) ~= 2 then
|
||||
local vil = area:index(x + i, y + j, z + k)
|
||||
data[vil] = c_needles
|
||||
local vi = area:index(x - 1, y + j, z + k)
|
||||
for i = -1, 1 do
|
||||
if not (i == 0 and j == 0) then
|
||||
data[vi] = c_needles
|
||||
end
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif j == 13 then
|
||||
for i = -1, 1 do
|
||||
for k = -1, 1 do
|
||||
if not (i == 0 and j == 0) then
|
||||
local vil = area:index(x + i, y + j, z + k)
|
||||
data[vil] = c_needles
|
||||
local vila = area:index(x + i, y + j + 1, z + k)
|
||||
data[vila] = c_needles
|
||||
local vi = area:index(x - 1, y + j, z + k)
|
||||
local via = area:index(x - 1, y + j + 1, z + k)
|
||||
for i = -1, 1 do
|
||||
if not (i == 0 and j == 0) then
|
||||
data[vi] = c_needles
|
||||
data[via] = c_needles
|
||||
end
|
||||
vi = vi + 1
|
||||
via = via + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local vit = area:index(x, y + j, z)
|
||||
data[vit] = c_pinetree
|
||||
local vi = area:index(x, y + j, z)
|
||||
data[vi] = c_pinetree
|
||||
end
|
||||
local vil = area:index(x, y + 15, z)
|
||||
local vila = area:index(x, y + 16, z)
|
||||
data[vil] = c_needles
|
||||
data[vila] = c_needles
|
||||
local vi = area:index(x, y + 15, z)
|
||||
local via = area:index(x, y + 16, z)
|
||||
data[vi] = c_needles
|
||||
data[via] = c_needles
|
||||
end
|
||||
|
||||
function riverdev_flower(data, vi)
|
||||
|
@ -155,45 +193,38 @@ minetest.register_abm({
|
|||
end,
|
||||
})
|
||||
|
||||
-- Spawn flat facing south
|
||||
-- Spawn yellow leaves on ground
|
||||
|
||||
function riverdev_flatsouth(pos)
|
||||
minetest.register_abm({
|
||||
nodenames = {"riverdev:yellowleafinit"},
|
||||
interval = 13,
|
||||
chance = 1,
|
||||
action = function(pos, node)
|
||||
local x = pos.x
|
||||
local y = pos.y
|
||||
local z = pos.z
|
||||
local c_air = minetest.get_content_id("air")
|
||||
local c_tree = minetest.get_content_id("default:tree")
|
||||
local c_yellowleaf = minetest.get_content_id("riverdev:yellowleaf")
|
||||
local c_grass = minetest.get_content_id("riverdev:grass")
|
||||
local c_yellowleafgrass = minetest.get_content_id("riverdev:yellowleafgrass")
|
||||
|
||||
local vm = minetest.get_voxel_manip()
|
||||
local pos1 = {x=x-2, y=y-5, z=z-2}
|
||||
local pos2 = {x=x+9, y=y+4, z=z+9}
|
||||
local pos1 = {x=x-3, y=y-12, z=z-3}
|
||||
local pos2 = {x=x+3, y=y, z=z+3}
|
||||
local emin, emax = vm:read_from_map(pos1, pos2)
|
||||
local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax})
|
||||
local data = vm:get_data()
|
||||
|
||||
for j = -5, 4 do
|
||||
for k = -2, 9 do
|
||||
local vi = area:index(x-2, y+j, z+k)
|
||||
for i = -2, 9 do
|
||||
local nodid = data[vi]
|
||||
if nodid == c_tree then
|
||||
data[vi] = c_air
|
||||
--for j = -2, 2 do
|
||||
--for k = -2, 2 do
|
||||
--for i = -2, 2 do
|
||||
--end
|
||||
--end
|
||||
--end
|
||||
end
|
||||
vi = vi + 1
|
||||
local vi = area:index(x, y, z)
|
||||
data[vi] = c_yellowleaf
|
||||
for vi in area:iterp(pos1, pos2) do
|
||||
if data[vi] == c_grass then
|
||||
data[vi] = c_yellowleafgrass
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
vm:set_data(data)
|
||||
vm:write_to_map()
|
||||
vm:update_map()
|
||||
end,
|
||||
})
|
||||
|
||||
local path = minetest.get_modpath("riverdev") .. "/schems/flat.mts"
|
||||
minetest.place_schematic({x=x, y=y, z=z}, path, 270, nil, false)
|
||||
end
|
||||
|
|
15
init.lua
15
init.lua
|
@ -1,8 +1,12 @@
|
|||
-- riverdev 0.4.3 by paramat
|
||||
-- riverdev 0.4.4 by paramat
|
||||
-- For latest stable Minetest and back to 0.4.8
|
||||
-- Depends default
|
||||
-- License: code WTFPL
|
||||
|
||||
-- mod nodes drop default dirt for farming
|
||||
-- trees now have vi = vi + 1 optimisation
|
||||
-- emerlen used for vertical columns
|
||||
|
||||
-- Parameters
|
||||
|
||||
local YMIN = -33000
|
||||
|
@ -10,6 +14,7 @@ local YMAX = 33000
|
|||
local YWATER = 1
|
||||
local YSAND = 4 -- Top of beach y
|
||||
local YTER = -64 -- Deepest seabed y
|
||||
local YPINE = 32 -- Pines above this y
|
||||
|
||||
local TERSCA = 512 -- Terrain vertical scale in nodes
|
||||
local BASAMP = 0.3 -- Base amplitude relative to 3D noise amplitude. Ridge network structure
|
||||
|
@ -179,6 +184,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
local c_mixwaterflow = minetest.get_content_id("riverdev:mixwaterflow")
|
||||
|
||||
local sidelen = x1 - x0 + 1 -- chunk sidelen
|
||||
local emerlen = sidelen + 32 -- voxelmanip emerged area sidelen
|
||||
local chulensxyz = {x=sidelen+1, y=sidelen+2, z=sidelen+1}
|
||||
local minposxyz = {x=x0-1, y=y0-1, z=z0-1}
|
||||
local chulensxz = {x=sidelen+1, y=sidelen+1, z=sidelen} -- different because here x=x, y=z
|
||||
|
@ -300,7 +306,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
local vi = area:index(x, y-2, z)
|
||||
for j = 1, 16 do
|
||||
data[vi] = c_wood
|
||||
vi = vi - 112
|
||||
vi = vi - emerlen
|
||||
end
|
||||
end
|
||||
for k = -1, 1 do
|
||||
|
@ -340,10 +346,10 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
elseif density < 0 and under[si] ~= 0 then -- air above surface
|
||||
if under[si] == 1 and nodid ~= c_path and nodidu ~= c_path
|
||||
and nodid ~= c_wood and nodidu ~= c_wood then
|
||||
if math.random() < APPCHA * n_tree and tstone > 0.012
|
||||
if math.random() < APPCHA * n_tree and y < YPINE
|
||||
and n_abspatha > TPFLO and n_abspathb > TPFLO then
|
||||
riverdev_appletree(x, y, z, area, data)
|
||||
elseif math.random() < PINCHA * n_tree and tstone > 0.004 and tstone < 0.012
|
||||
elseif math.random() < PINCHA * n_tree and y >= YPINE
|
||||
and n_abspatha > TPFLO and n_abspathb > TPFLO then
|
||||
riverdev_pinetree(x, y, z, area, data)
|
||||
else
|
||||
|
@ -415,3 +421,4 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
local chugent = math.ceil((os.clock() - t1) * 1000)
|
||||
print ("[riverdev] "..chugent.." ms")
|
||||
end)
|
||||
|
||||
|
|
113
nodes.lua
113
nodes.lua
|
@ -11,7 +11,8 @@ minetest.register_node("riverdev:dirt", {
|
|||
description = "Dirt",
|
||||
tiles = {"default_dirt.png"},
|
||||
is_ground_content = false,
|
||||
groups = {crumbly=3,soil=1},
|
||||
groups = {crumbly=3},
|
||||
drop = "default:dirt",
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
})
|
||||
|
||||
|
@ -19,8 +20,41 @@ minetest.register_node("riverdev:grass", {
|
|||
description = "Grass",
|
||||
tiles = {"default_grass.png", "default_dirt.png", "default_grass.png"},
|
||||
is_ground_content = false,
|
||||
groups = {crumbly=3,soil=1},
|
||||
drop = "riverdev:dirt",
|
||||
groups = {crumbly=3},
|
||||
drop = "default:dirt",
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name="default_grass_footstep", gain=0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("riverdev:yellowleafgrass", {
|
||||
description = "Grass With Yellow Leaves",
|
||||
tiles = {"default_grass.png^riverdev_yellowleaf.png", "default_dirt.png", "default_grass.png"},
|
||||
is_ground_content = false,
|
||||
groups = {crumbly=3},
|
||||
drop = "default:dirt",
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name="default_grass_footstep", gain=0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("riverdev:orangeleafgrass", {
|
||||
description = "Grass With Orange Leaves",
|
||||
tiles = {"default_grass.png^riverdev_orangeleaf.png", "default_dirt.png", "default_grass.png"},
|
||||
is_ground_content = false,
|
||||
groups = {crumbly=3},
|
||||
drop = "default:dirt",
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name="default_grass_footstep", gain=0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("riverdev:redleafgrass", {
|
||||
description = "Grass With Red Leaves",
|
||||
tiles = {"default_grass.png^riverdev_redleaf.png", "default_dirt.png", "default_grass.png"},
|
||||
is_ground_content = false,
|
||||
groups = {crumbly=3},
|
||||
drop = "default:dirt",
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name="default_grass_footstep", gain=0.25},
|
||||
}),
|
||||
|
@ -31,6 +65,7 @@ minetest.register_node("riverdev:path", {
|
|||
tiles = {"riverdev_path.png"},
|
||||
is_ground_content = false,
|
||||
groups = {crumbly=3},
|
||||
drop = "default:dirt",
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
})
|
||||
|
||||
|
@ -52,6 +87,78 @@ minetest.register_node("riverdev:appleleaf", {
|
|||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("riverdev:yellowleaf", {
|
||||
description = "Yellow Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
visual_scale = 1.3,
|
||||
tiles = {"riverdev_yellowleaf.png"},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {snappy=3, flammable=2},
|
||||
drop = "",
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("riverdev:yellowleafinit", {
|
||||
description = "Initial Yellow Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
visual_scale = 1.3,
|
||||
tiles = {"riverdev_yellowleaf.png"},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {snappy=3, flammable=2},
|
||||
drop = "",
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("riverdev:orangeleaf", {
|
||||
description = "Orange Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
visual_scale = 1.3,
|
||||
tiles = {"riverdev_orangeleaf.png"},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {snappy=3, flammable=2},
|
||||
drop = "",
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("riverdev:orangeleafinit", {
|
||||
description = "Initial Orange Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
visual_scale = 1.3,
|
||||
tiles = {"riverdev_orangeleaf.png"},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {snappy=3, flammable=2},
|
||||
drop = "",
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("riverdev:redleaf", {
|
||||
description = "Red Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
visual_scale = 1.3,
|
||||
tiles = {"riverdev_redleaf.png"},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {snappy=3, flammable=2},
|
||||
drop = "",
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("riverdev:redleafinit", {
|
||||
description = "Initial Red Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
visual_scale = 1.3,
|
||||
tiles = {"riverdev_redleaf.png"},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {snappy=3, flammable=2},
|
||||
drop = "",
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("riverdev:appling", {
|
||||
description = "Appletree Sapling",
|
||||
drawtype = "plantlike",
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 193 B |
Binary file not shown.
After Width: | Height: | Size: 250 B |
Binary file not shown.
After Width: | Height: | Size: 250 B |
Binary file not shown.
After Width: | Height: | Size: 250 B |
Loading…
Reference in New Issue