From c1a3ecd1f4b0f2bf323fc919df6553ae371f4918 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Fri, 23 Dec 2022 18:42:05 +0100 Subject: [PATCH] arcade-oriented main menu --- assets-cg/font_rogue.png | Bin 21739 -> 21773 bytes assets-cg/hud_small.png | Bin 12959 -> 8914 bytes src/menu.c | 106 ++++++++++++++++++++++++++------------- src/render.c | 50 +++++++++--------- src/render.h | 3 ++ 5 files changed, 98 insertions(+), 61 deletions(-) diff --git a/assets-cg/font_rogue.png b/assets-cg/font_rogue.png index cc77b1d62544abab95aed87af2d8ac988b8289d3..129d6d11213eb5962fa080c9e5b921079f221e71 100644 GIT binary patch delta 17811 zcmV(#K;*ycsR50u0gxnr(|S}`bW&k=AaHVTW@&6?Aar?fWgumEX=VTbc-pPKX_DkR zl6Co?tEeTA05L5G10m8o=;il0Fn{?~R(&l}Jv`5h@bECBk$~#edv!ou-~ai4?CU@N z<3FDFZuxpssk!BR^WWRv7CPV5`}f~CzdrYSem(#7zrW(o|Mv5L>;3-zBJiWg@A3D? z7XE(z@pHa^{{GzlKIHl5_5WPxpKqSdcj-TU^4~{45{~qd}M?By0y5TCGcV)iHoiD7m@{M1OuZlBGY--&TPaAySp1|Jk=Y7`GpZ$F2 z_xVh2@eN-n{2s!*LOegLY*Gs|Y7DPm&khBHSeQnL^VrZE!@ut3IUn23$IYkS>$=y& zOT)v(o?~Qx|1ZC;|LF_&cE6v;wJg64;J$*E&RyIO+wX6@j2(IQ-=e0o!2f*x*Zl?qOm9jlr;=)FsppvWyqrrGo_mSqEve*EO1(-ey~g_1RC6u0)>eB9Edt-E;is*( z)_UhdJ6G(fjTl^YKD*YZx3s?YKmb-A3GiukK17tAXZlVgeETTR z{4TIB#Zp7q-#5~`@5nNhT}EJ8KAvax&~g$x?-7Cew|%kpx@YP9Je2yd5$}T5gl~O+ zb8+jnr98pX+|sO@r5knbm3!KEVvXPO-F-bN%#=U#=sRE54Sa0_V0c7Rc*TDPP2y zQXQKsl*Pie7N9uG$dLHt@ZCA`USIcrJ!xGy2R!79>kD;13o9D$+I7Xw9xrxjmv8m* zj8JkO4|^5cXxa7J0NY?6ZgzZMILmIV_=<6`**tD~ytPi~2)poo9kqSLIJnxF?S7Ag z?M3v*u-mgX+nl~@r`dNMePN&lYl1bD_TBYcbA+!!&?;V0*POZYC)Tor$Qz7*RO@Bg z2@0W>M5K*;$JV6~eRrC(eW^dMTOP~P)?&Z8VOQWCv#kAul3M-do;Z+nCyi%cAMq@I zBXEH}TH}phW=$ptfHBT{=C^)dVefhezrVp^=Jkd-UVNWj{YKYq3`~cw=XbYw0)2FDfxY`BvD=ITkUyS%DUrdFE_-- zHdi#nudp1gyA^%USo%nq{OBcfF>ZdayZyaJt~;-1Edo-QrC~TTjQ#C5ukhBHzZ+AV z5X0{+$5Lu4vG+X2UHEJF`kSKywb=6Wd|T(rJpDV^A|7n9uNjvw16zN8*4Obv46KL6 zBHyEwn79-6d^PUjx#|}NdzpbZP!bD?5SQ8}3&WE}45fB#Gq@Vd3wR%8|~5x?LiW@hX0$;}0G@UQa#qUTyMtSiIKcrX11OCNh%{>;x_`A~r3va7k*dX_dMYH?asw# zPa_fbav2>mIswH%1c1nnF~ZBnW4N35?eUhK6K`1~#+`{iPn;k48pj3?SmVXb=YC-I z3f%DxkOl2+HrO?Pmd-kF?qZctFjUNDPB3+bS0^MOm52{i$$V@RLwb6|j@D$2F(hvE z!!H+GM@-eW9_il%p*5x6A%&g2=&9Vp*u%xk0wO-5b-d=wN7P&h6+01B^`gW_?HE$s zp#NL|Mz~Q(Aj*z}H;gn8xxkLh3V;y=p?$GC!6n8RZm3s(WVyD!3B0<%NfX8eb9^zP z=Ue#&<8*%jmAlN~)ca0_U;MZ@QZ+%20F7tVod}*>4|j&Kj$Ppem`~|nBL2V3<*dN&>h$g<~&MMp~#jk1mljz=5`kA$uB^2CNgEk0;Li3IpaP?|sa%0pj( zIG)V{v34nc8Uk4#L(wQG*f~%oW5H^OqB()zFvprdtkdV8CvX7=GhTc&{tY)LM8!wY z8?Yea89q0A#L;WnM1zn4G5&X#hL?X>H=ir9R z;&uX;Lr0952MCE{KxiUV;RAr*imc&5B; z!;9^IB=E7CFiJ>|mm(xKc=xIV`N3lmAqRH@@gU|C?ci}Z3w90pjHxY1-FPoJHtWr2 z0VYuN7yQS-Ar?SM-U(&{Rl(SEVrh`0PwWI+V(VlB0!}=kZ3L1F+0^FNvedH)Y$OD3 z?HR|avZd*_s|j2LxiJP}2_Y^J zg_~aXW(hw(_Xg&jG+KiSs5;(Sh zF0iTL7jD$cn*+=?-xwHFy1g)Y`3yJ2ZHSp~LNt{1e&59LHf#Wi^1&g?m1`reVElts z0n`dB%l^O|`J^FhW{F|^-$URKxnWEFnS2zk0QHAb638GC(hO`2I$iIe-eGq!6)4Pm zKz9(q-R+l9{;|*>TiHRiXKWzy{U*SFv>+hY(icGq;2Z%C7QkDe$9zo9;0jjEA`|Wd zK?Oz!6RN}`?vjmX0WrXZs>%Vm{t<(aOhD3jfQHFhJ)M}BLv0W#NJFc_I+Wohv_c-M z@4xYmlj8e&o%6ZCA$$w8;A%C)a5K*Vj8=8a2P5rx`zwyu0Uvw!8^Wlcyp{!jVAbx0 zn-mxuYzujFY&D}!h@=S)i$6=iK`{b9y!Xq5OArVN44IO0VPZg4e^6-mo9+v0A|Zq^ zf*u5fZJ>Hf24rJK+aNQ)EcN4YcD`Tqg0$N=7+QH1oBgiun)(7Cg=OQvm;!4IBgYoe zgY~PWW1wGnyaVrd>%yfW8+c}aq8_$TUt-Q5FkxUA z27s5dF9ZVQ(k;xaCIgN4XcyLq;T^YFfvrF&VJ&c+^&nSa_PX1{#uYGJ_1~GM;%%P>0pm=L|Bw&P8^8fX8jcIK4tqtQR$&ZE56SLt_U}O%tV8Qnuhyb z@AEvY)y*S9wON2^PV~iR&_X%7YoJNqFI18*ln5^e-=3_dhUPrSRL6xAd@n19EFi?g zhv96(8q61{-^Ak@pjbL>%HSS46~n-)7S3hx9ZS1N7k~)V&D7ENXdVC(VfUf%h}7Uh zX)GAhndc;)X{%|d>L2`n6{J6;D&Iig#SO8VxFw7fvx@^PjZyByqX+c;CO!?h0g;9G za$}IwOh{pg`->!TTZtm5cHxsqyg~#Ez?t!!;JXs)BCXV3lvK6GfM02M z3s5gl>DMMU2t}AFgoVXk0fs+#0s_nY+1*l~0Z1rs7BE%mxWt2hB>@3J2ISzCU{e^~ z%L)hS6o~SgyC%9$uxLcH_#gTRqgTlv%3E?O*gXr|h~+G98CN9YJ(4Vpt?{t%`lfAR zeF#KJeuo~T;kZM15vGQ_?VAn2?BQhzgiu&qSl)|-cn}&O2_|_o@neZXoV?#K)n-}TLSP+&G5jlZprN;lVNCg!6Vs@o9O<6 z&*kvzFA9WrzIdbAVNh*JFil@z2?@Yxzu*QIA;tLIdSo$#<_%yu*zrM_*CIf)JCrM# zb|M@Qf2Dl*5MkdBA#%ZNd4E9KC&&%=i}xU<@nD=e7`{+{$2_~y`$DG)Sx{D#*@Kxw zXyS|9!&$jn=2NHYzT-8a@Y5obOY9ZDq3$D&3l4-UymKQT@&`9~%vvRaO>_J483o+! zJ*dz?O@(rDORzjGb())T$=`V)iimiqdKMIlQo{Z5h1K6&$DGT@hX9a-bR-I#2kDre zwh)GJ&lk0S3bmSdzgST22 z4C<6C-|%&IX8uHd10o3qIm*Q%*48ZsWFMV%goOW|4%(Cb3@o+lC%a#;aN~Gx0oelA zZczGq@;cDf9VNopJCOoSnSd~0rHvaH6)YeUHLf~;p(8w6K$U{4LO^QV+Z#TlAfXS< z)C|4%0a-Sb?VHPV`ODT$4IC1O4Jn{58F@ZA9dz?+TDJ0{C~6GNMiWd0E}aNu07@Yk zMxazMyNfwR6gZxPI!cGC)g*vHFQS|ZqG%Uv-EU#wzZgb>Cnh8*#@%VF1uv)f%u|bNv==`GdO(#5v2k6b3zGs?0J?T}b=Nye!BK(1XptE7QJg#x+xXy&ao79XzHAD$N$>74ihz=Nk z?QZaE1-i8Y=oA-W$v41E$ip!Vre&OrjVc>!ls>>MhzK|AdzTB2!p?$%@V@6ys>8sy zARTfCu&lBW4|{r3QrGgCMi6)T|;62sB%lB~rl)N5gN6!XL<7 zprs!xgn95?NapYj&XB8X0<72_#Ermz1F)hj2!$F0e{bYWDiw$&yPuof7+RDpZlj(g zRQE`*@_MZ$-n{H?a535U@xi7c5|3aFO~&i-C0355#pUX_O`j2BxmkkwQG;t<5KsaS zAX&^YgxrasI20E|8n?svA>j}#_7;N+AIA9#&On@A);Ed?f#Cx8lnejFcI z44i|AfU@Ef8#aj&!nS=9-WPl2+8vx29i@ZCLQ%ORHVTCV@%lW{wcVot{_AsJ>Yxb#?=<~8St({TPoh^eLt{?9i9g@3N;{1qf~G&xCzuM zo1CqMm=255JTnsYg3WOw6A*-dq`jk5K-DDpF>~n6R02Rnkdu)o0(x(ZTNODi{2uZ{ zgkDOB2E&fZeW(VXZOy7%a75G*wg&tI!V|m%N*%R5l4T>v4^J)k#Q_k0#V!ZP%x+SG zceBZ#nXe!p1?_K^!PEm-2utJrm@MJEEMz#0C9#GjuJv4?9gjY80nGb|!Hf1X zl^%#0)yy@^*-TTtm}k|18-d6Qb%!~jwkK>vOz}oQDFEtwMK%;1eCn>9m<@-W<9Q7= zI4ZVPi2iZOV7V1S1=<$#ytIW#B-ghA3KVGrm#n0{EG=9QkT7`iYs5&yFptPP3j znYIQ8V*|7JVS)}?3wiT@N>vw`GIg^MOmn1oGhD9!hd0CJlwGMC71aSDQvb|hQ?0A| zOtYB1WpUgu_&#zgm_;GtKKrWBE-PS_Nks#q>fl zErb~+)Eyxw9pVnJn_#^SWFRqth8UqKBOQl%NiM$AcrNn-d;%^xzk!`$-B8?oL*#fb zQOWjyq+<}s9oPgO@<}%8;hhRU_(>1n6?VwBqIC6|)G%jjn)^M9uvw@IgBW1uA1;sa zK!EHSz)=wS#Nnc%t{3bYM1XqOWFaiq(NG)Po*j(bVkXE4DqEygxIIS_@$nsgZaEX! zFn8X|GrzA8C>J4lJ8JU2Hi>1B`KhSIxxj2ab={Fpm~Cs<#D zu!r=gV)24ZM6-dQNOh4U3F7jXs%daROHN$>Yjb4+GfG*YvpVoSmkF6#&AH>~fq4ER z0?;dvyKvhi$4gUM-Vbl%3+hzeB0T$|9R+*4=Fs#Rf1Y{Xaz#UaQ5JxP3vHlVU z`7(E;W{BeepsXkNc2}^JNEa+>5D-4t2xRkyC?Yo=IPHW^!-@feW)D%n(rQcLFd=;G z8;??6s~u=5{I#3kd@a(a+0TQQ!C!WCHm=*a3h!<9-dw5KGPR-G)uyb6_&^BG*=%Ly zHbD>DhO1Cw68giziA8e;4CoYpskl3&!)1~tfNQ~y!uRC9VRY}Zxw)$FyG7D?eC$1$ z-vICMC)^y0Rz_xn#`U6P5|V*UpNhB^t!1(LZ~NHH3V~my;MX@szj;Kc6gnPfAjJM< zr(3)8^;JK(Rwz^jvS1u=JhtN`x3L@8N{RijZh4IPhJnOHP!X=>mD%clX-wCETLi6F$FAK2`fg7r)1G^sCI|#BFM6? z3zfn$o968*nPx)C2Cc>!$_H1x4|QN~AG;_31cEg(ABTp^ z?gf|+!ahh19fZXd0zJEbTO-VWu{wKpc5Z+sT!LljMy1^ef2w|dRzTx|Kv`BvAyal$ zm1e&Ty9L(t%Mh3fAttHq(dh48#re~&R3vUz5AAYO)Foh>NBG+%^%Z0kdEJ6yXQdA!+jgBZDO%w~}emVE@O5bz+F= z-4@D+J$iOiWec=j-@;R%z{r?u5%O*Rx-FPWtoWuJo=><+OFa(dl7K>}qgQ%j+S1a= zM}dZ^gbM6myc-ICM>MlKg11<|S-^Z@(09wkeBn1QfMXYJ?v3Y__VN9){;aCc_>y4=#@iA+}gQ zj}UjP7@rFL*ejnl5QgGO;IHGn0)Y z=mEkjJUH>7-3p6UGn|3YQrO)qNldL9)gAh6p z2{VIG?{r%e4)?WO3q(4?r5paBte^Z`HWpO6^RZF{uR)Xowf1UqIXL*V)|3dMFcd7C zh)d`;-&LVvC>-z_9)v2l$Nc-N^jD%|u$(lc1@>$KVrJAnJg#cajy4kR~O0r_Im zDHFzj4jsr9y^g{4<8g@?1cJg{7s~gRq4jQ0aAvhG@a~XcgoT-_P8ikhDx1;T>3U*2 zSkt8evX)?uiIpw4fRb6OwKMkD>j(P46X6?BeK^!Ki&o4Sqtp(bSTM+7rxF_^S!jh~ z=ECOgHi%J+NLy_ULEzeoY2An?f=U%j-ztlL948_Z5x(Ih79gT^k&&cY$IY8nuP!WJqHtCh{%-Xtbv(g!tZ zs@=Xo)6$iPG7=&y;&U?kHmHMgpM?nbY~94&E80}^>!3U7-rc*|SxYC2z-pQT@?wU6 zIGMgr0vWy)G2ibrkm2VDe%sG(>*4RV^T_-pJ_eDRY)aTI<9Da)jc9M(X+@L4Ru~u5 z5RYP|pd)ZXv&U{CygHb^XpppD1`tkWtp@J#t2M$`fxKSe$}iSa2sZXCm^@vm((8V$ z8gVm@z7SZ^&^+T)%~TS1)9I6r7E*bC753SqOeXobRspTQS^)c?e%R=TW{>vz@do>4?OidLZFyHE}Fq>N{+ynFNj98L*+i`NccGYe*gWg7&!s@=Xp2I zw)XxUWb(21GJP0N=`Y{igfe<%+<+g#70rS<+bmS=803TCLU1|D5z}rF*Zw_!D{j{F zN@ZB)S{C%fLbjl-+roZvKjH!^Aaslcyaf|6zrm#7?V>BCYWkx>6+e<~3I zo(K32;R~ts+)zGvggJ;kt#TB9+sn8k+mLe)^;HECX+aswRGm1oO_{>w*}>hPh9LZG z=>qu>Gt#VW*K2*v5}1hyM@CB~h`R7c^F>^#8%jSz2Mc444L#*5y%H-vwKzg?|N4W_ zv~oh6w#WHC7R@3y%bR%-;80G?!k+Cg1LI=Z_P3(}U*zt(5th>$88q#GDz-J4XMj`o z8(_g!oOv? z8P*_#1en|dHilXOS2z=_Hp)yvqE=582;jX=@%e41p$F<2I|>Rk>}Xs99(iC7U z-$GxPBb~R+-GrK{ra_x@2)jjo?Z=q9ooYe}eMH$(z$2vBhgI7#7d|71J%_gK8>*3! z&|5YwAcHUDDZCPYePt$$81R_P(83^OU$gAUikdlrBSSD9(;y;OHGlC#fVw{LSZIGXeR)srxX0k0g7?!d}^#aT2MaB`b-!t zdyw%}CjqVpv%=5&Yj^QD#vQES%U4Q$&HUZn{CH09V<%&_y|iy(0usnh*}2}H3%X-= z3&+8lZ6Ni3!{F<^n2Qfz#N2Fk8lul~0L32D6D+2UZKn;D=x}j=!49a2)T?&eKTa>l z>Xp6ZJglY&B=ZBE1l(K5Zw zLsk%vEFgYBIBL$7vsbUtmZi)#C&NYr?gn1KeX&hQ#2fqJFlUND*mG93?IYQhSs=Q_ zw`nhdV`nUu>S`Z?h$hQ?8`QK;E*RWT%w(NG#69%TghqVpH9~CGar14X-5^#%hs_jN z_WZqnwKxiHu3YU#iFHDf_NUGfR%Pu{3G9`3} z{PQB@ws-gc5!c2o}=>v_r>kF?plS#abIR zhcWM}lyt;ZGoolc#kgX+pwMizenDHEU2~Q+((ALezqRk z)9k$|C!LGfmjiqAv}ihKW$%L1U)!e90Ii3R5?>v)8BV!k9fa2cM)Cv>CIT*hDA@Pr zj<`rtkV9%Pq&Dpw0*UN(023@oKxSdJ(>zc5O@6h7_1U#(q0KJjd;SLDa7Xj#uI_Wo zNACIea~AouNpMr|X%EEez-hQj%o5{N4TL4n%N`YO#>yco4}hyq8h%a=yLJh7iu_}l z&m3-bh|TCi_=rg7Gh&ks;SjBVFx2VM{0Lqt-}U5x=qUvJkaZZUbTmABy&r{#&Gg>~ z$l?;g>15t{?eN!=JI8PkOfd|?1N8tNfCbC0PP3M}EF|LB%W`b_@+meGe{lsY1s4IR zZO|AF?kwIgyaTle=nwplcjf^c6U<*TRKp2~5}Xs2A7KtGW_&K2oNd5=f@e=~p9OgO zQRQsfA^W!3-CxfEs%AF8Hu2q%Do8jmP=qsCaygm;JYtHN$1NNU8~wH!_iEc@wsJUU zdt{19tN0u-u{&!zqW@cqe1Wj=0z#L)VJxKqwHony#aoC8ptox8MeN$Zk-%Uc6bFsj zilrgQQRK^}?wDmP~Y~Rt!5x*lmw_TX9XChUPL=gpF zJj4p$iMTn`rX8+I1Q$)4G!W{wN`00_y|F0%>_ve|=cW3B#bvBHs@ zXd(-u$!+0#$^iN%v&-^t5zdU;0FPLyqqv2zVoz?-?AFMCzjjyqqOEWfoX?Ph zF(35C1@9P7f0Gl<_vKL08^N{h1T^=E(GLI#h*>r;U{!0iBQA?=n&0Vag)TTObwA7U zCITH+`<}R1SMKA~(U!yM@viH!pVMNclc&=H*gi>Kc%6-2fDz9BH!NB6wTPE?tgtc< z?CVCZvR@{f^J(UP*p|XrKq%kZ4Fru=(I6K{rx{+c2LktTM`q^J-7r8Xgb7S5C(Z$A z(QWzxuK~yEZ#<=RymCMLb!KZgYWb~__XQ!s*&rm@AqS^Us;# z0iOx6NNCupf~-0WGhtWPvbr(Q>{0Z3*sK2D(q0qeJi^ZN9Eo6;)pr8*h|UN*EP7)p zU@Fis-^;xVv-Xpkcb?#Be`{@e64$j7z+Ku1(t{m;J|KAL9o6OW4IQ9$0oV0@#u+HD z$vDr3=-c66r%rPcCQmz48m{`(9`MQN6lOX}5GaH?enYfS+Y*!Zo?fdkVJl`lO-#u1 zh$1M&@jXb8lUEfvi4fVcPQqU;AK^_GjI-K}|JYQPpNhh=alj($XUeKrp`H@tV)wsO z4$!-Q_L|P&@m_SKK>A>i1rlO+ESSWt*jNo#vD!EC=2S!-qfdrRBB@T4@a(`3lJ)bftLe9z2D`59B`9Z0R8)q)bx6@j8$Ew#yRs1P4H8 zxH;6yAwU+}Ven=(z}k60oSOq)S~80B5z=|1&3b4>jLJ5E@X$) z(C3EmxpQ_$oliBN<-pNOmj(wrjNcLHNjUl7zY8^{h?wYT2r{VL4j1&eBj;EXc55qt z1N#9QU=U`stN@73=JpFbWM|euIR_{Jo$n0QlssYnDIfP!xeAMR#*lQgWI^__LKV%i zPg5Y!Rl@AoI=dIFV)h12sZK%!l%}{}jbFqQdq%PqvbQ}z$~8L*7c;3zA%i^pPP>3p zR?VS_1bbOnQ$W`c8(&rg9)LR`I13Vg8Mr%xloxasJhnj!1UKj#UZxY>HmFIRr?h{8BL$O>M@;_S>PI`{dh-@N2QXGXggXrjqqix>`r{yt62#FOxr_6sdl`2vX z;i*pZNlVVGsdTbgjBQA&f!v!2YKhAgPW)@PG zJ);vVu>O5(65lCD+d1p`62S3)Q?Ji+vrJ%nc*20-neKed7ZcNgb;9B1Nul}1;qK^o z%FZev<=HJ2oI2{eco?&3&UJqo7I!;w@Xv-V2(v8_)|f$Uzq9500ga1B5Un!=%(6e1 zjVd@-zdO7JtH~Cf@e+bUK)4~#U+Mp}pWZ6OEC0O<+V12EWO;C;bzfY6B`t2$lxOg7 zN6*~x5`q%9=m9*K&b`oG5~X(Pci@nNQ_<1;{hIu~7CIQGVD0T54OV=(kEDFKP5*9> z&f56O>W+Rso=jtpk;Bggd$%w=P7ix1cXRH@0>i$4Ev(iv1EG+c=yoP=l-_Gl{5(h| zuwKhCP|FR?`VK_z6j-u<2VxYKPMtERlcDFBAV4bF*vAXO({AK0Hqp=SoN)s{jKttH zUINrMJ88ip^8;%9M(C~<$&g;rrlNU@HK2g}iQxV4RF2OzJKGx^zolngO@Rj1IM+6Q z+xoE=Qi{`R%=S1G%17XiAs7g3u&cAZ25&wd?gz4g*_bY(4SCRiU(b-5s~H^+5-Es#nIDdZggJQj?I4K@;6;@f728^A5S2P*2V6A@&*BKd2DjqHX3>K z!sqnpIYzH}=0@;+A-G zSrdD8Avo5`_Ryk#@Pr>_gyXOias%&p+v5b}0Rq!&!27V*H_fdmC8*8|mR6%t zfrt=KR@hE?L_pM0g8RMBbTedC9m*|0A03D<&<(UPD^HYh#t&L#Z>BZWlh2&ao_@*t zxS-<7T3oRSN{97KE>qNmzg=J@C~Ob8xwN@6+QGwOvt3KY%18lr1rDMVZoOWArzgp$E>GVIdfZM+RzF{1{h7zO~uqs7oC*S4jD>;l$>DXa^ibKFYX z>rX!&Zjcjy=@}R0%@4*7QH6phTYEd<$$}q?ageT?;I|ZIdDSfBKE+Ukmga6g@<2AY zSYDf=f~^`WoW#Q_XvpA!5YQ0|(Ux$7201KR+s4<^=|0=;=k1I>J6#=>LH^{DOv|#|LZTfCk9}k}3Uykrcmm?s!&tcG zPQdXjEWmWVr%GS)^vIL&h2Mt*cRW&o)Elv059qnu;Wbc_tA=zY&^+wpBaT9gf-Puh z?GG(~1cseavL<0^o?|f0+}b%_D;DzF_FU4Nu4$M=FWK-Ct3yP~BO(@ig*W!aQxuq7 zLu`##-O@dZ?l$3qO;2+_yPcDCPPaj_ZkW1r-Zr0gPXX`*EH?*P-7vq7>45slgB1)~ zmU;0Y6NpI3aD`16Y|#-352b3#<6QeYU`ro=-1hZA1N*(YsZfW-v2wP;DG(5bXvSj$ zAQz&N|Oseec1f%_Bp5L*9(;N3ZrB+kP$j!&*IPGiy(g5B5 zyLta=v=8A`#(!CLBhY2r0JxuS{Iy>h43hRfp2Z8j^6Uq+buyb_11H4M_;Jo6vbAnp ztlNw4*dR*aF+1!TO`S-Avb&vswca3qulj6dQ@G@Fa>U~yh^EFIsh#rz2Tv0Ymm)eI z86z1v6OTj++a!H|G8yG0%gM~!Ycg%tMbs3JwjFFg;>Ap*HC!_T#07^mSv3#sC_IVn zdcca>z~()R10Jse&*+K0nE4!0haK5Phjwz-Dc{oIB1`@|kPE@rYy$5U?(MXHHYS0X zc!quVsEJ9$0?W&N*~(0$T{b8HJ8HLXN)}f`DFX!Kj8A`H#lZVIK7vL@#;{u4oF23s z^JTHqe9jo!X#(0{H9A$gnjK)sMbU<6&Q2kss@iY1fT-mOTG#}PrLxzTV=l`xwh-4Z z8o5COce`5zEdh6A%BmSAQJq159OsOQ)eloP__eOh1Z-M%@GU7_!CNnOr3Y~9Xog^`O@BzpMWJ1{29v*gipA!^3 zD4_oe$Detf=G?FjvrVW&*kSDP+h75JaC=NumvJ^#1io*-DP&_n2Rtc%?95c1<1aw8 z!p8LiIVDtH5wdvB!|~KSJ6aXgkEbKrdgys@+^ItbsVUVbR?r17z!F`yeA?R#-UYh6 zrjg~+cXmYcm;fBp^8sw(^t7dBO6OJREcfkmlu4)Kn0SkP{{ z@!ADR!E(7V2b@atWV76JV4J+^5~I&9{99O#b|6h^QX~&X7~!DAI(MvbE8*y zJ^U_sG^+J24|V~Wil;Vi<4hhVhqnX4Fm?|IwU+{Eh0}n7 zW77^fo)+)`ZbYvIf4~5Y!_n#RcQjA7yFI*Xc^c^@d$5_mdopJGoy|yOKpSe7nNQ#Y z(Wt>3r7i6hKEqCbVbDeC(=+S9wrYrU?DjAZG`cGGsA_wS6inPVDilQk;)*uw zysOxsjo#nHwRZ#FNp>%J{<5crIx?4+qj~Y1gb>a={q1;|!!>rL?jD{NZF}W8(Hj?{ za=~#=7S4%U=W-uU@QuqV3=V2C7byx>#y-Cdv}1n`!!=uf8F*q@=(t1-3wyPiuCg~& zHJ>H{$&$Y6ly#URR8T&%W=CK`Lwke-Yv7zEl z$wNLt`gaqAlVuiX*NC8m-evYUPtV%1d|5}4=0T@Uc~S5x?=M%5%fZ1tl=N|oR^4I^ z#pWhtS9z{874trDAY;$14(`wM8#D5#Bzy;;bVdiPVX+4!f|ygxAFb!_jF?g0%Yi1G zXNYBsLJQC*jLO#75X!4BZQJdR?9=502 zV*IGce%k@@1^XK@!CpVe$^3*g$j0cG%0DwhwZpcFu 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 diff --git a/assets-cg/hud_small.png b/assets-cg/hud_small.png index 3be3dd071a391c8294eeaa5a09f0a12438a0b973..3c3638e9805be751e63c7856092d526ac3a1a8bc 100644 GIT binary patch delta 5508 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 C{9@Mt delta 9756 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 q*mS3^gUOf1 #include #include +#include typedef struct { /* Same mechanism as in game_t */ @@ -50,24 +51,50 @@ static void menu_render_game(menu_game_t *mg) DIMAGE_NONE); } +static void darken_vram(void) +{ + int top_margin = 0; // 24; + int bottom_margin = 0; // 32; + + uint32_t *v = (void *)(gint_vram + top_margin * DWIDTH); + int N = DWIDTH * (DHEIGHT - top_margin - bottom_margin) / 2; + + for(int i = 0; i < N; i++) +// v[i] = (v[i] & 0xf7def7de) >> 1; + v[i] = (v[i] & 0xe79ce79c) >> 2; +} + static void menu_update_animations(menu_game_t *mg, fixed_t dt) { for(int i = 0; i < mg->map->width * mg->map->height; i++) mg->map_anim[i] += fround(dt * 1000); } +static void dsprint(int x, int y, int fg1, int fg2, char const *fmt, ...) +{ + va_list args; + char str[256]; + va_start(args, fmt); + vsnprintf(str, 256, fmt, args); + va_end(args); + + dtext(x, y+1, fg2, str); + dtext(x, y, fg1, str); +} + int menu_level_select(int start) { - extern bopti_image_t img_menu_title, img_menu_arrows; + extern bopti_image_t img_menu_title; menu_game_t *options[LEVEL_COUNT]; - #define OPTION_COUNT LEVEL_COUNT + /* Don't show the sandbox in the menu; ALPHA+EXE to enter it instead */ + #define OPTION_COUNT (LEVEL_COUNT-1) for(int i = 0; i < LEVEL_COUNT; i++) options[i] = menu_load_game(level_all[i]); int selection = (start >= 0 && start < OPTION_COUNT) ? start : 0; - int target_x=0, x=0; + int target_y=0, y=0; /* Time spent in the transition animation that moves the GUI items away before starting the level. */ fixed_t transition_time = fix(0.0); @@ -82,21 +109,20 @@ int menu_level_select(int start) sleep(); fixed_t dt = fix(1) / FRAME_RATE; - if(x != target_x) { - int dx = (target_x - x) / 6; - if(x < target_x && dx < 6) - dx = min(target_x-x, 6); - if(x > target_x && dx > -6) - dx = max(target_x-x, -6); - x += dx; + if(y != target_y) { + int dy = (target_y - y) / 4; + if(y < target_y && dy < 6) + dy = min(target_y-y, 6); + if(y > target_y && dy > -6) + dy = max(target_y-y, -6); + y += dy; } /* GUI positioning variables, accounting for the final transition */ fixed_t TRANSITION_LEN = fix(0.75); - int LOGO_Y = cubic(9, 9-85, transition_time, TRANSITION_LEN); - int ARROW1_X = cubic(16, 16-50, transition_time, TRANSITION_LEN); - int ARROW2_X = cubic(345, 345+50, transition_time, TRANSITION_LEN); - int NAME_Y = cubic(DHEIGHT-24, DHEIGHT+10, transition_time, + int LOGO_Y = cubic(5, 5-80, transition_time, TRANSITION_LEN); + int LEVELS_X = cubic(40, 40-200, transition_time, TRANSITION_LEN); + int HISCORE_X = cubic(DWIDTH-80, DWIDTH, transition_time, TRANSITION_LEN); extern font_t font_rogue; @@ -105,27 +131,37 @@ int menu_level_select(int start) dclear(C_BLACK); for(int i = 0; i < OPTION_COUNT; i++) { - if(-x <= (i-1)*DWIDTH) + if(-y <= (i-1)*DHEIGHT) continue; - if(-x >= (i+1)*DWIDTH) + if(-y >= (i+1)*DHEIGHT) continue; - int local_offset = x + i*DWIDTH; - fixed_t map_center = fix(options[i]->map->width) / 2; - options[i]->camera.x = map_center - fix(local_offset) / TILE_WIDTH; + int local_offset = y + i*DHEIGHT; + fixed_t map_center = fix(options[i]->map->height) / 2; + options[i]->camera.y = + map_center - fix(local_offset + 2) / TILE_HEIGHT; menu_render_game(options[i]); - - dprint_opt(DWIDTH/2 + local_offset, NAME_Y, C_WHITE, C_NONE, - DTEXT_CENTER, DTEXT_MIDDLE, "%s", options[i]->level->name); } + if(transition_time == 0) + darken_vram(); dimage(148, LOGO_Y, &img_menu_title); - if(selection > 0) - dsubimage(ARROW1_X, 93, &img_menu_arrows, 0, 0, 35, 42, - DIMAGE_NONE); - if(selection < OPTION_COUNT - 1) - dsubimage(ARROW2_X, 93, &img_menu_arrows, 35, 0, 35, 42, - DIMAGE_NONE); + render_small_text(LEVELS_X, 80, C_WHITE, "PLAY", -1); + render_small_text(HISCORE_X, 80, C_WHITE, "HIGH SCORE", -1); + for(int i = 0; i < OPTION_COUNT; i++) { + dsprint(LEVELS_X, 95+16*i, + (i == selection) ? C_WHITE : C_RGB(20, 20, 20), C_BLACK, + "%s%s", + (i == selection) ? "> " : "", options[i]->level->name); + // TODO: Wire high score to main menu + dsprint(HISCORE_X, 95+16*i, + (i == selection) ? C_WHITE : C_RGB(20, 20, 20), C_BLACK, + "%03d", 0); + } + render_small_text(LEVELS_X, 180, C_WHITE, "OTHER", -1); + dsprint(LEVELS_X, 195, + (selection == OPTION_COUNT) ? C_WHITE : C_RGB(20, 20, 20), C_BLACK, + (selection == OPTION_COUNT) ? "> Credits" : "Credits"); dfont(old_font); dupdate(); @@ -144,17 +180,19 @@ int menu_level_select(int start) usb_fxlink_videocapture(false); } - if(transition_time <= fix(0.0) - && key == KEY_LEFT && selection > 0) { + if(key == KEY_UP && selection > 0) { selection--; - target_x += DWIDTH; + target_y += DHEIGHT; } - if(transition_time <= fix(0.0) - && key == KEY_RIGHT && selection < OPTION_COUNT - 1) { + if(key == KEY_DOWN && selection < OPTION_COUNT) { selection++; - target_x -= DWIDTH; + target_y -= DHEIGHT; } + if(key == KEY_EXE && keydown(KEY_ALPHA)) { + selection = LEVEL_COUNT - 1; + break; + } if((key == KEY_EXE || key == KEY_SHIFT) && transition_time == 0) { transition_time = dt; } diff --git a/src/render.c b/src/render.c index 750cb15..501f6bf 100644 --- a/src/render.c +++ b/src/render.c @@ -448,31 +448,27 @@ static void anim_frame_render_outline(int x, int y, anim_frame_t const *frame, frame->x, frame->y, frame->w, frame->h, color); } -static int small_text(int x, int y, int color, char const *text, int size) +int render_small_text(int x, int y, int color, char const *text, int size) { extern bopti_image_t img_hud_small; + (void)color; + if(size < 0) size = strlen(text); - if(!strncmp(text, "SHIFT", size)) { - dsubimage(x-1, y+3, &img_hud_small, 0, 0, 27, 8, DIMAGE_NONE); - return 27-1; - } - if(!strncmp(text, "HP", size)) { - dsubimage(x-1, y+3, &img_hud_small, 0, 8, 12, 8, DIMAGE_NONE); - return 12-1; - } - if(!strncmp(text, "ATK", size)) { - dsubimage(x-1, y+3, &img_hud_small, 0, 16, 17, 8, DIMAGE_NONE); - return 17-1; - } - if(!strncmp(text, "MAG", size)) { - dsubimage(x-1, y+3, &img_hud_small, 0, 24, 19, 8, DIMAGE_NONE); - return 19-1; - } - if(!strncmp(text, "DEF", size)) { - dsubimage(x-1, y+3, &img_hud_small, 0, 32, 18, 8, DIMAGE_NONE); - return 18-1; + static char const *texts[] = { + "SHIFT", "HP", "ATK", "MAG", "DEF", "PLAY", "HIGH SCORE", "OTHER" + }; + static int const widths[] = { + 27, 12, 17, 19, 18, 22, 51, 28 + }; + + for(size_t i = 0; i < sizeof texts / sizeof texts[0]; i++) { + if(!strncmp(text, texts[i], size)) { + dsubimage(x-1, y+3, &img_hud_small, 0, 8*i, widths[i], 8, + DIMAGE_NONE); + return widths[i] - 1; + } } return 0; } @@ -508,12 +504,12 @@ static void dtext_multi(int x0, int y, int color, char const *str) while(*str) { if(!strncmp(str, "HP", 2)) { - x += small_text(x, y, color, str, 2) + 1; + x += render_small_text(x, y, color, str, 2) + 1; str += 2; } else if(!strncmp(str, "ATK", 3) || !strncmp(str, "MAG", 3) || !strncmp(str, "DEF", 3)) { - x += small_text(x, y, color, str, 3) + 1; + x += render_small_text(x, y, color, str, 3) + 1; str += 3; } else if(*str == '\n') { @@ -704,7 +700,7 @@ void render_game(game_t const *g, bool show_hitboxes) if(desc) dtext_multi(x1+7, 123, C_WHITE, desc); - int dx = small_text(x1+7, 156, -1, "SHIFT", -1); + int dx = render_small_text(x1+7, 156, -1, "SHIFT", -1); char const *use_str = "Use"; if(item_is_equip(selected_item)) { use_str = "Equip"; @@ -728,16 +724,16 @@ void render_game(game_t const *g, bool show_hitboxes) switched_equipment[selected_slot] = g->menu_cursor; growth_equip = player_compute_growth(g->player, switched_equipment); - small_text(x2+14, 100, C_WHITE, "HP", -1); + render_small_text(x2+14, 100, C_WHITE, "HP", -1); print_stat_opt(x2+44, 100, growth_equip.HP, growth_base.HP, "%d/%d", player_f->HP, player_f->HP_max); - small_text(x2+14, 114, C_WHITE, "ATK", -1); + render_small_text(x2+14, 114, C_WHITE, "ATK", -1); print_stat(x2+44, 114, player_f->ATK, growth_equip.ATK, growth_base.ATK); - small_text(x2+14, 128, C_WHITE, "MAG", -1); + render_small_text(x2+14, 128, C_WHITE, "MAG", -1); print_stat(x2+44, 128, player_f->MAG, growth_equip.MAG, growth_base.MAG); - small_text(x2+14, 142, C_WHITE, "DEF", -1); + render_small_text(x2+14, 142, C_WHITE, "DEF", -1); print_stat(x2+44, 142, player_f->DEF, growth_equip.DEF, growth_base.DEF); dfont(old_font); diff --git a/src/render.h b/src/render.h index ee54967..64eec65 100644 --- a/src/render.h +++ b/src/render.h @@ -71,3 +71,6 @@ void render_game(struct game const *g, bool show_hitboxes); /* Render pathfinding results on the grid. */ void render_pfg_all2one(pfg_all2one_t const *paths, camera_t const *c, uint8_t *occupation); + +/* Render one of some predefined short strings using an image. */ +int render_small_text(int x, int y, int color, char const *text, int size);