From dd00dce2647b8bdc4298c4157b6ed9c1da7c595e Mon Sep 17 00:00:00 2001 From: Piezo_ Date: Mon, 4 Mar 2019 17:03:06 -0800 Subject: [PATCH] Better standard tool groups, added 3d_armor support --- LICENSE.txt | 7 +- depends.txt | 3 +- examples.lua | 32 ++++- init.lua | 167 ++++++++++++++++++++-- textures/3d_armor_dummy_image.png | Bin 0 -> 157 bytes textures/3d_armor_preview_dummy_image.png | Bin 0 -> 155 bytes textures/armor_boots.png | Bin 0 -> 289 bytes textures/armor_boots_preview.png | Bin 0 -> 285 bytes textures/armor_chestplate.png | Bin 0 -> 457 bytes textures/armor_chestplate_preview.png | Bin 0 -> 333 bytes textures/armor_helmet.png | Bin 0 -> 330 bytes textures/armor_helmet_preview.png | Bin 0 -> 242 bytes textures/armor_inv_boots.png | Bin 0 -> 264 bytes textures/armor_inv_chestplate.png | Bin 0 -> 327 bytes textures/armor_inv_helmet.png | Bin 0 -> 239 bytes textures/armor_inv_leggings.png | Bin 0 -> 270 bytes textures/armor_inv_shield.png | Bin 0 -> 299 bytes textures/armor_leggings.png | Bin 0 -> 328 bytes textures/armor_leggings_preview.png | Bin 0 -> 234 bytes textures/armor_shield.png | Bin 0 -> 329 bytes textures/armor_shield_preview.png | Bin 0 -> 325 bytes textures/ingot_base.png | Bin 143 -> 0 bytes 22 files changed, 192 insertions(+), 17 deletions(-) create mode 100644 textures/3d_armor_dummy_image.png create mode 100644 textures/3d_armor_preview_dummy_image.png create mode 100644 textures/armor_boots.png create mode 100644 textures/armor_boots_preview.png create mode 100644 textures/armor_chestplate.png create mode 100644 textures/armor_chestplate_preview.png create mode 100644 textures/armor_helmet.png create mode 100644 textures/armor_helmet_preview.png create mode 100644 textures/armor_inv_boots.png create mode 100644 textures/armor_inv_chestplate.png create mode 100644 textures/armor_inv_helmet.png create mode 100644 textures/armor_inv_leggings.png create mode 100644 textures/armor_inv_shield.png create mode 100644 textures/armor_leggings.png create mode 100644 textures/armor_leggings_preview.png create mode 100644 textures/armor_shield.png create mode 100644 textures/armor_shield_preview.png delete mode 100644 textures/ingot_base.png diff --git a/LICENSE.txt b/LICENSE.txt index 3177a2c..227d071 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -16,10 +16,13 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this mod. If not, see . -Licenses of media (textures, models and sounds) +Licenses of media (textures) ----------------------------------------------- -All textures used by this mod are based on textures from minetest_game. +Textures whose filenames begin with "armor_" are taken from the 3d_armor mod. +Copyright (C) 2017-2018 davidthecreator - CC-BY-SA 3.0 + +All other textures used by this mod are based on textures from minetest_game. These textures are licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license. diff --git a/depends.txt b/depends.txt index a662ef2..ae3f621 100644 --- a/depends.txt +++ b/depends.txt @@ -1,2 +1,3 @@ default -farming? \ No newline at end of file +farming? +3d_armor? \ No newline at end of file diff --git a/examples.lua b/examples.lua index 3788c3d..94299c0 100644 --- a/examples.lua +++ b/examples.lua @@ -7,6 +7,7 @@ Default image structure (reference for texture pack makers): crystal ore: default_stone.png + mineral_1_base.png + (mineral_1.png^[colorize:(color)) crystal/crystal_shard/metal_lump: (crystal/crystal_shard/metal_lump)_base.png + ((crystal/crystal_shard/metal_lump).png^[colorize:(color)) + NOTE: For images that are colorized, I HIGHLY recommend sharpening the brightness/contrast, as the colorization can flatten it out quite a bit. Krita is an excelent tool for this. ]] @@ -38,9 +39,17 @@ Properties shared by metal and crystal: infinite_uses: Tools don't break. - durability: Approximately how durable the tools are (this doesn't seem to be 1-to-1). + durability: + How many uses the tools have. + Does nothing if infinite_uses is true. Will default to 40*power - Note: Has no effect if affter_use is set. + Can be over 65536, a custom after_use function handles this + + armor_durability: + Durability (number of uses) of armor (if 3d_armor is present) + Does nothing if infinite_uses is true. + Will default to durability + hardness (optional): Optional reversed nodegroup cracky of the ore and block, (1 = (cracky=3), 2 = (cracky=2), 3+ = (cracky=1)). Will default to one less than power. @@ -53,8 +62,25 @@ Properties shared by metal and crystal: color: Must be in format "#RRGGBB:AAA" Used to colorize images for materials/ores (if no custom sprite is given), and tools. + no_tools: Don't register a toolset for this material. + + no_armor: If 3d_armor is present, don't register armor for this material. + tool_ingredient (optional): Optional name of an item to be used in place of ingots/crystals in the tool recipe. + shield_damage_sound: The sound played when the shield takes/blocks damage. + + armor_protection: + Fleshy armor group, defaults to 24 - 20/level + WARNING: If this is set to anything over 24, then a full set of armor will make the player invincible. + (if 3d_armor is present) + + armor_hurtback: + If true, armor will damage the attacker when attacked. + + armor_weight: + The heaviness of the armor (the same as steel, by default) will be multiplied by this. + ore_image (optional): Optional custom sprite for the ore. Will not be automatically colorized if specified. block_image (optional): Optional custom sprite for the block. Will not be automatically colorized if specified. @@ -67,6 +93,7 @@ instant_ores.register_metal({ rarity = 8, depth = 24, color = "#00C018:128", + no_armor = true; durability = 140, power = 2, cooktime = 10, @@ -87,6 +114,7 @@ instant_ores.register_crystal({ durability = 140, power = 3, speed = 2, + armor_weight = 0.5, }) --[[ Properties unique to crystal: diff --git a/init.lua b/init.lua index ddb5dfe..3e133be 100644 --- a/init.lua +++ b/init.lua @@ -41,35 +41,146 @@ instant_ores.register_gen_ore = function(node, rarity, ymax, ymax_deep) end +instant_ores.register_armorset = function( + mod, + name, + desc, + color, + level, + ingredient, + optional_durability, + infinite_use, + shield_damage_sound, + optional_protection, + hurt_back, + optional_weight) + if not minetest.get_modpath("3d_armor") then return end + local durability = optional_durability or (20*level*level*level) + local uses = infinite_use and 0 or (65536 / durability) + local weight = optional_weight or 1 + local default_protection = 24 - 20/((level >= 1) and level or 1) + local big_armor = optional_protection or default_protection + local small_armor = (optional_protection or default_protection)*0.66 + local sound = shield_damage_sound or "default_dig_metal" + --local sanity = nil + armor:register_armor(":"..mod..":helmet_"..name, { + description = desc.." Helmet", + inventory_image = "armor_inv_helmet.png^[colorize:"..color, + texture = "3d_armor_dummy_image.png^(armor_helmet.png^[colorize:"..color..")^3d_armor_dummy_image.png", + -- I'm not going to try to explain how this texture hack works. Really, it shouldn't. + preview = "3d_armor_preview_dummy_image.png^(armor_helmet_preview.png^[colorize:"..color..")^3d_armor_preview_dummy_image.png", + groups = {armor_head=1, armor_heal=0, armor_use=uses, + physics_speed=-0.01*weight, physics_gravity=0.01*weight}, + reciprocate_damage = hurt_back, + armor_groups = {fleshy=small_armor}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=level}, + }) + armor:register_armor(":"..mod..":chestplate_"..name, { + description = desc.." Chestplate", + inventory_image = "armor_inv_chestplate.png^[colorize:"..color, + texture = "3d_armor_dummy_image.png^(armor_chestplate.png^[colorize:"..color..")^3d_armor_dummy_image.png", + preview = "3d_armor_preview_dummy_image.png^(armor_chestplate_preview.png^[colorize:"..color..")^3d_armor_preview_dummy_image.png", + groups = {armor_torso=1, armor_heal=0, armor_use=uses, + physics_speed=-0.04*weight, physics_gravity=0.04*weight}, + reciprocate_damage = hurt_back, + armor_groups = {fleshy=big_armor}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=level}, + }) + armor:register_armor(":"..mod..":leggings_"..name, { + description = desc.." Leggings", + inventory_image = "armor_inv_leggings.png^[colorize:"..color, + texture = "3d_armor_dummy_image.png^(armor_leggings.png^[colorize:"..color..")^3d_armor_dummy_image.png", + preview = "3d_armor_preview_dummy_image.png^(armor_leggings_preview.png^[colorize:"..color..")^3d_armor_preview_dummy_image.png", + groups = {armor_legs=1, armor_heal=0, armor_use=uses, + physics_speed=-0.03*weight, physics_gravity=0.03*weight}, + reciprocate_damage = hurt_back, + armor_groups = {fleshy=big_armor}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=level}, + }) + armor:register_armor(":"..mod..":boots_"..name, { + description = desc.." Boots", + inventory_image = "armor_inv_boots.png^[colorize:"..color, + texture = "3d_armor_dummy_image.png^(armor_boots.png^[colorize:"..color..")^3d_armor_dummy_image.png", + preview = "3d_armor_preview_dummy_image.png^(armor_boots_preview.png^[colorize:"..color..")^3d_armor_preview_dummy_image.png", + groups = {armor_feet=1, armor_heal=0, armor_use=uses, + physics_speed=-0.01*weight, physics_gravity=0.01*weight}, + reciprocate_damage = hurt_back, + armor_groups = {fleshy=small_armor}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=level}, + }) + + if not minetest.get_modpath("shields") then return end + armor:register_armor(":"..mod..":shield_"..name, { + description = desc.." Shield", + inventory_image = "armor_inv_shield.png^[colorize:"..color, + texture = "3d_armor_dummy_image.png^(armor_shield.png^[colorize:"..color..")^3d_armor_dummy_image.png", + preview = "3d_armor_preview_dummy_image.png^(armor_shield_preview.png^[colorize:"..color..")^3d_armor_preview_dummy_image.png", + groups = {armor_shield=1, armor_heal=0, armor_use=uses, + physics_speed=-0.03*weight, physics_gravity=0.03*weight}, + armor_groups = {fleshy=small_armor}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=level}, + reciprocate_damage = hurt_back, + on_damage = function(player) + if not minetest.settings:get_bool("shields_disable_sounds") then + minetest.sound_play(sound, { + pos = player:get_pos(), + max_hear_distance = 10, + gain = 0.5, + }) + end + end, + on_destroy = function(player) + if not minetest.settings:get_bool("shields_disable_sounds") then + minetest.sound_play("default_tool_breaks", { + pos = player:get_pos(), + max_hear_distance = 10, + gain = 0.5, + }) + end + end, + }) +end + instant_ores.register_toolset = function(mod, name, desc, color, level, ingredient, --[[ Parameters after this can be omitted ]] optional_durability, optional_speed, infinite_use) - local durability = optional_durability or (40*level) + local durability = optional_durability or (20*level*level*level) local afteruse = infinite_use and (function() end) or ( function(itemstack, user, node) -- Use this hack instead of the insane default which is impossible to work with. local tool = itemstack:get_tool_capabilities() local ndef = minetest.registered_nodes[node.name] + local meta = itemstack:get_meta() + local worn = meta:get_int("worn") or 0 + -- Using this hack allows tools to have more than 65535 uses, and still behave correctly. + local uses if not (ndef and tool) then return end local wear = 0 if ndef.groups.cracky and tool.groupcaps.cracky then - wear = (4-ndef.groups.cracky) * (65536/tool.groupcaps.cracky.uses) + uses = tool.groupcaps.cracky.uses + worn = worn + (4-ndef.groups.cracky) elseif ndef.groups.choppy and tool.groupcaps.choppy then - wear = (4-ndef.groups.choppy) * (65536/tool.groupcaps.choppy.uses) + uses = tool.groupcaps.choppy.uses + worn = worn + (4-ndef.groups.choppy) elseif ndef.groups.crumbly and tool.groupcaps.crumbly then - wear = (4-ndef.groups.crumbly) * (65536/tool.groupcaps.crumbly.uses) + uses = tool.groupcaps.crumbly.uses + worn = worn + (4-ndef.groups.crumbly) elseif ndef.groups.snappy and tool.groupcaps.snappy then - wear = (4-ndef.groups.snappy) * (65536/tool.groupcaps.snappy.uses) + uses = tool.groupcaps.snappy.uses + worn = worn + (4-ndef.groups.snappy) else return end + local breaksound = itemstack:get_definition().sound.breaks - itemstack:add_wear(math.ceil(wear)) + if uses then itemstack:set_wear(math.floor(worn * (65536/uses))) end if itemstack:get_count() == 0 and breaksound then minetest.sound_play(breaksound, {pos=user:get_pos(), max_hear_distance=6, gain=0.5}) + else + meta:set_int("worn", worn) end return itemstack end @@ -130,7 +241,7 @@ instant_ores.register_toolset = function(mod, name, desc, color, level, ingredie }, damage_groups = {fleshy=level+1}, }, - groups = {tooltype_pick = 1}, + groups = {pick = 1}, sound = {breaks = "default_tool_breaks"}, after_use = afteruse, @@ -157,7 +268,7 @@ instant_ores.register_toolset = function(mod, name, desc, color, level, ingredie }, damage_groups = {fleshy=level}, }, - groups = {tooltype_shovel = 1}, + groups = {shovel = 1}, sound = {breaks = "default_tool_breaks"}, after_use = afteruse, }) @@ -182,7 +293,7 @@ instant_ores.register_toolset = function(mod, name, desc, color, level, ingredie }, damage_groups = {fleshy=level+2}, }, - groups = {tooltype_axe = 1}, + groups = {axe = 1}, sound = {breaks = "default_tool_breaks"}, after_use = afteruse, }) @@ -207,7 +318,7 @@ instant_ores.register_toolset = function(mod, name, desc, color, level, ingredie }, damage_groups = {fleshy=level+3}, }, - groups = {tooltype_sword = 1}, + groups = {sword = 1}, sound = {breaks = "default_tool_breaks"}, after_use = afteruse, }) @@ -227,8 +338,8 @@ instant_ores.register_toolset = function(mod, name, desc, color, level, ingredie inventory_image = "tool_base.png^tool_hoe_base.png^(tool_hoe.png^[colorize:"..color..")", max_uses = durability, material = ingredient, - groups = {tooltype_hoe=1}, - after_use = infinite_use and (function() end), + groups = {hoe=1}, + after_use = afteruse, }) end @@ -335,6 +446,7 @@ instant_ores.register_metal = function(metal) -metal.large_depth ) end + if not metal.no_tools then instant_ores.register_toolset( name[1], name[2], @@ -346,6 +458,21 @@ instant_ores.register_metal = function(metal) metal.speed, metal.infinite_uses ) + end + if not metal.no_armor then + instant_ores.register_armorset(name[1], name[2], + metal.description, + metal.color, + metal.power, + metal.tool_ingredient, + metal.armor_durability or metal.durability, -- will be calculated from power if both are nil. + metal.infinite_uses, + metal.shield_damage_sound or "default_dig_metal", + metal.armor_protection, + metal.armor_hurtback, + metal.armor_weight) + end + end instant_ores.register_crystal = function(crystal) @@ -451,6 +578,8 @@ instant_ores.register_crystal = function(crystal) -crystal.large_depth ) end + + if not crystal.no_tools then instant_ores.register_toolset( name[1], name[2], @@ -462,6 +591,20 @@ instant_ores.register_crystal = function(crystal) crystal.speed, crystal.infinite_uses ) + end + + + instant_ores.register_armorset(name[1], name[2], + crystal.description, + crystal.color, + crystal.power, + crystal.tool_ingredient, + crystal.armor_durability or crystal.durability, -- will be calculated from power if both are nil. + crystal.infinite_uses, + crystal.shield_damage_sound or "default_glass_footstep", + crystal.armor_protection, + crystal.armor_hurtback, + crystal.armor_weight) end -- test-ores (WARNING: _VERY_ UNBALANCED) diff --git a/textures/3d_armor_dummy_image.png b/textures/3d_armor_dummy_image.png new file mode 100644 index 0000000000000000000000000000000000000000..4c61f2b44233f54d9e309455a0429dcf3071ac8f GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oQ0+$9;o=9L@rd$YKTt z{zMRFTw%XF6DTNF6%tXBSXz>iU&O#raf|ze&)QS{>ug~*v05L(}J)4391LOYY2YMi$r>mdKI;Vst0Bq$Y{Qv*} literal 0 HcmV?d00001 diff --git a/textures/armor_boots.png b/textures/armor_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..a8abe5113b64e4d92a1987b2ff1ddc8c90272bda GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oQ0+$9;o=9L@rd$YKTt zz9S&aI8~cZ8Yn1M6%tXBSXz>iU&O#raf|ze&)QS{>2lpSlZP-x6#$LduUZ~JsD3o38*uuTUdm>A*SIE8VD*OkXYX0>|U5@&{ z?%Lk(J#3#|Zd@tQv}Wt_%Ad>{OD7b+GwFYFJNdH2<5W4$*LQzf=kMqA)mkvcs$`Fu ze?5cd(*2*lh)xK4_g}H)Z}jBpD;&@n>B{KdSXxUS-D_NUwC3r00SS1z`njxgN@xNAm&|N^ literal 0 HcmV?d00001 diff --git a/textures/armor_boots_preview.png b/textures/armor_boots_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..1147197eedc5c564390baa5ab8c2fc02e7af8add GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPD1^iU&O#raf|ze&)QS{>IeupKgXY=Q!|K15l{B5{4OD22mobcfKTh{mOFH}#La+)z$|Lgh54w|W#YqoRR YFkI<0J==WacQeQ?Pgg&ebxsLQ0Mnvv#{d8T literal 0 HcmV?d00001 diff --git a/textures/armor_chestplate.png b/textures/armor_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..c0bedfb1baeea9b3ec55b647fc4250eadb32e1c6 GIT binary patch literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oQ0+$9;o=9L@rd$YKTt zz9S&aI8~cZ8Yn1M6%tXBSXz>iU&O#raf|ze&)QS{>KAM_peoNQ)(oGp4A38 zU7COWU;UZj)&z;RL@0W;zi_dhgzLp$uYPaR$)ECd{k6$zL8Yl#daw;P`Soa-}*rLFXTp~3vrnGNS>-uwP{x!tDMA7@^lE6u;){qOe5 z*z4Z~%9>wow7A6X_~EhfdTVnz28jU4w#4Y)_kKDzr&o!F_MhML?oI_mf3o4UMUh9$&AqH}E{X7j wd%rS1SXWo#xtgu?tNd51HJ>Z~MBA#yvq-$|P+!@t3JiG$Pgg&ebxsLQ0HONDe*gdg literal 0 HcmV?d00001 diff --git a/textures/armor_chestplate_preview.png b/textures/armor_chestplate_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..407f3cd079b067d7b05efd1557c1a367c68897d0 GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPD1^iU&O#raf|ze&)QS{>=KRHfA^-leWqseeb(@yKj1{)#zap7c zvv{|BvS!=!y;=Ik_u2yHhds-u@awj literal 0 HcmV?d00001 diff --git a/textures/armor_helmet.png b/textures/armor_helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..62205ef6b0029d922903ec6644d103445081d946 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oQ0+$9;o=9L@rd$YKTt zz9S&aI8~cZ8Yn1M6%tXBSXz>iU&O#raf|ze&)QS{>{WIPcYu8;ulwP^5SYWQT5um?be^|#`7glq#x_=k#g7E zy6j78WQ6DcMk@y|Pp6LM`L}OM1mD@s&FsW+wW>VPq37c*wu<+eGRL$152PKM=P!Bb zEtd@M&uZqZyUcH{+fP6J^OlJr<7E@U=YLe6uibj}>%yzD|EJw+Vca=m_Vb_nRziU&O#raf|ze&)QS{>`G(SF`{C literal 0 HcmV?d00001 diff --git a/textures/armor_inv_boots.png b/textures/armor_inv_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..35293711dd79d9767e9986db7aaeabded9c4dfcb GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPR!=VeS?7<&H|6fVg?4j zBOuH;Rhv&5C@5AH5>b*^T9T1p#K2H-i~EGn+Ee}P3>-#G>B6xd|A8vHJzX3_EKVmU zNPKD#oSB@M_)&gl{i7qCZZ(e-4m7Q~dEfxUnYwRpBoD6+UmuVoBrKdfVbY|g!vBYP z5}m@9EL!Ar;pB^~85+FIBFyjZ>~s!b-X-;_f>G?$k{t}o+F6fqaB?c%;#Ob?=I`Pa zE9qUJafH>OXu%4Xu=7qH!e-6^K}uCxho{}zu=LnLW`;Ek4uXxhUato_i^0>?&t;uc GLK6UbDO&~r literal 0 HcmV?d00001 diff --git a/textures/armor_inv_chestplate.png b/textures/armor_inv_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..c9094f7657ab6225566ce51742fc220587535a85 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPR!=VeS?7<&H|6fVg?4j zBOuH;Rhv&5C@5AH5>b*^T9T1p#K2H-i~EGn+Ee}P3>-#G>B6xd|A8t_dAc};Se!l^ z?9FvpL169@Cxz7y4*9NIaQnf>BAxyT-6`@h9!*ZCSk!!ibGc);@V6AE-8=k~<3n~x zNzABacF%7!~tFiw>0P3w*Y@%=O$p_}$?>(u$Ax<|q0p U3!c{92=o<$r>mdKI;Vst0P?kc`~Uy| literal 0 HcmV?d00001 diff --git a/textures/armor_inv_helmet.png b/textures/armor_inv_helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..310a6b2f244e29fb411581f8f2818e8bdbd6069d GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPR!=VeS?7<&H|6fVg?4j zBOuH;Rhv&5C@5AH5>b*^T9T1p#K2H-i~EGn+Ee}P3>-#G>B6xd|A8usJY5_^EKVmU zNPKD#oV}p6^=N(0BXz$y2`U*39-FspF$udp&#tyBkwbY`8b3dOTlxEYhI=YMv$=jg zKi__%)FGEli3HPx^Yd(Z#Pwnl9z1%)lq~T3*Voraq#d{t4ysqaxncNek3*qE084?Y fl2ehh1OvkaJFWI(YDvyO+ZjAv{an^LB{Ts5OU6%K literal 0 HcmV?d00001 diff --git a/textures/armor_inv_leggings.png b/textures/armor_inv_leggings.png new file mode 100644 index 0000000000000000000000000000000000000000..943d1ed4067ec53f4cc9fe68603c60107324f1d2 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPR!=VeS?7<&H|6fVg?4j zBOuH;Rhv&5C@5AH5>b*^T9T1p#K2H-i~EGn+Ee}P3>-#G>B6xd|A8tddb&7Hd)JU(_PPhS}~!#a;k`rB`+~Vp;$I literal 0 HcmV?d00001 diff --git a/textures/armor_inv_shield.png b/textures/armor_inv_shield.png new file mode 100644 index 0000000000000000000000000000000000000000..7e787d01e6686e5fbfdfbb6b2f01875540680a07 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPR!=VeS?7<&H|6fVg?4j zBOuH;Rhv&5C@5AH5>b*^T9T1p#K2H-i~EGn+Ee}P3>-#G>B6xd|A8vjdAc};Se#xu z`7GxV1%cM%XXW-R6|&x-X#L^E#Y1ltrgAXW3v9ATFgSUv^f7a*;NN2xD;b)VDj&_s zPdzB%9L0XF`o5}w(*c|F3%1^iV$f6#@N(2_{m2(Fja4FTbw~MuUF$er2KtpS zT0Gw+zs~Oq$A_&g5|1SmmYT4AxcB%w&s_!Qsu1<65U05>LZghBoj5pNNwVwD`8{Vs qwYAUXmWD@?myAx&t&@DGU(4{MJ@bG!dqO?XiU&O#raf|ze&)QS{>y=b>^&D*6bIi`DDNScf}#xD7okA8V5s$_qDdN6W-g1zm&Z=t!&=vqw5cB z(mC=Zi$%elCf9$QV QegZko)78&qol`;+03djRl>h($ literal 0 HcmV?d00001 diff --git a/textures/armor_leggings_preview.png b/textures/armor_leggings_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..ff488a8f7d9bcfb478bf21efe6fe4946af6c2f76 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPD1^iU&O#raf|ze&)QS{>4)`@+_^lJVg(7NBY%c<_GOYG%Qkw(?Vg z{QgJW*V}N{_Kc-}erWBM*iR2yMez2Z7v-P-sKz8Zd`ML}Y Y>{Enw`PO=F4*(hD>FVdQ&MBb@033Tz2LJ#7 literal 0 HcmV?d00001 diff --git a/textures/armor_shield.png b/textures/armor_shield.png new file mode 100644 index 0000000000000000000000000000000000000000..763f40c274874d0973a0f98f753c11c456681bc2 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oQ0+$9;o=9L@rd$YKTt zz9S&aI8~cZ8Yn1M6%tXBSXz>iU&O#raf|ze&)QS{>h0pfbP`njxgN@xNAg%5jz literal 0 HcmV?d00001 diff --git a/textures/armor_shield_preview.png b/textures/armor_shield_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..285a8cbf678ff805aef6ee1d3078be8d24bc1b41 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDaPU;cPD1^iU&O#raf|ze&)QS{>b%@I(9NA95T*i|+LpDFJnY zK*KSXmu2oUjrL`ht7Oq!x{cBD`8LMSHrKDOe#tYXL;Kr8U%7*JUyc@j z{N$<2czV;73EI-HqYD0<C(L* NuBWS?%Q~loCIC;GeGdQt literal 0 HcmV?d00001 diff --git a/textures/ingot_base.png b/textures/ingot_base.png deleted file mode 100644 index 616e8ccb363e09b5fa5e8fca8b8fdaf1a1daf4bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPR!=VeS?7<&H|6fVg?3o zArNM~bhqvgP*AKYB%&m-v?L?Hh=HNv7WWCCwWs>o890oX(uHF^{sUDAdAc};Se#By ikYHV$AkxFc!N9;Gz`)pQzY3^>fx*+&&t;ucLK6VEk0K=i