From 4f4674e30b301aea44db1b8ac77edc5a020111fd Mon Sep 17 00:00:00 2001 From: Alexandre Date: Fri, 30 Aug 2024 21:42:04 +0200 Subject: [PATCH] added chunk translations --- Makefile | 2 +- README.md | 18 ++++++-- bin/back | Bin 123368 -> 125360 bytes src/base.c | 1 - src/generation.c | 110 +++++++++++++++++++++++++++++++++++++++++++++- src/generation.h | 8 ++++ src/hash.h | 2 - src/move.c | 14 +++++- templates_lv1.txt | 36 +++++++++++++++ 9 files changed, 182 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 3b547e0..4ca407b 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ test0: bin/back bin/back templates.txt 47 1 test1: bin/back - bin/back templates_lv1.txt 14 1 + bin/back templates_lv1.txt 18 1 test2: bin/back bin/back templates_lv2.txt 52 1 diff --git a/README.md b/README.md index ed9b317..bb79cbf 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,19 @@ > zqsd : move > TAB : exit > p : zoom out -> m : zoom in +> m : zoom in + | EXECUTION | -*make test0 : default template pool (small/medium-sized corridorq)* -*make test1 : more hallways but small corridors only* \ No newline at end of file +*make test-1 : extermly unorganized generation* +*make test0 : default template pool (small/medium-sized corridors)* +*make test1 : large rooms with rotating walls* +*make test2 : more hallways but small corridors only* +*make test3 : long, wide hallways* + +| TILE LIST | +> 0 : nothing +> 1 : wall +> 2 : CCW rotation wall +> 3 : CW rotation wall +> 4, 5, 6, 7 : translation wall (resp. +X, -X, +Y and -Y) + \ No newline at end of file diff --git a/bin/back b/bin/back index c552269962b6120a815afc25977c2e1e07d50ede..ac2639c2e90ccaffbe6b1f02ce7daf903db9a896 100755 GIT binary patch delta 35367 zcmch=33L?27C+q8Gd-DPW|GOiK$6J<2}vMf3tND&1OfyIdssw}9RsooC@=^pgds|3 zbVQ@#g3kpNi~=G8K?IaVHW3vu;1&fH6n&^X=l{D^HIrfVz3=;<^PO+bq3hP&@2#b) zs=Gt|yFpt|2d&Fg^XjUyE`+cd3jeVgdIW0`@@TB6J{nuom$hIi%T|ecV3}hO_#Azs z`eD?RjSE@?ulxFdV{)I(quV}z?C^+Xb7~eFb{o~ylA4a@6&7`HM}2RkCv;7Uq7=J| zwiZ_$s?ST%k4CLkKW(RviXN^mZ>PVGBCDMq5;IIaov)9NiOIayT2WRMooBA1^PP&e zggsdHm&fB3uOF`{JIRUq;spJvm^;)L+vtYa-s-)bYf54_Gxf{>{g=2sYSe(5n)o7v z(_UP$lMSU7Oz-xLzy=Zif)8$SHiaMTTvHOvENm6m7S<8HCLRdy^&m7pUC#F zxD?cEf5nN4TFJSu-Waz1gsbTKKl9br87re0@vgShwb)f?cMZGh>VLiBc(D@!&-Hjb z>)wBNSaHSI#VfAlRV+DQG5=h#OZ#3|6xXnGuKwr22)@nzkfe&DdiYtd%x?~k7r;?m zQM;=d!rjAgDX!Gc-$A%T^^322JbMXOf9V%MW`gPgK|>wfs3$kVw%1Hfv@@ssPoBRz zl6&lDe{UQWORiMR2eUSKJ$X~_>VHLeW9!Skp{!jM-q^uG-sJdsGY_pnTEBu;;Z0va zuz&SnVLUZC$^@r!sOV-8q`q5*3n9a{7sgjcad35MJYhuEZtgJ=2NXvA+v7pjz07Ps zL6R5J2|nore`zv8(r173mv+Yc#8=F?$yO}6sf1PBjaE5SbOQp)<*`CXshyhd(PDN& z^p8p__psP?3t?Y<5c&?9T=tkawm)q9DfF0=fm$j)SZ!ZXbb~q3@q(6COGh0P>MpV? zniTH#z4^~=QoHWfHd$Ou;UQVRHgSR@uuZMF?Sa`uo1CbZU82}k>}{*V-m%PT>w*}@Eg#0WG>Q|w ztDy4S@xM0;`UM8jq57SF_%}+!u+4qw)?xd7FAC4UQGR%kFbxC6N#l0VSdoR= zpS&X_1CUHzJnvDyp&`21--9_(5jYHPkxTe5a!yQUQqVVAkhRrCKVe)_<6h2{X~4vF zvv|U(;uZT@ai!JX&;&PWSfHP?)#{2OK7>q5k9dWOD@!pXihf$HN{r~@l*m1#-bv{! z|NWoS`DNv;>3p&%Fr80>!#|yrP3<<3&G|oiv-#N%|23OVK4SkrOXojkvoJ`cljbjP zI;qc5;)YgQy_xY(us5G_N?PR0XV~^(Kk<7B&59zIG|}^1QYzDKAeH)k$fa@`3ybn6pXvc}OZB`!Bw* zvP|eB+8r+ad~%!6bbsE3XzuJhiZ_I~Bj5WSO%O#X=#>=* z(Mmb~#IYcvf5a89*oWRi_g~Hv<^_z#nqS4l(6D} zqyFP>08BVhJndBS{g($7*Xm2sqDuzAdWZdCmCfc z94URB_@nN~jCVE{q!zdEX9{F9e|`tDL$Q%lv$#_WSwo7xd4QY!mI|NQivoFxBc<6- zXq-dMcOPOY>MDwnvGoRzFAW>J=r_|Fw`>fYh7rcCp;j}Ee-xH^dgD%RQRH~B#>Wnq}1{06~Cl-sHOD!Cf5F& z1nbkc$UiQS)&BCjl>e?mrLd3;3X6fomy99$pXu>!34L~@Hy_!Z|2ZFTfWy}zOr7pI{>=lHslzBMBzY$h>z2gANj`bQa# z?5BW3?3<|Y#r~K;KF*Oc_VwTM!7y5o#@xa`Tp&mI^AGsmFIQqPpjUh6izp!xeT$kf zfwcRp36g3qD|~~Y@65D2OAE+ZZPIdb9s2-GO#8DM;I&N^MeG*zOYosWTM5R4+A3T< z2Q?=Zd*d)h>gNgae6B~ENkwJ!(LtoVl;*E7z#JsK+F+s`DzrmNIT)pNLX}pRRJ|O7 z^rbD=M>mUidhR3LW?<_zp*x0DXz|2c8Z!NIA3y#s!3F z(w;(5@o{m*!TNWwD|SV@1^Q7R`gx$i$MFzeP=^4pbtE=ar`G9zWjV6<7^q2ZDENK% z9N=QtusYE@&JtHuB8(JWhup7DeNf|QeQdT>J>}HPvs2Yqy%@9pO14d1?yZ`fl~FCR z!C7)$oqzkzAZX4mx=~S!6(r^%ervxufcwDj$@R(w+?~B#SdD5K*cM>C6;F7-xb~t} z%noC*6X%+Lv$)dsu@J2PGa2q)W0rD$jVw_ z#rQWX!bmHBBl*Gz{HKU1mfQZjl}6G^OR|z7tZ4tm%CY`_2|IZ{Ae0+RZVkoZm$BVK zvi@iitn5cyAY&%IE<4sa)n8|MpiVtNr=QBPQsoq=ygUy2g65C%HK2bpoBS<=1XxJY zTK;zvYJYu0PNsTgvA!oKMm@7wKbzAw;fciva~S%?sp8s8=oi?G7l$Lq_b=9)G*7k< z#$H)&L4v{_Y=2W9+C0bMDDg|&m!D#(hAw!hzUV7H7D5*5o0`X~Ki#Xp-Q1xbyI21l zwb$>}Z!}LC{2D)WIVAdMUr1uvTI-L?C!9;0a&LfF)LUujq@rCR;}$aY-+rdw*&@Mt zfrOiaD27q1TOrJLH^*QMD< z*a+Z0jZt_&S!lvFcxg5qyEu=6IDi>$K@qt~$9|&ct%8I&KTG^bf3Hnn_31Nuc-z%# zEETCW@3fs`P&>@hTXwi#-F}z86Gir2de@Hkt1ryd4|bfQhIG|)J7uW#UG%a}uiHn> z;2VXNr!mvJqDyAz2?ZzArRDmSg8S7!@6_jZzF(bnr~U_uAEwvb*X2Q$QZx+`MR8%3 zvsH*_`Ml}~tGokMI6h~Zo>%B-ng_J2f1PXCSH+cW>pSo)3;)l)@Abd@ef{pjjMyDh z5q&*_&Uvj}MPG>x$d6O?Hwx1e^)E0$wYvj3Xqde+RsXdx-8`6cw4JJ_bcLhuC_r_^qTJ3>hj5YUH8W7L@HwA zPByE>dSx>1cKd6;Pi7}h-l#a}(%MeeoA*eJN+SHh+8>kI)sr{6RqS(V#>q8fdyHpl zZ3n%!XA||M4tjmhkJP#E>U)ct*cRh9Ejz`@clB#UO=9~V@OV}id6q5lc;;i@hchAc zwfXPr&3iqeKJu=9v{$BD{;vL8uV!kuclDIsZDT^-Bi29nQ}q}9WUolw+1nm| zlGmx%a`OKD`ljB^!rixGSMS$9?cG`JvtN%dZmeeS*V`3mMS5zv;>%%>`mCIYQzG|>beyNx$uI|y*ey^x0d-QGn z#;JSX(IZQ)gkReYUONAxc(LATuG{;+7WPSwU+;Ksmwvo|M$VsabIy89moIQKoe?}O z80+`!!f6p^M0j_ozUA9`%7Ew|9|!?CJ`dGrQJtS{V@OumAzkXzbBEM3*e6`zL^8gya)rT#*?3VgaYN?n8fb-ni%1=V|OfUZ5@k$yQEbk)()pT{^{ z>iTV`pI_6st_U?i*Bx)^_R^@7l|JD}Dg2nfu#JRcdXZhfm`n|Rz#H>OId>(UOtn1%^mKa#AUUjrI+6*lOa<UzLm z*Y7)c2U;JX>*pQ%vO!TPQ9j`yDV*gm{DctB4-kH2hkkxg+K}226h-uY6y7bsiYtY9 zTy=Qw2@He!lTZc!&&iz>`o)4wZ`==X!-wiCxBJDd?9f{di;mbRa@)#lfD-`-$9wvmR`-BxKyv$$tmp8cOwE@Cc z-r$y*Pxy5nz@hqBf8jMkI4wYUg%EzUiP!CkQux&xKetna@GdCycRN7{=lXp>d(LKXL+Cyu7^T@%f&+YHlOf4Qh2Vv@Hek>%gzAd zFJ9-Cucvt}=SblYf8ixUI3_^&ZXxXQ318sRAF6+Po1fcJLiiOZ^mp4Pgj0RO>!fgd zf8m$6akqO02tT)tyZu(G*X{07_`|J!mb(k#&!EuXawj2N>Jz@sQ+KF-vcK>rTe;;q z0m7%Ya?9VQcr8CKh5z%KpXFIXI5&98 z_`O%T(A&&-MwQ;*EBwewDxQAFpuBdVugRuW-v| zpYTd4oa8TDC4{pAgx3h+r?7(-Zs$wkH@En?ohgKCq0ry$6d|1N6RzithQ|#4!h5%H zx61;AcW!~(3Hq5a5y9V=koD-xCHhZex~QjL)^l%*QC(Z~-nX4qYhKoq$L56I|1wPD z7@L+}i(b}8jvb?RdRgBw_7ip7OZxiT-wWx+oj6o~?L~e3xFmJU=O<*T=MwZ&6CP7nZq{c`d|3VAIbEC7T7C36z2l_DYTurE z*(67%xhHv6y9;Xz-&!;sD#(rV&w1CP-JjDpO-i>lHGtqMdI3vJTfBa9lB0MlI*Cgg z-$PL*hyC>a&tX}Ie-5*2DNy=zSXu4QVc|uGU0SaIa)=*!AMrPf*E>v3QUB_$kD2TU z-vV}Ei?;q8mb0%yJK0^Yoa{(n0ql3}Ri6V*fNb|8*O5!PaeC`1DXOu%K75KJ{B^LCODBX&A9vGNO>sCYfR)D} zYS@Dr9&9-Cn9so`c%4T&Scs$6mHXzkaSeOaRa9MZ7P%eH6L(iPMZwddzrXjQ4Fl!7 zOK23C@6Tg=+J43nCuwu~soRKY!lk8fbwU52E{N1^Xi)b^gSzL0x|V+0KF4(D(mpOE z=l)6CJD^x1mFNx|-Yuq$_a< zU8A?r)%Gu3i(T4k6yk|NpBv#cU<&O$D=t-Bpziw4=JivPI`=1bdL(#L@R@H2Hs9+& zG`=?T3?{kyUv&+;?wWrC2NyuU@~6JGZ)1JI)L3b)nl{Y2 zrYrB(MK{o|wI#e_*XE1T_DU3WxZK(~qp17bF0pQ4e-0Z%BSGs2oJ*VE1)XLetI)~; zxU|Vsy@6A-RSH!{P_^D%p$*{F7pO|iPXTaVo&wc24Qeph_K~p#>g6GXy9P3uZN|;< zUao!4H3X4{dT98oGwHv9>;3x{CAqX80j<~vOJ8$BS1(^a0QrQMhA(2ZYmWir9aAhI4IEShYkx!s1MLvpC-=Hc*{xSd& zxHB4R0wZU_oYsi;9{Du@F0G%JuRDN-XWOL|{Z5Mh z5#SL?krOqUkd+)&M)dHatHgAVWa5~5!c6t&sdH(|V6CF)yh~fafpa*~;lLS}HjM)( zT-t699Cc|m9KhW9DhCd@w9N(jS9f|6$Au#Y#bGn|)sMytd6))z!&cFaU&5B!`iHNd zk)$>c*Bvu9jA&#>Y(^D_pOw*JfN_TFspDsK+Psc*&U7;jPk=?Q84Uy}m;k=XVIy!l zGYFW534LtsdeTz!#Jbj<~~3V zr^LJlgiG6o>pz%SAEv)Nvr+sKuh4QSG?5EUCbg{wCZMvSKEC4M-guDfQ_pxj6`BU* zpZ3(eMEt-E;&-QsSP$f7+q%mk>n;bayKG!{nXN0XEZRrY#%+)4I>wC}?_ zmADFgJ8z^jykYQX#k(%;H0qU6@4*UOo{S1R(crXQ%Y;qb==e=Tt5Z;@3gE zRqrf6y+>_+4m*X%PAF#Yx;o!SYK6a^Zgf0%7zke?M*mH3yr16r{(6PlOsMTv*~WxB z#^Iuh`koaRD?X*%_d0>3+sdKN;%Yk+1)fyi)lP3Z+Yz6FV>$k+f~_6!uC{FjHNTyH z`)r4`9_MeIs=bu2yJp9SIrE9>BCb$zDPOnFjSJ_;J9JVfI7jB|=VvDbZx%ey=j)!? zjjj7}NC&drrG*Mb-?k-1MS`hUzCLhHqV-R~$5?Eq<978ESeG-L%%#b~Q90f{M0?AaPh1 zpJC;HYkm=A(j5GE&2J#bq&Y@tj%|yO;_~=9^C%ggSpb>zAEsM8iQ*iUtoJIM~tAF=717nRm@|%$qZQ=G=09*Rpwy z@0e6RuS}t9b5V>Gm64FDX?|aS&H3Lsu3g2mglqr%Ux6QeB;Y|(=K232`^Qg6L+hbf zq$L+B`o#y5^q^IVPI{MmBD~tP+T&RWxNeQdvkB!@l*K4Nap3_V%F>5Co;s9|p)?v5 zrQ0m?y7Kmp3*D7T>O_aqdc+=KE8%9c+-fk{!eqs&3scN64M9zj`- za_PSyk8;|JkS9FKqbQGJReS|y?N*P+9;7Il+dQ7UAg7}A08k2q6Xh(FpQ2ocvIOh4 zttf}qcsyrNF2GU84U}_m*b;|{^(M;pC=+qAR)%sr%7rMq;3&EpWeNJ$K9pB5{_0Sw zIG0y~6{Q7A2g+wq7CHgE4PYF~k5Mi|`3uTTD0AO~0+jPm)}ee1r4j-|C>G|al;=>cM%m{W{AB?D34r(0+hF78)3%H z;3~>YlwV=rQ;hQEuON@I-`9{wxeVnCC?7|880DbvAdm7?62j%Bi(0Ney_z|54JOsW_n`i&D=Fm(44-v0hja_I zKcM!onN*iG2%V%cQ0uU$u<6HKjhtHn-H(A)h0@1qSj&i&I8Olo8wT3?Tj-TO`c>ek zVgQ!hLhtRP+f_x`fPvZP7J5%FJxIv|!#i&MM^}QW6kx)m9GnGk!J~SMwF#zm06!4m zR)C2c^_jq)0Jwak{vg1s0Ds%4zY5Tf>0`uW`f-4H0Kea){|K-Y;G56rp_K_uX94{8 zGr0d^m^Xxb(@5bufLaIoxqs;cDwCSN0r15aJ)S8*`&iXGd^tP=`qdZpkcShT*8yGz zE7p+>tP40NPhu2irJ$EQp3(kvb+}Je8_>IhKIazt3{H0dHx%>@pqu@ZShT{R{>51= z-1UWETKKY_|6r1-8sLI0`ltsJOuGRNenr0r;CX<%U(p`}coX0|uj#u0Hby4$x9Xol ztPtR1HTquC5^)Ai;{Z8d8FpL5NEk1n;hBhcLVxAoWIyvK`k7%H$gFf(o(0hX3 z5A=U-GR)Z%!7v33Mg9iVLa&F)O3>GW-qfEyzQKX#Kwtkq95?{_gP>zK*$}`$A@6{F zV52>H$od3RIl%lqdKSR70GI92`vTko z@TWccbbvU;Gy0IvZ2YOnqhKr8NfP4?*@0L%ecyblbGG(a2o=^;AQ0<_lZSpe4p z99XOO1-J#^$oKT=0FMH6oY2<*yaKT7g#HphD{h6;Pv{>2%mMi93H^J3B>+QC>LDAT z7vQ2(dKSR706#m;C$cR72cFSGAAw$g`_AZVz;FfNhL7}@09tW}>~vQD0ALQlx6kU| z11te};w()>P0IluIqUIk$Asi-Z^JeNC7jZ|7WDC->U|$hGHnI8@>8D2697N_RDTdD zy$W#SXZouE?YN!JKF`5CfPFsKe+0G^;6oR$i!}ot>1fioK2fIL zSX>kGXF272{|u-wn;8 z9s%6Us7;$WPchCWR8~wkBG1M`!H^UGCg4bY(6d<)Azu^7Od(L7MQ~J2*#1?_x(J&Y zEhzpPFxmPu?+&$v4Z+z&bXDjX_#3Gk4rH-Ny~TkTbEMH&LXPPr2l9~;H45``$Q6j? zl%p#|>KhJ>GDoV$N6@^n`fmq@vRJ*}dr7!Xf3G{Pue_I!>sJKVWE}Kp3Fd<^5b`=R z1S31fu{d+EG`BwuRZ)83(fH8lxr=5f)>h#$&}WR+ryOl%i`6Jv+k_gRn(OOc&DB3T zn$4ngcC0n7ZI9iD>yBd&;@ayt!H17e!8Py0(V^xqajs-HGD8H?V$nB#SQu))I~gcD zGu+Ej-+owP4PU4)S(xZd?dlTdRV5^i@e!~2|P&WX8Az?19cS)}9%FitT)hVE%^ z$qYlW&a&tsC%cli0ztNi>%&f#gqrt}6Fr#W3g>z4iZFN?Im3Y zm>~zf+oHQZDrtq7PB2RbHB$H@<)i@P)cIgIB`S>-b18|PW`-GDEck38JD~SH+YH$x zLLD<)=7jss!fJ9VP(L!mglIDH+u5#ZF!6`f3lo1zt>F_FDmMk}2-nL#ZW?NS1AW1+ zsD^V~bnVBy{cI}tE-qaE>SMHDGKC(l8fIe5S@hU*BdPt81&;&j9Rf^O%nuP~ifZ_s zb3S|ydAkF>-JYu&7Q~Y9m*-j|j@VBS$FCTu_5#)L9w!X=1kPMY0IEneKgMY&UrjKCVitb`mTRyqu`m#c;g zsI)ka{?Xn(TMc^y27;bPcbuzQUqSwZmSFhJQ=={DcR_8C#rbLsKC)DT5<$FMjc$yM zM(&-H7NN_iu}`8B6phP5HNk|g9P|a?MQWmRCRIkEa*rCfn_wLl?o|_dqlX6lg#NNv zP56S~#TcVY)cBR?ra_y)vs8_VM0`P0aB-?J&k+0tJX)qk$3iSf!Pve}jay6bLs$te zSL2QmoDBR5HNFwD9aKtRGp ztX7kUqrrnb=&luN!V!XJ0>4I$PD8?iW}(qsYUBulk7Ic1}kn*ir}BY@p|# zks)!!WmiI)p)itUq{TpR)JJK!@kiS1AD|LFZK4txDwRA0LS$Gd;mw9kBoQ7m3F_^J z4WzzNB>g=3tWt(H8RUc_$Ye5-aazNu3`A$wgf_R z3&DzEBITe3w_!G1>x4=!uUHKgM9H(Z;Mr+H&bPF-ZU&*a=vjBoQX*T0_D01KJ!KM{ zY0WE{(K9B^P$Jt{CxMcugsgz=JU#P58cWwpE+m@LDb0$kKVHBuBw@Hk zH4>F)(Sf7V1^gh!ZB!Ehr$cj8rhwaFC`C0Ba5*`YBj9R+TL{>h1~^y1*#x(YsK$s5 zp$-!EIeF4b5X+DmXH*;83lzp6($H4Gvx%u)I2Q;fe0vVt>nTO1V8gO)2ns*D6?$W} zU_+)C5eGyZ5IJ7NIv^4(!G_fm(Td(eVU2>@VIBxJtlOp!sIxomPlKy5#PYmic|arq z(Z-7?0Kx%8doQ9Gh!h|SyojMdqyh1$7cmZqbRep|h;$&D0#WEilmn5W1v?Ery_ki- zGy_Yq7qJqEEFem}h*yBfK@K)~5pMy}9Eh!6#Ct&Gh6Ee-c@Zap$OEFzi%@`QWeYYa zuk$pjN}4|QVxzRU4QP;3&)f6wb^#xdo>|i39C}5i? zj_1J=*~LVCx()FWi7)i{MQO7x9QTRXgN*m1wnoghu}f6jP-3P2t~f4}%Fbq*Nap>6 zg8U!hdu)5vMoVa|m_*XnH$~@~C{#X0Xj;NHQQ|5ns)D_NS}<@lQm>>0+ZqULh>cXuDYplo%6t(geC+Oo{1Glc;uUPr}&Uib7%4>LjR*Z->k8 zETIlaL)A_vDMvk%qzzSXI3s4wo1;Xi7U}?MRdLEUV2@NSPEjvRULv*LCbj+re_>zo z+8<-x&`#Ksj7r3G#j1vre#C;EEk8cX?D*lsiNLXA_5GeywDG@!o-hJ6|K@ zBH!^xaj9g%+N14 T;OCP*KarA=O<;cj>z66WHCTSpk5#`4J+=u8K}(b| z+a@eRt%;}=L(xFSZz*b3dBijw!&qy!4WpfY_lp8vuO~zEK#HgP zj#`Bqz&5aEalg7q_PIWG=MU1cEN`Z{V_Duz3%|0McZ^0%n5AT6YmF&Gt(vMNy$bPE zuKNfe`Zee-hBb;g^%m8sx2Sf4>aRP^PxpV&00~_80I7S4Fo7_imAVsHl3zX(SX2LW zCa@MVo#b{SKh^W0FoIM&m6NbSzXsiZN!<~*=#IEmH~t=ypYF&8-7&8~;my^^IsN#_ zJxW$R2MroZYtfsHgkTA3i=4{MbWtr1o-kGUkId}2lwnxkm>6H-s#UjJCrU57aIJjA zoBg^&Oa=m~FTgB8KmIrYC9D3*YqUPW&!|!_dvtNI6Gp%D8f{8OfA-mol`(j222WG2 zdnXy(6sqCU$(I~t5QnwCd0;vQGmrD6jB^adi8Kob$|%fJUW>`j*c73FsPv<`0ERyE z8M3}2Ic5q5qF$2Jsc<6}k?)F67DWCa1|X}x>UCq6j9j>}OGeJ!c-y+j$vg76C=^0SKx*kThS2i4^Ax=atp+d;gic(f z;3yLuYSqM0OpAKHsEku$`k|ZLa~(Gg`u)e3m_1OE8kP?G_cRl{B|Q4YGWxRQInYf% zG&281XUH8nK$-GyTV`gQj;Wvd*nu&)fO1Pc2) zM2N*a;J$Q|i$~w+$u;)#Y3yKvMyCJueVp?lQZjeW1f?L(-+E`hAy=ykt>dI!xqP8q z_4MWn_uYp{Q+vMF_8vp`6^0Aru!( zXC;*wZ4RkZRL z%eaXlL12FZ4y!-n;!wh;=s*9Qn?hgBgxWQ-_AGJu%&HWe5>~5s|0TUmXWaKginT?r_{-1`vf9XLe|l+3_yzs3U$UI-h8)qDVP2GuNQ5$1C(F(P}qE@DaEQQsY zqrGvr>2W=h9o0u%Z{{RrHN6E(30GD#NYskCvYOGN){`r%nIvk8@f7L0OVrH9b5y%W z)a;g^Vz`bUeXvYFZ6L^R^1e!|StVp%23|_p(*q>BF@~b)=*Ozx4w1n=o=L$Ps$Ot1 z+_)d_z`J?XCMS>m@or?uP*v^Z{yyGMR3CM6haVp%svDf#$OMeYkEj{&$UlWt*YX$lZ^U|j)o1#e?n`TS%p89*gX7{-RkvuDr#o95{o|Cnn zS|8Ll%UYq<4lzE@Ylf=bPVGE8>%U}mr&C+6clgZ_G#nDH{6c-)Z_#LuyMOCcK+WOe z4PdBxPQ>TpEnuMNsdZhxCZN`Jd7Hp8u2BEsw`?al_>fI{%^h4PYo*-5Dp@Px4z8EA zV(ye6H6GA6{<|zY7H*U; zmUrqD*$-ItP;_!GP%Z_E!Qc2sKj*(-pj<{~kG&!VcS%dJ5Yt`*%Pi?rnRbe5@gmN0 z?JTl8D^t{_DwdbK2*IDEJeOT4Wyf&Yg;I7Rmu>8lW-UhZKzc*lUpnZv0I>}n8rLj!MKGKe#W`nuTvcceC$VLb^KiWZ1 z`71^MS@lvZ6nKAXE@#JLqb);U`{&$_WG(j=YvR6y7EwYBAf}Cy+U5wQ&=wm`+Vl=L zXLO>}rH6_p9H)eQ4{wt^a+NaLC$NkQU~*29U1F*+tC@cBW@qO{_#gkS6p)#Qg_peo z@u{K@O;u7Sft5v>ylbFFKJ7fPs5CF5@>?VlgEs=kD8b!gpF+jV zib!|g*!`&3Su$J*9uoUCDse2FD5Il(N5#SDk!0{~)_zc($?nfm+#fMk9Yr>RR~d|? zNxTw}w8f3rDcU%;)9F56At zfHXiY0jF=)!Ay8Z@G(?%&qB2NS;!Jgr87wM|O$E?4L{uE6OQ;ML+R{z& zU>hbXO-yvgFq~P6$!b&6kKh|2NEs#-d}X4NX`-$0NKt8Kngy$)L?z3#0hH0Al5JY- z_83?jD@8n(J%iw_$J||wtV4%mO|YsOY&e1twC#|v7B)^qRAC%$2gEpQv7KItVgu11 zt$lf76&x!TJlahpx7sgoX+g;@#9~i|x0#|0g4%bxsU|bD~Myz3>tqy^yF+H0KYhznQFg=BE5RK<}5F)NO|3J8T|JyeC?;ofRu4)%xpB#Op8AQXH&eGwQo5>pTwoL`ji^=?}b z8yagztJ+_;QeQWQ;NNo;dw9KjVGwJj7G}A(1hF`0ntEa)(D;>!0@Ke%aL4S22We_7 zIg80KqF!=&H+;5fO1f$z-8l2bLk@ZXb1(aDq)_rLG|-P#s}|^@h3UO4tqgwB(*WC? zNpqFOECjlp5HC!nd*4zPL7`*Pw@sTd1s}LXP}pkKINO8?%6(!ilBwvQpe&c|9VRT$ zu7`fCdW_dnE=wg#c&@+=<#9u(mU26-ymrQs9VgCarJ<=xG(D?o%En056NF}{u7K(g zI%8?dl1jN(QAcN<5EvH!+|Ph zIiJGEfiN@EpJ=ACq3)5vY=HR=pbRW}sQWe4g4So^jo&whxQ!vKrTWPbce@al98`u@ zzT9Jo`?e6)NnJ3+{a6S~SDl01`$AY>Yh(uA%H|rc4syp>SUdHBLGFPT*3xc-*bzRk z=*+%)kb9klr3OX7-h2H9x!yD>MpUebn9ARwsXwxQukuQybtBCaAzi#y0=)-373?*>#QtQZC2_w+E|{|35$wWvXSr{9t=J$7x2xF<%)yQ5yPD$wR zzMnAk2S1Eh&0rkUq5v3#h^Hu@hG^x5S-oXW8nA z5_g#$P0^{uU1et-@rU=_$LuUeeYKzaPdjU2dmm<51lPH|pF2OCbxCh&#mMDnA@@Qr z{W2$s@)yi`^jntXel(oD?FVzDdQMWFa`hsk0f z*vgMPZ1X`iYqw8`^1H_{oMT%Sd=DKiSCH zNUCXl-P}T;!e0ULKh*F))5x>F)dDeww0yYc`@|a%S}Kb1QcV6G!lfa$$R>bip!B*%nG|0Mo(a%H6L;vpjX; zo$iZJ+kwq+i6<5`Ne8p6^1+-uY%_oaBuT5kb^^)>~QImw-vz_M~; zFdAqlatvGIbUu4M0LSUq@Cvl3_e^!qO<-@bJ9ji|#GYisAciOpt+3vf(oG{`#$T8sngkXk^Tk%nKKyKy4x6T<5)FdE`^+?B|J z&CVE%28BI|_X%ulE|xcqSP)d2*+=cMz+%^dcd(p1Jeg;Uu@y{ZcK}Xf%UdBWY&hU_ z)*l+0vh?O~mUVzsCOZqb8T%8|EcPTGyJxc{Fc2v|z76Dwi=QSo4?} z*On{{*H$bB*VZf%*EZ|{sB6nAam{DBz_erexVC4VaqYmKgNlx<6_sc;CctU z0Fx8gJirs#y|_+d%W<8|DsY{`*5NvpxpAGwp2T%JyA1w2*=E4yYzwY4SPiZ-8U59| zyI3u*v)Ex=XS1KdIfs1+crN?BJ?eN8UIeC;fatc!{~&^nf;O0drU+{Y0dB|-B_Ic+VFa{?Tf+$$ z3*0_cnU2?RvLGfWSVN9dTJ3f2AqrVub5o?&h)RHp;Llv}9I1u&g}#Q^Rk z;C=w*1Uv{}1_5pW&Y1+g4d^Zc4gi=%z%c-`2{;R24gp^Pm`lJ|)VwPNI83M*7oVS|%a zV`wZRj2nvXBj5lA^!)@l&C$U5^x<^e2jpj(DOI}Z$eKs0p9_5f`CFe{Uia~ z06YaFg=#!#n+O#HjZYKM3L2jwU?~(mOThEsevW`NG{;r~CIhpLfOFt^oq#D2uOZ+G z@Vr65BKZ0y0rVGpwiB=hq#Xp*Bl?}Z|Cb|sZxQM<#JY=svoQZQ0Z|BOHvvfi-XS0p zz#alNfM+iO-GJFgKtBMr1k}Kf{RA8a&$|TFA$bP~cnLk`Jpu~RKnDRh)pEFYh)^To z$6*4d!pHXscmqxK0Ra|d=m-Hc2OK5f8vw@$=njp?2{;1g4+&_EpidC68S$JXU?X@= z5wH-zX#x&`bcO)uU`#b15flm9Sprr8_?UolFr6ddI*ffnz;lS~Qv!NI>N5g%fag2` zx3|X^u>?#-WOW3rM)Vg6mOfFVNN9NYl7ZK^xqJ02C;riKs>k^ z1CR`oO2Eg!7zh{$9wPziP^1xH2M<;s@B^t1B49WGoPidqL(oxz3HTQ?3CrWLh!a2Ga^NJ^_Blj7z|+GGjWzF)(8V)Eb#F z21+$%3}U|iS^$yAKS4%BW&<20m1H5zXctI_x`xT=_p_X5dG#+`6YH5osHYX*~X4Eba- z&IOBRGQI{ACX>;Q@flMC$q6V`D8ZkLrpasFQTRd z8)w69e9H7W<mJ^z+iU3eYri04~eA(*s&y9goSosFRJOZg6*hU)}){}8r%#wcGY?a zJedk-eGK?G_h+5hZWgoS(E|1<3yGyC^qtZPzqkt<=8WlTLVz<;;mU@_j{_e=aL6Mt zA4cbS^qs_~Kx?%7!FLh`5XZ9*VDO#96~JaqekVa(_)cOo3cfwYcM=4L@$E6bljzk1 zbZn6EorF+AJ7gz5lpumx+XQ3yP=em{wQKxCiAc^DuF3BtNGL)R-${h`gABezAY8~7 zWRa{y#u_e@MZQhOmlIEtMcOFi%ZXo9_=*bua)K(VMqf@iy`N5K@1cfICrZf~v0KKc z6Jt;diI`Jzi8tq@apHA2tKAo`hPbVmAX1n}yg4pdMIn5&eKn4DiM7Z3FurNVrxW)zg#~I;d^$m}qWOP1q4|G0p~+7t=tU^IMmuMGI$@UEPfhYU1}{K}0q9 z<%b0kbS8_>1=2IXI>;T-oega90=ji8ok~9 zPzY%KBG>7?DCm)?1c52Zh}>xYe}6TrAuChCpf5-Eyq0%l%ak=5QvX&4fqsm($P`oz2wxT?zXQlI^EC^~q@5ubc}>6P8*=QL^eq z;7y(*)y<13RQ-8*fRb$KSR1%2y?Ks*#({ue$ zxUcLEqj7Gi+Uks)ro7{Q(HJMP2rAKy31%xn@6P9Xlqyj`A-()fAM|aF7jM~34ab{t zThm2loRYW$lbTMVx6KnWlj(?weyp1QBy_^}nEdoq;^)46ikWePRq6_@f#HW`ZCvO! zus$MdWuf#ptK70y8cI*=H%hllLg`J6$7HQIl%CZ;E^9qQo%FE2T2>1~>mm3guhGi^ zp-)2cDOp8U`$Ke-tiIt4{Scy0%j#CAlGF_mEW<%N|J@J;0yANnraUb3CPhhFkK5ji z8FRow_pb)lJkGjMnbE+iAZ4Rh%of_d_bI&_oCyXP938z0O@+gs1e#_?r;FOS@Z)bP zqgxXf4k(lmN@3!A7^EX8`*Bj;ox(n4|2SEmuuvHxUl%P8$BSVjQfa(EH@>YLktN`X z__%UJO978ln(sx1*bv^MPtFqF_4Ya0q7U8Y8gZ)k0D^yA4h~iwPV=k#uU@P)d_OiP z^gAL7Wvl!4-mF{l)|sO24LkBqrA@RjU7ogk=8nC+S%JY~Qw*UUQ|z6z4i@*gVipzF zMlqN>rm#+y4wgQVYMeWBICErKSU8Ia!ir0iRIn2jOD`|R%YU+%#f)#G^p2EDh$$Ra zpp;wb6WQK^$;)fTrzkQV@3D2U7(y|@MKVLE#nRD2POwN!TU?%3g?NnnhoP)7i*=tE z&Z69&;Vd=`ejpG=fpEY3m#`-8M+ULz?4%Z~YrL13V#al!B>*ZmEm#Maf=|Ggm1}{B*X3+Ul5Pu7OvliqU5%g;Ynlx7j4r*;W1l~j}QyF zNYZT|DP^%N-`%Ybi;8Z?<;)_>f`di68x3HsG&0`tk)c?;^c%n)Ge0tdMK_L#g!`l< zmN5}*LNbw~Tr>=VXD?ufXJ<+Dy5 zyJ$h?6s^&GEp?vObh(yYrsWoBt;`Wx=N4Med0L;z+JG``us}sk){>`a!OJyvU29Y5 z?mL$K>dfq-g?|hkPievP)wD=0?&%epZKbBo(;~5gHH_36Q?XoYLd8>BG8JY?EbtOJ z>w0hPf3hZ$0+$wpg7wvG&dp>hhmg5iD=L<2DO8-*x>Hf06$@lPDz<3(R7}=N1&!N9 ztazoB1i9|z!i_#&6RFd*jOCivS7XRiv%qMb|Nn-|qs=C7bG4RKIG1Z}sobLVp`uJ1 zNX2q(ut0XEVzSnriUMso6)i-={NF?!*v1)8YmK*P1qE8qeRnA1^z^fx99nJ zl4_}MiVD%3CIt+HjNwg32zQGL+TE7BKwl5FSOtB?IiZ3rY`Td zW7VD5E3&(Hti6jpY*aHR?MR!)MjF%-&AoI1JFYgG;U2J%{W>(#5c-uCVJ_2b{j`*? zwe)rHC_;;T<^Lsa#ozg?({}V;#7<_Uh(EmAmVz3m?K4x6Gb?(E+64(p}n7rNCwY;5$15^=+AEbqf98t!xWn<1!lM;Op*A6Sb^9i@$KE?_p;dWy(M`f7DV(rBnoAq z#0P%OG*03J-$E#t_`q+fmbq(ThHVhVv+irC_1Pnt13yYTDe<$W3oouqXXyDhC21t? zZ1h`zg&h4Zx(DrJu`Lgp1UX-}QIw!6m!()qzCd_C8~vR-Ujp#d zg!^QM9TJ~RconA(0h!O?{PBwS8)&&ZQE1^w`uj?^CP+QqI9_oF?PuZ6fs!fkE$i_T z|B4izEQM(eOGvG1yR+s+Ge<_H-&vYF=jv&k+#4#&E*iDu8TX{L0MN-GB z{RC;AMsA4>z_@x?jhR&*tO=B~DIo(wLGbd-Hnf z-D*iF0G@K46OikHlD|&QZ}PsU4CiLpbYApXBDn(J{BudX-!THW_qfFOn0x$EI{e^ki-XmH}Rsx2YvN@p352IU+o!qY2>j@U{;V=-bPg6G z2c+a_I6~9SYS~lKT>N**z3nKA4e2Mv5(fV3)KRAX!`{Jt@;K{f58RFHX!If8mJGWU zUFPm}lD!(pTju`dBd?##Wjaof3& zn)gE1W~$>aR%U$}`pamAU%!mjB3RSVsWAeb8dKGiHD#&pWdg5T8V!PO)SgvON9C_5 zYVdcNxzo81n)F`u`=r&b`Hw8GnrGN=RJ(PpYGYYqQy*!r9f_o=To({`Zf+e{0M8La-hsWvhuCNsLRqAV%8%)CXH+ZJtctSg_6hw^@rM(z4N21vne$F7nDh`wH_ zr8mrTln0CTkCW7oloqo`S@VCJhoYd0E3 zH*OS6TPzgP{0ecw%&|Xfxfx5qmk-|?TwL*8@sjH@?=_G9 zqtj1ZZA=V$Hh%&e%vFu7#@4a2N@ zsP&SA%p2xet^GT*zB+WZme?rEvie6D4s);8`Zh}JvkqZd=wN>N%LcC3mf zqeYij6*DM)0wTJQXq8?aw7(lA=DrS^Ak^=GUVDQrJ?L2a2dd;Py11%@w3d^Wzt{cU zUaQP@d)@{OaqXod5Z6vYe2WuhTw72xii@mGWwq)yONc*G%f?heoEB_jd~F-3jrOlB zdv;SH+N_p-BSFjx)=#~qrDjJBU$Zi(_NMlM%BEsi@XGoEi5de@k(4jm1>^!r!B{qR zCS(4j>}f|y$({ikk}{KuKvE_P;uKDlNg4O6b~!sfyP06+)RNB<#Oz@Cv|lxMn+Tsxxlezu%oM~%oG1fv-=vCqet-=m=3i6<0>2`N-*KXpzx+#3Z{f`` z2ffEX7+w+@n`@bQUJzdhHuID;^FtTjv@tRP2FL^wFt?3%rb%M%#R`7{`nL%r;P>F} zzY7w9mTufeOKR%&d=DBbR6|9eLf;7Dx11;|bm>M=g=%;I%|iU;S~gw~#215YJYCxc zb^rZM?VjO6^nqIX_X}cauzo+Oe@$5%nBLsQ74vJvyt*ItF0L@Wv7D-e#|a(+O&i^V zZ>KAYcwBs5gSu3hPC)Re>9hxh@2Ke*6$j#wu$ujX{|+}~+C{~x=&$c5>m@X8y$s4x zGHiN|c*hEz(1NKYz%Y;U>GWC*(mD|YZ_(Z2XNuXGql#}y(OtG={@suTSB{#xgC(9` zo|-<2>_+(9BT6C#UqgzhGx z`y3UkqMyH~yIkseyru;~%6l==m3Q$^IY76XL_A*n&FwXve}a4;tEt}tnT@_mnAh|@ zii!)x6-R3tH7D{{f?ORSM}Q1DPKWY=tEiRNbc4hyju~pUUDdkfy0f$3Sw01SZ~`v& z4z3m*=~Hs~S3P(sx&_7dPiU37scOO#+RofG_4mhtB{?ih=HF5rFVZ93YdTJ}dRj{J zP&Qn1=S90+gSju!QH!tOAsvFsWf$G9I1KSAk82M$kB_)Mhzr#`l&mP%%3#l+CFjMu z-xOq_d-dBox?x;btsJCH&C5*qU?~zX_;T^+kBbj|V?wuc>?)3chiywWmLH`Z%}Y&~ z`(H#{5E)4#DbA~Z;c+iJs$=zuzqFkE#_lZxgTg=X4IcPKmywdx>pYQHmuU0y3^2|M+k*3$F4JQv3iMiK0h_9ZLqb5u!coPpI}-9(Y&TEOSF`h$^GjKR?T~; zy6g!9F_#u#xj4LNQLPii{Z5B2u9kWY7@0qO9*3(e-HYxqU+R?ekj5m3ajTA zYpYwvChQ}P!PoC)>S&>h*qaw?2U^CA^VVS>cI+~hg0{RfEf6Qw=B`R~ia!551zypG zMqkg`A`JB}jKc`n*`HF$=aG!XTH99fs(rC`U#sM%*B8|ah-_N;01!4U$BJsG8rL#l z{NN(3UqZCDyH!@k%iJFCp)0>8??qT+7kvOvEADZof2~;xQq>)IwCsXh)woC-Q4pIH z32|y^%usEMuFN|RyB8OV9(cQ2d$J%)-SCz6Zb8%VyVcYjMYk!hh1J@ff^KoIanj%$ zg3P@aeTC-Hj(2x!b6U5FZb<^GxBzBiE^zKk?O5y2lal)>%1y_JqUxItXP=szj?zOn z9j+n(PLrWu)qyrAkM>R5MIB6EV4aDMrYxC%M44m8-MSzf6?kVJCGkk{ zsxSj=6!R5<7&xP$A@&V_T-G+V>#5Gato_(-x%%tpDAKB)Z9m~OZ6#n-1x&tXI6jn15< z{odt_I&`M?LD$FC3p2ESMUSh!XK0_I_;7mF1Kn1$)YNIvD2j8enx;a<6v0uqW7R02 zs6yXqn!VWF&k~Nrd^EjI}piP8e&2xu+J`oVo z684^!S{l2ZmV>O+F&AfG3+kRhk_r7)PY=sQB zvx;UyYBLoU76xqnQ`)+EC@7>M!q!dFt$>c4k_Ozf<-BJrJz#6Rw6!AG)?bHsTu;}r z^*dx_T$sfDaeYAR2VTbp(pJ-8TbsD8h&FX>J$Fc3dw*1Fc|iFa4jrrc_+U__ibNn^ zlH;ICb+{Ku=Dk3i0b4IhTaN_W`r#n2)Z#j}zJZLaRL(tHJ9GV&8ZK=m1lw9AY&EQ7 z>xp}|3hvn|4cLm8w%$DuRL5LyE8;lm2Gud^;FCk5Qt#&YDvu{srff>xHz+IB*6- zwdM_SiN~v4;iJDA0`4NDy9w_GRr~V0+V&CA5wnCI#tikRV>O?=t95!XHTAh>{(2wb zW{%Y;!OAm)vb~OSxlqmxC_f^V^>>0ihYID*Fo=i)o()3zgQkAZnNqoFu=1vNc-U>~ zC_ncO5BtG@@+BU_v6}by2YD_K%4cCP*mJH>{vC6k7)UFn^6+5g)BCyS@pY6x*v~z$ z3MhAw%D?Ul@;pu``(QBG^MgV;J)nGpSKwI9ieTlx_HoZo*HQj`ANRbku|MpWq;hJo z@;ag1q>l0`p*$duo zyi6#&>nJZ2%0&U?Q#^IYYW}$=DC}gRyc-6C!;Tfomubh(r|N}LxpT1cTYGreed{Q1 z-NVD45m0U}l|S1ZP%a247faLiu!t-}4=w_hU8r!OE}g;$e5H zqr7Ps4|`ldd5cs&@m7%Mjzak&3ard9-ii3&@9dYW2r{ zs;;Th{v6vld?cj6xk!(W!BtxRxZ!GSm8OmROl`MAoBYuGp(lAz$7)V)*V>OyR{LzP zdSLu@RqeP{>oqaM*>Wqd$c+OEKK;~WZq*h~%u>gsX;B^&!))sqB4SQ>OliZnCdQk=r?L|imEMB*{iFT}J4-AMc zR`M2Y-lX)fU-*u@=rycKpLJ_*OmY|BMU&tK3XF_%{QTifN7e_l@B0h5eHm7KgDXE_79z=H*U8Goo zsz`+4w9z%K=9X_POC5e9JrQHeMOP!Z&xd@@Xy9zRB9AX;ErHvbK9#xq3WF zYcPGVXMHhGP|DC2zRDSc#|nRujy}YA)PEx&FgVA8h2518!@QnDrXEQl;j2ikTu6# zQ9`xfL$&`0=xDQ_L?e-&~1w@YZ1iL>i9XzDkRC=EnQ1Mk3*FktJV-I$%E z&7B>Y^I2!7|Kg%;oVI^X^?R2I*`|m$1-osY};H#qEhZlrA8wfjdFKDN!HGHAl@fp8K zEWtxQK=Ul18`@|Le0N>d*x*enB)gW+|Mp3{D}(K(0P)l|{542^!=J?bhhaN6oDRb^ zg|!3D2{!y5n6>RL3bH#t*se!Jyz{)z$KLa{f0E3KczvDd)z)Vq1QJpHA9k~X>^2Ox zE6hFsvz=DunTzonx2U3~YsJ?Umnip-;k}C z9`309_-KN4myp@rQFA_)X#Y38E7#!>&# zs>41;KR)Eme-;){gXcP+21$cw2+IiG^?zI53pQEa8~GoWe?Xqea)z*+*#T9G%i-%U zCe2gRP?IEKr|LDWp-=EM|2_fWfV(dSQo#$_g?Xu=_{MhKf^1pdtJ(z1Cq_Bc^C&%hEk`Sm;3o zSB1}40=UrY^UXn7g3^t$^-8S#P;Og;#RbYcC@-UYZmrLE7v<$j$Qc!7!;=`IC>Loy z-x!qVQ7%P!_9>t5Wt0FZCPnG-EDWGLg>nqaQP05u z%5PD=jPmJCFo1H=W*8tkN~0Np{sa0bi~a|l59Jn=<53<%xg4e8bz}wQ2$Ub7JcF_Z z<;8#ceD)BJqWp=aX-5=Y_r|x+lKNmmh0+c&YmZEHkhM$A7Bg$t`4nw&IXo0?NctMQMT=w;jsyD2Jmwh;kvyk5O(! zc?IP`l>N{{t5L2%sn`_d7D|sBz!D6}LX_Px5tO0agK{Ct`1fG|<#3b-QJzFujj{~y zpB1~Jyob__@<+V$E<|}AvuPR1#-BnTyI00Lt%Cc11bhYxEtI?Y=?Z zL7De0`VPv*SI~D*KKUK`4$AuY%4>8W(=`Tk9_@ctWT=_TwU1XcWv^+>n-PC-na_t7 z3S8-cFd&spS|@J?yP-|+)>mUzYOB4;>}l-{Z+*5?I}1|DYVCJ#vKqZci&>eh7O&A- zu1xkczyNuMLAg`7^9i*}nAxB)dx%BBx=vXO`tuk#^8p9=>KtNo{xPod;7?UC zz*=DnsKST~)X=ciOcFc;FmQam&vy+qxyQd6$j~djihngsJsfYqC|Hfxg27Xco5SsSq?*+X;Rd$0I>f7S}@_dsBYnB!h})#qDLi~o3l z-wu2Wrmj@PcQ5cnl>{g;!@;*=3VXJe{yMJj#_<4U9t0NC9EU&x28xy#3=4SWdF?ks z=IR!$;o4*~&An%~X+75_m}&YgsnQ+>Xv9R?ZKt*ZU^>77JGIvVb_MwAPVG3rF#uoO zsr?J!Qh<1iLEy^(^_@ItM*vps)OuFJF2IXBwTA)H#QY`6CaafV6O^u?oPy2DWb=4{ zVQ*ci8-^H>gk*8jm@34S8@6NB~Dae;Q)0{%n0;WfrX&2j?hVu(Ln zOMGlV{5tq2z+Y2~zaqf5V`R6*1LR08{(%6$G5BABKdlzOocJDIpWYD2dE4h3SxaDe zz(6_p)4=Z%%wNFSTz@6_>%jjn4mf`c_}_uA1?#J;VE`kUX8;1Fcso0~mcWQW0N24^ z4}KPUS)gAU8W>4{^zC?Zy@Ds(_jnTB<9`$C=Qjqw{6jnmYuO)&M>PzSf!+{!83Op4 zbkD#f?w|9^!QTb`kYK(#C=lRE@P7t>SuOtJ0DlYk_u+}Qrq-0Sf_eNAo`AsnANhQX zYYEH`%vsmL&p7$NPnverd_DM;wE|cf2%s_e_ESFJty=t_n*{`VL!cT0$7%^24)Dvt zUv?UgrF3K=r1Azx@3F z&R+|D8I~gBYPHYEK>KV1|5YqW{xkoLMGrdzf!GT^Uv{l5G~`)GM^HDwPy4Lu5xtGM z$~ixiY1^JJRcmHcg}(5%LA@KVZC7KosUgO2RZ)9jmZxecCvvnOH>KMz4D}OU?V=^U zlx{ye*-z;GfY#@w^r$Vf{e+HVxu)`uaI#pn{-wuNmR^jUCdPT0D9IHbn^u+K2=5So^Ba4|Hbf^Rg7hq%g~?s8hpVF;geSQ|)k_ z!8VgF1m5XTOp41AQjnx5E@Mc06d4v5voKV_rG|9I9P82^Ih5SdrJ9zdVhVl-v$G*H zu|Kqp!|>+F&?xF@z?nwVgvm1%<1`{=#dIR}G%ULejpN?}?9%#g&WZ^AjzDG(h4DrN zM^rfuFJt!fmIyQ?{ufZPw3pr+6c#qng&I|cpGUkd&2S`(xwNK7Vk|DBu{Q;#^*+)v z!o}1mGQho#8x~!aanxr@upWiW&>hTRMZSz9oY-AAac+X~2(9o$e0b!Hxsw!ob5{&J z7$dcZPBagTHc|bjv?KQp5NWSaS9<|;V?j8m-7Vdd@2Wrjgm_}aD5vmMD=JHd83wZUh5hg%O)5M7wz zI+uC#?4odMGM;G8fy_{e>f5yrAA^*Oj^G^43~n@xT|4=4bLM>VTwb`f1^S+IHZ#1* z>7CC#6mI%+wz zY1cVd`BPeTj+vv}6|mc>m0oBVZrzE#;8aw@MXtK?0&l-Cl}8un)UI4W`=wCTU8-R+ zMxkAcy*Py0FGa|>Vcspkbj7-cBvVzxA6)XOi^$t3^nYhF)i4{c%TyeaA0{A-EoF$e*^iq z%*TM7sYct-?<{%9;w&|06~RehKB7h^Vk6gd;@G+9GHUD#KrGR?%~2D~=*pI_0MAvE zJd+6-3gl5WZa={qJUpf*bVm=h{EYrGPfhrW;CUFM^VRsJ=%$v9kXfL{M52C{hj8<# zF)tDP6(U-wM#nS_WqQ=)lwk;)iA}LGNq}K`g3Eaok zloWIgOKWuNC)AWOg7+ljX{)AwN$@0iS+1tshX%L!&|NFkgpUZG4EhQ+x;_$SnTkg9 zs*(2-d>_yIZ9+=*mV_=0hy~rCUFG4oD@^6PlI7JY$hZ%{5-i`+0Z!`)(j<7=M1i+M8a^UP>+P!Mph4*vP6z8pQ%J<*-73hQjs0807#q?N)d%N z#mz`oBO4ou9uW%P1(8jiCJaBr6!Or_MzCTSLsB{1hsCg=Es$J}*bNoLX>M=Iv(tcr zZ((oI2ug90Q>RQ-BJ;w#193+_G#0_+b0jlz(%4B#WJ~*4aB`H;CGg!$%lxuFOVfIP znPg6*RFBpAe;JkC8xlqeE3%a_9dN`CaOaFNI$r=1Sw42M5@nJ}(6)YA-xF~Mvd$>0 z^D^;APM@wsg@&dhds5gYs-PH2F3N7$39+0>Bd6kd6!tLSFc(HiR74m>5VnD2qM~Tt z4vQx^#!iV1dxYRv0hf_{yntUz#&CqPz)|S}UX5`Z)j+`MupE^s;8qw)QH=zg z)c|l~0e2_3senE80XGwHHo>_O8!%!+se^>=qez+yW+^h`iOLImjjG`w3;6<`MnbJz zT;XSe3pgBJ1Hovs)v$0oDupZD4!f}?t0B`*hyx)GgvNftS`ZR!R>N{h$W`En)w8z3 zJYY4f-LCbmc6!1$K`IeyIexVq5RyU2^Ap;E;0B?PzFLe z2pjx_bPyVXQ0OO=gOFjedJJ9tlsTX@f=IESuoQ$W5PJIwZ-CGkIoRkYybVGV5VrXV z?}N}R)M_~BC!7T#2ZU-rK>?w8nAM={;AvD9w>IMIdi7)0p+RB_C%Lg6q%NeyyoBb9 zNnbz&S_~>N+J>)FSdzB?>jY2CK$7luoS4*tN{ksz71{1{B2dp%Vorh()A>3P=%$3K zuo`1Q3&eC)Q~lKDU&2ddTQliIfm&Zl>JO2~LNoR0Jdz_8U+D3h(qgR(&xzQhjQ68F zBWBy!`D)l85~cpGBwZtu9W6AG%=|9~@_$0?u?1=vEvik$q~dPh5S?p`F!>^pX;E8W ziK(DkbvRJh3I>je%q#9O@D^}w4(6XL>43BDUGA}CbCq4mc;#va3->B;jOnL zMp`LEZRkRz<$hn~jx@<_=;uDHO!7xM-qBQY?ZidJfBx@Wpdam+Q1A!FVCMZAi=ZRWbZkvGh^9_lOZ}1xw zf05W2+eGE2gv+7^C=pB|!BChET!-I}gNqJa0C())Myg~M|4{+&$z_z?2= zT?@e)qr~@vsY`s2|Kt`X)&(pLMfIp2mr{iIaI$nMLm;KFdlKnFQ|Qh%P*NBp1P z>;AE`;ON{0Df4*1#}e`}Q#lt;4;r-+pI^2^@Hmg?_Y@&EBOrZAMs!?c)>FwtIxbU7 zAa`$wd0^i<^|zK&5V$1CwepnI6xUGg7xb20BwO%KZ!<7N-nGJ81K?0dqjhwOfi zeDCFU&C>4tK)lPP-Mz^{8Qk0OUIynVdz;DxQn>r>h1&w*?%-xC@T8#Yp4qRYS=>5vOfH{hqqZt>LNTE=;D(&%0V!OZoV+#X;9hQ7E>Dl~={g<*6(qT5K;g!DF{Dvg!Iu&Vg*hc#QHC2k{z-9QWpd z&*v+24Di(Hh@YzH zT(I-@eAlE_7COqLN^GvwL1w!8GlN3`+8aM6-IqeUyn;m9PAG%iBtK2`i@Sam^e&YB7l0x5s!n zFq|pWtuTwdDw(oaX|HO_vXi{ntJ<<7&I5^4%oLG%DQ+QT)z;WZ^f1~K7TB6Phne7k z_NumKHiE@o)t1A3h`p*Umm^}YYHMyk&9g&$Ra*;tLl2bVth86P<%K^F#BHU$sx6-* znO54X+FEMGzfNbZw0*xW>_j^?dt*Dr9Zownds6|^PR-to!^yFrJEP2t&|y>(meX9v;r#1d95pP+0{MJmp z&_H|iw`5kXJ^Nd_TGLQF@LNLMeRza~E;lBTn?Ff;E^dmeLi^>nEYCM^7<%5E+}h%2 zgnl1}cjjw5Lk3q&V2a%U2_r3=&NL(gc+eWxwFH*O!>=4;?AZob2Z5Ct|HuPYEU@9m z$C?8hAh1%rXhBF-H#%ZHNIo{AR&=oq_gl$_w)OW$9?wyXLJteD%b8YZx= z+;-JifhorMWO|CgEXE~-Jt{D#ExVBWQRvsEbeZm;_HXe%Nb3eAG$jL{cD`u~7Unx8 z9Nma6wqai=k88re6Ngb;>pPJ}L*)h!4{Uuefj;Bmk*yyr&~+Xj+WH3ty4GW>-;Uc; z9>;j1%RWJQ!9`rPa=5KoJFWWPNor9$&G+wmYX5dx;_d7nVTgZov=Ava%>nkZ#JZYp zA^2A$R%rSLyjMA9sNC-{Ed%o(65Zo5wb$0(b|*2&c!w5n-^y|s1lvHLgOK%;x7)U( z+Ie}N4V5p8+Ie}R4V4>3?Yx0ZQ=5AInYJx0(7OJS?V*6zgo%I$@qpJ#tb_+#DY4!> z;3p+k%;VK0*45M=?XXT_g=m*QVRgx&RwD3cMS*4+h{Zqel1mziE?KG?r)W3+C=H<> zE0k}{*ZSRwc2J)!mjcD$&$!deGXM_CWlfy1PSl#Ny`oTJF#=3OAu?6QP->b_SiGoL zxoHv1Pt6qAc*S;F>i;bDx$YdPJDlszk-B5JZseRsLb(i;8wt}RV)C_;KSit~GDKx4 z)|r3y^7NA1%mIGupJ35Y7SSE;r&gAjQjwc+F@Ko&kc7F7z`NAL=%edTQ6N{Jgv(rY z$t3f%^)%9~*rnCqQ02}08fw)=cI}-WR;qOAjVQGaceBU$lJ*Lvy;ot)L~#_=ildi| zqfD_KlN!CH2A3Wnr3-n~r9n}DfT&yDZmylZ8||hBYt=LmWjV3hQNCz@Y~0yUGygTy zGY-@?e5S^;*|Zv=x0P6lt+0h~deHBC4}{yx_CP?PU4b{bA)o!0z!bN@DRb0BPI1LX z(rhB9xUOtYuF|98)C6kz+hYZ_oTLz zzw~g?j%7;dQ&32*FBOIb6c%y?q$FAPi}A)!GPMFLB~Ry6!#8~E^vs_z$6e#gW|E1Av~yes1?nVxd8e6@?vc~!0p(^y2+ zZ@wffW%Njuec{N*N=|Y9NRAZK!3^D}vV8W6o^N1H!eh|Utn;I)&}A(wO`mFD?Z>5^8NZ{Bg^yL4-;*f z%Y+=$&!XZwuqOeVmm!uyX60>XUJj%az5{|`F<*kI&dlBmaXQTzG>U{+lw#-xffTaR zmGvisPeHGs2cz#s=HCJL5^9Qh31oV+2ryi*xDXcmFk44%u~Oe?V)350AWok7A*y7>r@!2)SuUIVfF1k%v_EI9WIB*Xj$kWztU znkT{Z5RN1(jm-5>x1oZSW$p;pFo9&7GxYn+EYD8W8^K;eP3?2^r_HQ&%A5vR!VEBc zgbJHRLc?B|m=uE7P8|LwQ~$}#;?&!CuBCN)^LFI5)W9)dYtxgs^sPtj>-W^c?yU z6doG(E%j-Zl@7#a+XmRe=u1$zJ&vTDih(}bn`m_%9;QcGSP%71y8fVrH7uad0uH-D z13!0qCYGGWPEdD*hu=EV&(#uwuq4EldxwGB?IiCW^$LV9k0eeJ=RVl1vD?3%@C@ z_WBqr8x*^*5dzp@r#@>8#lM%SrY=oCZDq}quYnn{hFu1&4>1W)qUptQx_WE4o)XHU zJ(J)fU5%v>@pOr>KL8P2a#~WtCMXTmFfxyKT2Q99%kx;+04}8PGfx271{G_H7@ElE zvHEo8m!3Ca)5p$G=Ce>?yD*KOTpkudb;leYHeu33%0l2&aka86Z1iYlu^3k5Dw^JI z=df@42v4-7po?u7?)Q|#(#R8DnsP_Een%zT5zZ$FM`hemp5M=SC7RyDXRw9bvfkXr zqT@4IatV)Oypm2YmZMl0;Xn4)%WN#ZRTOI=*rj3gdL){;1X`9h4;ilKN1@yexP_Vj zM55>Q*03>BHZR|rv$pDbE|9Kn?y1Lyv7YvKk-_uadQ?w+QW$HczTQKBHH_st--MTs_;5h-A`bS@ zzYk++A@9K3`%`-8&T!T|zl(_y1f+w z*u^Q;#rip-(CjnpFu5K#UTRB*o+NW3_=3qJYESP@AM7`wS-F4l;>a!R1 zeI(eSyZ*C-mDalo6U$|IW0dfn==jsP{H|{LC?{*LUTvgraEgEL(l7tNvyLQv6_7y(WUS!Jik^ z(<519_2Vx3fJoLfY$h~V1h@HW7kyPE>yRFS1*(fbMIVD*x_Zm;^lON~|4Pt*j%52h zRu@(weDfa~c92+d@4phD*!tV!NW`g_z6Oc!{LNtog6(|g@0bOy1^a%d)TeE~E1Xls z7wXUx5Eh&MXf7i@Psb2!QN)%%PS1^IwB=8OH9Oz(*E>drX~Ulw_9840JXcBLu-NVg z@Agx}JtQtR`{p!*m+bJ(e#2O#fN%BXPTw*|ksE!>T&0oNj$3G(pXITWtk~vfMv40~d%y|q?sFSfQL49nD{zELQr!F0%o3ZxESUy^4 z9SbP$f-)oJ7ej?|nf0^L`U7z+DQz*R%Pf@rb)$s*t$*+>B0$%9tGv zZi43Fm1*c9KwOZ9N~}I3h4l#KcvJM_*xg4{nAPGrguoTn1Kag5mW+i%J+`AYMhjbr zHxE|!BIs^*0Us$-SqA87EDT$i`m9NFMQOko;BjB+tHVWLv>@(PG!XC#KxhWf(jR}Bl@qm%Ts&LO`dvR~h4&mN{eSmu&%Y{NdE5N-a zy97!r_BHMWtOobitRGCYVP7EVwyXzs_3hXlm~PKbA)pSd0o-?Fb_80;UPqROu~+al zb~rnW;2vNV2y_JdrMU+`IAfh4TE<*pjAU`Rk75;YIhv&a9>W^qK9)7XeH_cf{UO#C z_wlSV?h{xK+#hC7Lw+JF0bI`R$9)nTf%{}O7WXNv9QUbg2JX|?^N^g*9tAvuyY0v0X-O3f0X3u+J(~=}%B$ zLs_U+0l2g*LiHCo=t87B0J;)jK%$Dc zG_ur<03+OYCtx2a#RNQsCg?#x0dn4xfQexB0>H+giXL?y=zWMj0!`4DfWZ*xN5CLZ zN(eZZhy3>^Xf}8Q2sjJgKms~Le-Hr|(6oaI_!jZqN5EeYzMla4lU1bzOhG3YLcm-A zLkU;{U>E_b01PKU2Y^9esBQv)i3FL;MgB2$6{>H6R7OA}IKzxrsE!3?6ah1kcFf8M z7S6^JunAQkN5E}#z=sI1BVpqShz2l$fMfs<6OaL5A^|x7$_Z!lPhBgz>AC#8~IEBu&jQ|%Y+X+|#nH>Z~U|duYPz*ae2}nn*ZxJvSGP?-K2WvM0 z8fw3X_y1UA?`%33EHTXITz@x?@v|~h45yuAvL?Xry33w2>I!?eY82X5S zf1>s$2&jb2NdkU^`Y8e)f$(VpzC_K=5KsaiX9?&EuOAaoAHX>Rrh|2!0MB0_eL~Q? zF!U(_^e2Tb5D*KYiv+v~XP*(!4>h|)z|WBRoPbe~xlBMPBKv}XNTi{ffEEb)YXagS z{0#xOA@eN(7PQM10u&Fr%y$IMMD4E<;6YFMo`55eW(>e_cvT5lj5rJg+<|E$0jE({ z69M}mgB1nhK&nFsU;yy8uu%OQiLnwe0F+Py)}yL60$R64C$|$c7y4lY9EWr`0ew*q z2LVSBkduH-2ocNrLbV3&BM9&!`bYx$Knq9y(Jc^kGyxYt!S|R#^%+=>C7?Ab9Y?@I zXvGt7q$wuV1cIJK8tW0T0Ra901LkK8#UujEaF$HKXE2mPKpOyV0)9ng_*?4e1o`^1 zX6zHs8B|O$S}-ycW-Layj2SZ_tuo_j7&b6t9wdy+cnBgUX50y)nHdMdMF=y#4s#_S zBBzRKd;+b;RO2c{tr(2kP%wjWJ_^-fd=?4@gE0gmMuTxS@@g^|>$gHO6{GPAwVTlx zg#@TZ<3C8$XdD2dVm3Aek(rI75t?c?K7r5-W@8A&WHu&4#AG%Og$uLUxDS(kh}rlv zf+;Z@qmZ)xX5*je00Yd%Hoyj&jb8y9WH#=F!eFy8DIb%`eP-hop!b`NjSy6++4wzN z3^5zC;1I8WMnZ#y7*!N%h;b`|Q7p!9A;~PpiAafRF|H({)tHE|@e7FMltZWSTR2pm z#z>epIF0{9S#}wp1;$*)UX-o~<0RxFUU3`$L`s?4xSra;W6VM)QWhHP?Y^1I`dQOy zN%|$Ty^~B^8lBCdIo`mK2fwx31s z{<#CY#6n}}GjiK>qMs{dgFVq5&8Xm{G=#D)aXskK1cyEi_YQhBM#rl!fozh;tJ^_c zG0{sk9Iw6(*kY2$t4RvSt6xFEH?BBdO|XM+Tyea*TLbX1b;a>&VTAUsEpfh@7#7n; zIK%mBIw0sY@$=QuT+U^Z$E!&x!X%DY>tA%@8`x{)fNx-NzWN1nKwDUxul`jd^d~p)r%U!1GOy9R}-w5g3ni*g3ni*XiIHx>c{T>jvQ=YFTB-1I*SL<^^+NvcshVd%MQKb&RTFSj^_btT5`V2eGStyRZSp-) zufm0ypNAJd(_VfWVfbVW`p8W9ZH-{B25x~Gmbz*OWihhIX70tR1$6&H@by&NyjO^tVrnX9~4)SMnm4oTH4qC+Yboob;PMUWooHU^E#s za02~7$9~Zp(N=hGlR%SQzjT3>xlX;M^lL#f?AZ>%uXjUTII$HU+j_;A9ET7#A410xnaUJdE73?!2=fd`LvsJrHEmTlBQ4 z$GQI30E<+8V-NO#>*`n`_K}n>)x&$TPATWd3H&=rj-06EMa!7#SC890xhHF9aF`T> zrA;bpYin)m5vj)M7fM-UPhM>z);f{QfUhWRQk`v0ty7&W6005vg}1Q@#g6gq;<5h8 zQ@Te=V`?0xIvaDb2njF&;Bnllg+QDgP(gIHo@9BLX)!3Au@>o*3nB>iSz zR$t%Ki#b@b9^MaQ}a6L{YSFj)D|7|gJW6x?&)J$ z2cv##0_$3D>NryZ7LTl_DG`PGyeURtCPU2bfe*89nR+5;cR@LO!KA+0W%tEtSZ=b} zyT6#lo-(SvAJ{$fQ8om>eKzW+=d)94$Fcg03)pW)yTSRw?ivp}o1uUH4>nXE{2J@O z`|a0Qe*EqmhuB7@mOrgO`5yjXW^Vn^d+b5ixvpZs70GeeO6z2dW#e?$X%?%O9bqNv z#(aIp5!Ou|TA<%K!bVshlNyP7?nf*|U-&+AXLXS3iPFlanBF54hf?>b?@p_J{C$?} z@qcr`9LKLeq2;4p57*f-bh@d$FnJ)AhF_0I<~}Fo>z*WkL(=QM z&)%btgqi)Rn6CO{G8p-~7jF6`#J6*p^ zH~t?9xj7Z*bBL~DkzXg}7CrR?78~!vV}zoZETb4L)spo7VE4$D?7D~b+DrObsU~N8 zrC8D*>Lu(M(nHA8#)qz1lHR9S;C}j2-Sr`wXf+Qqp8uX) zbt*M8gp~jO56)&sL{-j8TXhf2d;UdhT&(50X-JLXobGXeGKHlJvSS`lsrZr1l8d)R)%E#>AA( zuLV*qPBuqFNna_PKBfNxZT76dUK7RJywGnPXU1p>xbE*;&T@YI*V1&|U%6Zt>>aWf zPmK^R)1>FWIom@gUdZ^zT?BomWJgJQ-S19GlD;HG2>M$zN7B>B3VJTDXTdftA~p?rwpM2+LD=9YByE+NQ9Xsm z8mYM_An~D;;HNyn^&j&5!Y?uMCn@n@SE1~mW^aN{U9nUKjnwn&u9UC4XK*0-B=7$% zpwcJ`-8eN?-3>-Bz5gkg8zI?s*N2lNy;V06Exk~o zYmTJXT^}#ix0AV5U{hZ%tJ6XorCQxx$rjL^|K-{7Hji%Pr<|Rj#O)B?{rAtMxn11^ zWw~U04?5+}|HD#$?(Rr=qnwH+N_oZ~p)8sgJ?PITQL5@57HKKzbyw!yB)#s3$-cts zSW(Q?bI+i2E|S8_<*ZjKL#WV4g5BvEu$@TUaG5yCRbG~AhEal2DH-(lmnhZ+4+z2# z-F1eg#D65o_ZIYm{W*`t^P^vI_1s(yIFtURLn)>rS9>Md z{?3VxiNlTur$afSiI3S zNYd+`^c}C~p2M?fwq)1+f$I~JUiZY-Q(P_oP07ABTzK(!?tPM8cZ>W!(P=8~aZyUd z$R*DTVL-Vi>6_*Jc0|$_fKC&P|Ci#(BfnPZspna2=p*3xP%7OCH%pZ%V-3f)&K z&_nh0h#JHP`)k(Tqg9@YDQ&r<#$2H0yE diff --git a/src/base.c b/src/base.c index f71bf5f..4ac6587 100644 --- a/src/base.c +++ b/src/base.c @@ -265,7 +265,6 @@ bool linked_mem(linkedList* lst, int x, int y, char** flag) { if(lst == NULL) { return false; } - //printf("Searching for (%d, %d) [%d] ; have [%d]\n", x, y, x + 16*y, lst->coord); if(lst->coord == x + 16*y) { *flag = lst->flag; return true ; diff --git a/src/generation.c b/src/generation.c index 4330a4b..bfbe332 100644 --- a/src/generation.c +++ b/src/generation.c @@ -114,7 +114,6 @@ void print_template(int config_id) { void rotateLinkedListCounterClockWise(linkedList* lst) { if(lst != NULL) { uint8_t newc = (lst->coord/16) + 16 * (7- (lst->coord%8)); - //printf("(%d, %d) -> (%d, %d)\n", lst->coord%8, lst->coord/16, newc%8, newc/16); lst->coord = newc ; rotateLinkedListCounterClockWise(lst->next); } @@ -145,6 +144,15 @@ void rotateTemplateCounterClockWise(int config_id) { free(new); } +void transateLinkedList(linkedList* lst, int dy, int dx) { + if(lst != NULL) { + lst->coord = ((lst->coord%8) + dx + 8)%8 + 16*(((lst->coord/16) + dy + 8)%8) ; + transateLinkedList(lst->next, dy, dx); + } +} + +// ---------------------------------------------- // + void rotateChunkCounterClockWise(int chx, int chy) { chunk* ch = gridGet(map, chx, chy); if(ch == NULL) { @@ -175,6 +183,94 @@ void rotateChunkCounterClockWise(int chx, int chy) { free(new); } +void translateChunkX(int chx, int chy) { + chunk* ch = gridGet(map, chx, chy); + if(ch == NULL) { + fprintf(stderr, "ERROR : cannot translate non-existing chunk\n"); + exit(1); + } + + ch->chdata.eastsig = 0 ; + ch->chdata.westsig = 0 ; + + for(int i = 7; i >= 0; i--) { + ch->chdata.eastsig *= 2 ; + ch->chdata.eastsig += (int)(unpack_coord(ch->chdata.lines, 6, i)); + + ch->chdata.westsig *= 2 ; + ch->chdata.eastsig += (int)(unpack_coord(ch->chdata.lines, 7, i)); + } + for(int i = 0; i < 8; i++) { + ch->chdata.lines[i] = (2*ch->chdata.lines[i] + ch->chdata.lines[i]/128)%256 ; + } + transateLinkedList(ch->chdata.meta->next, 1, 0); +} + +void translateChunk_X(int chx, int chy) { + chunk* ch = gridGet(map, chx, chy); + if(ch == NULL) { + fprintf(stderr, "ERROR : cannot translate non-existing chunk\n"); + exit(1); + } + + ch->chdata.eastsig = 0 ; + ch->chdata.westsig = 0 ; + + for(int i = 7; i >= 0; i--) { + ch->chdata.eastsig *= 2 ; + ch->chdata.eastsig += (int)(unpack_coord(ch->chdata.lines, 0, i)); + + ch->chdata.westsig *= 2 ; + ch->chdata.eastsig += (int)(unpack_coord(ch->chdata.lines, 1, i)); + } + for(int i = 0; i < 8; i++) { + ch->chdata.lines[i] = ((ch->chdata.lines[i])/2 + 128*(ch->chdata.lines[i]%2))%256 ; + } + transateLinkedList(ch->chdata.meta->next, -1, 0); +} + +void translateChunkY(int chx, int chy) { + chunk* ch = gridGet(map, chx, chy); + if(ch == NULL) { + fprintf(stderr, "ERROR : cannot translate non-existing chunk\n"); + exit(1); + } + + ch->chdata.eastsig = (2*ch->chdata.eastsig + ch->chdata.eastsig/128)%256; + ch->chdata.westsig = (2*ch->chdata.westsig + ch->chdata.westsig/128)%256; + + uint8_t temp = ch->chdata.lines[0] ; + + for(int i = 0; i < 7; i++) { + ch->chdata.lines[i] = ch->chdata.lines[i+1] ; + } + ch->chdata.lines[7] = temp ; + + transateLinkedList(ch->chdata.meta->next, 0, -1); +} + +void translateChunk_Y(int chx, int chy) { + chunk* ch = gridGet(map, chx, chy); + if(ch == NULL) { + fprintf(stderr, "ERROR : cannot translate non-existing chunk\n"); + exit(1); + } + + ch->chdata.eastsig = (2*ch->chdata.eastsig + ch->chdata.eastsig/128)%256; + ch->chdata.westsig = (2*ch->chdata.westsig + ch->chdata.westsig/128)%256; + + uint8_t temp = ch->chdata.lines[7] ; + + for(int i = 6; i >= 0; i--) { + ch->chdata.lines[i+1] = ch->chdata.lines[i] ; + } + ch->chdata.lines[0] = temp ; + + transateLinkedList(ch->chdata.meta->next, 0, 1); +} + +// ---------------------------------------------- // + bool is_compat_sig_north(int cx, int cy, int idx) { chunk* cp = gridGet(map, cx, cy-1); if(cp == NULL || !cp->chdata.checkCompat) { @@ -373,6 +469,18 @@ void parse_one(FILE* ptr, FILE* ptr2, int index) { } else if(xres == 3) { printf("[%d] SP+1 : %d, %d\n", index, i, 7-j); linked_add(configs[index].meta, i, 7-j, "spinCW"); + } else if(xres == 4) { + printf("[%d] SP+1 : %d, %d\n", index, i, 7-j); + linked_add(configs[index].meta, i, 7-j, "beltX"); + } else if(xres == 5) { + printf("[%d] SP+1 : %d, %d\n", index, i, 7-j); + linked_add(configs[index].meta, i, 7-j, "belt-X"); + } else if(xres == 6) { + printf("[%d] SP+1 : %d, %d\n", index, i, 7-j); + linked_add(configs[index].meta, i, 7-j, "beltY"); + } else if(xres == 7) { + printf("[%d] SP+1 : %d, %d\n", index, i, 7-j); + linked_add(configs[index].meta, i, 7-j, "belt-Y"); } if(j == 7) { diff --git a/src/generation.h b/src/generation.h index 3b2a97d..c716b74 100644 --- a/src/generation.h +++ b/src/generation.h @@ -13,6 +13,14 @@ void rotateTemplateCounterClockWise(int config_id); void rotateChunkCounterClockWise(int chx, int chy); +void translateChunkX(int chx, int chy); + +void translateChunk_X(int chx, int chy); + +void translateChunkY(int chx, int chy); + +void translateChunk_Y(int chx, int chy); + void signature(template t); bool is_compat_with_spins(int cx, int cy, int idx); diff --git a/src/hash.h b/src/hash.h index a65f79b..453276b 100644 --- a/src/hash.h +++ b/src/hash.h @@ -4,8 +4,6 @@ #define GRID_H #include -typedef enum special {ROT_CC, ROT_CW} special ; - typedef struct linkedList { uint8_t coord ; // coord%8 = x ; coord/16 = y char* flag ; diff --git a/src/move.c b/src/move.c index bb87546..4c0b6c8 100644 --- a/src/move.c +++ b/src/move.c @@ -60,9 +60,21 @@ bool useSpecialTiles(int chx, int chy, int x, int y) { player_x = (int)npx ; εx = (double)(npx - (int)npx) ; - player_y = (int)npy ; + player_y = (int)npy ; εy = (double)(npy - (int)npy) ; } + } else if(str_equal(flag, "beltX")) { + translateChunkX(chx, chy); + player_x = (player_x+1)%8; + } else if(str_equal(flag, "belt-X")) { + translateChunk_X(chx, chy); + player_x = (player_x+7)%8; + } else if(str_equal(flag, "beltY")) { + translateChunkY(chx, chy); + player_y = (player_y+7)%8; + } else if(str_equal(flag, "belt-Y")) { + translateChunk_Y(chx, chy); + player_y = (player_y+1)%8; } } return true ; diff --git a/templates_lv1.txt b/templates_lv1.txt index 5d3834b..ee11620 100644 --- a/templates_lv1.txt +++ b/templates_lv1.txt @@ -124,4 +124,40 @@ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 0 0 0 0 1 1 +1 0 0 0 0 0 0 1 +1 0 0 4 0 0 0 1 +1 0 0 4 0 0 0 1 +1 0 0 4 0 0 0 1 +1 0 0 4 0 0 0 1 +1 0 0 0 0 0 0 1 +1 1 0 0 0 0 1 1 + +1 1 0 0 0 0 1 1 +1 0 0 0 0 0 0 1 +1 0 0 5 0 0 0 1 +1 0 0 5 0 0 0 1 +1 0 0 5 0 0 0 1 +1 0 0 5 5 0 0 1 +1 0 0 0 0 0 0 1 +1 1 0 0 0 0 1 1 + +1 1 0 0 0 0 1 1 +1 0 0 0 0 0 0 1 +1 0 0 6 0 0 0 1 +1 0 0 6 0 0 0 1 +1 0 0 6 6 0 0 1 +1 0 0 6 6 0 0 1 +1 0 0 0 0 0 0 1 +1 1 0 0 0 0 1 1 + +1 1 0 0 0 0 1 1 +1 0 0 0 0 0 0 1 +1 0 0 7 0 0 0 1 +1 0 0 7 7 0 0 1 +1 0 0 7 7 0 0 1 +1 0 0 7 7 0 0 1 +1 0 0 0 0 0 0 1 +1 1 0 0 0 0 1 1 + $ \ No newline at end of file