Inset the logo's lower-right stroke from the bars' right edge

The leg sat flush against the middle bar's right end, looking tacked on.
Move it left so both bars overhang it on the right and it crosses the
middle bar like a real glyph stroke. The leg/mid-bar crossing gets its
own palette entry (pal8), lit during both the mid bar's and the leg's
fade so neither shows a gap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-30 00:02:33 +02:00
co-authored by Claude Opus 4.8
parent 9b554187af
commit d2f9b35356
2 changed files with 21 additions and 15 deletions
Binary file not shown.
+21 -15
View File
@@ -745,8 +745,9 @@ static void LogoFadeSet(const u8* idx, u8 n, u8 delay_halts)
// the two crossing points get their OWN palette entries (6, 7) that are lit
// during BOTH the bar's turn and the spine's turn — so neither the horizontals
// nor the verticals ever show a gap. Strokes are partitioned (no shared pixels):
// pal2 = top bar (overhangs) pal3 = spine (excl. crossings) pal6 = top crossing
// pal4 = mid bar (overhangs) pal5 = lower-right stroke pal7 = mid crossing
// pal2 = top bar (overhangs) pal3 = spine (excl. crossings) pal6 = top/spine crossing
// pal4 = mid bar (overhangs) pal5 = lower-right stroke pal7 = mid/spine crossing
// pal8 = mid-bar/leg crossing (lit during both the mid bar's and the leg's turn)
// The spine is a touch thicker than the (evened) bars/leg, keeping the original
// glyph's weight. Origin X and all widths are even so the byte-aligned HMMV
// fills land on pixel boundaries.
@@ -780,32 +781,37 @@ static void ShowLogoAnimation(void)
VDP_CommandHMMV(LOGO_OX + 8, LOGO_OY + 2, 4, LOGO_BT, 0x22); VDP_CommandWait(); // top bar: left overhang
VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 2, LOGO_SW, LOGO_BT, 0x66); VDP_CommandWait(); // top crossing
VDP_CommandHMMV(LOGO_OX + 20, LOGO_OY + 2, 14, LOGO_BT, 0x22); VDP_CommandWait(); // top bar: right arm
// Middle bar (height LOGO_BT): left overhang + spine crossing + right arm (to leg).
// Middle bar (height LOGO_BT): left overhang + spine crossing + two right-arm
// pieces straddling the leg, with the leg/bar crossing (pal8) between them.
VDP_CommandHMMV(LOGO_OX + 8, LOGO_OY + 16, 4, LOGO_BT, 0x44); VDP_CommandWait(); // mid bar: left overhang
VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 16, LOGO_SW, LOGO_BT, 0x77); VDP_CommandWait(); // mid crossing
VDP_CommandHMMV(LOGO_OX + 20, LOGO_OY + 16, 8, LOGO_BT, 0x44); VDP_CommandWait(); // mid bar: right arm
// Lower-right stroke (vertical, width LOGO_BT), butts against the middle bar.
VDP_CommandHMMV(LOGO_OX + 28, LOGO_OY + 15, LOGO_BT, 19, 0x55); VDP_CommandWait(); // leg
VDP_CommandHMMV(LOGO_OX + 12, LOGO_OY + 16, LOGO_SW, LOGO_BT, 0x77); VDP_CommandWait(); // mid/spine crossing
VDP_CommandHMMV(LOGO_OX + 20, LOGO_OY + 16, 4, LOGO_BT, 0x44); VDP_CommandWait(); // mid bar: arm before leg
VDP_CommandHMMV(LOGO_OX + 24, LOGO_OY + 16, LOGO_BT, LOGO_BT, 0x88); VDP_CommandWait(); // mid/leg crossing
VDP_CommandHMMV(LOGO_OX + 30, LOGO_OY + 16, 4, LOGO_BT, 0x44); VDP_CommandWait(); // mid bar: arm past leg
// Lower-right stroke (vertical, width LOGO_BT), inset from the right and crossing
// the middle bar. Drawn as the parts above and below that crossing.
VDP_CommandHMMV(LOGO_OX + 24, LOGO_OY + 14, LOGO_BT, 2, 0x55); VDP_CommandWait(); // leg: above mid bar
VDP_CommandHMMV(LOGO_OX + 24, LOGO_OY + 22, LOGO_BT, 12, 0x55); VDP_CommandWait(); // leg: below mid bar
VDP_EnableDisplay(TRUE);
// Reveal order: each horizontal shimmers, then each vertical, then the total.
// Each crossbar lights its arms + its crossing; the stem lights its body +
// both crossings — so every stroke appears as a complete shape.
static const u8 fadeTop[2] = {2, 6}; // top crossbar
static const u8 fadeMid[2] = {4, 7}; // middle crossbar
static const u8 fadeStem[3] = {3, 6, 7}; // left stem
static const u8 fadeLeg[1] = {5}; // right leg
static const u8 fadeAll[6] = {2, 3, 4, 5, 6, 7};
static const u8 fadeTop[2] = {2, 6}; // top bar: arms + spine crossing
static const u8 fadeMid[3] = {4, 7, 8}; // mid bar: arms + spine crossing + leg crossing
static const u8 fadeStem[3] = {3, 6, 7}; // spine: body + both spine crossings
static const u8 fadeLeg[2] = {5, 8}; // leg: body + leg/mid-bar crossing
static const u8 fadeAll[7] = {2, 3, 4, 5, 6, 7, 8};
LogoFadeSet(fadeTop, 2, 5);
LogoFadeSet(fadeMid, 2, 5);
LogoFadeSet(fadeMid, 3, 5);
LogoFadeSet(fadeStem, 3, 5);
LogoFadeSet(fadeLeg, 1, 5);
LogoFadeSet(fadeLeg, 2, 5);
// The total: all strokes fade up together and hold.
for (u8 lvl = 1; lvl <= 7; lvl++) {
u16 c = ((u16)lvl << 8) | ((u16)lvl << 4) | lvl;
for (u8 k = 0; k < 6; k++) VDP_SetPaletteEntry(fadeAll[k], c);
for (u8 k = 0; k < 7; k++) VDP_SetPaletteEntry(fadeAll[k], c);
for (u8 h = 0; h < 5; h++) Halt();
}
for (u8 h = 0; h < 150; h++) Halt();