From b788ce122caec0429280ec95d31c99b085bb6469 Mon Sep 17 00:00:00 2001 From: "(Jip) Willem Wijnia" Date: Tue, 9 Jul 2024 13:41:19 +0200 Subject: [PATCH] Add documentation surrounding development (#6326) --- docs/assets/development/lua-debugger-01.png | Bin 0 -> 38167 bytes docs/development/batch-processing.md | 9 ++ docs/development/engine-debugger.md | 9 ++ docs/development/lua-debugger.md | 66 +++++++++++++++ docs/development/setup.md | 79 ++++++++++++++++++ docs/development/start-here.md | 12 +++ ...init_dev.lua => init_local_development.lua | 0 setup/bin/dev_linux.sh | 3 +- setup/bin/dev_windows.bat | 3 +- 9 files changed, 177 insertions(+), 4 deletions(-) create mode 100644 docs/assets/development/lua-debugger-01.png create mode 100644 docs/development/batch-processing.md create mode 100644 docs/development/engine-debugger.md create mode 100644 docs/development/lua-debugger.md create mode 100644 docs/development/setup.md create mode 100644 docs/development/start-here.md rename setup/bin/init_dev.lua => init_local_development.lua (100%) diff --git a/docs/assets/development/lua-debugger-01.png b/docs/assets/development/lua-debugger-01.png new file mode 100644 index 0000000000000000000000000000000000000000..759e63082b0e8773f23585d3946aa2393d06b58d GIT binary patch literal 38167 zcmbTd2UwHa(l(5`t%z==Z90PVW(Y;P3Q|L_p-MtRCqU@c21sZk0YaDFYbb_l3kZbX zq$>zW7ebN#KX~@p=bZO@&$qwp=b|JJvu0+^nsTpME8#j?DpXe(uTW4>P^qaZ=}}Oe z^P-?Q%XaB3@C2_odITQ6 z$JrI2rl62j@Nu<cZ9y5mI2() z5iVuJp&-vL>mv;?a7K7ov->zZxuB(e^ z|Ky;AK*QbbT|MkkF6^fqtzjrn4>=A%)ql*v+4V2BF6ck)1XxVO$J$i{Bz)&|PQM6k z;D6D%db&IP5^e(*K{z3t5iTBRfEM%@t*af%1BJFj{TJ4M{rf)z0JhcC{7c6Fs*AJp zUn0;R550hC{ArN?l^Si}>xvN3L!eQf?r_9IFF;Ms)7iL6E4m}BJy7ljD3sGbS4!uf zDzl4<3rn%{8r!?rpuEw1|26=jWbJ{F<2YS4V7-8E0}!xkAZf6uz#UQPJ9qv;s)@3( zNBaJsq`>NmOM}GzgB0)?8*2~iza_STOCwS4&ep($?VYV{5hAWGwjAt#nNeC1<%Dtv z1OwWEe`%qqDXr#$_ONz=Bh-}SIDk0|+uPenBdjG6q7qUzLU05OE@W*jCMpC2Az?z2 z65zWMQj${eyJAxR9Iu3ed!DZB>G*$mxeW>q@c5ThfLuZxgg^*MfF?K-e;IlAZ$|=l``2v$OHj7D{X+~Ih4k>Yc1PT|1+vHArq_R4 zr~jcm%Eb%e{%`8LTDt?0>;VM590$@J<;-sF>gr?CppC-uLM*x~QefbxT0p9$Dgb*$OYj*(WlqtG3P*6l*)RgWU_>8R{QTo`71b)6u$Ew+$ zGKy;12m+_{xMx9Dcq{Ekk44qaZQqMaP>SNAw)KijisD=?Y3MVgzlYAPX^9kvz&a9| z^b~#+IUtnvl%zQj9eU3u?HaE*FCjYf*cd8_%IBOY&g&)EAReULEOZe|rh5HYZa3Y( zM{XB--QY~f`}N%;1&^=8goSkfCl`W#W*E<)91cIn9DVLNUg=>~2s->2POV^k{`xrp z)ZI(bi=x`u-ah&e{PTM7yls%OU5-oq>KXD{;SiP zN9!C}G-T9?aj==3=!SIbYO}|xKuqJo4Vt*uiK&Edr-}fprE(t>{5>q_dr$MuVeme= z#b?`WdT4f7(xrL36jiFdvP7BrDtH!kNR@#IWp%>Aj*r<6`_vZ|u0?BJw@BST3E1qo zm=UmJoZjp)tGswnew15=)9yZjM#6-f-UwQqoXBs2ZY3`b&>29OuMt0r=#q9U$}Yv^ zWHS?;N_{%brZ!jm1$0rX`LGKi?lD17C@ABg-#7#&f4sGxw)YKxGSH?#7C9c#K8nyj zGSdK^ESYf!3)7Gn0c)%uuUi!=gK`n`TGwCWe#59;p>8={4JE)`S%`x*n}pFlxqU

cuT`VN0xq`@I={oA@Q6Tdy}? z|1@BxLGf`7Srwx_ZE5q1pDpnhJurmOUFyo8alQIcNjO&H@MfQrr}sxuT@tt1yw%Ba za3C;&QrNNg2l^8=>y?v@@UJId!|^RYw@@8|c}u)j`w9t428Fnp8s=C&8XffUV{M!M&3ORPdHnzz*lhz(TMl@BD6cC2n`Rktb_dFmJt+ zFZw{bBllS-f1YK&bb(B9k@}ptp_jg8vgPK7`U&ZvaM(nib~6kdV7YQ|KcaMBI}3 zkZ##-`ZCMhJ3b{|ZnD1)1*+rrMOOx^Sw^0Se3=ZQe_RO|kJ8r$KQi{&lHfj5RqA{J9L z*33lo^H>dix$=teW{Ijz>oOkKUdjvW(g4<{0dH^Xkal!P2cNhw?VmJg&{jqbA3y6rPE!u^uS9uxlW4#e~qK~{mb5hw@RB=@J3)m_}Zifb$n+84CDsSoWD>~o-z_o9bQq}EP2u*9eiwUL`y*gOKOQ3N&sH8FBH{3qbTw`;e$kCDJL;DTJhGY3iO_7TRLa|iT<;#BzT&AE9D!~aS zc%7%!A1KMvEjGIh(y#e#3#5bRzb&sh##6+&Q-XWPROw=6!EN(<(Ud`heS$+4&b2@% z&i;A3+(wRE&-{>amwBG7rT)H7DsOTB!tx-dSKk6ONAgH${f)wolURZ!dVqts=RvFX zN@q}%!z)-(s)|2kD_w|@^*6ND+E5>81_rLwk9@7Tbx@;7juvH;k~UIwuIg!8vsZM` zh3Lj$4fpN-Y0x5YULhHQP(D-DF13B za*x0rHP`&6=c+l&9{aV$^y^-8e!TfUc?FE+NuMab1o+FB_vt}JH}PY8`vT-B zdThASX!JbAV>%;9L0VHZGsWFY-zYjB?SPhicrybhYB=z?ceVVqUP&tpds6_!G~u&j!o-1Kup5pw)UgOI~77bxs5 z5+ij#6l82~smvNBlb4#J) zS%-*YDKqhT9)I2n^$6{NcTN^;>W!P?`pB?CsWu4C|BG1zAF`J|JILBVsxQB}64%`A z_HY}sr~z79u>cv)Wem6{)LRYfN?|T*>OrjDi(+^y^_72;z&+oU3xZ8EV66t9uDeh? z=1e9=vbBxAti;t@wc3ioO$!bX0m^tI;-G-{L-0$W{(XH!tG|!96S62{cVZlPwEYKh z%QNC)%;1PFtLZI;H)klu)IrN8b7c&0kRmNuSqw1RAAJ)Muw%F;Xt|7;_#04xfE=Sp zbo%n3BPvaob%kTsGp()e&Y^KydrZkMQxj5V?fn|Y}}PoPfP}UiO`_!TD17! zu>;M3$`5+7C5^ts7TO`L`!P^aUB6%$n7tVMWR*bzp+7;JMs~Rf<)7ARq?A*SrxT-+CBqfY5;e zQAd8f%NtWi!g+$=jO3Ve(AK6EU13`Na;QZ0@Tn^W60uUM(<*_rDK9Fdr*wh}RVw%q z8K-`D5439r3LMPG$?p{5fMqOqZz|;FuGUiV)d4Ym*3|+6@r$Yea`|^ISCyO)UT!fn z5D>f3S+J))cU#U?*q(~N2YMHBm09e{X?&iRRNyPj=ro>JRXg*9)OOEOFw+v5&pzIn z8J|A(ax8k4>OVM>Duw3uxG6_LF<64r4ekp5a*nM)gvymh>o>d6MpM#Z`ninpseJ|J z48JA54gDLPz)Ao@Ic}WMzHluT#_DwQ2Cz8yK<%(lUL@9=a>As5Og~#(z9zr%ZLNW|a(R!qyK0$y$5B2N3Yl*ElK&OE$tSs(B#Ox`c>3^z zpdC%IT~q-$UW90oE2VwQXRpc_uUrC`(IWKsZ zi`rXfXz|=;rR_I#NnU!S*I|bC$n7iU=Ve?HDoR~9axj0 zn4Vvvw+>fVOenfO0fBw^aj_^8`ia+Jgx?PxXUa6#zSK`_tbeZUaE?csWxFU#oqwf4 z#g2vOWEy=(4^*BZGc?e5tC>Ffq`yt633nme8>@0l2JOfKB-Dp(6t{Du;U|JRrPM)&o9^%7I5#0NaGo4XcW!euV3KMzI{kS{$CXYOm$|IQ zyUTkElLwRjbo#YQ@^!smBb%Kv@^KKh1cz?ea5hfYxu5`Noi?5ev)t)4HX^;1gT-FV z!m+d=s(J%_H~W{%%sUKb)cEXn8p@3`ag|c!GrmI$rVg_0Jg4#?Y(-PrIR6@@Q^>82PWc3JK`E#AOm1+xBX#}}70 z?=c0ssU=yx)LaGy%}RGPITvJRPk6)nE=6D7_R97jV{?yjea$j=e26HyZ}jN~tFhGk zA{u?^`8Kgt%3D?W7*(0E=RjUW`V0OsS1(FcaeJuWEw4=RBC# zucr56bIh_w&ILOE(B8cfma6eH|A6M)K%lI#YumZ!wF)b&Uw;V9e=NKvpkks=Hy|i` z1GhF?KAOA%?>elMm*Y{Wsc+5Lev=hHbXY$rfiB4_*-g}9RS=H3nY*vH`_g8G&xtmYYR&QX0mIVE2ejl<5KzsQX;@N#fmJ7lEYR zimw~$R2)Ub0BDj19}6WVzl!iz5{`oQef!q`eWUNK?^ZuPMOWzc>8ANIMXv*9Py1w1 z!P$>azq_<-Ok_8iSmJK)or&uUbU{AsGS9wvs4OkoJ4lQ6yNAP>CBF7Nm!xR-F9q{o1ZlygpA$=49JbrN-m>MRI=> zie+M6v&}m%CG!+f-Oe7FEO8|=+G4}Z^6cVG&#QS(caCnkx3E1vG9(QXVij|6 zGBPp&vu7vuccKU)@YYbkR+lV@SNTm>JnEIXaR!uD|DF6Ij^Wc!+ixd`i2;o@HEn&Fh{_oDcxd zwrznb%-FHBQ+o(3SWnQf5y|Rg+p7E}@%d*#WaDEa0c-Jg24F|M1_hurK>AU#Wv?qO zjim)9zw;R$b~l31!ZTdk5Hr&B%_w|LD|~G}T)Ek%^m)4Le*4f))ckSOu_ikUL2ROl zQKLJ3!G(X&_bUN2%(h-=Za9~tTZ2yxk3BB=cr{>*ru!E3X83pV*R zn=kfa@a2BGE+T9EPU`E^F}e`Zv|livkC^JWBMOE1!VcRefr6VE{T;f^8!zJ5aVbWB z-5?WJyK(ubbAilvU}!Jt6R$TEZ>*zS>;SHV3dR??&V13_n66u;(Kk^3{kQwo_g6At z?=A7Tub9PEVXsaT-)>l8g5Z2vwT9w6Jxk97m1XXJM{&D)0>)_FR~$-u>$!(~0J{8? z{RL+kE|OT1nqTsxtZsR<{Ve02&JY;=Bp!+hJ=07$99fn{= zY7nq@V9*HMT#VId42Q225C zez1Y{<-WR|D4}LTjUpX>vI@8H8rX8Rs>sJnAdNfo&c&CE$RKiY=ZK<=g9S85`8Zaq zO2fjtI998NAWtGGQUv83adANIj^h=?tpUkqC(}1Rjz21ve~uBGNpCmjy$Dj<^!uSm z$-27h@6bPghBrSk+pQ}KxJIv?n$*-%!%_ips{=|MJ)1Q6V1C$(YK|?9Run>qPt*GC z9%y-uS7dJB9GVx2-ZVRxv@zuFYisG1up6CJpQP>W>2bTQHPRp~9<H81gX|jU3JeF?}QRgq^VgzA|tCU&~dR|~&WoHwxC2T2T!a(0fVOj;|8{`N^# zc(oB!wIbH9e^Ov{V%k@z62MT^9{Hx$SKaNqiFdxQ)5o}Yk83hp(Nojath!2jEadlr zlkfHyM5I^MkSfU9Z)m#BC7bhHqkOjzMsj4u>z}s|s&J0-G!udUql>g%E#E-V; zpZ{r6H11couw^*ZUE^r`5ns{0DCI0aaAo>>*5T#4Lk*+7nuzNWoja-WX)8-r%ZXZq zosBS#F+BL>yICpIGQ)5cF6+=NU~YYK+NjMxj6TFJB@wK!%rNSMP7&m$sIGxs$%o7t zv&3(BV0qB^Vh^n3J zMHTEvDDqseO{hyfU|i~soOEYuG`bthV7227Nr93M=aEt+hR2)asvuvR)v?~n=E_8y zBS%L^nN98Hy-fHsaEjS@JRX;I-0T+f-coks<=scSgAw}&S2}ldE#z*qe#Cl;kZoCS zdV5aq*GJ3-&VuVo%D2Z3li*1kl5pAq;}eGbAfAY%a+?Bx&2^83GU2^(-wjeyye5wV zf0>NI=ZQ#XTP5EC(E&oSNc%n;owijt973m`>IpmKvQqK&p+g_{g>BZQzH&55Gek(Y z!(IVfaB?p{vhdDJQDmn~?2fMzIGKDdt@-{_0)xJOR6O-~p zU=Dl^jj#{f`Nj@r!rp1bF!cAV31#SGlDa7m?v#2w(mM3>SdM8%@PzX%wRhch2K$#8 zo5%3AA1@C@Fr2V=Ol;-Fmvqt8!qdt_1@r26XC864z?MeFh>*JV`q9NJ;Q~SeqbX_7 zsf6jCkY?)HPF59~wZQY^k^h4L(N;&PjVx zk{>S_xi)yshRe|RR)ivc*YGH7o5~1cAs|<;Mo0b;N&MDMfq`nAyy@*E47nd-Uk4B% z9OxdFx%nKn(Ggi;u;C4i6l(suW((QRHV3AREmr}>;}d{{Q-$AO zmkl8U^a43T+2VH2LJ9>4&<7ekbFSa~Mts+&1BVx|&>>VVI6tAT^wmtst-eozdXQBD zZD@3En}CNa+Y4AStNG`WdL;f(F{G8Pqb5Sn-5ZjyNHGrXu^^n!;DIC4@3r9 ze->qPubGen_|q6u;@TEA7q7vi7x}1C*0QzhuB`G(4)wll>d%E)vkyUUMKBmPdl5;t z`xlTaUdhFRP+Ou0)+}uVZ}v`V@cm4x)@qG7x-k!gH(W3w{Z5<^x)x$3>8=&&Yvpxu z*VIi__Pkjdr*sDp8%jsk=ns=pv-5$7kAcoE;#Jv)xa4!qwO-D52Am zdll9PLzCS=t#x`f=JlL?U+V#Hw(nA*~FWJe_Bu0x$>DNsx z0|W-M7IohSrXisgS=&#FgwfK`GwAskokBM}PFes0x_Hrj@tW;%bbfXK(u;i+mG5n; zt!K80F8#9ehDXKLsCKp`5`^TrH11aFQWS;6KSoj(akwbuye=sZ}? z@B$}RWlgPo-!jQ-5DfyWPSEPKzA~wBeLk=q~VmkW~nj z>%NTf!BR{x&vWfvg3rtomm{gvbU!ry>9u5Ke^QbcC(C};WQ%imZITR`&Og2D)wb$G zH}T;7Ivz>1BUnDX8Cm)|r$f7?8Y&DO2z~DuwMKMc%X?-IDoTnwg-Dth<&II0i>F6mq-<(m zTLPQ782;gSA@}xH^pMoqs)tRZNrTzLH#uH#i}W8qPTQ$Y6y}H+jcz#j?R=*!tiXbH zRm;gah4|c7WE1yF`O&mm4QDPP5dL6w*+guRdwwr#fYtVyTEl#=<6g&a;|#%`N0*qu2rQ|7cZ;bog|>gW(LxFj zj?5a>u=FT*L9!WM13fq+kibW@Y|4V|FST)9&xcJlsGP!V#g{}`Cn)KHKwh1O)RyYK z`ES*1`HB-AcA>V?+xQ}0>fmjl<5`fg4*rFT?_R;Qn~?INh*yye)ahDFszP}6c?~xe zj?Iu-%6h+iEzz5?SH25TJJ}u%Wjo+|sD`iea^D98(ZvZO<=`Odbg4s0E={ zA-jARxF-x)w+p())gF3c4?2HYNrNN8lzYgRLfPi%G3+K_DI1`{Xhe3=#0m;H1};ho zt}21d)IbrVIp$J4L&4Ub@DJp*nV|=we8v{6EriMs*Z1kd3(bw)edgAbf4squ`ErZ~ z=Q0a^iP|$awpHo*ygzC5v!hINZiTDOUn@#zLI|}oox2dVR@R-~C$l`~kkR5M==pUx zt>G}n4g$H}$Q5Y4xa0RMW1$~MFgR!rmt3Ei92ti)`hTupYr0^WC^-Ml1~fYgKiXfC zD^2Z^`K6!^NafYyKwR;BIhpus+fU`l!HSvT)3u&S^KZsqZiN#c@FOls6(3_`4UBD3 z8ocucWipCd>f{DL=jm99 ztEzjsBDLNQ)0%6P(J)F(5u?Qi51Unq&E!1r-;Zl*-`L(xyMYcSe%m7xa*mYO4xi2j zN015FrpE!=Cphjmj`~uz@b>h|J{Z9AFx8V>h0R-#WGph=j zc}-xm>iHZ+X}_V|Q|MGaF zQoo@^4KDwE3>n6UuFW#%H9 z3*L_Nt&==lx+j{VFgbo}w<*0*E#na-aYmJ!c7<0GkK1dg$+;bZ%M%t{-WH7B$_=%p z2Vm>NOgx`HNRvU+n=9nLFxHt$^SYMl4mg>qv9Mb2JF?7mWZ#2-Br%OfXd-qjak<0% z&5c5wM)pirC+k2OBP6DzWLhu>jox?DU44;TG=p8US=)?q-Y|Z7mv`*}9g}#d%Tj%k zz?*q#@xjUXH7Rj_xV0_ZEy&(Y<>)+@OmlJ1yl_;y>UEK2j6F+IlQqIR@neYIY#jhF z`4y-IMaEjb)Se_y9f#V0RKVA%THe?P-%>hCdLJb-UO75blgo8*|FR>=qVQ!B*@h~= zXDdoj!%a*G9PhtF6mnZ!d=l1A@3J^KGc!s0Ap~H~?5b0w%3XF)E+gTJ{Mw!1*L_a; zYj>J+LySy(O2zn|>;8KUg@Uax6`)U8zm`|RqyJFO1~h&vVozD%Np2>tGz%9I;?)19 zD5}<+S&gz`rAEazL0S1qgo>Nsd_e6$95dv$yD>!Qg|wxHod5SrE?8LT^ zyK$=1oN7JF$J&fZsV^~QqPf8bG)e1cmG$cVWYIwyCoOrc+s^ODyr1vw$;nX}FLsW2$i$gf*CHY}HYFr%I34&}seI>RF8aweO_6qiyLcw4H$hS1G6xtm+GD zs|{9zcWNh(FYx9SOydT?u>-A&oRSi=tt-NT0dGg;tMhsKf(b#yt8&fPF%0gL_lCi- zcjY!hearHn`R|j$W9RB=^@|t!s5$FQAA-uYWHso}F>s)fb`RvZ5&z`dA|Zw8Sc@F} z?Wcu`Ksj>YgQT~_C-z!nI`B?;bpOn!N5*=mP!i3l&b1IvY2;b@B6_odNz_>?MU$TU zV1SdpH4Z9M$WVrRKi(g*&0FJK1}pN1nlUnz;E0jDB8~V8R=1h^yz@0rF76ACx<@RT z3ey6vH(ZG)Synn)rZPgL)ai$GT|D)AE;MzeHqUxkiU=jmifdbqx-&K=fYF|#o!;gb zqf*zv;hxUIUDGZUT*4+)JVU}M_oK- zEYtw8u^zVuF4xEGcrs1xM1JvaQAH~*w&NunnfUdJg5SUEPgM)M- z2cuRB{u3!bWu+=@t!X@275rHM6mmTlCQP?-K7x6lr-n3;g-^c$2btx~%F|DQoHZx< zroU&D_T)a7K^_dScxe;rvJX3)BoNz~j%{<*togQbqXP;JkF30%4P=6jJ31_OwXu7z zVamd$)gGY9_}W&tE1=c5bJAT;a7OL=iFIq1EK3Pw)C%;zqkgv-<7hh5^8DKiigbDd zR>G*#5pcZo)ZO8s#pM?*LPO4~vXcH{O4>W_xzX-cd$yCC$b*K-ot^>)4UGZCojVl8 z0lBn=q)i6HzULCC?OkZ>Rb%62DTn zm5j>pWHbdYEG1p6A399mJ0mr!vR>hZ{4A)MQOP5;otp5BQ($tP!T)TJTSKFH^{4bB z^ft+?M1!Snfwolhy6iX7?xNh3!qH6HW|sIQkBR)0Xks4Qs{Y7PYo4ctVNa8cF`MTS z)MJSt@pJg%djrw6pT~UMP?AFxPM1Jp^w5cq72!{R3fw3VY|^T>|0&&Z`RQG(MtKj3 z^pZHCaf%g}bxHi%!1XVZ^da5Q+__-CHkN)PM)50 z?9oD-w$@#XMX%${9CG*Q<&DsRQh7JMW$WwQGDFMZaat{hZcQqz8jcFY!vcUGfQ()e zor(pKM7a*mR+xIOSeIUMwhCR~nvaE4UfZ2n8ZgH|yYcUUdjPG?OI5goK%lwGZ3Aj@ z_(P6vz(}Lqx|MH!8~?yGP4@Ke=vo*I(*ZOuUq}G7VL}mvi$tuulv}^q!yFiyO$jp`!;5OUAANG;-$SfHyqhS7>!?LVZC$;-o`-@ z1Y>S3R@7VAstF@z^ehI-tlECQO8-~8Q$AhW*JxAA0d-?rsqp0*B&HPGDU%yeKY*K@ za*0`hGGiMYcB6$+=Nk!kKaU{FS2IYODpQ-LnLRC80qdXVjRh0|Ufm@OW6-jdY_k$3YB$~9}isa-E|itjWWWETX3*Hnw{g5su&a&RG} z-j!i5!jkf^X*&BD1jH8f^J@o2jSm0S^eyY$Jr#mM`x8Q%`-{-}dbPnMW2R5Igl4da zOs9VvWRjHMAT9k04p%PvFjX+1j#j4|^` zcTT&h7c?a}p3=$naFvk6z*(9Y6R8)}JN2_tG7*y3T31`5k+_mD-ZdfICXg35Q6eF* z$UA@dD6e7_OLMV-$YO(6BMiV$UZz)yU3*=$$MhR35z7rt88+($2}H3@?+~n2!)IGo z?dTU(2sZ-tylqqVu4HFG+f5Y%&>5irg9q-e@aO354ZT*!%$|FwhojOZ5uTJi*@#~y zoQWsWBqWKp8XI{#HBrAp2|Ow^(5oL7f9+k8lAN^E)s3K5~A-h>8+C#_Y>0&N@%J@Wiyp}R#tT>F67-i!`%1>k{2n*lM%|cAORlEqrf>! z25|sDq*w|^tiPRkl<|haGagrx!^6XvK@_~UJ!dSj`f8@}-KeH$+HX*x*8yC+%cj8_ z{GrN#w=V1`7@Y5WvG+u4n*ANn`1N6|VXdP@%ce182qi9D5C^)}D&-tr%o@e*vIro2ctUlGoUr8!^8)z^01+c^;I(=3)gI!Bz z(l=wq5?sBJpGO?~CzvQ5zW&y!CLS~D-{&SAq_W1bmYWy6uqkmtHauHzXkK3;rb?2- z@}_;8zVAd(FaXEvqN|z802lsJ63-Q7NNV1gb9THsr;|5eGQ4u<0jOrv!q1n?F`FIw<~$%5 z3i-jChoU9n9)c{?_pk}ukU5PmhpeDX>dwyQss-u+1?z?RvlwQ)3DS5;QJp<{haY8qZn@_R}f-iX z7)pC*V-Q|!W8y0r>s!)^Yu3IJ#~uL$FGdgR7n+2$XdJik`&S&(OrR zp5DwCY?{J^lkP9NG|j8Fr=_IdSnC`e(ldRMw&`n}l3~QFytI(^w9KTBK{2r`((^fTtGN+A+`s%b{&tlSk;Xl5 zAD??6Vepn)j-9tpCtlt6KnOZq(sk$Ct@tXeGy`z^D{+{dxb#Nfmp}fBW%uDkQ>rf3 zme#pV?8K0uH_ZaI^&MyN8!1wyHIC_cpTIHZ`Wp@SSV8t5O#>WE3j+Cd><4v=*{rC< zS?*PCe{xqWguMT9Gr4|r%)}jyoma@Zr$(*LW4%atsn_%eage`G*sNb$hih)`(9bpr zX&^ButugFGceMvsZ#)vMWCe5}5QFhu zX9fBPeb@T#5D!18$UmS%D^%fFwO{#m=o!YLV6^%jh`wIYV3&kJe&Z5FkRrJxeZ+k% zCV?xeDSN5&qgB&W7+usg)Dchvezi=nKwy&DTVctt?^{oc*A`8sJ0{0UzJ{gqO-%{r z1qqE>vkd8`Yo9m0nJ5A&Eb}#EYx1Tk!&!T;E<$3O>aBRGk_xKVH56V+I>!nA$rA@N zTHy@?s`55e*daMWelp*tYuN3AOMUJ+UriZK(<@9{N$xT|bNQh+q$k^a$DvWGH6PPl z^?e7kPom$WGu}0LF){~Sdsp0i0TH^-3)eprb781~%%O ztxf%^MdYn-I~J^k)Ee1Oa!34I*GdwX%UnCYYgxRhY37NsViI35+D`4*;ci=>;3LO# z0F}Q~5Gi|5o_Nsm!}r5^LQ&I;*A_JB+ez|rgnDafop!$_{4ISKpvO?*oI1Z;yyKSD zO*5~`E#3%ooEv=P;6qE?f+8J!MibuWMl2cxHNApG=Y?^P)D@r9mJ}ZLe-BR`NYCZN z%Ksl!3-b|;=bBWHW2P!AM@E>Xf zI9$8?SLyur%Dtu4<|KsBz~uG7h2IuA?AKimxpp15zWc3gqDHH)Gb3?sp{q)caBQjT zzt%zfK_58kHVInhhuNYgwhs~F$x_2Zv9jJ;6P1(cXvx$R(`3n1 ziS1Ozrphwb%`t4>LLR?3c*+#zEkby_=h{J;G?+B!h8f39`M_lVmH@ zEh0Py9H3bV=F|hbaV#qOg?^-fq|!Oj(RTO98NujFLn#&&%@Ywb4}eZYmseiHtM}~m z9bPg6&*BmuM$KP9@t4v7J%ouG`LvF01kdUD+080}!J?S^e}{T z31VSlH1kJXJdJH`SYjZ{+*cqD`Z)!(+G}*l%{C1BRI8Qv2MqKbo7#fbNrge%i(__3 z*Ue~X(BL2Sh5Yn@luv>yST_!Dgzu#9HD&Ml_YtQK14Q53K3x*=frP#JkenVf&__S_ zAwmV89Uwox$aEXm07KR~$hip2yYho&p;K?93;2*opLd!9!qGNW#-07w5X}SFvhSvION z(oi1m*IiT4W$r2T&tM$%sJM?Qbj($etQpG-t=FHeD~;alBZXTFQQ7b0YrB+AH{v#s zYSiH?bK_avzMT3d`C)175u;jgkgw=t*l@ps{7YFm?}1_#WBlURlxQPMme<*hpubL# z47neG7SI-pUj+oZO-#z^fg6`fdww+fQjYd+HWdPeRXA%5;YRMO`Hhh6P30~Ofm(LT zhG>9<_Uqw}$3f9lkg3|L_{@LO$RJul)WD{6Iy_S%905S`8d!pI)#8BlfM3Z-@w-9= zrE_@)-v>$`$aH9mi`kTK%^2KDSt)r*jO4d!_{R=@+`g>JCXIFg*uY!%To`iYA1Rft zNlYMZB*-Lo{#7^)B)F8D+fc&ya&;$-WknRgzjLjr-JjDpZ+?eDZ}q) zH}J-6`%>w@3l!LYF7#vI<&o2vn?5t}nME3OwP_JmNo^#!Jrq+9NIo3butSY$BYS?Ef& zvizg_1^rUV9U?PnCtqeI-5sT}7eDIMF|8$4+O`PQcF+hai*jh|v4RqqWn3Mq4!#Aw}qrppB|+9ImKTUSmzdPXo&1A^GL?{?i+Nl zZuia_!H}S?g-3?p3fq_)7O(P%XMBkA+#5-5_!)aQXsu(@B2@fz@%-uV4}|sC>b{RY zv+cnwj$4a*n0+#hzX9wPcWni^E7`(H?+n74w)QP}Cg*^|kWt_;q|Qt!^8Hol-luV0 zt>42Spq3vYBLCd&dU|#ir+w_2>yI+XrUBc9d8Tmu`nb<36KA)(f`c8hct1DJW`)7b z3RT=Lpx+AOS+y6jpjl3ATTzpf%dSiMs92o~oEVp=a}tFn{H+bbV?YHk(K$g9EV zaFGbhfhC*W9y3$lCntt}^>;L$Htn0FkhLL_ahmOctEYFp0r+rwpICw~0y@q*S6c?n zW2hOeD-23LKPFMv7VW+YE28RNTi|P&|ATmY;1rSp2L!ypCR|!8^5pYl!Mwc~U2F=* ze=~w#;g4Kze|-oKJn4tI@?nbTCQ;A6u1GMiJnauQ%;Lj8uNeX7AJ3r>+p(B|Tf+Eo zzD(bE(HB!BYphBuAJSyOtI*Cf!#Iw3wK{J7!oSq3{b&Mdf}1W^cnS8aDtTeYeKp#y zmZl<|S>{Z0)fqHyY!=lO**&kLo>c@|bil@)1~~qRumOG8OzxIVHRxF6)h3WVx2Pkr zQ9}L?{VThECu}t%inCDlG3y-Z-QM1!FTv!=X{~0a)6Z$KUph;?9pU>H*wtn-F^-v^ z-WMXcYw=6gnhH0dx~M*Dl=Gm`#fYGek>80=x(9!Dcnw`Iz5Cfve=oEKUD0F7Vi6E) zTf19&hWKu6>+|ODj+UZ>fX#ku;<9sqn`)Wqpp3gCxHo;K_p&V^&&JEovH1K6eTl`& za_97zVB%hI7_g>JK6GGK8fqQV&rkXNtt&-)2kj6-#E8t!dXbd1+TM`ia-vJ&UCB1> zy`$&=KUbHAq$M4GoBneGW^>#_R-dkRyNFu_ViYIOp;OHKtA=Xchm(F*S%E^D5Enl7 z(bd)MWnR2syM}TmTU`JqJNk_p00Z?h9U6OEZ&OQg`;GzwN%U23ukZ6m+TL4}{wy<( z&UaAmX?Xj28ANJ>F#G42?r{65B*L}agp1WJG_&o z))hTL9!>D7mx@vhTO_ecM?rvoPKq!NkZXUb)lr= zl%bRnDD7L`f!I1~cwq+VUq7)E>Fkm~8Q4}Y{fd*5P)%-q(eb{_f~mtJtVVz0UIw|< zP9h0}e~Y-81bFl5@y#}HCs#Fhv$%tEQV?k`oU!)(4zf;{w1kk0+wuDUn0wE#rnatK z7<)lLr3nIVMFm0)MS2lXTIe-Y2~E264i-QOy$6uqyHcfF2nYlaLhl_ymEPgZ;NH*s zKIc5&cfCK(kCW@tWQDobnwe|PF~%I@9{2D}0DEpz4H(Hyg_!HL3B-<3YrtRCFx!55 zErI6asD=QlrC8d789>EU__L3_#2=ar!D{JHt$ASnF(H7Y+MzV}@w z)X_e8A`loiKEkrbFS=+Rs-|ujhZ|YgkR7Csf1oYQxF%lafVQ6J>FwB0C4I-$Q5QJf ze9)wCPv$T`^y|VwHhxPB^mq!YFddcoU91(wdT1pPjHcm@IB^NkCUQGfjlE)=&lLNW5vr#7;R7K1(PFRI)PRlZRjpTAXO%cxiAy8SXf?u^uk5f6zb>V z-W{VJiXN#!SgbJJuz+JY&@7!&IT^XAwl2L%{KkW#be+L}=wZw?kPe7s+Tyeh8YXS2 zn`U>BQ;4g2v$eNOOkcO72j!a9Xm(^0MXhpEi?TC_L*@6G*J6-!uD>#PD7dtt!VW*= zGWWkZ#zKt}A_sS^Ez^3v+rumt8ADYuz~Pi*_QKSy?ZDw>A>Tu~>e_EpN(Sy$Pb`Q% ztdUI3=B5A^0d1Df$;cLdS88vnq9(O}^eX@}5VYSdnmw;&y8LMHJC7y6aMa=W9?{O? zMe3X})a63{3k`iThkm$O_vmw})$u!m4z+W+vxW(<)$$I1?i)%l>m!r**#>O9ORir( z9&2#MCFni!fm;_Zh-DWy3-FfK(PtkHlseCC?F*m4c};IIY--+qJcNT4!_8j_V8_do z9JbneB$x80(v1ASB~wvLUjWH@vc zD3~pLrm*|@x^=*kz^1Q_+h`BhXm%JC^-q3>O!rc(LUS2EYYPA&3=JkE=#Aa>;b}iK z-A2V$+Xe@0ZEIPIn^T$E&uFO2YA$S+naQp(CMQvaae0(YkC_XnC31BH-8(}}a9W4B znv6aGvKt@ZWuD=jZ3;gq3JUO2#!x#Ghy$;%7fqnd&G$~%eJ)V2=2`o@8o0P~8{cXl z(s0~xjw*e53v6p%fza?Jwf>UY$<>TVd*}8+2K0?ScqP-HJYJf~0c`h@6N}TBFo%PW zVxUPiQ};o?I0EF~;x)#avVIvY_Na2HI58HYkEkmC%wx{dn5CiD0f2;*eUt4b(Jmg>8qT#dR3)NA)G zIo)Nnu8xk|T-@a3WaNBD-RVfxZttBnN(Pbbo@Uuho!!+He6Zgd>~u&BDX?)n(~ck7 zV5yP*H{z3VAGEJ`#ma9n5Z1;0U2T&@~(_x};uDw(6!Z)(w?l&W7tqRaM&O24!A#>(#MwnY*%jiCO3d z((UBvROjW?y%WQ!(91uE^2T|=iu z!NpRH!+e&>ynV~^TFd>|N5gZTSg%?xyT5ILryY1(fV@E0R;Qk9+0%vL0)OfB@$PpQ z%%l?Lv|m**u4E7JiEM*^w6uB#hd)j?6;E4z;=V*ldp_yn?}2XgClWl z*g`TQe>imiRUBVTn@}r|($JwlI_aXq{Qh^_WCHU}|I5$Z5sL!CRij#H8W|FWqS*YS zCtB1iazw=gDqkF-iLJ$&DwrVyz8W3!Hn2akn zWwmwkcS(TH!Jwh-G~QVWqv&&hO+K1oXxOb=3rCNHlAaq9gZk_*kFV}&1~kUr4j5N_ zSWiu1V5jdXuZj^>cnCUfOiC%T{el$^<8=g^dU=v@$1?lRVHgS-V>&er&MvOL@dP^k z4}HY|K%!H7H)bZGHO{;|X|pZz#|0T>J;l{lz5FEfzHV!7y^qz?L_zgeAqj&Qs0q|DFE|C1>-Q^;kA{1&pHEfUd)4euEFQP`gEni?a)AQ^DBwhgcj_f z|Lp)nIo?yuM%QGcqWAApf#Z?T-T`HsAGm%q2uD)&yM?K{!55RExH{wfenaJf-l_GMwwTtm*!-xMn4 zwLNp)rBE?e&7i9PH)gtJ#KeyME&%BE_>n&ffx=;SF-ih|fU_2i!fA`TrHegnn7gAF zBIEVoC43&!Mf-*I+&n#r)Uk!M0CSr@|eJQEtLn~qq_}PHnB;fGlfa|N3qPuQh z-Y1OO=>pMGRoreg)omBMevA3H!yT4+iQm~BG-;S9n?twt_WaXPyG2wa9~61lHl*l* zaX~uqfhkLPbUyTSrucY0`N%AMz4>%7*5~xS&xYnnU}Nbuho;Uew?mJIubl2Fj;WkF zCZoHhf#C+?g_f9kmHnDt65)aj)QJlvA=BxLmJ#w?m%vNBHG}CU%o5}dUCCZ*+rFmI zOqRK*3I!qyfq}mOk4txY0^}IC)YexLEj-A~Tftjk^)job&BI`@tR<*Sf7dA(z-Yf3YQP-2 z(nJr^eZ$bmK#IE4bgVS2-QMYhlU>4P&RBf9gskwIi#R5KSv-?D{k=_TSX7aH!e zbML@?WHl}iGIfr?i5!k7k44i|2)0sE&X?wP?BN7~qY+{o97<-;SHfBKA_Tjb;q0$% zkr%H(#KMAVE#Xt=U|(zj{uFkUeFYyUYLT0Qr8H{WH!q_IC3_Ema|*_(CCqz^sQ|=v zi1bJ7^Y`6}{*OaUA2{s24ZmTh>m#-Q@<4K@b)$NlCdN0xbiS`JPE57wnw^2mgMzvz z=#SI_eWP)FJYF?O{^#P4N@L4+W=vN?4gpfcd|LA0J0`JacH(2wmS3zfA#n3x7R>vZ zaEwxTa9$y*UY&!P9a*(ha35zAPQPnfU^n|Sht;8HEOcsRD#@)nImQ_r z{**ddFFrl++1#5B?IF8&^4mjnBm8vL=WyKH$;~Y_>%?vlIy5Zm;vkW1CGzV&B^RPA z?Hy{BE27PDK)A1kFp`1SW7Qt&?bDw}?PPk^U}jZTH9ek1 z!(4$)%b%Qku-qK#V>l(}>|htF*dHa)^*E7qT&h*W7x_W&x} z-h3&il+XkB0-n^5oW6#SJL|rv2X|j{=^5TE7*qCkd(3RMqt%=^wDq@jnOv@1{#HeC zV`NsxraK-dg15DWP5&`4Ljsj+T$}Ic@98{qp{MoeY|*w9gNBwNo?Q24B$eWQo6d2! z`lYfpS0mSG?q=ocvbD0JffRorMJmb(GS|~X2FKK$nVh>7z~qboCTHVdKH~Y>U0*Ph zf!~zd<@KA??xdaWXGHq$b#wQlDY-^3XxgkXnJi>UFBuR9WcDk=^q8r=M;jTl{2NgNJ%ZR=HHfB=~~#TZmUBFW=2%@*V@mzjXQ@YWi6(`uUkV} z@$5Tz$Bbzi!h44P-u*zh3q@&#aBE`wH=^Vpel>}X0C}@W#LG)wsjE7al>ho!r~VYQ zML}^^d$(F&^LQCBatVH0eC{Tm`vGX=>wS*|K;z&$Bv3J z;|3+8X?jN3^q0RsR7B=<64Nv99(DX$L@L7!tflWEbGz1yZB{-W2ZS{1tK1X3=aK7K zCc+lod1Acex$JIbUb7-%lX%>+`a6`wS+ru{;2v+Mh-*RBJ)gw^Bi@AF^^?J5_X!Rk z&&_4Q@r{A+lgF-W;M34ZsOWKDv(1Ol8Xemw&!NTob+Qx=$t9?cvU{bma1-wKEn}v} z6$?$6LgSn$>_7Y;;A} z)+^ zOduw1I$e6=T*lRk9D(o+1st?prB_LPcGdA7*bc}ObAD`Ddox4;oGc(7c4q#51!zS$ zOi;hYYj!8^NWy%*yv#uZa;hgmbJ{lAt*MWjkn$8>A012_O>FQijC2II1U9-6@CVV| z0uJHO9?db`<5rhU$vI5Fe(KTDiaKC$iP?wXcO7s{1>Y?Kbb$wml~LVxOAV+I)Q-^< z3Z97t;QbGZw!`VFCmTDjokny{+V|N#D?i{7zaVEhWKj#F*~H2WVfF53&yv!IHrtLV zEFHLFHJ)QR{ooXsN_$>;p2`ryhBA_P`kOZOGE)41kizF_R#;3=qSw*9a>h{M&Y5!Z z)BZ*Ut?THIhew49^Gt=(Xf^g8oH5=k{xA1CSGv&Y&|-eE+sIaq8I=BtDt`U~XwE#T zg!Sz<0D(AQncK^^r4T(uVn5f^lHwm z8yr=~?mCL3a$o}<-jW)U$vFOuLTgDpQrn?2c$cx?1rp0Hlpv~|oKKVK!|UKz-kyG{ zTRv*^vV6!UY(Gt>yI^pHj`LQ$;kK0lPOwd9ps?BMgROz=N_XbZE4O!HuUY=!zBfOZ zKrKhpYZ*!7x^!Zgo7McO7-{(Ub1Y9vLZVw`ov`GZgyY8}kUZz7yn&aFv>M6^qzQ%FUD7DGe@F0RZ)*dFUWoFyYt8s>L<(;!jdCVycoDS>t?DPPA*y1Y;Ael~ke z9FnT9s*p_&4yC951BtgwK?2rApM%Kcqla)z3{4;|>%NJ12S!RjA4lbDo`$?)8YP(i zq;B4w469i}Qk|eacsFS$@sd>rT)qU#jFP0P1ZB z{_VT|HDcIq7yF9imSFb9;=3m>ASUp?5{7rlgN)eMh#}=_0nV`Hg`1}a?uX5`Hp_g? zfp9nO@WqBt)t|p9x}D83DW*UwlF+NbSFA-N!|;AS10a!7P&`LRkYFvZsk&o_`?OPme#V@|PAT9V zAbna8;2iZPg!#j}KLKj8M8@cL1HPw$Em|=D7a*KvAXNp^vf&f2;^V}J)gl8#zn_6W0HyR+lRq?#H-r$jSsc4E+DBfM+~@kP8LU25C`pWen(Rgc~!{k~#R4pfpau=qBb=j<>-7fo`^)^iS0N_y#F4#l#|(C{oo9>8hyL6joFIO;-;P1_ zRZF=kKjwVLBvC0Q4$t9k5u1E{Bkw|owEW@7O@pYls0WehsYn?B+BicO;?HtQ{^Q+= zd$*Ov6&xjdYw=pg>!$}Ls3d-|z83Ur+L$~(m0-l>yTFr4piG5FW?TkNAth6&OCquL zk}9(au9K-%Q~k?}@57dQ77+;lC%6AAgfaNQ2s+B00lN~vFWt;6{EkCjZT)MIy;(}8 zM@fW&(^p7FuL1WF?d;Ai1HyONzP$fB6*zoaWPm{uj~?mOXz7_7%Mg;I-lyogp+{M& zwxziHIj^gxG*PwCO>Fg!;<)3z?0Ml?wQ1o;wc&Was6yJzsTbAQAwrRV@~_io@$R(? zKt@Zo#G!~8=T0EN#V#6FLZPiV*QD7d7#%|D^z46!BeGSZy~wZB)L?8Q#=2$;U-MF4 zIjmmhIf|^p{nXKC-g0tsk2z4>3bD3{Ub0cQ%MlcIwj>N?z>h0PC2ztWRHm?tNs8Y_ zkNBX;>LaO>nROZt=P~{H8%{lV=)|9NYTA5!I`ybc`aB%66;QLuJPPt2-Cvl1#g7iLX^#HXZX*SnmOc>;vZMiF5M5>jWJm2X z%Ni}06Ib%;;(~NYFcl!i=!jBA)ILmGK8C}bK`QyMn1Y}nAfY7bP_QcKr(8&joM~=Yx&S9I0ezq8<-fQ z+c}xFVdz2fwwH4MS22edN>Q0A-hZ*^P&pk*Hy(*)+lIZcG4;sS-L%tzHe=(~2mdQe zR)gj5ELoerPrQb%Ak8#+R7WJ6j4N@R;>1{c{-Y9G<;jAMa|9|aX(Y%>CpQdteI&N; z!q`oadj*|cf9kY`{s!~T{PqWQaP2J%5L+bkH$g&x&Zl%;lq4jY{fgO+BrSslfCVxf z|5RA8V-ov6vrtDxSwR*mTTS|itv3i_6sSX8-u}H!&fvHPmPwWrG`*Je+Y{H9@?>?~R(7AB(Bl{t$rN;_jk8{{ad- zn)lCcHcg*<$*T(`jQa*>mZQ!`c}=$s_uXktg=K#(7&P=nSj^UJZOlDuk|MGr1h+3i zO(?_0A*g6dU`pvMmc(3oEVnB3yAO4>#_;x8GFv!4hcSvUUdnpxPH0tINX3MEJ^vECuje6%FN{l2baW{E)B?Q88oS11kKZ7~$pPT}TyG+aZH5(p!PBmtwmBeR!CAYXC|Dyb z4}wY+_Pz!E2Vh}5(ZlGtT*?F4g=b3+opYh9^&zQF2fSfq>^-RnW2zrQ#$>{=8pF?r z+BenGlgZr$?OZON=`wK7;IlME_Et$#C7RLm*Id}`l-1ao#^e}p^^7Tf&vxcuZ(TwE zXqySlBC+gheOX43tlJV<=;WT`n|hh=(3g0$PO~joPcx)F6x5{FT+ZX>ABg! zbCdaMO%Avh{yb`rm?5UWLndA_f}9DUu_Xn8T$6}HtBrQ_WoxvSXl+o06?-NF!rV%F z0W~7}wu@||chEQL=*93V`$J#w;i;h^Zx?IYH>BJC202g}+!PL)OTR1pFs~%LxvpX* znO8d)*>fFOeK4^IKlUuxME5#?BqdI0KYB(_?j?1WaoE^Aw^hEW_KntupzhttMUsYa2@$FnLru2tzh&hxlFz!jxOd1Ml%dp)50IW z!lm^V+H|f#Rle1G%r>t+e8?mB^V4R@E&RZKUi-|)!x-DJj7!%0QUgdqwD~JKg9lCd zf1jh;Pz4;Y?zW+x2Drzy`FT*(`p=+VF>%!T6`8Ma2!UvW;tUjUm9%WH1n03UtL_6IIe)gW zoT{luNEG6F6`6f0zgO@Ym=jXGc!ToEr}U9*6u>+!&vY~)&Y?#`JXg(3oxLh=JT}xYc zL|r?sSFkVpa*cqh@Ug=jJa98GaHs12EG1!X(U#xc*#!D2vguZ$uGcW<5}I_rKzi|Q zQ%aU}Ju*t!IHY+6*Jw1^Xl%P^iT=l1dM(AT^rVd#WcEED|qfL=0Q%VC6OQg?vwQy!p z4;h*Hak53t`kecpqW<2CLEBEJ4}C|hM0X~UkHC8LT8g^{*WW1&RP>tWN%!S()$M!H z!F|xWS<tk^gP}D*ekwiZ37@!FFO5$^-Y30; zmortLf1N8>FMI?*-~i+Dq!qyi;BYn+n-&$N5^{%I`dY#fG5pCZTST`pAWpAymO{W6 zO_juAt4rHM#>G`Tkws1^#W|P{crQ4|&1E$er^^1$A~=jjWNozT@&<;KcWsh993V_BYpKD%-N2(1uxvH*0QqK5W z+mEk>783R!Li$IQ6CbsAv)~wWi;a1}APrXkjauY=^e7HvyJva?_P{Tss`znIJ3OIs z(E&;TC9CPa*NXI9_GZ7KjQOy!&6st_(EM+Si0#vaOS8f87MEQfe|X$w`<>&=yOg>;3FBLN}Ewmg<;aTNzP8 z2G5lminyQXS!WV9&2X-?!IQH4abs_>ms3;gmt?)j6k9YC){w11+wXeI0F%_WE&*(zJt*}+X)h8H3J~B;%-;6&r7MQTz~)NX#I~6=E)4OR0dla0i4{%*zCQz!`p?}Ta#=^8t! zN*FWn&Z{}fagO43?s{O6oh$z$a{Q^F%pkjq28aw)XPr zxLXpIO{eqdM{7+0W|eKaggG$_kt7mbA|<@_B^m|b2>e>)Zi~=n8-X7(?enjU^c2YL zDMfELck01I+=vUQ?0=@n?&TWm!$OoGQ4x9Zf~^<023I1+*29y&rH?5%j0Y%t9Yagw z(=KY0QM8k;<(a8`ev-_hF{oXFVof|V*DRy1#6Gu8A?z~_277hDII#j4CtywheK+pZ ztydqi5kmw5fi=$>88Knep|!NLQZL_@Vkh%U9HHKG{pr+zo`*B%rEcN5tD&Wsm}f|=|dLx3P^v2MURUq%=cq{h5Z(J1+Om*t|K&bD6!gPWeMnA@oa!k zZ(gZYNf#b}l$Gu|ae+t~mg-0@*gE^G1=X^)?Gyz(f8NVKz6p*7A~djIunJM=0;kZ8 zG??+_$PYH>T#R0+UR{~4u=Qv7>$rY_!kPJ2IfYzTb|cTVGrz!x3xnz^!JpL9$-RuO z_re@zjZ-=E$nw$@IyO|Zh_R$?UhH$yNBYPnmzZG5;M&wxR z7SZv36um-1%i0I375w#K=f-_8@pC3S3KqYLz4%6sd?&pOzq9Ulj+>dzy$z5sj7t+| ziZ2P;GuMnnw95JpnD=u=Yd+%4jLFT6TGTtVx$-Wwe zOIpN)88T?l$IpnoT_`7c*k2$T{Tzts^en(BdUNS!A3NE4LgtD<`=TZ=D~Wz0o`ghX zezi+wma|w758TDGDz_lKUr@$J%}bpfgLMg9EdTrkEZj$E0Qif_DJ)*okN?zc z16XE9n?-e_tLhK(_+uBq{YkEo^Dwf>52y#kI~g0QtMEM6$n2}QN#wde3m#_05oIFI zd(FM^sK-UwP51ZFrgIBqOq6anl@YUlAxw%50Sbans>TB zz9y`noJVv$!;1}15e;&4_ZpQFgtTL*c+z#_;5^8xdK>rXS1fw!(T>memkz3}O{-gE zven>UH4V1aHWu?Mjshs_b;A6!HAMvG*lBw0;}B}*a>u$(N{{&b))qC3=h$YPX8p>J z82`ThlmAjXW0`C&mZN;ll`!Rjyl3m=PhKS_0X9xAcd}v>XX(NctwyucCSm=OoC9EA z9e%_bPUwK7|Bmro%o=~2gi~Ym3bL*8<{z)BUv(Acg&*tXEQzce=Le&Yda^~fl?e#= z_(awN6g}5G#_0pyd`nQ|_Hp(Bn-l&Mc=sxCyI1F@G!pET0pg|{`n2k z?Jp3rg_vR}oNhA#fbOl z#(3s7>#ZRdpXG)Q^@Uf!FOy?OM!LrCb?cPY+|MYA`UW#IzObVVWtW$Hj>$|{=pywl z8RysEAl86RubszFgeC;tI*VzcM--*W11^+?BjJ}rq#y$BB~_)WB3Shn(HD=i`haLP z4Ez?d;hHBZ$9DN)_QcPpaXd~@`RyF8aa3Ud{5roG-nFQ@8(p|cP zMp3_Hp4Br60$J@jlxG@$n00vZo*IwK8!&Dls91vHF@dfCu>V6^)$f<;_zyaK%PR0$nTorRUS0&&;Xmuh+6cU)* zpH9)%6Pq7oz&%#ERh%dhM$&7;n>y{Fwr;>G6ORAhmoc z4kS_|9#uj>0`D3ikL4x?ZsvAG(+_%aD2X3pLl1l>e<1vfq7=$-9_e<696aw7nJ>tF zKX%>6f!BZu10=vNSG4hsb2PUy5GTEWt}Y;98#0F{t&I=OM?I_{81gUbJmP&hjo{*wj5!=t7IQKHX?KT>P?7YXjka-8Bt^2ipYSAYGk z>sJ75_0NwQCqWIDp`?brz=o^Jm}LIV7A3T?EZH)b=UVx=rs`3ndFi41Vs7@(257e< zZH;URQy);=8?$UE&QkmAT+OZr-G^KtkX8bYQhd1N9KnBm0;v^%Fu+Pd;WwY*DH-;- zgOo* zaG=rmdWh)-wEfgWZBSIl0o1_)gu5D;rjwW}e{&xbpraC_PsTS*EwKGAMZ>S%t?T*R zHomB~3b%_ezXD}Jw9q{~%5@d`ABAyS*$pXP3C?`u`r65WeX4)ky(oDF_iC(at6Ha2 zV{*wed`J@7dus{Ztl;d3GB}*hTN_!Hi5(|uaKs(b@je4T5m22MU9)(SE0|^(X^6}X zseUGL5i#{JSA~qrn6E+X0@MZ7(C5tt8NDw*1ATWTw(|XT=@j5fC}648&CQS+FJ@#o%=e z*dz$Vuw)KX1)GBU+m670FlraG^R&`KSJU@bh<(=Wr}D^Lrqn?+Z6V6ZIVykEnQU`` zDXZ7S`^d=P^sIMZMHuJqCb`{SWj~le_~lKsMBazPY}Mc3L>!~iQN8Vqm6!Fa$4$eL zxs<(^Et=$aul353Z7MOFzF*w0nA?IiLb60g-{bkfvzQ-$eaeK-QaBIRj8Y*&;iwhV zwfblNQ0JnOPmfCRtT*@{09HyWD*4=i3z&1I#aVj+^dEx`&l9|~#TRc=&p%r)1iio8 zZM{qVL6{S~#Gai@v7emDcY@a!)M5U`=Ls%O_JidKZU+h;oh>pjAYX5(U;-lhRznPH z_SN5cRmV<*%x?Fp67d-1j|uuU-9Ggrv=LwR+!mNI4HFXkaJ-|E@T^+rnShSM^A)v@ zVp4+Fpp?a)JYDsq>vsIFn|k@>Nx%9u+z0{A=6eHs)krwaUomFMUOP@$7WrNwbD6B0 z7}buzq*B9(7W~OgOj$~Tf-YLIu2tDTC0p5i z6tyTKg`eHUsDr)c>r>=&mP5Fc@F;idfC;&!a&O!VE=+8Z5@fiiZqwbd%_v?2T)C8- z%W&7HMtBlpNEMAPTgLiOyxy$LqY2uVgE-);7c3_rhKMy2UFBagWh}kH7WNnsmHXvn zu>0ZUR5Vnrb57iCN;(AnynZ6|cV&!ukTO>U)WXrrd?%klaWeb_`DB2^B^Z)2>-Vd7 zmI^Q%zYW>?5f-w+hu-RQ7{#KGo9^27Qu#`lfPY}6*&Or<%JI!R`kbn zmwI2pOVYvKj^mDMELJ&b(;+Mmz;OzbDdbrF>sV^50ED zV4@+&^EF@q<<&uk_#5uaMob`Dhc5$i*E|+;#<=%ys;z4R6`Byn<>10t!FC7w8-K z{DX!+oo{;J@0N2qti5j>$H-*1#c9`;rBgx2+BIPJ&7BW&*wXD4MX$aItPub}nD5~# z7?`&@wn^oFWCh8>4ihoSOtY%FA{;2TT7*SJmiPEl!`^7WO?H;4(-3Yd(|z1?C8lKQ z7vW3cjFOKhSpwNF?~%RlIjoLwCBkYxgSB}*I_@XFszgL`aVHBE!#77XZ&_zSYnQwk zVjXkvt#-S;;+-3v^@z7U!_!p0i2DxK{4W~O^)nQ~np zF)}v9$bxo*`=+Ld9$^Lbp5{wtmWIW+8(h3(;&-MBMeZ^k7& zS1Y+?;`EeCoo7!7T0L7Ivv;>b=k&sxcycb5Kq{li@GG=bvvO~YWSe!jU7~8LAGxLCSwqsAJ#G8f%`bT(saQWu7T1wC_uTBZ_fdV9+_x<@kwV6Glt2_x zfN=Ni7BQX?5D?fB1vQc`5d306Z*@j@t*}lioKs0`TTKWt^4n&wX_#x*^uLvrI!3+S zrdEhL$(M48x}rmuI`GE7cTa3$f{besT#m-#Sz6k#;c9{kzGlt~MdW@>gU(av1>~K+ zOICNPW#B#s!wo+rF7j~fqebnzb-s#BB(JKfOSz%O57?A~EZn5OO~BGs+DR@hs=!!t zA2vL>{{#oyx63}KNe=?fk{9EY{YJFu|+d ziX2^62nZ%7$V>M*IEnX6K}9XFG!6)p-TFS+j$6_0P{)J$|Emvgex0ok{M&y&prJ)O z^4==8e5Cq9XRn`D)AmRcM)rT`ZCZe~7 zrTdIf+x@D!v*qfbPDxp;l|aHihQxTF_X@#_WHQy#;!nY(<^6_&l8f0jI%4j-wq^Qc zE4*l(ypOg%zs0!DN6!$g1#IY9lZuyKH{i;%GB$o!*PmCT{uEs>dH=#!I;ASP%4A)q z#0vyskpM84ruEJHe8i0KsOW%lG3zZ)s(}WffgrI*7KH12?TyFw8uIk?)XT&LBRcsY z%jA>)xvxnVv8#_mMK1#jN)6VjKOVi@-2SObY6M$&^n$3|&5~H~Gvblq+ChS{2|a!9 zukh}=@;rC+4H09498xapIAS@isk5g98-Iw>I)u)`OmRK%`wlOSMIEK3+&&_n^Q3#n zVdKHs=@zP$b?iv0jj(emHVrVT;9BD`5&|(Ua;)gJzlAd0RxNH%X~6ZVR7jo%%tzQz zvsiC#*;MVNaZmZjMWK$$SdB|08oS^EA_x{v&MNST)fxZD;{i=AmqNpZKBMh%>gPGN z`wV$%`KbH1@7Ql&mytZYp&VXG6-`a$#%dP{(&RkM)q6g5$&yeJEK2B{S8ZQo5+F1w zfdHF`lpM=-^4WRE)&0lP;3?Q#f*NwLCt+Y~2h)=gzyp29FP7{>CR^{W8HJGF z(Fxdp)1mMVuyf$g^r>^~uVkOyL{~p5xrL-Eie5*WH)IaxYK)c1KP*+RAI8iM1nVkz zK07OkMLMLz5j-`vWPS}@;CNH};ts+LtwCD6O{WE=WEGby4u0czvva`AsV#Z|T?_q3z$@ za6iXgt`l*&t(npEy?NM%)_ZsI#gHNA{%d-&=>n~ScLMNgy(}96>ivNbQhF(>;&C;T zjIDk*mndVsrxgV@{O8wii-N6!=Se+2y2vk)v5J`zFW$w_c$j;c+s6YaD1M#NC^v60 zrH_iPCiSGcH=1a3Rn#)MrwxQ0!lgc4@B;IO_kx}-tGuY2C4TRlg8H>X7A*NQ$ljp2 z(uI|NJIg#W71Ycr55?HLvM$IReN@kmYSftZzR`->l-N z|4H}JeD~vF_F>L7annW4$;5tD8E7KgZ|bZ=Ux;a=O2R*uA-*UkzKdtYF~R?0OU!eT ziX!+Q4G!qZ9T14WZOiA7$M~9*|7vK-JU1OGs$YnpAhKMyTvyx+=_3E6xQk$O*3z^N z?|-#px89IblXp4BSJ>0AupHus`J_2_MW8SmraH|$oA|-V&;%&pC+Ow1wPFQmx!&I5 zzIw5OZACx|YJ~}vnhCyb;d++IwVJ8H8$0Sn z5R6EvNITAQm5avCe0Q<=t$hoLQ_JV&{q+;&-y#9@gNOC(mGk9$CgO(*pXjW{ep@}f zrc{Zb@Kd6$BCa$TNsnHB0P5TrqkEc_H8}EKySgdvhW^}&*PY1hlcMIb;(F|s+e@zU z214PfSZ_k-vduGcYsvL5rF;|jQ-LrYWP)JGa6;e(H9!8JDuB~VZ_Ye5N*pS_EWIo>V>5XHhkI5#(cp0QeeLFAevGr5+8^9e^m42ehGu0E(q>HR%qhY-M!07_KViCJiuwzVDhVnqMPg=I?+|@~^Atf)VA_ zb@v&bJ4L;Bw3Vu?t-f*|l%sq5 z;(#Gau(bV$DPEdSlXInfFx30%4<2(bgVmjw0KcnwK1~YINGhR0pTZoLEZ1Sd@yD)+ zPxhgA zuztU~K00x!h1u#axTZQ0%QXVl_u3R#y*pSqC3dV9RNsuxMSYW}wmgK^vkx=M zx;#TGJkzj13C%RPm-TCS|3&bN`pfZ*Lgg2G z*bQJYfr8AT=>=c%U4MUYuJ)14>Yq8!Uf93ki!w}rw#XG0g$l{L6eM~y3XjTO>QhQ^FKkJY8W!r$`=z|9own8( z*4j?0TJ3V6Qx6QdbFX8ZFzR@pIUZvJj)WD+X#kK?R$!b1yN#I_ro6d+Ns!Q?Xk=s$UaH z@G|8q4sfuL65dif4N8QNbGeqBYAeHG>lH5b^1mBj%+m348)#rRAow4DyMr3Fnui*? z@z-U1N93WxKR7JSLbHL9MId$;C`kP4k1=&69~CMJO3zFCQU7_zxBIsS|90?CtAF0{t%>9C z+-raP%)lM?Cg0;@383$1Qy0ID0xx`!;mg@fsDf3*WTM2; zCh$KE&${|=2Y*`qha2HTmH)&3Xk!%=wmwGh4#v<=(~`trNp|h_+!eb+%avfaLjC87d^Oy;I~fIWoF+@I zKd?xQE-v=q{_Nh9iLd7kE=*iA?z;TD+c&NwN~T?ag)48);wA!eq|%v+PwD~N@pDp103+(j}Vj05qH zX`h3c`{X6B_Zah3eh80me}ISPusK@uQ zQ(su|Wpi%X9r>sVf=$|nG^-m94uTqjFJ^UzB$@VC5@r7FZ_f5wHvf|93#kX3) zh}P1m&H#7M++QgO*-k7wD`{E%KCJ%!xe{0o*`j!^jpV&b2(fHKPn{~VycN`iJsX{P zn~b{=;&htCn#Wq07cphj=qM>f8D|bE)Q4||HBMuT=)$jCJGh#dYM$hvyy?6Q&&Tx$ zPGv|@Abw$eRn~-MN^)MK)NT5yS%7Fyd;N-iuyd6e4tis%R%K;|vAS>mCU3ABj@+2i zgQvt_wEit#68@AV25sDSCJOkF$o!KeMFf==V`(QE!nA=Y$S(^IZtqJ(KR1p63g7M zUx}~j{vsf^n9k;Av33vsLQ_r)`Q5^8N5C{n&M7iFCzl`EA`W6$NwYd-Ap9zPy-Rwq zLx7CSwQaE|8h!TIf7x8EQNfz1T_w7m^=Jf;w8+HG^>mV(f%4}*a3}sf6$5hV@onW= zW_dY-#%wTac>*oft2{EitFP9{Oi{eO@Tiwg$lgJ2w$(yFSsuyMwj`*6G!0yW6c=Wo zNJNh~&cxO)cQu;ULC!y7hH>s3)0_(!c!CMBaOA#br?3m7whkP+pMbY$UV|W?niA~8 zJQu!2yA)(D)_b#(Sg%bP6F+MY>h}>4K;9tw3Q$7ta~OWO+#1JQM-ftVZeZb)DZ%O; zz@ZXM@*H|b5I7?U&b~|{=>(SsCfHTwFWx(Q>!tlVsS$mum?ct%PzI}z)p3XC*s|$VORNMKxU~*_@~DG?Aub) zEBdn%1t@a$?%gQNG=pNR#A4Mm(aexJ(MNc>r-Yd!eXPQ0I#4)xzDOVJcOUfgsP-#X zGT&MgsE_93|IDsvDhf#GV_1=92A@I`VqEQ~F2R4TimmY#B_+7c1TSPi94BUakMA`N z8@f!`eCohySCxsVfBdR(!r0ZB72V0-#J>O=caP}yhwxLDb($zwJr{Hv&HEJL`3fb> z1onfEY!YmKT}gQKefHVpLsp4K@TXQkSs82Pa8SvcX&IK64(2$vPmYXZ%|&g*>4x59 z+5br5M!~grtXzsv__&-i#T1U$(Jxc*+MlK;$iAkuf9awjKYy|Q!;pL9Bz6KX(FJ+w zBg;1{Nj~=8%UXOs9{T3ep+NdkbuU~$HT`I2kaFx*s21&1$1Us=gI~Ryep!D8D1>@0 z?b($alP=w&&KZTR;EvKmWJ>*569J_~MIS{pwer zd+s?NN;QfJLG-7@(};gQ0002(&4)hpp`ZGxpL*Nd-j=v=}NmwbSzKpfrCm${`-UD$phkvqsPBHVtfj` zjE#+nj~}=Am;dr#zW@F2&t|joZ^bib&YU`R>fP^tcLt!9=mR)}oUllxQh)#N|9v5s gZ-4vSe?;T|4^K(}H_;huD*ylh07*qoM6N<$g0{3PEC2ui literal 0 HcmV?d00001 diff --git a/docs/development/batch-processing.md b/docs/development/batch-processing.md new file mode 100644 index 0000000000..77db5eca7f --- /dev/null +++ b/docs/development/batch-processing.md @@ -0,0 +1,9 @@ +--- +layout: page +title: Batch processing of blueprints +parent: Development +permalink: development/batch-processing +published: false +--- + +test \ No newline at end of file diff --git a/docs/development/engine-debugger.md b/docs/development/engine-debugger.md new file mode 100644 index 0000000000..d49428419c --- /dev/null +++ b/docs/development/engine-debugger.md @@ -0,0 +1,9 @@ +--- +layout: page +title: Engine debugger +parent: Development +permalink: development/engine-debugger +published: false +--- + +test \ No newline at end of file diff --git a/docs/development/lua-debugger.md b/docs/development/lua-debugger.md new file mode 100644 index 0000000000..ee11ff5d96 --- /dev/null +++ b/docs/development/lua-debugger.md @@ -0,0 +1,66 @@ +--- +layout: page +nav_order: 2 +title: 02. Lua debugger +parent: Development +permalink: development/lua-debugger +--- + +# Lua debugger + +A debugger allows you to set breakpoints and review the program state when the breakpoint is hit. The game ships with a debugger for Lua. And with thanks to [#3938](https://github.com/FAForever/fa/pull/3938) that debugger is now functional for everyone who has a local development environment. The debugger is not functional in any of the game types of the FAF Client. + +There are various approaches to enabling the debugger: + +- Keybinding: Alt + F9, this keybinding can be overwritten in the keybindings menu. If unassigned, search for 'debugging window' in the keybindings menu. +- Console command: `SC_LuaDebugger` +- Program argument: `/debug` + +## Overview + +![Screenshot of the debugger where it hit a breakpoint](/assets/development/lua-debugger-01.png) + +In general there are three distinct panels: + +- File explorer: allows you to search for a source file to set a breakpoint. Double click a source file to add it to the source panel. +- Source panel: allows you to navigate between source files the source code of the selected source file. +- Details panel: represents the program state at a given moment when a breakpoint is hit. + +There are various additional buttons to interact with the debugger: + +- `1`: Resume execution (hotkey: F5) +- `2`: Step into (hotkey: F10) +- `3`: Enable all breakpoints +- `4`: Disable all breakpoints +- `5`: Clear all breakpoints +- `6`: Find (in a source file) +- `7`: Find next (in a source file) +- `8`: Find previous (in a source file) + +### Stack tab + +Represents the [stacktrace](https://en.wikipedia.org/wiki/Stack_trace). You can click on each element. The source panel will jump to the relevant file and line. The locals and globals tab are updated with the locals and globals that are available at that moment in time. + +### Locals tab + +Represents all variables that are available at the local and upvalue scope. You can double-click table variables to show of its all key value pairs. + +### Globals tab + +Similar to the locals tab, except that it represents the values that are accessible in the global scope. + +## Controls + +- double click on a line of source code to set a breakpoint +- F5 resume execution +- F10 step-in (can't find any way how to do step-over) +- Ctrl + G goto line +- Ctrl + R reloads the file + +## Tips and tricks + +- The moment you set a breakpoint the game becomes effectively unplayable, regardless of whether your breakpoint is hit. It is best to remove all breakpoints until you're certain that you're ready to reproduce the situation that you are investigating. +- The debugger can be 'hidden' behind the game. To fix this you can run the game in windowed mode. +- The debugger can be 'offscreen', if that is the case then you can reset its coordinates in the preference file. Backup your preference file before editing it manually. Removing the `Windows` entry is sufficient. + +We highly suggest reading [The implementation of Lua 5.0](https://www.lua.org/doc/jucs05.pdf) for a deeper understanding. In particular chapter 5 is useful to read to better understand the debugger window. diff --git a/docs/development/setup.md b/docs/development/setup.md new file mode 100644 index 0000000000..99d90cf7f6 --- /dev/null +++ b/docs/development/setup.md @@ -0,0 +1,79 @@ +--- +layout: page +nav_order: 1 +title: 01. Setup +parent: Development +permalink: development/setup +--- + +# Setup of a development environment + +Development can be difficult when your development environment is not flexible enough. In this section we explain what we think works best. We do not provide details on how to use the tooling outside of specifics that are related to Supreme Commander. + +In general we assume that you made a [fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) of the [fa repository](https://github.com/FAForever/fa) and that you have [cloned](https://docs.github.com/en/desktop/adding-and-cloning-repositories/cloning-a-repository-from-github-to-github-desktop) your fork to the device that you intend to use to develop on. + +## Tooling + +Everything works and breaks with your tooling. We recommend the following tooling: + +- [Visual Studio Code](https://code.visualstudio.com/) as your interactive development environment (IDE). +- [Github Desktop](https://github.com/apps/desktop) or [Github CLI](https://git-scm.com/) as your tool to interact with Git. + +For Visual Studio Code we recommend the following extensions: + +- [FA Lua extension](https://github.com/FAForever/fa-lua-vscode-extension/releases): introduces intellisense - absolutely vital to development. +- [Gitlens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens): useful for seeing who made what change. +- [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode): useful for formatting. +- [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker): useful to prevent common spelling mistakes. + +## Running the game with your changes + +Open up two explorers. Navigate to where you cloned the repository in one. Navigate to the bin folder of the FAForever client in another. Usually the bin folder of the client is located in: + +- `C:\ProgramData\FAForever\bin` + +Copy the `init_local_development.lua` file your fork to the the bin folder. The game uses an initialisation file to understand where it should (not) search for game files. The initialisation file you just copied is an adjusted initialisation file that tells the game to also look at your local repository. We still need to tell it where that is. Open up the file that you copied. At the top you'll find: + +```lua +-- change this to the location of the repository on your disk. Note that `\` is used +-- for escaping characters and you can just use `/` in your path instead. +local locationOfRepository = 'your-fa-repository-location' +``` + +Update the path to where your local repository is. Make sure that it is still valid Lua. And make sure that you use `/` instead of `\`. + +Now we need to tell the game to launch with the adjusted initialisation file. We can do this through program arguments. We recommend you to create a small batch script file in the bin folder called `dev_windows`. The content should be roughly similar to: + +```batch +ForgedAlliance.exe /init "init_local_development.lua" /EnableDiskWatch /showlog /log "local-development.log" /nomovie + +REM /init Defines what initialisation file to use +REM /EnableDiskWatch Allows the game to reload files when it sees they're changed on disk +REM /showlog Opens the moho log by default +REM /log Defines where to store the log file +REM /nomovie Removes potentially lagging starting/launching movies (will require you to hit escape on startup) +REM +REM Other interesting program arguments: +REM /debug Start the game with the Lua debugger enabled +``` + +For Linux users you can use the following bash script file instead: + +```bash +#! /bin/sh + +# Change this to the location of your run proton run script (you will have copied this into your client folder https://wiki.faforever.com/en/FAQ/Client-Setup) +RunProton="$HOME/Applications/FAF/downlords-faf-client-1.6.0/run" +$RunProton $HOME/.faforever/bin/ForgedAlliance.exe /init init_dev.lua /showlog /log "dev.log" /EnableDiskWatch /nomovie + +# /init Define what initialisation file to use +# /EnableDiskWatch Allows the game to reload files when it sees they're changed on disk +# /showlog Opens the moho log by default +# /log Informs the game where to store the log +# /nomovie Removes potentially lagging starting/launching movies (will require you to hit escape on startup) +# +# Other interesting program arguments: +# /debug Start the game with the Lua debugger enabled +``` + +Now you can start the game by executing the batch/bash script file. If all is good then the game starts as usual and you'll be in the main menu. If something is off then the game usually does not start. In that case you likely made a typo. diff --git a/docs/development/start-here.md b/docs/development/start-here.md new file mode 100644 index 0000000000..5fbb140a5c --- /dev/null +++ b/docs/development/start-here.md @@ -0,0 +1,12 @@ +--- +layout: page +nav_order: 1 +title: Start here +parent: Development +has_children: true +permalink: development/start-here +--- + +# Start of a development journey + +{: .no_toc} \ No newline at end of file diff --git a/setup/bin/init_dev.lua b/init_local_development.lua similarity index 100% rename from setup/bin/init_dev.lua rename to init_local_development.lua diff --git a/setup/bin/dev_linux.sh b/setup/bin/dev_linux.sh index 35ffc1dd0f..f0a1a59f70 100644 --- a/setup/bin/dev_linux.sh +++ b/setup/bin/dev_linux.sh @@ -2,11 +2,10 @@ # Change this to the location of your run proton run script (you will have copied this into your client folder https://wiki.faforever.com/en/FAQ/Client-Setup) RunProton="$HOME/Applications/FAF/downlords-faf-client-1.6.0/run" -$RunProton $HOME/.faforever/bin/ForgedAlliance.exe /init init_dev.lua /showlog /log "dev.log" /RunWithTheWind /EnableDiskWatch /nomovie +$RunProton $HOME/.faforever/bin/ForgedAlliance.exe /init init_dev.lua /showlog /log "dev.log" /EnableDiskWatch /nomovie # /init Define what initialisation file to use # /EnableDiskWatch Allows the game to reload files when it sees they're changed on disk # /showlog Opens the moho log by default # /log Informs the game where to store the log -# /RunWithTheWind Ensures single player games are compatible with the console commander `wld_RunWithTheWind` # /nomovie Removes super laggy starting/launching movies (will require you to hit escape on startup) diff --git a/setup/bin/dev_windows.bat b/setup/bin/dev_windows.bat index 386f8791fb..aa4ebe88a9 100644 --- a/setup/bin/dev_windows.bat +++ b/setup/bin/dev_windows.bat @@ -1,7 +1,6 @@ -ForgedAlliance.exe /init "init_dev.lua" /EnableDiskWatch /showlog /log "dev.log" /RunWithTheWind /nomovie +ForgedAlliance.exe /init "init_local_development.lua" /EnableDiskWatch /showlog /log "local-development.log" /nomovie REM /init Define what initialisation file to use REM /EnableDiskWatch Allows the game to reload files when it sees they're changed on disk REM /showlog Opens the moho log by default REM /log Informs the game where to store the log -REM /RunWithTheWind Ensures single player games are compatible with the console commander `wld_RunWithTheWind` \ No newline at end of file