From f8cf1415a86bf7f7c23fe454dad3669cef1591eb Mon Sep 17 00:00:00 2001 From: AntumDeluge Date: Fri, 5 Aug 2016 19:48:34 -0700 Subject: [PATCH] Add "throwing" mod. --- README.md | 2 + mods/player/throwing/README | 5 + mods/player/throwing/init.lua | 107 ++++++++++++++++++ .../throwing/textures/throwing_arrow.png | Bin 0 -> 492 bytes .../throwing/textures/throwing_arrow_back.png | Bin 0 -> 246 bytes .../player/throwing/textures/throwing_bow.png | Bin 0 -> 484 bytes .../throwing/textures/throwing_string.png | Bin 0 -> 382 bytes 7 files changed, 114 insertions(+) create mode 100644 mods/player/throwing/README create mode 100644 mods/player/throwing/init.lua create mode 100644 mods/player/throwing/textures/throwing_arrow.png create mode 100644 mods/player/throwing/textures/throwing_arrow_back.png create mode 100644 mods/player/throwing/textures/throwing_bow.png create mode 100644 mods/player/throwing/textures/throwing_string.png diff --git a/README.md b/README.md index 702e2c85..9b87006c 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ The following mods are also included: * [playeranim][] ([WFTLPL](mods/player/playeranim/LICENSE.txt) / [BSD](mods/player/playeranim/LICENSE-original.txt)) * shields ([3d_armor modpack][3d_armor]) * technic_armor ([3d_armor modpack][3d_armor]) + * [throwing][] (WTFPL) * [unified_inventory][] ([LGPL/WTFPL](mods/player/unified_inventory/README.md)) * [walking_light][] ([WTFPL / CC-BY-SA](mods/player/walking_light/README.md)) * [wardrobe][] ([WTFPL](mods/player/wardrobe/README.txt)) @@ -151,6 +152,7 @@ The following mods are also included: [spidermob]: https://forum.minetest.net/viewtopic.php?t=10045 [stairsplus]: https://forum.minetest.net/viewtopic.php?id=6140 [technic]: https://forum.minetest.net/viewtopic.php?t=2538 +[throwing]: https://forum.minetest.net/viewtopic.php?t=687 [tnt]: https://forum.minetest.net/viewtopic.php?id=2902 [torches]: https://forum.minetest.net/viewtopic.php?t=6099 [trees]: https://forum.minetest.net/viewtopic.php?f=11&t=5713 diff --git a/mods/player/throwing/README b/mods/player/throwing/README new file mode 100644 index 00000000..df6bf51b --- /dev/null +++ b/mods/player/throwing/README @@ -0,0 +1,5 @@ +This is a mod for Minetest-c55 that adds Bow and arrow to the game. +Check out this thread on the forums to get more information about it: +http://c55.me/minetest/forum/viewtopic.php?id=687 + +Version: 0.14 DEV diff --git a/mods/player/throwing/init.lua b/mods/player/throwing/init.lua new file mode 100644 index 00000000..cca28a76 --- /dev/null +++ b/mods/player/throwing/init.lua @@ -0,0 +1,107 @@ +-- Bow and arrow mod +-- Topic on the forum: http://c55.me/minetest/forum/viewtopic.php?id=687 + +ARROW_DAMAGE=1 +ARROW_GRAVITY=9 +ARROW_VELOCITY=19 + +throwing_shoot_arrow=function (item, player, pointed_thing) + -- Check if arrows in Inventory and remove one of them + local i=1 + if player:get_inventory():contains_item("main", "throwing:arrow") then + player:get_inventory():remove_item("main", "throwing:arrow") + -- Shoot Arrow + local playerpos=player:getpos() + local obj=minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, "throwing:arrow_entity") + local dir=player:get_look_dir() + obj:setvelocity({x=dir.x*ARROW_VELOCITY, y=dir.y*ARROW_VELOCITY, z=dir.z*ARROW_VELOCITY}) + obj:setacceleration({x=dir.x*-3, y=-ARROW_GRAVITY, z=dir.z*-3}) + end + return +end + +minetest.register_craftitem("throwing:string", { + inventory_image = "throwing_string.png", +}) + +minetest.register_craftitem("throwing:bow", { + inventory_image = "throwing_bow.png", + stack_max = 1, + on_use = throwing_shoot_arrow, +}) + +minetest.register_craftitem("throwing:arrow", { + inventory_image = "throwing_arrow.png", +}) + +-- The Arrow Entity + +THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + textures = {"throwing_arrow_back.png"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, +} + + +-- Arrow_entity.on_step()--> called when arrow is moving +THROWING_ARROW_ENTITY.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.env:get_node(pos) + + -- When arrow is away from player (after 0.2 seconds): Cause damage to mobs and players + if self.timer>0.2 then + local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + for k, obj in pairs(objs) do + obj:set_hp(obj:get_hp()-ARROW_DAMAGE) + if obj:get_entity_name() ~= "throwing:arrow_entity" then + if obj:get_hp()<=0 then + obj:remove() + end + self.object:remove() + end + end + end + + -- Become item when hitting a node + if self.lastpos.x~=nil then --If there is no lastpos for some reason + if node.name ~= "air" then + minetest.env:add_item(self.lastpos, 'throwing:arrow') + self.object:remove() + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Item will be added at last pos outside the node +end + +minetest.register_entity("throwing:arrow_entity", THROWING_ARROW_ENTITY) + + + +--CRAFTS +minetest.register_craft({ + output = 'throwing:string', + recipe = { + {'default:junglegrass'}, + {'default:junglegrass'}, + } +}) + +minetest.register_craft({ + output = 'throwing:bow', + recipe = { + {'throwing:string', 'default:wood', ''}, + {'throwing:string', '', 'default:wood'}, + {'throwing:string', 'default:wood', ''}, + } +}) + +minetest.register_craft({ + output = 'throwing:arrow 16', + recipe = { + {'default:stick', 'default:stick', 'default:steel_ingot'}, + } +}) + +print ("[Throwing_mod] Loaded!") diff --git a/mods/player/throwing/textures/throwing_arrow.png b/mods/player/throwing/textures/throwing_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea2c4b75aba82a5ab728183037323ac301132fe GIT binary patch literal 492 zcmVPx#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy8gxZibW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE-^4L^m3s900Bfv zL_t(IPjyoXj)O1^46y7=_TKKF_CEfAPz6uoM&e!EcsoXpT-qWC*EI(gMZq}q zfx!SqQABYZ)9a0)?tkP19HktRX#H4c6V(69WG-G2comUKs7M+SzC{oH>NS%G}c0*}aI z1_mK8X6#Yg$qp2hDshb{3C>R|DNig)We7;j%q!9Ja}7}_GuAWJGc+*xQnV1Ls>svD zF~q_@Ibnf}K~NqGGjk}*EuwPftB67OIC7|sLp00i_>zopr0C^Bj!vFvP literal 0 HcmV?d00001 diff --git a/mods/player/throwing/textures/throwing_bow.png b/mods/player/throwing/textures/throwing_bow.png new file mode 100644 index 0000000000000000000000000000000000000000..07f303a5cc8818289caa5500224df992f1b32826 GIT binary patch literal 484 zcmVN2bPDNB8 zb~7$DE-^4L^m3s900Cf0L_t(IPkoYIPK7WKg$vOacj3Q2nQJt<8UOXs6&Q^odx8g8 z7lgl&Z(y2o?~P3k)6&kFGpCJ2#Qit=zIRa+xj2s9FborFei!FwyplN zwdHIi+s43fP?G!xsHXs4FY8zlb=tV-0eF( zL{)(7rfC#&dw$O=u%01!Id$@V6-n6d+T6FN6-+W!!RKlML`EDMIp#=JRZ9;zXy#Du z^(>O7V*5dtF6kI4(&CF$)v7Ki|AJRm}_Fp)OQZEMM{@bSpW`)W^N#UL;; zZ(?}ABpU($xfT3C(X2$WEK|a*1oj&38d>891osDey^`m-!aq~kLKCe=q?#H?XlXnv zWm&2kui*D)M*w3?&?>Xr8X4nFX@p?wOEd$i%G``XT~QQXwk0nVgg;5H>w4i2`}7>1 aWBv#3=%ksXVTCgQ0000-l7>)u;1@HO_XIBP@QRNz4353yx{S8yjkUaI$N|&ib_xj?)SuEvA}kp z&nNLNcrzj$O9I&5a=H8jpVq{iFg@1L&~HMUd2Ju4z2EOWBe`0w25tlHXK*|oGgek( z{3hfFu|5bJh3oZt=yr%zG0pxS5wDR61dSp%olYZ~V6)kb{XND;eFTMisw!B-5aB=g0w#M9e@Zch_{1VXm|<~H*v!;`!1;Wh`g^8R@RgGg!w`>xV@n%c zVCH}0928R=@i^coJ=N6UKgR2FxllZ>Lq3Yk^lfw&0^i`tKss6IjPz8U^hY2i#