^ Create an explosion.
* `position` The center of explosion.
-* `definition` The TNT definion as passed to `tnt.register`
+* `definition` The TNT definion as passed to `tnt.register` with the following addition:
+ * `explode_center` false by default which removes TNT node on blast, when true will explode center node.
`tnt.burn(position, [nodename])`
collisiondetection = false,
vertical = false,
texture = "tnt_boom.png",
+ glow = 15,
})
minetest.add_particlespawner({
amount = 64,
end
end
-local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owner)
+local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owner, explode_center)
pos = vector.round(pos)
-- scan for adjacent TNT nodes first, and enlarge the explosion
local vm1 = VoxelManip()
local c_tnt_burning = minetest.get_content_id("tnt:tnt_burning")
local c_tnt_boom = minetest.get_content_id("tnt:boom")
local c_air = minetest.get_content_id("air")
+ -- make sure we still have explosion even when centre node isnt tnt related
+ if explode_center then
+ count = 1
+ end
for z = pos.z - 2, pos.z + 2 do
for y = pos.y - 2, pos.y + 2 do
function tnt.boom(pos, def)
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
+ if not def.explode_center then
+ minetest.set_node(pos, {name = "tnt:boom"})
+ end
minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 2*64})
- minetest.set_node(pos, {name = "tnt:boom"})
local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection,
- def.ignore_on_blast, owner)
+ def.ignore_on_blast, owner, def.explode_center)
-- append entity drops
local damage_radius = (radius / def.radius) * def.damage_radius
entity_physics(pos, damage_radius, drops)