First push

master
bas080 2013-04-22 20:02:19 +02:00
parent eef2fae5ff
commit ebc615a037
25 changed files with 581 additions and 4 deletions

View File

@ -1,4 +0,0 @@
trees
=====
Bigger but tiny trees for minetest

125
conifertree.lua Normal file
View File

@ -0,0 +1,125 @@
abstract_trees.grow_conifertree = function(pos)
local size = 5+math.random(10)
local slope = size/3
local rad = 1
minetest.env:add_node({x=pos.x, y=pos.y+size, z=pos.z}, {name="trees:leaves_conifer"})
for i=1,size,1 do
local spawn = {x=pos.x, y=pos.y+size-i, z=pos.z}
if i < size * 0.75 then
for k=-rad,rad,1 do
for n=-rad,rad,1 do
minetest.env:add_node({x=pos.x+k, y=pos.y+size-i, z=pos.z+n}, {name="trees:leaves_conifer"})
end
end
if i > slope*rad then
i = i - 1
minetest.env:add_node({x=pos.x+rad, y=pos.y+size-i, z=pos.z+rad}, {name="trees:leaves_conifer"})
minetest.env:add_node({x=pos.x+rad, y=pos.y+size-i, z=pos.z-rad}, {name="trees:leaves_conifer"})
minetest.env:add_node({x=pos.x-rad, y=pos.y+size-i, z=pos.z+rad}, {name="trees:leaves_conifer"})
minetest.env:add_node({x=pos.x-rad, y=pos.y+size-i, z=pos.z-rad}, {name="trees:leaves_conifer"})
i = i + 1
rad = rad + 1
minetest.env:add_node({x=pos.x+rad, y=pos.y+size-i, z=pos.z+rad}, {name="trees:leaves_conifer"})
minetest.env:add_node({x=pos.x+rad, y=pos.y+size-i, z=pos.z-rad}, {name="trees:leaves_conifer"})
minetest.env:add_node({x=pos.x-rad, y=pos.y+size-i, z=pos.z+rad}, {name="trees:leaves_conifer"})
minetest.env:add_node({x=pos.x-rad, y=pos.y+size-i, z=pos.z-rad}, {name="trees:leaves_conifer"})
end
end
minetest.env:add_node(spawn, {name="trees:tree_conifer"})
end
end
--nodes
minetest.register_node("trees:tree_conifer", {
description = "Conifer trunk",
tile_images = {
"conifers_trunktop.png",
"conifers_trunktop.png",
"conifers_trunk.png",
"conifers_trunk.png",
"conifers_trunk.png",
"conifers_trunk.png"
},
is_ground_content = true,
groups = {
tree = 1,
snappy = 2,
choppy = 2,
oddly_breakable_by_hand = 1,
flammable = 2
},
sounds = default.node_sound_wood_defaults()
})
minetest.register_node("trees:leaves_conifer", {
description = "Conifer leaves",
drawtype = "allfaces_optional",
visual_scale = 1.3,
tile_images = { "conifers_leaves.png" },
--inventory_image = "conifers_leaves.png",
paramtype = "light",
groups = {
snappy = 3,
leafdecay = 3,
flammable = 2
},
drop = {
max_items = 1,
items = {
{
-- player will get sapling with 1/20 chance
items = {'trees:sapling_conifer'},
rarity = 20,
},
}
},
sounds = default.node_sound_leaves_defaults()
})
minetest.register_node("trees:sapling_conifer", {
description = "Conifer sapling",
drawtype = "plantlike",
visual_scale = 1.0,
tile_images = {"conifers_sapling.png"},
inventory_image = "conifers_sapling.png",
wield_image = "conifers_sapling.png",
paramtype = "light",
walkable = false,
groups = {
snappy = 2,
dig_immediate = 3,
flammable = 2
},
sounds = default.node_sound_defaults(),
})
-- abm
minetest.register_abm({
nodenames = "trees:sapling_conifer",
interval = INTERVAL,
chance = SAPLING_CHANCE,
action = function(pos, node, _, _)
if minetest.env:get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then
conifers:make_conifer({x = pos.x, y = pos.y, z = pos.z}, math.random(0, 1))
end
end
})
--spawn
plantslib:register_generate_plant({
surface = {"default:dirt", "default:dirt_with_grass", "snow:dirt_with_snow", "snow:snow"},
max_count = 30,
avoid_nodes = {"group:tree"},
avoid_radius = 2,
rarity = 50,
seed_diff = 777,
min_elevation = -1,
max_elevation = 100,
plantlife_limit = -0.6,
humidity_max = -1,
humidity_min = 0.2,
temp_max = 0,
temp_min = -0.8,
},
"abstract_trees.grow_conifertree"
)

