From 4c4f80df5a4e3c0b332c3273b284c07f04df421c Mon Sep 17 00:00:00 2001 From: tomrus88 Date: Thu, 4 Dec 2008 13:29:31 +0300 Subject: [PATCH] Fixed maps extractor. Patch provided by andstan. Not tested. --- contrib/extractor/ad.exe | Bin 159744 -> 160256 bytes contrib/extractor/adt.cpp | 339 ++++++++++++++++---------------------- contrib/extractor/adt.h | 100 ++++++++--- 3 files changed, 224 insertions(+), 215 deletions(-) diff --git a/contrib/extractor/ad.exe b/contrib/extractor/ad.exe index 2ee6e5be85d4c352e9d96eb902139111bdaafacc..5d8e523260e5345d20a816ac0359ab7c353dc5ac 100755 GIT binary patch delta 37385 zcmcegcViar{+xEeNwfTCXhLj&W=|ttVF5GTyim5t5RjpwB%M^TQNZu zd)Qo2YBV8hVHK52rA9Ln=86oXL7YufsbVi}C^qUC_P&UU)r7F~*mFO(I!o=(79MU<)s2NK7d8DOOW0;g-GPK)MyMSeG@S>7FMY9(92vIMw1x!5^xx*o&n9GKjPL@3`x}nN(S!)&cnKr6zZ0W zvK@!1YtHe6DTt~R>O9naKCz=S{*;SOBuK2RCZO~jjYN(y+3S#JAg%$fl8_e~JY9I2 zD*97Sz&^H1XA7v@g1F>QO>WR>nG{52ZR$X!#Bo!RT1p{m-pN7}`&$Rvj{f$FG=hLD z)&<12ZMZ|_DmF&1$PL(=*`p#&SCQWXRK*4CRe3c^$CFMt##F5HcOKCM?DajBrt+$< z&>iw>tR#dJPKA|&O#o#9d%JrzCY@OSwFj|O>@Y?L?Cq1D^y~WfF?0!@J`F<`T6+B# zYLre$wa(@MyRP_&-Wa`mO?J?OJDz(fM!Y=~+P8 za7?dC8cpjvpl8XH?{6OtfhI< zpn`sLwlMqAk|UVxs*=AbqxdZ}q8CpC14V9D504;kkAq2@JUYhZj}}#V^XKKyDLI^g zk*hm)<8P*P(Rr@Mc`+{Al53@zBTiP4R$-VzG_;})Nf1&+vL0I_`BPZ0VJefto8q6O znc5j5_^R6t%~M)qA6QAX%)-~PgStl0S>mb($LN~*^X5oDA@KG(eCb|WiMH^JV+Y&}Ov z&nrl^l{7j5`!@MdZ32Hn8{rt?X|SZeV`u`(9)RFrp2c|62$5z?p`w6?W>S6-u>tG_ zQw!M)@iVk_N2lul38eniR}`C2tjQ9`QQX=87g6p!93{T-L6zu&2`Xr+hqrR(*RQ`B z+WxfvWW3MJH6~1^How7BRJr+DHcOv~>nUhtz19l~-?{;HAh)SmfG##VqQzMho+>r&LH=UQ zAsgsSKpJ$Z7P~kx|BQDOI(w?-+q0*RqEz3s!w5;C4(U#%8g-|YW$$0jZHK)d(4OhH z9ert0pJ_so{&dhDq`HbIK}8rZ(<$!=AaxKva4

y*9vk$xERciWSs}sUS>Q45Mct zl}vreFh)t~+6uiEu^3m5QCD&$$1)Ksm>)(swg!m8q^4MR$@fTZSnGYK^P}q%rQiPe zHnh!I?^o6q@aR#{O^W-e;fGGNSLkaU6{WT1Y6wn_F#@#%(H>U6ECLZ9C8Lkf3{BAD zr=Bqq>%kWa%D%CU0IR~#kK!4*W^r2^%|cyijjhKSZv(o8`hjQqw!{J`@Jz3k;Q*vH zyx5$ZB{Vk!I}~U%ekP>F2T&1b0*P-;r#w9KA@&f*oS@BwSH$E=N!J55Sv*1?W^%Uo zq)rEH@}(S`FnM_IEl7!VS3FJFI!Epk@$0w_xd|h3&ml#lh{xE;)?Uh@3K8|zkzj}U zw)lCLlT%><&IV11o9vt7S2w~aakL#GgM(HDk5VOrqwNrx8h^`Edy=v5GtXbAkW=XBqEU#T{gL++{gzsAA-iKzTHqN2xh4E=Ph`CQOBNSw`}o5=F+6>d~0M@tps)k;&k&Za8vRd=?3uTB)aPwz+|AJ;n~ ziICsxrj^<&MX|zkZC>@#zt5C@x+fJ(DmEHQ8ZeGzpBqlizveO3&Xm@grfB%q-h=up zoqnjbLZhmrwe!?A6)YnURF+Wjrrsa02L7b}Q}zd69JIUls(%7$>OM_61hTBg{!^}4 zSUo7%hp}I(qx%*|5`aY1*{TKs5K5Z+G$ohmnLhB(G63}M*2zHC^l4}XbDbSRnO zdN>+j!v7^cwr?zZlP~GpH^_pmkn||!->6>0pX!^;Qu&vCe^&>*$UhE=WcTvckf+&n zz9}??~|A zV`hk_U_-+`h_hNz+bj-`hSF3OdKHp!kYinn%q(Fim>eT0C_qeV0(^m4k1 z{u!SdIX%d}(Zk|7^J8l|*}j0k78x8rwWEYIUIVkD&V^v?SQG_lk$!3Lp)BErtTt#l zX7jU%=8gPH69PZy40q_YV}J8NPkcee4$=FnFwb^I1N5@Du9$pL-p%W z4ry~b6#UbHzvf}ycgRHcAkQDtFX$|aj~xT49R#Fn%wh_EY{+TWr+R5rnTCb(U!(71 z?^iDv@it>^yw4~Tdz;T1H4qc9cvMVyO|nU4-GCQNtSD%Z81X1=>T--|uq$Y7cMGR7_Sd56(M$0+O+;(vrzZf&qe-ij%5##aB7D;^CZIjq) z{^V_|`mZ5I_HZi9!j>zxW)4iUI_GtDanG5eFCRAgLBlYv%N2z;O%^}1I9C0^ z=tjom>WAaj`QG`0GF`NuHOibN>Oln77*E6g{SWT1tW1YZKp@k~t{qLCD*qMhI+{ zD1QL)CrS2Zh+>LAOp3rP=JCF_->E*G!582DV@Ug*CY4u)Np%uW4?JObV(~~QzT@j2 zO+;Mg!%BbmH}Pqv0(OqSZi-|p_(@ZOTCC;u3#9wV(ROW&E4eVJwCFq{Xo9d~DhWYzzNAZ78}Dp1z{b8#FW?!fm!LqV0TF zdLA3k)su3%jb2XVXe?qVFPOBLJz3o_X&z(e`QRyw)xX`vADuE{+T};cfNaOx;?Lya*DXmmWQcj};i(MdgaQYVCiXBEU2%Ax=P!Xq2s$bgF8MAXjx6xnJFy8$-FZ zx8}~J+*fYR-9ourZ_RC_T!)hDxVgFCk$vy2z%i7YeQRzJ<)+-4yNhy%+?soia(n(g z7wbfz`JK~`B!Y?9F^LEtvN$~*F9A!I;F*c%4m?Bg^v3hoER*Uyo)dW9o5km4?1Hi2 zn;B*JWi906KecHvpOiU;P2!Jd>e*=iV&-@3DleZlT)qD+e|wryH)aiFu%=>~uE9so zf0#B^9nr=Y6zSviZSW1RHSwsJVjJuYZ}sx0T^OedPI48p!CVS3l1Rg*u}?q z;`I1F{b@HQ)z8D&bz~R1t?lP{+4KP{itn7>Z+s&ZDSECUmzEJ)KZj&SJb`-F%W2AD zV5G$$Dgq>k;pkNd9twa&y4&Sk;%F;E^+j^}GWevWSgPBGBe7Q>@86f94R~td4ZJMeOIBXATZM3C#@^5Cs(g zYSWxGns|%pi4J85c9t)L$&&qb#B7y2p8jC98MrW@Uh&b9x0Fu(0$QVgTP` zNsKa~O|!U!#lcD^7hrj^B}?SPkoBZf8WB6U!^4_KEMgea`KD)+h}~_L!5>1)A>>|JmEwc>;boU`3O+ffx&Vb!-Qa%1RlXhxUM#ZguwMhb*=Fy0L;M>W{Mln`{3#)x9xG_-1snjoj1?N~e;pt{QU_*DfAX zxR$50D0>`*SxuCu!askimcG~(Ha_W(6(8nWW6&S*F%h6W0u}7;*Fn{5J(cAeGtt@}2zW1(Es>P*if5&RP}A8N@$+jt{!)Hb*02ES=#Q zoK#~U60=Y`{!9>e_UN>S6vHR>8?WQ8XN+4gG%%PB!C;!Ot`nfsU?K?#>ok`X`>G<2 zdCVoiCS6s`C9F3#Z{dxMM4LanrKKOiAT890GgJB5yJBwdb^&sgVKiq+S}`&LjoFNI zlWfKU*jzhdyu%-4hQJggLTHe+1zAZgHlHM918W&K->r8PAv3lnsVH!Tw^&F9zXlyX zhn~U%nG9n@YENphFBDU50!u+$vgn=v)+GIDH==l|7#Y_QqWzo|l)!Cy(K0sq@;1A0R^D-L} z;k*W=lac8LP~~O*->x_ap9H z2b0K8N(*f9m3&*ySEMPk+9vrSlE<$AwC2_*Eh{9gcXfb=8pc9-A6m=G85ntZv z5g@n$CW?nq2{LFUXJeO3rw=1Tj`n& zYlf<9KJzX_^Ou$ss6SfCyD#kvqh!$1IV^{lEbSfWH6G`c%6!FI8!bZkj-_VSoBzIa z@bI^AqEz-xz{9VAHPU*$*Hx$cI%dPO$d=L#NewH*rF6YH7xKQ3r!QN?WWIaZ_TkPH z)VdV#Fm~%ot-n0AmLj{emPJ26;4SXzY-mzTrQ{_wwtPQ-9`+X#RB$S2FBJ2~?+;g>Pk|dIh&SACW1J@! z_4Doht=rw;vy>MU1(|O#`+K9q*dg9*_Di3@@E3uw0lGXtmy#8zzZw0C(bIU2doLf% zPV(sG{m|IdNqaJ54r-Sz`FtQgD=@;g>6^^Z>S zkn~MUtv^V9ml_2F-Se@2kyOcG%M!`D`R?hV2-1WM1r!BILjYg`3f98Lu~!j zQGf7sTQvKVue5Dem!qD2EPIBh*kk%1o~*1d2~;n6DM|C0Y{hCWl7yJRCHvj%I{(=| z5OsU6+QAm_{i{Z^hj`1X(BR<9ZgRiHYm)jr6R&i; zbNe+f!csmj5YjheO^&+u2fk~~Lp|T56T14aq(AJx#1eNRdD7aoIC*$`?Kbu^pY}kM zdQ2-{^T0gyl^=N11M9I{$$c<9WiiOUxz?AYXx0hZ_+@^M!(BKOApugolzI7vYMCQt zUX1-%%;nV&y44{+^S6p^@Y4)kH*SC}hT!$Mu+WgM!|YKtqz8HeJq03%m#({C9rYvs zeccrGQ=_l;}HAMZG)escsLvcc&;VuaE zWHsx~H4nW32io3;&ZxKj$hSJ<*#7Ddody>3dz4Zm>9>HgyJ6AI6q|;4Isl{e2K|a^ zjDl+XtGZX&OX{A-UxA}! z;dj9p(R)u&U5G%>+UlEafl&Dw4JN~}>h~qL8kD^MXbe*?e1-q?SigWq2vNht3_oJU z#L103WOD-B!Lv6nW2M!#oAVf(%tN0@#(UNimY!A(&>8^SfiboE;1lE3y`qra5`YCI z0}HyoVS*uw_u4v@>3IHDv-+}E_3K+dW2~v#DL=(n4e$5VBW!#13r`(pm<)waFTh2! zV^42kj#p%p>dH2gYU5KTRU4k!|1hZzGiBh)ep~AJcZAh zRIPaKf8L~8xZR}6s4}UBykJtT#q-gNCe_59CY5@ZNi`gg|4Sy-+jtJ*F}!S2Z9x64 zcBh7iZxNcs)v(Zg!-5R*$M(ub!vfKwaF@GBo z!hIXvlDJ=s=m<5eW$bAZ_D`-pyW_N)nfbw;1~#_3Y3E$Vv^@T$p$=^TE^q8TDe1Rr zyW{@K7g7@{1lG0~r08e0zOX~{G_hX{a)YE;eVMj5Kt7WW)r!D?z26c9YCCIj@v27B zlqm>~NMD13TM!&6IjdmMY*jGSp^9|8_TNC_INgEe|B(j5@OLt9&>(#sd*nZ8=%C<; z6s^#J`msl1>m)w+Wq$_|PQ4D;dpcIH^hs*Ei35HAFATWRax8j(Q$?^&A>_aH9&L5> zyw*XC=o|rDi}>O{M!>`WFQjN?1c>%8{$m(!P(l5_K?QNbLx2?KVgC_AQ0M$9VtPQ? zzpmMWpU6T_-QV~l zR*q|_uyYJUu%Ki%iJU5^*+th>6=_Z8ip)LY+&??rU1@vFBDf!xz0P`vsa{k^y|7#A zg<;cWRaPmg_iY&JNp38Y`4=+Lw4-kSF~9MuDzgnUz&i);Y8BLv_bkNjQDSou+pfe4 z5c5NYKCqbxHnoYt^p)t?t4vfVpWsr>HYUvtt5osg9s?^ov^OxprJN`ZXY0V?0_% zW!&^?ML(rSFLr}ga9eO|D{v*)|BKkr*K;QHuUCU|KQqJTgNG@=ZP$vySX?Oao1^m507=?m7E? zXg!tNu5;Vl3H@PS{Q5L?;~akM^+@&w|M_);TAIWC_JoGWADC29rq0D;YfKmRKrJ{I zHK`iXPS<_FZ{IUt{m*&)`8{*kQGRvL1oh0>{Ej#7QNLHfcfB!Dy{dp;dZYiKxP0_+ z!#31(rEA1sq+EL_1!D^L-e_b+&wL*9=HP)B<|5awO;U>OJ;fOn(h3Y!y^uowBg%yVtc$XiL{QZDTEB zNC9?kIL7*EJ{?u;#T)X)r&SvkedP^?xz>ld*6XA?+=#%<8lBZ}C!D5l-;Ew;o^#`( zpIsa4PWmHYYfVyvy`Oky0Y*w`N@-R68BMxc4@KRgLxU!pj*z9D6Z?Uo<G5#XqVZ zsQ&sc-da7dS0rlROznnfKIpAg>cIj0*|);fJLmED-sdomw)ESt}_?Hx6x8n(SFT`Nsq>gpj)wz{Tiq#jBBd)7mF^pgCK zt%IL$a*^Fv99j=JAME>*ypI>7Fc^2|Zj@`q7#_GUp9S#y_7$+Z`KSBB)Maz|rG2B> z$2?;HSayuh+COCMHsZlWnp}2mS)0x7Oljv6R9^Op@SmiWVnj$8Tf{PoVice|{48ei zDBrt3eDrNNjm@jGKm){ImL{m&LE6^wxJYRa7A13lu+<%;K?d&6A?5PP6MOQx?>j@g zdDNQsg|XX?_ilsAlln35?*p02pMEzaM2pi2bm%h1 zvA=jt0U29vU-MnM7YnO>kR`EY!_Q^j^3b(>jP$Lyu&@(JGE< zdf`FRdjG(Q2!x0$!F-&Bw&*S5d=kKfBa8obXzWvK5xEVJ8ype zg(;xoj|MNaZx5=ypmv`1a$eD{81~x>ZsS({Nxq=2PyeVBbl_BBJZVyGMz{;f%?Wrd z#8ZBPKUp_K4akFa#)*0Y8F*r&Pr0wNo)NkRM(D~r(3w>DilsY%+EKL?kHFK6rwPw- zJdG##;KP&kghz5ygVA^r@MN6i4;@~ZzvnY5_~R7FC_oh0q=t8ic;^+(3Z1jrYj`7$ z#@<2&KoIce!-xw!fkojoefb5O1>Y}b4}LdAJT$9Fo2YLbmvGZo~XqdQdT2P)a2T31BxML zagx8%5X!uGLqkMgg0cCzmuti$t!_8w{&>1M=e>W{6ODcQy!HdK$g;xWwB*ieU`2oy zY97-Vf@8Zo8^c%{w>CxvHs1+x4xZjdwAx5%kiX7p>+HeWvv%WJ>@fQlvm->XS;WWN9DQFbkZrF{-J)%a#{^t>#jk4 zN-${JOd4i4itb(YZdSmBYFanWiP0H+^M|9c)X<;aTx))1+}Rd-&)a&6f}C(E>58c*GPO^F;YW|(U}lw zgIlsCRMaA0vDIBMa1x#6M?W5yCLs@t>~aJ*%j>5-m9e^D!z{xQOOtgQhTkF{gWAX= zB@`^~AY^I`yqKKMCw~&|zm^sdrzmLg7Vb^l_Q_!XEmX(#>|59=!qL3*liS$q{M08S zAV0pJj$(d%?57EE7!`fGiB05xeY%ys%K7oFIA$JtB7!a9Q%~HXHcaHwiBOm>J5Th( zHGv~1B6RmZNX@jnZRW~m{>zDQQz|kF8M>WBC0L(qVHPop;%0Y{$zzUm^VlI$dy6_2 zjFh0NyA~~OJ{jalhH}m$lUwbPxxzqe0twgki8M+bt2t3dn83N(tRe0H35 z<2^nfW0-1E^nMHi#cc4%J1nxfpNFz$zUK4z@!#D+CI<%R2qHHF4eah2*oi)H$eA<| zww{G*@)^>syRU`jg)#wK_)njQsMjU(ZeQ$S@ACJ)7|OopKYTHe?XC9vGMKSC9`RK) zu0dsfwaP1Oe_|&;L=B>@n3g--Z=0Y%#NkB#udj{%YZQPmFiLDlp{ zw&;!1hrA2>kkw&H2b6InV%@HF=bYD@10LCk6zqcR0$_%=$QH#)EUh`IApl=YV8(f@ ziYbBYXGePY8Kvn`k82l$6(LF48gqU1@h4?kX1U5IxMX_SLO~V zI|ynLQxqd4+9Kiypong@oW!n692tYMbVB(LRg{6ufELJdci{wI2=}4K9vG0h82f5hnnK zp;j;`(BPGKp@I8-=kL3XWN%SC@AushbxAx=|8C3wHtt?3`rpRgTdj(5*Z8wyD;;k2 z7a&Zo%vVAxI;k39n}SP4FVk= zJ)ST;Mm*7Y;_yuRRWa^7Bo!dTif0X;O}|!ua;}VpEwDAozEDHM z9nSCjaisq-#meu6B}4Mx&R_a*XxODs|4R)m)!3fR@BcBFYtHw%rCQYa;p!11_{{S| z)gy-U4d-JLw~+vu#mgm7BS#@3SpNdH)=rUXVIIMYv7dxv_ed1}-52vzG{10ul)8Kb z4-rwLod8hQlEx9hR##}SHc`DH$OgSo7f>m&-(WXvOw8BW!bOj0ZWE@l7cnXF;MyQx zlzo*&lnzCj7T{3qdEs$5Ui+uFgs-B)YrpgH(ru+pV2k%Vg13kPdQW1%z!%GHCgTQM zsJLr5kGOEJE*T`?Th-GRu_3y8>xES;=)_{oJ#eKz^qo821ShJ97{DW1^ntr!M!18P zDl54y$odRVZHehtOg3~~p;kP_*SBPbnE<1*^|ewc^bes73bPyV!35yvTf!X&AAmd4 z^t;==e=fd2ZO|AO(ub&bL!mfR!Z2f1dA3k1Ma27HGS${$S;W%l4x-%H8Zg>mZ6}6} z!eF4`ZDzpHelPZ$iHZGYkyoko2&BT*F9-3BX@UPVBXq9Q;a32jb)dig) zOA~CgH6C>%{-I>H(!O}zIc$xcKWPxh&7xef3Pp)Nwo6D%b&nB6NW$1DK;ZImf7O9> zwvyX{EE5R`N#eS5cJIWrW?K)}I-fE(t~&jYbH4ZVsT)Zu=d{S>3N59YBy4Od4;@PeQIk*EhyhYEG3ECfz9JlY@M z{dxL`L$LQrmud^c#C>3Yp130d<|<_bihL!b zU>)cOV}+T&{&R45Ese^8hw;_)Tz>rLL_-3atV+hq?2eB?;Es>RTRg)Dw9ZsdA6&hr zHH@+0eCsbOaK5PhbprFZ*Wn6SThh0T#&FX!W^ zarNbU)!W1Q*~=B|d0zB;daxg^!z8ZLuk&)P(_?|edGT|LSgSdNsRV z9o~*##(4GvWoa5AW`^<+SN5qB4)RTx(|PotJ=EzTJo(QxY&L)UPm@~e%m4UuA1mOm zUp=Uv8NiFKrFClp6=(8W&v+l_2d@q9c@0T-P-&;UHxJ=guMKn*xp2(lzm(oVR(kha zNbmRpdZ*0Ad-0~AawYIDR)T)Bl)yVj2?m*!U_=IjXCCw3fIv!9RoRqKQ?&+RMVhv% zl+tC*7`q1V8nBh&UnL5A0~ARde&Fq=QPtq^gYWsv7`Y#5I9eAMVpwUmECk(FZ4`B( z08wYke%|)iAm0QMfdT`Mygpuimw_+3zQjS!iP##?S_}nLwF$bjW4Gsyr-aDxS7b#w zxNsk*N$HKlgZw(0jmi>k0m){Zc6c|^>AwN3c5GQ27$q*ei+m3tZHg&N>_k>u8otBv z_Qj6sHTj7^7ORfWl^X)t2ESQE<%(cf-{zidDO)dp(34HjXeh(07c2DJK;;=hNUrL| z1_zFL70q_IpyyET?q2L&-|y)}tKZM^vfgZ5&);yX6Bli)?Nqay9x(fRvwrH`ugPEa zW;4})z9x^zQ2HxW4rKeIwes6REWY=au7a061%*ON_ zk4+;~veiT+{Tv9AJ_}~khP|;1w>=CM=~^=ZZ^D)7JZ#NY8M1|pl1~1;Pw;p4VTtOQ zyX1%auq5@rcFJ{q*lhLMU2?dAMXPIH+Lviyp-dgTN-pfn*7z3FBJs{a`9fb7VTi!s zR%CuI#^P#+buK8VNc-F@9;}fEgs>Uvr*`hMhp@p+eftji*-*CJx8{9CV&tGO);?`J z5J~an5Lfq?VDW&;XOKZlTpy?yDs+G8K8^ydw4t5Bh#hjkgw`ybi;}&&MI8LrGdu=s zj6A0w8}a{w^V4aWGBF8 z0;r!?*VU3Z*Ih{+rB3(2zIh8OIsKKcU)Tx*0Y=8QX?LQ|RBVuL z={?P(Gr$D%0g~I0K6m>lOl)2hGHsn2{*-%5X;kYl*)A33` zX*&p%(v4t^uUXW*M1bkhp46M3RGcTZ!;?yOc#==W6q#p33CVNs#J*l}V zG!WFv9LfMA-Xp`0_$;lr!uSY5A9kP*;AcRIo5sTCn=3{Va3?o$xS?`@a}QBXWMb@4 zc_}In%oXn(vP zl|7TOs$4Mg)F>#8U4KrTbbW8yJ0XDTp0`WSzK(#a}WNqcOGn_=UGX6r@-?9pH^{tw62F ze?_ukftUMZnfu}jD5%;Fa_i*8fo!lk?>>3KKo&7#?0qU#e%_p;hjbp#G!}RZoq^$m z*a#YLc1b<-vHaRV7N!361-WS;o2E85%27tPc;d`u5RN~Z@wO|jm|zm8xkl7_`B@QN%1O}6#*4aFu(Gee8R|rdL*I2yu8?x6I?T|A@8!0P4mBo zV;gte9*amtp*(#M3mg0o#Oi?W`ynKhh=il-)LHu;)A zGxXnt{zGDX_8V4#1^D@Mj_AZ^RrFgl_Wp$$i%aQ^@cLVUcVWn^d3CWT-yys$-jxLJ(y5)b5za%J zk}KOWkBk3ZczqrqVgS)C7x$goz3F_8%kF`THzTk36Z(v~PVBjkyVxnTPoY~Wzbv8Q zC3NE7xO3Cdb^7TUr3*=|D4ef*i))yJ!LO2OI@JbH-_p%lAAyB& z*VYJT$h`u^3}1N3WKSWCwlp0b%%dC=tiy%_Yn7fP)vgFnQLr0I3UqFV+dZ6|?9Li| zQ}-ol8vFo+Qg`>($JhYF&c9_T=#Cw;78&LFJy@Px(}TtLy0R65JPlvvX}vy;)g_1v zTV>w>Hc`D$FJ}a>=w7Qj$}LLyII(!EyfJ`9rUpW3sB95d3Po=VZKj|WaPT%0KZ`WO z9Yp!KB#g@}!WR}DI+Zv}XX~XL^XE#RNsTb{9tNt}vBsm2~ip3eyQPifLju-;O z$4Z*oEr6x&_TB-_@JG6iz9qI#%cf)cUC6;2@g99*XOGAh&ySP`GG@^X0&003V+ooU zVcW{@Ft$)*L67ADYW85i;HNRq+U)V-6M%XA-LW-h`V+$r%kQXJl<#a9etGW-S*Te* z)-3yYu|Wu;z1V#HW*V?&{2pA3CbliMCg4D6?H>7gFU;dx&u!co@$gS!r;6ZSh-7X9n41bTyhEiT>9%c064mD zLY7AkWdnL9!u5YMDp@WV z%0h#3aOR97I}9}qZ-kVl$B@dKhq6dtGil-z7v*;Vr}OCCPdz%fc_@o_bm`ZRfEmZz zl$JDm+Dy1Xh1)$M5+60?<)ybgPM(l+E!Nr})rARSBP@kHNm0%&O%J7#SAC+vHpRL< z0258Q)gziGdBjgCw)b|&`3V0!(`jK*DrcNBwWqE@8NlottcD%Pm#kULXfp^`#y**2#iEA7Ql6|&Sv*OzZC0iwbf-mmlUsD=@|oyGz1#8%TT-SG1M&L zkc&D^K(0wWtdatbdVt*~i;-+ZuQwlo!sxe$CfxPw_Wljtd*mUbSR~scPaVa=5Zp70 z&1OyVp;2s}TH}%o}&|5bX7ea8};LL1xi_kOj+S}No(H(v0DWzLeJiRcB z=OFueu6fpMDTNGw_g8J{MQU6xg)FssACm(|vykyMXiS=@tvalPx~fKm_${!sbIx|} zb%BeejERAZUAnZlkZo!aN=XXC$gcC>m|+MjFK?8WjAo%Djz37{Ke`o8b#b(}!on_k zekdb)`W=_6N3+4n9xAiN>y#@hzw1;!EgI*dW@!FqaT2EvxQuDQ8m_YUD*Q`Wz>~ZN zZ^I5bD3%Ri?ef@IHZW}r5V-fgk6ww-W|90#55I*(Qk|_&qQTzVEP`$TEK>m7d-o9Z zU!`3Yf0dt)Wf6`O$dMiiFQl$nd@dBc-AuA4ij+Eq^l28Jx zw@>0WYTF)Q7TH+c++)RhfaT>?tT#8LX?;*s;%Glk)_hON7Zi2}h1f;p5m4g%*lW0h zHVNOHb>>f?d}l+TJ5y_Ku!vYnDpwyBeU)v&Z%fI`a?U+#A z-lp31q8>G9yLSOyQ6^MH`cf%nkKBI@yPd_!`D56Cv8|95dqQ?LHi@~`x1b7@pAgJ; z2OWkGLf>g!DFo6IUdwil)%QbG4iNH7OeJm z$&(UU1p7e7M_}=+yZl@tyFK|W=#@N}3}{7{m}a2eT&0p#U$Ll}e#$NL8on;kue{-s zy+{YR6`8GKk8BvnQrQwYe;k+}F26L6+1YhDJc(s0XMeB<)Z|MuRndJvvc@dAv26$2 z(QRk)@5iveX7>ISn%^5~r=6f^V0VnO!60^y@hD)MF5P+ESbP#F=Fh8h8Wl)P%$8py zced2;I5=rJK(%wF+p%Np?Od;6Hve4rXSu;*M==C*FovgITXLPw2Z~Q0Xp~tpGmKSI zKhB%eWqG^fjt~}i&~C-dgJ2vd!I<Ihpkt+V&dwl?P*`B2FPE zvA<1&TM+jZ8br1ZWaBf!gc zy7Jt<D*r`S?;1hByYN{*+CLDxa6o_ z3UZu76T=%TGJ0Ojs+g?LGK)2pm}R&GaaiY8$WQVn;8hyuGOfOnpsOz81&Aujccl=G zbLiGzWh-Ks|J3JP+~jMu$HAOmQlp0lit6Qd(vgFK#l=E0GS&=odQ-JPPqiw7ThgZY zQYu&vkEgR2RFgk7u^4vw$?+_hHSg>*o@o@)aHj|8y}ZxK#xyqCN1^MKydjPC>DIJD zBsJL`QonQZx-^!E^?P3$rpLv7*V5QYrYF+vy)d1U6dv1sor5OtJ3EPKSdWEk(f{^5 zoIDRn^v;k?Q<$D*$bM7UkiY`iBJ?Axx?2ioPGN)eUp%4Iql(eE>}0#ScGVOX74-d0 zwE+=$10o`WIP67hYb$(m_79{6x(Zd8V{IkTUv*5@Ph}&0$#{3gACsp{Ww*iDeQ+wX z_$hhJiM8|VsqBvKbcd<mMkyO7jUQQZi|2T5S*^@gZd6IX&_!O^E0axeB;P=h zim1z=V8D&~PAcfitwBV2&9hMa|@ z0$_yUcQ%^kE7RCG)=!R`&Ib3O{c~G7)M+S|tlhG8Ivav<+dQ4!cGLKOIGv>+S8HZN z)X&w+x0%_%5m6hktouP}UURzptoRA90Ox9$N`+ox;6z$3+gU(qoF}7~Tw-RCx`I&? zRPX8GbICqvmR~os;30l6x4{}K{d&}adm*W~0ABCC>`|CN?jQlupaKV5C(9Sjte@jZ zg#v654?XX8o6tb=ssxL$BjNlh$*aE5>m9mYVogOW!yBP(mUrzrdd9XXBO)I1pnw~w z&1wQ%cCM(vl_8pTH8y__%sdZ_ly(ivMKpQ|AS-|d{0%D617!`2VEEt&sB%S#{8AP( zMpG3Wuhu*Vt!;LX0b5hi5v;JdrsO4dLhlf7Y(Yr;W8al5R>h)*-sTgo=I zD+ULI(c+65w_CZ2)Uhp#-FG;fZD#7YgR*5NTdk!#0(M{Pe))@;Y-r%d1MsiW1xjW6 zB`(N4ENr-AI^}lUimat8X`U}hW|54<0)Jr-@yw5)RM{@zxM-TD?5J&25rOKG=q!hDm}WWdcRT}7r4OXZxoY$nT=U!IH2`7Q_UU}6#c2yl!F0Y)=atz0RLWvJ4>kv@`uPGE3psL=I|23bj!!&%ZfCYEMmk=n* z6W(vh>k44(DcK=GKUE_W*S9iK_2%b-KG_d<2TLZ)p;13~V;2~t8KLMqWQa!JVG=X|zm;CcxEIYV&XO)1`iLiP+ z)vn94?q*Ti+4oT&|J);&-_7QLljrVMy6U|U`=Mre$U-(2!Tg2HvhSeUxuL>6dKX>-YBW5p|S{UVke+)CPUx-(_2bAswRe(@p`=TDV$Wy4}N zB#6q?_OEa32R?Phx5_z-(Wklcs>LkIuPB}5iFOG)7h|XKwfy5^h)k3mau57T*LTaM z_pl}E$9K!W+{1$Wl)J@YV&!f*z{-q?9g9N10d(BiY{GKm9Mp(K03PW;>o)4xa9FnJ zQ$Bq>_OH&5$AWjuORX#{$n(Wc0kW)#9x7kJ^aUtZdvP77WF7+m_5R!K%~k;5_U4x_%e(J|Q>D4*~jM$-gXNclJAvv%821S!!3^6-_**>j z>$XUI^M^Q=e+!u_7$xx{(wLz%FTH$$bH9+^TFUZ#N>eAO4wTA?%UD=9?63B3qVy(8 zAM|Yk^T=WCUdHz6=U_dgwTwtDbo$eonZPVW<5SCYP3XIyer zC#|3BT$qSk|0zmwzjpba``POQiZ;U-x6x}2y^8U=VK3olol4}fMQlV66^bvOM%U^J zBdqOar2Jl#*A}s1VfQ@?Iy{$??8-M*3qZ~R!dqD+A1q=~lb@=hk;Rn=?DRYy*xxbT zVGgvsc7PC9(yJx-0FhBiua<5Hh>%KpHKd&bK70_?^J#h1a(HN;k!LPv;{vG{uFTW; z{Y2_#&}I4g<+vrW_8;!l#48ILv*@!yv0ukVIfNK zbLAc@!Naes|f`dgJ{6@r)*qS_Snd;o}giRb!pc2aWom|P@V8h9|1Z`CK0geb1n`;|-XUQ(_ z_sruox5?tFq+3$1_{s8Xc9sU!bJ@-YY3W{+3wNaC0jscO*)ES+#Rd%6jylw0%fK6| ztXrXaRuvWCIBC1QW);>ymHY{y*;8`sDwf*+DcsjaZ?SjQ!M_*?WpW`6S|1<%;+pMy z@{HARk8YRWTFo}H68VlbY@lY?A$*~>e4k!^U=5oxV0|sI1Ptl5F-=>jE>F8wp8r>U z+I7soAh8{i$ba59u$#qQq^DIzT$FpRWeM1OOkK;;*(mw(wafw6Mb8Id<~|}PK7f=( ze&+#*$jeX3O%Jd!>J?Az3w#jHZp5 z+QM$)9dsy9H2*@!cgP49XA#Y7^A40}l(5a}tBLZt5|-9K9HLEMV$-)ZmfV?iQ{HN* zfOtUX_{@~kAHtF6T_fcC9>OJ}hzhytA@&e{Fnqkq9w=q$q#3%zEG@pMA$HegXT7IK z`z_rmB2RI$0r~`z%@cGAah;le9uff?)l7(wp$0C ztZ$$F$3Q&pXiC0qsXo{h+(z_8ACrG}!hW9sB=G3Ev|O8E{JXP-Imc`z1w&3CP9PD&vU|GHf15BTYCxaCtNT$T#sF@T0&{{8i=?||KCmX2G0e}{-sc6XkGBjslo#nyUx zPAP`<-|N}ffhQk_B@#SO;RZHsw<$&leNu$)g$?BNYK@gs9oSkAL<_L|g##5DR5&|V z3ESgxiG%g;nL{`tyKq#`mGM8iaCJt!oVI}tmzQl|&+44`sd;?$O!i=i{LfN0Dpqe& zHXI50mjg-1bS1QkNlLg>+@XX;VyqI{#3&_PBZeqpu?R=#AR_i|AbIRb*?UVV>Z3%< zDS9=UayL=5Rf%q<=nqPC3q`+HqT49?sSqE(3EH{Bhu zER`un#vYEA;w7IX@Bgp7Ymcg`TK8*C*n;v@0g;Dn6%!Q^6%s^kZxl1~v3(&ZDkd7K z=~h9>LxGANaD$>!lMEHqaZBYGm8XqGi3d!4qxrz}8kX7OLPZ^}V#DD6zP0woUE_{> z9CwWS*PVmk{?`1yZ+`Q&)?9PWHRq&_z6xMwISV>ijfCCgk1d>)3TK@omQ`#boj5s> zIDazo2EIv0Y3vmZ9N?^4agWkCS~x)}$0JJPoM~ZssVwg(jk|?ouX6mNG#(btuS1mN zXrnaV7EXi0Sr-@;?x%3#fI>zZDaN9oJik}*UsyrWIKC_xeL1j)-Pmn5Y*6oHaTs6{dPyH#x$iam(ebrN7R)x z#WdtEp`pEMs8Y-dSLQOXH^e?RoS=JCg^2)i2|L&bW)gWj(3{q75%29lZ~D_sqIL(HHd3R8r{S}88g6s52i}Xa z{RUXZy0Xn%QN_!6 z202n?HYm&r3o}q<)+o$M3)2nEgabA3p>^{}DI+0Sc$iN7D)39`2j5JlMf%t5@Wh?_ zyg{CgP#xhE3J1?mdQG(LWTW&H5A;F}vWASp-hhre?03h7Un#{0Atv@^vP?}WcK#^x zj&Mr0T$e74yI6!5ErV|gDkYNZqIi7enk@0fE|%v|G#!e=H;L(mtT%g8EH7k>GJk!D z(NE0zT>oPjJz!gX?%2t=p>xOT@S75$M}U`yV{l?Zz1H9>Qbt6d)b!E{=ps3N@%g;m z(w}n6egOq)mEaLx+#d;zlauCQuFW9t#v}k%6sZB-vi+fp(>=z|a{(K>n8HaQZxZou zVL^?>x(iBzY~=bABgJv2*zp$gTuA9Gb;Qr|sxg>cS{ms;6`oXAlV>6^ui$_CsqFp4 z_9-m~L0Y?`Q$Iwbs8G22rY^bjZ|Bah&yT4y%v|;y9)XU~IVsLNh30Ma_maf8xAA#w zzo>hgJ>#aOhom}d+~~B3iCB6fGy>zqDPn+Ni}~10u~o1HS1ktWO->kRmyeNQIr@JV>D(8YSe|$s*$&HZhYb5wB@as#3RXZ|Wd~ zQ~9}NSKy&=Gi#2L$L#VxhymU*3q4G9X=Hc_XqqPk2XPTc8vjO;88e%lt=DmJGvaVf zg*{WA^Ls}JJagfJ)mblqZmtQWaPbrlG>#}NPX65O4i+qags{YF{}`*pxfNd z4PMqo{!1y{OKFcSEGPN%HavwIl3Ty0(FbQa2m!01zq*7f9aHV~WbOjm6)>MABhUWv1_6KlDH&oHJeh#oMFU(FC?eAi}LZa|3WlHJh%G&-Lzu0?V0D>Sd{Z}* zOOm3*d*CrHW_|(j$X>3ave>X95!clfNy;zrt1+fOQq1PMY{OAVrzNaMk!0g~(PIxr z9}(+C>>jq1*R2yD?O_95-djg1^bt}1V4b+XhYj`H1y%wqFQf@&=ae?eUINm#45zq= zVSCw-uFK)8hWD6QyqASI{hX$ZO}feV(?s!J=I8Fg*#j2Lg zX`*8;Q&KlE0X90G-JOk$r%D!Y3NVn1jqO zrV4k2rRZs1VVNENurE^5rDUKv?C@;GYw7^a%T<@sF9zbYx0@1AGf$~@Sae$&FZLW{ zSTEK?R2^j3S&GOjW4_|SVfJ;`WP~x*4sl5lH;=H7RMB0wLah87D{@F8q00*4a+H?fSx_lP@Yh7TNKLypEDtb<#Wk$ZRrwwgi6f-Y zw|RY<(41o1U5EVAj-jZk-!N6|KgGiM;i;nj6w3*wDHE!Hnki8}884ng+aDssbzr2< zlr{FsezI87Fz0>A{P=*S_oztFNO{k|V|R86P4z@-XaiDe95w^#QYT^SvA9r+wH?Xg z_gdD6AD$xo&#+V$B6gm^nz1vn;`kZtNy&>956-YsuFDbcoJD_chB$c^v)KjW(OHa$ zRtcYTEOt~4HGUDxSOpEka0-=S4i?%Q)UlZJX$^_-PWbcMk{a>uIZSrcn7=)T&#w6V z>TrQ=V#meS3+(xBOH-m?O91m(CN(UsBuIn_PN_ za;&tCSTTqvk_N|I7AG!Z#mNc5E+JEMV?@v;WXeBAEV;zudG!Qw;u0n@B639QB{r-F z74XS6{;;09`(F;xfFE9mPn;i#MRn{&es#P!TE`}hB(*3FZOBXOCWqtkKcH}`(~@W( zX<($kQZIh;%a4=>Emlq#F9uy^e#3ImkS17^Q}5(@tD0#&(R+PW5m7*NBC2z}sV+t8 zWlR|UEOuXJ;aw;Sxn5km%$`-Ri$(V&NMVoF)d%TRr$&=C8>Co4a&!GLa><&*v zA1KVipM%AHi?6V;!yEL}Qqe@g9QpS5DA36HZK>Ge|5&~VANtk_NJUI*V@f+UaF68* zarp|u)G)ki7D)SFx#K<5<{Y^F8c}zkyp235q z#1h?Rifu)}n>V0WM|$Nqh5j1r>HkirN~u%_J<`xs$nP?#JFGYHX}w#bU6#u85TJ%kQfQGJaTpK9~g4bhI6 zdOx~uW3(Bbit}W&x?Y4_X92xWDq?3-Y#ZV{MqEr6kU^6=#rm0*PnVi@n#G zHprle-PIJ2C$W*lK1gN$l%mFAM~GH5{vhsO$ET6su2E7f+CRcmQApY~NVih7MQ{D7 zXwQ(2Ogbeu#Pl01(D@zWcuWGvctdQw!G<~|5hs;6qr~wW%+D#37$wAT7Y#Sq0Ozj6 zxJ`_P>!N!-8|qwl6`Yh8z^%%U~PH>PWT(`8kh-$&C?()`Yc~Vw+J= zuaMGXQqqZXSo9j+8Gay%bg>Y%UlaeVXZ?CV`pPET&G1yzkhuDq2)W66Wu75U3vo)2 zQ1#YAeNZ$5IzgMZYor){z-vW0!rP@8yj+(S z<(Cfr&Q(tFm-jm0@$dY|OtY-#=>YD5lKke{_Ks2tYmmFZd;-3yx#wUof`58+oGu!> z{M6pDYa`#1SuvAKHNaJ%0eArLSzPh}w7>`;7Dxs*0Xu;bpbV%4E&{g!8E6MwXCoXC z0z?CGz#5<2ytt^juc8E6H% z%;Az3@C*|6kCslS{i-`^F zu$vM8OeP)30&*Vc#m^0_uUUJSrPy_I9&Zh1-g%FG(QQC2&XukNJ_E{u5}**s0*pXB z@R>R7XV%nrMCPYDsgDJTFm&)5B?$j9YUT2ktJbg7E=ga!#F+ZZs+Gu$5%O!-#Ln*g zZ7;SSCrAbJmA*?V?<;y z4`B8pA(;Ed#M@|5XDNj=YYsfZ^XWDIUlHP6CgBp!-Zp0*ZiI;Jf=w z>Smi zsI4pzPciwEY@%@&`eA%vk11g~Nk{q?cPC727{&*8O^i{aEfIek#`|L>=jCC%r{@@O z$xykCp;|KJD;koy{j+t6I>nAXIxAH59-yIsHQ{tuks}*Kg8;(RTpv&>CXQg~ifF)GizvlH*I8(`MHRywsZ3GzuL6r)twn_>S)+uu zs48t173rQDAyKPJuoym^2e^bB>Vv<@HxKy0>drO+(v!*!_I;1;k zQncs@#f@fwk~PjEH3F(Qe{01_=p9kovTXFOs(RXy+`gMTS5u`E zrbzD34v7!Ld4S!tYSnKyqDH-NSo5WhVic<)d2hRKF6hJ&sN21MNfi&ga7htMG)N=8 zYzwvebH7&PN^pk@4K|+Q#wQ-T-c6QxZ~mlSup6TLC?u%QL!EeWG-CYmHzn%cP8WXH zNp}G_@mvJ=bUNjvm+k_@pj5iXq4Pk_8?>LR*gJ}Qd3E60(M>Pu6p8wC-%Xqy#rt^{ zqkl~mO{H3fYpR7x!6NuD*FN1Q~K2er0X^rj$3wMCSg+F9OWYb5XEn(wRcEW=`7aVLWNxZwX$cJk(lJ)?Lp zCyxNV9HZ#)X*$(^V!TTK5-Ylm z=0066CFrHE5>(!Uc_MZ+@8ecE|B1b}M7`LK!sTO<6+;d|Yt>Xxi94)XXX81&UiDDf z3~|cPO922m>pfBRr+ehp%+AoBPQSzBk=4oQ?clooiH9HEt|W0_&wYP1i8Y=|ky@j8 z{}f3xcX^)g zwx9Ym@ljk)mp1cHFLIx*)1SuZ(;38Zekd5DNSKX5fKj|QoA-aJBqw30_;fLt|6?}q z!kE$gOB}c3{*EYH!qoe^&pzyZVnSMxB&`LMGB9^f;BIWbRmZj-QeQJJS@_DzrK?Z} zbVwTA4_3F(L?^=hYmi-|NL#>1elnjMSvL$>R1<~fO>_A=?(lvP26{o!nB!PzZePI9 z+F{r6nV0xOmLX0q<}b(4?o3MOA5|sAM6o7UEZ5s+j(DR@;7D_4x?E#t&io*@0$)Mh# z9-zHJn}eezAJAi6iOiCar~c09*ym169B=pd2Uz zN`O2d3&62!op&2mObGJO3R=D+dK~@ykI1w*s%ffC3QSaS!as!{(WGob_RSYkxUa_S JxRSTA{{mG;aTEXm delta 37191 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 !=0) // если данные в Data1 о воде есть, то их надо конвертировать + { + mf.seek(base_pos + LiqOffsData->offsData1);// переходим по смещению из offsData1 ОТ НАЧАЛА куска + mf.read(LiqChunkData1,24); // считываем сами данные в структуру типа MH2O_Data1 + // заносим данные флага для куска + if(LiqChunkData1->flags & 4 || LiqChunkData1->flags & 8) + MapLiqFlag[chunk_num] |=1; + if(LiqChunkData1->flags & 16) + MapLiqFlag[chunk_num] |=2; + // предварительно заполняем весь кусок данными - нет воды + for(int j=0;j<81;j++) + { + ChunkLiqHeght[j] = -999999; // no liquid/water + } + // теперь вычисляем те что с водой и перезаписываем их в куске + for(int b=0; b <= LiqChunkData1->height; b++) + { + for(int c=LiqChunkData1->xOffset; c <= (LiqChunkData1->xOffset+LiqChunkData1->width); c++) + { + int n = (9*(LiqChunkData1->yOffset + b))+c; + ChunkLiqHeght[n] = LiqChunkData1->heightLevel1; + } + } + mf.seek(header_pos); // и не забыть вернуться на исходную позицию именно В ХИДЕРЕ + } + else // если данных в Data1 нет, то надо заполнить весь кусок, но данными - нет воды + { + for(int j=0; j<81; j++) + ChunkLiqHeght[j] = -999999; // no liquid/water + } + if(!(chunk_num%16)) + m = 1024*(chunk_num/16); // смещение по рядам кусков с перекрытием = 1024 + k = m +(chunk_num%16)*8; // устанавливаемся на начальный индекс для заполнения ряда + // заносим данные куска в массив для карты, с перекрытием и обрезанием кусков тк данных 81 + // это аналог старого обрезания граничных правых-боковых и нижних данных + for(int p=0;p<72;p+=9) // нижние 8 не заносим тк они дублируется след куском + { + for(int s=0; s<8; s++) // 9 значение в строке не заносим тк оно дублируется след куском, а в правых-боковых обрезается для 128х128 + { + MapLiqHeight[k] = ChunkLiqHeght[p+s];// :) + k++; + } + k=k+120; + } + } + delete LiqOffsData; + delete LiqChunkData1; + delete []ChunkLiqHeght; + + } + //case 0x4d434e4b: // MCNK + //case 0x4d46424f: // MFBO new in BC + //case 0x4d545846: // MTXF new in WotLK mf.seek(nextpos); } //printf("Loading chunks info\n"); // read individual map chunks for (int j=0; j<16; j++) + { for (int i=0; i<16; i++) { mf.seek((int)mcnk_offsets[j*16+i]); LoadMapChunk(mf,&(mcells->ch[i][j])); + chunk_num++; } - - /* - for(uint32 t=0;t3) testi = 3; if(testj>3) testj = 3; - return (holes & holetab_h[testi] & holetab_v[testj])!=0; + return (holes & holetab_h[testi] & holetab_v[testj])!=0; } inline @@ -207,9 +181,8 @@ void LoadMapChunk(MPQFile & mf, chunk*_chunk) mf.read(&size, 4); size_t lastpos = mf.getPos() + size; - mf.read(&header, 0x80); + mf.read(&header, 0x80); // what if header size got changed? _chunk->area_id =header.areaid ; - _chunk->flag =0; float xbase = header.xpos; float ybase = header.ypos; @@ -222,13 +195,11 @@ void LoadMapChunk(MPQFile & mf, chunk*_chunk) float zmin=999999999.0f; float zmax=-999999999.0f; //must be there, bl!zz uses some crazy format - int nTextures; + //int nTextures; while (mf.getPos() < lastpos) { mf.read(&fourcc,4); mf.read(&size, 4); - //if(size!=580) - // printf("\n sz=%d",size); size_t nextpos = mf.getPos() + size; if(fourcc==0x4d435654) // MCVT { @@ -258,9 +229,9 @@ void LoadMapChunk(MPQFile & mf, chunk*_chunk) } else if(fourcc==0x4d434e52) // MCNR { - nextpos = mf.getPos() + 0x1C0; // size fix + nextpos = mf.getPos() + 0x1C0; // size fix } - else if(fourcc==0x4d434c51) // MCLQ + else if(fourcc==0x4d434c51 && !MH2O_presence) // не будем учитывать если уже были данные в MH2O, перестраховка :) // MCLQ { // liquid / water level //bool haswater; @@ -268,47 +239,51 @@ void LoadMapChunk(MPQFile & mf, chunk*_chunk) mf.read(fcc1,4); flipcc(fcc1); fcc1[4]=0; + ChunkLiqHeght = new float[81]; if (!strcmp(fcc1,"MCSE")) { - for(int i=0;i<9;i++) - for(int j=0;j<9;j++) - _chunk->waterlevel[i][j]=-999999; // no liquid/water + for(int j=0;j<81;j++) + { + ChunkLiqHeght[j] = -999999; // no liquid/water + } } else { float maxheight; mf.read(&maxheight, 4); - - for(int j=0;j<9;j++) - for(int i=0;i<9;i++) - { - mf.read(&h, 4); - mf.read(&h, 4); - if(h > maxheight) - _chunk->waterlevel[i][j]=-999999; - else - _chunk->waterlevel[i][j]=h; - } + for(int j=0;j<81;j++) + { + mf.read(&h, 4); + mf.read(&h, 4); + if(h > maxheight) + ChunkLiqHeght[j] = -999999; + else + ChunkLiqHeght[j] = h; + } if(chunkflags & 4 || chunkflags & 8) - _chunk->flag |=1; + MapLiqFlag[chunk_num] |= 1; if(chunkflags & 16) - _chunk->flag |=2; + MapLiqFlag[chunk_num] |= 2; } + // заполнем так же как в MH2O + if(!(chunk_num%16)) + m = 1024*(chunk_num/16); + k = m +(chunk_num%16)*8; + + for(int p=0;p<72;p+=9) + { + for(int s=0; s<8; s++) + { + MapLiqHeight[k] = ChunkLiqHeght[p+s]; // :) + k++; + } + k=k+120; + } + delete []ChunkLiqHeght; break; } - else if (fourcc==0x4d434c59) // MCLY - { - // texture info - nTextures = (int)size; - } - else if (fourcc==0x4d43414c) // MCAL - { - if (nTextures<=0) - continue; - } - mf.seek(nextpos); } } @@ -330,10 +305,6 @@ double GetZ(double x,double z) { vec v[3]; vec p; - - //bool inWMO=false; - - //if(!inWMO) { //find out quadrant int xc=(int)(x/UNITSIZE); @@ -380,19 +351,6 @@ double GetZ(double x,double z) } } -inline -void TransformWaterData() -{ - cell= new Cell; - - for(int x=0;x<128;x++) - for(int y=0;y<128;y++) - cell->v9[x][y] = mcells->ch[x/8][y/8].waterlevel[x%8][y%8]; - - //and the last 1 - cell->v9[128][128] = mcells->ch[15][15].waterlevel[8][8]; -} - inline void TransformData() { @@ -423,14 +381,24 @@ const char MAP_MAGIC[] = "MAP_2.01"; bool ConvertADT(char * filename,char * filename2) { - //if(!strstr(filename,"oth_32_48"))return false; + MapLiqHeight = new float[16384]; + MapLiqFlag = new char[256]; + for(int j=0; j<256; j++) + MapLiqFlag[j] = 0; + if(!LoadADT(filename)) + { + delete [] MapLiqHeight; + delete [] MapLiqFlag; return false; + } FILE *output=fopen(filename2,"wb"); if(!output) { printf("Can't create the output file '%s'\n",filename2); + delete [] MapLiqHeight; + delete [] MapLiqFlag; return false; } @@ -441,7 +409,7 @@ bool ConvertADT(char * filename,char * filename2) { for(unsigned int y=0;y<16;y++) { - if(mcells->ch[y][x].area_id && mcells->ch[y][x].area_id < 0x121F) + if(mcells->ch[y][x].area_id && mcells->ch[y][x].area_id < 0x102D) { if(areas[mcells->ch[y][x].area_id]==0xffff) printf("\nCan't find area flag for areaid %u.\n",mcells->ch[y][x].area_id); @@ -456,17 +424,12 @@ bool ConvertADT(char * filename,char * filename2) } } - for(unsigned int x=0;x<16;x++) - for(unsigned int y=0;y<16;y++) - fwrite(&mcells->ch[y][x].flag,1,1,output); - - TransformWaterData(); - - for(unsigned int x=0;x<128;x++) - for(unsigned int y=0;y<128;y++) - fwrite(&cell->v9[y][x],1,sizeof(float),output); - - delete cell; + fwrite(MapLiqFlag,1,256,output); //!!!!!!!! + delete [] MapLiqFlag; + + fwrite(MapLiqHeight,sizeof(float),16384,output); //!!!!!!!! + delete [] MapLiqHeight; + TransformData(); for(unsigned int x=0;x::iterator it = wmos.begin(); it != wmos.end(); ++it) - wmomanager.delbyname(*it); - - wmos.clear(); - wmois.clear(); - - for (std::vector::iterator it = wmomodel.begin(); it != wmomodel.end(); ++it) - { - it->tr.clear(); - - } - //printf("\n %d \n",in); - wmomodel.clear(); - //polygons.clear();*/ + return true; } diff --git a/contrib/extractor/adt.h b/contrib/extractor/adt.h index bae687f6b..4514b6a58 100644 --- a/contrib/extractor/adt.h +++ b/contrib/extractor/adt.h @@ -10,34 +10,31 @@ typedef unsigned short uint16; typedef unsigned int uint32; class Liquid; typedef struct { -float x; -float y; -float z; -}svec; + float x; + float y; + float z; +} svec; typedef struct { -double x; -double y; -double z; -}vec; + double x; + double y; + double z; +} vec; typedef struct{ vec v[3]; -}triangle; +} triangle; typedef struct{ -float v9[16*8+1][16*8+1]; -float v8[16*8][16*8]; -}Cell; + float v9[16*8+1][16*8+1]; + float v8[16*8][16*8]; +} Cell; typedef struct{ double v9[9][9]; double v8[8][8]; -uint16 area_id; -//Liquid *lq; -float waterlevel[9][9]; -uint8 flag; -}chunk; + uint16 area_id; +} chunk; class WMO; class WMOManager; @@ -45,9 +42,72 @@ void fixname(std::string &name); typedef struct { -chunk ch[16][16]; -}mcell; + chunk ch[16][16]; +} mcell; + +struct MapChunkHeader { + uint32 flags; + uint32 ix; + uint32 iy; + uint32 nLayers; + uint32 nDoodadRefs; + uint32 ofsHeight; + uint32 ofsNormal; + uint32 ofsLayer; + uint32 ofsRefs; + uint32 ofsAlpha; + uint32 sizeAlpha; + uint32 ofsShadow; + uint32 sizeShadow; + uint32 areaid; + uint32 nMapObjRefs; + uint32 holes; + uint16 s1; + uint16 s2; + uint32 d1; + uint32 d2; + uint32 d3; + uint32 predTex; + uint32 nEffectDoodad; + uint32 ofsSndEmitters; + uint32 nSndEmitters; + uint32 ofsLiquid; // not use in WotLK + uint32 sizeLiquid; // not use in WotLK + float zpos; + float xpos; + float ypos; + uint32 textureId; // new offsColorValues in WotLK + uint32 props; + uint32 effectId; +}; + +typedef struct { + uint32 offsData1; + uint32 used; + uint32 offsData2; +} MH2O_offsData; + +typedef struct { + uint16 flags; + uint16 type; + float heightLevel1; + float heightLevel2; + byte xOffset; + byte yOffset; + byte width; + byte height; + uint32 ofsData2a; + uint32 ofsData2b; +} MH2O_Data1; + class MPQFile; -void LoadMapChunk(MPQFile &,chunk*); + +bool MH2O_presence; +MH2O_offsData *LiqOffsData; +MH2O_Data1 *LiqChunkData1; +float *ChunkLiqHeght, *MapLiqHeight; +char* MapLiqFlag; +uint32 k, m, chunk_num; +void LoadMapChunk(MPQFile &, chunk*); bool LoadWMO(char* filename); #endif