From e05b318157e44df7af3a0d5f41291dbc20a39dce Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Tue, 27 Jun 2023 00:54:23 +0530 Subject: [PATCH] finish up help --- data/ui/xbox/helpWindow.png | Bin 0 -> 17466 bytes src/gui/AboutMenuOptionsGui.hx | 88 +++++++++++++ src/gui/HelpCreditsGui.hx | 233 ++++++++++++++++++--------------- src/gui/OptionsListGui.hx | 16 ++- 4 files changed, 226 insertions(+), 111 deletions(-) create mode 100644 data/ui/xbox/helpWindow.png create mode 100644 src/gui/AboutMenuOptionsGui.hx diff --git a/data/ui/xbox/helpWindow.png b/data/ui/xbox/helpWindow.png new file mode 100644 index 0000000000000000000000000000000000000000..4f25d02eb5711d28cda6599acee2b4bf1aa90d99 GIT binary patch literal 17466 zcmYkk30RWZ_W-PEIZkO!&ObA^nq1n<)N#Qz+sxc5r$te$G)WORas#)@Y#L2VOT`5& zEj2@O0dv76OC=G?6cSu>K|#b+#NF?G@%Met_dN9wmwWFy_w47~dwP7)*-qj2eZNad zNh#Q$KXX}1YRiz6lr-(PZNSL$>*~G0hcxQ4-6^Ruy4oc0MHX)BWGf|Ap1OVY=2qal zeDHZUl$4a>NAR!o{~fvzFC}%FVSmQ^vt3deXv}DG#rCVN*n* z;#c4`BD!guPS8-^jrlUP(i5G*XtHir)M2Q%?|4=@cd5>M@D<*mOa#OEGccbyvw`A) z8InyZ-D+;*$vg5g+;VJZbD2$$3}%3uJz!PGkMxY2-WjKucAA>s_nc;LC7`~i=2Wp_ znJ!)x{!p%aYhiB1o+f@mzI81m?2Ep73PaIOG}h8gs&bX{wuy7|{EC}PRctGd8<*?0 zJbk=anciJ$K74iU$AZb4=C@`GTcS0ONFI=>6~Pxbj@j{@VoEnkDzZA^HhX(Y9q=!i z_*b4RCd9Y(ALtt67uRQWpHSdr$(VrKxDweU)|^$0OPGMGLI@jIVb`#xE!^8&tN3j5 zHhT_qflFWx%DJpBsm-@q_Drp4u37T37np;;8-YhEQ~AVBw}a@Wr@6&No3+39aXA%X z@}K-*azUy=yXEA;BAtyl$;q!j_11CN(hOOF!l6p3J?EB`9zA$ixnJWyelfREtI3S6 zM2=GNaDl>TsT%y})yHhAV36&`@x#RJ zp){x%G5Rnz7|tyu1v-|z5S#e})o2Vw)U>*Pg9;~9%0vNH6s{kKOos~4{H5acGVBuS zy|J%vii(l&mnWK)Sr#^LEpFfrtl?+Z%S7D$!&$2remERAwzuDin%fR!!rX?XTJuLp)1u{x zNNHN8+&Z!4m-*<{n=UckHlYLq;_0=PXUp11!om`ofuUMluY(_*W3AB0pV=s)=q0lh zwsI$+w0e54=+YpHfhEmPlfpNyPKWqCUTAnuAwNe#uW$wZh&R@TM&tWkbr3Qy;pUKTf3@!hCb(|+?}2mOVtAh7y+ z)Gp={w-4Hw7~Vj_SaHqW1(>&7)&x}b+86}GXz01xS+>0r(OVlw@Nx|jWLA0lFVw&} zW%s!L`0@;+7*>}xzxWJMj~&)CM{2-@uM_5upcom&VO0#b4pIYiLIWE1CA@)vdiSKJ zipZYZah^gx%OQtpxIu}zlSuOa_2IaF=8wd4y{+agp9`Z|woPahEcgpzG0V4t zRyf5C)iBTwpy!guVRi6~9~&SV*(nO4FZcT)+Nf`KCOx}E5m1IrM_ zAdp5iNK+)y7v4UE%7H)ON?H8&T={ml?byFnzeI28G%GvsAXMEjga6yl8#37XY{Xli zo6~I`^YD~M`g+xGaXfeCBbGb1%SdBq8kPnjY!oOSH_9rUd|pUcY<^!>`8$+ za~WMRoHJ!lb#Jd!quI)b9`-)0vi+k;?~7wO)@27a(!8+v{mvF6Svj#6mOrF4B+Q(x zlcD>#ozXa=4V{%m+z-W^<~g2edgG&!(r5WHFYVVcow*Z&ZqF5EIj0$8adAf$2 z^42th!?YNzjiZ&xK*eW?$PQ)PWnam{nIGd!%4|E^yz3zKVpeFx) zF}0;RTAoL8eN6QwK({ZhVeww%VYDV7fz#ow(@J|Zazcj9sR(E}_o9m|9Xi{c8r#2SpBS+^ak|UkxEHWBe#hT`r}035_^Rf8n<}?j4$Yjj;~fc=|Ae z7hPcPyMhKSYt*$ngPKhCeK-TqOFe4(s9VJ$?x-`{?Bq$h?+Lkfd;(%R-J?TPg;HP2 zpg9C;Z|DT1BMz(BL47E+%4PZAmAf*eU^bR;=?y{fj8yXQHp^W}H`F$+G&zT_Z;y{s z>8PhYE04Odyt}*ED(cYa*{RR9=moMcBpM6ase$jHocD?t?+pA`TzSuo17BR{pT?wM z4G7_RQ0{q7z+)J6CE&S{$o&<)e*peQ|D1U5i{h|u2uAFNs7oAR`#N+lyOJ2SMUHFk zWE^6=#!l#03gf(8PIf8rdYe~Z%BAg{Nft$6xO;mF=#ACZT>~-{6OU2~yo!m1M}B7; z2j+PTjg3%e1~4%jNKSFCL9LK9W{rG&$t!4TPptUqFCVuHilMr4Q5m`R7~4%31e?$0sS?vE;M|H#(!N3$xy^+LjN?(kX)`$+TW%OG^WtnT%6Yp5 z+()&BIBERb#T>Ry^N-p8$Uox4>PfX|=PQT$@QC|ogCN$Qny$uuuEl7diwSdNOsr!#-i*0?@s0^X9N#T?vbOYF44^s& zl?@aj87_3^V3>g0u`=?0Tf49Tktj6rws5XNzQA~a%^{;3iu7kuKaPAuoEBPFA_)U) zx5z|zsiu*4+0FT>D?zl0TI>>YfaN~e?#i6?SXf=Hpab$#H_tUfk5dE_RtTcrZO)z= zJ3S1NQgMZ=(en)#L`^jOU|N$_Zy&oANyB;yWqsMGU1dsNZ4*0NL&^>o8l@P>VwQ`) zw?0!CyS)}Bm;1RqAB_snuaSP4m50=U8`2?r8P!7`jO%-vi;mEmKUJY(?ni7fWrgev z_S$n!^MK_|HCjs;Q3lapVLZMMb;Fm&f4@3B@q;tqk0*-jjl2h*6S%oiJ1d1eWbl)S zjapp9T|7kq^&Oz1*0BA{gRRUM4!n$ui0NTliRV525qXrbRNNSwiPMA%0Y`gI#PSoy zuwvIMV={RJ5}+l*UUxo|&9}NNB;EA2624vN^&M;;i1;Yf(t)NOrRI-1^QxX9{6@GL z;T5{9i)q*Viku(&u&0V$4O0g1$%dUWLugNY$L*k5rCNaTbS`?gwdt+hifp%k_AIA2 z{!(rH6}LKKvp&Mw8D^iRHTgy@bbcf1&~Kcn;Pg!Skx?I$3W)9Z9%Pip<-#JLqO zB?ogGHTe;>rHmZ&x?vmhJH&J?`?SEVZdslSvH_<|>-tB>qx)@fu>0cS{g}q{QZ918 z{n#;-pO>^$m9Rb^^1wxLLbBoyyj$f;XOT|A^u8v<{+;Y;gjA~I$E{VB1iF@N5IdDs zANlJQOc%haKfBiU$?eRQ;L*B}@HU9V!Gvw!z`&AbEDXVZS<^D9h>1 ztqjSNa=z%LW$QW~1hH3D9!EWQY;`shbeJqRu5lV~zXPVDqjf88m57*HkZq@$J zllbStq2eH05DM;wo^r&4r2(nqpd`!xHiR@JatqG5tmJJdrUJhQUatuKGNzQ?c96aW zRVRa!4!dDd4vZHf;lrv0QW_o3;tt;Bt~j+3MevMwbq>_1W+0?on$D?D(LqG3$}+Lk zZuo&{fzqEkROv72_8J-*Xj1@_v_Q9tyPuwYMxnu46D6q zyhGDyR=T%F!)$zVz;wt=F|r${FJWeFi2SF58}%wplS8-Iu0^yDBM;@e`8D8~5owv6 z{kYuRhLIY4K1k!tlADWJ&vv%cMNI}S#H}+U`41|$1K4ThCCnJNS;kNm7dHWRy;5jx zYwCaAp%|&|@xVlM=_8D-AQ7EQAAh+`l(E%=yNCK6e)K;E;ArJRI(jHl8uCAl6I_YX zo**qsop{fw9q`)gW@7$c z-d3MDweKV5H866wl>JVvs@gW%uN0pje2MZDop*xU7H$K|an}?6)}NQo!`Ri~O)Agj z{Uv%gedu2oOz_0^M6LMh8i?DnJwAW$ zClEwtdu!WM%A0;^##vG_EC)OU3c1TABQ{tLBrV#!BIMMm34t z{om6koccb|bC-+2DlI|x_903)?qmaY0^C>iAJg~gSWFJP#p`2z+%f*=#2{djU;iO5 z%^qpv8`U>C675Cu1!#QL6Kh-hAAzSM=olr5p-z71feJM>s34ONh!%F7pl2MeoA2;#nxk`JTQ&I6JRtSp*5I4{0sSkoTMKqMuY`nd%8vs7;Y~I#66ZWAXY007tank%Pn-nT9=}sA*9Q^IpIk zrCs*hAtg@xN~jV0og=nj+*blCt<2}h!PM}kOEM8#AUg)ZBbJyPbzKM*^(va}ZO;di zFy2Fu#K&iT{?hzjVvA|*NLqaq35;l&yyd6|U*wui@&)mB+gSF_dnLkMP@;d%Uy7*w z^c`S&yR7Z|B))C(SY&mLc?Nn*q`6_%TxGMK#0}l0eKn4(ez`gU$So-7=Ddf~l}>^I zAiV82j%Ud@tmQ{20iY)LXdQJOZ(sV#)IEgNTGL&X1r?RIZ92QuyCgMMUP=7uptPm) z?oH7!zkn;NK^w=jY2OLinY+xSxAWDTO250RKw-$NqZ4og-ObwqL5_N=HlcDS zV(zDHKd9UzPuBs76?on7ZcaMGaGtGuNc7Vkv{QF+SkAG$kx#(LmE!>pz)E|4kx8Yg zOyu!X>H$L;z!avFFrJkF`$lG71Am{~qrH>$Wa>`kY^XKhR)Zvdg6lt{V}}p$7jKEg z*y@1{&U<^HE>V!nB3DW|+gY8Yf`mzfm0)WW2Fg{MzQHa^U={hdm)*4Bk_1}uMF;I% zbe;l}ss!uhmc9WI60Q|db&MhA+MzJc>Nbh(z1T@Z&ZKlor7YZc2gS<#%IR4bkzfwjDV`Tt6DpbANG6O6+AAU|@ETX{W;#X%N64LTZUd`?6+cx7()&Tfn zE~ng`beS;&m=vkw3;NVegW;nHQu&x!h@;$T)^B4@~ebB997Yb{ZwHaiwX>C ziI7`o($#0YkHlG~JUF+hA*RP}M*j0Eapp6i(t?M%c!@iiEcTr!yCg-l80uE4M@T}J z@_-w<4*FG%!Tr(Um$6O)ZQqDVx&YLyEAuq=J`x~Q#9j!Hja1Q z*DB#+T3-5#N7$t_^_eP=M%C{!lMv8ZRLW=V!T18EWV6gEN9;l8&`L?%*d^+Im%B;} znFsB)J=}#DQ!_Dq^DcO{`GL}#bwxSlb{0bgROkN%ci5h%_5atD&gL(b|1IIT?r-go zTC{X-FlA4DYP$NCNVWt>Msi=GusgLTYFz2Lxvj#_X~|?RdspnMZ8O>Q@3Ff-?7U;+ z93B_9ab3c-s|tN2m^zBIiB;H>Q;V;Zo8(z)9(Q+t(CirTk!Z4(UfMIxOy07ADd13b zgIROllbf;oU((TgpTn(fOa6a&TK+y%th~FP^Z1VH*3JAv>!A2lM9zy$1BA3%*sFm; zkgIx#x!F7E*$ua+rWDOmlmYJ9o1eZ~HeAO{h14oHA=)*z20oBD)FaBSq4VKQsD@;M zbiLCA{x6eQDTABlY5dY zg6p=&?*772pMl*fLdy4bU_tS_S`m5*0;yB|DwYLPVL&Hx9_9Ry9}3$aic4ZAecy~+ zvmbNR^5(K%Dg#9jx_LhAADIuspxZKkaV)Pd7p>*s5+}(t{9s!a-7;`Xvf8&PW&)5p zgtyoao!>^M0)27)(m@g@TzHKwg`2C~LD7}4)cu;wVz;81zdO-lP@t6<3SiM+>ofK& z`?WGcy8c4WONoE9^VJw1he_F~ezY5rXoyTi|0ipJAP1C5!#Q(mEm|O^ezxGWUiFy; zNyv88I9NA6!f1X%b!G?si~!;f60O#_pwBU{VBz(&B$(@Zp&cL58GGMwA6Pjk(fp8J zGHEf+2TURXElKvuMd~wkb>0JkatrrCHWs=fa=MX&r|V<}5`#zU$*OdaW!4p;Ihm<$ z=s%kfKN{kW`FX#ZSNRD3fTB{VJ;tXsWfsea_sbjDeu&%U1ll~RMVjo5`l;@cCa&z$7{{W9QWsZltk!Hv>isY zTpJ^S*97q+mlQaZZkR5J=H0-s%Gxzq?H#?qx32GbW4wJ$>D?;N?^TWc%a(|4?IjbP z)88{KDaj5%jChIhtXZx7VOTw|w$PQ@bvTtA-ZV1$N@lZ2(dBO9EakFSGgcq<~y0+=*#ZNvdjeKEpYxiX`I>klw;B-%~*&`Gky>n-_@-L42ycElD%hA zdZjcDN6`_aXV-nx_>C zLsRiKS3z;lxpF#0-{x8b!eVF#ET;+NULo|FOo++b0xPdpvb3d=T11VegI2tzuHmNn zSAj^^=#?kutZj={@wo6o;=d_hXjeKrb%C70R<)@g6!$JdDYjeVn!%1Q4pKtd$y%AfFQBq511iCQt1?raXYU5dSt`#T z58wd9T2J!ExF+#NH}rgpf)KeNvpf8+mRSt#G_n|~*>5qV3!MPTnMgMwU@V3Xijp@C+srDs?fFn%pgXsn7uQ`sLkdcgXz!lf*SE^2z0G5k@An|xaP64AzI=U)G@wCJ%UYIpd$$l`$W{z{m`Xr>8 zjJj(y&jz4%r(6O<8lbxQdDQzN5mLipt;oKPxXIB0NYGz9>TP&efqlNr+K4S}8UP}& zQl(Oh`JZZj_YtciQ>@da2KWKhot)*C5u2X}!F5NrgeVLdeCdinY*vCMC!M#T6^2L! zPQM^Q9DqDpdDG#nsa*A0@3=MD*NW|D+oRM`xsrU`;HVwX__V8{jcti?fy8@vXHI!M z5MNr6|6+jsK2wZ?@3;(dp*m1cm9?XP4e{G088fz|rVt|-7ujblsDj*|oJ@OhP?Y`h zuuFrq&~w-S3pem0Ysy1r@z(riy3RN2{S^bI4LG~i-e<+(Zrtj z0HcZ_7?n!04D7V2oz82ue(-!i1?(t`=BVzM`UtRIf~}CELOn?-1^v2{ij)$@-cM`l z$H5K1Z0^p~QmS^V`Ds~$o`iCw8D~lkA_bp-ZGim8dU|ZsXYw{D=r zsy1;zDo!$!D-3G|fY>I2wzVYnU2b1;_Dcljn80W-{(I}qyaQ0KMi8lhX;g*&=f#BjdJ^9fUFZ*Nfe{9-et@5Ls3C0f;VS5XeUa*_m z=>XjlsY=Fh52vQrNNieOf*@Z{pxcW^%GGnVo~ugIU?utXmi#^-@RM1zziiVU)mpV_ z(d|vn8HQS=W*2PcY3Nt5LvO&vY_E^t^}zAd8qVPwFU|+T*ld@JZ(&VkrXdpd#6tiH z2~@bIP5aO5A9}j{VPEnA@HV zl!;6^yJgXSq`9}rPNK1Q`9KA9A-pLS0@nIAt+P5|>rBCd((@hpG~Gi>AL`#q>`wLD zaUUL)(H@oZIo;ZJ6CLvo+GYuwvMs?o#Uvh|Fb=HCZ&<3{EWca`ALx^Aw1|ufFH;!W z28Moq`0SUO=kWPY+aHyHzUMN_H*tFFjK>*!cW&{$Xw+r!MCY`0S;>9l-0O5!c+(`{ z*bOgnK=;+3y|1DKr4?VGSBK9Z{kY>41{|Gy4dlZ+JoUKH!T8Pe@QLVDc)zrrl~=zs z5uabEa9Cm!Gjlysv+3s2vQ-JUW}?85m4|CN;1Ceyx7jUp$TU!29qBQi|+p zudAtR9(}4uH}S4bPe1$}hMMaKG{#u6+Pr6c^irVnA>nj9_urAB2i*|fUhp(md%pH} zP<6SR2~j2jHG9Yuevq?S>D7Jv(gK1t6d0T0V*ru$ryEJLCGmeo&&-nrH6SYED?OiZ z0)#-zuShv{BkT6%s8XbbP6W7fYmbNJmv*>7plBvz_^+XK{kC7|Yjl{D?DJr$w zg17ZZ!FnWKAkW`u{>1EAw7APAM*3H^O_ZuW$QP=4q{GDvG;@+s4>6d%NwvGY>I z2N>ykjp7jrlbOCFCKkHU`aIy);iT1rE}S7de^Yc!PFME=uWWd2>NEa&*Q=EzzO=;G zhbLOiDi?2x@#H_Dp?ZjLYbpy9D_`mSkFMmduIG@lu7xht^>`ajg1q0m@$s99vAAl=JvJ)_| zHVm0j7KL374FKxC=~~g?;(ZP{>utiZsT+SbLEE+~vY&#>{VuP_|IW3akY_(fN(F&Y z4dC28a#z);J?H;d7lsG#sn4u@5H42_K(K%XKivh}oX7H=%+4&)Z(}M(x@=x-HH`AS z8+76af2IEVvtTAKPpAgK?b0i)F%!Wuto?u+4g{Q_`T?Y5jQ>d+e;Kpg^@m-$&^Pyk z{DzJFOhC?}*lDEnlFWs_eV^U~EjgPwKGuC0;%rFX!7+dBJ#k1~VPaxYKZ{By^ly8yeTmcdw={3OW^$iZ%FadP5jBD$9fSlB63Sxtf zjNF?jaY);=^g+RyP{LT-K6czpDr;}cw@{oWVTZh?mSo3{AvcZvS^d2cEwkwj(x#Hg zHwOqXVSW91$(o*hW1H!OJOyVlhPk;p9NoUnY6L^!X znM%}1(N|YoFX`AYSF^EJi?&=ZX!(Ut9qZTMnAP79o|dFuxx%=Ol~MRp{G2H+IQrN1 zpSp^2*yWM2si!qSN>>vf%kwz1G}iL#McZt{lIlMoH*!MSKPKEXoPG4@!7gWc6QbY7 zRPgFdu$II3^{6doPdsF|m{{~xg-CmweUSFUndl4=Py7wWfRh>8E?oW};kEKVM}03e z9J^U$S+jIpx$vG|s5RuJ<3yQsu6>D7qC|H43s+WF5&|xS*Yy@UtNu1NIv#L$dkl<{%v5Q!hJh3LcT_v^zSWP1jtjCzOOZBVcaT}YCh z`A=9^leNqFzT9o={oGrpmRcTZ#%2vkl>61F-$xVRp@Fwa*|WUhS<$S#scy}Fd#jQ> z`43sBZKx2PTU+WsG&Z`tlGv>;Bf5utd<=~n?d)T99Ol%`ypm@eGNThuz1cP*1TG5{A30sJg0Z0OmcXlmitzAe+r2i^ z@kaaaZ;;vdO6nsC?bKF8Q? zNNQ(v!;{<9_5IRvNXJj6gE#&S!A=iP~EuZq8YbpAgQ?M-E7HL zbBxt7;<_q*j0g?i5@opXE67$pytyWedVV6hF3p5Dv`^Yuwu9 z(wf(X$ZNyPMvSs)1HDn9c%Y?4<|byTEa!WhA##)_8+ytd*&%dgN;$)i>zvoEK}jRK z56h3O{=BUN8(-vIYh3RFut7#ERN>Gg3mH$RX1;X`cVM_HRFv)_iJmFSSc`$oNn(-Cpv zh>gL)rM$rtI4= zoy_pKT_04^Jwp}QDfSxuHGa3p$_O!Tjc>EctZoo7G-Kv3N$RiS){(*cA8kMQD(4c< zw>KmNnGlyE?*8Z=Z#Nx+OIv3Bn{>E&+C({&Zv0$+WGaQ_)#`IBX>m$*aIrORtyy#R z-rxh!8c^mItMhk}gKW-wNzS?NxV`m>crENdHsTD^eL*WJomXHT|6i& zL|1CAPvX}nH&y}h2#dWb;mBb3s)Mgiw5#rO)((a6&o1i+a5wh9%#nG%!}nO@b!<~7 zf8><$BOLUu!DaLxhDNv#2>2-~by5h8ll?F}=+76Z5aq2;ITWg(b z#Px^$*ng9X;Q_H7>7GblA-eS|V^A3v^m&Qn`hl9-xIiNIZ*&f>c8aan7e{EIDW!bZ zh?6(UVMfPRL?_0WW#mn_*jkShXLOFjjnI36+LLYG-}ro|Y~9GY0}zX!j#oGQPqmIV zZab9e`O9mq$7_vfvy^VLwEj}Up*h&Pg=L$*t=Ua(4$9+lErN3pLf+9=-Wrs8o&E7oi0CY@eX`cyJ%S6|H^ zrXJ+M#@QFd==JKjmFmHj(R7!+U^Gif2P{~7t&h9)H=TsaUyiDftY}APozv+LDvvg- z_CGZGu*>mWo@$65*M4p)!3bhnpohoLBw>$f*{-cC#||sU&U53|xf`>$L=h*!P@{TZ zP1Z?=MV*bbu(|42U)!clA!cilSx!y8-<%iUCgE=gMX1{eshRX%a`3vm|>#3e!jt1SOx6n3HFc+NK}H9x3aH(oCN zgkRZMu4iyy(aNm9h^_$Ts>oI<>kTc!GcI0^T@V4P zYSSPh1jPsoQmw!AfxL$blk^+fi*%m*+}Z-+%8yh%yO;hbv%bzWUc9TdM%vVw=R$=a z_Oen-2&FISOYdn7j3STOEK1CF7 z_vE^E$NjuO!{aY=9BE$PI-9R)Mys6C9J>JudTT&eIth%b0+I<*eDzU68LQx&Rl!xIRfvipB|yUwn@ZdQgK|i_3BKEvREwc zo4#j`?B?Uk^&1v{u76Hajz}I^{YtU4&_=2yL)1LP&2W4SIeDXbXY5Sx;KthE#&=f3 zf^n#xDkC9)M?0NI-beHEN-5elGjuQO-(8&wk%vwhBNKw(?_WQDW_gb2ds*kb>$v5; zT!W3Z;QFJ-SJKgCYcB)x3RqV~OeVSW-9{RTF1xw=x4OdZtY+nX*pTJ6sbeKO#3@fUERPnS!Oerq;0@$#gH} zX7_#3)u}4diu}${qkf1UZia{(8m~&(!M2#bq@P;)^P%dDY2kaR`^MKjwwUicXT$n> z?tBqGTqD=(XZ;!Gcl7iE?wdoy{FtytoJ|oEH=lf0iu0-jln~$%@Jn%Y0UQ^l+(Scs zMp+KB86kwA4p*jmEo;Eo<2#KqIJ)c(6~>KoQ3L}k)}l)4G^Lt?_5}F2<~CWgP)8Z1 zkcGu!I*xC(z{E^edO6@o)+i2>uiCp}31uwR4z%nD^*d$e_B`U5NW1c{=G^k5C}0$Z3I#X zw1conOqR&9hs}s{86?%0aBC84$=%`%RvMgdwGjaAfpP;l#`DYspkr;S{SE=c5x4K- zyNk(JC}L|)xPl-XjmTAT6*1Kdta(P_l->mbDtY`A^9NK6pfOcToP=-#f2~sA_ z$-IZ--~Zh6TWh)5eaOxh)1Q`~URw+?hWF_o72fWoW$Cf9yj!)!euLgZN+5+l5W^v3 zNl3z28VM=V8xinRt(6TM_3+)Pgsb>u)67#@Ig}84TN4L{|7XvvoC_d zzJ;LC)G#94Qd-2U$B%Lym)-f0_5!uhOQE{RcS%!Jh)8xWnQIxBZomG<=6+;&6&8(L_MNRdEc{c8C^&6nS0qB^au(>=dE-ef9ZP}OUDJ&1)_~y>Dy4+YO zI7}Y+esv=oXoq3ut%wE&uR^@XDLn>)MTeE+Ax|J*F*XGewxflskT}J9Jjq5T@=G>a7&mW(UFz*j_Vb*LK4^sCQLWg!5lEx< zXYURyr6H8+<-aA|W3z95_cqx1_|NZy_jEX$Zokd7uoy|^z7Bprp(i*Ukmt>Bo>RNRA&0L&NAveF z<~)3->qzSkxFT@_n@o!M51mRf26(<3is10tXjv+(=mwxAOy95WA0gKS`ihC??PH*j zP+<%K*~(n0W3C{%z2}Hk> zTG>g-nGW3u4RloR`!hwGe^ zPNY^d=nml}^^J5Ho)fG5e?2^yL6Y!yBs7SYK@k$gb9~ZGq*Vd_W*v?sBJ?A|)q}bK zPlAanh%k3;d_%$m+`7T1OhpAz;JL^;a_uxlqypvRqRJ?Y2J!$FPF?fwMetudt2vCY zx=kcxK-nvz00N0#&J_P+#5mKcg$nhWh2K8`sT`-v-VJ}R(xG$0`@uzLo0uxyI>T$$ zE;n}|v8f?_IgoVBWL$>&OtJpMv!Skm8UbQ%;3O6eKcub~|Fl@fecVPH6KidGck&M+VXGWAb47RW>CJ7Mc zvO5JZaV13&fJEGz!(!S3R+x};sF!7^Aa(3Ym!V-0*sEdaD|GAVhVQDNzL32&-AT$# zw~?n&3*_6>=Kr8kU(RbM8)c{molq7e1o4s`+MT}^DK5(oU!VS!E3MXdVyDC7=Ltym zTvOHD;|mJ>`Yf#ajOC}Rk4X&(s?n>MX~J&OKxNP1cMP436nG{xOntcNKZ{%qMp+gY5_>qe&W+A3Z40Mu2@fbw|-Y$6+bc?s%1meDa z-E$&;UndG0nFJUzOCB3xHFlNqR{R6l^q`UVt1?0v1n9n7A@NJc+y^;6^U0Lu;tj}? z=}PfBMcg2Uhfv+m*=+RA?yG2!G%~Vz+2_LQryGjy;Qv5~o|gn+-S~HC0}Fbx<30|C z+FaU;#;p(Q?JvH0q8>?+gvE_JaqMc@IQ8(9N{kLVa}A9M;0N&Me4fcm{sW z+*rObEIT{@D_9MR-f4h-k6j3-1$bTAXlf0B&QI4dudckxixUh`460+pR6Kh_R)*raV&|-KhKsO8SYIcA!?V%eCxSIPWVt63if98!%j2UK~^?yy@ z8Vc)oU0ANTzQ-B5UYhWT-DUlW34w7Qm@W)d#{>cPNr;V-W2`x&`ACO(_Ny`jQ7_ql zp@Bl)+wc8GBeSoO`K_)kpx3>Q5it1r9O5mxHF;S~w!sGb}kK-hzS351LWw51zng zwas(`Tz#FWuX=mW%^qRh&v)`NNmZIEVKu>C3x0^rWge*#}Rk}jwtGk9K_kNNL;v$;j#*SHGofHuat?9HB5YIQD3!Zi#whv zSgQP`7IzixeU4?tWst=IP)4K3nuq3)h$2eR@u<|y1`bKQ+IKuEg?ldYoWARBoNbn~ z)o*?E7N?9^JEcic!}sxEQiQXJ;eo-j> z1KAtHCH#FGD^Y{7twG;6oPNdGpgk8+LVPv%SM7Sxg_XHdoA2*lMl>u`YLdJO!f$e# ds~d6^UjMnQZ8!q|--nd_S?4olr*7Q;e*nd`&Q$;a literal 0 HcmV?d00001 diff --git a/src/gui/AboutMenuOptionsGui.hx b/src/gui/AboutMenuOptionsGui.hx new file mode 100644 index 00000000..cc1f2cf0 --- /dev/null +++ b/src/gui/AboutMenuOptionsGui.hx @@ -0,0 +1,88 @@ +package gui; + +import src.MarbleGame; +import hxd.res.BitmapFont; +import h3d.Vector; +import src.ResourceLoader; +import src.Settings; + +class AboutMenuOptionsGui extends GuiImage { + public function new() { + var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile(); + super(res); + var domcasual32fontdata = ResourceLoader.getFileEntry("data/font/DomCasualD.fnt"); + var domcasual32b = new BitmapFont(domcasual32fontdata.entry); + @:privateAccess domcasual32b.loader = ResourceLoader.loader; + var domcasual32 = domcasual32b.toSdfFont(cast 42 * Settings.uiScale, MultiChannel); + + this.horizSizing = Width; + this.vertSizing = Height; + this.position = new Vector(); + this.extent = new Vector(640, 480); + + var scene2d = MarbleGame.canvas.scene2d; + + var offsetX = (scene2d.width - 1280) / 2; + var offsetY = (scene2d.height - 720) / 2; + + var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width; + var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height; + + var innerCtrl = new GuiControl(); + innerCtrl.position = new Vector(offsetX, offsetY); + innerCtrl.extent = new Vector(640 - subX, 480 - subY); + innerCtrl.horizSizing = Width; + innerCtrl.vertSizing = Height; + this.addChild(innerCtrl); + + var coliseumfontdata = ResourceLoader.getFileEntry("data/font/ColiseumRR.fnt"); + var coliseumb = new BitmapFont(coliseumfontdata.entry); + @:privateAccess coliseumb.loader = ResourceLoader.loader; + var coliseum = coliseumb.toSdfFont(cast 44 * Settings.uiScale, MultiChannel); + + var rootTitle = new GuiText(coliseum); + rootTitle.position = new Vector(100, 30); + rootTitle.extent = new Vector(1120, 80); + rootTitle.text.textColor = 0xFFFFFF; + rootTitle.text.text = "HOW TO PLAY"; + rootTitle.text.alpha = 0.5; + innerCtrl.addChild(rootTitle); + + var btnList = new GuiXboxList(); + btnList.position = new Vector(70 - offsetX, 165); + btnList.horizSizing = Left; + btnList.extent = new Vector(502, 500); + innerCtrl.addChild(btnList); + + btnList.addButton(5, 'Marble Controls', (e) -> { + MarbleGame.canvas.setContent(new HelpCreditsGui(4)); + }); + btnList.addButton(5, 'Powerups', (e) -> { + MarbleGame.canvas.setContent(new HelpCreditsGui(0)); + }); + btnList.addButton(5, 'Blast Meter', (e) -> { + MarbleGame.canvas.setContent(new HelpCreditsGui(1)); + }); + btnList.addButton(5, 'Single Player Mode', (e) -> { + MarbleGame.canvas.setContent(new HelpCreditsGui(2)); + }); + btnList.addButton(5, 'Multiplayer Mode', (e) -> { + MarbleGame.canvas.setContent(new HelpCreditsGui(3)); + }); + + var bottomBar = new GuiControl(); + bottomBar.position = new Vector(0, 590); + bottomBar.extent = new Vector(640, 200); + bottomBar.horizSizing = Width; + bottomBar.vertSizing = Bottom; + innerCtrl.addChild(bottomBar); + + var backButton = new GuiXboxButton("Back", 160); + backButton.position = new Vector(400, 0); + backButton.vertSizing = Bottom; + backButton.horizSizing = Right; + backButton.gamepadAccelerator = ["B"]; + backButton.pressedAction = (e) -> MarbleGame.canvas.setContent(new OptionsListGui()); + bottomBar.addChild(backButton); + } +} diff --git a/src/gui/HelpCreditsGui.hx b/src/gui/HelpCreditsGui.hx index 309a83a9..09bc0607 100644 --- a/src/gui/HelpCreditsGui.hx +++ b/src/gui/HelpCreditsGui.hx @@ -1,5 +1,6 @@ package gui; +import gui.GuiControl.MouseState; import h2d.Scene; import h3d.shader.AlphaChannel; import src.DtsObject; @@ -12,129 +13,151 @@ import src.Settings; import src.Util; class HelpCreditsGui extends GuiImage { - var manualPageList:GuiTextListCtrl; + var wndTxt:GuiMLText; + var wndTxtBg:GuiMLText; + var curScroll:Float = -50; + var doScroll = false; + + public function new(index:Int) { + var res = ResourceLoader.getImage("data/ui/xbox/BG_fadeOutSoftEdge.png").resource.toTile(); + super(res); + var domcasual32fontdata = ResourceLoader.getFileEntry("data/font/DomCasualD.fnt"); + var domcasual32b = new BitmapFont(domcasual32fontdata.entry); + @:privateAccess domcasual32b.loader = ResourceLoader.loader; + var domcasual32 = domcasual32b.toSdfFont(cast 42 * Settings.uiScale, MultiChannel); - public function new() { - function chooseBg() { - var rand = Math.random(); - if (rand >= 0 && rand <= 0.244) - return ResourceLoader.getImage('data/ui/backgrounds/gold/${cast (Math.floor(Util.lerp(1, 12, Math.random())), Int)}.jpg'); - if (rand > 0.244 && rand <= 0.816) - return ResourceLoader.getImage('data/ui/backgrounds/platinum/${cast (Math.floor(Util.lerp(1, 28, Math.random())), Int)}.jpg'); - return ResourceLoader.getImage('data/ui/backgrounds/ultra/${cast (Math.floor(Util.lerp(1, 9, Math.random())), Int)}.jpg'); - } - var img = chooseBg(); - super(img.resource.toTile()); - this.position = new Vector(0, 0); - this.extent = new Vector(640, 480); this.horizSizing = Width; this.vertSizing = Height; + this.position = new Vector(); + this.extent = new Vector(640, 480); - var wnd = new GuiImage(ResourceLoader.getResource("data/ui/manual/window.png", ResourceLoader.getImage, this.imageResources).toTile()); - wnd.position = new Vector(0, 0); - wnd.extent = new Vector(640, 480); - wnd.horizSizing = Center; - wnd.vertSizing = Center; - this.addChild(wnd); + var scene2d = MarbleGame.canvas.scene2d; - function loadButtonImages(path:String) { - var normal = ResourceLoader.getResource('${path}_n.png', ResourceLoader.getImage, this.imageResources).toTile(); - var hover = ResourceLoader.getResource('${path}_h.png', ResourceLoader.getImage, this.imageResources).toTile(); - var pressed = ResourceLoader.getResource('${path}_d.png', ResourceLoader.getImage, this.imageResources).toTile(); - return [normal, hover, pressed]; - } + var offsetX = (scene2d.width - 1280) / 2; + var offsetY = (scene2d.height - 720) / 2; - var homeButton = new GuiButton(loadButtonImages("data/ui/manual/home")); - homeButton.position = new Vector(274, 385); - homeButton.extent = new Vector(94, 46); - homeButton.accelerator = hxd.Key.ESCAPE; - homeButton.gamepadAccelerator = ["B"]; - homeButton.pressedAction = (sender) -> { - MarbleGame.canvas.setContent(new MainMenuGui()); - } - wnd.addChild(homeButton); + var subX = 640 - (scene2d.width - offsetX) * 640 / scene2d.width; + var subY = 480 - (scene2d.height - offsetY) * 480 / scene2d.height; - var arial14fontdata = ResourceLoader.getFileEntry("data/font/arial.fnt"); + var innerCtrl = new GuiControl(); + innerCtrl.position = new Vector(offsetX, offsetY); + innerCtrl.extent = new Vector(640 - subX, 480 - subY); + innerCtrl.horizSizing = Width; + innerCtrl.vertSizing = Height; + this.addChild(innerCtrl); + + var coliseumfontdata = ResourceLoader.getFileEntry("data/font/ColiseumRR.fnt"); + var coliseumb = new BitmapFont(coliseumfontdata.entry); + @:privateAccess coliseumb.loader = ResourceLoader.loader; + var coliseum = coliseumb.toSdfFont(cast 44 * Settings.uiScale, MultiChannel); + + var titles = [ + "POWERUPS", + "BLAST METER", + "SINGLE PLAYER MODE", + "MULTIPLAYER MODE", + "MARBLE CONTROLS", + "CREDITS" + ]; + + var rootTitle = new GuiText(coliseum); + rootTitle.position = new Vector(100, 30); + rootTitle.extent = new Vector(1120, 80); + rootTitle.text.textColor = 0xFFFFFF; + rootTitle.text.text = titles[index]; + rootTitle.text.alpha = 0.5; + innerCtrl.addChild(rootTitle); + + var wnd = new GuiImage(ResourceLoader.getResource("data/ui/xbox/helpWindow.png", ResourceLoader.getImage, this.imageResources).toTile()); + wnd.position = new Vector(260, 107); + wnd.extent = new Vector(736, 460); + wnd.horizSizing = Right; + wnd.vertSizing = Bottom; + innerCtrl.addChild(wnd); + + var arial14fontdata = ResourceLoader.getFileEntry("data/font/Arial Bold.fnt"); var arial14b = new BitmapFont(arial14fontdata.entry); @:privateAccess arial14b.loader = ResourceLoader.loader; - var arial14 = arial14b.toSdfFont(cast 11.7 * Settings.uiScale, MultiChannel); - - var pagefiles = []; - for (i in 1...23) { - var pg = ResourceLoader.load('ui/manual/pages/${i}.txt').entry; - pagefiles.push(pg); - } - var pagetxt = pagefiles.map(x -> x.getText()); - var pageheadings = pagetxt.map(x -> x.substr(0, x.indexOf("\n"))); - - var scrollCtrl1 = new GuiControl(); - scrollCtrl1.position = new Vector(29, 24); - scrollCtrl1.extent = new Vector(176, 352); - wnd.addChild(scrollCtrl1); - - manualPageList = new GuiTextListCtrl(arial14, pageheadings); - manualPageList.position = new Vector(0, 0); - manualPageList.extent = new Vector(176, 352); - manualPageList.scrollable = true; - scrollCtrl1.addChild(manualPageList); - - var scrollCtrl2 = new GuiScrollCtrl(ResourceLoader.getResource("data/ui/common/philscroll.png", ResourceLoader.getImage, this.imageResources) - .toTile()); - scrollCtrl2.position = new Vector(219, 28); - scrollCtrl2.extent = new Vector(386, 342); - scrollCtrl2.childrenHandleScroll = true; - wnd.addChild(scrollCtrl2); - - var arial14fontdata = ResourceLoader.getFileEntry("data/font/arial.fnt"); - var arial14b = new BitmapFont(arial14fontdata.entry); - @:privateAccess arial14b.loader = ResourceLoader.loader; - var arial14 = arial14b.toSdfFont(cast 14 * Settings.uiScale, MultiChannel); - - var markerFelt32fontdata = ResourceLoader.getFileEntry("data/font/MarkerFelt.fnt"); - var markerFelt32b = new BitmapFont(markerFelt32fontdata.entry); - @:privateAccess markerFelt32b.loader = ResourceLoader.loader; - var markerFelt32 = markerFelt32b.toSdfFont(cast 26 * Settings.uiScale, MultiChannel); - var markerFelt24 = markerFelt32b.toSdfFont(cast 18 * Settings.uiScale, MultiChannel); - var markerFelt18 = markerFelt32b.toSdfFont(cast 14 * Settings.uiScale, MultiChannel); - + var arial14 = arial14b.toSdfFont(cast 21 * Settings.uiScale, h2d.Font.SDFChannel.MultiChannel); + var arial14big = arial14b.toSdfFont(cast 30 * Settings.uiScale, h2d.Font.SDFChannel.MultiChannel); + var arial14med = arial14b.toSdfFont(cast 26 * Settings.uiScale, h2d.Font.SDFChannel.MultiChannel); function mlFontLoader(text:String) { switch (text) { - case "MarkerFelt32": - return markerFelt32; - case "MarkerFelt24": - return markerFelt24; - case "MarkerFelt18": - return markerFelt18; - case "Arial16": - return arial14; + case "ArialBig": + return arial14big; + case "ArialMed": + return arial14med; default: - return null; + return arial14; } } - var manualContent = new GuiMLText(arial14, mlFontLoader); - manualContent.position = new Vector(0, 20); - manualContent.extent = new Vector(376, 322); - manualContent.text.textColor = 0; - manualContent.scrollable = true; - scrollCtrl2.addChild(manualContent); + var credits1 = '


