From 961aa8919667eb72c77bc434a8d52aecf72714d1 Mon Sep 17 00:00:00 2001 From: Jurjen Ladenius Date: Mon, 29 Jun 2026 23:44:35 +0200 Subject: [PATCH] Make FH logo stroke thickness uniform Give every stroke a 6px thickness (stem and right leg width 6, both crossbars height 6) instead of the previous mix (stem 10, leg 4, bars 4-5), and recenter the logo. The F+H now reads evenly. Co-Authored-By: Claude Opus 4.8 --- projects/mazegame/emul/rom/mazegame.rom | Bin 262144 -> 262144 bytes projects/mazegame/mazegame.c | 28 ++++++++++++++---------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/projects/mazegame/emul/rom/mazegame.rom b/projects/mazegame/emul/rom/mazegame.rom index c94b34b4b337d50e613325fe1485ab2fc4b9ef12..e2ee18ad04ec6616e21f82df3095936261eaacd1 100644 GIT binary patch delta 2861 zcma)8eN0=|6@Tv;e_)9Da3D1p+s}543E&zW2m$iyWohWj$Ol;{!eD}pA$%9oIuHUT zTN-uJ)ONaSr$|$lby@SzR+69zt(y|lH%B$zYsLuHmg!Mk%}fyxb!4GZzRGw5&YZkCxR=;f+p?6Fi!syPq}qRmiD`f) zMw6jdZt!Pf&2V|5hWAsPziek_?ciZTD__|P(L^o(hdjbbjW5 zk#r}&fh*m%nVsyJ4R#Qr z@JQn2T>UOJ2^TEer%?Rqw06m|eFkBAu$CR&tOVbZ?gY|wg)nLcgXy=4`wmbhEsL4X zO3g8RTY8>Ywu8!@wMe|T^VO<>R?Z(g@RZ#fru`=jB4(tMeKTxGVR}19ii`bD&)oPE zli?19GmjlJQ!whJUTnaqUCez4tv%_PBQcB_0AxlV)UKM zGL2ExlUWi)*E0=K^dM77Ja$a1XO`gjO;GfL#r6AE7+naXQ!1F(7hGOj88TuUML>Iq z62W{W*pNTfxWki%VMEMK+f*|BNj>Sr)b;a*@2DH*4FYxJyn#?#=gCv^r6x@&rYUtZ z+!04v$73vEl;wIJ%^IWac&@YaT*zv~N<|?BQI`5SAvqRGEXrxy#yRieT-762;&@kw zw$UQ*$g$#Fo!!Q{wB?EW4$^4AlkqId96NlH;0MVoiU#IquW|4yhj`HVA%}2?eg)2C z>8d{(>!TVz$J$3dtaX#E3!_h;Kvy-4Z}N?NXC>X%kW3ds?E_AGqakuk867$-FYS1} z%&MvLM32h_{*hH7blbeB9)T{Kbd7Wt=y??GO{V|dFz#ji4U?*;=&9$Ps;AzqS}JEzz)n+lBW4-fgpW$6lh z&LCz-!;GS3c;>E=J^MAhX!~mp4a+aQMqzKa2R+gC8{nc`k1N1$aS^e0^g z5yfZjbj?hW8BL>;`W+g`WgEcW}_R42B|lCd6%t3xN} zpeELDeaH37A-E^x!`k#;#_g)DirXa#)5!nkVO1sb=*SZj)!oM^k2$#{MpBGxD!`5nPezhBtm0>e>5otO`Xl-gsN+a)iRg7Iz5uR+WtCdHYCTt}5)_;K^wOzw z2UH@`A z`^M=72dGo)PVnqgfx)}xDkH8z<3?^Xu>miY%mi9shqiSwy0$dTi3Unddm1(f0X^4F z$+s;(eYX5nWEtF3X9{QSR5}gk-mMiZ`2U$8^YtpoI%;7^(k!K~ej25p75h=8J3YcB3+UHK(#Z5^Mz zOuf54d)d2GO^JTIDD0!M;RGUun9Nt{%X#)sWuYV%v_|nyT4&&tk}>eTvvw<81&%r9 zW!nsmWUCDw>OZ+se`cXx_-~VF%QP2v^52+xkvTUr>=#hju1C0DLXE+FF4%w`JLuOP zD3puJMjC=&b9RK*Ipk%of!W>p_{Si;yK&cogAD{s5C4AIo05{UxUi<|qX=|z$8)9N zE#3Z%3vI(|yk`1Bo3CPcP1)Q<5%3#;SzU3?=WVc4tqIw)VLAd`5VE~tiia5LTrK)h z@=ER@B;LubMdHhdQKUB^?SMWH-R{%+awM+l_apIzz6go*yaFW5c}AQE((($Cay75` zRkw{xw`RrCGv5bCN1kj+TJD^GVj5yD*}d`RZ&;<$DE*lo$oI%9BYXNIu8=b_6$_RR za{hRBZ}q_y%kvgHV27}Q{ykYzIHisX{#;%=?@uTr1b;m}L|+3}_Eda(q_f6X5&0u= zOio|z%*#=2jQrxL02`XTLE)c`dz<9tSwRUd0!It7@MEB};M_iO4{Yg^`h;Qnc6Ty;u{-D)WW+t3X$YDUUZFd?sW7@^ pFv4HDX{?8N0G}YcP>X9O%!TfB@Ot5Qzi+-|#xI$PkIX#xe*il<>U;nI delta 2955 zcma)8eNa=`6@M?E2r&ZTL%x#t5)46T771WPd}OIz+eN_QiVP7VBnE^)M%~5$LTJ0A z)0xgx_ipXdaqMn8Q#<{ms7y=iI286xoW{)EiY}RsormR*(Aj0N+OD<>g!JB*55jIc z?J&IaJLmk~`Q7*4x#wnVEOl%w_3|0%@&1*YYw-PB?g~Nn_0HwAA_8Xh)9S!E8211x z7?mNfS|7+FEGRwMAp8+2Hrk-d20j+q#C;e|HjBR}6v(WTTv973$m$1slRv=jS~5#w zJ0p9ORLQJ!8Qi&b?rey@P6Qe9g@Nl>=UPIvkk|)hR&Z2a5~&8hE8iVexGmp{Vk}a4 zD);fFewUg;N{qHytbaePTW++?Va&RlxzUXp@TwvMDAJYEXc)NDrv;Q97!}5N=)A%d z$J2@n0;3JoWHe)QIpg(1(~)}I*;TG0%m$9?lc2Ac`&L-L1K#N!DK8JWyz>(;4Eo3y*o{X@Y>$fX=LptF&kCiQ^w8V3=7JkBhQii9WM2t1OE8 zvnr$LMwUK`9%rcpwf4!itV)s$fjv9T9_cBhE=B4Lh1T_iU)SaeVM`YyK=BZhgw`u3 z1_P;O+r4Q7F$hClvoiKhD?LQ0TNm`-P`54Ulhr2{^a6Fq0)29!%AlztG*vT@|HM(& zkr*q^@qC%o5hLlh$7zWy7cW?kSt2Ybj0h*%p(G z3Lf0Ti3swXBrGWUkF3bs;#s_&Cq_HJrP%lRWwpix^@?b*V~H%r6z?QjAP&->w83k~ zdGsldgedluMi( zv7l{YLtG|y)v&kQWb7dFuJYbYTci&%Piu+dv~RZNbZA<<(SGoQcXRhkWmX?2(F=7c9?kC~Zm z@PBq|yoMlBqwcqfMJ6_E{3Cp1))E&`E9W_|qCAKyBgK(>sZKU%cDY=I>=Sc*k>GCL z9)+`WIha;MKxb$Dq89^U-`n}wWG~p6uOiohF<*ypXMQfi7xGJbBo2KNBZeuCxmmii zeRN8B*Z}!ZF};RZkv$z*vfYO z4zxv69P~xZ+NKF2(jt4f9UcQa3f>ra+e}|yAJ7tz>Vl1RX!_EXXbAWGU+*hncjK9= z-(YgkMyCydDsrN{B0!608mrQ2;&N5Ggm4F_he;MNS3uRGX*|oF+u+WIl@w|iZeX1o z4c&XkOHzbaO9lOsG6zj|P_N7>z{K}9iEnKsemg?Erp!TIg_<(E z1Kd^8Xoi6&O5=_@C!y>FKVwhv4X0IU)X_kLUWi8T*YqNO0EhHq-fr-;K9!}Mv2gxS zi%v?H2mE&G=w=tfj>d$xbMXZl_}kW1c_p=W*nB7-R4ArV`gUkkbmKn6>Dvd`SumzKEm7Hg_}KoN zW{&_Fb)l*J*S3|PvA?v%WPQu^OwyGlsgub==NT;}a{M*^g4jQkiBRD=!P$xp^;N_Za5%ei0r4N zPR@*>`#fmc)Y{p*r?8ZV$-^Fo|K#Hst?|eQpMgueO2}0(x$A@gEjCT7z(%V*oC)p2 zFNGEs+Wq^7U#cv9i~v0`xTGyF$nEAv!!M=W`7j%S9t638FeAi_fVL3-pjp=*#HOyO z8Jnv`eDH3O0ejDjit*OW*HvTFs@o@)S-HhU@VQP0rgah=yr(P0<}+QHpo#aAWLDHi zi_Z;!(q({w;+?Pa_ZU8ISTXl6IMF##oU^Q`b}hUx48n(2Ut;(RQH3H(kHx`*;vDiJ z_@p?mp~>p2uUj#niB!Zj=~NQZspLzz_ zXP|la{;&Fa8~pnte>6$tv!C`B7f|aX?>9+^!Ks@J`G*N#yAwJ(mwjmRqYFX!lD8KU z4F`v$(j_69=&26yVE39J&jDabW&Rruf2qHqfcku7NqFhfttR)QU#t!Kd`(MZ_pbqE z>CoPmeslm#=|sb9a=(my;0Su%u%(|54Wf|f>+EkFOc?J;B&+Oa5BEbYx`IEJ7Lv}% V&q`;~zhk;+A}^W*KQ{?y{td7NzDxiB diff --git a/projects/mazegame/mazegame.c b/projects/mazegame/mazegame.c index 6870226..8be93ff 100644 --- a/projects/mazegame/mazegame.c +++ b/projects/mazegame/mazegame.c @@ -747,8 +747,11 @@ static void LogoFadeSet(const u8* idx, u8 n, u8 delay_halts) // pal2 = top crossbar arms pal3 = stem (excl. crossings) pal6 = top crossing // pal4 = middle crossbar arms pal5 = right leg pal7 = middle crossing // Origin X is even so the byte-aligned HMMV fills land on pixel boundaries. -#define LOGO_OX 110 // logo origin X (even: keeps HMMV fills pixel-aligned) +// All strokes share a uniform 6-pixel thickness (vertical width == horizontal +// height) so the F+H reads evenly. +#define LOGO_OX 106 // logo origin X (even: keeps HMMV fills pixel-aligned) #define LOGO_OY 73 // logo origin Y +#define LOGO_T 6 // stroke thickness (px) static void ShowLogoAnimation(void) { @@ -767,16 +770,19 @@ static void ShowLogoAnimation(void) // Draw the strokes. They are partitioned so no two share a pixel; the two // stem/crossbar crossings are separate fills (pal6, pal7). Local x12..21 is // the stem column; crossbars are split into left/right arms around it. - VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 0, 10, 2, 0x33); VDP_CommandWait(); // stem: above top bar - VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 7, 10, 10, 0x33); VDP_CommandWait(); // stem: between bars - VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 21, 10, 13, 0x33); VDP_CommandWait(); // stem: below mid bar - VDP_CommandHMMV(LOGO_OX + 8, LOGO_OY + 2, 4, 5, 0x22); VDP_CommandWait(); // top bar: left arm - VDP_CommandHMMV(LOGO_OX + 22, LOGO_OY + 2, 12, 5, 0x22); VDP_CommandWait(); // top bar: right arm - VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 2, 10, 5, 0x66); VDP_CommandWait(); // top crossing - VDP_CommandHMMV(LOGO_OX + 8, LOGO_OY + 17, 4, 4, 0x44); VDP_CommandWait(); // mid bar: left arm - VDP_CommandHMMV(LOGO_OX + 22, LOGO_OY + 17, 8, 4, 0x44); VDP_CommandWait(); // mid bar: right arm - VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 17, 10, 4, 0x77); VDP_CommandWait(); // middle crossing - VDP_CommandHMMV(LOGO_OX + 30, LOGO_OY + 15, 4, 19, 0x55); VDP_CommandWait(); // right leg + // Stem (vertical, width LOGO_T) at local x12, full height. Drawn as the three + // segments not covered by a crossbar, so the crossings (pal6/7) light separately. + VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 0, LOGO_T, 2, 0x33); VDP_CommandWait(); // stem: above top bar + VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 8, LOGO_T, 7, 0x33); VDP_CommandWait(); // stem: between bars + VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 21, LOGO_T, 13, 0x33); VDP_CommandWait(); // stem: below mid bar + // Top crossbar (horizontal, height LOGO_T): right arm + stem crossing. + VDP_CommandHMMV(LOGO_OX + 18, LOGO_OY + 2, 16, LOGO_T, 0x22); VDP_CommandWait(); // top bar: arm + VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 2, LOGO_T, LOGO_T, 0x66); VDP_CommandWait(); // top crossing + // Middle crossbar (horizontal, height LOGO_T): arm to the leg + stem crossing. + VDP_CommandHMMV(LOGO_OX + 18, LOGO_OY + 15, 10, LOGO_T, 0x44); VDP_CommandWait(); // mid bar: arm + VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 15, LOGO_T, LOGO_T, 0x77); VDP_CommandWait(); // middle crossing + // Right leg (vertical, width LOGO_T), butts against the middle crossbar. + VDP_CommandHMMV(LOGO_OX + 28, LOGO_OY + 15, LOGO_T, 19, 0x55); VDP_CommandWait(); // right leg VDP_EnableDisplay(TRUE);