From e48d0cfc6ca9a3d615d7a667f4bbd8bdbd4628f6 Mon Sep 17 00:00:00 2001 From: josua Date: Mon, 2 Sep 2019 14:36:18 +1000 Subject: [PATCH] Made items throwable by the player, fixed issues with bullets and chunk borders. --- resources/texmap.png | Bin 73015 -> 74458 bytes resources/texmap.xcf | Bin 152345 -> 153715 bytes src/shootergame/Main.java | 1 + .../transparent/ITransparentObject.java | 2 +- .../transparent/TransparentObject.java | 2 +- .../transparent/TransparentObjects.java | 27 ++++++---- src/shootergame/entity/Entity.java | 17 ++++--- src/shootergame/entity/EntityBullet.java | 28 ++++++----- src/shootergame/entity/EntityItem.java | 12 ++--- src/shootergame/entity/EntityTnt.java | 17 +++++-- src/shootergame/entity/EntityZombie.java | 2 +- .../entity/particle/ParticleSmoke.java | 45 +++++++++++++++++ .../entity/player/EntityPlayer.java | 16 +++++- src/shootergame/init/Items.java | 2 + src/shootergame/init/Textures.java | 6 +++ src/shootergame/input/JoystickCallback.java | 13 +++++ src/shootergame/items/ItemTnt.java | 30 ++++++++++++ src/shootergame/tiles/Tile.java | 4 +- src/shootergame/tiles/TileChest.java | 46 ++++++++++++++++-- src/shootergame/tiles/TileLadderUp.java | 4 +- src/shootergame/tiles/TilePortalDown.java | 4 +- .../gl/texture/TextureReferenceRandom.java | 21 ++++++++ .../world/layer/layergen/LayerGenEarth.java | 8 ++- 23 files changed, 255 insertions(+), 52 deletions(-) create mode 100644 src/shootergame/entity/particle/ParticleSmoke.java create mode 100644 src/shootergame/items/ItemTnt.java create mode 100644 src/shootergame/util/gl/texture/TextureReferenceRandom.java diff --git a/resources/texmap.png b/resources/texmap.png index 49e058c8bf28ca54263805022a621046b249c6e0..fbf33dfeb0ac41b9d5a6b42ef6e0bfaf69e68f45 100644 GIT binary patch delta 31167 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 aAsI7acJgJRh-L-`1_n=8KbLh*2~7Z`Ng2!l delta 29733 zcmcb0lx6!amI=yCQoAOq%GZZ)lChkY``@rjj_FFH1mBX#^AC9UUw31f=_%%2a{F}j z9;HLfd@>tZA3Qzx|M&aX|GNKsoxGU3dhM4WoBvPeRm=Rj^ym5h^XDIY{{8Rq{vWkp zr(eH&K3>^g*#7eK-Xc5u!w*V-zh*YAkDtGP-@8}8?k%fj=h}bgy87M7{q^g!?>E*5 z{n;b8uYUKxzjsd5N1yv1A9Fu(fAjx;%h$`ZG(X zaNt#V2i_b9f@y6t$lXTG-1vKfy%r_MKAH{)Km?$sNQt2|Hs;xZ4rv|09M zXXeDMM^1ly9&>1Se*O2$O55)@Y9}XbIH3OT;px9GkN!V>{e0uQ(3fos61MrTnGqi1 zYs{PKcYkMBOUv*2-j#cQ?9>0gJ?%@qcaBo?w?lU#9(?$0d}Paq@Z6=-pC2iGw)yk? zYaFHZ>L! zsO;5y`=&+ZUGrMKcI!R2ep|-GYu@YEZNK+h;!cUdmj{=dwU5mxTsCw0S)EmEZ@;UaQ=qYQa{t_-SDDM_7p~koJ8xgv>9yPM)*U~; zrgrnM>}!YeXa2q($$fu~X7bP2@c*Zz>h-VxO72jwFnrq6b5!O;MJSubixqQziWT*p znp5?J_Me%(`Op4S(SOos7JJ?O-+#t(>ATrG z>(AVl-?Z&`@{}(^OY}l~YIiZ*_T2Z*i2tDV^s+a9cK&ebeLC-q^wKj$d)JC^drW%V zk@-I4di|=pb9clSvSuagm0l|hvbT-iuiJC?z1M8F?A`0`&h{^sy?^%nJh3yCuXtDY z-hM8-yJhmLn9IGk-gEXb6;-P4Hv4XCmdpEk`MV=hxj`&Pnrr6P>e;?p|9)p!(XJV9 zIZKvy7rYl-H)YEq)}xx6O0^E(+q<4OskSy!bMCR@=E+Ku^#|Tm{q~IUS97=U@EXQv3N%xBur~oC~+kl_)6_@i=>V>j4`n2|MYZrB=S-loII`7@hE9;-1 zE52@b``q(@nwdf`YOn6guV1<6X8HV(pSFLW72b+jcgQ|--@y}k5?t>R>;6t+Oq*P$ z$ltBMX{Of1{odL(>AfPqEN9A0-+5PNrq-V9yB9@O?=8Fd%|LBZhNPNvf7}ec?@pIE z_*$i&a~uwHO+J&jcIl&Yb6-q4ux0nEc{cYqM8}(#CEe5Cdh4WqtwHfFot^nh>uujp zOnztD`!0RsO_>|_65~ETR^r?kbu*jg$5u9_c~J}A%1%Ori*8YrAj*4xR|Y}EL-vHcV~&w1g1unj;d<+h0_Ba z7Svk1UTKqD?N(m;s^J^I`h5$n31OFcZceG67QirdQ>WxogJ%k>uZDItnHm_paL_w% z)BDFDkn5n|xt_dhll5;Vq+|#>9$3*3$K5NoVe{ji#|0gx?emr`%(rL$bdJq{dGcHa zzR-sPt>#7w;VZuvH;XZtuWUJ>;5lh-M%1lqzm^Dz-<7<#e7kxZYtJNsg+lCK4G&%{ z@mBX+P#+uJa@wyp>r7MW_2XNLXKyrmc5K3Lw|#+)Az>y$!9Nq0nkun=?C@SH&+zA{ z&Dz#UYOPPwURQ4q^{}5MDYMj&>uA}EPbsxW<9wVKI|Lr4`F3hoYwY?2~S7eCGIt%clC;l1B-=7fwnuF263Jz_$3S{?cTNIn`^G z^j90kceAKB?q0)lMsD6wDXW0Y&s%sRGz=bvMRY8f(lGN__?v%IbmpC8J$ZvKp{Hhog(4-wYEN*@ocqYf|>Zt`2JPl857?vE7toEy?eP<_5BBBZv|B6cyz2^ z|24qCy*GD?PSNY7Ru(Is#1%c`KYRE0>R!u(^#>+SvKHjZF@OEZ`$~~k2rH|^%)-9u zUngF&Toirgw$`$hx-ZlZ@owzjg=FD98z3_ifswe0JPN{+c( zXRBRx&6AvU(t}Y)X5pG-nFj0p32Zlx)F)avn%d@Ygin6iDZYc%+EI0v_-lr@S2h>u zc&JpJEKhr#_;#n`^Jw>zyB1jAcW;q!$q8Zh42*URd9nCuc&6LIBf&~Zk_W>YQgZ~a z2G`~pai3V%`Q(LO$WE=4hFXo2S$np1GQ?a_J5!@(yYl;r)hB21l}3l}5s>Q?>tXKZ zJyW0exW{Gs_JjYQZ2P}?et34ks+~u_KDIKvTyYr|M{DB zkM(aj;8ZP^XDODu%YWX!487ip3!)5vmedz4{U^*El3e_dHBljHpJT+voL`ye@&(GA zUoT2xkE#}SR5_GgKeOYJF#P}Lus8kL zL7gT03g+ac%~BM-w)^1sgB5a@SaUpE8+$!YrQU8>(Ujw@tG8owV{rX0$*!G@-%Ibm zJ>{Y~=jQ>Lg^N8qBstZ1tiy%Q-))k!$n;IKE9wYwak|~;9ig$P?X9DW!u3v*uYUIf zPA3I-nLlt}msEzo+h0lqyiT zztV@_Z`qZT>em(tZt2r=*q_y0|6H*=FDS=h^*1fHw=>cfhKbFp?eWg6{It2))c87gJ9=GD0_cH1h?TDrFZyCPg-$%GyCJOZT%UXY zvJ8)#fvfZ(6RXcDu3b@FlFeOB>~#_9E&hC0yEy(QhVB-%PS+7F=oTt4Vd{=$4;6PT zsapB1)qL89qjM4yn4U3xaK0YaIpwrhzT2${f(-8en5KCDFkPVJ?((s1^YttPNk1hM zM#(&mS8r~J8a1zYVYtHSp=Xb@yrVbs9n7@3^yav%%zGJK0LYcwnX9=hR3RpI%+suUrm=>y1&5n#PpgI+N%;muAF8$ z?AM^6U4Oci;j_z%O_MZOXJs3Fu$=gK!P}H5<)k?D=^wo_98_w z;Nrpwx4U}$dwCkQH_53_+rS$$L1+0P?JkCi-hVn*EE4`yoUvi4prQD~N-dp*{pXKN zjJwc!CGlC8jJdNV%qeT> zwQFxA?U@tUe);d3ZlJ!4uc_^pzSir%Eth{3losUwpHOPGdy~%0(45ps!j8vc4%v!j zE)ddcT7F{lBKd=!RU+(v6mA^ea(BaXY2&?%w}|a+Z86f!Ibt%?SGW2O)Aft91^+k} z2EFBwKOiC+I4|T=-sSrJC8kWpI;D&|T@@KEoK3cDX>^;upzERL6_;@F5Ke*IrNIY& zoBjO2EUS3nWkc>CZ~uT6m;L8u7(bRCwV0S0_Og9zNX$&D%r@PFXR?@UGn0?=evlA2 zGhqwQKF^1f)I(%~L|vWV=BbKIZB1fycXksNu1;94m}~vU%Tm2v)s?HBNys&I)n4XJ zzP3p|W}*CZ4em6tC~9r$56iR`Hapqk6Mfyy=1`kLq~@|mNe4fw{79H{Z}R(@D}y6* z^S<1We|lqGIsg)>|eTdQdupVlSIv_ zTinNfF}bqMUt6~IXWx95uYm^~^j-F8e~mJzixAk*$Eo0STZ)I9!9X@jU9jsKe_SPl zXv67{)+T2Gizc=&!Qr7gicPZp9A=6Y7b-<^cpJn_eoYK#-QF%FcSa<=IaRNRCmX>++7R@o5`3boJ=0JGbZ6?u6|D|15u;(_V3_`%(4>g^5+` zc4TknV_zE+9pXXrhXS4GOAV#1Z=`5PDg&E446 zQ+wr~W>(L^jQU+|Cw=-wQqwA!s{SmowvSG}QBZFXwQA*}OE#OH^=;t}k~^xtdc((G zO2Kb*9Zo70EVnw{Ahg4KV*lZ!eX>F?WDXphlYDR$vyi#b>~mAL9SmgLR^Ylk%ix)F zSx4ABNy~7%;!F{ygqD6b!K#O83*SHDTM)%IOR8#F=QNY#L(i8r>v;O^eR6S^2=~1A z6ArKCO;VcDSTB_;yx{fui1wwO@?2B=+{FSU16carJn$7{>?tL ztkBWcWrj|Ki|51YYcqU9I1Db%&7Wtu;PSy2iuU3UKRc*|yzGn9SRfwLbl`dGH=i95 z%-W6f)-K`Q&iZR%t)5+(zKYls&K9qPP)V<8FBUjNt(!c%W$D}>%Qi4Nu3~i#Wj^^* z&eM=NQ$;sHX<6gdPyD`%>+gCiHMtb6VMsDFbXZtvw$p_t$lOH8g1@=h&R2@#;Fp^T zZAU)VZV{?c&|fRd`F4Z(tjAu4iJJw&bS7z;$FR#j+Nm~CUTLd>JOA!jsr=05l^3Gt zW*qL8G_*21(|)y{D>LKwXHMna0Yd8>Rc9n!(3AStSh!(Jo#NXpX#7-@I>K^z}{cJ!4QQbc#c-TPTKcpX<_qsO;wXUj%v^D<;2R9-uwz)Se?^ zs;RePn9~|uZWr@qw>vTQTwES|X z;s3JGO%A+^^!a`4OLX+6c1TRUk*umv?_HcxaYvyco4LN>m-ZK)m4`(q&x#8@d%%9p z^Nk;ztM~ifo{}s3_S8cTgR>S@-&-~3&I#BhU3p>32fxX4?<#NzF8cV+cMVse6>5YiG{Wc9@_3A>E^g z=Td+Dp9KeY+qf>R5!b$Q@pS5hX@Y#Qf7rjVq*(uSkQFG^&#c%IUemViO-I{qpMc++ zEiN&JHBB#xtCVKnkZ|c@?xgPh-cJ^OW^=ggta#e}RdGM%{bQ|@zZ}I<@8#nHdU>e-F-(5RDgB;$oRLvp4Q{+DwlNIpOtv8lN9}h4xP_ zWvka%!PmAYRa2qE$$amW`NuPJ-o(iM|6*)!_whG-$?R9log+7_lCHhFrn~ZO?1IHo z0vuPKsLASTH)Wsu_hQWi(+A2wXNz5m{ZhkUHn-~af%INGg@_~7D-`s$-!bd$zHWER zqGb+`ifgUGTpsBko5ltgp9HT2gMY@a?oMf@=zoh^20A?N#usn9P!Y z{^_>4vtu@Lo;cl;m)@1Kao?=3I#Le{5@Tom@Q+^O{QM;Q(+_>7y^1?ImMz`>V(a|B zOW#&)(0$e7y0=Mck&ylVR~whsf4ltm7nAuC0nR^)O+Q~M?^>stp>~=%NPenjsO=h& z`V*WlyaGLgtX<4_#2h9sPS(4X`8ts4-jPeZ|6MBc-z(iX{bdKoVeZ_6w?)p?$RD_( z<0W`eyJ}IaZP)N2ctl?R8olv?$FO^U6%sCj92 zr&>?dAIrV38J)5`1Wv!2BHgmOZgI-wdkp;()?d+Ho#wi5-|x@GBD|{?x33Mo67XL( zXqSAz&wh`}YMm8IucFp`cpvogU#g$I{p4dJ>h-dh9{YVXOXXde+_Z)F@3+kJx2xP| z_^>%`zwdh5Ps)K`o~OaDTHv&PspOJ2hUWMcO#c>o>s_tkvtnAiN?H7Emcin`Qp&Fd z+2)#7a@@Kwzw5u`XP1J19{!4d0+>$7t5nUln6k_JV&7^jaY031xl_{2n-?0Mx+Zap z?Z}?vZxt`sGh8bWeR(eRTSdj7pC;~UbyjrbK+IK zr*l~3IA43^OE@wv|CW6(cK+N)rdr~E0w1Q%Q0@ORQ~svOT-AhnlXZPx3hXB|oSxrV zr2JN6p;<}ClE>@?K~?KLKPdkXXtvmTdrQBH?yV<`J}WYvR=pPJl2)0`nW>yyu;6BG zFlUt7E@8%5yZRoSzU2QvI_%22@}ojmSNpQg)$O`o7kg^8pw~Co@98-Ua~8Gns%{ir zKdUpc#+rS`HYRTI?Meo9T(-9Msb4P5W{ToEef!|*lwEU#_?kPa?p*BEY<6DsW2tS> zI>nmPjCu`B47;C3rET@&>YbCdKk(-jwH5Qke`rr$E~d@sHu-SAw~sc-qqg{94O1 zoesA*OPN|#9m2EDGc2DX^Zu{ymZ!;U9$z~t=+al;eDYWQiu+F!Y(16b(*Jc-{QuPb z`+LwI`Jb+7uMg{GPuJhQT_PTgVO zAKK}_&!-nQJ0n*6R&w@N+dSU0%UIU?Dt}p#-x7RGt$Om?nU4NKId6XjmwcSV^F2gV z+2#O`8tYM~*^7kk+18sV-(B+mq1vrbpMdY@BG2DiAX|U$$*HBs-|susy)3$_;r*V^ zL2rPJHqcxS=fBTUh~ z6H9k&+wl0u3Bw67lAl{1F!`*MAA&h|xQ;@|z2ak(pgFP4kZwwR#%@<&6hFUx_) zn+k(A%zINWt9Qj&>Bp0fTb`a(Th%j?H4!1{fQQt_S?|w zQn2m*R>uvWIGOLU-P3w(dpL;W?wa+A-W$WNOt@Ry{PXSgONsT}f(yiCH~z0QDtWek za%FL$z1rvN1|P2{eku97V^yBblyin(J3{tF`_?b!(xXPp_opAA8zv>+N*= zykN;Qu8t?)U#NtJUA+CGL{@R}g2`r&1XNC54w-w3t;+mb#sAvH&-nd$YkA+Et6DZO z>h!G{$xGS}B=DBkmuy=id|BJZ=-P)2&ZX_qsO!^^+%i&7W@7IsW<6PsiAL_WpA9;`^tb z&-rtvXpQj9boJZS6RKSk$~9mA2w1m&Vlm6kK0mwP+hUYc)&)FoK6Cig_xX%F)c^B; z+Ua&JYvr@aPj>kIo4Y#s{>iU;PygjS`5pG|U^IiB;`{2K<=Vx5Me#pv`ai|mEf;Qx zXZRrc^WTzdR~Ra^o)>?*H&f=fT*L4BBKysAlusKr*+geY?w3DN%=I&7O0xa*^Ch3| z`7`~PR+FyzUExIfnwY~|&!lQz-!$?3n}EgNxo6V#xqI@i{I8FlcB8t#e4YJ` zL;qKN?|*F3_c-|lgA2odNs>7b;Lu}=J4fdyY4dqYoq;Hz$Xe(YF zIomwt?tiam>*t%U`xz(s?D(m~w+w%p_oP4F`D>re;|a-^4{~l|<1X}?cj{w3Du;Bo2M3k zy7_3Y6yu+AhJTZ9arEtF=zDBY$0OUocHlqTgZfFn?QP4apKS}g!F|)kFZFTprkm!Q zUfNDLJ5MlCS^6&j6Nw(Dy%J4v_u6wj_@9<4AFtLr{$SZ3mILZXC2E4qwyy1}_maG6 zGvR!}<2R|!FZQ1)IP4JS$zuqjIt3`V_%E!OwF- zSx)m-s@^}Db@_R=x|Y^H$SP;%pAP3zr!v=5b=`Piqv{zz9(1a zDi>F+m{Z@!cHqBac8qybvVOy3i#~aK_5-UkUhQn+&0OJkRA7$g@dMf`idQS;s?WaA znNwi?$u{p^iG)~Iu-wrEo4}P#-&1B=3NyRC_~ZAW+=^BE=84T`{+6;{O~3i$T{Z-XSyxH(>Vf68{})c5h4i;EY}+dY56=Um1bzja4Xr~5s%?q~Qj*M{9Y z^@GKJ^`g1GP7A}dR5#WKykNXIi(Mbm$QhJ=0x#e*dOt`d6x5qS-9p z_x}0slgn~Ej^TKrjD6kVZJP{P&+PoLJ!Hy9y=O5SYfql2Y;>1qP5+i8p;$lrrjz9P z-lp8lD?1+E4L&yQV!8J0t7~svSuZMbO5<|(!Q`w32hSv*IJGcg-*1_vfBPhU`t{vB`9FU87H4()#k<;yEzfaVo?qEi*jZ(e6r-u~ zv{S<2*|SU+xs@-ztUR+=JS9!@_1T}gQ|p6E7QZ`R{&a`5=)%0If;Q8C*XUl~G|5u% z>&}pZpEIr8r&ZpY{=Ld{|6Zq-c_-7wKizCE>XT;p?{uzGvv^k^Tkg`HugR?^=6F7N zC%UWH-;&>P-P4^;$$n3(eKrepN~ZYUn|Qt2^11O$_X+3ou2|j=yZ&WD!EPIOYs=$d zOa1pPuYYIBYduA9`=`BAV@`h$xs^F->q6zT>Bgsxi?y<=7R~u-1SzTh*ruWjv9Y z)w5%|$D1%kj`BwwHdBk|tn}CrZeVEsnf+CSZdy?NBWBT?cGD{jLIsaB+|hjeQ`7Q! zoT8L9tGWJ>iAk##Or2k1WEH9J_Ij?7S@-lyYS$U+-2T-s@42;hSG%+!k94V>_V)*u zv(_%)5f8R@srokKWQqExnbuRY8k&y26sV0CXi+~^pvKyMIj~3QWxadfXU@p&)~$c` zOt?NHe?H4ri~4YnzQEVBpZ?D8Iv9JRu&Q+qPg2YMgFa46f}M_k5HU79uf6!*$^A>u zES&iJbI8(?6YM{uf1b%MlDAWRKIh7PHrWN&uWT;x@2g)sXW#nM-?x9d6=m!0lN-D0 zyWW+kZ>K)qJaPZE?bfvFt%5Suj55ay|IAQgh;;mZrZDbNz^CMp+4Yxqb8)3l@m=w? zvF2SYYq8TDE-Q9^!{;gX%Cny?P&&G_Ylr!#;^jQ*o<--MeBD3&{2c8ak(+;U&b}mI zcxoBrMy}WySGKx2TBxz+PtN@Baqh2&>mn1baIRJU8a5p&*I`eIs*ZM^SS8 z>0NVHJr=&#drH9IRIb7E`{G6C>K9yl>%t?Z_)Pjts7Q%g*{Ot0QI9&KK8Go)r_2>@ zs_(IUf9|W=mwmx*7AK?jtGzzHie2i#l7!#fJJ0u=Si4JYnSh6siPl<|IHtKeMXLYe zmUj3}oh)(G!e~8z>HhrCS=y(hCf(i`;CI>n#Mj9$JT^Tveku_0vuFDL=KT{NPd@5j zzwdy`^P1qe>qneU{M3JPXTF$vVu0WLO3tT|n#*S&IUeTDbWefp!CCGH!ryu1)-`-R z^*D=ZUwk#AjQN?z7JcDdj0(XwSFZ4N|EI$olc*MM$+~&JvfHH-ZskhsbK#bY+kRzf`cIc-RSNAzDy1h1M-rAfJPsjQd6V7f7y{N7DTdY;{Z$RDuzCHgV z`aXvoT(|bj&(1&l0*<{2JNTtu{dk>wU0+e}`P9q*8qfTcdv?cMF+sg;Mc@f9_2aSH zEiTgGdDpyu#)Q1=FIVll>pdm?%AENLYOGODQ!d`9cYAj`?ym3(%MGs{h!lsiDgWE9 zTGhTrbuQa2&iZxSb7y#ewOPYh!+St{YO~|L!^xFw5MxpUq|bkRgZqI+ z-{a!~j2B7|3m({>TAUzyV5`x-FtdUaZtfX{lX_q5yT!vPe19Ly)BT-?@6@hV+Pk3V zfx_nkp@oxJzIvD?xS6(`+1ymhd3ADz$BmgWE&j=AyW&?T7xK>dd{5)W-)E{@9`IT| z_djhZcRI#i_4*f2%VU1`;yW4ZYr@z4-gicS_3MJ9ka@{!mo5far?xC=+EaRVe|QF; zV0-Cbe}n11QI3rf6CbF= zez1Ld=HtD3_u6wSEd97Fm9{@IOk4CcYH7*4BRh;zkEZv|;afIeF6mm1!uE!2-+%R| z-6ZQ5&nqqRmpiplt@3Tq-Q}Loe)*hpp7i{+k^kE1504zszf!el*}rog5*te<^(~nA z*e3M)huYR76Ev(>{{H?)wPk&-?mxrd{}$h~?|W>~*RRO*AY{wmSveUk%`@9mTK@L! zIe+W#OVt~{ZEwbK=x^%#?d95JrL;RN@FVxl4Sw|o+$-*AR>*KkD)j6LcWb(MrqyLx zSkGzAv^0~%o8~EXI;_8W(u8g>Ti*K~=#g%HGo(J~ocAU<$#3tI&S@K;GM$mV;r@j0 zCqLXvT*q+X>7?@p&oBCm==jdCUBxluY3KLUT)UNv&T3qI$t=_LUBImWlw$Fzz{SNW zM?I?*pD&tsu)bDQ@x7?b+RI8|u1ibI=ADpI*=aVd_ueXzgKND!C0M^s-szVldp_0h zv(CKaXUi@uRMKzxEb}xnT3cONtGz)}@vQy}!^vUuHA56uzupu4J$>n%O>1L5bG5tp zO$)Uujn6m``SH{CProhG?j4ZYoFOv*;LD{VGGDnPs!o{h3-McBUw!goSC;aN-z>ZT zB=8-$Z_m5o^y9Wlnd2Y56d4Z8F)p1^{5;Op#!u2`?Siu94Tm}o&&ud}IYH%`hQ(aA zR-Hn(jm&(-YvXGFna+Ifcg}tJfzxT{PrMc?K6x{H)5l=W-Ve{i);;f3;PQWZLtJas zFV3IuR(4%mv1^*>lk>0l3M5z7FI%*y`jo<)74Po{uQr%B%WrW@9pcU6RGp6||KWLd>-&lc&BkX~wgo=>$Uj5!cgp2# zmZtA>9(jEikvZ$teEgMNozvNT-SzoXj9oW9sxErJV#N>7on}Q07RSThrT6dbS`vJ| zp5y&f=2olNB)!bk&V_vke)?pe*&z^~N6)as)W3?+%CTwlW$={`Y zGetauR8MxVz4N`gsD4J=f^$q)iVd_5+drDXvcobnan4T%K8E|?q!`Y@s1W&TVUFGV z1U-Fa;a|KrKkS_8o_a+&?OOTrMMZrrhyUo+cUGLgVp*r~d`FOgPUMdszRWc%s=j-~ z)oT^k32(08W1cF@b^Fgsqg(TXHdyW7FRJ`0_DqxJ9i8SP50AJfY3DR11ekw*B7Q2c zvFpxED@D%tv8fR=@+xIFKQZV%5Lf%p>D*`AGo_Do3RUVK<)_wW?726o+AC05ig$I- z&Ehjk0rmGMJ)WoO%q4PBnE&tKmwhq~@&At+?*BHU{Fz1HV~aRWmIa}+U;OWm>_`uq_$7Li zXQ11(i_c8cA|G&z?yZeFc=1a7{=jIi#RWo#?39atZ0WL5KVy1sZIjo@d-pmwF1{tX zSW7B*)8qZidoD50WM2Q+vOZ01M|cK9;n~&R?`=Z`U4=C&_2c zdwFJlS+CtO`-q+ucZtirspt3f?bLeca;eywA!k;_eOPRSH6`!)8sox z_^b51Q?^yUeaDM-&y{)2nkM-|eAB$%Gf!up`M%Rj@Pa^o%D*Rid)5ZYMXr^u=d9A% z{wB0aG5K0}!pWyWuD?x!y-VfiYd${zN??)b>ifo=OY{Vcu{C}e(0^&)mh3J z*3EVQ4<7sLzPDcHc%h8EGfRVDf->8TUG?t;i|wjbn(<2&NYy@jv(ov$(?0i0*Ov6m z556d~n)6%I9`R3m{d$hgY-*I$wL7XKQ`|N4Y+a*e{rMuzXTB>X(o=&~6>}PA&a73E zwpskA*w9NlRpY)W^Iztf!lCTjxsF|1)gHJsKuSjF#I+emv+Ein_s`wSw5f}$anbw@ z(~JMrJJh{5m@Ha-#;Z-`lb~fH%lSR_bCv)7^H^%T$;oVoUCV`;xBqjViTV?z_iN`J zZl^!%Pyf7sAm&lUG8rwdPYw#j%j#xKu3xooe`w$N;+@~Jf8MDzT=acv;c}kOewJ<~ zE23F9$0w~z;yA^SKlO8V%Gpw`16s>}PAqDZUs>($eo?F5r9C@u%H)-vTj&1z{aY=~ zGiUCv2lp@7pD4`{$=Wcfba|RXP(AZ^gXuf7{fm{xhsTU0jo^s?i68Me=YOr#umKN>|Xt`}S1uWC%T`%;fB)h8FRSSQ~dbj*kB+rc9nodhQ+*&0BoZc7Qn9!Mhw!}F^vu%yi-!&7s zt?GR~Pq?!qEK~N``;~#BJxp0}P?`(I|KYkxo3kIT|@tyA2I z=Rf2b{=BbJ&X7|0Uh$df{cZ00gpE-QJMG`iI9@2TeiHMCa*f=8_ovfNd(7`mJfW~J zK#=z`qrJM|7s+SecIx;(PV)|&$v(rIM|{&m>8A-34EfHute!uGw^zw1Bq#Z>$g3BV zBV0AUbT;{K*Gf&evayQc{((D}%vPLuxA4r@jb7y@r%qlxWay$R@z>tr21vVfz$H(eNB_&Cu?)3ex7i(T;qOC-^~1jaY7=6k3Ju?u?zhyxB3gm zWy>hOnLpnJvsPBOvaPvVtGw`o%Tiy7jrXUg*Uy@&wbw~8>{WhZP#?E}Fu$h6(U2os zWhOtZ71^5==dU&yf7xR>Kgt%~+Opxj z>t$t@2j%~t{4HhJ_eZ;y&s}i=sCj;x@yFx(-}!>cF1NQyv@yQ^Dy7JBMB?F`=3+iY zmWXVAyL$2DBmXzY9I|XLlo51t;9xu^u_d=#LfLFKuM@|NWt`ndnQHGJmS|S6KAE=p zVBP-XCcYWB#U5K6s_sve*l;uFgE&Lcxs2Ol`TPHx$=O!5Buc!hDLQxK{dWsXOGmGj z^NvS#?|Xl7o30bb3CqJ#-A9uGpI_dV`?v1)wv1V9$0VNA&oSg-7VBm$+b!E;So+T9 z`O%}S>(;LqOm6uur^r$g%bv`$EYpdD@$}P8asC{PxwjX+ubwk+UefNnhb-Ht2+dk{ z(7b&2ubE$~diTB8*4cggZ9!F4RQ%_Ahohpe&%XX}j`KOm#}-K&BN8OoBC=oGGu(Jv zmT_C`+O4X8Q-qS{a389lwd|lpU&Q+BH{O3QIJYo!)-TKFUC$n$JyU{rVJtXI3L-%l()CV&6Vfhg|eGY3B&FLdb<^u3%Q z!L}v0J9Ab-kK<*N9sBkjyLnS`*0Pn?&pbDI-ZLdAcDF=wEn8BLhvvhNkB`?^{C>Or zqKR)Tf86V`-D|&_FAcd~zB49iYgFQH-PTQ-ORM^Wyx7lQ`})ZE+~lq}PaNUU}=IJV%m)tB0S3FT?0Q~#dqee>=e-@V_jTrSKgQoc63>U!x3 zOXZe^uT`<;>Ukyis_*Qt-=DYP4ojuo-j7z#1(Mesi;DNY|J}mg-kpPS_gy~A^fh6t zf9+hBSufzUqOHmAumR82i;+5FH}bZ7XkOiFVQYKz?%i0^6}>rkOiE&}C+@$$ICECk zmZYAmjyH15>`l_8)aT95c6#38*2Z_)#P`K6zH^o_@$uJRFLHeM``-c1%Y6LTd-*Qz zt^U5@Zl0m9@VDQ#J%$nMuX|{QKF{755yI?$y#Mp(d*ST$k6yjvioKq=F(N_c_^xBG zze-s?-zE3@tCW7+o`&!HtXMQv*Mw=`xpz9WxD^o zxjFr7)vk4i4R~Jc;`6bz`*PrewAM21%w)?*G{KL1~@2`_S_}16(o%|B!1CT*@ z(ISR5TYr4E|6ly)kp3Sh(>SYH=_1?izh7AHa(WG`|hJZe`L0A-)>=Ty;@pjaY5dX*I%W! zZ{J?}PO)WI;^iBLNw0VDrKhJ?e0vjVtKVxdmqF@&q0Gfn*=w&$OBr7L_;6?U-F0#7 zye(!M6kDXW8a5@D9P^#OzO+8JTwrDH_UJ9S(a(?mc5!d@6YFJ>-FY=Dbgs%GrkLfK zvkHofo6n{NUu^ta7r*~-v7Q+Bo{Eo5>gwtWg- zd0paVlNZ1DS;_Blv)X>yMDcmda|e}0nNm;YeEfO7exIGR$+pu^H`y(>Dfe1wwITL; z;&$!Mm6In6-??`$?0N4w@wv=alVbRlnCJg}lm6P+J>=n+FCvdE7Uf3YxqCNpZ(R8D z!%OiQ?PO-S&otle`;28D_Q^D`zy9>EK5^pvLYd=*HEU!U+*aPJzH|4k;`5lr z>~7C*zuk7|xrvpO-n9wKzVBPa++!uVu=w-Gd)Iv}k3}rDar)7-OuU;lY;|bsx#NXL zjvjTj6<0P<;!{^wXLoz|?%g`MWVpJ00Dy86|Qve@?1r@eK=y18oOdu??@;^T{p%6lq4K2q50 z_+oCR)N`3>r&aUv^Iuo*Q7_?HyLHFjy=%X>9GmLa{{3Wie|`1$ccCs%9v*Jrv3vLG zbK%!ZuR7Me-}@a@jL)~W3RP_3x_nu3(ZuJQ9n^J}h6D?hnEcwezHP?mn^MEKWDPGuIkgOe}3m@`SB8_V595T zuYbJ}!)>*`M(t&bkmCd6`s?3o|Nefo;|*gvbKUd)`}3JUy#LR;X|wy|dYR)NwRm68 zIehjkZ;;oEU3~Yd?|8_W9qYJ#`!-jubTVI$3@@*;P2LJ~^QEuqw?-YTj_+0H)$e_k zv~fkCiMgGWh*W!`#Hz;!&UOnb2r_5uo;!E$!JO5ZT+bd!&MZz|7JT@Ad*X_E88)dY zZ_A?1W0gd6Z_6!UX?d4|?Zdstv$h^Od6M(o`STCw9RB&U@+_~h*HYypUzirw zNby)P_+AdFJ6yJVZGqKJ{?ku|W}jW=w)XbhZBlnuuhy=3pZ%(VZKj_fZ`|!|6(1k5 z&RXVpz0}m{>GRI23!2F+r#Pm*_E%5Y7$H+{5oc2N#9+dCL*L7dpWW5dw?-vyz8P}w zq;&qC#yQ4iyJKthe)xR&?0fmamoHn~F8J7HFz<}fTU~rO(13~jJQ&Lc&G5n zMVn8Ra0n_|700+Mahsc)f301%y+bDB9QXX^t5>g<_Y!1W;Wo!cxX6CSt_6qp-G0lr z!@%WUUVeSPc9ZLJFJ%S;zPp#|Klpuw4dci&9XQ)kPyCss2nL-K=Ypu9U zZkVLRUJpHd(D&J|UsC*XHWmePZHWi!_8(8%?C8aro}OO%_=;tKo9!)+b^%Z-TCAqT z@%;Jo8+qGBQx_O6ynOKbj>^dbZq57dzkmJuO#RczF|IeJve--c&zt;QVb8jUX;Q^* zi(S|xR$hE@ne+AUeNrY?5j|n@b~PP^GTLYSEM`qCzh1gy*Dfms4yojV+S=ak?(SC( z1qM<}gq;@qJYV*DmzPoUszyG!-jK^CJ9h0lwAj6W!`-~q57W6CG@BA7CIlTi+|FNE zS=m`AQ&?7C7REbIZQaW+zFwTur%#X2n|}3zk*$;S+2o1!hq4!bK2h!G$0*x>H7ius zS&6YEXGYZmWpDQ$4UWZiRwtG(UtaO=Pi5(eb?eq;z4Dsh%yBVo^UC6Az3J?kla^(E zcydyB&iwh;O_*c@?-kE|o_~9r)s>R0ueN)3?mU>ab(M##AY(m4N3e^8{S4+0d!I8V z+T?-T;WA7Ic>7Xp7)-scUgS@_bNhDmojZ4~^v>N`>t<t^sTWqgv|b0?$VXa7W%iHvT0)Ya8R zyOt*#^(CKe&wj_$ThFANCHMH(uU&5IR9xrHof}#)Z9}owO1JGX%(mgrV_M5I3nVrg zneUHV&u_tRa)2Srs@=uiiWgJ>&0H|?`u90(bI*0S`Tf{=`*t*_j(u`B(}2_U^X8H{ zX0v(CX8XqKOS#wfPd}aN`}D&+qvPjFgyzR5`;^MO*pR8TxR`Hx{q*TyXQnJU|2$=D z)Ya$h0=B%m*Nv8j^xCcO?K^h$YUtj&Nok$}S2=j+H-D|_eSUs^`0@@vM%lA-ihXq_ zMtD4L_c)fc@xafYm8#n>y}aBf_+D1lz=~nd`P9EWNe9@!F+KPVYFK^bQe?Ojuw!G< z;mc2qq?is}tC_1}v}wuvckk-6>OMbtvczfg9h=+Rj$XYgdhPYsgU3z>X*`Sk{=4?> zkD14xJv(}Ka+{O1__MW=dy5u-zW4a$<>jXHf8VQqf6%i1^5x537FSwKtqlI?1@aqx zaORl$v9`LpI>7JPCfjLC1@+S9X8T=y`ZTroOy-4-V*-i`52oBy=v7*ny^g#1^d9;8 zS(^Lq=J9_zwach!4wqF>iAlzv7XlNG`nNP{3J4iB&eS|_!ng2)gt8L{`x2XZ|L>OH zKf2uR>&jON7j|0M+O9pp@qfLy*3N4_??EZ;d4~-{kx~ht&C-_N-`|5A3Tnxj_?p@t z60&`3vMy|O)`wE9$B!N{nVXxNrXHNaS-(@(<$MQ+;7vuYBk7UWIX3#*0xve?Y`^^~ zJ@NhW3gNdm-j?myySH`gwol3#S27(kLNanPkCb#O$eKERn-#NSapEVV zj3cI+1zV#+EoOY5_+j5UeqpZqUteA_Zk{VD5|b@eR4za%It6+Hy86`2V~a`yN$INI&#SI&52k+^$#2yYGgvynOX) zmEGZ(_)iHhVqRaY-zN5dM(zJVXa_)mQQ>vX_S>LFOU5i|z1HvsrGG_rb#c60=AWJx zb^fjEznd4%8I}_Bnq!7#tkmy)@3jrPq^-R#nmnHKT;0e)Vy3jlV)X?RmgeQebM-P6=ymTbpNyC5Y^~{WgnpjvdTN-y&O9&o%S`v{i;Qg48Y94Om;^yEoT)is58XD)m2dFgy(-mls2Ef>s7 znU577$=kmA*!;FA;UG)@dR-pZW{)o&sncD!UObr8zfh2C-u#sc_q^pMpHo^b`r^+8 zhszhQd~a1OPJpt-2Zohr?irejN5o^OtrBYeWy_lVSWRH<@9M|CubGl1^#5|ro zd$yO{;*A&mKrIS6`?{Kd_VceVO*B@n_u_hS;euVwj}2CQKDRd{Eq=Z0*ZV+@$cS)}4|Y4_f}Yoi38KYuPdbCKclVyEMi z`S|7w&y#m><$CeqL*0u_;fs=LmTgUA`5*V91=JsuiazvR>SDr4h4qtLf~?lKEUVc6 zBB6e=`r^~qvG))2 z++_)|mdf)#fBwuh-^fY1`VXkZ=)d0F`=4@U{X}W|xtvaS*RZEgZ3xp_(wJJQRLN#? z#Dqs(UH$716Q((@-@eUNt&5F~4gJ!3#P!g5P$J-)Y{+JAZeGfpx!|Wh*(yF}a_iU^B1cgSFf5tuin(@A_L`*Z=zU>r*ajS_eA%FY2XM?ge$y z*9)r1vgZA`bEH((x-~&hPcLhVaPk_{b5d2T0p_Rv*2PEOUi0*tPo|XDq4~S`W_M+_ zM4#NCF6E$n=BwhX1#=bhE~J$2ulTsg=#yk+;o6KNnJFihsQ>J#d^mmU&rFL>jydz@ zg*~n)EDV&b=U%(*$Ag2-QfntI^;1&dH95_bpO?2PLHNDqPtMzK#e6R(Y`%Hr_tLo% z*KP*iZeX(W$(%E1PDrWKBE6cp2(?pDmAxv3cRemB>o>Q}JI_%mRY3qRJvc^Ko_uAOhA7letK@3@r&>BId|%>Kx%eF z7Y38hb1oX*Jb%VLn==$NjDBjeQM^~Xg!ts z%`fZDvHtwoWWujfyXxI{*DaGRxz&7*FWCJJ_ky_+QaMVxI@u|!I$t{{uieR9B9(FG zXUqr7*tKDx9{<{ai!1s6@m{?7#CDPJqU*E2PuU~AEbzq~qfqCNgTGtu|46Ef=R06+ zE_rYB&yS$)?j9k&14oat-m9p8%vcL!Qs` zdp1d|eG#NT*J(ka(v&p|E8J$NgxtMz=ZcMX@wZujj(ureSF2Xu*y8qV-Oh_fi=N!s z@w4vt?fZ5YSRVYToZB)jb4Nx^W=BVqz*~hvzv+5Ln=Y3=H;J)&lwvp6r_AYzOKQDI z@tkukorzPzmMwO5Y5G3X#pjcl#+1i%4sYN8_wB14TXMTMZ#IsJj}Je5@)X0}y#bS@ zB)@`+%ewwPWm)sPvXid+>NSTgS#ojtVrS(QU-^Q(*zbyTa(#$=US6SZx^T+(2`|~s zHS%d*@B7|;f_1+A-7W2WnfJf5iyFK1ov6J~|8jkyjP~{BIigDJyEgJ)6j*C|@VN`O z29^AoxJxCgb>j5=Z53g3^*ezxd)99qOM&%VBI`@O2y z?N?s!&@2kR+?&s#Z&&q&WBc~)qHfoXmfR89>Tsd@{oe42Oq(WebzGXF)%#^{_4ikX zj3Lf0H)HF=Bm)@Q0yI8vStFl5<;aU3>EDyp{j)^84j(c*c4hAM%1kTESuw}&G4%Wk zUo9H9r=svdOhMhQYK8Nam6e_5_iHxa6IdrdSHms4B!$C!zfS(@nLk`aZUiT8zIi3) zQ_{v2TOXPj#e}b$pSI=lg$t5TUZ{v9_F zJlVba>Z|rEoIhh)1y)%te#Wuq`@L$@qlbg8ZQi{3mBnSx3q?m&w!RAKDti;bSy)*a z8EDnlz095C!25qEf4^p^ulX7NOQz4s;dr6U`f1D`me>DU{>*#-|KF0=4*76q$VTly zAn|K@)pqxY^aP`X2MpH6*K^M`6rXt9p|c_BoTLF8n**QZvGY7h-7QmW>VB8kpJq5P zegB`QXU;E~^DxM%L-JVk0fr7vHy(q|PDPd{i7t767`yk%+-C}#a>phixv)OU$*bTP zbH|2j56bJFm-90G`S<_R@0-@~>&+v%TjVUQ4@5_(%y=_lVk3*i`y+`39Eoc_lsOtP zWETdQ=S`fTpz|R|!1#iR*#5t__vbP^xL)`6y3xg631yvz9G+!12M;Sp9yqd7Hphsq zd)Yw?zY}^>&vR_KZNhsjx9Q~~1vS2N^_-q(Rdsqc9ANx2Z_a=FnxFPhH2pj*7jKkH zme77x6tHQUvBI%Q9Iij_9$Lb=lQHN_#$H!1zQV2zb<-xfu_X017;Vj;UvpO9=YJkezJ z=URUK)aUQ}|GntnlrP0{%C)+`jwx#X#p5lln>X=s`o4b1BapQ2>)&0DVzQF&rI(0g zm!7EFc_enmgyWL0{y&ZX_q3m9?Z1=P9vsyAKN<-hba9{@11HM&@5;xSQlPYQ9Uj zC_BX>bjA&-h-5=oh1-JMyB$tl`d2c4LQSWI6VHeGbvb7Q1TQnlvXh4uulUx?a+3(Yrty?Vf_;g>^Iel2FYjW`m{G$Z zbhXE@9SCIbNfrp!>YIJi;HH8l_k2cS;q6%;X2v-8YUhdnVVFLgu|k}`AWbU z$+$Vro9>my?%yuA)A&U5mV$3`|G)14cm2eMj>`=yFP9Zc8S)DI`EfgL?s9nAlQ?U` zi)j+a%)P!KllNEdf%X6T_y3w$ zz*P5nf8o!qzK5cxOUfT%tf8Lk8}e*RSK( zOXuC*w&9*4t0uSbVwZGfAJyqQ_wQ~l<@0;_$5>x}8KLnDTL zAJ+f#z9Es=xEI(aX3tTIu*cg`{B5zdV_TPNwx5`rLTit^8r)O^!Yp=*nn@n~Ltu z`Tx$wiz_Drg!s5B{U z?_UGfKUd@biq?HguNS*1vEz!u>;{m2Q-7c2jrZSgj96>n5x2WS;n0)!Q71n~^*m-# z59MQXI3vl&W|*#H)vqbSe7NI#{=SdqKi;IT2x2~_{1;rr)!`>C%aq;nwpFCmN|HXU%m-(iL{vNjfbNI}D?Yk2{&aalSgs!h< z5?ptZ!|;$4`vHZg9R|HqSFkk83st`SEvI=tH^AF7u(4wAB)!se2Rk=@>Sb1u^54nv z^vRToMT%RF3MAI|bR6JN-t$>^g3+4Ns|ME36AjGQt_)hU>1A+a?ku$<2BFIpd zK`)kl;v>iUMy*xO2vDB$e6KM!d5*ywkO&#*{R3FGW<$weFjUz&i4(58xE~d zf7sI&W$vd`XxJ9;>8UUCo+EbV%MS2rs#?5Ou}$e-Z0yGoyyA%QbDIg?XRG`^tx3EV zF=N(B3%^7?L(vUO7x_9yU9@~ZK{d&DQqYHcXPbieow>MmpV*p>zYaP;&&~cZd|18z*Xp#5I!7+o3u{XM@o-_f_xR*yH`a|0n?e+RSBfcA;Y(@s>sU!CZu$(T3I%rBT}R%G!#DQ<`QMenEI z;`4tTGMBgcrl8X8+tvK(x)U0EY68^X-~7wR#<_C=$1#R$2d#BQL@sROom1*zDI4R= zGl^ZC_2?;mheD2|jt}P!MtKVNBpXg)s_ZXp>3+9BC3vv~Yplk(UdGmpXP+#lpR%2! z=E?uGN8t3%-ZS><2h5v-Oyt&8O!sK8sGq*bwLhk=pY5co=X#eTCY~bm`ComC)Rs?P zv$Eq@<&rrM*0`FnX}TPU^emR(Sr{VRlF6{feNqYASJ59a$0fKI8KmCv375Ymf7e7T zJw?jS>X6lT^QZ4$H&-ztI_|R>^0_NdN<^EVIJ9kgM$pS^(%A;RwTAyT<{YX&7Gcuc z{ypzp?Q)@sW=>BwugkgCDw_8|n!kHevFXg6QO&O9E27Uwl{0uqdRQv7F&q#HQV8(o zo>*|;gqa&h?yBXEYdy_V-|hOyWAOTha-!HX$F|a^Gya;aR_qf_?N(*-=e#!a6^p}C zVW+MWPn->=D!o@V$&iZQH$7Naadl34{rd-hb@s+At?za1TlwsNvjx|=-;y&oh?(7f zRP!KUK}SKIVEU#*efdWZ&a4zTxAW1RCp~ils!d$xS*ssNNm+U~Va?o$lWuje75Hu8 z+hdUw`RZ4DWNo38df}~8R^OD?OfC}g^O|*AN}5}H1w%r@n&$7khfEGdEZdY;Y8#h- ziZii(Q-q1w>C)z7rSiArWnCwf9sajim~+d4|}_a-A3!o%AqNe%djoaa-;b zIfu?2(xKdOua--WEK_xQUW_ibZEgAnySa-wvmm%aiJtKQU|(nUHMwXljhwvHq7$JJoJo`J}tf z`JsqUYsNI=ge5ZiVn232IVPOIm~CUk)HApDzlm=KtK0nD7gX1TEiKzqTDh)_WB-rv zQU(SE@LGb_7B=S4`uPTa!eVck6#dwxc&{D|Jmh%QBAQwGdh%Lf^~6K92TPyT>~8*KACx-X`2N33bGsY)}WrmM-Bqf93h8SEH@MH0_ky{ulyGDn~1 zztGC*Cv=zXtjXgNt_cp}_mg2=rt|DheM9NCC1wWMU;Kkt95Oc1Sz2;#g+9z3WKCur zQC=4n6G7oe7Gh=p?ieipxbKXnYRNg}*-le@EEBkdj}_ zWp#`61fO}c{ZoTaxt!ejp}kgm$Gp{7xvq)#Ih;9=w$bIEfcKr3Enz`V-4i9+^Irac z2^~1*XKe62aWH&y{#w`DTQ?ZYaM^gKqF+RK+H28GPgbvdd;VRHr`L*}jSf9dezRL7 z-zThfUgKNFu!F6hQ&Oy5>Sb%<{ZP+%si$*<)|eLDR9qhM`L@&{^KBC5?`@YEgqkdj z)=`yz&&M-Q)JZO}e%|?nb;sF@rsiFp`*}{Oan^(n&YMnNEm+E;-c@+7+9f4aiZg}h z#V+0n-cz0Z0*h`om~K|tp!tC-$Zx~41u`4fec~&cG->yo)<5YJgX`DvF)>KIZ++dc zs58J+n2U>L@jJ)MN*;Z8I-IYV=&o_%QA@m@J=Nj<52Zg(cpjM~ZojR)ZQsi5{oR7O zW*^ozOET}#ep))Y!?sm(3adls3+75b1A{U>?mf5PZkV9gW7DrEm{Zf-!NK32(~zkX zn8U>=D4841u{8JhL)XXMSB2^ex!50t{=cK_CzuFYfcP^-HiLIFuUMFW?dHQ_L#g5_t&UB`&dSbDxw^KHd)BIDRQ-5YHJ3& zPvWX$x2pSRL=-lh%6tB?;isuPFY`s24$Y+d@A*q^31|Osec0<_>{b7O=}^S<`&&)) zL+@$LFBmNh>ONf**=B++yDLNhYA0OJw<~ z$<<-6K0n{bWtr|Wb91Zf0yme(tCXMT%$)z(uR>M+(hMipId(=98_YWx<$Tb5(a8*FF4h+sR<|a& zXGXGz7%HWA7bmhZol{fhTl#M`t6Q>CZZ?bQaBT#@C)Vy&GM#9d-$Xy?io7@DWD}cX~sa;c1Ryfp=!-WK7taLPDR& zJY37c>DlV)Cm6`GY}U2IQsKL0n0`92&wtwdIN*|u4{P9jMm46&yspJRdEc~uNbFTu za;yG>V9>R>PM+WYT&u6C=R2_fchWg`-UFbugFK86p5?SSTsQFzyf56gr&{w?n#r@d z?caShrF#U=iEWBGw(w6@vhA9=ybf#=S|q}Yx1aLhxy-QIOF;asQ%{1B$pOzJ?_Mu^ zU)wAbdL+l!bWWh=-H8X-8G@yb7Kkl9JSVu*LiJaDyk2+DhpN3IkL53v<;HSPVh-*q zX36nsTolW!tYT+2VdKvYQ;T{8FP_!xoD(>A$rOzkVSbreOfS7nVjE^w^#-*@T;!Ph zibL^QR!>k}b-lFOQyK;URqozwr=KE zR;@?O%<6vy>&4zWt>p4LepKe@OmFtJ#mPZMXHRwZDAgSKQ@2w-sO}~ADML?HSFe=| zLTlunNNL@73RwI_aobMcZ407Ke_QO#loQSU`Tt|^9K{a_C5EdEM}^eIm2WFNZ&7Ko zu z@kAs0@v0x^lXg0Et&F>D(326}nR7HUX;)IB?j)mInyMAy9#a&L%@SIm$Q|sk{Y66L z{`@I&jyxTT=bp~;`d_c0yzu__qZc>3K0g@6{pn@Y{VtXdK3=c)w68o>-%u!Kc4qGz z@ov^-nJwS*$~HaOQxcUWxpeD{V|1j3oC(wCr!7~O zuiR4Oddl@+@0vFgCN7@XSIHI^a;IY6PC@^`|H+XHugzK>)=n3oPJ}6|RHwx9Os&4@7HN+ocxDUowk1j&t#GQ4;@x$0QCQxT*I!QT3@M)S zdpbW)`P4_kq9>G=?_Tj__aWAgrdsQ_{txnelv~KbB_x~}ue9g5#6*F{V+-GMB?Vb< zr^?mu-hD}L*ITg;4X$oKmkzI62Q$-<-8Sp_NFIq z7J4)sFqx+DwP8ZK_dAOtEK6c48Qn~toMxNTaIQXCN~mU@!BK@ai*U&(^_>M$Jd^Hj ziL*EVDdFT9y(6-1#{IcYItJTn*5}S{micPpdt%uM2L8Vt+pAbWeg?>@zmam)FY}_h# zPjqjS-w%Pn`Z?_~!cAA62B)03-J>bK`c8%ZUe>OzgmbF$IRR3(8>^D--z55II&ZnA z#1`VqXw@*~neT~?%Xb92T)Y0}!w*3-OI+n=bBE4Y4ukJbe=BcZ8Z7e#lz~Q;;9k)|o zmx$f7N(qhI4J@KSJ%o7x1e^>0C!k3rz#6SI@*Quit2f7O`PI;8b-z3l# zoaTMRXW>$fqVuZp@t?lz30pov&?L~b`X`c_NvsWqOFuPhI19au)4d*@(k|;3 zseb71)aZn?;~5fcDQBiiA2ztYTGG+)hD;WhaNEK!J3WFA-F?Rv+%w}C|9Qq6dE1XF zmc3NoEVyN^oPC}C7aREk&?|YvpdB2=qE_d02ld)jk#_#v0Tje|!ywox!{gHHH zLW)d%N%QMne82a#m#_0WA*J}KbxxwR0(;|(CJnK1_9_(p$Jej!pqVLrd@sn4i zo=P@r_6c2m_G{*vl1HVRCC&OaUQ<%)5ER_vz!7mxZNWmzxu5^#Y;abtms!TJB=t;uT;#0|PY?%3qLqf?mSYDFgl$x^ zwP$V?XfC<0y{AXydD+={PrELM^lqv5J&>Wh>{g@!)1vtX%9fL+pWl2)Zub8RGhhAQ z=f(Q{Fhh1a)AKcYFE&Kz9N9Uml>1nM%G1DW-L(p3fBlwD4l110A|aVPt*=91o@1Nw zI;+%U5)p#6vyv43E_H5Y2;wqL6-a6+WP5$IJ)A9Lt?PC>Mmv{B5BqyqX0e_4*<8x- zq#j&zSF{Q=$S|v&X|Z?9as9kMREp8*g;27flgs5PabK=2yR`0l+RBIeYzsF0S}M9B z+e?(8vwWGONYMO~#aHGOy%fplT|3*dm(R7SE0MJ*ZHevXBbu4J@4qi7+H_38>hsbt z+pBXvrYuh~NpidFx@69SwXQsjb2GDr0+dbt2uhTc~g&xnWu7|L9u%*s%+v3ap+)LE; zajmCi%E}EA)hUK^u0{TknK;KanX7Q~6g{bn<_Zf9z5X*@IkEm;zlrGDdPOs_qwXA1 zlOL`=V=%E^jN#gqqCLwZlV*K$kP_It-Y;Cwj^oxc+a2GU+NP}H%jXT!>T{VWt#^LX z=2mG($K^_SuA5>j%etKt8_p%XQe3%`%{*K_Zhf@X3BOZb_FRt_y%c2nu)F@#KP!g# ze^c$+7Yke{lsUe-mEpiIW{LW=hw4X8-1!h=e>P@k@zSze-u30?$z6g*mljQr`m}l7 zpO|}B`IUQ4pIEnHXRpNjqe+3T35%ZGmQ0m$Wz+7>$q-1JTYmT0wp{5q)s6p_3tqc4 z(W79S#8E-Xi!Lu)!cU!C^L@we+nl=uRa_gIVmWyHIV@W{mYhgeY~`Aew)JALR>ju1 z#hJ6CKHsbAU-$OGgM^@y^_lG=DZG2M9-sa?W1VJhy|#Ix)RHM1*9umjI-v2AB`n!w z-AdI~L$?Jlv)GSZI-jtrpsvGprh)hGq-35=2OIY>%kF-3=7+Oydr#Jkxf5Tt889B& zqpxwg=gWoeMSjkYXG=Cte6Db@a!R)R@s0BqZ<+9Is`3I;rc-l{R*Ft!PG%IZ*O7{r zIh~YE`>XzgHkaA8aWv#BAFIm?aLO%Dj=9Rxv2nwT z#YtY_2gR~i9ll_;NNh%Thrrx+w+Dv>nCE$))brH&oh;@!Yv*1a zmrj9Y0*}1b+G|~|pS8>>Y>t}5MbQmHzV+p?%`#ohmn!)sx@UAxRJ?5Oxvy$t#2L$+ zm1ze|7-u>;ui$MzmbgOD3E$=>r$4=&h~0}vU5>}_$#YpBH64?8=oz;PM*PLabHPuX4h+Ltfw$MA96nOi(^jbc+ zKiMgBT<~7ik8O>HVv0Q{H24IoMJ19254TM52@Sb&Re5V-pdQC0SEuLK3cSB7{<~P& z^LXDhtvVH@MrC&J7JGh1j>RjN2Cg-EaI)(R`67@tkE#<8hO# z5=M`@Go&*hKkK<-DfcHQO2xjYdjC2S{qmrIYxsf!<6Y~trT%G#FOn-N zj7tbO{dmph4eK2B7rFehGtXsCkG+^ZVbA`2FIC1+4tK*pr=JF0n6_<_-QpJxEYnJj zZuJUE9`fYiy1Q{(n6SWG%}|D5&99p`8+)=ONF9%w^>TIc^^^6RlP54#*k^|ZJl*ld zSYejX!@aFvb=wRQ)&C0H^$0pS+}2aHijnX2cyNNzqVMsKkIoD++c;eN*9jci(=599 zAjdt=&bv3hH<*SpwB=O2_g;Nl#7opMcd~Ziys1+hdoEo)Cvw9++2x$B&wh(FFZ(xt zvp@Z)N0-GcnMdlnQj*ri`fbHq;~VuDbF41PHE2jLnjo^eE8gww>eth@9SaP)el5dp zY0KTb@Ls#;95W_;n^5U@ndNnC?0TW8>=x<#R?kuyZc3UQn;OS{^MHBXy4&Fam2PgA zr?q)UJ=$TSGKtOW-ofX~GAwsEHQjmty{jYAN_E}!*HwQF-6|L^8yws&C!kobHp#X< zam|V5chfi)NWGC!PMYWadD04{YggI@ne%vhGPU+EeDiErmo8#M=@;G7X%z($It*p(vwU*vkys?}AD}Vkh zHJxd9-P4pUiWvGp2RI2fWO#L6cR9ARKI8H1OV8F#dbLb*$|l{{0*g<*^lnN2H0N)h zVdzoQblqL4+6H@9-o10`dn$9x(_2pEe)=jtOh=bb5m;WKpmO-dxz%5q1ZO5nNlX*+ zD-^nNNaP)pw%j4b`i3R;R znEKQ+Rd-*$yv=o)*%KrGO+PJ*&PlWj9=1r3U^|&Fo*}Cd!#S^e>&I(RJwfvMs;m6? zGIphvwP?*x>f7`3&4tQD_9JtQn-m=Xq|eok;VcZwNz77GiKc8aA5WOk0rnT>tRJ8gHFPxm0!QLXhb$Wzwz~K)WuKwm9GT6BSVEk&9t8RDjtyP zewx&|?>&D?)9UMqx=n^2!mJft4YE?XqcN^3sa z=D2I7Z`iM|_sqIV*mcyq8#FWn0*ly4(sq{EXlVVN)2R>N&)>bFKMeBVCnU1m-5 zlbXg)kG+>JQZZd5zNzg|pX zymxQP?+=c98GigLl&L>nxW|dZ!AbEX@8JebmByG_-Tg`_F|Q9~&yI~={6|HGky-0} z&Wb)N#BmN z-~G^$#L!xw(BtUPbUtoEtK=0!~fauYvSJST4nL?rv15_-_`Wj3hG?qlj&Mks~;g?CD7jV z(O!`C<$-N%Ruk2}uHV?q_A7jg$<;>TzyhUPw`P2QXZ!rk-s#O-&+q%*I>pJ+_tMwK zdY(g#)$ew`FZ%xLW9T#V}>h7t6Bir#2n72s&-0{?21I@4?mKyLULc7FsH6KDaLXW$oGx zQD#?>&G1DlI%Ii8eFF0IrMmtkcqtEpGp`aFSs1mG1#ui5)J>gB32DOgy%+n_;O}zVHjD`B#`# zqpagsefv>;-~v-)YGAa|%Bcn{&({nkZ6VAjpTkQJ# zb4UL*U8qr6cFoVq^5^|f##cc%m*j3QtP}cC!hbOR-meEAr5fV@a&Xq)TgA}!(I=Fl zsoR6Eay1a<%{nD*$ zk1T|`YR>eHp!Kol@N2XT{R8G3nn;qjj^ad3JH# zxIAy6>;Xfgvr$!X&mwzEw0=CB5>Y?fE=l)sU$Rn_>Ece^iVN4jRmfMZuZ%6(!u4QI zu?c&;So{jd=Mtai%v|>JgVovCg6+3WouzkP@tSD1&*HqXrFhxy*x5E8?g|E;ooeC{ zX&CT; zy6Q#wu17bH9cgCgulWD>`~TOzKfm9r_CNMw$Bv4M8CjJ=1&v#J!6H>;Dw$FYdd|`#H{g@9RnP-M4>Ospl~Fe^-di+4>JlQ`cs@ZA(koDUt+Q7yPaH z$&QeJ58LIx?aV)WBieso?(fS!wQ5U4dm^GUZ+yM;gFpAnf4Eb8{ic7l(`Ao2@5^?)=y0hkd%fJhMe=}tymQLaPW_N<@pAAZZ2F?y+qryXTS9d zG~fBgaT@E#)`OKc6Cc<--#t_D=(-DRGm6!Co4Za6JhL+9i$443h;xHf)4G<_htJN= z{;QyW^Ks4TPkWC~bVFtKUZ&M9lJN6l2fk;BhqpR%xx#ZsR0;;rfoMpto$Z3!!;FOFPc zs<2Zi>B8J^rbT6+e{Wgj&A;QB<>Wn9s!OKa;`w=F^V3rAdF65^`940Koz|@2mV;$@_1QpGHgVv88Eo zqNWCOrn7c3OTVvQu~2B0I$y4Is%FcK8@|tDc7NktdqGE%v+?iIzC@3n#5bbb)E~7g zSb2rXH&|FLlg%-kxPMOizpv--tcTPN4EJik$434>x6~=&;PJI=OujXxG5>T|Gc572YJZpQ-`^*;F1fz8Z|AummyR?9Zr-jW z5M6N5IEF?4mD-MNDw{YAd9K`XX=*YMcl^|0d05-|bWDBv<;(+;Fvdrhvq%4IZi;0khKo9;-GISgKI?TjSNK8y?8ayH&uzz&Hj=R9;O#;bI zD#pti_e@cCmb>1(pu6bc?fgA&8Sd>Yc7J6ecx;JY%hFYT31SjEwmepx-t>85{Ur4^ ziwBLH*iuhBl`RY{h`AqeBbG&8@YmY&_3!W5MlP3@v#Y7t5q^38k|`(l39aUm=A4+i z>%o&JEuTN1pP4RkJnW^AyOh%JN~N|7z7y8P)y~V@m$3Qfsxp_B={_5^J_NNpMO6+)|}_@%flhIZHXK1hyVH3UCZ$A z&-b4Dx1Og+h%rdCee@|T%01HBI(^;gWK)LMrO|9qah{JK4xZuG=iBq|_tTAb4EFyY z>geyWDA=>(v_a2u>3sRdM2XpJ({Jg<|J;=*5yoi1^H}qU2}4^VV?&}uyt5B;f`k}D pfJECzQ?RH+TOujwB zNp>HUJ_V((foU)S*TcZTz`71B#Gri$Lc7>P=x}WaoyiZOi^8CE8Uw@R7c3%5v)Ld5 z+anRym`MpN--EbdG zI~ln1Ss1uLLfdz5m1Ov{dH;F_o_uBo?tDguznfNXl4SV1W7`%c1}>P``t2Jf8UAkE zwjCl?57xVN$974E-#fQ$W&msE1ev#I_ZE<~8@DhqaOX2KaDfcmzHzrC!{4pjHbKO| z>b7s$Dar7A^RC?t3|#r_3{3g|8JI!(w}Z{xuyHE`19Sd=2G)FThClfX`5>v)TS3Nb z+OdU|p`JBgnBni9t(zqo{_fkhiIw4hz68VHjT_cUGB9rXzZn!<%nXeA0t|n5Y}^3y z%({&rw{S2p=Cd;V-LeT}(5|f;L7w4YV9sY@_`7r0T97)3r`Z@dKNHQ>P|F?;O2OO}B41c$71_kW)O}oHCU_Wo! z3<|Fu+jfBb{Es0Y5;K1{?Aj&C@O#5na4>?L#KiD-*PeZn42)a;B8zR_xL1 zp3gFU^?ydidR9=#GURhGu;yzsFy`|xFz0JAFoGk3gMl+&m4PjvgMm9=nSnE(6-}}Yz?%<>a3uy_a6$m72c=Drc^nMv`K%TU z%=xa{&;MuiWI;*b(kx8GB=8O31iov_UPv&49QAko#*N?vz73JUx9r)1mcSX;|Hn+= z>p*dhk-)cuB5XHW0tY3!ZCDfdR*-)of&O><=G~GEzqey1@LeD?H*Ua^z}IfwCdu#@ zDS_`sPvD!@f)n^wlmrg;%qrvrzIDqkNru0>wyp)GCU^p0g_*$jYy`OxC4p~)CGagM z34He^a01@~PR-z4y>$~PV7G7D4Hg0?@XcF5ej_S@?*t|A-`lrfN#Hxt68Pq=kOaPM zJ#qrCU}Zv1;IkoISOVY2$~1@)I4{fe_nb^ND5+eJi>Oq-9-PW|qo(q$>%gge2O^bk z+yyFaP>S)5>%a*EQldeN_Kn*?VpxmuT|}qyZ78W6RCaB_Oy%1^DPiMgEUA1WIF)bS zu?<%-z7AANF>d<50VS1#>Yp7eP*ORx7+;5y%GYD2a!}SrE5^4#Q~A2}NU5B0*Z+;+ zRK6LUq#>z%Ehu2OZ`uhK0;O`s&Hq7u!${@pAjSCht)SWvVy0FoWcd|4n5`Wo2MY{juoy-Mb(a%nVHb zB^j9hGco*3Jq{LQN@ZqXO#Qp)_+6&gjK>*MnIJ0a|Nml0OSIMZFG` zGpB-_35rBks00(k-_%9*$C>W_KAyTLbrAUzd)%27GXab zQd8>}-TnL-k|J0b7*iRKe}8=(6l05EihhB@1d?b#9$*1Q#qqm8et;A~)6joL29PU2 zk@)-W@#74sOdv&z?!Nx<`7S7qAxV)D6yvc^H^ewHO#vL79+)fq4;Yswx9xDig>K z4hF_WjK|p){ZCZ}Wx%_iKi^%%1j?a{7?1zI%X}OZT*?ez7Tx_^|N1j1dmKN$2%H>_ zv)*L{r)MRw>}ycoIez!^T_%SAsZ1cPpu7tO=hWkO@4o)=1C;SV@=U3Wi+-do`dt6{2RNwzfHEBOYsR~Ok1tA9 z1Vz;%rsF?T7u^NPgGvs@=<8hFYAoIU~a~dcTj)RQ(IKgw}v`d6|rELio0&3=H)Q3=B-Rtx$ofP9jLN$V0><^r5u<_T}PCUKRk$OMX-U delta 2616 zcmeyofpg|E&J6*~l7$Q)z$BUhqTrax|KsFDW|e7jOjiV%;i6y$OV#8=W?@AZFo%I< z9hhbkb%D|WP&x*rN|k|ufps5PghBffgm&?T(Bak)I#Yh~H5R#~qG=HBY%vJE9qOPf z2O<3TaS-~)YAC%MN}q<(x4|@{)OHAM^A$oT=tAgb{>fpia#lUf5bnly2z_-8g#Nh~ zOf&I3gV3TPP+A2_n=~(D-M);K(fhOIK!XK8@FtfXZX8r z+dfH#zdN_=lV|w5e$xg?hQC|3?v!WvyM6aoNru0h_pg^{_`7NKCP{|BJGN~BsoB0! zlHu>hZQJD;{%+l|9i(^LW_gCcdvxZJR*mY}pAiXV-2Jdq+J; z!-kDpvrm$NaSPbu%^UYhGW^}NYr8zdpN+fLZxv_wvvJ3UZSqrX zn3Ndhr=~M0sme1jZhO3Q-=;0wH?QBeY1@t+oA+;7w`JRw-J7>>+OT`eo^4y}SroUg z`N_!1GTnid$pI7v)4N%ju*AUza2)K~vKJJ-8$sc_W$QMOOZR}n6dVVP>;EI-U>(@Y z&^Xu*^385&9Dssx8%i92f_nRAP|$6M#KA6b9BkYGl32TS8_1jBIM|IG2b) z$40Qlt3cttbqgrCc5PiN&+vEWu2qOQ*aLDjBo4Mg;{X(|yLN8^#{r1FbrZ-l+c)h7 z#lhw+AXj6?!A?*d{N26<6d%wy*a?b*&08UHux16NHlGU{Yj832K(< z=XscHz~L>%i!Hp@gTs3_B)qq-1E+aVYS_37luW?k{deO!u(!c!e&co!8yeo=G`|aH zc!T0?`({uuZGnXMHb{7H28HEDaCmRt0aApV=GTET9^z**Z+;+@CF6n*0mtdY~QrgUY>z*^M6EmuY;ud?H~tX zN%Olw;k{)CB)m6+!aIl`9Nx7MY6U-&VtqY}B11h3!~g#bvi}trSs z%23)EN;^YnOHT-G2esK5Qk5{dutLOLM4_}Q14BIn0|S$bDMY~SHH7wD2%&wT4)EuN z@cm_>G^9>q^0$TZAyp!ie=L-r3#DtJbT5>i3#HdW>AeiwwG@~3us7(v4P z!Kpc^$t9Wjc?!OX#n~VsXkE>~#=yV;VuKv52x8kaOqZ5pGMyeH$HY_52NHprBEZ1F z00}JyH3kL-9*`+W7*sie3<6sS7iS7skK_)B98fZ{h(+lKORayh0-sf^jj$XkpYsx oCNKP objects = new ArrayList(); + private static TransparentObject[] objects = new TransparentObject[0]; public static void clear() { - objects.clear(); + objects = new TransparentObject[0]; } public static void register(ITransparentObject object, Camera camera, Vec2d pos, short meta) { TransparentObject r_to = new TransparentObject(object, camera, pos, meta); - ArrayList objects_n = new ArrayList(); + TransparentObject[] objects_n = new TransparentObject[objects.length + 1]; boolean added = false; + int upto = 0; + + + //System.out.println("objects length: "+objects.length); + //System.out.println("objects_n length: "+objects_n.length); // Loop over the transparent object items - for(TransparentObject to : objects) + for(int i=0;i to.distance && !added) { added = true; - objects_n.add(r_to); + objects_n[upto] = r_to; + upto += 1; } - objects_n.add(to); + objects_n[upto] = to; + upto += 1; } if(!added) { - objects_n.add(r_to); + objects_n[upto] = r_to; } objects = objects_n; diff --git a/src/shootergame/entity/Entity.java b/src/shootergame/entity/Entity.java index cca486e..e0a0878 100644 --- a/src/shootergame/entity/Entity.java +++ b/src/shootergame/entity/Entity.java @@ -51,8 +51,10 @@ public class Entity implements ITransparentObject speed = 1; angle = MathHelpers.floor(angle); Vec2i tpos = new Vec2i(MathHelpers.floor(pos.x)+0, MathHelpers.floor(pos.y)+0); - tile_back = layer.getBackTile(tpos); - tile_front = layer.getFrontTile(tpos); + if(chunk == null) chunk = layer.getChunk(pos); + this.chunk = chunk; + tile_back = chunk.getBackTile(tpos); + tile_front = chunk.getFrontTile(tpos); if(this.isSolid) { @@ -134,8 +136,8 @@ public class Entity implements ITransparentObject Vec2i tpos = new Vec2i(MathHelpers.floor(pos.x)+0, MathHelpers.floor(pos.y)+0); // Activate both tiles - tile_front.tile.onActivated(chunk, layer, tpos, this, tile_front.meta); - tile_back.tile.onActivated(chunk, layer, tpos, this, tile_back.meta); + tile_front.tile.onActivated(layer, tpos, this, tile_front.meta); + tile_back.tile.onActivated(layer, tpos, this, tile_back.meta); } public void activateSteppedOnTile() @@ -153,8 +155,9 @@ public class Entity implements ITransparentObject public boolean moveIsLegal(Vec2d pos) { Vec2i t_pos = new Vec2i(MathHelpers.floor(pos.x)+0, MathHelpers.floor(pos.y)+0); - tile_back = Main.world.getLayer().getBackTile(t_pos); - tile_front = Main.world.getLayer().getFrontTile(t_pos); + Chunk chunk = Main.world.getLayer().getChunk(pos); + tile_back = chunk.getBackTile(t_pos); + tile_front = chunk.getFrontTile(t_pos); // Is this entity solid if(!goThroughSolid || !crossUnWalkable) @@ -211,7 +214,7 @@ public class Entity implements ITransparentObject } @Override - public Vec2d getRenderOffset() { + public Vec2d getRenderOffset(short meta) { return new Vec2d(0, 0); } } diff --git a/src/shootergame/entity/EntityBullet.java b/src/shootergame/entity/EntityBullet.java index fba5182..58cac8f 100644 --- a/src/shootergame/entity/EntityBullet.java +++ b/src/shootergame/entity/EntityBullet.java @@ -23,13 +23,18 @@ public class EntityBullet extends EntityParticle private int time = 0; private Entity parent; - public EntityBullet(Vec2d pos, Entity parent, double angle) { + private double damage; + private int breakchance; + + public EntityBullet(Vec2d pos, Entity parent, double angle, double damage, int breakchance) { super(0.2, 0.4); // Store some specified values this.pos = pos; this.angle = angle; this.parent = parent; + this.damage = damage; + this.breakchance = breakchance; // Play the gun sound Sounds.GUN.play(new Vec3d(pos.x, pos.y, 0.4), 2); @@ -41,33 +46,34 @@ public class EntityBullet extends EntityParticle // Move forward in the bullets angle, very quickly this.moveForward(0.2); + chunk = layer.getChunk(pos); // Is the bullets new position intersecting a solid object { // Get the position of the tile the bullet is over - Vec2i tpos = new Vec2i(MathHelpers.floor(pos.x)+0, MathHelpers.floor(pos.y)+0); + Vec2i tpos = new Vec2i(MathHelpers.floor(pos.x), MathHelpers.floor(pos.y)); // Get the foreground tile and the background tile - TileState tile_f = chunk.getFrontTile(tpos); - TileState tile_b = chunk.getBackTile(tpos); + Tile tile_f = chunk.getFrontTile(tpos).tile; + Tile tile_b = chunk.getBackTile(tpos).tile; // Is the tile solid and has the bullet crashed into it - if(tile_f.tile.tileSolid) { - if(pos.squareDistance(new Vec2d(tpos.x + 0.5, tpos.y + 0.5)) < tile_f.tile.tileHitbox) + if(tile_f.tileSolid) { + if(pos.squareDistance(new Vec2d(tpos.x + 0.5, tpos.y + 0.5)) < tile_f.tileHitbox) { // Break the block - if(RandomHelpers.randrange(rand, 5) == 0) { + if(RandomHelpers.randrange(rand, breakchance) == 0) { chunk.breakFrontTile(tpos); } // Delete the bullet kill(); } - } if(tile_b.tile.tileSolid) { - if(pos.squareDistance(new Vec2d(tpos.x + 0.5, tpos.y + 0.5)) < tile_b.tile.tileHitbox) + } if(tile_b.tileSolid) { + if(pos.squareDistance(new Vec2d(tpos.x + 0.5, tpos.y + 0.5)) < tile_b.tileHitbox) { // Break the block - if(RandomHelpers.randrange(rand, 5) == 0) { + if(RandomHelpers.randrange(rand, breakchance) == 0) { chunk.breakBackTile(tpos); } @@ -95,7 +101,7 @@ public class EntityBullet extends EntityParticle Sounds.HIT.play(new Vec3d(pos.x, pos.y, 0.4), 1); // Harm the entity - ea.removeHealth(10); + ea.removeHealth(damage); // Kill the bullet chunk.killEntity(this); diff --git a/src/shootergame/entity/EntityItem.java b/src/shootergame/entity/EntityItem.java index 2b4ed70..aa31e44 100644 --- a/src/shootergame/entity/EntityItem.java +++ b/src/shootergame/entity/EntityItem.java @@ -55,15 +55,15 @@ public class EntityItem extends EntityVertical { // Pick the stack up if its an inventory stack.item.onPickedUp(stack, layer, chunk, e); - - // Kill this entity if the stack is empty - if(stack.isEmpty()) { - kill(); - return; - } } } } + + // Kill this entity if the stack is empty + if(stack.isEmpty()) { + kill(); + return; + } } @Override diff --git a/src/shootergame/entity/EntityTnt.java b/src/shootergame/entity/EntityTnt.java index 71f66e6..bac9d36 100644 --- a/src/shootergame/entity/EntityTnt.java +++ b/src/shootergame/entity/EntityTnt.java @@ -5,6 +5,8 @@ import java.util.Random; import shootergame.Main; import shootergame.display.Camera; import shootergame.entity.particle.ParticleBlood; +import shootergame.entity.particle.ParticleBreak; +import shootergame.entity.particle.ParticleSmoke; import shootergame.entity.particle.ParticleSpark; import shootergame.init.Sounds; import shootergame.init.Textures; @@ -93,9 +95,15 @@ public class EntityTnt extends EntityVertical } // Set the tiles - if(!bts.tile.unbreakable) l.setBackTile(new TileState(ets.tile, - (short)blackened_gradient), tpos); - if(!fts.tile.unbreakable) l.setFrontTile(Tiles.VOID.getDefaultState(), tpos); + if(!bts.tile.unbreakable) { + l.setBackTile(new TileState(ets.tile, (short)blackened_gradient), tpos); + l.spawnEntity(new ParticleBreak(new Vec2d(tpos.x+rand.nextDouble(), tpos.y+rand.nextDouble()), bts)); + } + + if(!fts.tile.unbreakable) { + l.setFrontTile(Tiles.VOID.getDefaultState(), tpos); + l.spawnEntity(new ParticleBreak(new Vec2d(tpos.x+rand.nextDouble(), tpos.y+rand.nextDouble()), fts)); + } boolean killed_entities = false; @@ -114,6 +122,9 @@ public class EntityTnt extends EntityVertical // Spawn some blood if entities were killed if(killed_entities) l.spawnEntity(new ParticleBlood(rand, new Vec2d(px, py), py)); + + // Spawn some smoke + l.spawnEntity(new ParticleSmoke(new Vec2d(px, py))); } } } diff --git a/src/shootergame/entity/EntityZombie.java b/src/shootergame/entity/EntityZombie.java index 9093286..a613603 100644 --- a/src/shootergame/entity/EntityZombie.java +++ b/src/shootergame/entity/EntityZombie.java @@ -59,7 +59,7 @@ public class EntityZombie extends EntityVertical implements EntityAlive angle_gun += noise_gun_angle.eval(time, 0)*20; // Fire the gun - layer.spawnEntity(new EntityBullet(pos.copy(), this, angle_gun)); + layer.spawnEntity(new EntityBullet(pos.copy(), this, angle_gun, 20, 5)); } } diff --git a/src/shootergame/entity/particle/ParticleSmoke.java b/src/shootergame/entity/particle/ParticleSmoke.java new file mode 100644 index 0000000..dee573a --- /dev/null +++ b/src/shootergame/entity/particle/ParticleSmoke.java @@ -0,0 +1,45 @@ +package shootergame.entity.particle; + +import shootergame.Main; +import shootergame.display.Camera; +import shootergame.entity.EntityVertical; +import shootergame.init.Textures; +import shootergame.util.gl.GlHelpers; +import shootergame.util.math.vec.Vec2d; +import shootergame.world.chunk.Chunk; +import shootergame.world.layer.Layer; + +public class ParticleSmoke extends EntityVertical +{ + double height = 0; + double opacity = 1; + + public ParticleSmoke(Vec2d pos) { + super(Textures.PARTICLE_SMOKE_RANDOM.getTexture(), new Vec2d(1, 1)); + this.pos = pos; + } + + @Override + public void render(Vec2d pos, Camera camera) { + if(opacity <= 0) return; + GlHelpers.pushMatrix(); + GlHelpers.translate(0, 0, height); + GlHelpers.color4(1, 1, 1, opacity); + super.render(pos, camera); + GlHelpers.color4(1, 1, 1, 1); + GlHelpers.popMatrix(); + } + + @Override + public void tick(Chunk chunk, Layer layer) { + super.tick(chunk, layer); + + if(pos.squareDistance(Main.player.pos) > 32 || opacity <= 0) { + kill(); + } + + height += 0.001; + opacity -= 0.001; + } + +} diff --git a/src/shootergame/entity/player/EntityPlayer.java b/src/shootergame/entity/player/EntityPlayer.java index ccf7320..3be116c 100644 --- a/src/shootergame/entity/player/EntityPlayer.java +++ b/src/shootergame/entity/player/EntityPlayer.java @@ -9,6 +9,7 @@ import shootergame.entity.Entity; import shootergame.entity.EntityAlive; import shootergame.entity.EntityBullet; import shootergame.entity.EntityInventory; +import shootergame.entity.EntityItem; import shootergame.entity.EntityTnt; import shootergame.entity.EntityVertical; import shootergame.init.Items; @@ -179,7 +180,7 @@ public class EntityPlayer extends EntityVertical implements EntityAlive, EntityI ammo -= 1; // Summon bullets at this angle relative to the player - Main.world.getLayer().spawnEntity(new EntityBullet(pos.copy(), this, angle + this.angle)); + Main.world.getLayer().spawnEntity(new EntityBullet(pos.copy(), this, angle + this.angle, 20, 5)); } } @@ -234,4 +235,17 @@ public class EntityPlayer extends EntityVertical implements EntityAlive, EntityI public Inventory getInventory() { return inventory; } + + public void dropItem() + { + ItemStack i = inventory.getItem(inventory_hand); + + if(!i.isEmpty()) + { + Entity e = new EntityItem(pos.copy(), new ItemStack(i.item, 1, i.meta)); + e.angle = angle; + Main.world.getLayer().spawnEntity(e); + i.count -= 1; + } + } } diff --git a/src/shootergame/init/Items.java b/src/shootergame/init/Items.java index a4c49d9..265c388 100644 --- a/src/shootergame/init/Items.java +++ b/src/shootergame/init/Items.java @@ -6,6 +6,7 @@ import shootergame.items.ItemDefenceUpgrade; import shootergame.items.ItemEmpty; import shootergame.items.ItemGunUpgrade; import shootergame.items.ItemHealthPotion; +import shootergame.items.ItemTnt; public class Items { @@ -14,4 +15,5 @@ public class Items public static final Item GUN_UPGRADE = new ItemGunUpgrade("gun_upgrade"); public static final Item HEALTH_POTION = new ItemHealthPotion("health_potion"); public static final Item EMPTY = new ItemEmpty("empty"); + public static final Item TNT = new ItemTnt("tnt"); } diff --git a/src/shootergame/init/Textures.java b/src/shootergame/init/Textures.java index c4804a3..e5169c2 100644 --- a/src/shootergame/init/Textures.java +++ b/src/shootergame/init/Textures.java @@ -7,6 +7,7 @@ import org.lwjgl.opengl.GL; import shootergame.display.DisplayWindow; import shootergame.util.gl.texture.TextureMap; import shootergame.util.gl.texture.TextureReference; +import shootergame.util.gl.texture.TextureReferenceRandom; import shootergame.util.gl.texture.AnimationReference; public class Textures @@ -38,6 +39,11 @@ public class Textures public static final TextureReference TILE_LADDER_UP = texmap.getTextureReference(16, 17, 0, 16); public static final TextureReference TILE_CHEST = texmap.getTextureReference(2, 3, 4, 5); + public static final TextureReferenceRandom PARTICLE_SMOKE_RANDOM = new TextureReferenceRandom( + texmap.getTextureReference(14, 15, 13, 14), texmap.getTextureReference(15, 16, 13, 14), + texmap.getTextureReference(14, 15, 14, 15), texmap.getTextureReference(15, 16, 14, 15), + texmap.getTextureReference(14, 15, 15, 16), texmap.getTextureReference(15, 16, 15, 16)); + public static final TextureReference UI_HEALTH_FG = texmap.getTextureReference(0, 16, 11, 12); public static final TextureReference UI_HEALTH_BG = texmap.getTextureReference(0, 16, 12, 13); public static final TextureReference UI_ITEM_SLOTS = texmap.getTextureReference(0, 12, 13, 15); diff --git a/src/shootergame/input/JoystickCallback.java b/src/shootergame/input/JoystickCallback.java index dc92ae7..46910d7 100644 --- a/src/shootergame/input/JoystickCallback.java +++ b/src/shootergame/input/JoystickCallback.java @@ -18,6 +18,7 @@ public class JoystickCallback implements GLFWJoystickCallbackI, IMainloopTask private static boolean activateItem_last = false; private static boolean activateTile_last = false; + private static boolean dropItem_last = false; private static boolean hotbar_l = false; private static boolean hotbar_r = false; @@ -219,6 +220,18 @@ public class JoystickCallback implements GLFWJoystickCallbackI, IMainloopTask else if(activateTile_last) { activateTile_last = false; } + + // Drop item + if(button_b) { + if(!dropItem_last) { + Main.player.dropItem(); + dropItem_last = true; + } + } + + else if(dropItem_last) { + dropItem_last = false; + } } } diff --git a/src/shootergame/items/ItemTnt.java b/src/shootergame/items/ItemTnt.java new file mode 100644 index 0000000..9513070 --- /dev/null +++ b/src/shootergame/items/ItemTnt.java @@ -0,0 +1,30 @@ +package shootergame.items; + +import shootergame.entity.Entity; +import shootergame.entity.EntityTnt; +import shootergame.init.Textures; +import shootergame.world.chunk.Chunk; +import shootergame.world.layer.Layer; + +public class ItemTnt extends Item +{ + + public ItemTnt(String id) { + super(id); + + this.texture = Textures.ENTITY_TNT; + } + + @Override + public String getName(short meta) { + return "TNT"; + } + + @Override + public void onAction(ItemStack stack, Layer layer, Chunk chunk, Entity entity) { + super.onAction(stack, layer, chunk, entity); + + layer.spawnEntity(new EntityTnt(entity.pos.copy(), entity.angle, stack.meta)); + } + +} diff --git a/src/shootergame/tiles/Tile.java b/src/shootergame/tiles/Tile.java index 53ff6fb..a0a6f66 100644 --- a/src/shootergame/tiles/Tile.java +++ b/src/shootergame/tiles/Tile.java @@ -54,7 +54,7 @@ public class Tile implements ITransparentObject } @Override - public Vec2d getRenderOffset() { + public Vec2d getRenderOffset(short meta) { return new Vec2d(0.5, 0.5); } @@ -62,6 +62,6 @@ public class Tile implements ITransparentObject return new TileState(this, (short)0); } - public void onActivated(Chunk chunk, Layer layer, Vec2i tpos, Entity entity, short meta) { + public void onActivated(Layer layer, Vec2i tpos, Entity entity, short meta) { } } diff --git a/src/shootergame/tiles/TileChest.java b/src/shootergame/tiles/TileChest.java index bab0f07..e3faba9 100644 --- a/src/shootergame/tiles/TileChest.java +++ b/src/shootergame/tiles/TileChest.java @@ -1,11 +1,16 @@ package shootergame.tiles; +import java.util.Random; + +import shootergame.Main; import shootergame.entity.Entity; import shootergame.entity.EntityItem; import shootergame.init.Items; import shootergame.init.Textures; +import shootergame.items.Item; import shootergame.items.ItemStack; import shootergame.util.gl.texture.TextureReference; +import shootergame.util.math.random.RandomHelpers; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; import shootergame.world.chunk.Chunk; @@ -13,6 +18,7 @@ import shootergame.world.layer.Layer; public class TileChest extends TileVertical { + public static final short CHEST_CAVES = 0; public TileChest(String id) { super(id, Textures.TILE_CHEST, new Vec2d(1, 1)); @@ -23,11 +29,45 @@ public class TileChest extends TileVertical } + private void spawnItem(Chunk chunk, Vec2i pos, ItemStack stack) { + chunk.spawnEntity(new EntityItem(new Vec2d(pos.x+0.5, pos.y+0.5), stack)); + } + @Override - public void onActivated(Chunk chunk, Layer layer, Vec2i tpos, Entity entity, short meta) { - super.onActivated(chunk, layer, tpos, entity, meta); + public void onActivated(Layer layer, Vec2i tpos, Entity entity, short meta) { + super.onActivated(layer, tpos, entity, meta); + + Chunk chunk = layer.getChunk(tpos); + Random rand = Main.rand; + + if(meta == CHEST_CAVES) + { + // Ammo + spawnItem(chunk, tpos, new ItemStack(Items.AMMO, RandomHelpers.randrange(rand, 100), (short)1)); + + // Tnt + spawnItem(chunk, tpos, new ItemStack(Items.TNT, RandomHelpers.randrange(rand, 2), (short)10)); + + // Health potions + spawnItem(chunk, tpos, new ItemStack(Items.HEALTH_POTION, RandomHelpers.randrange(rand, 10), (short)20)); + + // Gun upgrade + if(RandomHelpers.randrange(rand, 5) == 0) { + spawnItem(chunk, tpos, new ItemStack(Items.GUN_UPGRADE, 1, (short)1)); + } + if(RandomHelpers.randrange(rand, 20) == 0) { + spawnItem(chunk, tpos, new ItemStack(Items.GUN_UPGRADE, 1, (short)2)); + } + + // Defence upgrade + if(RandomHelpers.randrange(rand, 20) == 0) { + spawnItem(chunk, tpos, new ItemStack(Items.DEFENCE_UPGRADE, 1, (short)2)); + } + if(RandomHelpers.randrange(rand, 5) == 0) { + spawnItem(chunk, tpos, new ItemStack(Items.DEFENCE_UPGRADE, 1, (short)1)); + } + } - layer.spawnEntity(new EntityItem(new Vec2d(tpos.x+0.5, tpos.y+0.5), new ItemStack(Items.HEALTH_POTION, 1, (short)20))); layer.breakFrontTile(tpos); } diff --git a/src/shootergame/tiles/TileLadderUp.java b/src/shootergame/tiles/TileLadderUp.java index 94c844b..ab87327 100644 --- a/src/shootergame/tiles/TileLadderUp.java +++ b/src/shootergame/tiles/TileLadderUp.java @@ -23,10 +23,10 @@ public class TileLadderUp extends TileVertical } @Override - public void onActivated(Chunk chunk, Layer layer, Vec2i pos, Entity entity, short meta) + public void onActivated(Layer layer, Vec2i pos, Entity entity, short meta) { // Call super - super.onWalkedOn(chunk, layer, pos, entity, meta); + super.onActivated(layer, pos, entity, meta); // Is the entity the player if(entity == Main.player) diff --git a/src/shootergame/tiles/TilePortalDown.java b/src/shootergame/tiles/TilePortalDown.java index 5592197..1e5119a 100644 --- a/src/shootergame/tiles/TilePortalDown.java +++ b/src/shootergame/tiles/TilePortalDown.java @@ -24,10 +24,10 @@ public class TilePortalDown extends TileFlat } @Override - public void onActivated(Chunk chunk, Layer layer, Vec2i pos, Entity entity, short meta) + public void onActivated(Layer layer, Vec2i pos, Entity entity, short meta) { // Call super - super.onWalkedOn(chunk, layer, pos, entity, meta); + super.onActivated(layer, pos, entity, meta); // Is the entity the player if(entity == Main.player) diff --git a/src/shootergame/util/gl/texture/TextureReferenceRandom.java b/src/shootergame/util/gl/texture/TextureReferenceRandom.java new file mode 100644 index 0000000..6d4dc64 --- /dev/null +++ b/src/shootergame/util/gl/texture/TextureReferenceRandom.java @@ -0,0 +1,21 @@ +package shootergame.util.gl.texture; + +import java.util.ArrayList; +import java.util.Random; + +import shootergame.util.math.random.RandomHelpers; + +public class TextureReferenceRandom +{ + private static final Random rand = new Random(); + + private TextureReference[] textures; + + public TextureReferenceRandom(TextureReference ... textures) { + this.textures = textures; + } + + public TextureReference getTexture() { + return textures[RandomHelpers.randrange(rand, textures.length)]; + } +} diff --git a/src/shootergame/world/layer/layergen/LayerGenEarth.java b/src/shootergame/world/layer/layergen/LayerGenEarth.java index 26accfe..1dc0743 100644 --- a/src/shootergame/world/layer/layergen/LayerGenEarth.java +++ b/src/shootergame/world/layer/layergen/LayerGenEarth.java @@ -46,8 +46,10 @@ public class LayerGenEarth extends LayerGen Vec2i pos = new Vec2i(x, y); // Tree and rock generation - if(rand.nextDouble() > 0.9) chunk.setFrontTile(Tiles.TREE.getDefaultState(), pos); - else if(rand.nextDouble() > 0.99) chunk.setFrontTile(Tiles.ROCK.getDefaultState(), pos); + if(rand.nextDouble() > 0.9) chunk.setFrontTile(new TileState(Tiles.TREE, + (short)RandomHelpers.randrange(rand, Short.MAX_VALUE)), pos); + else if(rand.nextDouble() > 0.99) chunk.setFrontTile(new TileState(Tiles.ROCK, + (short)RandomHelpers.randrange(rand, Short.MAX_VALUE)), pos); else chunk.setFrontTile(Tiles.VOID.getDefaultState(), pos); // Terrain generation @@ -86,4 +88,6 @@ public class LayerGenEarth extends LayerGen public TileState getTileDestroyed() { return Tiles.DIRT.getDefaultState(); } + + }