GarageGames Team


Development
Tim Aste
Jane Chase
Timothy Clarke
Adam deGrandis
Clark Fagot
Matt Fairfax
Mark Frohnmayer
Ben Garney
Tim Gift
Davey Jackson
Justin Kovac
Joe Maruschak
Mark McCoy
Jay Moore
Rick Overman
John Quigley
Brian Ramage
Kevin Ryan
Liam Ryan
Alex Swanson
Jeff Tunnell
Pat Wilson

Special Thanks
Cafe Aroma
Cafe Yumm!
Mezza Luna Pizzeria
Pizza Research Institute
The GarageGames Community

'; + var credits2 = '

Xbox Live Arcade Team

Program Management
Katie Stone
Jon David

Test Manager
Tony Harlich

Test
Michael Jones
Chad Dylan Long (VMC)
Eric Snyder (VMC)
Noriko Fritschle (VMC)
Kevin Hathaway (VMC)
Ty Roberts (VMC)

Release Manager
Julie Pitt (VOLT)

Development
Brian Ostergren
Eric Heutchy
Eric Fleegal

Group Manager
Greg Canessa

Product Planning
Ross Erickson
Cherie Lutz

Content Creation
Michelle Lomba

Usability
Tom Fuller
Chuck Harrison

Special Thanks
J Allard
Shane Kim
Don Ryan
Chris Early
Oliver Miyashita
Mike Minahan
VMC Consulting
Ami Blaire
Darryl Saunders
Aaron Greenberg
Michael Wolf
David Hufford
Darren Trencher

