Import source (dev state between 1.2.0 and 1.3.0)
[minetest_tutorial_subgame.git] / mods / default / functions.lua
blob8cc1e9fde7f187bc765da4de43eac8bae3284667
1 -- mods/default/functions.lua
3 --
4 -- Sounds
5 --
7 function default.node_sound_defaults(table)
8 table = table or {}
9 table.footstep = table.footstep or
10 {name="", gain=1.0}
11 table.dug = table.dug or
12 {name="default_dug_node", gain=0.25}
13 table.place = table.place or
14 {name="default_place_node_hard", gain=1.0}
15 return table
16 end
18 function default.node_sound_stone_defaults(table)
19 table = table or {}
20 table.footstep = table.footstep or
21 {name="default_hard_footstep", gain=0.5}
22 table.dug = table.dug or
23 {name="default_hard_footstep", gain=1.0}
24 default.node_sound_defaults(table)
25 return table
26 end
28 function default.node_sound_dirt_defaults(table)
29 table = table or {}
30 table.footstep = table.footstep or
31 {name="default_dirt_footstep", gain=1.0}
32 table.dug = table.dug or
33 {name="default_dirt_footstep", gain=1.5}
34 table.place = table.place or
35 {name="default_place_node", gain=1.0}
36 default.node_sound_defaults(table)
37 return table
38 end
40 function default.node_sound_sand_defaults(table)
41 table = table or {}
42 table.footstep = table.footstep or
43 {name="default_sand_footstep", gain=0.5}
44 table.dug = table.dug or
45 {name="default_sand_footstep", gain=1.0}
46 table.place = table.place or
47 {name="default_place_node", gain=1.0}
48 default.node_sound_defaults(table)
49 return table
50 end
52 function default.node_sound_wood_defaults(table)
53 table = table or {}
54 table.footstep = table.footstep or
55 {name="default_wood_footstep", gain=0.5}
56 table.dug = table.dug or
57 {name="default_wood_footstep", gain=1.0}
58 default.node_sound_defaults(table)
59 return table
60 end
62 function default.node_sound_leaves_defaults(table)
63 table = table or {}
64 table.footstep = table.footstep or
65 {name="default_grass_footstep", gain=0.35}
66 table.dug = table.dug or
67 {name="default_grass_footstep", gain=0.85}
68 table.dig = table.dig or
69 {name="default_dig_crumbly", gain=0.4}
70 table.place = table.place or
71 {name="default_place_node", gain=1.0}
72 default.node_sound_defaults(table)
73 return table
74 end
76 function default.node_sound_glass_defaults(table)
77 table = table or {}
78 table.footstep = table.footstep or
79 {name="default_glass_footstep", gain=0.5}
80 table.dug = table.dug or
81 {name="default_break_glass", gain=1.0}
82 default.node_sound_defaults(table)
83 return table
84 end
87 -- Legacy
90 function default.spawn_falling_node(p, nodename)
91 spawn_falling_node(p, nodename)
92 end
95 -- Global callbacks
98 -- Global environment step function
99 function on_step(dtime)
100 -- print("on_step")
102 minetest.register_globalstep(on_step)
104 function on_placenode(p, node)
105 --print("on_placenode")
107 minetest.register_on_placenode(on_placenode)
109 function on_dignode(p, node)
110 --print("on_dignode")
112 minetest.register_on_dignode(on_dignode)
114 function on_punchnode(p, node)
116 minetest.register_on_punchnode(on_punchnode)
120 -- Grow trees
123 minetest.register_abm({
124 nodenames = {"default:sapling"},
125 interval = 10,
126 chance = 50,
127 action = function(pos, node)
128 local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
129 local is_soil = minetest.get_item_group(nu, "soil")
130 if is_soil == 0 then
131 return
134 minetest.log("action", "A sapling grows into a tree at "..minetest.pos_to_string(pos))
135 local vm = minetest.get_voxel_manip()
136 local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16})
137 local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
138 local data = vm:get_data()
139 default.grow_tree(data, a, pos, math.random(1, 4) == 1, math.random(1,100000))
140 vm:set_data(data)
141 vm:write_to_map(data)
142 vm:update_map()
146 minetest.register_abm({
147 nodenames = {"default:junglesapling"},
148 interval = 10,
149 chance = 50,
150 action = function(pos, node)
151 local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
152 local is_soil = minetest.get_item_group(nu, "soil")
153 if is_soil == 0 then
154 return
157 minetest.log("action", "A jungle sapling grows into a tree at "..minetest.pos_to_string(pos))
158 local vm = minetest.get_voxel_manip()
159 local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y-1, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16})
160 local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
161 local data = vm:get_data()
162 default.grow_jungletree(data, a, pos, math.random(1,100000))
163 vm:set_data(data)
164 vm:write_to_map(data)
165 vm:update_map()
170 -- Lavacooling
173 default.cool_lava_source = function(pos)
174 minetest.set_node(pos, {name="default:obsidian"})
175 minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25})
178 default.cool_lava_flowing = function(pos)
179 minetest.set_node(pos, {name="default:stone"})
180 minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25})
183 minetest.register_abm({
184 nodenames = {"default:lava_flowing"},
185 neighbors = {"group:water"},
186 interval = 1,
187 chance = 1,
188 action = function(pos, node, active_object_count, active_object_count_wider)
189 default.cool_lava_flowing(pos, node, active_object_count, active_object_count_wider)
190 end,
193 minetest.register_abm({
194 nodenames = {"default:lava_source"},
195 neighbors = {"group:water"},
196 interval = 1,
197 chance = 1,
198 action = function(pos, node, active_object_count, active_object_count_wider)
199 default.cool_lava_source(pos, node, active_object_count, active_object_count_wider)
200 end,
203 -- dig upwards
206 function default.dig_up(pos, node, digger)
207 if digger == nil then return end
208 local np = {x = pos.x, y = pos.y + 1, z = pos.z}
209 local nn = minetest.get_node(np)
210 if nn.name == node.name then
211 minetest.node_dig(np, nn, digger)