diff --git a/mods/rangedweapons/init.lua b/mods/rangedweapons/init.lua new file mode 100644 index 00000000..47b36511 --- /dev/null +++ b/mods/rangedweapons/init.lua @@ -0,0 +1,159 @@ +local modpath = minetest.get_modpath(minetest.get_current_modname()) + +dofile(modpath.."/settings.lua") +dofile(modpath.."/misc.lua") +dofile(modpath.."/e11.lua") +dofile(modpath.."/explosives.lua") +dofile(modpath.."/door_breaking.lua") +dofile(modpath.."/glass_breaking.lua") + +local rangedweapons_empty_shell = { + physical = false, + timer = 0, + visual = "wielditem", + visual_size = {x=0.3, y=0.3}, + textures = {"rangedweapons:shelldrop"}, + lastpos= {}, + collisionbox = {0, 0, 0, 0, 0, 0}, +} +rangedweapons_empty_shell.on_step = function(self, dtime, pos) + self.timer = self.timer + dtime + local pos = self.object:getpos() + local node = minetest.get_node(pos) + if self.lastpos.y ~= nil then + if minetest.registered_nodes[node.name].walkable then + local vel = self.object:getvelocity() + local acc = self.object:getacceleration() + self.object:setvelocity({x=vel.x*-0.3, y=vel.y*-0.75, z=vel.z*-0.3}) + minetest.sound_play("rangedweapons_shellhit", {pos = self.lastpos, gain = 0.8}) + self.object:setacceleration({x=acc.x, y=acc.y, z=acc.z}) + end + end + if self.timer > 1.69 then + minetest.sound_play("rangedweapons_bulletdrop", {pos = self.lastpos, gain = 0.8}) + self.object:remove() + + end + self.lastpos= {x = pos.x, y = pos.y, z = pos.z} +end + +minetest.register_entity("rangedweapons:empty_shell", rangedweapons_empty_shell ) + + + +local rangedweapons_empty_shell_shotgun = { + physical = false, + timer = 0, + visual = "wielditem", + visual_size = {x=0.35, y=0.35}, + textures = {"rangedweapons:shell_shotgundrop"}, + lastpos= {}, + collisionbox = {0, 0, 0, 0, 0, 0}, +} +rangedweapons_empty_shell_shotgun.on_step = function(self, dtime, pos) + self.timer = self.timer + dtime + local pos = self.object:getpos() + local node = minetest.get_node(pos) + if self.lastpos.y ~= nil then + if minetest.registered_nodes[node.name].walkable then + local vel = self.object:getvelocity() + local acc = self.object:getacceleration() + self.object:setvelocity({x=vel.x*-0.3, y=vel.y*-0.75, z=vel.z*-0.3}) + minetest.sound_play("rangedweapons_shellhit", {pos = self.lastpos, gain = 0.8}) + self.object:setacceleration({x=acc.x, y=acc.y, z=acc.z}) + end + end + if self.timer > 1.69 then + minetest.sound_play("rangedweapons_bulletdrop", {pos = self.lastpos, gain = 0.8}) + self.object:remove() + + end + self.lastpos= {x = pos.x, y = pos.y, z = pos.z} +end + +minetest.register_entity("rangedweapons:empty_shell_shotgun", rangedweapons_empty_shell_shotgun ) + + + +local rangedweapons_empty_shell_white = { + physical = false, + timer = 0, + visual = "wielditem", + visual_size = {x=0.30, y=0.30}, + textures = {"rangedweapons:shell_whitedrop"}, + lastpos= {}, + collisionbox = {0, 0, 0, 0, 0, 0}, +} +rangedweapons_empty_shell_white.on_step = function(self, dtime, pos) + self.timer = self.timer + dtime + local pos = self.object:getpos() + local node = minetest.get_node(pos) + if self.lastpos.y ~= nil then + if minetest.registered_nodes[node.name].walkable then + local vel = self.object:getvelocity() + local acc = self.object:getacceleration() + self.object:setvelocity({x=vel.x*-0.3, y=vel.y*-0.75, z=vel.z*-0.3}) + minetest.sound_play("rangedweapons_shellhit", {pos = self.lastpos, gain = 0.8}) + self.object:setacceleration({x=acc.x, y=acc.y, z=acc.z}) + end + end + if self.timer > 1.69 then + minetest.sound_play("rangedweapons_bulletdrop", {pos = self.lastpos, gain = 0.8}) + self.object:remove() + + end + self.lastpos= {x = pos.x, y = pos.y, z = pos.z} +end + +minetest.register_entity("rangedweapons:empty_shell_white", rangedweapons_empty_shell_white ) + + + +local rangedweapons_empty_shell_grenade = { + physical = false, + timer = 0, + visual = "wielditem", + visual_size = {x=0.30, y=0.30}, + textures = {"rangedweapons:shell_grenadedrop"}, + lastpos= {}, + collisionbox = {0, 0, 0, 0, 0, 0}, +} +rangedweapons_empty_shell_grenade.on_step = function(self, dtime, pos) + self.timer = self.timer + dtime + local pos = self.object:getpos() + local node = minetest.get_node(pos) + if self.lastpos.y ~= nil then + if minetest.registered_nodes[node.name].walkable then + local vel = self.object:getvelocity() + local acc = self.object:getacceleration() + self.object:setvelocity({x=vel.x*-0.3, y=vel.y*-0.75, z=vel.z*-0.3}) + minetest.sound_play("rangedweapons_shellhit", {pos = self.lastpos, gain = 0.8}) + self.object:setacceleration({x=acc.x, y=acc.y, z=acc.z}) + end + end + if self.timer > 1.69 then + minetest.sound_play("rangedweapons_bulletdrop", {pos = self.lastpos, gain = 0.8}) + self.object:remove() + + end + self.lastpos= {x = pos.x, y = pos.y, z = pos.z} +end + +minetest.register_entity("rangedweapons:empty_shell_grenade", rangedweapons_empty_shell_grenade ) + + +minetest.register_abm({ + nodenames = {"doors:hidden"}, + interval = 1, + chance = 1, + action = function(pos, node) + pos.y = pos.y-1 + if minetest.get_node(pos).name == "air" then + pos.y = pos.y+1 + node.name = "air" + minetest.set_node(pos, node) + end + end +}) + + diff --git a/mods/rangedweapons/license.txt b/mods/rangedweapons/license.txt new file mode 100644 index 00000000..b9242b1d --- /dev/null +++ b/mods/rangedweapons/license.txt @@ -0,0 +1 @@ +cc-by-sa 3.0 \ No newline at end of file diff --git a/mods/rangedweapons/misc.lua b/mods/rangedweapons/misc.lua new file mode 100644 index 00000000..6926ed84 --- /dev/null +++ b/mods/rangedweapons/misc.lua @@ -0,0 +1,100 @@ + + +minetest.register_craftitem("rangedweapons:shell_shotgundrop", { + wield_scale = {x=2.5,y=1.5,z=1.0}, + inventory_image = "rangedweapons_shelldrop_shotgun.png", +}) + +minetest.register_craftitem("rangedweapons:shell_whitedrop", { + wield_scale = {x=2.5,y=1.5,z=1.0}, + inventory_image = "rangedweapons_shelldrop_white.png", +}) + +minetest.register_craftitem("rangedweapons:shell_grenadedrop", { + wield_scale = {x=2.5,y=1.5,z=3.0}, + inventory_image = "rangedweapons_shelldrop_grenade.png", +}) + +minetest.register_craftitem("rangedweapons:shelldrop", { + wield_scale = {x=2.5,y=1.5,z=1.0}, + inventory_image = "rangedweapons_shelldrop.png", +}) + +minetest.register_craftitem("rangedweapons:plastic_sheet", { + description = "" ..core.colorize("#35cdff","Black plastic sheet\n")..core.colorize("#FFFFFF", "Used in guncraft"), + inventory_image = "rangedweapons_plastic_sheet.png", +}) + +minetest.register_craftitem("rangedweapons:gunsteel_ingot", { + description = "" ..core.colorize("#35cdff","GunSteel ingot\n")..core.colorize("#FFFFFF", "A strong, but light alloy, used in guncraft"), + inventory_image = "rangedweapons_gunsteel_ingot.png", +}) +minetest.register_craft({ + output = "rangedweapons:gunsteel_ingot", + recipe = { + {"default:steel_ingot", "default:tin_ingot", "default:coal_lump"}, + } +}) +minetest.register_craftitem("rangedweapons:ultra_gunsteel_ingot", { + description = "" ..core.colorize("#35cdff","Ultra-GunSteel ingot\n")..core.colorize("#FFFFFF", "A even stronger alloy, for even stronger guns."), + inventory_image = "rangedweapons_ultra_gunsteel_ingot.png", +}) +minetest.register_craft({ + output = "rangedweapons:ultra_gunsteel_ingot", + recipe = { + {"", "default:mese_crystal", ""}, + {"default:gold_ingot", "rangedweapons:gunsteel_ingot", "default:gold_ingot"}, + {"", "default:diamond", ""}, + } +}) + +minetest.register_craft({ + output = "rangedweapons:plastic_sheet", + recipe = { + {"default:tree", "default:coal_lump", "default:tree"}, + {"default:coal_lump", "default:tree", "default:coal_lump"}, + } +}) +minetest.register_craftitem("rangedweapons:gun_power_core", { + description = "" ..core.colorize("#35cdff","Gun Power Core\n")..core.colorize("#FFFFFF", "A powerful core, for making the most powerful weapons"), + inventory_image = "rangedweapons_gun_power_core.png", +}) +minetest.register_craft({ + output = "rangedweapons:gun_power_core", + recipe = { + {"rangedweapons:gunsteel_ingot", "default:goldblock", "rangedweapons:gunsteel_ingot"}, + {"default:diamondblock", "default:mese", "default:diamondblock"}, + {"rangedweapons:gunsteel_ingot", "default:goldblock", "rangedweapons:gunsteel_ingot"}, + } +}) +minetest.register_craftitem("rangedweapons:power_particle", { + description = "Blaster Cartrage", + stack_max = 10000, + inventory_image = "blaster_cartrage.png", +}) + +local rangedweapons_smoke = { + physical = false, + timer = 0, + visual = "sprite", + visual_size = {x=0.5, y=0.5}, + textures = {"tnt_smoke.png"}, + lastpos= {}, + collisionbox = {0, 0, 0, 0, 0, 0}, +} +rangedweapons_smoke.on_step = function(self, dtime, pos) + self.timer = self.timer + dtime + local pos = self.object:getpos() + local node = minetest.get_node(pos) + if self.lastpos.x ~= nil then + if self.timer > 0.30 then + self.object:remove() + end + end + self.lastpos= {x = pos.x, y = pos.y, z = pos.z} +end + + + +minetest.register_entity("rangedweapons:smoke", rangedweapons_smoke ) + diff --git a/mods/rangedweapons/settings.lua b/mods/rangedweapons/settings.lua new file mode 100644 index 00000000..d1ef7e6c --- /dev/null +++ b/mods/rangedweapons/settings.lua @@ -0,0 +1,20 @@ +-- change "true" to "false" in order to disable a feature, or +-- "false" to "true" to enable it + +explosives = true +javelins = true +shurikens = true +handguns = true +shotguns = true +rifles = true +magnums_and_revolvers = true +machine_pistols = true +sub_machineguns = true +assault_rifles = true +power_weapons = true +glass_breaking = true +door_breaking = true +heavy_machineguns = true +minigun_aswell = true + + \ No newline at end of file