2
depends.txt Normal file
View File

@ -0,0 +1,2 @@
default
plants_lib

21
functions.lua Normal file
View File

@ -0,0 +1,21 @@
abstrac_trees.add_tree_branch = function(pos, leaves)
local leave = "jungletree:leaves_"..leaves[math.random(1,3)]
minetest.env:add_node(pos, {name="default:jungletree"})
for i = math.floor(math.random(2)), -math.floor(math.random(2)), -1 do
for k = math.floor(math.random(2)), -math.floor(math.random(2)), -1 do
local p = {x=pos.x+i, y=pos.y, z=pos.z+k}
local n = minetest.env:get_node(p)
if (n.name=="air") then
minetest.env:add_node(p, {name=leave})
end
local chance = math.abs(i+k)
if (chance < 1) then
p = {x=pos.x+i, y=pos.y+1, z=pos.z+k}
n = minetest.env:get_node(p)
if (n.name=="air") then
minetest.env:add_node(p, {name=leave})
end
end
end
end
end

19
init.lua Normal file
View File

@ -0,0 +1,19 @@
abstract_trees = {}
dofile(minetest.get_modpath("trees").."/jungletree.lua")
dofile(minetest.get_modpath("trees").."/mangrovetree.lua")
dofile(minetest.get_modpath("trees").."/palmtree.lua")
dofile(minetest.get_modpath("trees").."/conifertree.lua")
--testing tool
minetest.register_tool("trees:drawer", {
description = "palmtree spawner",
inventory_image = "default_stick.png",
on_use = function(itemstack, user, pointed_thing)
if pointed_thing.under then
local height = 4+math.ceil(math.random(11))
abstract_trees.grow_conifertree(pointed_thing.above, height)
end
end,
})

143
jungletree.lua Normal file
View File