'; + var credits3 = '

Localization

Japan Localization Team
Shinya Muto
Junya Chiba
Go Komatsu
Mayumi Koike
Takehiro Kuga
Masao Okamoto
Yutaka Hasegawa
Munetaka Fuse
Takashi Sasaki
Shinji Komiyama

Korea Localization Team
Eun Hee Lee
In Goo Kwon
Whi Young Yoon
Ji Young Kim

Taiwan Localization Team
Robert Lin
Carole Lin
Lilia Lee
Jason Cheng

'; - manualPageList.onSelectedFunc = (idx) -> { - if (idx != -1) { - var txt = pagetxt[idx]; - var txtlines = txt.split('\n'); - txtlines[0] = '

${txtlines[0]}

'; - var finaltxt = txtlines.join('
') + '
'; - manualContent.text.text = finaltxt; - scrollCtrl2.setScrollMax(manualContent.text.textHeight); - scrollCtrl2.updateScrollVisual(); - } - }; + var texts = [ + "There are many powerups that will help you along. To collect a powerup, roll over it. It will appear in the powerup window.

On an Xbox 360 Controller, Pull the right trigger or press B to activate the powerup; Otherwise use left click or the Q key.", + "The Marble has a blast ability which gives you a slight upward boost. Use it wisely!

