From 0fc71201b44c17005b5731486332f8b93a00fc9f Mon Sep 17 00:00:00 2001 From: stujones11 Date: Mon, 4 May 2015 17:08:40 +0100 Subject: [PATCH] Add crystal armor and fire protection by TenPlus1 --- 3d_armor/README.txt | 3 + 3d_armor/armor.conf.example | 21 ++++-- 3d_armor/armor.lua | 60 ++++++++++++++++-- 3d_armor/crafting_guide.txt | 8 ++- 3d_armor/init.lua | 27 ++++++++ 3d_armor/textures/3d_armor_boots_crystal.png | Bin 0 -> 494 bytes .../3d_armor_boots_crystal_preview.png | Bin 0 -> 2009 bytes .../textures/3d_armor_chestplate_crystal.png | Bin 0 -> 1313 bytes .../3d_armor_chestplate_crystal_preview.png | Bin 0 -> 1738 bytes 3d_armor/textures/3d_armor_helmet_crystal.png | Bin 0 -> 1167 bytes .../3d_armor_helmet_crystal_preview.png | Bin 0 -> 1243 bytes .../textures/3d_armor_inv_boots_crystal.png | Bin 0 -> 200 bytes .../3d_armor_inv_chestplate_crystal.png | Bin 0 -> 236 bytes .../textures/3d_armor_inv_helmet_crystal.png | Bin 0 -> 219 bytes .../3d_armor_inv_leggings_crystal.png | Bin 0 -> 233 bytes .../textures/3d_armor_leggings_crystal.png | Bin 0 -> 835 bytes .../3d_armor_leggings_crystal_preview.png | Bin 0 -> 1917 bytes README.md | 4 ++ shields/crafting_guide.txt | 2 + shields/init.lua | 9 +++ .../textures/shields_inv_shield_crystal.png | Bin 0 -> 662 bytes shields/textures/shields_shield_crystal.png | Bin 0 -> 622 bytes .../shields_shield_crystal_preview.png | Bin 0 -> 1791 bytes 23 files changed, 118 insertions(+), 16 deletions(-) create mode 100644 3d_armor/textures/3d_armor_boots_crystal.png create mode 100644 3d_armor/textures/3d_armor_boots_crystal_preview.png create mode 100644 3d_armor/textures/3d_armor_chestplate_crystal.png create mode 100644 3d_armor/textures/3d_armor_chestplate_crystal_preview.png create mode 100644 3d_armor/textures/3d_armor_helmet_crystal.png create mode 100644 3d_armor/textures/3d_armor_helmet_crystal_preview.png create mode 100644 3d_armor/textures/3d_armor_inv_boots_crystal.png create mode 100644 3d_armor/textures/3d_armor_inv_chestplate_crystal.png create mode 100644 3d_armor/textures/3d_armor_inv_helmet_crystal.png create mode 100644 3d_armor/textures/3d_armor_inv_leggings_crystal.png create mode 100644 3d_armor/textures/3d_armor_leggings_crystal.png create mode 100644 3d_armor/textures/3d_armor_leggings_crystal_preview.png create mode 100644 shields/textures/shields_inv_shield_crystal.png create mode 100644 shields/textures/shields_shield_crystal.png create mode 100644 shields/textures/shields_shield_crystal_preview.png diff --git a/3d_armor/README.txt b/3d_armor/README.txt index d64cabd..224f81c 100644 --- a/3d_armor/README.txt +++ b/3d_armor/README.txt @@ -11,6 +11,9 @@ a player's armor group level making them less vulnerable to weapons. Armor takes damage when a player is hurt but also offers a percentage chance of healing. Overall level is boosted by 10% when wearing a full matching set. +Fire protection added by TenPlus1 when using crystal armor if Ethereal mod active, level 1 +protects against torches, level 2 for crystal spike, level 3 for fire, level 5 for lava. + Configuration ------------- diff --git a/3d_armor/armor.conf.example b/3d_armor/armor.conf.example index 27395f2..15cfe91 100644 --- a/3d_armor/armor.conf.example +++ b/3d_armor/armor.conf.example @@ -10,6 +10,20 @@ ARMOR_MATERIALS = { diamond = "default:diamond", gold = "default:gold_ingot", mithril = "moreores:mithril_ingot", + crystal = "ethereal:crystal_ingot", +} + +-- Enable fire protection (defaults true if using ethereal mod) +ARMOR_FIRE_PROTECT = false + +-- Fire protection nodes, (name, protection level, damage) +ARMOR_FIRE_NODES = { + {"default:lava_source", 5, 4}, + {"default:lava_flowing", 5, 4}, + {"fire:basic_flame", 3, 4}, + {"ethereal:crystal_spike", 2, 1}, + {"bakedclay:safe_fire", 2, 1}, + {"default:torch", 1, 1}, } -- Increase this if you get initialization glitches when a player first joins. @@ -40,10 +54,3 @@ ARMOR_LEVEL_MULTIPLIER = 1 -- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether. ARMOR_HEAL_MULTIPLIER = 1 --- You can also use this file to execute arbitary lua code --- eg: Dumb the armor down if using Simple Mobs -if minetest.get_modpath("mobs") then - ARMOR_LEVEL_MULTIPLIER = 0.5 - ARMOR_HEAL_MULTIPLIER = 0 -end - diff --git a/3d_armor/armor.lua b/3d_armor/armor.lua index 2330331..130e563 100644 --- a/3d_armor/armor.lua +++ b/3d_armor/armor.lua @@ -14,6 +14,16 @@ ARMOR_MATERIALS = { diamond = "default:diamond", gold = "default:gold_ingot", mithril = "moreores:mithril_ingot", + crystal = "ethereal:crystal_ingot", +} +ARMOR_FIRE_PROTECT = minetest.get_modpath("ethereal") ~= nil +ARMOR_FIRE_NODES = { + {"default:lava_source", 5, 4}, + {"default:lava_flowing", 5, 4}, + {"fire:basic_flame", 3, 4}, + {"ethereal:crystal_spike", 2, 1}, + {"bakedclay:safe_fire", 2, 1}, + {"default:torch", 1, 1}, } local skin_mod = nil @@ -36,7 +46,20 @@ end if not minetest.get_modpath("moreores") then ARMOR_MATERIALS.mithril = nil end +if not minetest.get_modpath("ethereal") then + ARMOR_MATERIALS.crystal = nil +end +-- override hot nodes so they do not hurt player anywhere but mod +if ARMOR_FIRE_PROTECT == true then + minetest.after(2, function() + for _, row in ipairs(ARMOR_FIRE_NODES) do + if minetest.registered_nodes[row[1]] then + minetest.override_item(row[1], {damage_per_second = 0}) + end + end + end) +end local time = 0 @@ -61,6 +84,7 @@ if minetest.get_modpath("inventory_plus") then .."image[2.5,0.75;2,4;armor_preview]" .."label[5,1;Level: armor_level]" .."label[5,1.5;Heal: armor_heal]" + .."label[5,2;Fire: armor_fire]" .."list[current_player;main;0,4.5;8,4;]" elseif minetest.get_modpath("unified_inventory") then inv_mod = "unified_inventory" @@ -77,6 +101,7 @@ elseif minetest.get_modpath("unified_inventory") then .."image[2.5,0.75;2,4;"..armor.textures[name].preview.."]" .."label[5,1;Level: "..armor.def[name].level.."]" .."label[5,1.5;Heal: "..armor.def[name].heal.."]" + .."label[5,2;Fire: "..armor.def[name].fire.."]" return {formspec=formspec} end, }) @@ -121,6 +146,7 @@ armor.set_player_armor = function(self, player) local armor_texture = "3d_armor_trans.png" local armor_level = 0 local armor_heal = 0 + local armor_fire = 0 local state = 0 local items = 0 local elements = {} @@ -148,6 +174,8 @@ armor.set_player_armor = function(self, player) items = items + 1 local heal = def.groups["armor_heal"] or 0 armor_heal = armor_heal + heal + local fire = def.groups["armor_fire"] or 0 + armor_fire = armor_fire + fire for kk,vv in ipairs(self.physics) do local o_value = def.groups["physics_"..vv] if o_value then @@ -195,15 +223,32 @@ armor.set_player_armor = function(self, player) self.def[name].jump = physics_o.jump self.def[name].speed = physics_o.speed self.def[name].gravity = physics_o.gravity + self.def[name].fire = armor_fire self:update_player_visuals(player) end -armor.update_armor = function(self, player) - local name, player_inv, armor_inv = armor:get_valid_player(player, "[update_armor]") +armor.update_armor = function(self, player, dtime) + local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[update_armor]") if not name then return end local hp = player:get_hp() or 0 + if ARMOR_FIRE_PROTECT == true then + pos.y = pos.y + 1.4 -- head level + local node_head = minetest.get_node(pos).name + pos.y = pos.y - 1.2 -- feet level + local node_feet = minetest.get_node(pos).name + -- is player inside a hot node? + for _, row in ipairs(ARMOR_FIRE_NODES) do + -- check for fire protection, if not enough then get hurt + if row[1] == node_head or row[1] == node_feet then + if hp > 0 and armor.def[name].fire < row[2] then + player:set_hp(hp - row[3] * dtime) + break + end + end + end + end if hp == 0 or hp == self.player_hp[name] then return end @@ -274,7 +319,9 @@ armor.get_armor_formspec = function(self, name) local formspec = armor.formspec:gsub("player_name", name) formspec = formspec:gsub("armor_preview", armor.textures[name].preview) formspec = formspec:gsub("armor_level", armor.def[name].level) - return formspec:gsub("armor_heal", armor.def[name].heal) + formspec = formspec:gsub("armor_heal", armor.def[name].heal) + formspec = formspec:gsub("armor_fire", armor.def[name].fire) + return formspec end armor.update_inventory = function(self, player) @@ -348,7 +395,6 @@ default.player_register_model("3d_armor_character.b3d", { -- Register Callbacks minetest.register_on_player_receive_fields(function(player, formname, fields) - local name = armor:get_valid_player(player, "[on_player_receive_fields]") if not name or inv_mod == "inventory_enhanced" then return @@ -373,7 +419,7 @@ minetest.register_on_joinplayer(function(player) default.player_set_model(player, "3d_armor_character.b3d") local name = player:get_player_name() local player_inv = player:get_inventory() - local armor_inv = minetest.create_detached_inventory(name.."_armor",{ + local armor_inv = minetest.create_detached_inventory(name.."_armor", { on_put = function(inv, listname, index, stack, player) player:get_inventory():set_stack(listname, index, stack) armor:set_player_armor(player) @@ -429,6 +475,7 @@ minetest.register_on_joinplayer(function(player) jump = 1, speed = 1, gravity = 1, + fire = 0, } armor.textures[name] = { skin = armor.default_skin..".png", @@ -490,7 +537,6 @@ if ARMOR_DROP == true or ARMOR_DESTROY == true then obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z}) end end - minetest.register_on_dieplayer(function(player) local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[on_dieplayer]") if not name then @@ -545,7 +591,7 @@ minetest.register_globalstep(function(dtime) time = time + dtime if time > ARMOR_UPDATE_TIME then for _,player in ipairs(minetest.get_connected_players()) do - armor:update_armor(player) + armor:update_armor(player, time) end time = 0 end diff --git a/3d_armor/crafting_guide.txt b/3d_armor/crafting_guide.txt index 1503a3c..abd1519 100644 --- a/3d_armor/crafting_guide.txt +++ b/3d_armor/crafting_guide.txt @@ -18,6 +18,7 @@ Helmets: [3d_armor:helmet_diamond] X = [default:diamond] [3d_armor:helmet_gold] X = [default:gold_ingot] [3d_armor:helmet_mithril] X = [moreores:mithril_ingot] * +[3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] ** Chestplates: @@ -36,6 +37,7 @@ Chestplates: [3d_armor:chestplate_diamond] X = [default:diamond] [3d_armor:chestplate_gold] X = [default:gold_ingot] [3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] * +[3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] ** Leggings: @@ -54,6 +56,7 @@ Leggings: [3d_armor:leggings_diamond] X = [default:diamond] [3d_armor:leggings_gold] X = [default:gold_ingot] [3d_armor:leggings_mithril] X = [moreores:mithril_ingot] * +[3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] ** Boots: @@ -70,6 +73,7 @@ Boots: [3d_armor:boots_diamond] X = [default:diamond] [3d_armor:boots_gold] X = [default:gold_ingot] [3d_armor:boots_mithril] X = [moreores:mithril_ingot] * +[3d_armor:boots_crystal] X = [ethereal:crystal_ingot] ** -* Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549 - + * Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549 +** Requires ethereal mod by Chinchow & TenPlus1 - https://github.com/tenplus1/ethereal diff --git a/3d_armor/init.lua b/3d_armor/init.lua index 9d5d986..4a2116f 100644 --- a/3d_armor/init.lua +++ b/3d_armor/init.lua @@ -191,6 +191,33 @@ if ARMOR_MATERIALS.mithril then }) end +if ARMOR_MATERIALS.crystal then + minetest.register_tool("3d_armor:helmet_crystal", { + description = "Crystal Helmet", + inventory_image = "3d_armor_inv_helmet_crystal.png", + groups = {armor_head=15, armor_heal=12, armor_use=50, armor_fire=1}, + wear = 0, + }) + minetest.register_tool("3d_armor:chestplate_crystal", { + description = "Crystal Chestplate", + inventory_image = "3d_armor_inv_chestplate_crystal.png", + groups = {armor_torso=20, armor_heal=12, armor_use=50, armor_fire=1}, + wear = 0, + }) + minetest.register_tool("3d_armor:leggings_crystal", { + description = "Crystal Leggings", + inventory_image = "3d_armor_inv_leggings_crystal.png", + groups = {armor_legs=20, armor_heal=12, armor_use=50, armor_fire=1}, + wear = 0, + }) + minetest.register_tool("3d_armor:boots_crystal", { + description = "Crystal Boots", + inventory_image = "3d_armor_inv_boots_crystal.png", + groups = {armor_feet=15, armor_heal=12, armor_use=50, physics_speed=1, physics_jump=0.5, armor_fire=1}, + wear = 0, + }) +end + for k, v in pairs(ARMOR_MATERIALS) do minetest.register_craft({ output = "3d_armor:helmet_"..k, diff --git a/3d_armor/textures/3d_armor_boots_crystal.png b/3d_armor/textures/3d_armor_boots_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..50bbf2050369e24bf6265c0151b86c8d2ae07425 GIT binary patch literal 494 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 Y2yv$>RMT9PB>3&wS~*(Qnxj(w2A3;N<^TWy literal 0 HcmV?d00001 diff --git a/3d_armor/textures/3d_armor_chestplate_crystal.png b/3d_armor/textures/3d_armor_chestplate_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..e36aa49ce78b2e831156cc4891942ddddb3e886f GIT binary patch literal 1313 zcmV++1>X9JP)+HMk-jw0S|mh^_!^CpUx@5SdDC5n+eoUOtB6Z*hQcZ10?r%l9xdQ;8L8d&_Kb7uFn|3vn417`7f@xusmI4}L=O)s})wSeNW&XP`n3_ z0~EfhEdX63mvl&F<`})Jz^`snNq`K|7U^`UcLra15!FH?v)Kf>0Y-mAh|6#K@ zt&nVN#mvPsMiSgbvY`btFFcE6V=K}v9hkh3!_3fW5D}P@!1Q1*yv9S&ficolQyXT6 zPJ?j=kO5{coN_SN;^)8lF1H?VQz5^ zT1hD30C4lf<`&ngG9tqGsdhlA+DPE!=oOu8XaO;fjX&1G zxP!6tJ=Um{@Ij6X9SD@}-va=6`fYe=ygB5+y_b zP#zTn)k=c63nfZMZWY;RDX{wPOS>$AinEhb)#-=d{1$c^w*Zb4M+BAcpcLy6eE0;VY+(gL`Q^ z&-C>4|FaZkP9ma5d%Z%<@L2gJLuX=YgprFj@_C44{znEm>vh>^*1(e(SJXfagL|JKcHcm62N*)ag3Y#ln3 zLl|*l+#Zkg9>?sLcO!t|0G?MkqLD;6#;;ps(3*_)mTY z8TmR5;|PN}N?q7PRSurX-t*4W*5?4`qCJJrwy9v$2%4b` zn>{egGhpmM(KRq}9qMah#e#hzRL390Bj|&u8x?)nI&g0KXK2Q~giZ!fzHSYHh{|LQ z=;J-nQOeLn=&R=SWQ>DO+~B1*q%Xe4$fs3?M(>a;FFBo{5W%*>)dkALn4%!Edq`0| z{8TPS_~x|hK>`#&tViGLn(6@U4Sbx>YTnJq3Px#*&$zlz2*=q)jbFH2t*R5x*uMFt zZ6nmw+?mFR3y!HF9|_b|zMa*rKEio`BBnhL@X-YtYfdPEaoBhP{bn7ZbiefZNQNO+ zFgrH3V0Kt*W`Gi4l@JEEtX(>3LO4Gh`;+Khf&Hpar}D;0B_K5gD{HMpE{_|3EIV0Q z;O=RvPbxAcF)3_S{LpoioTdr;=L3was2ys0Z_^+=8RBkg!D}2qZJ=I(WW8xCy)CoY zic5GtjpcRSj4G61GQTa~!!o@FL{du+Ma>#8s zE|{zLP1c!42m9JJv}>^~p1re!Q}tNE`@)dxmXHYJ7}t>n#Mo_TFXaB-WcAI8kOo&L zVNWlWxd*~OnwVTJp7*>e^q^KH-hp76wx*$vKRYVts;j70q}OM>UTETCn|P~@W^(dR6e4rqkKcu0GK^7Y-UyPu=9CALa!#^qISMP1zckha`Q#aj?Ox{q z1xcnan7y1~tSm808~bNxllP$v3Nt_egcM!ds_?AX4a} z`L>Q5l>p?Zq!O<{4PK?BNbvxI#;8sw)hdOpX(X585{I0J@~^zBiS=d%P?V_uDE#^Cl-BAPc66hOAFG?@yu8?j3(l*Q^?aBnHh|b4JFs|oCBLD5 ze-4XuGg1l6cr|2uvk0-N9cZxN;CDAEl#670~)#Q86@)Ggsx zcdO9uRD1{y>-yR}`v>{)z=;3= literal 0 HcmV?d00001 diff --git a/3d_armor/textures/3d_armor_helmet_crystal.png b/3d_armor/textures/3d_armor_helmet_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..c323e948cfe185d93d5d39e98940671081104b11 GIT binary patch literal 1167 zcmV;A1aSL_P)WQDG9}ZVWAs!Cno+RVAPnH zxN@s;fkI3)#DyzXbxny!o(K^9YS-sSgu z@}Bpc^D5Rc`uqD?%pa7nvV?XGB7)cu#Nxyf*lLvxCq7k$Lg8Qkq1Q73rBVr7t@84| z9lZ5Sj`*g#iEnHnp1p^cc0XA=b31U?GXdFbmPO!;6O$la|F-^E z*9y>jH9X}wYxWM0Patdg=n% zltHS&bqW|A9lfPER6R4C%jF2ekcEW>%H=X5LUVI7$z&4W_erPI%x`;95DQ8pVSrQv zL_l;e>(`I)LzDwNA*nwpweSXf|bX^B`Y#^%kNaU6$Isf6pgXsvNw7h?>b=aEb% z>q|giUmuGDuZf7@#1b``+rUReP)bFe9}pX&w1d(PHjHGil!~T<2ueF37H#547$RX1 zt*sDuqw;c045yw1G&MEhboaft|LFmCJ=VeZb3WRQ;U>}?+_Q~S=gxx&?>x7QGk++& z4V!RG0+ZfIcgGgy=jTyM@#eFGoS9q3O{DQs8D8K0I1k;|#t#!yh^?}J?*Idjbn^3j zh!aa-GFiH|wDJ4gY<+z|7)II6rVNM2Ct04KsX4tvU(T(}{E+vLeHAqBZa9*_F+KV zFUQoSOP4UlFnVz-0DHP82*Z%$lMjNeu=nAMRI62vPxVB-r1dmfYtrd7#jbq<@WJu3 zwSSI&J5}=$VnY-jF()dox)SjBn6v(JRJ$T<-@YAy;o)KWo4>;t!};^G7-QJ;fI}*k zVtV>dM1-gAKg;6cB9|{;rnR+|AP82yf@fC!MAb*x)oQo?G9Qjkf!O*I5Cj1zy&AM@ zc=z+!X!EzzYtFW}x0A_axO(*})6>%wi^VnjKb3a?u=NR#1G!F)6sBr>PAtKJTqhrY zJ#h{D(PXKs5o&2^sdarDM4rBN@FP&_I?qrn78xHOr%)(REEcc#5lTgOuPG_*#nE28 z_O{a3s37psuBq=B?CtHPvhxk8$y6zR96qgvI?gdNGIC3A4Gj%3^6R~9eSVkRu-w8( zZHSG0#EQGD8v*%zp0Tm9n_j=2H+y<|YE8FNsURX)Ynh#$<&MV9*zE=yXrO@x8fc(_ h1{!Fffd>AM_zUD#x}M&Z*;oJo002ovPDHLkV1n?_C$j(m literal 0 HcmV?d00001 diff --git a/3d_armor/textures/3d_armor_helmet_crystal_preview.png b/3d_armor/textures/3d_armor_helmet_crystal_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..451a15dae6001a128fadaab05e229c467b43f5a0 GIT binary patch literal 1243 zcmeAS@N?(olHy`uVBq!ia0vp^4Gav73><7gR`t)ii(P=vF< zBeIx*fm;}a85w5HkpK#^mw5WRvfpFjV^`!Uyy@x4z`&B>>EaktaqI0}$84EYnFA01 zTN`^`n|7>&ePjHBfR_tJ_BTAr)o974BZYoNnJFVJ-5&Y|A>#a9iw|I6XmwlYOx^l|X z;=Na`=AD{(?c<_VQO953d*<d{(@O^my{mV}E zsN?$eMQ=B*tGEC9%I-?e{w1pdR)w@ zUz1m4Q<|l=YEj3W@_YO%b%Op>eUCd6W^J8a#3-Yn9{ZT)=wCA-OW34zMAJ=-51V?S)a-uaNjS#J-^_0;PbBu#;-*l zh!pJE^*qn_3rjyJP=1I(gB}rPz(^e!PQs~B_S#2}RzF|-XLVQ7>W(Sfc%O7E@(5fa zB53*PK#^vUi`PUpx%2%0WMh*4m8h?)`FYpH@7q)J`Tbw-|C*>QckcM%pOW)-obbJu z?5A9`WX0^X7wINDJ3Ta~O`FEI#Wzz%ebw!^ekly>wSjY(!0C-Ff6^d$3QSfN-dS<= zs=d-8c}sKWWXtEVa@`uIm7YC&rnJ<=B<_0YlR1y~yB51F(O7-6BgXY^j@y%}-%`p; zl}>HCQChn28*Qs3`ytD{OjL7Qys`<@O1TaS?83{1OV%Z B+#dh{ literal 0 HcmV?d00001 diff --git a/3d_armor/textures/3d_armor_inv_boots_crystal.png b/3d_armor/textures/3d_armor_inv_boots_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..5709a175164ed2d4ea9ad9f8325cb0ef25ec6417 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DjSL74G){)!Z!AbW|YuPggK7Cv@GRu0yWPk}o(ZqUnpSa34OvAeOVxhvUGN_!k{%DUN)pNen)BU%QvD je8HL`T*&D3$yowutgS>wf}Bkxkj3EX>gTe~DWM4fLIOLz literal 0 HcmV?d00001 diff --git a/3d_armor/textures/3d_armor_inv_chestplate_crystal.png b/3d_armor/textures/3d_armor_inv_chestplate_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..4d2306668fe2a8990b1d36a5d744f14ce10275d6 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DjSL74G){)!Z!AbW|YuPggK7Cv@GM*a-bKR}^MPZ!4!i_^(}{{OdUR&D5PbUJY8 zz<~n^5j%N~N3RK0ln~q#eTD3#}w7m?Jn^jT8@9Jeb*;#LU2Y W-B3njr&kZq5e%NLelF{r5}E)7no)`X literal 0 HcmV?d00001 diff --git a/3d_armor/textures/3d_armor_inv_helmet_crystal.png b/3d_armor/textures/3d_armor_inv_helmet_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..8a29eecfe217d1ff3ab3f01d4d02133cbfa1e2d7 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DjSL74G){)!Z!AbW|YuPggK7Cv?b^P49pssM#DJY5_^EKVo?`TyUZS+$|F(aB*W zqs|MawyCE-{CZhaEuw5RU(k{#VV3LDDI2ru{=U#_Q}j8KGS7(eBrzg!{%Q7!cU>G~jfuEqcJ&uHpuI9ZPHy8aWt> Xj1Bue{oN)3UBKY!>gTe~DWM4fsC`t{ literal 0 HcmV?d00001 diff --git a/3d_armor/textures/3d_armor_leggings_crystal.png b/3d_armor/textures/3d_armor_leggings_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..cc61390c31e5ecdf562f76397b4895b109cc43b0 GIT binary patch literal 835 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 9f02380..58c39a3 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,10 @@ Armor takes damage when a player is hurt, however, many armor items offer a 'sta percentage chance of restoring the lost health points. Overall armor level is boosted by 10% when wearing a full matching set (helmet, chestplate, leggings and boots of the same material) +Fire protection has been added by TenPlus1 and in use when ethereal mod is found and crystal +armor has been enabled. each piece of armor offers 1 fire protection, level 1 protects +against torches, level 2 against crystal spikes, 3 for fire and 5 protects when in lava. + Compatible with player skins [skins] by Zeg9 and Player Textures [player_textures] by PilzAdam and [simple_skins] by TenPlus1. diff --git a/shields/crafting_guide.txt b/shields/crafting_guide.txt index 445837e..9b61dde 100644 --- a/shields/crafting_guide.txt +++ b/shields/crafting_guide.txt @@ -15,6 +15,8 @@ Shields -- Crafting Guide [shields:shield_bronze] X = [default:bronze_ingot] [shields:shield_diamond] X = [default:diamond] [shields:shield_gold] X = [default:gold_ingot] +[shields:shield_mithril] X = [moreores:mithril_ingot] +[shields:shield_crystal] X = [ethereal:crystal_ingot] Enhanced Shields ---------------- diff --git a/shields/init.lua b/shields/init.lua index 2bc3019..b7e4340 100644 --- a/shields/init.lua +++ b/shields/init.lua @@ -100,6 +100,15 @@ if ARMOR_MATERIALS.mithril then }) end +if ARMOR_MATERIALS.crystal then + minetest.register_tool("shields:shield_crystal", { + description = "Crystal Shield", + inventory_image = "shields_inv_shield_crystal.png", + groups = {armor_shield=15, armor_heal=12, armor_use=50, armor_fire=1}, + wear = 0, + }) +end + for k, v in pairs(ARMOR_MATERIALS) do minetest.register_craft({ output = "shields:shield_"..k, diff --git a/shields/textures/shields_inv_shield_crystal.png b/shields/textures/shields_inv_shield_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec1981b11afc00bd8fd134d4daf11ade41790f6 GIT binary patch literal 662 zcmV;H0%`q;P)tfwHkAzmDA3@izAI#?Cic|-e+)>@zNFccRtZ<)J1&M%G^Ym z$;wTpPmiFjr`1ukIts6Q?4^>Cg5=JP>r|5%Aq4w7d9DwLgy79~O1T)3#1Q~jFO&iB zz(J-+e;(kv9g1V)eFyR1LgFZQs+}iY@Kz53cD}cnswQ}=@hT%2 zMZ0J7+Gv7R1n-b>5vRJx0nJ8TsI*1TdZMI+Q(c@^w3Q_|hc`W(R>*JP81W*Uv?>*~EK~_a194QIt>XZ^Kk2Tj2p_TmS$707*qoM6N<$g1A~LmH+?% literal 0 HcmV?d00001 diff --git a/shields/textures/shields_shield_crystal.png b/shields/textures/shields_shield_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..888bc5a7a0c9aea60ca3e2e8e104a49f5aa9dc7b GIT binary patch literal 622 zcmV-!0+IcRP)%08)~Q=?4(prSVSRHu5Ha#R@po5N=r1i3vk7um@a(#` zxXg?D3k_}xP6Vy3KIGl|T>zdxU1e>l%cU~s}+j_|J{K6WU)Hvu-JXV&C7FW>p2`N4#x_wr|gd;b1liU$B*chIYI~yhH-Sj zsR5Y~y!tevQ)HBR2Ec>s9RNIVR4Yc`k8qPQMgK-L8Ib>0WKAS!=LsR8tb^dO&V%>O zoykjrbMYDQtv0lzK)HY<;DOqByt4>v2+rV*j`tPVA5CbtGK^Aa=P|~hj3Zcsw;HDv z!74c=ntt+y27dJg7I2V=p zzZx(*>leMNO&%rrDl!VO`uJkK9!= z%0gwXBZ`h?lDVW@5}TA2hH++R?9}O>^Vd1w&-32C@B2RA@B4n9&-*5LdAh7t-lz-! zz-l*FoVTo{0ssh5gvxp`;#j(@fd;#~-~j0|^6KcRGLKS(>%k}hP+7ZNKtN^|O6G)} zbn|e64M5f?TIeSx!KJc|SKV;Cea^i8l+7k=+ON^T7QXG{H+%eMh{=b@Oy`af7>q6Ya>8|BV84Js&5n@PjfJAH?_V_j!w)^do8RW zd%S9{TCmH_=UGLE=5o;#_Tb!PyE;gghs>x2K~s+%_dSXnJeqIuZlN~bH;ZQR*3{sX zF0VYfOElO%)9aZPU*_C=ig4^|vh!v{SPa^(CsYd7o8mgdK;;8}ju2{XyK-5%^^3mg zo5aZtDG=C|w!S58Y~yYKvW(WJNzJH%WL*`w!S4dKGby_uf?N;^+6e{}mVq6HJa9Uu zpjk+*zZb6WXo}4+Z;QfU{Vtr%%c^rG0VDvs45|dJyMBnu4_}v2d6qhihT?RZ8XQt9 z!?fU3EdVY9ZD;56G(hwM1*RD{%mwD47v}6$;dvCOAD-^q@ip2@h~bmIhNq-WpasOb zq3|I-zg-)fY>qv3`@D=#If|7|HVr}}2|>_N@8g11ML2}Q3>vzI0(}s$PFWH78(v$z zZ|Y+6hsz`632t$?l6X;FyS1OZF9z$gMF(p?K$3p!P}%BT6=nJPm5OkZ(v4AClfIU2 zj}-g8kDF2wS4DjpM&^;K7Z2D57$Y^RC9X>-E4W+f6_l_i2yYaui|}8YTvM;r>x+AT zd02gD=&~-8USVdkHnNKB=*&&%y;XU=u9C8E^fEZ;RPt0MQ}u@xW(1&1 z%rSdw+xzJ~w>0bO1)}I018uOE0sxXxciOi}xIa}QYB9+5Z5uqdltkOGR9wPJwG&~v z(hq%1-U2)JbY~JsCN&UtUi5jfR9s`-xL$z=_Y=#jO5a6(BANl(GIW4HJ_V_k+dF>39U$^&P5}PI0;>p;q__WY=k{sw z9@O|{cjULF3RZO!v+llJm2gb^;)N;>kz7$IP0=qa9VfPwjPLTaKJj&_D)s5YU7E|! zq*8WO_vdG$7(xcKWz=6&)0#O(w`{#9-qOv7hHo$KN$i&&IS{$1Vh0`*s~AdNv=@>qa4n z?D_A;JkJt5*`)<3?(Uy@AE zF&>)nK~G*12{8n%#u{#eG?scoC1R>>8f-0aszan9Wm@8ZZF~Z%t8d3#N@y~we_Zx~ z_x`RHy;AK67c5ZEFKKyzA-oy%(~;}fw!x00@}_8FBmVxl5EKyDJu<~&a7|d(b0*Y` zcpM^|Vw&fUA7kaJuBdbdh#ObxEORjnV^K_l{CI6~$z>mN8m*%vn3;RO5-S;3I`_xO zLZ*X%XOH5uYmYemn!$f&8|NU?)6@7i$>2=ir;Xn>oh$FL$dL#6_8`a~1}dPT@Gm<1 zUUUCXpK7bm8SykRk!;p2+i~->NmRRN{+27;FQLHo>Nb2^>W>J1)|p^`K)d9iqT?B?W&D|HAu F{})UP(SiT~ literal 0 HcmV?d00001