@ -0,0 +1,143 @@
local function add_tree_branch(pos)
--chooze random leave
local leaves = {"green","yellow","red"}
local leave = "trees:leaves_"..leaves[math.random(1,3)]
minetest.env:add_node(pos, {name="default:jungletree"})
for i = math.floor(math.random(2)), -math.floor(math.random(2)), -1 do
for k = math.floor(math.random(2)), -math.floor(math.random(2)), -1 do
local p = {x=pos.x+i, y=pos.y, z=pos.z+k}
local n = minetest.env:get_node(p)
if (n.name=="air") then
minetest.env:add_node(p, {name=leave})
end
local chance = math.abs(i+k)
if (chance < 1) then
p = {x=pos.x+i, y=pos.y+1, z=pos.z+k}
n = minetest.env:get_node(p)
if (n.name=="air") then
minetest.env:add_node(p, {name=leave})
end
end
end
end
end
abstract_trees.grow_jungletree = function(pos)
local size = 5+math.random(6)
if size < 8 then
for i = size, -2, -1 do
local p = {x=pos.x, y=pos.y+i, z=pos.z}
minetest.env:add_node(p, {name="default:jungletree"})
if i == size then
add_tree_branch({x=pos.x, y=pos.y+size+math.random(0, 1), z=pos.z})
add_tree_branch({x=pos.x+1, y=pos.y+i-math.random(2), z=pos.z})
add_tree_branch({x=pos.x-1, y=pos.y+i-math.random(2), z=pos.z})
add_tree_branch({x=pos.x, y=pos.y+i-math.random(2), z=pos.z+1})
add_tree_branch({x=pos.x, y=pos.y+i-math.random(2), z=pos.z-1})
end
if i < 0 then
minetest.env:add_node({x=pos.x+1, y=pos.y+i-math.random(2), z=pos.z}, {name="default:jungletree"})
minetest.env:add_node({x=pos.x, y=pos.y+i-math.random(2), z=pos.z+1}, {name="default:jungletree"})
minetest.env:add_node({x=pos.x-1, y=pos.y+i-math.random(2), z=pos.z}, {name="default:jungletree"})
minetest.env:add_node({x=pos.x, y=pos.y+i-math.random(2), z=pos.z-1}, {name="default:jungletree"})
end
if (math.sin(i/size*i) < 0.2 and i > 3 and math.random(0,2) < 1.5) then
branch_pos = {x=pos.x+math.random(0,1), y=pos.y+i, z=pos.z-math.random(0,1)}
add_tree_branch(branch_pos)
end
end
else
for i = size, -1, -1 do
if (math.sin(i/size*i) < 0.2 and i > 3 and math.random(0,2) < 1.5) then
branch_pos = {x=pos.x+math.random(0,1), y=pos.y+i, z=pos.z-math.random(0,1)}
add_tree_branch(branch_pos)
end
if i < math.random(0,1) then
minetest.env:add_node({x=pos.x+1, y=pos.y+i, z=pos.z+1}, {name="default:jungletree"})
minetest.env:add_node({x=pos.x+2, y=pos.y+i, z=pos.z-1}, {name="default:jungletree"})
minetest.env:add_node({x=pos.x, y=pos.y+i, z=pos.z-2}, {name="default:jungletree"})
minetest.env:add_node({x=pos.x-1, y=pos.y+i, z=pos.z}, {name="default:jungletree"})
end
if i == size then
add_tree_branch({x=pos.x+1, y=pos.y+i, z=pos.z+1})
add_tree_branch({x=pos.x+2, y=pos.y+i, z=pos.z-1})
add_tree_branch({x=pos.x, y=pos.y+i, z=pos.z-2})
add_tree_branch({x=pos.x-1, y=pos.y+i, z=pos.z})
add_tree_branch({x=pos.x+1, y=pos.y+i, z=pos.z+2})
add_tree_branch({x=pos.x+3, y=pos.y+i, z=pos.z-1})
add_tree_branch({x=pos.x, y=pos.y+i, z=pos.z-3})
add_tree_branch({x=pos.x-2, y=pos.y+i, z=pos.z})
add_tree_branch({x=pos.x+1, y=pos.y+i, z=pos.z})
add_tree_branch({x=pos.x+1, y=pos.y+i, z=pos.z-1})
add_tree_branch({x=pos.x, y=pos.y+i, z=pos.z-1})
add_tree_branch({x=pos.x, y=pos.y+i, z=pos.z})
else
minetest.env:add_node({x=pos.x+1, y=pos.y+i, z=pos.z}, {name="default:jungletree"})
minetest.env:add_node({x=pos.x+1, y=pos.y+i, z=pos.z-1}, {name="default:jungletree"})
minetest.env:add_node({x=pos.x, y=pos.y+i, z=pos.z-1}, {name="default:jungletree"})
minetest.env:add_node({x=pos.x, y=pos.y+i, z=pos.z}, {name="default:jungletree"})
end
end
end
end
--nodes
local leaves = {"green","yellow","red"}
for color = 1, 3 do
local leave_name = "trees:leaves_"..leaves[color]
minetest.register_node(leave_name, {
description = "Jungle Tree Leaves",
drawtype = "allfaces_optional",
tiles = {"trees_leaves_"..leaves[color]..".png"},
paramtype = "light",
groups = {snappy=3, leafdecay=3, flammable=2},
drop = {
max_items = 1,
items = {
{items = {'trees:jungletree_sapling'},rarity = 20},
}
},
sounds = default.node_sound_leaves_defaults(),
})
end
minetest.register_node("trees:jungletree_sapling", {
description = "Jungle Tree Sapling",
drawtype = "plantlike",
visual_scale = 1.0,
tiles = {"trees_jungletree_sapling.png"},
inventory_image = "trees_jungletree_sapling.png",
wield_image = "trees_jungletree_sapling.png",
paramtype = "light",
walkable = false,
groups = {snappy=2,dig_immediate=3,flammable=2},
})
--abm
minetest.register_abm({
nodenames = {"trees:jungletree_sapling"},
interval = 5,
chance = 2,
action = function(pos, node)
abstract_trees.grow_jungletree(pos)
end,
})
--spawn
plantslib:register_generate_plant({
surface = "default:dirt_with_grass",
max_count = 30,
avoid_nodes = {"group:tree"},
avoid_radius = 2,
rarity = 40,
seed_diff = 112,
min_elevation = -1,
max_elevation = 40,
plantlife_limit = -0.6,
humidity_max = -0.9,
humidity_min = 0.4,
temp_max = -0.9,
temp_min = 0,
},
"abstract_trees.grow_jungletree"
)

127
mangrovetree.lua Normal file
View File