The Blast meter shows the current level of blast that you have available. It regenerates slowly over time.

On an Xbox 360 Controller, Press X or the right bumper to use your current blast power; Otherwise, use Right Click or the E key.

Collect the Ultra Blast powerup to instantly fill your blast meter - and then some!", + "Get to the End Pad of each level as fast as possible.

Start Pad - You start the level here.

End Pad - Roll your marble here to end the level.

Gems - Some levels have gems. You must pick up all of them before you can end the level.

Time Travel - Roll through these to temporarily pause the clock.", + "Race to the gems and pick them up to earn points. Get as many gems as you can, but be ready to go when the next group appears!

Some gems are worth more points than others. More valuable gems are usually harder to reach.

View the leaderboards to compare your ranking with other players around the world.", + "Xbox 360 Controller:
Use the left stick to move the marble.

Press A or pull the left trigger to make the marble jump.

Use the right stick to look around with the camera.

Keyboard and Mouse:
Use the WASD keys to move.
Move the mouse to look around.
Press Space to Jump." + ]; + texts.push(credits1 + "
" + credits2 + "
" + credits3); + + if (index == 5) + doScroll = true; + + var textCtrl = new GuiControl(); + textCtrl.position = new Vector(30, 33); + textCtrl.extent = new Vector(683, 403); + wnd.addChild(textCtrl); + + wndTxtBg = new GuiMLText(arial14, mlFontLoader); + wndTxtBg.position = new Vector(2, 7); + wndTxtBg.extent = new Vector(683, 343); + wndTxtBg.text.textColor = 0x101010; + wndTxtBg.text.text = texts[index]; + wndTxtBg.scrollable = true; + textCtrl.addChild(wndTxtBg); + + wndTxt = new GuiMLText(arial14, mlFontLoader); + wndTxt.position = new Vector(0, 5); + wndTxt.extent = new Vector(683, 343); + wndTxt.text.textColor = 0xEBEBEB; + wndTxt.text.text = texts[index]; + wndTxt.scrollable = true; + textCtrl.addChild(wndTxt); + + var bottomBar = new GuiControl(); + bottomBar.position = new Vector(0, 590); + bottomBar.extent = new Vector(640, 200); + bottomBar.horizSizing = Width; + bottomBar.vertSizing = Bottom; + innerCtrl.addChild(bottomBar); + + var backButton = new GuiXboxButton("Ok", 160); + backButton.position = new Vector(960, 0); + backButton.vertSizing = Bottom; + backButton.horizSizing = Right; + backButton.gamepadAccelerator = ["OK"]; + if (index == 5) + backButton.pressedAction = (e) -> MarbleGame.canvas.setContent(new OptionsListGui()); + else + backButton.pressedAction = (e) -> MarbleGame.canvas.setContent(new AboutMenuOptionsGui()); + bottomBar.addChild(backButton); } - public override function render(scene2d:Scene, ?parent:h2d.Flow) { - super.render(scene2d, parent); + override function update(dt:Float, mouseState:MouseState) { + super.update(dt, mouseState); - manualPageList.onSelectedFunc(0); + if (doScroll) { + curScroll += dt * 20; + + var realScroll = Math.max(curScroll, 0); + + wndTxt.onScroll(0, realScroll); + wndTxtBg.onScroll(0, realScroll); + } } } diff --git a/src/gui/OptionsListGui.hx b/src/gui/OptionsListGui.hx index e39c978f..520ac771 100644 --- a/src/gui/OptionsListGui.hx +++ b/src/gui/OptionsListGui.hx @@ -54,14 +54,18 @@ class OptionsListGui extends GuiImage { btnList.extent = new Vector(502, 500); innerCtrl.addChild(btnList); - btnList.addButton(0, 'Marble Appearance', (e) -> { + btnList.addButton(3, 'Marble Appearance', (e) -> { MarbleGame.canvas.pushDialog(new MarbleSelectGui()); }); - btnList.addButton(0, 'Input and Sound Options', (e) -> {}); - btnList.addButton(0, 'Video Options', (e) -> {}); - btnList.addButton(0, 'Misc Options', (e) -> {}); - btnList.addButton(0, 'How to Play', (e) -> {}); - btnList.addButton(0, 'Credits', (e) -> {}); + btnList.addButton(3, 'Input and Sound Options', (e) -> {}); + btnList.addButton(3, 'Video Options', (e) -> {}); + btnList.addButton(3, 'Misc Options', (e) -> {}); + btnList.addButton(5, 'How to Play', (e) -> { + MarbleGame.canvas.setContent(new AboutMenuOptionsGui()); + }); + btnList.addButton(5, 'Credits', (e) -> { + MarbleGame.canvas.setContent(new HelpCreditsGui(5)); + }); var bottomBar = new GuiControl(); bottomBar.position = new Vector(0, 590);