Add tnt mod (freeminer version)
							
								
								
									
										45
									
								
								mods/tnt/README.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					=== TNT-MOD for MINETEST-C55 ===
 | 
				
			||||||
 | 
					by PilzAdam
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Introduction:
 | 
				
			||||||
 | 
					This mod adds TNT to Minetest. TNT is a tool to help the player
 | 
				
			||||||
 | 
					in mining.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					How to install:
 | 
				
			||||||
 | 
					Unzip the archive an place it in minetest-base-directory/mods/minetest/
 | 
				
			||||||
 | 
					if you have a windows client or a linux run-in-place client. If you have
 | 
				
			||||||
 | 
					a linux system-wide instalation place it in ~/.minetest/mods/minetest/.
 | 
				
			||||||
 | 
					If you want to install this mod only in one world create the folder
 | 
				
			||||||
 | 
					worldmods/ in your worlddirectory.
 | 
				
			||||||
 | 
					For further information or help see:
 | 
				
			||||||
 | 
					http://wiki.minetest.com/wiki/Installing_Mods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					How to use the mod:
 | 
				
			||||||
 | 
					Craft gunpowder by placing coal and gravel in the crafting area. The
 | 
				
			||||||
 | 
					gunpowder can be used to craft TNT or as fuze for TNT. To craft TNT
 | 
				
			||||||
 | 
					surround gunpowder with 4 wood in a + shape.
 | 
				
			||||||
 | 
					There are different ways to blow up TNT:
 | 
				
			||||||
 | 
					1. Hit it with a torch.
 | 
				
			||||||
 | 
					2. Hit a gunpowder fuze that leads to a TNT block with a torch.
 | 
				
			||||||
 | 
					3. Activate it with mesecons (fastest way)
 | 
				
			||||||
 | 
					Be aware of the damage radius of 7 blocks!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					License:
 | 
				
			||||||
 | 
					WTFPL (see below)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See also:
 | 
				
			||||||
 | 
					http://minetest.net/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 | 
				
			||||||
 | 
					                    Version 2, December 2004
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Everyone is permitted to copy and distribute verbatim or modified
 | 
				
			||||||
 | 
					 copies of this license document, and changing it is allowed as long
 | 
				
			||||||
 | 
					 as the name is changed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 | 
				
			||||||
 | 
					   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  0. You just DO WHAT THE FUCK YOU WANT TO.
 | 
				
			||||||
							
								
								
									
										2
									
								
								mods/tnt/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					default
 | 
				
			||||||
 | 
					fire
 | 
				
			||||||
							
								
								
									
										350
									
								
								mods/tnt/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,350 @@
 | 
				
			|||||||
 | 
					-- loss probabilities array (one in X will be lost)
 | 
				
			||||||
 | 
					local loss_prob = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					loss_prob["default:cobble"] = 3
 | 
				
			||||||
 | 
					loss_prob["default:dirt"] = 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local radius_max = tonumber(minetest.setting_get("tnt_radius_max") or 25)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local eject_drops = function(pos, stack)
 | 
				
			||||||
 | 
						local obj = minetest.add_item(pos, stack)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if obj == nil then
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						obj:get_luaentity().collect = true
 | 
				
			||||||
 | 
						obj:setacceleration({x=0, y=-10, z=0})
 | 
				
			||||||
 | 
						obj:setvelocity({x=math.random(0,6)-3, y=10, z=math.random(0,6)-3})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local add_drop = function(drops, pos, item)
 | 
				
			||||||
 | 
						if loss_prob[item] ~= nil then
 | 
				
			||||||
 | 
							if math.random(1,loss_prob[item]) == 1 then
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if drops[item] == nil then
 | 
				
			||||||
 | 
							drops[item] = ItemStack(item)
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							drops[item]:add_item(item)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if drops[item]:get_free_space() == 0 then
 | 
				
			||||||
 | 
							stack = drops[item]
 | 
				
			||||||
 | 
							eject_drops(pos, stack)
 | 
				
			||||||
 | 
							drops[item] = nil
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local destroy = function(drops, pos, last, fast)
 | 
				
			||||||
 | 
						local nodename = minetest.get_node(pos).name
 | 
				
			||||||
 | 
						if nodename ~= "air" then
 | 
				
			||||||
 | 
							minetest.remove_node(pos, (fast and 1 or 0))
 | 
				
			||||||
 | 
							if last then
 | 
				
			||||||
 | 
								nodeupdate(pos)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							if minetest.registered_nodes[nodename].groups.flammable ~= nil then
 | 
				
			||||||
 | 
								minetest.set_node(pos, {name="fire:basic_flame"}, (fast and 2 or 0))
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							local drop = minetest.get_node_drops(nodename, "")
 | 
				
			||||||
 | 
							for _,item in ipairs(drop) do
 | 
				
			||||||
 | 
								if type(item) == "string" then
 | 
				
			||||||
 | 
									add_drop(drops, pos, item)
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									for i=1,item:get_count() do
 | 
				
			||||||
 | 
										add_drop(drops, pos, item:get_name())
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					boom = function(pos, time)
 | 
				
			||||||
 | 
						minetest.after(time, function(pos)
 | 
				
			||||||
 | 
							if minetest.get_node(pos).name ~= "tnt:tnt_burning" then
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							minetest.sound_play("tnt_explode", {pos=pos, gain=1.5, max_hear_distance=2*64})
 | 
				
			||||||
 | 
							minetest.set_node(pos, {name="tnt:boom"})
 | 
				
			||||||
 | 
							minetest.after(0.5, function(pos)
 | 
				
			||||||
 | 
								minetest.remove_node(pos)
 | 
				
			||||||
 | 
							end, {x=pos.x, y=pos.y, z=pos.z})
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							local radius = 2
 | 
				
			||||||
 | 
							local drops = {}
 | 
				
			||||||
 | 
							local list = {}
 | 
				
			||||||
 | 
							local dr = 0
 | 
				
			||||||
 | 
							local tnts = 1
 | 
				
			||||||
 | 
							local destroyed = 0
 | 
				
			||||||
 | 
							while dr<radius do
 | 
				
			||||||
 | 
								dr=dr+1
 | 
				
			||||||
 | 
								for dx=-dr,dr,dr*2 do
 | 
				
			||||||
 | 
									for dy=-dr,dr,1 do
 | 
				
			||||||
 | 
										for dz=-dr,dr,1 do
 | 
				
			||||||
 | 
											table.insert(list, {x=dx, y=dy, z=dz})
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								for dy=-dr,dr,dr*2 do
 | 
				
			||||||
 | 
									for dx=-dr+1,dr-1,1 do
 | 
				
			||||||
 | 
										for dz=-dr,dr,1 do
 | 
				
			||||||
 | 
											table.insert(list, {x=dx, y=dy, z=dz})
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								for dz=-dr,dr,dr*2 do
 | 
				
			||||||
 | 
									for dx=-dr+1,dr-1,1 do
 | 
				
			||||||
 | 
										for dy=-dr+1,dr-1,1 do
 | 
				
			||||||
 | 
											table.insert(list, {x=dx, y=dy, z=dz})
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
									for _,p in ipairs(list) do
 | 
				
			||||||
 | 
										local np = {x=pos.x+p.x, y=pos.y+p.y, z=pos.z+p.z}
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										local node =  minetest.get_node(np)
 | 
				
			||||||
 | 
										if node.name == "air" then
 | 
				
			||||||
 | 
										elseif node.name == "tnt:tnt" or node.name == "tnt:tnt_burning" then
 | 
				
			||||||
 | 
											if radius < radius_max then
 | 
				
			||||||
 | 
												if radius <= 5 then
 | 
				
			||||||
 | 
													radius = radius + 1
 | 
				
			||||||
 | 
												elseif radius <= 10 then
 | 
				
			||||||
 | 
													radius = radius + 0.5
 | 
				
			||||||
 | 
												else
 | 
				
			||||||
 | 
													radius = radius + 0.3
 | 
				
			||||||
 | 
												end
 | 
				
			||||||
 | 
												minetest.remove_node(np, 2)
 | 
				
			||||||
 | 
											tnts = tnts + 1
 | 
				
			||||||
 | 
											else
 | 
				
			||||||
 | 
											minetest.set_node(np, {name="tnt:tnt_burning"})
 | 
				
			||||||
 | 
											boom(np, 1)
 | 
				
			||||||
 | 
											end
 | 
				
			||||||
 | 
										elseif node.name == "fire:basic_flame"
 | 
				
			||||||
 | 
											--or string.find(node.name, "default:water_") 
 | 
				
			||||||
 | 
											--or string.find(node.name, "default:lava_") 
 | 
				
			||||||
 | 
											or node.name == "tnt:boom"
 | 
				
			||||||
 | 
											then
 | 
				
			||||||
 | 
											
 | 
				
			||||||
 | 
										else
 | 
				
			||||||
 | 
											if math.abs(p.x)<2 and math.abs(p.y)<2 and math.abs(p.z)<2 then
 | 
				
			||||||
 | 
												destroy(drops, np, dr == radius, radius > 7)
 | 
				
			||||||
 | 
												destroyed = destroyed + 1
 | 
				
			||||||
 | 
											else
 | 
				
			||||||
 | 
												if math.random(1,5) <= 4 then
 | 
				
			||||||
 | 
													destroy(drops, np, dr == radius, radius > 7)
 | 
				
			||||||
 | 
													destroyed = destroyed + 1
 | 
				
			||||||
 | 
												end
 | 
				
			||||||
 | 
											end
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							local objects = minetest.get_objects_inside_radius(pos, radius*2)
 | 
				
			||||||
 | 
							for _,obj in ipairs(objects) do
 | 
				
			||||||
 | 
								--if obj:is_player() or (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then
 | 
				
			||||||
 | 
									local p = obj:getpos()
 | 
				
			||||||
 | 
									local v = obj:getvelocity()
 | 
				
			||||||
 | 
									local vec = {x=p.x-pos.x, y=p.y-pos.y, z=p.z-pos.z}
 | 
				
			||||||
 | 
									local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5
 | 
				
			||||||
 | 
									local damage = ((radius*20)/dist)
 | 
				
			||||||
 | 
									--print("DMG dist="..dist.." damage="..damage)
 | 
				
			||||||
 | 
									if obj:is_player() or (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then
 | 
				
			||||||
 | 
									obj:punch(obj, 1.0, {
 | 
				
			||||||
 | 
										full_punch_interval=1.0,
 | 
				
			||||||
 | 
										damage_groups={fleshy=damage},
 | 
				
			||||||
 | 
									}, vec)
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
									if v ~= nil then
 | 
				
			||||||
 | 
										--obj:setvelocity({x=(p.x - pos.x) + (radius / 4) + v.x, y=(p.y - pos.y) + (radius / 2) + v.y, z=(p.z - pos.z) + (radius / 4) + v.z})
 | 
				
			||||||
 | 
										obj:setvelocity({x=(p.x - pos.x) + (radius / 2) + v.x, y=(p.y - pos.y) + radius + v.y,       z=(p.z - pos.z) + (radius / 2) + v.z})
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								--end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							print("TNT exploded=" .. tnts .. " radius=" .. radius .. " destroyed="..destroyed)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for _,stack in pairs(drops) do
 | 
				
			||||||
 | 
								eject_drops(pos, stack)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							local radiusp = radius+1
 | 
				
			||||||
 | 
							minetest.add_particlespawner(
 | 
				
			||||||
 | 
								100, --amount
 | 
				
			||||||
 | 
								0.1, --time
 | 
				
			||||||
 | 
								{x=pos.x-radiusp, y=pos.y-radiusp, z=pos.z-radiusp}, --minpos
 | 
				
			||||||
 | 
								{x=pos.x+radiusp, y=pos.y+radiusp, z=pos.z+radiusp}, --maxpos
 | 
				
			||||||
 | 
								{x=-0, y=-0, z=-0}, --minvel
 | 
				
			||||||
 | 
								{x=0, y=0, z=0}, --maxvel
 | 
				
			||||||
 | 
								{x=-0.5,y=5,z=-0.5}, --minacc
 | 
				
			||||||
 | 
								{x=0.5,y=5,z=0.5}, --maxacc
 | 
				
			||||||
 | 
								0.1, --minexptime
 | 
				
			||||||
 | 
								1, --maxexptime
 | 
				
			||||||
 | 
								8, --minsize
 | 
				
			||||||
 | 
								15, --maxsize
 | 
				
			||||||
 | 
								false, --collisiondetection
 | 
				
			||||||
 | 
								"tnt_smoke.png" --texture
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
						end, pos)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_node("tnt:tnt", {
 | 
				
			||||||
 | 
						description = "TNT",
 | 
				
			||||||
 | 
						tiles = {"tnt_top.png", "tnt_bottom.png", "tnt_side.png"},
 | 
				
			||||||
 | 
						groups = {dig_immediate=2, mesecon=2},
 | 
				
			||||||
 | 
						sounds = default.node_sound_wood_defaults(),
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						on_punch = function(pos, node, puncher)
 | 
				
			||||||
 | 
							if puncher:get_wielded_item():get_name() == "default:torch" then
 | 
				
			||||||
 | 
								minetest.sound_play("tnt_ignite", {pos=pos})
 | 
				
			||||||
 | 
								minetest.set_node(pos, {name="tnt:tnt_burning"})
 | 
				
			||||||
 | 
								boom(pos, 4)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						mesecons = {
 | 
				
			||||||
 | 
							effector = {
 | 
				
			||||||
 | 
								action_on = function(pos, node)
 | 
				
			||||||
 | 
									minetest.set_node(pos, {name="tnt:tnt_burning"})
 | 
				
			||||||
 | 
									boom(pos, 0)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_node("tnt:tnt_burning", {
 | 
				
			||||||
 | 
						tiles = {{name="tnt_top_burning_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1}}, "tnt_bottom.png", "tnt_side.png"},
 | 
				
			||||||
 | 
						light_source = 5,
 | 
				
			||||||
 | 
						drop = "",
 | 
				
			||||||
 | 
						sounds = default.node_sound_wood_defaults(),
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_node("tnt:boom", {
 | 
				
			||||||
 | 
						drawtype = "plantlike",
 | 
				
			||||||
 | 
						tiles = {"tnt_boom.png"},
 | 
				
			||||||
 | 
						light_source = LIGHT_MAX,
 | 
				
			||||||
 | 
						walkable = false,
 | 
				
			||||||
 | 
						drop = "",
 | 
				
			||||||
 | 
						groups = {dig_immediate=3},
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					burn = function(pos)
 | 
				
			||||||
 | 
						if minetest.get_node(pos).name == "tnt:tnt" then
 | 
				
			||||||
 | 
							minetest.sound_play("tnt_ignite", {pos=pos})
 | 
				
			||||||
 | 
							minetest.set_node(pos, {name="tnt:tnt_burning"})
 | 
				
			||||||
 | 
							boom(pos, 1)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						if minetest.get_node(pos).name ~= "tnt:gunpowder" then
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						minetest.sound_play("tnt_gunpowder_burning", {pos=pos, gain=2})
 | 
				
			||||||
 | 
						minetest.set_node(pos, {name="tnt:gunpowder_burning"})
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						minetest.after(1, function(pos)
 | 
				
			||||||
 | 
							if minetest.get_node(pos).name ~= "tnt:gunpowder_burning" then
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							minetest.after(0.5, function(pos)
 | 
				
			||||||
 | 
								minetest.remove_node(pos)
 | 
				
			||||||
 | 
							end, {x=pos.x, y=pos.y, z=pos.z})
 | 
				
			||||||
 | 
							for dx=-1,1 do
 | 
				
			||||||
 | 
								for dz=-1,1 do
 | 
				
			||||||
 | 
									for dy=-1,1 do
 | 
				
			||||||
 | 
										pos.x = pos.x+dx
 | 
				
			||||||
 | 
										pos.y = pos.y+dy
 | 
				
			||||||
 | 
										pos.z = pos.z+dz
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										if not (math.abs(dx) == 1 and math.abs(dz) == 1) then
 | 
				
			||||||
 | 
											if dy == 0 then
 | 
				
			||||||
 | 
												burn({x=pos.x, y=pos.y, z=pos.z})
 | 
				
			||||||
 | 
											else
 | 
				
			||||||
 | 
												if math.abs(dx) == 1 or math.abs(dz) == 1 then
 | 
				
			||||||
 | 
													burn({x=pos.x, y=pos.y, z=pos.z})
 | 
				
			||||||
 | 
												end
 | 
				
			||||||
 | 
											end
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										pos.x = pos.x-dx
 | 
				
			||||||
 | 
										pos.y = pos.y-dy
 | 
				
			||||||
 | 
										pos.z = pos.z-dz
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end, pos)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_node("tnt:gunpowder", {
 | 
				
			||||||
 | 
						description = "Gun Powder",
 | 
				
			||||||
 | 
						drawtype = "raillike",
 | 
				
			||||||
 | 
						paramtype = "light",
 | 
				
			||||||
 | 
						sunlight_propagates = true,
 | 
				
			||||||
 | 
						walkable = false,
 | 
				
			||||||
 | 
						tiles = {"tnt_gunpowder.png",},
 | 
				
			||||||
 | 
						inventory_image = "tnt_gunpowder_inventory.png",
 | 
				
			||||||
 | 
						wield_image = "tnt_gunpowder_inventory.png",
 | 
				
			||||||
 | 
						selection_box = {
 | 
				
			||||||
 | 
							type = "fixed",
 | 
				
			||||||
 | 
							fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						groups = {dig_immediate=2,attached_node=1},
 | 
				
			||||||
 | 
						sounds = default.node_sound_leaves_defaults(),
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						on_punch = function(pos, node, puncher)
 | 
				
			||||||
 | 
							if puncher:get_wielded_item():get_name() == "default:torch" then
 | 
				
			||||||
 | 
								burn(pos)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_node("tnt:gunpowder_burning", {
 | 
				
			||||||
 | 
						drawtype = "raillike",
 | 
				
			||||||
 | 
						paramtype = "light",
 | 
				
			||||||
 | 
						sunlight_propagates = true,
 | 
				
			||||||
 | 
						walkable = false,
 | 
				
			||||||
 | 
						light_source = 5,
 | 
				
			||||||
 | 
						tiles = {{name="tnt_gunpowder_burning_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1}}},
 | 
				
			||||||
 | 
						selection_box = {
 | 
				
			||||||
 | 
							type = "fixed",
 | 
				
			||||||
 | 
							fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						drop = "",
 | 
				
			||||||
 | 
						groups = {dig_immediate=2,attached_node=1},
 | 
				
			||||||
 | 
						sounds = default.node_sound_leaves_defaults(),
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_abm({
 | 
				
			||||||
 | 
						nodenames = {"tnt:tnt", "tnt:gunpowder"},
 | 
				
			||||||
 | 
						neighbors = {"fire:basic_flame", "default:lava_source", "default:lava_flowing"},
 | 
				
			||||||
 | 
						interval = 2,
 | 
				
			||||||
 | 
						chance = 10,
 | 
				
			||||||
 | 
						action = function(pos, node)
 | 
				
			||||||
 | 
							if node.name == "tnt:tnt" then
 | 
				
			||||||
 | 
								minetest.set_node(pos, {name="tnt:tnt_burning"})
 | 
				
			||||||
 | 
								boom({x=pos.x, y=pos.y, z=pos.z}, 0)
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								burn(pos)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft({
 | 
				
			||||||
 | 
						output = "tnt:gunpowder",
 | 
				
			||||||
 | 
						type = "shapeless",
 | 
				
			||||||
 | 
						recipe = {"default:coal_lump", "default:gravel"}
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft({
 | 
				
			||||||
 | 
						output = "tnt:tnt",
 | 
				
			||||||
 | 
						recipe = {
 | 
				
			||||||
 | 
							{"", "group:wood", ""},
 | 
				
			||||||
 | 
							{"group:wood", "tnt:gunpowder", "group:wood"},
 | 
				
			||||||
 | 
							{"", "group:wood", ""}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if minetest.setting_get("log_mods") then
 | 
				
			||||||
 | 
						minetest.log("action", "tnt loaded")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/sounds/tnt_explode.ogg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/sounds/tnt_gunpowder_burning.ogg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/sounds/tnt_ignite.ogg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/textures/tnt_boom.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 330 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/textures/tnt_bottom.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 160 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/textures/tnt_gunpowder.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 516 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/textures/tnt_gunpowder_burning.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 536 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/textures/tnt_gunpowder_burning_animated.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 455 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/textures/tnt_gunpowder_inventory.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 455 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/textures/tnt_side.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 191 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/textures/tnt_smoke.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 323 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/textures/tnt_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 243 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/textures/tnt_top_burning.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 275 B  | 
							
								
								
									
										
											BIN
										
									
								
								mods/tnt/textures/tnt_top_burning_animated.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 458 B  |