From 5a2f451870a523e521b455ae2c5d165d3d43af0a Mon Sep 17 00:00:00 2001 From: sapier Date: Thu, 14 Feb 2013 22:07:33 +0000 Subject: [PATCH] add support for drawing lifebar above mobs --- mobf/fighting.lua | 10 ++- mobf/init.lua | 4 + mobf/lifebar.lua | 148 +++++++++++++++++++++++++++++++++++ mobf/mobf.lua | 6 ++ mobf/textures/mobf_lb_00.png | Bin 0 -> 260 bytes mobf/textures/mobf_lb_02.png | Bin 0 -> 267 bytes mobf/textures/mobf_lb_04.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_06.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_08.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_10.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_12.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_14.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_16.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_18.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_20.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_22.png | Bin 0 -> 271 bytes mobf/textures/mobf_lb_24.png | Bin 0 -> 271 bytes mobf/textures/mobf_lb_26.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_28.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_30.png | Bin 0 -> 269 bytes mobf/textures/mobf_lb_32.png | Bin 0 -> 269 bytes mobf/textures/mobf_lb_34.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_36.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_38.png | Bin 0 -> 271 bytes mobf/textures/mobf_lb_40.png | Bin 0 -> 271 bytes mobf/textures/mobf_lb_42.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_44.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_46.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_48.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_50.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_52.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_54.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_56.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_58.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_60.png | Bin 0 -> 270 bytes mobf/textures/mobf_lb_62.png | Bin 0 -> 266 bytes mobf/textures/mobf_lb_64.png | Bin 0 -> 262 bytes 37 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 mobf/lifebar.lua create mode 100644 mobf/textures/mobf_lb_00.png create mode 100644 mobf/textures/mobf_lb_02.png create mode 100644 mobf/textures/mobf_lb_04.png create mode 100644 mobf/textures/mobf_lb_06.png create mode 100644 mobf/textures/mobf_lb_08.png create mode 100644 mobf/textures/mobf_lb_10.png create mode 100644 mobf/textures/mobf_lb_12.png create mode 100644 mobf/textures/mobf_lb_14.png create mode 100644 mobf/textures/mobf_lb_16.png create mode 100644 mobf/textures/mobf_lb_18.png create mode 100644 mobf/textures/mobf_lb_20.png create mode 100644 mobf/textures/mobf_lb_22.png create mode 100644 mobf/textures/mobf_lb_24.png create mode 100644 mobf/textures/mobf_lb_26.png create mode 100644 mobf/textures/mobf_lb_28.png create mode 100644 mobf/textures/mobf_lb_30.png create mode 100644 mobf/textures/mobf_lb_32.png create mode 100644 mobf/textures/mobf_lb_34.png create mode 100644 mobf/textures/mobf_lb_36.png create mode 100644 mobf/textures/mobf_lb_38.png create mode 100644 mobf/textures/mobf_lb_40.png create mode 100644 mobf/textures/mobf_lb_42.png create mode 100644 mobf/textures/mobf_lb_44.png create mode 100644 mobf/textures/mobf_lb_46.png create mode 100644 mobf/textures/mobf_lb_48.png create mode 100644 mobf/textures/mobf_lb_50.png create mode 100644 mobf/textures/mobf_lb_52.png create mode 100644 mobf/textures/mobf_lb_54.png create mode 100644 mobf/textures/mobf_lb_56.png create mode 100644 mobf/textures/mobf_lb_58.png create mode 100644 mobf/textures/mobf_lb_60.png create mode 100644 mobf/textures/mobf_lb_62.png create mode 100644 mobf/textures/mobf_lb_64.png diff --git a/mobf/fighting.lua b/mobf/fighting.lua index e464d01..071704f 100644 --- a/mobf/fighting.lua +++ b/mobf/fighting.lua @@ -148,8 +148,11 @@ function fighting.hit(entity,attacker) --push mob back fighting.push_back(entity,dir) + --update lifebar + mobf_lifebar.set(entity.lifebar,entity.object:get_hp()/entity.hp_max) + -- make it die - if entity.object:get_hp() < 1 then + if entity.object:get_hp() < 0.5 then --if entity.dynamic_data.generic.health < 1 then local result = entity.data.generic.kill_result if type(entity.data.generic.kill_result) == "function" then @@ -187,7 +190,7 @@ function fighting.hit(entity,attacker) dbg_mobf.fighting_lvl2("MOBF: ".. entity.data.name .. " custom on kill handler superseeds generic handling") end - + mobf_lifebar.del(entity.lifebar) return end @@ -846,6 +849,7 @@ function fighting.self_destruct_handler(entity,now) minetest.log(LOGLEVEL_NOTICE, "MOBF: self destruct without fire isn't really impressive!") end + mobf_lifebar.del(entity.lifebar) spawning.remove(entity, "self destruct") return true end @@ -1082,6 +1086,7 @@ function fighting.sun_damage_handler(entity,now) ..damage .." damage because of sun") entity.object:set_hp(entity.object:get_hp() - damage) + mobf_lifebar.set(entity.lifebar,entity.object:get_hp()/entity.hp_max) if entity.data.sound ~= nil then sound.play(mob_pos,entity.data.sound.sun_damage); @@ -1090,6 +1095,7 @@ function fighting.sun_damage_handler(entity,now) if entity.object:get_hp() <= 0 then --if entity.dynamic_data.generic.health <= 0 then dbg_mobf.fighting_lvl2("Mob ".. entity.data.name .. " died of sun") + mobf_lifebar.del(entity.lifebar) spawning.remove(entity,"died by sun") return true end diff --git a/mobf/init.lua b/mobf/init.lua index e67bc59..12e9ed5 100644 --- a/mobf/init.lua +++ b/mobf/init.lua @@ -60,6 +60,7 @@ dofile (mobf_modpath .. "/utils/tracing.lua") dofile (mobf_modpath .. "/utils/geometry.lua") dofile (mobf_modpath .. "/utils/text.lua") dofile (mobf_modpath .. "/utils/permanent_data.lua") +dofile (mobf_modpath .. "/lifebar.lua") dofile (mobf_modpath .. "/environment.lua") dofile (mobf_modpath .. "/movement_generic.lua") dofile (mobf_modpath .. "/graphics.lua") @@ -158,6 +159,9 @@ function mobf_init_framework() minetest.log(LOGLEVEL_NOTICE,"MOBF: Initialize path handling subsystem..") mobf_path.init() + minetest.log(LOGLEVEL_NOTICE,"MOBF: Initialize lifebar subsystem..") + mobf_lifebar.init() + minetest.log(LOGLEVEL_NOTICE,"MOBF: Initialize mobf supplied modules..") mobf_init_modules() diff --git a/mobf/lifebar.lua b/mobf/lifebar.lua new file mode 100644 index 0000000..e2714ea --- /dev/null +++ b/mobf/lifebar.lua @@ -0,0 +1,148 @@ +------------------------------------------------------------------------------- +-- Mob Framework Mod by Sapier +-- +-- You may copy, use, modify or do nearly anything except removing this +-- copyright notice. +-- And of course you are NOT allow to pretend you have written it. +-- +--! @file lifebar.lua +--! @brief mobf_lifebar implementation +--! @copyright Sapier +--! @author Sapier +--! @date 2013-02-14 +-- +--! @defgroup mobf_lifebar +--! @brief lifebar implements a visible lifebar showing health of a mob abov +--! its head +-- +-- +-- Contact sapier a t gmx net +------------------------------------------------------------------------------- + + + +mobf_lifebar = {} + + +------------------------------------------------------------------------------- +-- name: init() +-- +--! @brief register lifebar entity +--! @ingroup mobf_lifebar +------------------------------------------------------------------------------- +function mobf_lifebar.init() + print("MOBF: adding lifebar entity") + minetest.register_entity(":mobf:lifebar", + { + physical = false, + collisionbox = { 0,0,0,0,0,0 }, + visual = "sprite", + textures = { "mobf_lb_64.png" }, + visual_size = {x=1,y=0.2}, + groups = { immortal=1, }, + is_visible = true, + initial_sprite_basepos = {x=0, y=0}, + + lifetime = 0, + initialized = false, + + on_step = function (self,dtime) + if not self.initialized then + self.lifetime = self.lifetime + dtime + + if self.lifetime > 1 then + print("MOBF: lifebar not attached deleting") + self.object:remove() + end + end + end + + }) +end + +------------------------------------------------------------------------------- +-- name: add(entity) +-- +--! @brief add a lifebat to an entity +--! @ingroup mobf_lifebar +-- +--! @param entity entity to add lifebar +-- +--! @return reference to lifebar added +------------------------------------------------------------------------------- +function mobf_lifebar.add(entity) + local pos = entity.object:getpos() + local BS = 10 + pos.y = pos.y + entity.collisionbox[5] + 0.1 + + local lifebar = minetest.env:add_entity(pos,"mobf:lifebar") + + if lifebar ~= nil then + + lifebar:set_attach(entity.object,"",{x=0,y=(entity.collisionbox[5] + 0.1) * BS,z=0},{x=0,y=-90,z=0}) + + local luaentity = lifebar:get_luaentity() + if luaentity ~= nil then + print("MOBF: marking lifebar as initialized") + luaentity.initialized = true + else + print("MOBF: unable to create lifebar entity") + end + end + + return lifebar +end + + +------------------------------------------------------------------------------- +-- name: del(lifebar) +-- +--! @brief delete a lifebar +--! @ingroup mobf_lifebar +-- +--! @param lifebar lifebar do telete +------------------------------------------------------------------------------- +function mobf_lifebar.del(lifebar) + if lifebar ~= nil then + lifebar:set_detach() + lifebar:remove() + end +end + +------------------------------------------------------------------------------- +-- name: set(lifebar,value) +-- +--! @brief set value of a lifebar +--! @ingroup mobf_lifebar +-- +--! @param lifebar lifebar do update +--! @param value (0-1) value of lifebar +------------------------------------------------------------------------------- +function mobf_lifebar.set(lifebar,value) + if lifebar ~= nil then + local modifiername = mobf_lifebar.get_imagename(value) + print("MOBF: got modifier " .. modifiername .. " for value " .. value) + lifebar:settexturemod(modifiername) + end +end + +------------------------------------------------------------------------------- +-- name: get_imagename(value) +-- +--! @brief calculate imagename from value +--! @ingroup mobf_lifebar +-- +--! @param value to get image for +------------------------------------------------------------------------------- +function mobf_lifebar.get_imagename(value) + + local number = math.floor((value*32) +0.5) + + print("MOBF: calculated number: " .. number ) + + if number < 5 then + return "^mobf_lb_0" .. number * 2 .. ".png" + else + return "^mobf_lb_" .. number * 2 .. ".png" + end +end \ No newline at end of file diff --git a/mobf/mobf.lua b/mobf/mobf.lua index 605d759..7623b1b 100644 --- a/mobf/mobf.lua +++ b/mobf/mobf.lua @@ -407,6 +407,12 @@ function mobf.activate_handler(self,staticdata) self.data.generic.custom_on_activate_handler(self) end + --add lifebar + if minetest.setting_getbool("mobf_lifebar") then + self.lifebar = mobf_lifebar.add(self) + mobf_lifebar.set(self.lifebar,self.object:get_hp()/self.hp_max) + end + self.dynamic_data.initialized = true end diff --git a/mobf/textures/mobf_lb_00.png b/mobf/textures/mobf_lb_00.png new file mode 100644 index 0000000000000000000000000000000000000000..ac10a068ed78cda43fb3bf506e43c27e940973cd GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q78vz)80nkWR@G*N775{M_8syb=cIqSVBa)D(sC z%#sWRcTeAd@J2pyprRa47srr_TW@b2aiF4NPZ!6Kid%1QISL+N;9x!&;P`d@;s{J`PfDf-_zC4Wt~$(69Dms BKL`K- literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_04.png b/mobf/textures/mobf_lb_04.png new file mode 100644 index 0000000000000000000000000000000000000000..92e8078f8127f338a632d916828d3366fe2ab68b GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q78PZigvjA5ciL#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR-J9H^+w)5S5Q;?~<+j)Dw^94w9<3qG%Z%#(ZX;s#rxT}~erW~a=u z4weHd#046rm3^{3e(=qERWk|!4qU3i;sy)3b$4-Wk|!4qU3i;sy)3<+ZrVw)~ws1H|`q^>bP0l+XkK D2pB%z literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_10.png b/mobf/textures/mobf_lb_10.png new file mode 100644 index 0000000000000000000000000000000000000000..f59645ac882cb196904de8dadd8ac675df61ecd8 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q78%xs_O+F;Gad#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR-J9H^+w)5S5Q;?~<+j)Dvd9IlQA6aE%Qyof%y`Azo*<-?5Dp1yfk zKLFL?1U@UZf4{VtVHXEc@gtY_mr^ndPURqp85dXuW^t9J_NF_7xSpGNPtKW2QP(I9P?dh9$ z^#f2HPT;dr`}a$W8Fq0H6+cpWe<>xi;8YHhm~nxXiHobuea>tX5ZBYy&t;ucLK6Ty Ck3UiX literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_14.png b/mobf/textures/mobf_lb_14.png new file mode 100644 index 0000000000000000000000000000000000000000..93b207dde1e369f02c38a45d8e9e88a3c5dd4175 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q78%==(DL>p&sN64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiF3yPZ!6Kid%1QISMi;aJV`eO!!+I@#6Nu*@yRWSR2V~n0)0) z7%x9iAue!W%C1fG`)>>hzlH;vTM`)zUG&YS-~nA;;%2zH*&+J8lr|X_Q`FovY5lBW+1+&tDnm{r-UW| Do|Zrt literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_18.png b/mobf/textures/mobf_lb_18.png new file mode 100644 index 0000000000000000000000000000000000000000..b515b235c566759a2f400359a5025259ed41e6b5 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q78X>V++ORzM-i64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiF3yPZ!6Kid%1QISMi;aJV`eO!!+I@gn+A_u+jU))>>hzlH;vTM_P8TQM^xgjd{uXT)1>A|HMA}+k^nm1QjS;LI;Aik%opUXO@geCy1 CZ9lL8 literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_20.png b/mobf/textures/mobf_lb_20.png new file mode 100644 index 0000000000000000000000000000000000000000..142222dda9f9a8a777783c386b3aa51e452b6313 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q78X;75jA{Xikf64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiF3yPZ!6Kid%1QISMi;aJV`eO!!+I@gn+A_u+jU))>>hzlH;vTM_PIrhuPxgjd{uW^h|>A|HMA}+k^_-?K;J9q74Aik%opUXO@geCyw CKR<;4 literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_22.png b/mobf/textures/mobf_lb_22.png new file mode 100644 index 0000000000000000000000000000000000000000..869f93f833bdebd75c95f8b01e8049edc2133bad GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q76>!|V;eYJozMC9V-A&iT2ysd*&~&PAz-C8;S2 z<(VZJ3hti10pX2&;y^{^o-U3d6}R5ry2#0(z~LI0yWrdW#jSC{ERE0m3OxR7@C%w8 zZE6Elh!X_AI#pLB<0G#RQSoOVTkS+cCY;Ja5aiF3yPZ!6Kid%1Q1@bZ|aJU8Sde{F%jksB`65H*~!bGW(6;&pd^0r5Ru{an^LB{Ts5 DBmY22 literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_28.png b/mobf/textures/mobf_lb_28.png new file mode 100644 index 0000000000000000000000000000000000000000..7e4a0a77ff46b39c8e9f0258c931a3e39ab0a378 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q776=SfFFDWH&KiEBiObAE1aYF-J0b5UwyNotBh zd1gt5g1e`0KzJjcI8afUr;B4q#jUru0(lt}I9vk_Cj2dqcyaU4&ceJFV@dfNo>@h! z+t`5$ae)M{*qi?S%`YFbf>kucUt6GWya literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_30.png b/mobf/textures/mobf_lb_30.png new file mode 100644 index 0000000000000000000000000000000000000000..781f2ca7b0a072890a96e15ed0d8c6627c452eb4 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q78HxuCV}2cVE-iEBiObAE1aYF-J0b5UwyNotBh zd1gt5g1e`0KzJjcI8afkr;B4q#jUru90eH^I9weKCj2dqcp=@){9EbGiGl-uL9?y5 z+5pwz1ktZf$y)L)n-4M!2$o%6pl{>`VdEehcx&rkbCspU{Nx9z@O1TaS?83{1OU5} BJ&phX literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_32.png b/mobf/textures/mobf_lb_32.png new file mode 100644 index 0000000000000000000000000000000000000000..70b6ff7a8ea6be7711ca6ee1d3bf52ca726a950a GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2mb`JF`LJfM(diEBiObAE1aYF-J0b5UwyNotBh zd1gt5g1e`0KzJjcI8afkr;B4q#jUru90eH^I9weKCj2dqcp=@){9EbGiGl-uL9?y5 z+5pwz1ktZf$=dQQn-4M!2$o%2pl{>`VdEehcxwxyxym|ks-FO<@O1TaS?83{1ONcb BJ>UQU literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_34.png b/mobf/textures/mobf_lb_34.png new file mode 100644 index 0000000000000000000000000000000000000000..5d14c9a24bf236c1b95c78045225cfb5059ce313 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2mb`oU|;AR{G9Tq8=H^K)}k^GX<;i&7IyQd1Pl zGfOfQ+&z5*!W;R-fr`pJT^vIyZoRz~$jhL>;TmW#;cs!oi<^gb7Us1WOUmEy%qm*l z#tu}73nX~O-i()FzkHkaiF3yPZ!6Kid%1Q1@bZ|aJU8enFF? zO>KY*af0Air~ZAim|+(OQBkp%t#+az6HetI37;2CE~~l99`oAOfViHnelF{r5}E*J CpFW@f literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_40.png b/mobf/textures/mobf_lb_40.png new file mode 100644 index 0000000000000000000000000000000000000000..45cf9aa994c9cf773b4461be95dd315e08aadcdc GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2m5-a^4u?}0*+C9V-A&iT2ysd*&~&PAz-C8;S2 z<(VZJ3hti10pX2&;y^{^o-U3d6}R5ry2#0(z~LI0yWrdW#jSC{ERE0m3OxR7@C%w8 zZE6Elh!X_AI`!|D#SFVRh>D7>Y_$^&nQ$rxN%*{AGLz;idwls~4T$UM>gTe~DWM4f DiYP$o literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_42.png b/mobf/textures/mobf_lb_42.png new file mode 100644 index 0000000000000000000000000000000000000000..90739ec8215049e2a2199b1a7b6ab3e393f760fe GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2m5{Dwc6x=<11Hv2m#DR*+JY5_^DsH{KFyU`;#Ea-d-G}#aSR2V~n0)0) z7%x9iAue!W%C1fOE%=u8gG>X0xb=?lDLoK2E>d`xdN)_ui4(F@K`K05{an^LB{Ts5 DZ#O^r literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_44.png b/mobf/textures/mobf_lb_44.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2632769f929d237d9dd555985754d060a283f6 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2kl->mvBb)b-BiEBiObAE1aYF-J0b5UwyNotBh zd1gt5g1e`0KzJjcI8afUr;B4q#jUru90eH^I9weKCj2dqcoBW5`|v&vYa^Krldn7p zsMGEhd_{~*zXx^>OAQhgjelF{r5}E*O C;6H!> literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_46.png b/mobf/textures/mobf_lb_46.png new file mode 100644 index 0000000000000000000000000000000000000000..2505ff4b5af8be149c2aa89034e990382c586f74 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2mL`sW9Z9Y7(;64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiF3yPZ!6Kid%1QISMi;aJV`eO!!+I@k090)>>hzlH;vTM_RJHBQ8Ak%;#?)n0KBR2>e2id?G`}+)6ncQ(he~=1KS3j3^P6`8 zegLY&34B&+|L%UA@T-CmtmHu{?=Pif7M#jK5;HEazO~^h6ZC%a0L1ll^>bP0l+XkK Db4)-i literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_52.png b/mobf/textures/mobf_lb_52.png new file mode 100644 index 0000000000000000000000000000000000000000..f974f5a133c9bf75b574c56883de0c57ed116d9b GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2l=NuH~rI8aEk#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR+eq^Qi(#WAGf*4tZ-f(!~Au8sy1{uW2Ph(5UaP4@=n!;IFRzIj(a z0M+3HJ}b3`8 zegLY&34B&+|33XV;a3GCSjmH}Y_$^&nQ$rxN%*{Ax*)?<7N&6aI*9A(>gTe~DWM4f D09!zQ literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_56.png b/mobf/textures/mobf_lb_56.png new file mode 100644 index 0000000000000000000000000000000000000000..0f7e251db785ed524254abe4cdcce6bafc333feb GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2l=sFIGNCs0VT#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR-J9H^+w)5S5Q;?~<+fr1PQ94?Lq6aE%Qyzoh2yeXdO-p2n%#dK%r zVP>F0T)<%Ix;N|ln_oU=1*>SdF7?Ir7zZxZU~z+m+y{HO$^x&&OaSpcUHx3vIVCg! E0FvK6hyVZp literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_58.png b/mobf/textures/mobf_lb_58.png new file mode 100644 index 0000000000000000000000000000000000000000..e07e99d50803cbb849b2e71a26824a1201b45b35 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2kVi^m+s-9RD964!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiF3yPZ!6Kid%1QISMiuax*b~$}in4L1q zI#>><5Ep2eR`w}WhJEvXkZC}0&-6uik06ANgIutXd($7TGKS7?&p;|XUHx3vIVCg! E0CuN9F8}}l literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_60.png b/mobf/textures/mobf_lb_60.png new file mode 100644 index 0000000000000000000000000000000000000000..bb1f675108fdc7a6c7d60fef81d71cd906629e38 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2mT)@|-tn}I@-C9V-A&iT2ysd*&~&PAz-C8;S2 z<(VZJ3hti10pX2&;y^`Zo-U3d6}R5rauj4RT&-yPQ5M%ubnQ z9V`b_hzm4KEBh2G%f5L($TT3hC-uek7zc!ngS>Eobx96a+0pip&ma|^u6{1-oD!M< De&#=} literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_62.png b/mobf/textures/mobf_lb_62.png new file mode 100644 index 0000000000000000000000000000000000000000..0e349a11eb0a0b7838339dad550fd8297e7527d4 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2mTjL1fQEufHOiEBiObAE1aYF-J0b5UwyNotBh zd1gt5g1e`0KzJjcI8afMr;B4q#jUru0tFcqI9wbJCj2dqc)?TjTj|Y-4~?@^W?2Wz z0hQqb4b#eswELTHK4%4~XfS=z-6M!gEm(ZPLjI|DxXOAe&46BDVDNPHb6Mw<&;$S+ Cu0CM^ literal 0 HcmV?d00001 diff --git a/mobf/textures/mobf_lb_64.png b/mobf/textures/mobf_lb_64.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb2504779f83dc52862aaf53138ac1bb72d91ac GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)6Q2l|)**q_pMXM=C9V-A&iT2ysd*&~&PAz-C8;S2 z<(VZJ3hti10pX2&;y^`to-U3d6}R5ra^z(&;9zlFq3~z-Zmyk?oWdOPW+zR)FS7wE u!U=TWK1pH%%R0Q2{Gyc1ic=*>BI5;fe>KMv(KOAMAg-sYpUXO@geCxJH#y4y literal 0 HcmV?d00001