From d73ae8fd5c329387a96e099235c391ac59499b92 Mon Sep 17 00:00:00 2001 From: piebot <164795032+piebotc@users.noreply.github.com> Date: Thu, 26 Mar 2026 17:57:03 +0300 Subject: [PATCH] Fix Commit "Implement LCERenewed Changes" This fixes commit cf0472117ca8d2a91f4c06a23b5d9303ecbf84a5. --- Minecraft.Client/Chunk.cpp | 38 +++++++---------- Minecraft.Client/GameRenderer.cpp | 25 ++++++----- Minecraft.Client/ItemInHandRenderer.cpp | 3 -- Minecraft.Client/LevelRenderer.cpp | 2 +- Minecraft.Client/TileRenderer.cpp | 40 ------------------ .../SkinPackSimpsons.pck | Bin 68361 -> 0 bytes Minecraft.World/DoublePlantFeature.cpp | 2 +- Minecraft.World/HalfTransparentTile.cpp | 13 ------ Minecraft.World/Level.h | 2 +- Minecraft.World/LiquidTile.cpp | 2 +- Minecraft.World/NoteBlockTile.cpp | 2 +- 11 files changed, 33 insertions(+), 96 deletions(-) delete mode 100644 Minecraft.Client/Windows64Media/DLC/The Simpsons Skin Pack/SkinPackSimpsons.pck diff --git a/Minecraft.Client/Chunk.cpp b/Minecraft.Client/Chunk.cpp index 05fdeeb8..0a63b874 100644 --- a/Minecraft.Client/Chunk.cpp +++ b/Minecraft.Client/Chunk.cpp @@ -214,7 +214,7 @@ void Chunk::rebuild() int r = 1; - int lists = levelRenderer->getGlobalIndexForChunk(this->x,this->y,this->z,level) * 3; + int lists = levelRenderer->getGlobalIndexForChunk(this->x,this->y,this->z,level) * 2; lists += levelRenderer->chunkLists; PIXEndNamedEvent(); @@ -324,7 +324,7 @@ void Chunk::rebuild() if( empty ) { // 4J - added - clear any renderer data associated with this - for (int currentLayer = 0; currentLayer < 3; currentLayer++) + for (int currentLayer = 0; currentLayer < 2; currentLayer++) { levelRenderer->setGlobalChunkFlag(this->x, this->y, this->z, level, LevelRenderer::CHUNK_FLAG_EMPTY0, currentLayer); RenderManager.CBuffClear(lists + currentLayer); @@ -349,7 +349,7 @@ void Chunk::rebuild() bounds.boundingBox[4] = SIZE+g; bounds.boundingBox[5] = XZSIZE+g; } - for (int currentLayer = 0; currentLayer < 3; currentLayer++) + for (int currentLayer = 0; currentLayer < 2; currentLayer++) { bool renderNextLayer = false; bool rendered = false; @@ -466,15 +466,10 @@ void Chunk::rebuild() } if((currentLayer==0)&&(!renderNextLayer)) { - levelRenderer->setGlobalChunkFlag(this->x, this->y, this->z, level, LevelRenderer::CHUNK_FLAG_EMPTY1 | LevelRenderer::CHUNK_FLAG_NOTSKYLIT); - RenderManager.CBuffClear(lists + 2); + levelRenderer->setGlobalChunkFlag(this->x, this->y, this->z, level, LevelRenderer::CHUNK_FLAG_EMPTY1); + RenderManager.CBuffClear(lists + 1); break; } - if ((currentLayer == 2) && (!renderNextLayer)) - { - levelRenderer->setGlobalChunkFlag(this->x, this->y, this->z, level, LevelRenderer::CHUNK_FLAG_NOTSKYLIT); - RenderManager.CBuffClear(lists + 2); - } } // 4J MGH - added this to take the bound from the value calc'd in the tesselator @@ -604,15 +599,14 @@ void Chunk::rebuild() // 4J - These removed items are now also removed from globalRenderableTileEntities - // @Patoke: this is now unused in favour of the new render layer - //if( LevelChunk::touchedSky ) - //{ - // levelRenderer->clearGlobalChunkFlag(x, y, z, level, LevelRenderer::CHUNK_FLAG_NOTSKYLIT); - //} - //else - //{ - // levelRenderer->setGlobalChunkFlag(x, y, z, level, LevelRenderer::CHUNK_FLAG_NOTSKYLIT); - //} + if( LevelChunk::touchedSky ) + { + levelRenderer->clearGlobalChunkFlag(x, y, z, level, LevelRenderer::CHUNK_FLAG_NOTSKYLIT); + } + else + { + levelRenderer->setGlobalChunkFlag(x, y, z, level, LevelRenderer::CHUNK_FLAG_NOTSKYLIT); + } levelRenderer->setGlobalChunkFlag(x, y, z, level, LevelRenderer::CHUNK_FLAG_COMPILED); PIXEndNamedEvent(); return; @@ -967,11 +961,11 @@ void Chunk::reset() // printf("\t\t [dec] refcount %d at %d, %d, %d\n",refCount,x,y,z); if( refCount == 0 ) { - int lists = levelRenderer->getGlobalIndexForChunk(x, y, z, level) * 3; + int lists = levelRenderer->getGlobalIndexForChunk(x, y, z, level) * 2; if(lists >= 0) { lists += levelRenderer->chunkLists; - for (int i = 0; i < 3; i++) + for (int i = 0; i < 2; i++) { // 4J - added - clear any renderer data associated with this unused list RenderManager.CBuffClear(lists + i); @@ -995,7 +989,7 @@ int Chunk::getList(int layer) { if (!clipChunk->visible) return -1; - int lists = levelRenderer->getGlobalIndexForChunk(x, y, z, level) * 3; + int lists = levelRenderer->getGlobalIndexForChunk(x, y, z,level) * 2; lists += levelRenderer->chunkLists; bool empty = levelRenderer->getGlobalChunkFlag(x, y, z, level, LevelRenderer::CHUNK_FLAG_EMPTY0, layer); diff --git a/Minecraft.Client/GameRenderer.cpp b/Minecraft.Client/GameRenderer.cpp index 5ee51d15..0b99a231 100644 --- a/Minecraft.Client/GameRenderer.cpp +++ b/Minecraft.Client/GameRenderer.cpp @@ -1538,21 +1538,22 @@ void GameRenderer::renderLevel(float a, int64_t until) glBlendFunc(GL_ZERO, GL_ONE); PIXBeginNamedEvent(0,"Fancy second pass - writing z"); - glBlendFunc(GL_ZERO, GL_ONE); - glEnable(GL_CULL_FACE); - - levelRenderer->render(cameraEntity, 2, a, updateChunks); + int visibleWaterChunks = levelRenderer->render(cameraEntity, 1, a, updateChunks); PIXEndNamedEvent(); - - PIXBeginNamedEvent(0, "Fancy second pass - actual render"); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - levelRenderer->render(cameraEntity, 2, a, updateChunks); // 4J - chanaged, used to be renderSameAsLast but we don't support that anymore - PIXEndNamedEvent(); - // @Patoke todo: implement, this is really important for rendering of order independent alpha objects - // RenderManager.BeginOrderIndependentAlpha(); + if (visibleWaterChunks > 0) + { + PIXBeginNamedEvent(0,"Fancy second pass - actual rendering"); + levelRenderer->render(cameraEntity, 1, a, updateChunks); // 4J - chanaged, used to be renderSameAsLast but we don't support that anymore + PIXEndNamedEvent(); + } - PIXBeginNamedEvent(0, "Fancy second pass - actual rendering"); + GL11::glShadeModel(GL11::GL_FLAT); + } + else + { + PIXBeginNamedEvent(0,"Second pass level render"); levelRenderer->render(cameraEntity, 1, a, updateChunks); PIXEndNamedEvent(); } @@ -1567,8 +1568,6 @@ void GameRenderer::renderLevel(float a, int64_t until) particleEngine->render(cameraEntity, a, ParticleEngine::TRANSLUCENT_LIST); PIXEndNamedEvent(); turnOffLightLayer(a); // 4J - brought forward from 1.8.2 - // @Patoke todo: implement - // RenderManager.EndOrderIndependentAlpha(); ////////////////////////// End of 4J added section glDepthMask(true); diff --git a/Minecraft.Client/ItemInHandRenderer.cpp b/Minecraft.Client/ItemInHandRenderer.cpp index 17f3ee74..13d4fc20 100644 --- a/Minecraft.Client/ItemInHandRenderer.cpp +++ b/Minecraft.Client/ItemInHandRenderer.cpp @@ -243,10 +243,7 @@ void ItemInHandRenderer::renderItem(shared_ptr mob, shared_ptrtextures->bindTexture(minecraft->textures->getTextureLocation(Icon::TYPE_TERRAIN)); MemSect(0); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); tileRenderer->renderTile(Tile::tiles[item->id], item->getAuxValue(), SharedConstants::TEXTURE_LIGHTING ? 1.0f : mob->getBrightness(1)); // 4J - change brought forward from 1.8.2 - glDisable(GL_BLEND); } else { diff --git a/Minecraft.Client/LevelRenderer.cpp b/Minecraft.Client/LevelRenderer.cpp index 6b3269d1..cf2937f4 100644 --- a/Minecraft.Client/LevelRenderer.cpp +++ b/Minecraft.Client/LevelRenderer.cpp @@ -828,7 +828,7 @@ int LevelRenderer::renderChunks(int from, int to, int layer, double alpha) if( ( globalChunkFlags[pClipChunk->globalIdx] & emptyFlag ) == emptyFlag ) continue; // Check that this particular layer isn't empty // List can be calculated directly from the chunk's global idex - int list = pClipChunk->globalIdx * 3 + layer; + int list = pClipChunk->globalIdx * 2 + layer; list += chunkLists; if(RenderManager.CBuffCall(list, first)) diff --git a/Minecraft.Client/TileRenderer.cpp b/Minecraft.Client/TileRenderer.cpp index a945dd0b..927836b1 100644 --- a/Minecraft.Client/TileRenderer.cpp +++ b/Minecraft.Client/TileRenderer.cpp @@ -8505,44 +8505,6 @@ void TileRenderer::renderTile( Tile* tile, int data, float brightness, float fAl tesselateHopperInWorld(tile, 0, 0, 0, 0, true); glTranslatef(0.5f, 0.5f, 0.5f); } - else if (shape == Tile::SHAPE_THIN_PANE) - { - setShape(7.0f / 16.0f, 0, 0, 9.0f / 16.0f, 1.0f, 1.0f); - - glTranslatef(-0.5f, -0.5f, -0.5f); - t->begin(); - t->normal(0, -1, 0); - renderFaceDown(tile, 0, 0, 0, getTexture(tile, 0, data)); - t->end(); - - t->begin(); - t->normal(0, 1, 0); - renderFaceUp(tile, 0, 0, 0, getTexture(tile, 1, data)); - t->end(); - - t->begin(); - t->normal(0, 0, -1); - renderNorth(tile, 0, 0, 0, getTexture(tile, 2, data)); - t->end(); - - t->begin(); - t->normal(0, 0, 1); - renderSouth(tile, 0, 0, 0, getTexture(tile, 3, data)); - t->end(); - - t->begin(); - t->normal(-1, 0, 0); - renderWest(tile, 0, 0, 0, getTexture(tile, 4, data)); - t->end(); - - t->begin(); - t->normal(1, 0, 0); - renderEast(tile, 0, 0, 0, getTexture(tile, 5, data)); - t->end(); - - glTranslatef(0.5f, 0.5f, 0.5f); - setShape(0, 0, 0, 1, 1, 1); - } t->setMipmapEnable( true ); // 4J added } @@ -8563,8 +8525,6 @@ bool TileRenderer::canRender( int renderShape ) if ( renderShape == Tile::SHAPE_WALL) return true; if ( renderShape == Tile::SHAPE_BEACON) return true; if ( renderShape == Tile::SHAPE_ANVIL) return true; - if (renderShape == Tile::SHAPE_THIN_PANE) return true; - if (renderShape == Tile::SHAPE_WATER) return true; return false; } diff --git a/Minecraft.Client/Windows64Media/DLC/The Simpsons Skin Pack/SkinPackSimpsons.pck b/Minecraft.Client/Windows64Media/DLC/The Simpsons Skin Pack/SkinPackSimpsons.pck deleted file mode 100644 index 9f2c7f74359c2b9f2bc79d2592f62699339f57fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68361 zcmeFa2|QKZ_dkA27e(eFWN6Z)%u$rN$y8JlnUXQHlJO!TiAGbQNy-pORK`RTAwoSu z8A}_ASRPnn7&_CM`^A@X@dtF-Yz!Ct@kU#96FnZ5k406GVes@M(5gWt`Jvtzs=+O&3x*{&f z((iZBM-Y8fMLkomPNFU zSyMz2ZDYX{QAFE#H$@cDHm1rU(Kbj^Dod8iHg-)BMYIixDWZtBAvQ%6(Kev3nfxRn zOtvmk+WH8>G#6oVw31qH2){bHN^RH#zxvusX@Uo=5oYx3T6KLiZZOTqPS7xgo=iG( zj1(e-aIVubvd~&*WT>mY%|c&YPaEMkwzm~Ga@g(W>FVMsZsg?PB5r79~Tz$lK9GrKHYr1;4xq4W6Ik>tk6<2q57T@GxXYb`HzRA|p)?<(D z&ZUSLtunuJJIO5jTG!pS9vHi{o|nO-gU{<(dD#6&JX+7o5}s$%u=4Qw6?r-0 zR=;{&p78h#Ju5pqhhMUzKmg1%^l)&oad5M87B{lpx7*bl6&$*C@UXJBa&xnFriEHgK=H2eaP@ZC>FH!^>xL?NtAn$%gDowX5&_0);N|5i zu4m=qLhD&&!m~Vj4$k(j-k!GNTdZ8f*SdOp+0sJENE1+O`nJxfg^KHWyLkE1C`5)> z@zd8k?6!6lU+?N->q+Zrs%qb4!%s3Y8&ND2tYr7h3zCG}$CpB2&dFFPfGm zL##ly^;W1b;)bq!X>%Y;tT_=QZ`70=T+nLXiMj;wHCCuo(6qO5Mq4tix{)Q;B!`~I zQgJQYy=aNLXk&Jzp&VIaZIX=aZ9P03Xgx@*M<(OR=b(@L?qmNkAG!5MAGttt;lEDu zM;A|QEdM%55S9ORk`#%D%>PDCl5z9@!#?tR^7*fiq>-o+W6-~ewQ1tj#k zyKWxpjt=fBJlT8ma&KBpcUV-<$t%6b^Sg_4yTdZOV+wmCBYIAU_C%6YhuCPix(bW?4j=vvhL}`x zy}Fs!8+-XT7-E_s(35)R)rr!+3#ENW6K)rv3VjuRr1xeXElm)6XX4!{q1`0~-RY-p z7l5jWibTciD!$a6bG-X}M%T@ov`7%UZEW4?!QBy;P!@W#&(M0D*maxUec?h+WIW1c zQW34Ei5)nB-rPKtm%iM~s8Fa*4u!rt72OwBLIX+F3+F=RN0G0{2T|C;qkV_cX<>+V zF{3->W>4PP+XcO`MQC}n07RqU1qz!~6^glatvlv?_r(LWU{rR28f;f#FscKzc_qjF zq$r|Yu=ZX&0*cC^r8TOwlePPNB4mpeFGLGq?J2wjEFkANt!If<&DwJ!rzbkQ`{prP z&l2mI)OF(!+FocqNUUP6-k9j_wCvjjudYS|Q=-WTRYzT*H|b>Wkz`bXDHr+ZmvIzpo~sy;ez&*@WWDJT-Hxnmc)!y2lxUNLmjPtCrN0mxH!? zIGTwMcGC2*e`h@N-@dx~w#o5QwtojSp(6er(A1(F`u{(3K=c3QJoLMl1dA2^sacm~p7lGyApRWkX1z^o4vX{f)3eVPzhgvGvYtrj}1j;Nu#I15;|b@p`N ze)Pa-r>>`tAh|KqC#=8%D2_XY#yE<2Jl?yP?9o-bv{)izsPZ>OHZAdB#r9)pwB6A|J@g>KUIr^3EjLo0Pj? zaWg~R-ESc#$4^{s9Z>4nZoP3!HggVhUma(yWCD7%f}w70%9-)xR~NaWuFCq813zyR z4H7Vz!*6T5`CH#%v92}64ddSq)Q*dsu-$n~Os&Gy`N_6NIc$?>oXj(&t}kl)QppfM z!D4W$Ez(2hR@K!*BJx67D;{pzrei2?e}3c12eKh)-1dutfAcXTzX&0{DSWamg*671 z9a*QXua&J~83MlltI>Z_qYHsb(G9EuT#K&M+l{Wm^FYMW^??rPcQkco6#MvkOXCcwTy=7(Ez1ngqCiM zo{J;%(fty-gH<*%h{ELcy(oV!ldB4C(NBByn&$T_-YDPu&~qJ>W1q>R1G=_w_v90< z=sh>|x(8uJqByz|(i!~|N7r3CpsNh+QHq|EXSV1O=wT1~xf5M81~#w?QV89rDnG5& zoB$72g{q_45l5uZ6r_$vyuWtch#zrs(Y{8^|Jl=TSKg8};nwgC8+LS-E7PJB2YPgrkI6LQ}z0kZS;V2$7$@DXGHykq(T$K~h_+W^rE@Dotbi%bP4 zNCOAt1=dF`EvP9<&qK@BWWLwzk7&6`dbp+pXp{`-gVKRcfbCOSi5&Vov=UlKz$=D? zH4D(-Dy4l;BLM=G1IqoiWzs?d>KGEY2{^Od(DL{FMQvHqs_&o{m-GD)7KCG>RtC~=w;^mg|SFg6)n$O7r{{XNVRq$aHm|_?{l$CBYCkqJ??tLwPjQojmoK~3D9$X%Iq`W?Jx*)nDu z@18Hvem~3iL&uKr6$c8oa_kilthrKnO5@@V6_-PYW9nD(<)<3Sbc`oCCG@Ze7HhbU z4nN6zG*`+#o6d*#lp9$FJRPDSP9_B|nQ6cISx06`$u$%qzDKPu;X&Wv+wf(p_tv>f z+2=j&YMQl2=K9=w_xpU>Uia?hX32Y98zf4{$D8gp@1>VIXPAhoisi6NG-ta_HPW%4 z;cz`uOij>k@<9$I((GlA2EVp_j<)YfSx&CynwRVlX7lneM}nIJ61DM^Pnk@1-#jas zgVQ*abeI;$k(7cx-L#jn!dr_>p87G12=Sj&8YbHq=WJ5-{j9`(W_2jTVR!J1mAKcJ z&zHmW49g$f7edCeNYO1nLsRA0QK!!O)^XnK4jv0-guaG+q<&v<+PMJ{y zPQWhrJ-@`cpw1~Vs{pM8;|bFRxCbfVEuH9X@yrjlGMLW-9H2q$>;F2dBxZD0lUnNHA`Xk`Gzv%%sjKamV;< z*xcyzIowsMovkmbpXLS4x8UYv4tz84=EmNE8*=S&%eKpGT7NR5wk=Kh@x{fjy1MR! z?41`d%Y{9>=ktxddFrFv4L)+Gdsq6;G?QD<(8(1XOj;zp@BJ60=WWGL$T#$a$R@ik z(WTpdtQ!}>Y-0~sM53x*DvHU^3bmOd z+52dIjemfcPPwgoS-0iEE2E*hm64B+b?Xb=t68^(qhH|gc!+y2TatHSyl5f+n)rt2 zH9f6|H&p1fUq5jbVP5IHkP#jDoiAx5q4e;?&4fWe$rxjU|zO}w+rB7R|wzr`S zR~fs>^t*14<|*!0bKe-=pmfk*(D)EfGSj0Q`=i?T$5>cg2z4E2cgZfaXwMB|5^)#Y z)oPZzT6B?$zyC!mrNcKIl-?C?O|3s0(jdu^*viwWS1$DFoVFO(qu#W1oMeu1{c1#B8EwtyCVq_=R=Z|y@wdKF>{5tmf+Iqo@BzfMXPBDL(N4Mw}%&va@ zgilar#>LGitq;~rxXLX*qni@MK<4LDdYiT+tNhkLVJyjv-*J_tp3U`%F~{WPyVYEa zUXKbS-rmJ)Cz><=&`Tk)(4KA6J+y1>) z+t?1(q>ZQcl?mA;KlNbs?New3&t@>^R3-KtE3>Yg$DH{Jz1Ex0yH(hdy}GG$NA~cn z*!I&iR&P4aQWYb>?BvHj`uZu`NPo?q&+pzH=pGy0^CZ`b)Fb06%&9a&RwzE;JL+ue zev8B8Tv{jZL_phyAmm+o!1$dT+ZKUFk7c9clO6y;*wCZKWH#!BdX)cJE-L%mT$I|o z0WSu0vqI{c!cb7t z7#2Ii_JN~`a${NK)UdSjQCQcQ$ECEBA2Uj@paG5og15GS`9B-<6Zgr)+QhsB@Z#`0 z_=fGETpS5>LOrj8aRxCk$A|nuzmDq!$VE9q3Ur6{J%CNYIt5q3H+i&N&>CprF$??^ z9vc;bcw#R7508#s{XRMxZ{TRG&RHc^XtYypuS=^B!`_$ArlUEL=pDbE-CSnA!Aq{L zQ*+}MxV?n=Kx`N%%e5;j%-=STmc0JxyQ?ien0Mly?q=`NtqOy#EAlxtdOl3llnx3Q z+!pK~O+0FSP~jC#3`Wu1TYL$UUXhg+9TyCa#~?^+vG zn(1y^ZP@;<)9D$n>^w=u><*F?LtiBaNxX!2apE;6sY}h5YnGEU3?%47EoV#R&*>=V zNVVVdkgl<;=bX>c&^zZ@ub0x96=!H_T~Ce9$Q7A;A^KT8o8{I`r6V(UFf6gwZIpO6O?3b7kH^Ir7&vi*on_7M<6AFZj&{F|zE}F$iWb zZ1o+Usm0XauIy9C5W!hLu0`SukDc*X_R3FuvE3fqI7b>*hGy1#PxEWlat;VtiDWhm zp7DN=7H1f(x2imZ3~dbnx1Y0>uM`v;aiKY!^-Y>LJn zv`PLazmxzc=mzpjU3Aq2ct_O#G{2PlZGK5BLxk-c^SG4xA)M)zqwq;YPmA~1r6zqC zpagsw=BEKId^U>O$7AD*5DWYdz=07*K!-XSQ=?&g0&lnh2!IBqVI@ucs>6r;sH4^3juXSL{du(^$eZ^u@aVz)iAgRq`=FiMq>y(55n{ek3a%E z+WxGjAP?XZ>{#hUEK%YgEfYh7BeXWq^1+zgk30ieDXp3kOKsHvO_?D8?x41452Ds%%cS>#{bs`4fsc|^3P)DGgpGgVs;dKLA2`mvu(w0(wQa_;Y0X8DHkSAD! z(6@jq*bceH*MZz5$eFjop2QTp;BKD0nDAB-tLfVIc<#ve_5t%Que-+YGRrl&xHkAqo3l&Y zc{Y;o!|6lur_y#?jB4*IyS=PQA*%%Ws!}rk;S~}jIwx)PMEd;U*=p~%GTiL7 zN7a=!%4ad%kgTE3tI%7k^w}<*|9oA<0+N^ubIR8d<1AhKp4#*hME((@)GWst%Z~1p z3DQ?D`b>XaO*>>sPwm2pn6Fg}rWwo~dbN7|)MKWTJ>ySVdWR>UQu!jua7}Pn`9jG0 zk$`2g3PwFKY7;he8_D)EFFn^Yo#+|gvC}cFS}b@hr~r8%H1TO4WAB5BY5o4KeSI&;&(OfB^LV*&=_WL^O#J~;LiM#kmc}|?#X=Sz70)bli>~< zqXhFpV4H#NV8+}I{d4#S=FH`Pn@0jaKpA;}=YivtSdIfCJGKMgf_qBp9yh>Z>t=y3 z0Vp_T0q;=92jIP^%LeN)p}z%a@Eu^O<0bGUlt|z^z=|{K+!1<1oMY-Zi^&LM5#$(@ z3H=lNhWjsSU151IKm*Ny=dr9;VN!bB-%@i7FyMKB1A4(qg>-NnQAb$5JCzcNNG#h0 zbqmS>5`ypG2}i0&a#dKbIFedJSmyS3uvnf;i(@DOUM{tEDYXfC zgpxws&$J7(A)s5BZD1A%sKN0f<^SjiNJ<^Cfo32QAh246^U#zl3xIy{*o*N>3kj_O zw_oZO2j;DzZeiKrJ7!tn3XG*c$HTHgDR3Pnzyp0@I)l99EdY!UQnx$U!a;8Y@&agL zGAVqwHJk#qg#a$0#xcGzEG%1wVs$b#7DK@74&cBQNb%Rc20R0v{}Czwop;3s7^gY|t|R*%KVo+=c$?0~^gG z=2X_`GymY4$1PY+rI+2H#<|~TpoM+qQm#wm|XDIlw{d0t0q3bo1ayFec`)R3PnNeZ-&1- z|EtSCz{mU^d&s8sdIw)3TS{&qmhz;syG?27yKee#(UgAB$nCM5d+=?VaaNTsl5t*F z3dLLJO|wnR-JN}h4%vUZ<*M>Rqw0c~Wr+)pZRZ|D_z>xp4=?D-J&-?lpp85J)+@w^ zBYXF}cwu&OFKJ(B@=I+l#fyp{H6Zt>pQ-`TEuIACoyL!%Bo zQg5GeIKf(#z1=;lJ;drmRF=1*Tl@c(p#?Qvc=ujp7F1| z%Sy3%^2o)_QQoWUI@j(NQWHsKqBk7nZ%TV#Zr)QXyk*e8(Sp^I4O%?5qUXo46X*e<*T<-cqF?aY zOdLx|2V3ET`+49G!P&3YD*cQb%Pr%KN%QCn`rX|i91QM@bm zc-i4t&S0jQ?|9U#BN?@{I_|ufcV6q^d$Tz6hV62<{CXP_kFI+AR#&gqxV_Dw`CCzQ zsD59=_}+l&+Y6pL&s`Pg)bZMO`mj)0FMZEjzinq1Zl2CIKcFUGDf4!dnR(#b=6>(s z=%;4WZ0O`-vnoz}Oy0lTGT)T1ajp~R^OR*A;}KVCUgk_&Y&~e=jI>p@kPE+dy?q$s zJnd>-wVAu+e7ns&2d)&4N{VNvJSGR+N#J$KSS+e^_Mq&B<>WBcFMATla;EVm-k8oF z;YXk1vO#L6vAs^##ydL5>Z+`1exG-5_g@<}t>%uTrS4@?pZ>C{gvETXV_R-LXx^W) zb1|RDy|N=WZkG$@f8sUHVjWv|eZ9f@uY8}rz7MS0@mKtlxZpW+geJ}(WU%FYpvash zv)N{L;I*vGp3_c<*jdFiM_syp*Xgy&=402jgMC~j)SWW7tO?uoXtf2q8hfgWf=ZKD zW$5A|fg5|Ss6Ch2#4|B>IxF)=i4Vb=*G-D(UJr$flfI32y7w%VPfcC9sz2e}xn8Dv z*YkrRNvl`BPD)@MWj?iI?Ea!@qmRGN^k2f`a%#a0>pKkjLY7HSz3-F6eO53Fy{Izh zo53sGk*%>oksQLXT;F*3V#nB3yZU^zKA$|z)#vm1oK$gsW}9UB!$Th!MKb9wCzmJBovz~lUP5t=vAa!mr>A`x z@1TCVFKOSHd9$AQ2(r1=exLNoY;6Xg!@0TUk@?6z{@rC|;fr|!JR{JPlMZD|J8yA1 z1wZapcUn|4?{Z=NyF1DycTH+m$C*q&zKX-t$YJTm%IK4lkA_vN9KYVUW19MYU){kS z#eogY5kaAJeu+t)$#7J1KP8lcDo`?(q@RTyrkYT+8JAiAiLI zwL0IMbqXq%HZ^}?V7HNfk-f&V6EssSJoADRbmKvHJv88YqV7f<9g^LNhG{TGwgJ6n zg;=Az8~SI9hHS9?Nk~@wk~73Upt zjCDSKjigRxu+9n=vS?F*+QWk$2o!kvnD*gf3BW1FJCNqrSS*#ow2xyU4R9SVms;yk za#$`5{or{(6WoDAR!S(ZFpZ1Aa{#3W zwM|TSz;&==6mYu(6o{z;#yQ|0+7YlAi~?r&xDJ0s0h5T50yc$%>k-rfB@eI`fYeZj z(AF`_h1!4;{7Ir<1*+{I`^g^z2__2NajGCu2$Lk8IUznL>=^mlR*CuZBqVaX_VaMY zDof-jk!`lG)sJ4gcDec^5rvV&%k@c#&8nq~v$WTx?74XB>khramIjs95`DeOKr{cf z3IkUxE>ye_FK_#3;5uAPXY?+A=jwvvpWm{6JG8rYIa{hCT|>pPLBm#i0&T0Z!1_oEm0c*qlbdQqA+dAF?1NiB};{Oc#dV zY@@%jlJD3``MHY~4wZcv+{=H^z#y&3+JD`(E8~*BLn233$JNfwkLQj!QdOhGGGq|p zrLxVeQ_zr`!#HbRs^ZrdH=nM)-?8$epv(=;sOU?UDgLh#Uzi=b5~8%&9Z=Y_pYD)l!nNEh zE9i!X^SPBb-j5xVVHZy(UoyFwrp`@@^kZOgV`yXS)acxB;1`f#55+%kU=_T5HLB8^P6)AGwhhklHXn7`qKNj zNBRPjjSSa3(VUnC3o04r-3wc4yToGn!rkafrM4WD$X122voqf;{3c`;r7pJDB4vHy z-Fmuoot1Y6l{8na=Ny!4G5V@t;plwm-10XM0gT{W) zEq6h)0r2n3Y|%fE19+gVdn?+72QM)J6ChywlZ;^be?220`erO9LEl6xBY?gY9}cAM z$PuFh=&oZvb*lay^QJ#`h^I;cL}lPrVSK`*0BC9oc!Z!O2aGVltK*$o5a}^W;HTe| zonqop1vZ$Ckt5Cvc!>{Xo&aXd#i703|*XRw$xF7Mjom0nuXcfQ`@C*Vg8y=yp;S`7*5Tifj|JV3G8D^lIVEmKp;U6Am2!q+f z^8}eFkUcEl(p4wNUCk?ZBgJxOSFQB>)nm-M%LLfi_3jvI^Y9pHs&hUnYqWpU-00L^ zbg3=j`BT-(kU`(H@y&aSpC#D7Q1l$`A31GxI4UaYxXE9!7seM3UP)oUx3YAv>D>)6 znG1Tyn`0_oWeLxb4$seLC%c#Fn5{ovu_z*Q!NvF_dBihU(Gkf{5#4bqU6DcA8A zsoTf-xyR~?rN@@zc@KGV3>Y}y&24-pYnHcQqU>nPjLP{XCH!wvjyT92+_Te{)!t2K zoA6E2Ic8?pGSk*p`e%D1c6eseOBOZXJJ=HT_*MPloDIiKXH?#q^J=LM`!`L7>#OOu z)yJ*#nZ*>f*?M90)sp2=!iIO|$kwddAHK0qQpfs|u(q7y$!gn<+Air3`k<1VO_uem z;<}e!*z$}uGjHZR#ZJNKTZ-u#=&MrgE1Tqw34VE~-+bJe zBSb;r&G}vf&u0RvNqmpytk*c0_=x5CdGgf*^#=vBlw0nOw*J-2*B+j(vzl>UYaGj* zg^ng%(PH}1{B%l#zL`&ou5N9pDk&N~Grr*R{pwIR3yo^sh_jLrRUEGS&ekh8=NUG8 zwvGDL?Fe>rwqlMkY&d8?QKoAYxv$x-hcziD+IhA1>d_+B`{nG3?pmEpI}_Je8@$h! zYmMz3|Ma=DaLq{5yt%w16zZJ?E8*Puw|#uUwkun zL&b{pnM^vRMTLoH^;nX=7|QAI5=HNPj!k!1v)Wr*!77g@sm4`ZM<9P(Zb2660soV{ zfKUZC@Xj;?^sQ=MX!;^PxmLpkO=7_ICuxe(e?3hh1|iyM%CFrgG0}mJo0#VO8c)pu zcp9Vy;1iqMhb|u`2(*7;Oc~ZGdB7-uumUK9d(=Y!)PoRM2*K9XO3 zYXJvhK=MEg%TS*{uYe-X1F=@IL_lhCMabWwfLSKw1FKamu>f3P0|R)C5Yt8|2bS*P zNhH96)Ck-G+EAF}5&R!!u>CmSh9_!ZMFW;V{zwJzMoDGr+yEH?N3d>SJ>v=6&ua(R zEjEt_=ZwG=SVQ0wPd!1(L)l_L-GLG@G)O@~xj0t&Kic@Qd|(rlvxbP25O_D@&+*X5U^JlCFgjSPz^xe!m(eO8*fNF! zNBA9n!%HWkv2N&8%Kl%NF7Nri)+C|SkxyN)a#_nlZhv|{i}JQd4>XQjIt>c9q~+!f zv2v@kwp?nC)J>(u6OM5}vM( ztG2H09ic1TvD;fA@Qt~?v$HdsrJqQQ^QyMDj$IzRp5L8*`nLNz{iH9-pPw$wwa^z1 zpI@kP+CD7onqV2ZjQOt=QlTQBn<*Pxok=*|_~0t9m47XJTq1|uFwLC9ZhyObMU!J$ zd(GlmO0W20H;6L2Ffh1O#IYiDoIDq=Eg-+ZszU=8p7@fFweuj;nvNvEcKvbjw1 z5AeOn+FWp=f4S>6ItBh$#}qiMEs=vu>m}vsc+9@>o7F#jdFX!P!(jb+;@K9-ulPcw znC>c~0F$BF$3Hub*FWkX`1rN=DwnD5e(Ok~)ZN*xizoUn9ob;MNL+M&SA}~{Y@cW) zeM!`YyK3VerCyoi#gXU4WXCM)cQ5t66mLeiBqD6lqMQT$88#dAl7KVh!d|1)l(P4>ri1Qa9<8CK&V#00Y z4|JG`tUmg1eKX7X<|hA-dKZU^T2C&FxtV6tg6xRB(|yy0p?YLN_YKz>sV~bH$nf*B zcO24G(lgqkP&R6Gmd^Pi7bl;Bw!Gb3ar9Q*Q&R3XbmG$_Acd=*{CJwZ?OY{~!GU9R z!xJx>9@24MlGAJv9obwhs~a7sm8j;oLV)SW0+riECJ5PNZ|kO^v*`8F!`6?%8@p=U znJhQdFG}v^y}s;WqYr1)m38K*-NdushNbr# zV(=JY`SNb!=)8E#uwy4&=>p~`DUICeZtRO%ayBn}zsfR|O6Lz80-hgS19W94^NOG4MZkZ;j06t)V38Ax0N_Zy-iA86gQa5` z5gek!av5-s8c&;hnAySd{+xRZP0UWG!aaBf&-0=Fu==2dC+3wPX2Hw>VDS0_XBZXg z0jnSLm*3M+oXlVFC`jajn1fK}=zs@c4Uh-QUt9m23s7g6T(JINeLxyhd0*|v=Nvi0bRm21+rB54O$jB2j3_MnTacA z|KUNu?^A|v<5dsypo4x=yGa`SvF=RVvk$99D6ugI%f-5CXiZx?cf(a~R#Vn%mv~&H z8=Xd-iZ5LncqQt*Byjy_6*=?O=2ui~p0?>V3-Bn5%vf0))tqvXUwPU2EqTlt(QVvH z%mpbW23>dm@?(9ID;MR+d8g4tDL^)?N$t_wn(&W1QWEilzQ5+KlrOw3BH5>gehMY2|kKX8y3pI>6O!$6DK(8dQ5 z8(f{hB9Kzzznt!rlP4GF(-4Jq#tbS!-X{)o7wki%pBpLo9&HFYp2tRB+iHzCX_8m> zFB{(%@bz;SLxhJ;M_zWVKl@nT*GlBWc)*I!{cgzm#^c-yXUBYtP2S$gMPuLSkqZhXBl|;~&YyQSy`poIA-2V+ zNT6xc8HKw2wUUd>?ti{nJ^jO}0Ay7`T;s&SeYsp2r6=|E&=M?;EwG#3J+m_;=)kg% zF?RMITJQNb509#5+VrwM+_-+0u*TS0`(;`-s`pt1Gi%6M43_4%y)D`+R_rNRfgH^j zXb6;FYR#2eLzZI5vH85tfAoz$eXmJqZS%*R!>3(uGFWnd+sc+2vBj~JbA;_Pb86C> zF*=`8#g|Eug3(ttW*iw6h|*dd)P?x7XC3qYm?WT8`L4Uw_>d$whx{(%I(wC{g*#MImpxq6Gx8=P|MoY!bU}l; zqW0D4sr5ec1H&)#a*9>k35?#YCD_u&Yg6|SXLnck_2=Ezpd9tJ&`jySqT1n0~mP&lZRf2@8tcd z=MkVk`>X%t@Z$syHbMbC1{TSoFNPlc$2as5V>$G?e}V_SG0J{C!~(AbC+V1u3D9Z;K5Qx8kBDfCyKK@Ho+7S@z55hQ(;Qk%%0RQ;d$&cfcSnh=Vf*s0%X&&kT zQpCsQsBH)18q)zK_mo=1`S>{nXhASSW33LeUdrEA{hR{e9kyjqHnwBg*Hn0b6e#uh zr&3_O0lfWDQouDyT_3n6F$%DLC^d>nqKsMsY)Qmi6mP?Sp9VITgpK!Nd|}$8lm^!* zkq^+ez;k%d3d-_p8b52F#9GDlf$0L*D6w@xPl{>e_f|!e09X;$KK?!ptS)Qt6o7Alb%D|PJrC5n07%$Z!+iyyLfKBR`k-x@loo-}qC^7@F$&PC{;T=; zqVJ=MaWY^DpEmQ6;LPF^uE9$51syZg*0QlKRMya7+!-q_AtA9lq_C_o(DmDg!Nk`C zPoL+8NyWWyaUUH_{u~r;?w44qn#^8wplDy9%tz^(qV_?}chBT6Dx{oo5|L)g0cG9?8Kzw+B{pN8Tr-tu zKOW|<|5Pwx)dBSJN@P(`@@A5E=m%rZMPsv&mVIHKQFeU^$(!m84@L^uxA(_XGUsRy zXDWCxNUMJ;r62NajQWt>-6Dy^sN{aRk>qb|mubsIR)|_y^vvy*-*aZNXp`~7ew!gW zt;+oUjAbd?PPojgL0EK;?uZ#1(P^1EkDR`!g8j`Yrz|-oYr(Qy^kP}jGFLaLB}q04 zn~|m#Mpe)K9AzIYk~}K*xJ%fFeb!|y3vA(4c&f>e6Chz)?;EvoUbL{i@B6RgnYve2 z`{f)FJNP8pvg%t%C+nk(v5y1YjBXrl%sH+dH#uLKJlcLwLw*{0`P@%CF4#BryDUPo zjZ*HK*ow~0-M!=x{aWD_OvgUVJ%8o?vN!|oi3espNc6QKx|~{ZX@-Fd9R{8O3IW60 z4@Mi&=crHXC8gRaq|*->sO^lmUmdebip_6=9QdU-!;Vjy)vZP%z{09DEHQeh_mj6z zrszjA|BAr?iog&7GRqdZv zuw_4WeYHJ(W{l8Q<73h9JYNnlS!yc2U`~~M98&awlN=Jnukn&&{$+=mpJV73w9^-U zXdOr13yV*CA%V=88C*WcxIy;(3bVZS#|7j_{v-Q3yrN2{*Uj1cL6cJ_s3<__tc1_V z+;66CEQsdig)_3#M(v)YiB{iROuBgT_zuksziSuMR6l1g*59i7uFJ5&i;1Ik*XRMx z#yrrjv78;e!vJj4(S1ES61W>(;t%G^*H32d;Qx?;?N2iH-@o~v=okN2WbDNFgpC|Q z--<;^N}mS(8J_i0O8_Dn?$==kMa08chetSS4uB7qLOnA!5(&;R?+%VId&W5+Mo3JD z7#xv?%~>1HHqD z1aUBLBgP`oXZict_kT5#>3xr6@wwn_zt#Nj}eXndq>r%#XS~OY8>QZrvKGNJ;OyeRtx~sRY&Dfq|4e1HDO6 z0pDJktvP)7uuh9elbwwDw=ey->RDc!D)%-$=`Fs!PkQTkuh>V#Z^C5t*6wR>KJV-j zNQhj@pDV<0H94ftFK*8o%Nb58;Rhmj%vtoPUvxLw&}-wqMh{01h#N+SJkD_@512nCH;&{)FwEw;DWky=RhK7!=m2`}Xlg~@f)&R< zMY04Oi$s_&v6c=*YAp6WN!n<9E;T)6X4DMZ!1>N*@>b#d%h&OmZp?F9mEyxNyFv2) zLGt!lwL+W;4|3KxKCx-Po#$u%t*=U7Nyvw3+OF$mL5rV$Rp_*4cw_!%@0HdibA(ep z>y!C=*n~9iWzzZ7=6!Lh+RQHg4B>w3VD%_9*JQgZqG_k)XBsbOf8MrP^xlUnGruK} zTJkqtMV~ZsB^T?=QYVCPODI6m{>jSFn>|#4Eg0{7KR@~ss(%Z1y;E?7WvE= zZkFLVR;JZk&zMusBh9S))Fe(o4n}oIUL99^F{gruz>Gm1rw zb%?$`$>w7^x?#!bUST!IiBFQ^(`FbSo0;>`o3U5!%lxst2uH{2BKbp-(>RQI%teCV zPPb>Ntv%wPAY8s?kI@?!gOZ8krC(X4k1gD2+2Lj7b~T@bh>2Fenp3@VJ+G*ex!@`1 zd^)ZyU%3SCFlK!LlB6Abopka76+=Cz)Gfscx{K_&ZV%d4NeI zrpc-BK(tdVh5w&W0PXwF^gxsWrk}7LF+MOm2U^6e0@vg3@v!CNT>(G?$5ZP7vp-x4 ztld(!cuESOrQuT-ptTeE$N0vMp!}b8LViSJ64OQ#rT-EA<3K*K^xxyLayJ1Lyv>|T7afpzy~nUia{x`WN;3?{rH-991Wg^lKu>hP1?Y+|Epb) zjj#*yBu)lQZfmcZZKF*u?9S?1%Gil%^Z{Noi=OLj_h{}ovaN#6JH0< z8p}cScSO|QkPvOAhH(sgB+fxmyXkM8Mbe$Hb^p>OY{(*!<<7cSC0MlIR3rY; z!lhzH4Vih1Wa~(cpEw^2#YN1W)x)T4W)q+2^0bF>e%2?OL+R>49LCPPzKfC;yGdn@ zI#nqQ?lFA$JSocRTI71YPT{hl8ka|RmCj@h>&RQqh$!0oZ9tu&aqs4v!iF!KGq=r( z3+pO4tF}|N*T(dQ$np}pt!E_TZp|S#slM3BUbwV%gf;O>{v%Rhk8E=rd684T?F;`E zf#xbKEphJIH`s)v)mMJ=8FAKF_dsu@$zTb46<_&r)sLTs7X)8yU&>sz&!^{+0jvw<53P<<)vJCwJ*~C?AM= zb>_smZddoCB(0b4wpCtCSr^2S7&>xo;&8-9^~h;kWwY%x>x2jEL{44o-mAqHwdIss znT)D%NSjZ1Plt+B=^Sg5Loe?z9Denb^L^DydFEb+PqVlxta&9x-E?aYq%LneqpW1` za4tfpAIp5W2fL9io>@v^DFU_6IAt+Ya6vFQDrjVy;?dF2;4V`US|x zu`xGpaDs05f86v!J0M`59DgsC?c@`G(h>RnTj+_-9**-s_k*QnlxY=Qu}yS%)Exov zJP0v(Vhh3taE0*Ae9Dtj(4HrTWkDoxv3Sw}@HmoII{kAj=p5j4%)}6Zj}JlFK{-Hv z?D%6cOw<^j3dH4gcO6yP`;UN-1_;i(1e%7D@V4}eP$V6h#9 zJ{(D1E_fR94nF^P4a~pmdi*y7H+>B@3$_~k6tz-v%T6P8-S^h3LvLHzy9rL4?{VqU z>_DN_Ax{IC*yTsd?%mVVl8#+z(mVPj$WU+?|{IUvJGq>J&_iuD+jCWbxpO_s>!9B55r==*4^sck-w z@ACc+yjE8|e2m)L+a7*B%W~)won?)OohTxtby_B~b_ zUHQtMUN2m9gYHgvQ*^v6xzBm1zw>nL&eVCcZPt6GbH7bs$cvl3q9E*=@}eD@)3rWb zn#9K9x-K4Xo2lE4jk9LINpc9OY1Y$TOGD3`mt~126P#=X8-Y~ zIkC%Tlr0}PlRa9t{A2sY(k$QG5{vwkPb|3TH#_xG8#&!QHL>Zy(l^Li#(L|6j{cgS z=j@IoUbN3*lwZye!L1dw@N%SXZDg{xWAfR2?mDxZbR83}VlG$IE$U4f`+0-x$@e(z z>#Mcz7fC*NmCRy)l}_cU-;r{Qptj=!m%3-Cy?)Ew|3QPprqlnqEV5YcQ~MK{;uFsU z`&JITKvb$%2Y&Uav2Q%|lG*aFM+9U0|zY* zu)qQMqMqQQ#$#nd*Nw@Iaez&+;G>4bz=H=)$})eBrq(~y+|Q-Q%Kv!?0a)0-!jhF= zg)YE7zVH~74#O6P#pDOaAA>eXSa39k0TciSe}VtEA*(Q##1S5kY5HYSO7zX*bgZoE z>+j4x#x1op~&$^>$=O0?jSsPw)Ch2Z(N@-xT-JL4waO5(2`SmFx zoToe}!`F0b-J*P!7rU~QMTLv$cI-N4{3ZP8wA%BLJSIGsUuF3`(|h?$PCEDE7{53A z3!!aySl!M9C*|7OsJxx;{&wa9gNV3QPOc$r21y6|AI&~tx<5VbLx=6AOV8xi^67l? zZu1-vySgPIdEFw#Yj;)huJ5^~{@}gtrd$b9Y5X}Eoo-_rc$zl%Qq|iPLbn)eC8BF* z^9gM#wO{vGFq-LH!R?NM)UMbnyCc)sZF>sH%7xp)WL1wDKWLQNm}Yl$eZtLofI_79 zs5A2i19oefU9CI3ZwYwyFH7xqi>jD#)ZBZYpVOSK4cQ!<-mlfFU08GZUF$pMBkh5l z6`BPPkIe@6VrFjae8VvIX<%dJK)_pm(`?Sed^descUIU4UGh;svzT1t$K%MpsdJZe z*)(&1c~MvLU3rh^#aAM?T&Zmzt(*8p3KGe`f3e|GK;Nj$!e}-wVX|BK_G7!%{3JkI@T>HlP; z`mg%U+t6=z$H~Mr7;^467t>hSXCKTz%o7`%`r@vkk>MQQSWe?1p6oNJXTuKgo6ep4 zSbW8zk*c=ns)_->eP(Cp-d&rbXcv>Rw`tEQ;lQ90=mK0f3?z$RZpmt-Yk2jT%@FeUOQLLYq6$4tQ%1(dtvdr?s`1c}M^G zF1luRp)! ztzk@db>ygNZyUR{$2o&P^Vl|pE8F&DJYy{mdB^5TBG*pXT>O3`p?S~Xj;E|Q=x32f z+S$q~?5;K4Ln$Zl?Q?Dp)`7v5y?hlGWFX<<*>!*IVn1FEu#5Yxt7K8f5D@!qv28(dft%W)#}0 zqV$ArVq{io@Cm1afhBccV#L^|UsJ!(+^*5=_sNS@c2`WpT=w&)o*_BW%w_G8hbn8C zQ_J~2YO^=?jTS^Sb<&wsn~9i4hA@240+*WW@=tA0AoqRno=DizVk6^OzF$0$9Hdie z%~H*mb8)%hmG<$2LxH>>P?+6t;}1tPcC=dEhI_t))RYy}8!v z_yQGh(fjMbm-yj{(In0f?@6ymJq71Y;{c>37_;Ywdnn1P#O*<5v_C6z-6wh{mkm)b zEh^@|t(g;lLteh3R<$CzO|3X^M%K_~I~2sjULmIQq*U>-jbIw^dYE721t;hR+Rj$A z_W<5#2Y#sXr*E?bv-H3FVG76tDg6rYjnF%Rp)Qyk!7JFy3Gks8>KQi7lVS5Ycs_{v zwjXESiM|QT=Kh2NF^k7~A-D`!+29K8bqkd813!un0Kuiq*Z>eXf~*tI;D79a05tv+ zS5PJ#3W7&C3yx$GETB0I4d`Jzwa$n`t>7tupBffujIv~)F$|5>6sTbsO`-L} z{_^hz&cJ=pUg5t+k)!z6D44#edp)rKf@uz}p8z`iXXfFQQC=WNpnS;HKl>w7`qJ;i zdGRu?Xs;#g|7-6{;Gz2d{%4FOWsU4xlor{tR)~rgM5$0}Y>AMqvSgW3Bw5-dgf>gb zE-K3)q^u=-8N2LT+4aonKKFagpw#nw{?Gq;J-_KS-I+Vy=X}oRob!3V&$;KGo6zC? zV4Clp^dNs=V2ldu`c+hiU9JhNeyqJ~_3>Ry>-KdQ*tDi!Zz^-@>%A#(R>gbF2Liyk-5YCGaBk*O%7> zFF(SiTD^X>M1zGV^I<7L2lsf0PAhe7d&ark5EhAh!tze4p*~#rG{s7`sz~iDxr1@f z2rZiRmxKJ&T3)=WQ7*$;E3a^U&m1lh?$7oiY-0xN3YW&P96p~y#*54S_Pji7YsW4i z;ToTRI(tg^-n#12_7yq@d$lmhk5EdMqsM$ZVr?vM%J^W7lh87f2Qp<(iKL<(+sp31 z*2=_Q{_3BVKz-NZ0Zq$!p}Mmgk0KcZP8PdF}7EnE7b&DM*2d9SWS%LqGgHmWm@uyTh8YOsa_a) zZfkF@Y=Q~u7Mg965g5K8;BJmv^~kB^V(HgaRiOjclhYp?I9b)3cXb|P+8%}yQ5$-L z3H>M%Be&g}6?;14>vS{kF-OdPrS05;qm~j$TVg9xRYn+ZX5Rl+Sl{-kCiJ*p*Y2Gc z`G-Wg2sg)a>Qm#_)#u4+oy~6VZaF(n-(DYY=*YoT4>}4=z2e{t@dXATyNJ_wXNhmH zojllc0zMD62Hi{iRp%$UYM^!!KdBSX>?d|J=pWe22|Q)$cjQY>AE5h#fB+`2Ao5&@ zfDvI&j)w>Uxn~A^heI56oFB&LlOK$S10e{IP)gu`(lCyop>PIcp((gu1mk(Qe@Z>YR~XE%ghs>kNnH>f9w=8^h>r4MujB}e)fc?xj;pnOY9fz)@9(D@S! zNPS0&2iE+``h{Bzocr(4q?W_A4WVI?xb)oTTK?x~ICmiHmx5l%YfHs0>@}!IK=J8U zrCuoKrDDl*CT(qhT3>U~OYzylxr2WC_h`sdzxNt>-f%pF>K&8>yy55u4Wp3dg`_?w zjZeSBF4n^r>fcaWpiFc31_HLvWkO&j)Y@Uc!CVILa|dF-8_)p8`LC^xn9Eh56(R#; zc&G*0D)n=SOunFgF*GP0JfsGnA$A83zkwNpv_|IkUJyC|7CSdzs6Bu)bMqyy3#jLT zawAw^0XPp$M3C3y|JxxV#P0vC6SVK(6(5T6Rm3NE@&{h5;JX^;5XfvxCAdQ#jb^4n z(K4^R#k5**k5BDo?%>$U(K9a%6kj-IxhPm1n`}F$^}6xXwl5K(%~PJaIM$Qd zwZpo1%9H~yI!tKH-5Ct>r6Vll>7(xOJ~a224=%NRNEg!Ehbk?14`(=6=Hcy&O&^}1B4{3FgYDDx7T_|E9Ot&yLE*;KY_bm@0V10Ad7O`R&@G-1^|@q0^?9;78Qn7;_P zDBPIBk6&}zwzr+fDB0Wcpo5jUXdEV_&m@vo+Sf7BO*a5n9C>%ej@JG3sF)iLMz<6* zyd7}BMn z-iW6?)BQrV>QY>GJk}o7u4kE}=%$xz*_IeJxvw&0lr?5`I)*9UJ%yJ^P0BXKJ}&JT z9ZplCPWO0Fc`(P3@JuJU9W@hP{ZS#I&#?QVZnR7Fx1kPso=eWe^n68CWvo2sAXn9B zkadvHlXgf!s*VdAZJ6~M6K02(IlV`7=w-F&YDhY~qJvHb=&VqY12CX6441}$? z_w*>uAFe;lcLbLX@9Q#fM1>v*b54A0CSuSk!a0+yz_k6!#Hs!bsS!==z8~VG(!64w z2Xh!BrN5Shd2-@yM;Jd}7az>9B;i7G0lk*eI zL?E&)G)e@~1>vWKq7oF1VXguZ5n@^po4{`f8tAaO`~rRj`IC;cV4j1}b8}w^zxb_H z^QVVNtq0L_arA%n#w_WdBSvJzG=H23N)PW%0X_q61+jghsa0~XErx~oOa5oOfk%1d zSg6LKx`z1+@;R_TYR;HpA%8=v8NRVSw8VIP#F&zZjl0hQWR4@6d?vmS#I?-hb*jQZ(W>=pxVW{Jt0(nt_1Z zF?=My(UQE@5w9-|PpX6w+W{KR6F!pXO=>y9HPG`GU=(~@IvN@YL#-4>%l?cb2e2)`z(-XL|R_N&r89AoXPnSIyERnC`CrgwjcPS+b$<1gX%~VeExaz z(P8R}(bF3q%s*InAm8;$U63 zl02$f3KdaK*2S7ZC&#`~N7^xOYuOvC%YQK~a`k}zW$QAjefzd;!*GN*S>ouk>o9}a z`UD@JL3<`~KD_SPcI;W%a?2-|dCgE(YTIih?(}@~71>s!TGNf59u^|VL|dgdEVm9( zHt{L_^q#&p#=Cmxa%EH;A1bMIhx}}O0~+t8<>z;KBUh1{V(NkA`5W-(C_S()k6+!j z@o{4Q;59lRr|&`$oX_o**8GKKe=5V}W)_M#!}npqW~evZ_=7K@BhkcLbtnMeQK#sF4OQnIr?SV{f*i6I1Xw5M`y;^ z^729&gbJ#}sbnUbwpnM2HS#9h$rwWiD}29Jn;RF6;Un?9exVZ0 zD&5r1!!4)9ceS#3^P^@pvbSXg<;qx%ssZ{uf$|`f`m-Hg^ zA?9ndhGj`(deaAuW{w7`8WpY6x>ojvWe0O49=`h@MZsHoX{PluSZ3Plwo`cv>fJW%1D zwWhmF6jYd|Y7{8oFRag|Q!s;k0kJ=xr4KP5UEwqn7~a%Tk>N>)XNgiODAZ47^Kt2} zQzQ&zTc9r(_!Mqhl`5T`S??t?GG%jA$8N85_MrOs#%aQAWo>K!*CgMSX%?;r8xqrrsV8IM{fvr9E z5w9vjw+4Va>TFPsf4RixU%iL@@0Z8`7K5)o!Q)1l+2$`DB-iwSS76l&>lqODVSa_@ z^N?{E8_`?HY#{{i6pRINA7L3%W`ySfmx3hMU69RkL_L7$uK6}2O5)de;H&v) zFqQ%@Fa})MXUOgP$fzGKIr%kCQig?>n!;KH66IsVVmuDg;qS%^2J@ZK6n@m%5AY@dO0#9hC9foUaPa?kop z&jkh12lah8<~ZsJ+=+$sZ;cz;G}gXL zJc~J0vO(`2ap9>M{fv~;m_x~Q`YQS!Z2d7?U9A(k z4K>ZnIEBVT*&zy*RTU+=B@+sHq|kCtS_RmKUV%cezCWOUOR7hVxRb#5&BxI zSqjRJgwIaKrLCY-z?1bqZ#^M?2O>;|xQiO}Y;drp0rc=7u*MpE79c)J9Nf3*O#HNy zxbqs=fz6uuoBbbeGYU2l|I;O4AVAGuCIUhw{06}R33dyUEeICS^RmHoIVs&kp$vFt zA*n%1wonj)DH9xFfk#R|h&&^u%%$MT#SRn(A<~8)kOM+EL|cdjhz}N8hYsOku?Gn^ z;5p!5NCtuQ7JEnm@WRqkK&H-rZ3XZPND15A# zDbJL2<9wSRhdjP%9j3ZkTzpa{c6o7dBdzP~!N60ir>7^^xR{&NWfB{#Rnwg|rNSi$}Y;!IfBWLo~#LK`-zfJdx%vPyEk#!)!SrkF_YSG{ z`G^NWCn(x!r;V4_ht};l)-}zxUTazN=O^voykndvd!Iy?CB3m2=Q_vZeENELh=i%; z#n4`(H$GClxW-$_QIVml9CpU#Xv4th!me1_oz<)v#e8aE@*mN0+tKmOrP>FkUGX0F z2Hu^tvn7&Wc1~*2P1`>*+w(y|M>Eyf7M&{2xVLeollz`}mh~1|A&{lQ zxP{Wm;X!n<9Vadfcf)XBlgW*M6Lmo0f2urelpQ1;`9J`E&Z}G zSb+RH<{^)}5c7ZymO+d{Cj4RE0Y_5qAssBigG`8fK%^jz7Et^~hFXh1kOGRlU>Y2b zRdDQ|KiDI+0ghA9P!U)QQdlY)Vk-y>-2;RmVevh8pbYX}YP5!@HIR4<{J%JQp?D3I z2bm`L(}+!eshM=R3g7hv>JO9~<{I#soNK^P3E_NT7jmg}J`TCCL;hf6sI35=5c{cb zkc%#$HG;YWM`(c`f3cX{n)&I#myiC$8n_=IrGi`X zpIHO`8k7py0O=Tb`sCNvke3Qkbjad-;CE13xW52JB>gj&#e9s!14LJX6y~M^QiX=7 zh^`{lr*M7?r2(v&k0*^%2!5fmK+2B19Hc2g<$$#v)XPA=b9FMbECTAO|8vR)vkX!; zpM!FqRv9uC=!hg64ANHRo#+)G??hWs=6*kN>EwxA-Hf#R_w^>1T{B#J)h5xeR=*%j zf<>z=+-AfkmK(lcux-n9Ay z@7<7dt`pxM)%Bgn*wT*)mKIYJ?BiB{2zp}1>r}rL=ZZ-Vl%mbx+?`tazTiL47kxpU za$%@c6F+54f8)g_nQeFXjQnt?hfVckf$hDoR1HGz4_V|g|8pk8pd_UG9`LTEW5YzV3wX7@|c}2Ecq6qeytEX+`P=N*R z?irsBO!igpU+X&hE=2Kqx9r!=PVWDPUEax)|9m@@k&S_qv9%D#t|HG#ll()De2nHfvHbzddu-2i<){?3 zx2JS;KkW~2^*7=E*uH`DolJ3pmLrXTT8(g*{#Vav24xnr{5SZ-yuv#&m_0jRow>ee zO7|F}GX46nrUygQqb5u@U9`__qu(buQl z`(XaN8QlSzF1O%=-M+6Ljb30lt>-*6{0)`GFZ=%B&Udw_RDnJD0b=2!o%n+IlPTyJ zyS1&U0ysMyJ>APM>>O& zqhZc?Nu!iavXA6Pa3&eS$xoaKB^ZC&(344EB^^(GL7ATvqr9+HP=OiiDLz{|_HA-R zcyOXV8(2(-mo(^Y1jsxyeJeG)4s?-il4!+!A%3H3-YsHQLFcBLN1`sD@nrE=xgl!T za1>`fFqSSSnz@$YpA1+WwQ%L14$Oo;!Ce$E=qz0GSgksHN`XU`CKW(P08 zPNXpp;sc0V;8;wmj38b|A}=`}M!};wIPSuH0^#NU$$v3T1TzY$Dk4Xd$4kg^2n$;R z=L}f_O7p8lXdu2qc$mTFmLGVK6u+yLK;no831~mZefOYV%T02MqC=x_-fD`~4qzjebT2AMO3S>6deXCot3R-LvZ;@u*CE z3oHWx?%{p+%ftiaDHTl>6e=lT#kA2+)nmIy-vNbUAg*|3$VV61#F(N`6#4Li{_Xz6 z9ajocrEBPWL80`fYKvkb+mtv?H@x>m7H0>6mx&#}O@OWUN?OAyba)1?CmrjxrR*Hd zXp1TOg*zkC5c75G}%PR~6 z-Rbsnj3{+T1|3%x*W0e1hC+3gDv7^!h-nSIKv($8nO(=&E+cLI^P;@M;?R{k`Oj4> zM2)P&%HMg4d~h|sG@R9h;*$z+_lVE4+_2C8+!5~S6ErJ|Y8dqPos^7tc|NI7*GNM6 z;HGd&W6$R*kD8WiR`7oltj>`>y~}Nd?h*Tti7TxXVYk#{v^C4x2^pJ=r`4zXzNIj` zdWm;zjPtO_7M`MFi;rtNG*ObK|09BGd@G+v8JCBz*~PT+OX^poUaF@`ADv~>TA^J= zmo4C{#&6Mn%7^Pjbi1y=tiXz3q0oe@|M@Kywd!r)hGoeU*J7H_9d)N_`BWZxDJP=Y z@vNW@lj+E+1Nl9v)63t8yQ7o%T*hZ7W@vk#w+Cp`BqX$|zdK&caJ$q-rfF;8sep1{ zffJ(2GB{zk{c9MixHIXWdfXU$KU+MSp$A>Xu2JU-0lCSk$&briB_@SRd}}T4 z#G+laC&$xqP6a|k*WP6C$I-}+nLeH1yM6Q|da4xL-ZyL{CtKZ5Z1ew2#K3X_H2gz< zEhc`wyYW)Q1Q_7_TTJ|0Ow1RN|69bwVj||>f@1zN-GH0{eu0ENBytde2#I85!W5AN zkPraK#U#PMW)m4GZ_>**Mj&jW{$+w97ZwzX;9(9|h${^sLE%azXun@sLt}sHO6CVF z49XcqK_Rtf&8EIp8aYwn$B(-!N~JZtmi-Vky7&CyZ_gr}XwyjcDb5jZ_t*6RLXDyJ5T_$K!{ExULv{QCWDhQ8m_@dsZSzTNO}_K8tz_)*UIhYZeD z6@0gjSv^&wzI89{Lugir`v|)? z4L89}>26CM)p`%Ftrn8s({H<66*NG3j+*Sr3m%gUNb03f%bnB@p+d>qyl_?tf8cM^ zFBzjdA{OA%BE9~eWu2$aEYJq-tFPGi4vP&pydJ|C?j1q+bzbRS=k_q5j1Y0Bp=VmGu zSuC?m=Kk^o<;)4rLxW>d)Bb#KSt;vWRjUTKD&|lO`C^shy!o;{+&w5R^h^j<<+fV7 z?RhCucQJV)tK-7JP<`u&;8nR5+VqioBUpSee$-l?-Pks__4)k#S7szQYIA7J1t%5E z1G#71W@0J$ug@+U5j-C!DT80OkN*c7Q-af)6E`@getTile(x, y, z); - - if (this->id == 95) // Tile::stained_glass - { - bool isBlocking = level->isTopSolidBlocking(x, y, z); - if (face == 0 && level->isSolidBlockingTile(x, y + 1, z) != isBlocking) return true; // Facing::DOWN - else if (face == 1 && level->isTopSolidBlocking(x, y - 1, z) != isBlocking) return true; // Facing::UP - else if (face == 2 && level->isSolidBlockingTile(x, y, z + 1) != isBlocking) return true; // Facing::NORTH - else if (face == 3 && level->isSolidBlockingTile(x, y, z - 1) != isBlocking) return true; // Facing::SOUTH - else if (face == 4 && level->isSolidBlockingTile(x + 1, y, z) != isBlocking) return true; // Facing::WEST - else if (face == 5 && level->isSolidBlockingTile(x - 1, y, z) != isBlocking) return true; // Facing::EAST - else if (face == 6 && level->isSolidBlockingTile(x, y, z) != isBlocking) return true; // not really a direction? is this supposed to be here? - } - if (!allowSame && id == this->id) return false; return Tile::shouldRenderFace(level, x, y, z, face); } diff --git a/Minecraft.World/Level.h b/Minecraft.World/Level.h index 94a33ab2..3892d97e 100644 --- a/Minecraft.World/Level.h +++ b/Minecraft.World/Level.h @@ -64,7 +64,7 @@ public: public: static const int MAX_XBOX_BOATS = 60; // Max number of boats - static const int MAX_CONSOLE_MINECARTS = 250; + static const int MAX_CONSOLE_MINECARTS = 60; static const int MAX_DISPENSABLE_FIREBALLS = 300; static const int MAX_DISPENSABLE_PROJECTILES = 400; diff --git a/Minecraft.World/LiquidTile.cpp b/Minecraft.World/LiquidTile.cpp index 3134c239..be6c582d 100644 --- a/Minecraft.World/LiquidTile.cpp +++ b/Minecraft.World/LiquidTile.cpp @@ -253,7 +253,7 @@ float LiquidTile::getBrightness(LevelSource *level, int x, int y, int z) int LiquidTile::getRenderLayer() { - return material == Material::water ? 2 : 0; + return material == Material::water ? 1 : 0; } void LiquidTile::animateTick(Level *level, int x, int y, int z, Random *random) diff --git a/Minecraft.World/NoteBlockTile.cpp b/Minecraft.World/NoteBlockTile.cpp index 12b2921a..cafa0c4d 100644 --- a/Minecraft.World/NoteBlockTile.cpp +++ b/Minecraft.World/NoteBlockTile.cpp @@ -79,7 +79,7 @@ bool NoteBlockTile::triggerEvent(Level *level, int x, int y, int z, int i, int n break; } app.DebugPrintf("NoteBlockTile::triggerEvent - playSound - pitch = %f\n",pitch); - level->playSound(x + 0.5, y + 0.5, z + 0.5, iSound, 3, pitch, 64.0f); + level->playSound(x + 0.5, y + 0.5, z + 0.5, iSound, 3, pitch); level->addParticle(eParticleType_note, x + 0.5, y + 1.2, z + 0.5, note / 24.0, 0, 0); return true;