From 74f021572bdff0b5344bbe6decfcdce08b0f2510 Mon Sep 17 00:00:00 2001 From: echoes91 Date: Fri, 27 Mar 2015 15:22:12 +0100 Subject: [PATCH] 1.0 definitive shot/reload & fireworks! --- README.txt | 6 + bows.lua | 270 ++++++++++-------- fireworks_blue_arrow.lua | 177 ++++++++++++ fireworks_red_arrow.lua | 177 ++++++++++++ functions.lua | 60 ++++ init.lua | 13 +- sounds/throwing_firework_boom.ogg | Bin 0 -> 23023 bytes sounds/throwing_firework_launch.ogg | Bin 0 -> 28474 bytes textures/throwing_arrow_fireworks_blue.png | Bin 0 -> 212 bytes textures/throwing_arrow_fireworks_blue_2.png | Bin 0 -> 207 bytes .../throwing_arrow_fireworks_blue_back.png | Bin 0 -> 232 bytes .../throwing_arrow_fireworks_blue_front.png | Bin 0 -> 204 bytes textures/throwing_arrow_fireworks_red.png | Bin 0 -> 218 bytes textures/throwing_arrow_fireworks_red_2.png | Bin 0 -> 210 bytes .../throwing_arrow_fireworks_red_back.png | Bin 0 -> 234 bytes .../throwing_arrow_fireworks_red_front.png | Bin 0 -> 200 bytes textures/throwing_bow_composite_loaded.png | Bin 0 -> 692 bytes textures/throwing_bow_royal_loaded.png | Bin 0 -> 660 bytes textures/throwing_bow_steel_loaded.png | Bin 0 -> 683 bytes textures/throwing_bow_wood_loaded.png | Bin 0 -> 622 bytes textures/throwing_longbow_loaded.png | Bin 0 -> 674 bytes textures/throwing_sparkle.png | Bin 0 -> 190 bytes textures/throwing_sparkle_blue.png | Bin 0 -> 261 bytes textures/throwing_sparkle_red.png | Bin 0 -> 240 bytes 24 files changed, 585 insertions(+), 118 deletions(-) create mode 100644 fireworks_blue_arrow.lua create mode 100644 fireworks_red_arrow.lua create mode 100644 functions.lua create mode 100644 sounds/throwing_firework_boom.ogg create mode 100644 sounds/throwing_firework_launch.ogg create mode 100644 textures/throwing_arrow_fireworks_blue.png create mode 100644 textures/throwing_arrow_fireworks_blue_2.png create mode 100644 textures/throwing_arrow_fireworks_blue_back.png create mode 100644 textures/throwing_arrow_fireworks_blue_front.png create mode 100644 textures/throwing_arrow_fireworks_red.png create mode 100644 textures/throwing_arrow_fireworks_red_2.png create mode 100644 textures/throwing_arrow_fireworks_red_back.png create mode 100644 textures/throwing_arrow_fireworks_red_front.png create mode 100644 textures/throwing_bow_composite_loaded.png create mode 100644 textures/throwing_bow_royal_loaded.png create mode 100644 textures/throwing_bow_steel_loaded.png create mode 100644 textures/throwing_bow_wood_loaded.png create mode 100644 textures/throwing_longbow_loaded.png create mode 100644 textures/throwing_sparkle.png create mode 100644 textures/throwing_sparkle_blue.png create mode 100644 textures/throwing_sparkle_red.png diff --git a/README.txt b/README.txt index a3b1707..866be1b 100644 --- a/README.txt +++ b/README.txt @@ -20,9 +20,15 @@ Grahpics & sounds: CC-BY 3.0 (see http://creativecommons.org/licenses/by/3.0/leg Changelog: +Update 1.0 +- Definitive reload, unload and shot system based on tool metadata, new global functions, no more "throw" privilege +- New textures for loaded bows +- Fireworks arrows to celebrate! + Update 1.0rc2: - Fixed "compare nil with number" due to self.break not being retained - Filled conf.example's list +- Added Royal bow Update 1.0rc1: - Added longbow and removed golden bow, definitive bow set for stable release. Feature freeze diff --git a/bows.lua b/bows.lua index c690bd7..3919580 100644 --- a/bows.lua +++ b/bows.lua @@ -1,77 +1,3 @@ ---~ ---~ Shot and reload system ---~ - -local stiffness= 0 -local reload = 0 - -minetest.register_on_joinplayer(function(player) - local playername = player:get_player_name() - local privs = minetest.get_player_privs(playername) - privs.throw = true - minetest.set_player_privs(playername, privs) -end) - -local throwing_shoot_arrow = function(itemstack, player) - for _,arrow in ipairs(arrows) do - if player:get_inventory():get_stack("main", player:get_wield_index()+1):get_name() == arrow[1] then - local playername = player:get_player_name() - if minetest.get_player_privs(playername).throw then - local privs = minetest.get_player_privs(playername) - privs.throw = nil - minetest.set_player_privs(playername, privs) - local privs = minetest.get_player_privs(playername) - if not minetest.setting_getbool("creative_mode") then - player:get_inventory():remove_item("main", arrow[1]) - end - local playerpos = player:getpos() - local obj = minetest.add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, arrow[2]) - local dir = player:get_look_dir() - obj:setvelocity({x=dir.x*stiffness, y=dir.y*stiffness, z=dir.z*stiffness}) - obj:setacceleration({x=dir.x*-3, y=-10, z=dir.z*-3}) - obj:setyaw(player:get_look_yaw()+math.pi) - minetest.sound_play("throwing_bow_sound", {pos=playerpos}) - if obj:get_luaentity().player == "" then - obj:get_luaentity().player = player - end - obj:get_luaentity().stack = player:get_inventory():get_stack("main", player:get_wield_index()+2) - obj:get_luaentity().inventory = player:get_inventory() - return true - end - end - end - return false -end - -local function reloaded (player, id) - local playername = player:get_player_name() - local privs = minetest.get_player_privs(playername) - privs.throw = true - minetest.set_player_privs(playername, privs) - player:hud_change(id, "number", 0x00FF00) - player:hud_change(id, "text", "Ready!") - player:hud_change(id, "position", {x=0.6,y=0.515}) - minetest.after(0.5, function(player, id) - player:hud_remove(id) - end, player, id) -end - -local function reloading (player) - minetest.register_on_dieplayer(function(player) - local playername = player:get_player_name() - local privs = minetest.get_player_privs(playername) - privs.throw = true - minetest.set_player_privs(playername, privs) - end) - local throwing_hud = player:hud_add({ - hud_elem_type = "text", - position = {x=0.6,y=0.5}, - text = "Reloading...", - number = 0xFF0000, - }) - minetest.after(reload, reloaded, player, throwing_hud) -end - --~ --~ Bows --~ @@ -81,20 +7,42 @@ if not DISABLE_WOODEN_BOW then description = "Wooden Bow", inventory_image = "throwing_bow_wood.png", wield_scale = {x=1, y=1, z=0.5}, - stack_max = 1, + stack_max = 1, on_use = function(itemstack, user, pointed_thing) - stiffness = 11 - reload = 1.2 - if throwing_shoot_arrow(itemstack, user, pointed_thing) then - reloading(user) - if not minetest.setting_getbool("creative_mode") then - itemstack:add_wear(65535/50) - end - end + local reload_time = 0.8 + local loaded = "throwing:bow_wood_loaded" + local is_cross = false + local pos = user:getpos() + minetest.after(reload_time, throwing_reload, itemstack, user, pos, is_cross, loaded) return itemstack end, }) - + + minetest.register_tool("throwing:bow_wood_loaded", { + description = "Wooden Bow", + inventory_image = "throwing_bow_wood_loaded.png", + wield_scale = {x=1, y=1, z=0.5}, + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + local stiffness = 11 + local wear = itemstack:get_wear() + local is_cross = false + if not minetest.setting_getbool("creative_mode") then + wear = wear + (65535/50) + end + local unloaded = "throwing:bow_wood" + throwing_shoot_arrow(itemstack, user, stiffness, is_cross) + minetest.after(0.01, throwing_unload, itemstack, user, unloaded, wear) + return itemstack + end, + on_drop = function(itemstack, dropper, pointed_thing) + local wear = itemstack:get_wear() + local unloaded = "throwing:bow_wood" + minetest.after(0.01, throwing_unload, itemstack, dropper, unloaded, wear) + end, + groups = {not_in_creative_inventory=1}, + }) + minetest.register_craft({ output = 'throwing:bow_wood', recipe = { @@ -121,17 +69,39 @@ if not DISABLE_LONGBOW then wield_scale = {x=1, y=2.5, z=0.5}, stack_max = 1, on_use = function(itemstack, user, pointed_thing) - stiffness = 18 - reload = 2.5 - if throwing_shoot_arrow(itemstack, user, pointed_thing) then - reloading(user) - if not minetest.setting_getbool("creative_mode") then - itemstack:add_wear(65535/100) - end - end + local reload_time = 1.8 + local loaded = "throwing:longbow_loaded" + local is_cross = false + local pos = user:getpos() + minetest.after(reload_time, throwing_reload, itemstack, user, pos, is_cross, loaded) return itemstack end, }) + + minetest.register_tool("throwing:longbow_loaded", { + description = "Longbow", + inventory_image = "throwing_longbow_loaded.png", + wield_scale = {x=1, y=2.5, z=0.5}, + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + local stiffness = 17 + local wear = itemstack:get_wear() + local is_cross = false + if not minetest.setting_getbool("creative_mode") then + wear = wear + (65535/100) + end + local unloaded = "throwing:longbow" + throwing_shoot_arrow(itemstack, user, stiffness, is_cross) + minetest.after(0.01, throwing_unload, itemstack, user, unloaded, wear) + return itemstack + end, + on_drop = function(itemstack, dropper, pointed_thing) + local wear = itemstack:get_wear() + local unloaded = "throwing:longbow" + minetest.after(0.01, throwing_unload, itemstack, dropper, unloaded, wear) + end, + groups = {not_in_creative_inventory=1}, + }) minetest.register_craft({ output = 'throwing:longbow', @@ -159,18 +129,40 @@ if not DISABLE_COMPOSITE_BOW then wield_scale = {x=1, y=1.4, z=0.5}, stack_max = 1, on_use = function(itemstack, user, pointed_thing) - stiffness = 18 - reload = 1.5 - if throwing_shoot_arrow(itemstack, user, pointed_thing) then - reloading(user) - if not minetest.setting_getbool("creative_mode") then - itemstack:add_wear(65535/150) - end - end + local reload_time = 1 + local loaded = "throwing:bow_composite_loaded" + local is_cross = false + local pos = user:getpos() + minetest.after(reload_time, throwing_reload, itemstack, user, pos, is_cross, loaded) return itemstack end, }) - + + minetest.register_tool("throwing:bow_composite_loaded", { + description = "Composite Bow", + inventory_image = "throwing_bow_composite_loaded.png", + wield_scale = {x=1, y=1.4, z=0.5}, + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + local stiffness = 17 + local wear = itemstack:get_wear() + local is_cross = false + if not minetest.setting_getbool("creative_mode") then + wear = wear + (65535/150) + end + local unloaded = "throwing:bow_composite" + throwing_shoot_arrow(itemstack, user, stiffness, is_cross) + minetest.after(0.01, throwing_unload, itemstack, user, unloaded, wear) + return itemstack + end, + on_drop = function(itemstack, dropper, pointed_thing) + local wear = itemstack:get_wear() + local unloaded = "throwing:bow_composite" + minetest.after(0.01, throwing_unload, itemstack, dropper, unloaded, wear) + end, + groups = {not_in_creative_inventory=1}, + }) + minetest.register_craft({ output = 'throwing:bow_composite', recipe = { @@ -197,18 +189,40 @@ if not DISABLE_STEEL_BOW then wield_scale = {x=1, y=1.4, z=0.5}, stack_max = 1, on_use = function(itemstack, user, pointed_thing) - stiffness = 20 - reload = 1.7 - if throwing_shoot_arrow(itemstack, user, pointed_thing) then - reloading(user) - if not minetest.setting_getbool("creative_mode") then - itemstack:add_wear(65535/250) - end - end + local reload_time = 1.2 + local loaded = "throwing:bow_steel_loaded" + local is_cross = false + local pos = user:getpos() + minetest.after(reload_time, throwing_reload, itemstack, user, pos, is_cross, loaded) return itemstack end, }) + minetest.register_tool("throwing:bow_steel_loaded", { + description = "Steel Bow", + inventory_image = "throwing_bow_steel_loaded.png", + wield_scale = {x=1, y=1.4, z=0.5}, + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + local stiffness = 20 + local wear = itemstack:get_wear() + local is_cross = false + if not minetest.setting_getbool("creative_mode") then + wear = wear + (65535/250) + end + local unloaded = "throwing:bow_steel" + throwing_shoot_arrow(itemstack, user, stiffness, is_cross) + minetest.after(0.01, throwing_unload, itemstack, user, unloaded, wear) + return itemstack + end, + on_drop = function(itemstack, dropper, pointed_thing) + local wear = itemstack:get_wear() + local unloaded = "throwing:bow_steel" + minetest.after(0.01, throwing_unload, itemstack, dropper, unloaded, wear) + end, + groups = {not_in_creative_inventory=1}, + }) + minetest.register_craft({ output = 'throwing:bow_steel', recipe = { @@ -235,18 +249,40 @@ if not DISABLE_ROYAL_BOW then wield_scale = {x=1, y=1.4, z=0.5}, stack_max = 1, on_use = function(itemstack, user, pointed_thing) - stiffness = 16 - reload = 1.6 - if throwing_shoot_arrow(itemstack, user, pointed_thing) then - reloading(user) - if not minetest.setting_getbool("creative_mode") then - itemstack:add_wear(65535/1000) - end - end + local reload_time = 1.2 + local loaded = "throwing:bow_royal_loaded" + local is_cross = false + local pos = user:getpos() + minetest.after(reload_time, throwing_reload, itemstack, user, pos, is_cross, loaded) return itemstack end, }) + minetest.register_tool("throwing:bow_royal_loaded", { + description = "Royal Bow", + inventory_image = "throwing_bow_royal_loaded.png", + wield_scale = {x=1, y=1.4, z=0.5}, + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + local stiffness = 18 + local wear = itemstack:get_wear() + local is_cross = false + if not minetest.setting_getbool("creative_mode") then + wear = wear + (65535/750) + end + local unloaded = "throwing:bow_royal" + throwing_shoot_arrow(itemstack, user, stiffness, is_cross) + minetest.after(0.01, throwing_unload, itemstack, user, unloaded, wear) + return itemstack + end, + on_drop = function(itemstack, dropper, pointed_thing) + local wear = itemstack:get_wear() + local unloaded = "throwing:bow_royal" + minetest.after(0.01, throwing_unload, itemstack, dropper, unloaded, wear) + end, + groups = {not_in_creative_inventory=1}, + }) + minetest.register_craft({ output = 'throwing:bow_royal', recipe = { diff --git a/fireworks_blue_arrow.lua b/fireworks_blue_arrow.lua new file mode 100644 index 0000000..ef59005 --- /dev/null +++ b/fireworks_blue_arrow.lua @@ -0,0 +1,177 @@ +minetest.register_craftitem("throwing:arrow_fireworks_blue", { + description = "Blue fireworks arrow", + inventory_image = "throwing_arrow_fireworks_blue.png", +}) + +minetest.register_node("throwing:arrow_fireworks_blue_box", { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + -- Shaft + {-6.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17}, + --Spitze + {-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17}, + {-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17}, + --Federn + {6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17}, + {7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17}, + {7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17}, + {6.5/17, -1.5/17, -1.5/17, 7.5/17, -2.5/17, -2.5/17}, + + {7.5/17, 2.5/17, 2.5/17, 8.5/17, 3.5/17, 3.5/17}, + {8.5/17, -3.5/17, 3.5/17, 7.5/17, -2.5/17, 2.5/17}, + {8.5/17, 3.5/17, -3.5/17, 7.5/17, 2.5/17, -2.5/17}, + {7.5/17, -2.5/17, -2.5/17, 8.5/17, -3.5/17, -3.5/17}, + } + }, + tiles = {"throwing_arrow_fireworks_blue.png", "throwing_arrow_fireworks_blue.png", "throwing_arrow_fireworks_blue_back.png", "throwing_arrow_fireworks_blue_front.png", "throwing_arrow_fireworks_blue_2.png", "throwing_arrow_fireworks_blue.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_fireworks_blue_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, +} + +local radius = 0.5 + +local function add_effects(pos, radius) + minetest.add_particlespawner({ + amount = 256, + time = 0.2, + minpos = vector.subtract(pos, radius / 2), + maxpos = vector.add(pos, radius / 2), + minvel = {x=-5, y=-5, z=-5}, + maxvel = {x=5, y=5, z=5}, + minacc = {x=0, y=-8, z=0}, + --~ maxacc = {x=-20, y=-50, z=-50}, + minexptime = 2.5, + maxexptime = 3, + minsize = 1, + maxsize = 2.5, + texture = "throwing_sparkle_blue.png", + }) +end + + +local function boom(pos) + minetest.sound_play("throwing_firework_boom", {pos=pos, gain=1, max_hear_distance=2*64}) + minetest.set_node(pos, {name="throwing:firework_boom"}) + minetest.get_node_timer(pos):start(0.2) + add_effects(pos, radius) +end + +-- Back to the arrow + +THROWING_ARROW_ENTITY.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.get_node(pos) + if self.timer < 0.07 then + minetest.sound_play("throwing_firework_launch", {pos=pos, gain=0.8, max_hear_distance=2*64}) + end + minetest.add_particlespawner({ + amount = 16, + time = 0.1, + minpos = pos, + maxpos = pos, + minvel = {x=-5, y=-5, z=-5}, + maxvel = {x=5, y=5, z=5}, + minacc = vector.new(), + maxacc = vector.new(), + minexptime = 0.3, + maxexptime = 0.5, + minsize = 0.5, + maxsize = 1, + texture = "throwing_sparkle.png", + }) + if self.timer>0.2 then + local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= "throwing:arrow_fireworks_blue_entity" and obj:get_luaentity().name ~= "__builtin:item" then + local damage = 2 + obj:punch(self.object, 1.0, { + full_punch_interval=1.0, + damage_groups={fleshy=damage}, + }, nil) + self.object:remove() + boom(pos) + end + end + end + end + if self.timer > 2 then + self.object:remove() + boom(self.lastpos) + end + if self.lastpos.x~=nil then + if node.name ~= "air" and node.name ~= "throwing:firework_trail" then + self.object:remove() + boom(self.lastpos) + end + end + minetest.add_node(pos, {name="throwing:firework_trail"}) + minetest.get_node_timer(pos):start(0.2) + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_fireworks_blue_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow_fireworks_blue 8', + recipe = { + {'default:stick', 'tnt:gunpowder', 'dye:blue'}, + } +}) + +minetest.register_craft({ + output = 'throwing:arrow_fireworks_blue 8', + recipe = { + {'dye:blue', 'tnt:gunpowder', 'default:stick'}, + } +}) + +minetest.register_node("throwing:firework_trail", { + drawtype = "airlike", + light_source = 9, + walkable = false, + drop = "", + groups = {dig_immediate=3}, + on_timer = function(pos, elapsed) + minetest.remove_node(pos) + end, +}) + +minetest.register_node("throwing:firework_boom", { + drawtype = "plantlike", + tiles = {"throwing_sparkle.png"}, + light_source = default.LIGHT_MAX, + walkable = false, + drop = "", + groups = {dig_immediate=3}, + on_timer = function(pos, elapsed) + minetest.remove_node(pos) + end, + after_destruct = function(pos, oldnode) + minetest.set_node(pos, {name="throwing:firework_light"}) + minetest.get_node_timer(pos):start(3) + end, +}) + +minetest.register_node("throwing:firework_light", { + drawtype = "airlike", + light_source = default.LIGHT_MAX, + walkable = false, + drop = "", + groups = {dig_immediate=3}, + on_timer = function(pos, elapsed) + minetest.remove_node(pos) + end, +}) diff --git a/fireworks_red_arrow.lua b/fireworks_red_arrow.lua new file mode 100644 index 0000000..a28d458 --- /dev/null +++ b/fireworks_red_arrow.lua @@ -0,0 +1,177 @@ +minetest.register_craftitem("throwing:arrow_fireworks_red", { + description = "Red fireworks arrow", + inventory_image = "throwing_arrow_fireworks_red.png", +}) + +minetest.register_node("throwing:arrow_fireworks_red_box", { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + -- Shaft + {-6.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17}, + --Spitze + {-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17}, + {-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17}, + --Federn + {6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17}, + {7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17}, + {7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17}, + {6.5/17, -1.5/17, -1.5/17, 7.5/17, -2.5/17, -2.5/17}, + + {7.5/17, 2.5/17, 2.5/17, 8.5/17, 3.5/17, 3.5/17}, + {8.5/17, -3.5/17, 3.5/17, 7.5/17, -2.5/17, 2.5/17}, + {8.5/17, 3.5/17, -3.5/17, 7.5/17, 2.5/17, -2.5/17}, + {7.5/17, -2.5/17, -2.5/17, 8.5/17, -3.5/17, -3.5/17}, + } + }, + tiles = {"throwing_arrow_fireworks_red.png", "throwing_arrow_fireworks_red.png", "throwing_arrow_fireworks_red_back.png", "throwing_arrow_fireworks_red_front.png", "throwing_arrow_fireworks_red_2.png", "throwing_arrow_fireworks_red.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_fireworks_red_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, +} + +local radius = 0.5 + +local function add_effects(pos, radius) + minetest.add_particlespawner({ + amount = 256, + time = 0.2, + minpos = vector.subtract(pos, radius / 2), + maxpos = vector.add(pos, radius / 2), + minvel = {x=-5, y=-5, z=-5}, + maxvel = {x=5, y=5, z=5}, + minacc = {x=0, y=-8, z=0}, + --~ maxacc = {x=-20, y=-50, z=-50}, + minexptime = 2.5, + maxexptime = 3, + minsize = 1, + maxsize = 2.5, + texture = "throwing_sparkle_red.png", + }) +end + + +local function boom(pos) + minetest.sound_play("throwing_firework_boom", {pos=pos, gain=1, max_hear_distance=2*64}) + minetest.set_node(pos, {name="throwing:firework_boom"}) + minetest.get_node_timer(pos):start(0.2) + add_effects(pos, radius) +end + +-- Back to the arrow + +THROWING_ARROW_ENTITY.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.get_node(pos) + if self.timer < 0.07 then + minetest.sound_play("throwing_firework_launch", {pos=pos, gain=0.8, max_hear_distance=2*64}) + end + minetest.add_particlespawner({ + amount = 16, + time = 0.1, + minpos = pos, + maxpos = pos, + minvel = {x=-5, y=-5, z=-5}, + maxvel = {x=5, y=5, z=5}, + minacc = vector.new(), + maxacc = vector.new(), + minexptime = 0.3, + maxexptime = 0.5, + minsize = 0.5, + maxsize = 1, + texture = "throwing_sparkle.png", + }) + if self.timer>0.2 then + local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= "throwing:arrow_fireworks_red_entity" and obj:get_luaentity().name ~= "__builtin:item" then + local damage = 2 + obj:punch(self.object, 1.0, { + full_punch_interval=1.0, + damage_groups={fleshy=damage}, + }, nil) + self.object:remove() + boom(pos) + end + end + end + end + if self.timer > 2 then + self.object:remove() + boom(self.lastpos) + end + if self.lastpos.x~=nil then + if node.name ~= "air" and node.name ~= "throwing:firework_trail" then + self.object:remove() + boom(self.lastpos) + end + end + minetest.add_node(pos, {name="throwing:firework_trail"}) + minetest.get_node_timer(pos):start(0.2) + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_fireworks_red_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow_fireworks_red 8', + recipe = { + {'default:stick', 'tnt:gunpowder', 'dye:red'}, + } +}) + +minetest.register_craft({ + output = 'throwing:arrow_fireworks_red 8', + recipe = { + {'dye:red', 'tnt:gunpowder', 'default:stick'}, + } +}) + +minetest.register_node("throwing:firework_trail", { + drawtype = "airlike", + light_source = 9, + walkable = false, + drop = "", + groups = {dig_immediate=3}, + on_timer = function(pos, elapsed) + minetest.remove_node(pos) + end, +}) + +minetest.register_node("throwing:firework_boom", { + drawtype = "plantlike", + tiles = {"throwing_sparkle.png"}, + light_source = default.LIGHT_MAX, + walkable = false, + drop = "", + groups = {dig_immediate=3}, + on_timer = function(pos, elapsed) + minetest.remove_node(pos) + end, + after_destruct = function(pos, oldnode) + minetest.set_node(pos, {name="throwing:firework_light"}) + minetest.get_node_timer(pos):start(3) + end, +}) + +minetest.register_node("throwing:firework_light", { + drawtype = "airlike", + light_source = default.LIGHT_MAX, + walkable = false, + drop = "", + groups = {dig_immediate=3}, + on_timer = function(pos, elapsed) + minetest.remove_node(pos) + end, +}) diff --git a/functions.lua b/functions.lua new file mode 100644 index 0000000..f1fc731 --- /dev/null +++ b/functions.lua @@ -0,0 +1,60 @@ +--~ +--~ Shot and reload system +--~ + +function throwing_shoot_arrow (itemstack, player, stiffness, is_cross) + local arrow = itemstack:get_metadata() + itemstack:set_metadata("") + player:set_wielded_item(itemstack) + local playerpos = player:getpos() + local obj = minetest.add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, arrow) + local dir = player:get_look_dir() + obj:setvelocity({x=dir.x*stiffness, y=dir.y*stiffness, z=dir.z*stiffness}) + obj:setacceleration({x=dir.x*-3, y=-10, z=dir.z*-3}) + obj:setyaw(player:get_look_yaw()+math.pi) + if is_cross then + minetest.sound_play("throwing_crossbow_sound", {pos=playerpos}) + else + minetest.sound_play("throwing_bow_sound", {pos=playerpos}) + end + if obj:get_luaentity().player == "" then + obj:get_luaentity().player = player + end + obj:get_luaentity().stack = player:get_inventory():get_stack("main", player:get_wield_index()+2) + obj:get_luaentity().inventory = player:get_inventory() + return true +end + +function throwing_unload (itemstack, player, unloaded, wear) + if itemstack:get_metadata() then + for _,arrow in ipairs(throwing_arrows) do + if itemstack:get_metadata() == arrow[2] then + if not minetest.setting_getbool("creative_mode") then + player:get_inventory():add_item("main", arrow[1]) + end + end + end + end + if wear >= 65535 then + player:set_wielded_item({}) + else + player:set_wielded_item({name=unloaded, wear=wear}) + end +end + +function throwing_reload (itemstack, player, pos, is_cross, loaded) + if itemstack:get_name() == player:get_wielded_item():get_name() then + if (pos.x == player:getpos().x and pos.y == player:getpos().y and pos.z == player:getpos().z) or not is_cross then + local wear = itemstack:get_wear() + for _,arrow in ipairs(throwing_arrows) do + if player:get_inventory():get_stack("main", player:get_wield_index()+1):get_name() == arrow[1] then + if not minetest.setting_getbool("creative_mode") then + player:get_inventory():remove_item("main", arrow[1]) + end + meta = arrow[2] + player:set_wielded_item({name=loaded, wear=wear, metadata=meta}) + end + end + end + end +end diff --git a/init.lua b/init.lua index 39806fc..3a2292a 100644 --- a/init.lua +++ b/init.lua @@ -1,4 +1,4 @@ -arrows = { +throwing_arrows = { {"throwing:arrow_steel", "throwing:arrow_steel_entity"}, {"throwing:arrow_stone", "throwing:arrow_stone_entity"}, {"throwing:arrow_obsidian", "throwing:arrow_obsidian_entity"}, @@ -11,6 +11,7 @@ arrows = { {"throwing:arrow_diamond", "throwing:arrow_diamond_entity"}, {"throwing:arrow_shell", "throwing:arrow_shell_entity"}, {"throwing:arrow_fireworks_blue", "throwing:arrow_fireworks_blue_entity"}, + {"throwing:arrow_fireworks_red", "throwing:arrow_fireworks_red_entity"}, } local input = io.open(minetest.get_modpath("throwing").."/throwing.conf", "r") @@ -20,6 +21,8 @@ if input then input = nil end +dofile(minetest.get_modpath("throwing").."/functions.lua") + dofile(minetest.get_modpath("throwing").."/bows.lua") if not DISABLE_STEEL_ARROW then @@ -66,6 +69,14 @@ if not DISABLE_SHELL_ARROW then dofile(minetest.get_modpath("throwing").."/shell_arrow.lua") end +if not DISABLE_FIREWORKS_BLUE_ARROW then + dofile(minetest.get_modpath("throwing").."/fireworks_blue_arrow.lua") +end + +if not DISABLE_FIREWORKS_RED_ARROW then + dofile(minetest.get_modpath("throwing").."/fireworks_red_arrow.lua") +end + if minetest.setting_get("log_mods") then minetest.log("action", "throwing loaded") end diff --git a/sounds/throwing_firework_boom.ogg b/sounds/throwing_firework_boom.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c25b96ab617fc38f75c5db319b2dabfcd79f09da GIT binary patch literal 23023 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 L7v}rzfbTH?drBF= literal 0 HcmV?d00001 diff --git a/sounds/throwing_firework_launch.ogg b/sounds/throwing_firework_launch.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e6165a455379c3f4ec2bfd40071718a09e4e667e GIT binary patch literal 28474 zcmeFZcT|&4*C_fVw9rEj)r8)qH&H|HN-v>E@4btnp-HIHJ4lyKr~-=8yGZW>3MkT1 z0Tq=K^!L8!z2E)TId`qI?tf?2WSH5rXZAC@%yO9~)@zr*z}i{))nI60sq8gtpkH($rgWpDIcc<#u?RClpDAnx{0i zMQ4re>N*K6@B59*e$4x)ApWxsIPO^#2^sC7ijd3cF?{7&zPPFWE(;EzamxhMl4&&> zXh$1ZUQcq~{w%0RBRMIqVqmCagi8UICV>v~fdTV@p=Mc8=53*7ZBgb6QI=;>Hn2zk z}ZzZ@W0PU=OKOoiR0y<56hqrr;0x3psyg&9}W)z zIGG~#1^ay^)chm{{p4|3&0l#qP5bp%ZOVTM;Zp1XfD~ov_hA{vaYJ8d+E>!V@A|x- z&ODA4mmK+Dr?5Zzf?Eh8-!a1#4G~YW`NI}8ZdzCoM2YM#B^&~#XcL|@k@MxXEJe;% zVI^(uba#wlE>C-9R_-4Ox{ot%;AF`+lHFgJJ(1%#u0fVl_P2JII+v)nata4y{Fp~E zz-WWRbD7E^s$4Y1jWwId`B2eLi>t+?`>*PQ#L3NO0XC2y4i8Nvw53IqBU0J?A5)|jiVpFWvLz&{YF0+*>NE0` z`G@~mIUE2Yp?|daU&S9){;S2MDY5(`yiH?bqk@-3P4BqeF18n{L?(*UVnIoq7ALfP zDDbP3Rd*|EnL`PbrRi((mHo9SoKWHRNeYCFe~jc&mhTAPQ=C=&r{In_-%znm{zrau z%%Vrlh0Bv-LI&d3jSP)U0zJ$!1D2mfSuO;u&4;edC){Cp^j{V0-R+)^a|E8u@wjt}i%GRtr>r&c4U&XnNm&l0!4NKDeG=t<}p&{1x(XB7)V)8 zOFB#&Im`w+EVeqBKMOT${l{Sbn$6mLz<*fIrHQc1CT^&w;Qvp{DdbIjFO$fjk-}+~ z!hJWxDJG{fyWmr0G0A_i9Ou}lS+P$su^%ysyfGOrF*#N3#qJ|@yB+`A{BO%q^X0^4 zoaLzaa{hnD=ws=(ko%NZVi6ym#G$IOk1!a6 z;n(Ig!mA}pZvl2&0LJuF8|Ct6yXwncgDe(_29F;C{6{H02B>6v2 z{|zlYNzm>8poNssK^p4(pHuq3GyGo;{BJpcQ*jUl?nAFwgb)CuWk5jm1~LV%aU_AZ zGdq$GX40lvH>H=S%pscomv!I{*v}HdZ1R-l#7PpA1w?NmT>kAG0`R-IjshIA`enz* z?tkeu?m>>UY08NwBVEDr(~&Mc5;j%;{llRF01YAn&;ZQ{^54%?qD~C}GAZ_EIR8RD z#Q_AM9n1=d03gNTF57=U&Hs1ke<27$^8!G0u_?Vb%P2U}&J39%NNQ~c=->r2A!$LE z$l%MTW0v5eC*qZ`=K`Pvz`8f>=#+%src6eeOYxA8pw_fOnFz$H4v7O+O?NZK~f)u*WLz)1b6X<#;ld*NTm^T*ZKUIzR2#$VH)}z%i zFtW_tFwOWFQ_P!FUezItBlPCa5ruQ^oOAvSme8Ta?ZUX-*peaVL(Jt2RaJGQILv7Y z9USI7L9ugAd1V#uBtiZ`oDHyKz+A$raHk9S63NJNKHUNBf*aRSCx~bGx6N2sRkhPm zCol@&9H_-~2Q$L;%T}Wx0IYX`0C*QfZn&Zm!mQJF1kf@yvI7{LF2vhtik6YtQ7e)Z z*=Q@OBkc9{`T5F76#2Q*^%d01O7+Dwg~~GY2@vTinw9WUeSJOx0L?0c`_<*TP0VhnJVCFNcFs z;2aKr97<`LzT$SCAI|^C$Dx1#*by5AC^HvGeGI-qO)Qd|W*ICg8Kl;17j!TGJO zDW!iQIr4A*;r`u%e|YR`iIc`9qqs&dWmH*JMS^Qh;}{in>F-um?e?@@@_#t@Q`Ma3F0-J`E-ed3`~vG z0E8GPbp?#*HfLIjrY4yaAS5{g@;=dhfDLA~ce>!l4aP$Aufg^;Q z=I;nx<nNQQLCiN^r5hHL4yd66(Ci2BEis>yB{Dh|SMTXr}A;8BUuKxmO+VPt>|QauR_kdTtG z_NpL}!ibWtLT_yuo_r|)P{52qV=(=2(IO^Z{&GBYKf$B>z|h2k`tvrlFrLLkza^0( zL=hTp%7O$D%gDTY#It%7$(&bcV7P&!8EduQ9#n~I%N8bQqDnd>+aR+H4Qu$VW%Am5rL$r!DDqtW-JFECv`q8b&o87(VR#m~yh) zC{VGaQq_{h&n0K+j4!0vql#5|90=;d^FQI;%F3x0pLlB^c2Mh(KLx z!JY>En9DkgCNv$B5wQB~_RB11MlR;zL5lvf=uG+_fi4r6@IuJkW2*{heXOZzq~hQK zi7tT{9X-dk9Y7|3JmORTas7@Fr&g@I;iuTbPgFmj7$uMK`5pmDrdl@e33clit;0e^ zDQPdLBZrCvNK5hrn+=^6T_yCW7$q<-`B6>rDz2!L5gIQcK>oXCn>#y$S8ePbS=yLy zpTKQqd5{6n_6EtuiSmh*U47h)U+EpPrfigN&yIYHB+l79SoIw~ocI0aNsI@*rW* zw*^8n=~Y6I;cQK_)I{nV!*c4Q?OrK-lF2@#D5|&%JO~qv`5}U~#WUXHA@JY2KcO6K z@y<FeGRp2cNW{{zX zBnUqtn-JHiuA=KC?!>?UZlq@Kov2FYHQpRG`no)-g8j#>dugc;0qZD9z4)%DG!sYG z_465KH)#c-kKWZ{w+FyA40@_8Nf1df&-5SFW(y`YUOqfP-c~F|I?<_Up;#tEApAy# z)2t8V8=#!o2V3Eu@W?MKZ4g`F=QS;v5Opa-Rxd?Ha8(40!c=E#6(Hys;<$cwT_v+-AVLRo~%JkS9&ar{&I z0CfqN<4+O^CWSlZw<)u}bL&yQ?mIirjwNd% z?5FM3L~r&ZYiNvR{fSbLH4Cl7Q$L<*On_<%c>|?fgm|qP@;aQ197zK92@fy2O}8E@ zN!BKj+!}H>k^X59VXR;As^fmJ_WJB+dw}f|!Sc_VT$+qD3u;xTgv}_@?IQ&$A(~p_ zuXh}Dl^Lm30&Y>^(`*X!Asg3N@IHq=k#ma<7CsXj{@~r?@p{>OVtUJC+plQeFNO;*D~YOIajfpV&W z>^hZ!95ljN<&dIqL+E4)TvrjFyIZC~h)E?rpjauY3sG8nI|+<6fPkndx*`_}yO4#A zoCqNpR#Y)OJ`HuHP#2P{c!z*=hKt^XPj_%XZN{1sxhK=y?P)}=;-det{5Da82n2x3 zPEb>lkTq7vWM|pk&-U3Pr`5B8rq@&8qP8p`b(JVp^*sfFW<$=KfRC}|jzy)L$@}ze zeRXmBt{z328q}iMVH>vsOf5_s>Pnu}J_}q-j7AVB^qE$(Po)9z{5VIvxa>>b$t1AxJUyd8`-mE=n66{r2L? zk%h{BZmQk`Dm_{ivw@$RdM)Z-lq%!)&(3KW5eD31QJ-k(VcG!i+)~|qCSu@BpiFFc zkD5j(e7dbW~C!gf`mgX+*!FV5Zp%tyZM?emcX|p|m#7?|Q}~Scb9o*J{b?Dgrc_2#GX+WG^5yfY5fS zf5xvCRZgUq5oX2^E*Q)-K1;Dd+*50$v`*WbOmWjP(G_}YqiKth0e?%HTrq)qC# z1eB8V-$8cW%8FU!0{A<^FSD_^sC-$5A_u)&%LcTpYe{iJ3r!9) z+wbATk8QlTP;2(EVOD~$FBre&UqE%W61a&3s`dlxW>`5sy%Mc2-#^$zY5Q#F$yf4BAXWokFY#0o;ffGA9gyb1R!|eanWgo^MFQcKBpNfVLy~`XN3QjfA4j6ydWRm z%|tI4B|?}K*}3Gw8UO)qzzF={$_kQ4Kg04*PZVOfIF!R>)_+H^{(49NEI9S&EuNl+ z&zih(_PD9Rn&!+w9ApW~ba7O*00GLQGNK7OrrI2i0SfmUS3TF4JlT2bnYC*)oGe33 zmMd&3R*mpBeNnfEYJ!4&Q63i(*(>+y#66y48&)(`pK&|HGSMp;_wzHVezdEBRe9Lh zR5_QWBl`#qiwuqEM7IePtoZ_YiNhPOgSx53!dT(@f@Kg?Ej`TTW>zkQkG_nq|oi?5LvdE89W%W`667oOE z#TnXW4)e+ebj?4FP4Zegzm~WpbXFbsVI)SZQ_#Rg(0)Hyy4b z6CUpRDNNsY%7NBpww*LZd7UmL4%?T*IdQ`y`d)QP7D&^_k;Br_(?6C{$vF#L4k}F= zGr|}XqY0H7sc8v0fnp57Cw#IfdLT)+(2RUXvF0l#d@ejnh8Qv;JGHKi@617lg;bqn z(AV!k0VEQ1#6TV0|6Wjov*g+RL~JKeh(yN%84;!pqj|ihlV;|~c!Dv+x^jEj^kfQ= zH9$X%e)9%3uz|*>W;h2P1V;&6^(S~Kk^emvn`*2VVd!nDnAt@k_vI?zV)n(^m(=Vn z_cLYcfvot>TYcXF=%ji2NK6M!89tJ>mqpESijrqETItu1!3T5u$H@gC-7A5ZMK*PC zCV_rdV0%}3a{^CCL zB=Eqm>L>#}Q+)6S8zD6OI*=%l@0ZL>1`7+XF{43o-fL2usdqc=W}(;3Bc%iY5gAPG zZ{XWBy#(hMe5ku}pR@nA4x)ok6B+M(z?r20FEeKa;)VJ_R*E)^Nd%j8qH%pAYCya- z=ZhQyds0#nwn|B!tIEJ$e197a7pqY}Q~eL!C`B-f$JA<=`W?DXlbNxmQXbA`sn;1* z$6Nq9!R8hS7^+d&j6v80$|AC}iVbj4BB^^z_cD$foBGG_(v4Gpnb5o)7p^0Or?(j< zZAx;)(Q2`eqokR3uBkUS5ioxV7+?yqLD>9IuQp0Zl6m76_kdV>qD2s!ZM)bDfmK>Z=)3hBZq1v?6}JW9?ok-?=T7VVevDR z+io+aK<*g_bg3iNOVJ2^OuqFsRuBTnF;w}a+3e5*!dyoPeO>tg@` zH7!J0-#)w(W-s^rJO(u{E!^SO8Wye}8=DqgUlYYPJwJH)PM@QbJEodKhw`L+<5Zk6 zNr3}o_1gM}su#`kx!|A0C->7w*4ct;?|8K=nb*ZPHtFUHH9AU;^mrIvXR?gtO;6{I zCD2erQYr9IwV8^LfZ`1a+!_1&C4dT}Bo~>G}LN^%UyT?z(3EFE0)o3lJu5uZ>j`C5*qFnVrP}zz61= z06KbuCN-Um8M-5BGOWD`cBF@K>IUAosJoW8@%V204&`)c=^=yG?i{sQ0UqPz5CFW# zU~GG5e@|?jzHDC4u<=`Qej2neZI<)M#fj6VK3klNvJ_f2v1sl9r31~G7162N1C}DdwMdCws--oY{LBK@FhNE z1||#^XVF6uQ9)4Y!{8dm8^+L8I6NFb3GNqc60Xj{SBC*io$!&5q)D|yXtf9XJ8yo< zGwfBT_%o_`K64R`>+sRykn>I%h8LUI4KE;yR9IELM9DL(?l*H=zbmvxcC^M;?F8_4 zv{+n-4Ldg_7=IpD6FXhWt9BMDp=W7~v?+AC8}uon|LN>dt6xfRU44P<_YB&I&d%60 zGrxvzmQ*9Ea|=G*<~6nmK`r>bmIq!K#8BMBtHb$J_z?^Ix&+7ivaTj_%FN|fLWEFw z5+mL}0h(KvHx%Gcfadbc#ak}@d9)WP7f&y0FZwQCTy$OZT(n$NUZg+3l$o<_Zc&U} zv%BZw%24~chvW5Z1I@m9Ly*b0wW|;Bm&eU2k;&R(hVw&%uNBzQwMg%bjP#_hQp zW>2mAn{$LP)*iZkGcY;^HE5-4PX&EHwW&yIAAW|A09Js;jvGBjzM1$SO0T_W!~J3G(tdbooZpus0C4Am7#W zY~dc$t9k%fcK)maphHZ)eT!bTE7muVrpuYA@bV=Vzg}t|V&~W)Oe~KF=z^@bTTf=5 zEL^dA^TzfIs~LAf*pGqUc2^^I%OB=d_DfdBrU7TFYTwD_*iffI^S4`D&VC=gVHB!) zV%MHqwlDZv@JQ6yL~v}zwY1iNWO4+>HHU$tN@A@W*m+TIT|lBhp*>!r`MN)J2%DG$ zaO{aRgUEQJ^`S`Ru%Q|B&0N0eC;Nq?DW<}=wa7tybmEF;$=ygNDd-4TZL8nd**z}B z;uv3couU!HR*N{2-|GDY#OBxiS1-sAE-dNB$ZXYt5Lbq{DPbMG1ELNh{!ha_!n8w- zcHxyXU-=!VT%lA(A~vpqW!COT5Yr@@cnQv1crz&#ycO@tF+w%=6D@(O?fkch2>F>k zR7+X>?~a%0G$5v=#RwR^{PMfX+6bG0?ELt6S(yFRG*C|nHONUL}b zcVeVWuSo<9b(0=PXRtosRW2}nms!=p+ULK@V zd0kgqNtg{81`CMK(sF|~Myz+3ZrYTut-v}GiVP+)jrO)3xx23y)Fnfm z47Vc8w5ab=xss&Xiw!{gxeUr#a+5F+9^RH*{5XS^HZ{g7gCW_R%7xyZD|=>aB{sukGY{1;|y;E z;Xf`;m3)u;#`3NllDLlw2sg3@!JwpQ20ClK$vNxIRoSx?;yZK?771Pk2QU8w~Zxqgg=I2DU&w z5NuR#qsqCYSrTXGdhj(3U_zcdo8C^oVXa6E>>6wttm zc-;hA8JRw$a+5lx5#uwQgDteMc zIB5Ly_H;^cLm?j&o=Tra5=93!Yc%b~@N>uq0LkR)zybBZP>&fv=FF{V3iwl#xD>0R z%R6gC!eOJF6g}DoNK^sqH(%8AVGig`1xHrE=s30=6*>~m+&#uyIa|SIGFrRxnj>HCD16Rd;8|6twRZol`uVqt%HO(G}3bv<2GWGkKVP5pz z>Y{q>i{Q;DwPab&XpXX*5;BRr*O0&Y!jFyGK2>N7xdfBdmMYKEz+ff07vD}Bs6<;X zOv&i?Mm37b%dsiS^$3o^VX0Vim19nLa<~wf3=9WrnC`LqS%IElk$&QCs)6lgCi@?* zzWee$Z{_h*Hr@_@XV>##yvzyLC6ccg8j|Z3e(kAch^$H&*_QgYrgK%F&UiT(|F;^Q zG!|SL|&~FV2M5`&|~~i#J9uq=7D_LWkS{!oA~>xwwFH+{I~|%#^x@*eO!M2Ye3ba zVXnVFIgY;=+3?||#kB8(->V;IZx3a|OSw!+Qn%c8x)y8gOwYa}g7kmimZ<0x{AS2pKq0Bv==JGG)_M%#6}*VUtJ+B8&Q zXqNKePWR0GX;Q)r1wx&$lJ0zA*@ht~Q&i!CA*nFo_4lvW(b_dwr#N0&-z6tM%1Upy z7hMXLM3d z-+MA+SJYZy%da0Wx^Zn(j5(PmPtuk*{HtN^1+Fc?m(DV<)!ePpKFrOd zo}p<>`*5u5<1#tm?m@P!0%KTSm!fTuquG;YZCkZz@|=@$bH7pbGvzKcZ_!cnbuC?o;nQ$XP871_jU_AQEbS*g>P)~{D3MGpL;SH6`EAx zAZw;~i4T8!2P1a%w7y#9)!WXe(7a=LZMir{%|e3bS`&c{yu4iw3sC-j|0?K7l4+eO zSD(5FpFy;d+kkJp?1=9n@42osp^ejH$7D(SZi4aAdxid;Kax(bt?80LRNZ|7PFiSP z>0_hR+25yN)Nh^6hlS(!Qq+r0cz}`#BBDIB+)76```-lJ`PR>NZW5pJ+-Z|z^nSBx z`5pya{e6JT(SS7)U>htY;!_6yCgc%bcz&UmiG9ZL!dp=c&0KmxdU|lJYQYQln$hx{ zRA`{>(*E|-*AvnlV!q81nVoIVe>$#vk04zTeue zEt7fjX)i;LspI*oe{as?lRb83;*G$vGpS9H?bFWFP_O6TSOuF-0`R`oKkthx>hoB0 zo;gXdV7z_QbDi*o%I<9=uH2cP>8u9ZjqF{WrPy@QYVvB)v~&j}Ba0b1{@6;NI{y-W z-UfYAyJc_yRsYu^Q_FX{{;ECWdWKm{#_X;FS`f*(tL*WhRI0*ab1QExAwgvY#T8Dp zqQ3w8&*9ac5o!cn@cg&5l@mP?WQ_M`Ov*k`?JFA1MYLYYN1@e_1MNkl)s5Lr~t_Db| z1*xx_B;@X)licdiUrplC?Gx@=dxQen;|?`Cr(=9#;Z?HudYo+KeH_j4Ve3N&6Xa8DcB!k0v@PIL>KQA7Fu>3wpTa>_2@b* zCk7*oSULS`*4nK(3mPa^qye-jUF*Ah&R$@>Ui$ra@(0DCTR$wSS=GMcLyNcDwZQrk z7UeZ$^1nQofp{jhfTqsj;Wx%SB?^}0SF4KN(fcqd1BHXw-*=W5ZQUFz%c*Y}ms77+ zuO}mA);y$xSC-rO)<#cRtxB#DJ$r>o2+V(3DjF%-t0)m&Etl>FY21cgYz{#J#eCs{KW;`99EO(K^*w9tDK|BWGE z6gNF@h8;-RI!n9|0Exmk!@xQRU`X(+Op(9TecWyVu-O4pL=b>YO)##E4Q~gt=2w&= zTmHa&@=dHNno8}$PZ$=HS9Qt^pp`#J?fSW4PRpuZ^D)j@gJZ!*(Y~y}1mjs#gjZl^ z+^3R)Ns}v%UTYI!qSt9>i<%odW?H|v*uG-fZJOi|U0hsk3f}YI6})O`pnn5Z>|JYCey$&lN$=xbA^6fhqE3;YxR2)vAb{EdHHzPPe~vwzC7rgw?$zXAj95BdnQe;s%% zgc(;yl^Nz&k8005WN@M%|7>dl!#Ry3R3uv}6SD(63SKS6g$yit*XRHGx+6?7nmuc) z_4Hn=+KQh3+Z^?;p5i|;ek}$brt&@b6=m|EU%@g2HUCZe{hZ(Ms|5;yt7|FoL3ta= z!YI}1>ujj&^X1CWB3|~05ixcXa2-bi&%#tg- zV-gtR^=t)7@OaU{_U=Ug_ifcmY<_D{j>Dr=`<9`qjStOFTHjh7`)#~a?V3Ru4o)>U zD1@`gb%|c(MLdT9*aWi%YmcyalY5p8-7)}&F&-cSz%pYjC;`ImLVPkuCnU%!I{sRb zaCe3DQ&hvX6D#l!$x>4Y9X0K9S?BJ9Xtm^TuW&Cq3hb>e6Bp~mYd2Snxoz#}5Jeh} zifc69wsCX>ZvKP=gFf|{%LMcONA;pu>GU>m*4uKg2P{tx0I;kfmh`Fx%=hLN#=oTt!$<@I?J)s?+so|{QWJjRcXn3qC@bmdb z5w8;s8qi35Qs=$?RK0&yfdOEPrX`{$0d3CezKlzz3VE=|5$vQUVpjwliB7)E52Gr- zXjQYn0|HLXZmQb%Ja;KIM{9G1hQ;`26Bu&?NB7o@fuo0Zz9AhA*%N+G{n(iCY^|#> zIekRYd4a@lLhnzsS6Age=TR{zem0ZG{`sWp-YA2ISe?_`-^E)aKfii$?>b$p(B7c3 zajfVhs~U#YCQ-54+dCccm!pF8-Kry!VMt{HGA6wt<={^hcw8r(8ySy!;`D1zT*e`uMh(V^E{w6W$lev(?8)jWwyi9& zwV2%{RfQK(M){Lj-!P(QaPXQ{&D~d9ws#u#v40YiKPx$UP{ulI^=0&vDFfbihKXwR%NVNTS?FNx_zzYM_jJAUu#O zAOcscH0I|j=6jSLZ(Ck^3KN6fXAI-J8m#jjANV~$dkxACSS78Io<2BhCMuTVzEOc? zL^JoD*;*eiUcCqZMF?2u@AdC3db5PMt-;ufSVQr!bCb!RwJ1f%-x<7G8?l1&=Vxa; z5HN8Zw{%SUc1;c_yg-fVMke)IEFO_$;=#kRQEU<$~W*)l2@xPw@9^ zJqZ$;tDUs^GAs-cWZ?yl!qn%-S-}Er# zBFQA(ZnGVXJi8@=gBd-MJ6G5QgY>WQ#$yuyvm~(uR1@h)NbQlTS7w&z_qoov%iRJuyFLy|3p7+4vXca|Hk z+_7(w^^;1xaV5%>`wOJ>Gm$pEDmpbgq+4C&Bc9bq|7-BJQ(4nMFZ;t5j;&YbIn2lf zx5p77L5}yHlsN8PhNNa(0AT;<4j535++Z(_AM33wQLpA-Lwh{wK=KcR8R(KYVc(Yb zNr5gp0O^=-LlE-u#kaIHy&R|*ZVE^p41aw7&~h=mvaK7*a!6gr>@QeV zqJ4yz*7?$6Xw{%ddwnb$egjj;mhL{hj=zuV0EyobvuHDZo=VVv5 z6BiZ}Tv4*6+T$`3$O(67S^Av0_TsD8gD1a!zkkQZRI(ikA6ZQ;_fsD4-()NV1jEpz zjfD(uOSBiQ-(7Byuk?rzhy+rk;nCYYPtAtC@p^m57?mijsfJHVb=^!H?&uv9aNZT| zBGOd^!j}iI_IIBgJZ?QX>mp|dLm z{km^TQjR@S{i0nTEc~*{M{Qm^`;B@?>nx+x_pHuOCvuNXJ=Gd(%i8J7VfeBLN7lt# zG?5M0+3YH~s0@saijtMX#*YCKe0@1u>oSITcjk7Rx){5qnhZux*7UJqbrCTpYRq=j zK_g1rewWCRegyksy;;>W>`Cjw0c`|ar^(k@C1UDim;SL!VVl+V-CuvktTHqxtypC-M}q9l1RcBUsYC!`>m|WLlYR_Hq~MtZkIKpCmWITB z`@`?n3~d9YMD(_x8{Ye?T?Zz8WETM-V0ljw_mXDu?GOFKr;BXHcif01weqtE->}t& zkyq<0?m5t(c0)Oj&(7}>;C>C&<+y*gg7_4qDt+?ds`$LfI5db@b$~{ zI|X6mpAzsw+q52U6`Y29AK%4d!b*!x>r_6y_Oz`!cfpDVQw1Z+tuRo=(&|yM{(Whi zt@i?LvhZG^DknmD(A`+4FQjgTqQl{WL} zhs6d$qEz~Xo!C8?pbf_wN1!0kr^DB|>Jr8W=xUd8rc~HlG|2s^Y!#1}z8bF+`D^R` z`cRygpYnkTA2cHdWK-Cq@R<+}(iKd$1q$ZB20=c*_roTRFAZhNZauj-lKMX6gxS=| z$?fpO`qKQix8A;^@%Cy`1K|Pi#@Lr&AX0VbJfL`9RVhosXg@~tRttf(afY%K1PKfC zIzJ`^$PcAWW$r(`l1DCnJiPOi7e?|3X3ykX3m^|pxq)$c?z6xTp@D~_Z>aptw2)Ui zcry1N);g8dlqIKr;jK%3aPG@(zd1RmX54Y=gcASpYopR&xX_SvR!<`G=yssj3Nzs{|JuJFK20%17*CBS!|nM0^fuX1Ynv?Pueq^BvS6mycAYUz5O_H z$72*7E~VhC_?$alSxc3(#I*+7@LjudCPrC3d||2MIPJ;m^-T0Nw;uuW9Gl=LxwQH1 zLz3S;7aIWh(sxBLAig0a9hM4t(N8D`ccjt-gJp?}^gQEem_#cpY8s8dog4Bj?pi$H zb`rYZucRYQu0dZ%*4ZQ)PlPU3WMQ)qBN`~;007b+1=IMfUL&f9y!;OcYT6tC=7}mg zJWj2#@)ZCe$=fgDYBY>PkP1%kC8Y55i3N#o3)rbf0irdJx@?oAfX^?$1neMhGQcYH zD-rVKz2q@$*8b2h+S1fwiWM?DIzOORO?di}qUtX0a?m;{4NN><2AaHC;K-G)S^yw< z4;asP-(S!Iix=thT8|U+rZx#{tiz6)5@i558&p$5py5|mgr#LutSiE8H&K&69L`O2 z`|*}>0zSY_l0xrvTIS*XQ_x{>w|Ukn>+NAA&<0m@xF#7mA*tjLIaFJm7TCD>DZ=4R%-E&O0gv%-*!YQGZm%D{e6dy#aK;*(Wd6!^<|o##qfS%WIPQjfP2En# zk2XkPrG|fCauvZWae;^gNhBVpbdQkk=Bx*^bPo#gV?o`Z1(wAIbYN~F&}kd*mG{RV3_t7L8`d`9~V|El>TrT8#^Z{1YH4##M3Y@)ta~f9(OhNbOXjzbL<`xG2O0 zNfL3NDBN#&QZ61}#NTl8zveJ-O60cl`t*0g62Um@TjEb4$FinsQj6ygXN0$z0c$A_ z?CTrAnySa7xDx`6ih5%iunSkv@miPjxOWXprqGiY0ltn02Oj)>M-F(`He85)TX@-U ztZPi9%5+qvNv}J2Wt#kS+~Z2>uP;VF-GA4zo>x-z+BW& z!iE@0Odw?M(XHP>=Vono1eU2FOX|YtZLr|i0CvO*++lAP$EBklnhA_lE>MYFx6N*~ zohPG+7ZeE7oqa2yiFVN3fhlbCl&*^THnds#wa8!Lp!sC|A%j$g?O`x5({+46W~jpW zp8jih_iK2!^lh`5TL~+3fyw-&^=Cf?OX{HBfqf$Bsm_!z+;s#11nZ2<+B!@%+vBe0 zM?W!=@8LeTye@wh-nH&^$KAp@c|jBLu0;Wc5LTfiK#tSB4ohd%f4tHC@+fKJRn^4+ z(U$-Q$GeL%)@ULPG?f@^coPJ+Qgi1~+B$hNASSo>yYuPyA7aJXyoy#AEP^HCjpwge z9e=C=fX&m0mgR~s4Gi6l#?5XOM~1VZVlLATP+;wsJ07xU`a|&Eg7?N5^ZCK=&7&Yn zytqYq`;g`Gy|?RHnMCIwV&iC%QRNAbbX;=P@4h==(t3M6kugBd(bDH!RNBqolF&VB2YDlHxs?xq>zez%A`BMKi|I;#F1lWRBQaM_aRP}4p&3l1f%jRyQie=l_ z%m6V$ur%D+`7v|4=GE70&BlXvbaYC$8JC_0m*hOEcJYz!`$P<6-3keizi7*4r2ll( zIr?p$(#N!wC$5D#KkzKLT!;6|IeqFhKqNCwuA5{SJ=K{nE;%OUxlhJK2weFfdjISG z;CNt@?F^(^_`wIqRC_tT-Ff$LM`M=PUoj2byS{!|Dc)&^U5v54Xz(ZqAoT1CrvX%M za1PqGx80p=V=;K}^Sy@J%jY`k#;Rq_p7C4nuBo|V^-2i8tLAVuyd{)mQUb^T7A%8% zI+fkFudJ7o%z^V57HTTDlu4HRId9N5M0{l$8;t5R5Jv*ex36VKG|83BB z)#B4g#{a0{8sqYM|Npr&?yzhx+s49b*|uFvt5)4%)w1nn+qSW6Eo-f%rT_hX{a*j` zFsU2>IoW9xcSLm5_iH=Jnj*YdQ`&CcVR2)jHri=Zb z8;x4RePUp}HHw$2@-#$}vt7M93(E=7jOf+cTL`+of&ZuoFhgafVdESkmB^an44R?e z6AQaELmlbQq?0DN5BXk`PCSZ#0SBGRY@#>B0Ugmc=20R!R^+IN-0+s}W^ z?xt`5Nt*Q>qJMq!y(8sginN`M6EWmb*OOjC6Zk7`E(ge>jDE+b<5K4F_L)XqTurXE zQhm?JA`C%fsSi9EbCdJaHS0DjXl1T93OJ@JW5PGY7orQ!vM4Jz!Y^g62+r((C$*gT zNrb=z1lBnN3}^tC0Ly*Z;X%8$H^REsMz&*R`A1>=gYa?|p(xvPt#MEVbaVtn0SK(@ z>2`E4OiLYW52u*q-q-7Q5bC^TBx71LoC?VH00{J|=_Rd>TD&;9 zerEktuY1I7kO!X2gl${|sx&OUY#W4Ug+tH?4?yECvp*`DF?z)H|N0{P&$Q$7*WWes z*dX`IdLDeX0h&K3$Rar>baK7mURy7*=Q~C8l3jR(oT|dZi!b^rNd6Q1dMM^ah5QR) zk-6X6U8JiyFS=&-y2^*eSN>9BIHHJL0;5R%X%gy)y|5dw(86X`6XKI!{k$7;kJ)6j ziBG%x`A9pd^9v@bzFC>92^btlC`|z1L12LX(7^WI6;7)~Ce))b|M`*OawL~EOB#wP zM&MPZQl7|P(ZRh6TDStl4ofCN{r|`tXv1!vN1wmebUf}|!2=8P)a~_;@mBimUma1^ zcNH|J<7f=wfoIYVSisqDZrT%fS-6w;=>>ZkRcWBs08FYbL!2My;kF!L-(@x8+VrE% zL5P`L;Q7!s@wKz_z-MCBGsp5L$AqNuV^PnR{n@<2=2FOk%PsCmAqDQwynC?JRFu00 z_1ZTIe(9hfkVYs>a5xO4Trnd`%@}B;=#;7*1`nS4gZM-mL%xp!pAyjLa0=IvO%ag7 z9OWY9)42?Au)>}T!x3!qenh0WlUQxXkdNQo3%7e1zMOvkaw5Mv#UiP3wd5UwWtDJb z2PT0%gIzMz{L^MAa^XR+`b!Jmez+kR9_9NvAIf)d?8YbST$XszUuwFz5x(id$@04O zS6$nkX^rRojEyJL{Wt8uF-V17nS8V;kp7xVNBmdnxCZYakIav)r(7d%%Ppo}j@rW_ z7!vx>ZYoT13}ELPO~DAp!~zqauLq3a5>3w_@OvlJ3Fzj58!JLX_OGa*yLb`Fh;I-5 z!d+I^=X|?s+Yx{Uen11_VrB)6hp21}#F^GGBW$Io%Ng5el`YB(5V#Bxfb$wKP}>9c zy;Z(CYnJRe8Lxcdzr1M)@j^AKQ=De@gT`2aBZp{R~!79d#e1s}oGNp~8H6b&Uw5@C9yL+L$pA!DRgK^c#A)LZ^7h6N+~b z3xHkiM|D)vT(RGsN~Mm2SH^fBDoeb?e0}x98{n{Y5FVs?a z#flcm|8-)Q>z?_152yT9=U0LL_kWZ)4h_+;A1OYMPbexQz`%dXl$|WJq$6DBZtmh1 z|6tTc-EtRWyNukgl@cKpBO2OVswd%DKkPy!BZo)x??bPNMNLe2v$s4f_v%MY?$w$B z+8)QX)yXx*jO%H`95*1ZEVsWmh-Tm&E8qis*qN7YEWzqYMK%LZX$@$=@GZZl^M=x5 zeIoh@@GD#F5CjVJvH%2_vy^gZ9bIP>q2E^Q;%k;0VF%FjbXzHaC^qqBvYk9v&=;L; z9yM*LN(oJlliPwmDqhSWfQ4XYmX2Dv0!CB@Cz;+IN&QwIj5l9L(=OxAq#CiI_>8BU zDU00>6-Cg*9m!GaKD`ITqg;kpl|{`ypUBdH4LoOM?e(p3`7kr2VL5Pg?yKX7Qj*kRzToen0DbwfVW( zh{33XxN-h$qFQrdSNhdrfC`M*&yNVc5OX?yl&|V_#(?rv`d-~f{n~swc5Sfd;Il{p7UYGhqs!iqx|Jn zk^`nUijM>Uyp;h-lxsvFx^|Lk!h7A4uF%#OmpHdOLNh-_7%IO*mwF$BZw^Yb;sYuB zw9YFYAt6&C0R_Kh>BJx8qe6mU!Lw$|_MxcHxEt~7@8PpPQdkrK{J~UU6Tn|9DI0nO zEguKd3{{&XPO{(KN_mnFIMjp}EHw=VUqQ+C-ofrWWK31A+g5Que&xm^$$XPE6!@3( z><%1Vo#RiO=^fyHIlwt!6Aq%9N#N6fHoxO6<*1r= zZ%#vVJ&_CJ%8V9jLa%v6G{K!Blvdmhjy3=j(pN-i?qbu=p&)y#BOi&>i_n{-{nCdi zvJfNBm!lP@Do~vk!GsK!w6eFcA*zYO(I|ZvKWrY`_wx*F0xos|l4!)C6doJ;mNzSD zt_zY^Qd)+0Wi=c?!fexRi8G2}b${F;E3E>sOa7Q`Si$ma`kiamXS-H)nXArIsQ|#PLJ8@x`-3`T^KQDJ(XT`Ar_pkbbHqGYcC+ zWEijlbr}O}?`t0FgL#Rwu>_bFCemN5@&ZShsn{JryrKA+Ek6L;%i+>d zI+$a^Q*PFQ)5l093rnxY^Bao*MHpWkha3Oak8rwJQ~PL5Mx}1&9v}n1$vAOA;`0C$ zno0tcF(sf|+TvSOY+!8dsKtOQ78-TNG~0IQE;UtgLhLrwlD*IW!AV~jRGP!jvz|_R z`o*I4!C_92Bi5~Jgk6FXWV7eL9Lw@SnZh;whC+e@DewLa9q6QW%zV{$FMql+Ts*D9 z91Z6YXyihl8Qw}g@~YcxzXOQU);_xhKc%$GN^b--b!T}g>B`u1JsF}cmJzZgWp}FN zNQ-{KHMeXU{dLq_pI9Tba{E_4TSFB;3*L#tzDW^NytP!}7(Whf5WNN`+7%&?J!V5T zd|#z3HRl^)AynveN+egH0x20wL(o0Pqrm)B7bD#|$6Y_%U8DK=37tU-RNm`z7uBCSPOjMva7Cv1{5(m~$R{`PV^aG@*KQN$a2|EIUw zplCzf_|%P)gA^7L86k(4iF)h_7gfeAj8+Tu!ixWky;r+z626N_8I1tJ5d=~I!LWmH z^iT(4YsR8!Hw$5#v}TiP>vJW8!$)cw+Rnvd>=^N$t*JAu|3_G+p|A?{`43@1fWBkT z=Fsrovfd)0=_sjh;cw|sbS3!B@6G2e*xz%3dXC3_>Yydf0Ch1`!57Sc-}>Ej?uli# zSaI+Mx^yrRuKa_V5#OKk`#i=Ocliiwwp|Hv#WOvxt;eKR9DW)}h(D1)z%*BDOaPE~ z!j1rlDS{%Fc8W)IBIl{@ogOghk8Jl()7*{qL+P&?f&d+B_InoGX|I2*hjv=ibuRHS zBWp?5ijyK7XZ))i2#up2dq01@KJJ?ig*HTAG?I};^CZr(*f~4pqsD)7DL8(_Ro0gh zkEF~iBfu=tl4y_H>r64I8$p8wlCbO~O82XM<~lO3Xf#QeKPm(|_?0GB|J}lgWW(zp zl(31$M7t~o#dm92d*L;>F6Nvl2t zNqATfu*svlFT!#s;X}hgV%Gsy5HXSR8SYcrUd^@8CV1K$-=WcIS54B66VlJtDrFU+ zqPizO)SodvxFNvejQ}Z779B@$k#%MZ8m@rL9qTR_>Vm)@st8B1@3KRgzd*9Ylso>m z%J$7+j4}%5x~&%`BsnfA9@bwbiYr3yyQo8%))bp;tEm)6znXfQR*&6M@fvIBJsME! z;OJ;C1~gW0xy*k&;8q6#jB1qc(gl{LXXw^c$vTt-GMMKPW)=Rb+;>jXS5VWb2g2pc z&eQ4uY9@dQAm%R$+OM61yWa(o}EZ@(%C5{X;XpT2M`U@!X_GHRL$&4DMQH zvTtY#(RZx0&(_2+Kh4{|iB*nC=rc&hiWGJCV)#)t6sU^wvzdnw1RGCyOJ9*hb#AFk z?B!8j?iPeO78eA!#_i(Oh`MWG+n$F;gJZzV_>1G|`$?0ayRPGVHS_^i;CGZM$ZYB1 z8DdU;r9*;;aFs3mG`7QxOpyi;3-tbgwD!ee)r?H3K~o0`PSG`VAUZe;3X&MWaP(Qx zY4JxEurIaS5&;fe8X)Gp156UMj?$&RB|rR9UXAR|VhceM>q5eF3I>092NIP@qNeX} z{2t4i>F9M3@+`f8t=FFtIzyz`jGs^Qj0Ui`UvR6gd=vxv$->gwbGMj5m`2~=3QoN4 zrQ3|AdH^6V9|O9ilx$u8L`UMpRls8f;zEj{?CZ0D12FsBS;_D97@h3A>uQ- z$GZb7H$u8sgSP$YMzZGEiMV7`GLxip2xEH}y=6O!Txmow_U*CuTbs;YW*I8pDq;Pi z|IAawz5bJh)qEr$Zrv~y%sXZ+b9D$7PW2!Ij)yLAuremNsEyFX4*XoB*sW>=-niz*V_w3&T55bPJE`@^f@z zHJl9Eh*tb{3kSCm0shbW>&Ipn-@hY)dcPulJ8BqXg8@cQcjW{Zo zF!ia)@5_g1hZ2m`%x2TV;cU!BFQ50v_xoVZy{FfWtJklysh?xD;zn&+f|}R_DnJ09 zNi6`sX>qGjmAa8E{$9Wo7AXfVQpI6^C?G6uRfRmNJ5?Dmb`3AGyBXJJEiTP0R#LaV z7JxuQ0{d`kgY2kLH%BRH_^PT7r`=x&WuohQ8&gFdjOtLZ#~>kyd4Vvq%)u%_z6E)%|3vGb&Nr+2Ky!fMP$M(V@{fIIR95JaYL?yh;cfziyO z)xh|kB!O4)rSd_f`%cK>esfeiH{aiIQq;+%B27vrrk+P>)0F^AI+DmTq7T}7e{26<`Bih1)doR}=ARJ;0|>n$Q<8&& z8suUcg00ujH@1`EFpC5cWv6NYMLP)Ms+3Q-qYKoM0rhB=@hd-*Vk_(Q8l&@IT}~lMWq;f8s5TLV)e&-JnywSW?X1 zUYZ_7!Ztn(?hkD`p}hI)(D`qx7s+kbviNrw^zs|k1lLBB#gKzeCBMwe)WcKii(t<} z^ER)J(Sg?cxy|F-d*>mwp6e&ls>&CU6;a-Qcyfl7>6B5vfK|lgqMXuq77|hwrt3(B z?doavgRs!<`RI$TraS57d8lyWJh8hQLn`Sn)OmcXnhH;&kQqmjNXF)T8&{j=agCz7 z!%--KfP-YgUh?o|;?!6Ub(T;12bsRXjn zH4)Te&uASFJFHO6q73Fwepr(*2my)r%F^DKFMo~H$}cXc@u(v&*em_SbXi*%mrB?L zHP$5CNl-R7SqPSy|D&k@lRf}~m{$l`REBh#+OnSuu(4Si*9{meTcBLma@5uKk`Yo; zR|0*28GyroJdVW>b$tK&V4aL*$PK8BM&f}8Oo47KgZ2v1=IGdNE@IOZqfqKe{>ygj zeK>M~%xLz|2^XmB3T{r<`K}2uth%>W;h`UQw0ulOLV!sC1?Wx1fI5~My|IQw+*}^( zduDF1rsA?D{#bb&4}DqJ4*20IYH(JjIVoj?Y&1WvEkj79rmORyT>Nx74_A$+TZa0f^3C2 z>!2Zh>HuQ6cagK2n4yvLjdvWvxB8dMx?+mLNG_caX#9T@;8UCtdP$dG@KfA5v`B20 zI0rtgFM+$1G<%{CPP+Wa&->?o2O?df!b_9Yt`2=rosDm;^sW3-km;2T5wHXFf@*if z;qa)T{o%4bNv-4T4W}?Atlq>H-QEHd@^es+gER#6_(frnJ)y`HT#kdHZ#)5dL|btDo9(DGF;uz8n4r#Ww%|=h)ED znd`2(-&$o?L%l~(M)se{2Q38PdBPVSNS!LWJu&ka?I!d(qsx8G$i&DT{w%cBlSa_> zIAPNqYMsmW(YBxHif`dz_O4`;(?{>>W_jXi%1mc$FZ}Vip0=}<{ytpPJzqges+)Ge zn(=(MEF~;RW|ZVA=8VBQYUy)^Z9@+sDJ1BF8o9?=`tX1YSjc`g(vg(eM!e4E(rT8S zsJ!F^oB;VILO@`qn$4aqh5ILS$bOCKq$4HEdr#3dlGZi?77)e*evN&WWq;k?C5yWO z$6-z_UG~#rybjEP2|6=ZyKC~z-v3}uU_}@f7+68VC|a zC^%#zrJnok^Z}`UGtJdffHBWxiWflJ0Zr%w%Ehp02^QC)Vm}coBbX9o{g@-fL2LCO zN-7}@5GRmIp-D*LLIDFkI6kBnhxTe#_HaZ1mMISaZ&?Xv*7&$?JVY%f%A`GW&(`eg zOw{kM=~z_Aq?K)l?nBX)Xp_6SE?y~n4L{AruzC$>;X1$vOx~5G4lfCEH)`K=EVPgk z^vh%uyrcOwnx=GN_H}KTQJ5Z)N{uy@X}R){(OtCZqP%Zq zV%QR=SQ1~1z?;MHEk36Xdq2S+&YVT1#0Q24bb>b#AwCmVTTUl4hDKVKV*7`)UXj+u zdbIxD&5LfDU0jAL=LOdNZrObb@1d*(5wA4<(c{}%!x)1juEKC7e8bu!&I}R%f<`l) zIWMLnRGTri%XK*Lr^`w8=hDHZj2$BN$80khw93rJV3|7T6u$$Y0}ap*c@VHP<3VJb zw`}W@w2Tn?K1+H^3Q699JB=}WVP_+y>dM^xW+PC(TYhytx1;e(_|2B502p~@*_Cq& z@se?@5t&vh!^RMnlr3;qCmv%*n}@g>hdx2OwV!(p+8mjYpJZ7Er!)xoJ@bSM2>zRnylfx;c)Qx*^<~d}I&*+6I?Lbx8S|IVRzstR z1h|96l3(@kFXsW>^Ex^i0Wm8LTLE=_K{9#AgIRc3Cq)!o%<=5Leb*WRr6tjeTcv*(UZPINExi`Eo{z+MGz zsaMHwbVAhk@714!TDO1x{{BPG`PKWG6JP!J$y3{}A#%wX1oXVQqP|!{CIAi&*I5=L}RYi=6!oT zls^E%4ghf@pvKYwvZX1IiRm4U&7NY7gTa?;H)Yiz!f*yy6G$j5l8eGWiSS>MS{Qk( z&OhYyKsi=fBchYFL|T1oNDa>%B<91m=L6^mCW?JaNc;Za<^QH6_ZsxwCQWk6Qq8hY z@c^X9j|eb<-un{fYO1zU{4;lQRqd(FH@@M}jsX4b`AyFEOiVr9(QaAm!#BqD1Z47_ zRU75__wJNy;_LMr{ZE$6nkb*dWROMd;A#bFEhLpO3f%e`3tVL9ej$AZdLzgE|0Jw6 zvnN{O=}pA3P^0GebI7QFk>FL;(Li%uKvl)BBhwmOZ+}edS-s1~QjMk(O`)zsQ(YLM zL0&}u6t^4dSd17HM=JBceoknnlOixx7WmvOSfaULpnyvw zE^%0FKP`Umd(jeL+-_&>rTF4rT&vHqfn&xzLIWf*p*kjAIk4)3A>Z_ZG%(29pBlE-qmUmkS5#2wyBrzagkM$3y&MgE|<94I-8i8o6Pn zW&S`4WI!iqvfpl)s6I5N*p1yWf1wA#{|_mFW7_+#v;Pk%L4>~X-4!uW-U6WbNYGpS zTOgU|xof3h^Y@IPrgy{sggX=bEo)Pj>7y(Jgr+Ma;#;xZe;3YqK3IeePxAVJ z#!b_!cpOX1%hW!B0L-r!?3Z67I|(zg^~mcN_}CCCVLh6<-PTD(@sYZtWE}U$O7;iG z$z`^DBXe9Iq8gMruKWUFQOcg_3YZQXOK!&uj}DMec~7s?-l-?oeo-{I)|g-1ET1gl z#?&93qM3Yq%QW6_ieU~bOHi|*(1SVl7||oyi^x2Qs^9@`)z}aTh%8bDm%lEDb(Jb# zvT%MXw$ybJ5n)ZBB>QZ&_54-DzVywkR>wjt623>Er&DO+&dA!G(O1%(ak1B6D3H$k zr!@hJ;|QEdrIP%c~h70FWraJWna)hs#$}IYUH1AD$1rb z#gSdZwmx)zp*XqbF?+t|1CW^13QXXoP^@*SB&EJjM}tfTM_nf&@VvjP2x05Nar^~R zfh&kpz$z5V{*3`908qp$%$dTdjI1{Fk?~Rgr7Oq~JUKyF_p^Ks3ZgzNCp5haeIob` z)&4ZSX%2~I_!1XXp%Ir8y_10=#LwF8aKQe6v}+><-;2SjfRYQhz}w_|5gA8|w)%1G zT%4WLs7G@08UOMv&U$OF7{w2E&K#R-Gx9^u#D2dW3pA}=BYRMdigWM$rD&)z9AIcy z(G&$yj-DBQzyJI*9Z52+(7<@^x|!i>?Ti0&^VE|6TEq;TLOU$(C-~D$^D35D%jItb zTs~)V)keXeHkJP5G*pa_MUiz{B)n@H%lg@v&p8~~=JEl2Lx}T871_`;6lVL>dxv|7 zI&t8Eh2E7**Ny=vr*T85G$X#Gr#$zVFn&ny#i`Mq1gG|Cm8zhoSewEX&qZB4$Slm5 zORz;K)c2^he*NDirGJIA$zl4g z3ib1HmwCvqR-H;+YZag4KC%;=E|C|p?F%-?SM!z5SS%uK`h$N%^&`ZaU8ROB3!Iwj zV~ojgfI)W#kmvb*n<|~`k)VYNh140l>5kY~cD_mM`A;lYSBzxlRdJB*Q*GsXjHrkVw?4?|o|t=(_Yc z)a1gB)F@}z_{$eH&p#q_;z`jBF6)#B8`NR?O)`*BftlXJ2y~e5L_wm9*{k>Nm|b%} zjSPgwIv4}%#u%IcV7xYJ*}t;MW6RR1!~4nQMc$A1VQGVGf5YQ5%BWzKG3o~0!}>zu zo%})9E~>5tNE1W)pXQtI!PTMm&-rsc2f^nInBCx)j#Yl4IU4RcX7vrlnb(VYHp@b} zd<*jmx3`{y@0Zrkro1rx-+B+tbnOA^kyi685hF_-!R%pR3Ozc%D&gC#-#`vTJ)g*7 zTbiAW(eRHnZn(-KB}=qVo@6ucv_Ep&IwKPBYPCUT-hvN*`W=rN?1u&YKPnD=GDd|m zqGr#g`Jj$h`^B7|=*z9pXqyKX1%^+H1^}=%CkEvCr#}4l?YRrU!oskxiM>8JX|)$H zgyA+WOM{%OGk)~El1ee3w*0k@>!f?xmV3}Ld{FmKH@Vfk4heN;?MhP0@u@W%v)DjA zlaY!g@gtNs>f zPIW{zw%<5(C@x+K34G;9NiX349a;Ph21$cR25XAREN^ww1r-TU4!nc|yHLE-dH?Ra zmJKr|L{FYP0bqt7VD=@9F}NRAQ@bp?Hx)EAeX`tP$Pr7ft#ChBURZycZcx_hXFjX9Q|g{69=KH_ z366Ss{da$3V$l|Ib`{IAYE*rS2AjOSIj;eun+gw4e$eJ42H~(wO|N%w%D56+xd9Zt l_hbCAL$py;7G+z%4{{feTD1!h1 literal 0 HcmV?d00001 diff --git a/textures/throwing_arrow_fireworks_blue.png b/textures/throwing_arrow_fireworks_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..36c30bcdc4e806daa59b52692a67bf02b875ed7a GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwgnU7zURhlj94Nxf2)5S5w;&gI?1Z%T!&b>W9?U$`M z_5c48sRK>E#kWJ9fwbxC}^KJ xu@MLYMVmSq?POnnJTXa7&7^B?po1s_!yG@wcc0%i@&YYm@O1TaS?83{1OVsAN0|Ts literal 0 HcmV?d00001 diff --git a/textures/throwing_arrow_fireworks_blue_2.png b/textures/throwing_arrow_fireworks_blue_2.png new file mode 100644 index 0000000000000000000000000000000000000000..672805c6f74e9e694781844eafef2ad528ccb2d6 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwgnU7yZ``+oWB%n}?r;B5V#p&b(3Dzx)v(5AW`PVmx z{7YVunv#%^;Bh_e=ljbW=Ouc(DmWUa{rl7V;7($Si(yMd`1xv!01qnbK#5t{W3SkuZ#@SZYhL?2?`$u+QZ=K>gTe~DWM4fFT+9p literal 0 HcmV?d00001 diff --git a/textures/throwing_arrow_fireworks_blue_back.png b/textures/throwing_arrow_fireworks_blue_back.png new file mode 100644 index 0000000000000000000000000000000000000000..85956a63c5603b419594e37a5396b466489774a6 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7l!{JxM1({$v_d#0*}aI z1_mK8X6#Yg$qp1`FY)wsWxvnN$FHJ(y;jN-C{*g{;uvCaIyqs1jDeA157VLp&(6;N zul#xW`OJe_eB2R#*jE1e4+cD1|NlQWXlMii!R?wr&hpKh5A8Ir|Cg4qqdC;}oyNa< zX?uCe1k;pXbHv!(LQP(W6wdlMUnTkI{FF8&kf O00vK2KbLh*2~7Y6wNpI+ literal 0 HcmV?d00001 diff --git a/textures/throwing_arrow_fireworks_blue_front.png b/textures/throwing_arrow_fireworks_blue_front.png new file mode 100644 index 0000000000000000000000000000000000000000..fca7c928e4110891ef73e9e3e450ea2a26a96bdc GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7l!{JxM1({$v_d#0*}aI z1_mK8X6#Yg$qp1`FY)wsWxvnN$FHK|SK|E{C=}`G;uvCaIyqs1jDeA157VLp&(6;N zKUv}2iH^%EQ~&>$l#r14cRwv5A*8kI?!i^_j&1xb&m|G^?=a)Kl0!|#td4sd9?8ml sGvu9iL((QeAl1Q*sb)=JmmUK{Zj}1!mVzIFKuZ`rUHx3vIVCg!07zOxjQ{`u literal 0 HcmV?d00001 diff --git a/textures/throwing_arrow_fireworks_red.png b/textures/throwing_arrow_fireworks_red.png new file mode 100644 index 0000000000000000000000000000000000000000..fe0fd89dfb5e0ec77125c77cdd41961e876a4df3 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwgSwhHEk;i)p4^SxG)5S5w;&gI?1Z%T!&b>W9?b{yI z*Z%##MCw43Z}BcOZpY>tt82zND>+gUK)_|=&qJ(iK+wh`8@6b#@#k0aZfeK6#U&;6 z<5Iv%3=A3)lp6exSKXQPq=hp#DP1Ihoq=J(N|iYrrH_^Xtz__Y^>bP0l+XkK?o~qn literal 0 HcmV?d00001 diff --git a/textures/throwing_arrow_fireworks_red_2.png b/textures/throwing_arrow_fireworks_red_2.png new file mode 100644 index 0000000000000000000000000000000000000000..566c5cb3a655e2efb97531f5abc06934056dcfee GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwgSwhIvs!cEV0Z=I3)5S5w;&gI?1nU;Y+2;BG{L7pF zy?&j%A~hu;A;IH%+RyiwH_l7+c2#h6PTP>7Y!bicL`M?GM!lJZPt98r6Bxvkn+$8L xt_i1iH8S2|IMyvLnYeDDh0h9c>%|Q~r=>kpVtMRj{tjprgQu&X%Q~loCII!GL(l*K literal 0 HcmV?d00001 diff --git a/textures/throwing_arrow_fireworks_red_back.png b/textures/throwing_arrow_fireworks_red_back.png new file mode 100644 index 0000000000000000000000000000000000000000..8e90fc5bc0c5cd4b6cc9d87766eaa2cbbaf9a90d GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7l!{JxM1({$v_d#0*}aI z1_mK8X6#Yg$qp1`FY)wsWxvlXA!H^t|8~#;pisG|i(`nz>Ewh3G6qJ5Jxq%ZJUcu4 zzw+nh=Q9s#@o`7&Vf%ai`hN)c`t|=~gN8;R5L~YLAIMApvy-G2cowj^(N7l!{JxM1({$v_d#0*}aI z1_mK8X6#Yg$qp1`FY)wsWxvlXA!MejcVYJvpiro%i(`nz>Ewh3G6qJ5Jxq%ZJUcu4 z|73-8Cpu0q`2Xvd0I#^7fq{gCLrDCd6CVF>{N!i;^{YT_UCE)Q%OWepC+uxLZMW>8 nkaaUV&mx`^9u57bUKd#zOvE(h&;JPlxsbur)z4*}Q$iB}X$3+@ literal 0 HcmV?d00001 diff --git a/textures/throwing_bow_composite_loaded.png b/textures/throwing_bow_composite_loaded.png new file mode 100644 index 0000000000000000000000000000000000000000..67bf8e5e6f4d8140412cba3ae5c68e2fe58a35c4 GIT binary patch literal 692 zcmV;l0!#ggP)L}000McNliru-vbvGCmZeAwdVi;0zpYc zK~y-)ZIVA|6JZ#KpV!`zYOzj2JLpiQa#83|kfK865FJ9np@SgUQiozMLPcr?1v^x5 zaL^{{pe_jo5phyMqAfbB-k|#iq|HTl3=R$gFgGf6w4>!M_+2JC&%Rg~QbX#1|3Q8{Jq@7tbb;KB9st%o1mO6P z1E3Kg2m;#L+L|C;eYHq@=MjPrC|)X07N9J#Ih`0*QHb{X|Y)3;GVd2bi#+_ z_pGfv2jEgNO)i~OBSNVnB8>II?gK8}-L`t3M`kiEoB0@zs~fDXT#Ljs3hPy0ylNH*nYwOU10 z*;U>m^7+99lUpCFRQdHC>Ff!0 zlrNpfxIz4fwG0w#+55@O=VzF4$yNEQ2 a0saC7NkFSVtHVnG0000L}000McNliru-vbvGC^KL50nz{f0wGC6 zK~y-)ZIVA|Q&AMge&g0^&V=pcxS@}jOHQji8ILhG&wEr_Am7jdwiluix~1(n1) zr|6_k)}^*pCtU9jNdh3B&r`40xpO+p z;N4d=&z@l@>JcH#41*sgrx60cx5y=9A=YY;ZnB~PK&!sbMBEQsFgcpQy#pA)sS6%} zoE99%F|}Had_Ip4touIU_BQ+lz~+{K2pT>-f8n)1Z7VRd_ND8()IQY31`uKm!QMW2 z`{@m9pPvFSR;n;xDJj!}T8*Zsr&TymhX@FvR0Qu}j&NVl1(OC>6tJKGNqEB`AL%>N zm*ia%)v`ym?4@f-BJ-LMK5$87 zKLH>6_0_EZ2zor%4X0g`v?F(ONAeoU2r1b&M^LK{f@I7niaI0A3n>W)|qk zo?VbljhfC|ACBW7i6@V4=+eYJ1IYMc5)$^n{fk*{y$g2D{P87rV&u0bjyr9;mzS53 zlr(6BNl0$L5C5|;Sd#d$iuE08YW%RZbF;X(h|`K^!-s0w+vRh!365h(;>uC8{VoE? zX0sFu1#Ijj>K(v#vfYNwj3|n59EWPz>#QCazy7e3;6c|_ak5}(c)n8F1*Ge=l{V-e uQ*rWK`kl+y9#|AbL}000McNliru-vbvGD;G%Gw!i=Y0ys%T zK~y-)Ws^N<6JZ#~e@}Zy1V4gcQB_nG+qM;8 zDr-`&*NN7rN1@ql>e||xHX4n%Tb8A#`}6@bCPK~1OA)M_=E%9>n!@}8eBFLV8I zQ`gtmaa|XHN+BZv=dL*bI|9D%Gc+`m5E+~Q6T@c@X9N#6Tk!gg!**P|02tIx=jQVk<9>cftB>-Z9D3dcAJ0h;@QYmD_Ig+BYug&kTuM%(!MzE^l zT!o2=2^|<1P|LD3+OHNJszrycxvDCL@B8%j_A-?kyFDPdiSIeMg0+^;rE|)_ZjfPeV8QHGw7#0yc&%-bbszqn#>4DMv z<@gJTWm)=g+)h|ETgvYOy64?iO22hN3*%S1_qlm*T0GAql}aVnMI-?OYyqm!ZBK55 RUS|LR002ovPDHLkV1j3JF`)ne literal 0 HcmV?d00001 diff --git a/textures/throwing_bow_wood_loaded.png b/textures/throwing_bow_wood_loaded.png new file mode 100644 index 0000000000000000000000000000000000000000..251e643ec618b149543430fd9e5199dc9695bf08 GIT binary patch literal 622 zcmV-!0+IcRP)L}000McNliru-vbvFJ3BIlb}Ik?0sBcr zK~y-)ZIeA{6JZ#~e^2tBQL0@WtRU!AH@is$C7MB8x<#ufS`|^ah>MvN{04`L(j;{d zhXlo;IH^lCV5d436$DX4aSJFWToQV@JPz^R+%?{EU(fIV{GX3kRF&v;XU{tJ-hE9b zlL26URv23kUKarU?G55S{v6yTDi8z#$z;-se0jDX0Ixd)0UAwY_p}S3Rv?6X-3ihB@FA3#s+Lv!ij|4PxNQgoy5s;Zc<_SOg?ub?5CqmhqI}ly_<}GopXl?e^BD13q0o^2S**QEU#KPw7v2QX?4(>M-tXSyL}000McNliru-vbvGE+S(dhNb`j0xwBK zK~y-)Ws*-wR8bU%zcapvY2Zd^6QV=}}6ofDV?rHv^|E3s$!zPz8=SM7>?OAjC^Esx{2Nq*gt@SgW{j9 z54D=jdF&s0>{PemCnyvOl$Di*k_;}mK70g}|1~vYs#}(Yh~PL5(P)%Mt3`O@eXVZJ z)#&za9`DjCF>rS>1wcrGh;Z{9RMdg%!L8O})#bH}Jbe3?>6iB~@Kh?PfJB0@s!~x0 zl@}gpHir)n&1eWV(Va|T8STR{oADch>%q^}C;V|?d^RKRJ}XnHWC$)43VsqR-D`33 z1Pm_VYtH68#%D89TaCVco(ySLRo=X~t46*B_^UGT@>)h_z9>_vq^vKdb#z_@z;#`0 z+YZevGVrXl=b&cO_UOFI{Z`Rtslu`>%+Nb-KP@KN%ar!Ky_@Ii(04hi`HBb^ThP6) z5ox&7r+}O~+e$nhCt@6y&3Uvu{vpQ)2A@>@X1~ClV!>fw3<={b_#|($$D|Tt3ZC zb(;hn7J_>E(*z^r-u4)JtuqmPm(IR1^7%aF<>evJxHTC60H~Zs4ddAHz5oCK07*qo IM6N<$fk3n=96>Eak-aXL9cf^`e)|Nr9u{{P?q z!QReP=ZA^0!48L;JpUyne@k|nF)X~v?a8xS(Pv7P@M>-epxFQa=?pIa2@t literal 0 HcmV?d00001 diff --git a/textures/throwing_sparkle_blue.png b/textures/throwing_sparkle_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..d4710a313c8c761c82074fbbb3afb3673ce155c7 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE2qIq^80FVch%Gnd{gfK3GZ7|n{b%9oWt4ir|?4|kbf9FUHx3vIVCg!0HL&8 AO#lD@ literal 0 HcmV?d00001 diff --git a/textures/throwing_sparkle_red.png b/textures/throwing_sparkle_red.png new file mode 100644 index 0000000000000000000000000000000000000000..59ec68c88ef976282766589709ff199d525a527f GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4&H5&}ls&OZl=a29w( z7BesifiYu`(oS}uAbW|YuPgg~W(gs4>%;Q)Uw}fjo-U3d7N?UFBv>sPk4>A;^PiRF z-+ys|AN~Ha%6gsunV9}dCM7G*Iod5LVPA7#)il=S&n5}6vAGv_H0-cA{D0oO|2udN zUif2g{{8>|#k>C>K6vr2fT7O4#6>1+4E7xO@sRoP|D)aijXS!PS-#IdBFQJhuJrJO gfmdKI;Vst0Ms~FTmS$7 literal 0 HcmV?d00001