Mod nodes drop default:dirt. Trees now use vi = vi + 1. Emerlen for vertical columns. Autumn forest started

master
Mat 2014-07-17 00:19:36 +01:00
parent 9ab8aeced7
commit d0ad46653c
8 changed files with 217 additions and 72 deletions

View File

@ -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

View File

@ -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

View File

@ -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
View File

@ -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",

BIN
textures/default_leaves.png Normal file

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