@ -0,0 +1,127 @@
--function
local function add_leaves(pos, leave)
for i = math.floor(math.random(2)), -math.floor(math.random(2)), -1 do
for k = math.floor(math.random(2)), -math.floor(math.random(2)), -1 do
for n = math.floor(math.random(1)), 0, -1 do
local p = {x=pos.x+i, y=pos.y+n, z=pos.z+k}
local n = minetest.env:get_node(p)
if (n.name=="air") then
minetest.env:add_node(p, {name=leave})
end
end
end
end
end
abstract_trees.grow_mangrovetree = function(pos)
local size = 6+math.random(6)
local trunk_node
local leaves_node
if math.ceil(math.random(2)) == 1 then
trunk_node = "trees:tree_dead_mangrove"
leaves_node = "trees:leaves_dead_mangrove"
else
trunk_node = "trees:tree_mangrove"
leaves_node = "trees:leaves_mangrove"
end
local top = {x=pos.x, y=pos.y+size, z=pos.z}
if math.ceil(math.random(2)) == 1 then
minetest.env:add_node({x=top.x+1, y=top.y, z=top.z}, {name=trunk_node})
add_leaves({x=top.x+1, y=top.y, z=top.z},leaves_node)
minetest.env:add_node({x=top.x-1, y=top.y, z=top.z}, {name=trunk_node})
add_leaves({x=top.x-1, y=top.y, z=top.z},leaves_node)
else
minetest.env:add_node({x=top.x, y=top.y, z=top.z-1}, {name=trunk_node})
add_leaves({x=top.x, y=top.y, z=top.z-1},leaves_node)
minetest.env:add_node({x=top.x, y=top.y, z=top.z+1}, {name=trunk_node})
add_leaves({x=top.x, y=top.y, z=top.z+1},leaves_node)
end
for i=1, size, 1 do
if math.ceil(math.random(2)) == 1 then
local dir = {
x=math.ceil(math.random(3))-2,
y=math.ceil(math.random(3))-2,
z=math.ceil(math.random(3))-2,
}
if i > size/2 then
minetest.env:add_node({x=pos.x+dir.x, y=top.y-i, z=pos.z+dir.z}, {name=leaves_node})
else
minetest.env:add_node({x=pos.x+dir.x*2, y=top.y-i, z=pos.z+dir.z*2}, {name=leaves_node})
minetest.env:add_node({x=pos.x+dir.x, y=top.y-i, z=pos.z+dir.z}, {name=trunk_node})
end
end
minetest.env:add_node({x=top.x, y=top.y-i, z=top.z}, {name=trunk_node})
end
minetest.env:add_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=trunk_node})
minetest.env:add_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=trunk_node})
minetest.env:add_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=trunk_node})
minetest.env:add_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=trunk_node})
end
--nodes
name = "dead_mangrove"
minetest.register_node("trees:leaves_"..name, {
description = name.. " Leaves",
drawtype = "allfaces_optional",
tiles = {"trees_leaves_"..name..".png"},
paramtype = "light",
groups = {snappy=3, leafdecay=3, flammable=2},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("trees:tree_"..name, {
description = name.. " Tree",
tiles = {"trees_tree_top_"..name..".png", "trees_tree_top_"..name..".png", "trees_tree_"..name..".png"},
groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
name = "mangrove"
minetest.register_node("trees:leaves_"..name, {
description = name.. " Leaves",
drawtype = "allfaces_optional",
tiles = {"trees_leaves_"..name..".png"},
paramtype = "light",
groups = {snappy=3, leafdecay=3, flammable=2},
drop = {
max_items = 1,
items = {
{items = {'jungletree:sapling'},rarity = 20},
}
},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("trees:tree_"..name, {
description = name.. " Tree",
tiles = {"trees_tree_top_"..name..".png", "trees_tree_top_"..name..".png", "trees_tree_"..name..".png"},
groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("trees:wood_"..name, {
description = name.. " Wood",
tiles = {"trees_wood_"..name..".png"},
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
sounds = default.node_sound_wood_defaults(),
})
--spawning
plantslib:register_generate_plant({
surface = "default:dirt",
max_count = 30,
near_nodes = {"default:water_source"},
near_nodes_size = 1,
near_nodes_vertical = 3,
near_nodes_count = 6,
avoid_nodes = {"group:tree", "default:sand"},
avoid_radius = 3,
rarity = 50,
seed_diff = 666,
min_elevation = -3,
max_elevation = 2,
plantlife_limit = -0.5,
check_air = false,
humidity_max = -1,
humidity_min = 0.5,
temp_max = -0.8,
temp_min = 0,
},
"abstract_trees.grow_mangrovetree"
)
--abstract_trees.grow_mangrovetree(pointed_thing.above, height)

36
nodes.lua Normal file
View File

@ -0,0 +1,36 @@
abstract_trees.trees_register_nodes_tree = function(name)
minetest.register_node("trees:leaves_"..name, {
description = name.. " Leaves",
drawtype = "allfaces_optional",
tiles = {"trees_leaves_"..name..".png"},
paramtype = "light",
groups = {snappy=3, leafdecay=3, flammable=2},
drop = {
max_items = 1,
items = {
{items = {'jungletree:sapling'},rarity = 20},
}
},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("trees:tree_"..name, {
description = name.. " Tree",
tiles = {"trees_tree_top_"..name..".png", "trees_tree_top_"..name..".png", "trees_tree_"..name..".png"},
groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("trees:wood_"..name, {
description = name.. " Wood",
tiles = {"trees_wood_"..name..".png"},
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
sounds = default.node_sound_wood_defaults(),
})
end
abstract_trees.trees_register_nodes_tree("palm")
abstract_trees.trees_register_nodes_tree("mangrove")

86
palmtree.lua Normal file
View File

@ -0,0 +1,86 @@
--function
abstract_trees.grow_palmtree = function(pos, size)
local size = 4+math.random(6)
local trunk_section_height = 2
local trunk_node = "trees:tree_palm"
local leaves_node = "trees:leaves_palm"
local offset = {x=pos.x, y=pos.y+size+1, z=pos.z}
local total_size = 0
local leavetrav = 0
for i=0,size/2.5,1 do
for ii=0,size/2.5-i,1 do
local spawn_pos = {x=offset.x, y=offset.y-i, z=offset.z+leavetrav}
minetest.env:add_node(spawn_pos, {name=leaves_node})
local spawn_pos = {x=offset.x, y=offset.y-i, z=offset.z-leavetrav}
minetest.env:add_node(spawn_pos, {name=leaves_node})
local spawn_pos = {x=offset.x+leavetrav, y=offset.y-i, z=offset.z}
minetest.env:add_node(spawn_pos, {name=leaves_node})
local spawn_pos = {x=offset.x-leavetrav, y=offset.y-i, z=offset.z}
minetest.env:add_node(spawn_pos, {name=leaves_node})
leavetrav = leavetrav + 1
end
leavetrav = leavetrav - 1
end
local offset = {x=pos.x, y=pos.y, z=pos.z}
while total_size < size do
for i=trunk_section_height-2,trunk_section_height*2-4,1 do
if total_size > size then return end
local spawn_pos = {x=offset.x, y=pos.y+size-i, z=offset.z}
minetest.env:add_node(spawn_pos, {name=trunk_node})
total_size = total_size + 1
end
offset = {x=offset.x+math.ceil(math.random(3))-2, y=offset.y, z=offset.z+math.ceil(math.random(3))-2}
trunk_section_height = trunk_section_height * 2 -1
end
end
--nodes
name = "palm"
minetest.register_node("trees:leaves_"..name, {
description = name.. " Leaves",
drawtype = "allfaces_optional",
tiles = {"trees_leaves_palm.png"},
paramtype = "light",
groups = {snappy=3, flammable=2},
drop = {
max_items = 1,
items = {
{items = {'trees:sapling_palm'},rarity = 20},
}
},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("trees:tree_"..name, {
description = name.. " Tree",
tiles = {"trees_tree_top_"..name..".png", "trees_tree_top_"..name..".png", "trees_tree_"..name..".png"},
groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("trees:wood_"..name, {
description = name.. " Wood",
tiles = {"trees_wood_"..name..".png"},
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
sounds = default.node_sound_wood_defaults(),
})
--spawn
plantslib:register_generate_plant({
surface = "default:sand",
seed_diff = 330,
min_elevation = -1,
max_elevation = 5,
near_nodes = {"default:water_source"},
near_nodes_size = 15,
near_nodes_count = 6,
avoid_nodes = {"group:tree"},
avoid_radius = 9,
plantlife_limit = -0.8,
temp_min = 0.15,
temp_max = -0.25,
rarity = 50,
max_count = 10,
},
"abstract_trees.grow_palmtree"
)

22
readme.txt Normal file
View File

@ -0,0 +1,22 @@
_______ ______ _______ _______ _______
| || _ | | || || |
|_ _|| | || | ___|| ___|| _____|
| | | |_||_ | |___ | |___ | |_____
| | | __ || ___|| ___||_____ |
| | | | | || |___ | |___ _____| |
|___| |___| |_||_______||_______||_______|
BY: bas080
DESCRIPTION: Bigger trees but still tiny trees
VERSION: 1.0
LICENCE: WTFPL
FORUM: http://forum.minetest.net/viewtopic.php?id=2344
Changelog
---------
1.0
* Trees
- Palm
- Mangrove
- Jungle
* Spawning of trees

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 B