From 1d6d6ca5c3f8305381a2782eac3376cf778e2b47 Mon Sep 17 00:00:00 2001 From: SirEnkido <306425398+SirEnkido@users.noreply.github.com> Date: Fri, 17 Jul 2026 21:20:22 +0200 Subject: [PATCH 1/4] mesmenu: 95.61% -> 96.03% (onDraw signed iconFrame conv, named frame masks, de-fused wave drift, state switch) Co-Authored-By: Claude Fable 5 --- src/mesmenu.cpp | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/mesmenu.cpp b/src/mesmenu.cpp index cdfef195d6..fb03cf0588 100644 --- a/src/mesmenu.cpp +++ b/src/mesmenu.cpp @@ -441,7 +441,7 @@ void CMesMenu::onDraw() { if ((m_menuIndex == 0) && (static_cast(static_cast(static_cast(CFlatGameFlags()) << 30) >> 31) != 0)) { - unsigned int iconFrame = 0; + int iconFrame = 0; int charaMode = Chara.MogFur().m_commandIndex; switch (charaMode) { case 0: @@ -644,13 +644,15 @@ void CMesMenu::onDraw() float titleAlpha = FLOAT_80330908 * stageBlend; MenuPcs.SetColor(CColor(0xFF, 0xFF, 0xFF, static_cast(titleAlpha)).Ref()); unsigned int frameMask = m_menuIndex; + int maskU = 0x80; + int maskV = 0x38; int frameNegX = -(int)(frameMask & 1); - float frameX = baseX - (float)(frameNegX & 0x80); - float frameY = baseY - (float)(-(int)(frameMask >> 1 & 1) & 0x38); + float frameX = baseX - (float)(maskU & frameNegX); + float frameY = baseY - (float)(maskV & -(int)(frameMask >> 1 & 1)); MenuPcs.DrawRect( 0, frameX, frameY, FLOAT_80330964, FLOAT_80330948, - (float)(((int)(-(int)(frameMask & 2) | (int)(frameMask & 2)) >> 31) & 0x80), - (float)(((int)(frameNegX | (int)(frameMask & 1)) >> 31) & 0x38), FLOAT_80330914, FLOAT_80330914, + (float)(maskU & ((int)(-(int)(frameMask & 2) | (int)(frameMask & 2)) >> 31)), + (float)(maskV & ((int)(frameNegX | (int)(frameMask & 1)) >> 31)), FLOAT_80330914, FLOAT_80330914, FLOAT_803308d8); font->SetScale(FLOAT_8033094C); @@ -861,8 +863,10 @@ void CMesMenu::onDraw() MenuPcs.SetColor(CColor(0, 0, 0, static_cast((FLOAT_803308ec * alpha255) * stageBlend)).Ref()); float promptX = (float)(int)(FLOAT_803308f8 + drawX); float promptY = (float)(int)(FLOAT_8033092c + drawY); - float waveX = promptX + FLOAT_80330984 * (pulseScale * sinX); - float waveY = promptY - FLOAT_80330988 * (pulseScale * sinY); + float driftX = FLOAT_80330984 * (pulseScale * sinX); + float driftY = FLOAT_80330988 * (pulseScale * sinY); + float waveX = promptX + driftX; + float waveY = promptY - driftY; float fadeScale = FLOAT_80330914 - pulseScale; float rotation = FLOAT_8033091c * (FLOAT_803308e8 * (time - FLOAT_803308ec)); MenuPcs.DrawRect( @@ -881,15 +885,19 @@ void CMesMenu::onDraw() } } - if ((m_state == 1) && (m_mes.GetWait() == 3)) { - MenuPcs.SetTexture(static_cast(0)); - MenuPcs.SetColor(CColor(0xFF, 0xFF, 0xFF, static_cast(FLOAT_80330908 * stageBlend)).Ref()); + switch (m_state) { + case 1: + if (m_mes.GetWait() == 3) { + MenuPcs.SetTexture(static_cast(0)); + MenuPcs.SetColor(CColor(0xFF, 0xFF, 0xFF, static_cast(FLOAT_80330908 * stageBlend)).Ref()); - MenuPcs.DrawRect( - 0, FLOAT_80330994 + *(float*)((char*)this + 0x3CB8), - (float)*(int*)((char*)this + 0x3D34) * *(float*)((char*)this + 0x3D40) + - (FLOAT_803308e8 + *(float*)((char*)this + 0x3CBC) + *(float*)((char*)this + 0x3D3C)), - FLOAT_8033092c, FLOAT_8033092c, FLOAT_803308d8, FLOAT_803308d8, FLOAT_80330914, FLOAT_80330914, FLOAT_803308d8); + MenuPcs.DrawRect( + 0, FLOAT_80330994 + *(float*)((char*)this + 0x3CB8), + (float)*(int*)((char*)this + 0x3D34) * *(float*)((char*)this + 0x3D40) + + (FLOAT_803308e8 + *(float*)((char*)this + 0x3CBC) + *(float*)((char*)this + 0x3D3C)), + FLOAT_8033092c, FLOAT_8033092c, FLOAT_803308d8, FLOAT_803308d8, FLOAT_80330914, FLOAT_80330914, FLOAT_803308d8); + } + break; } } From b9a4677ff18fab0320c30354ec8d79aec366e543 Mon Sep 17 00:00:00 2001 From: SirEnkido <306425398+SirEnkido@users.noreply.github.com> Date: Fri, 17 Jul 2026 21:23:07 +0200 Subject: [PATCH 2/4] mesmenu: 96.03% -> 96.28% (onDraw frame-offset ternary selects) Co-Authored-By: Claude Fable 5 --- src/mesmenu.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/mesmenu.cpp b/src/mesmenu.cpp index fb03cf0588..671ef7e2cf 100644 --- a/src/mesmenu.cpp +++ b/src/mesmenu.cpp @@ -644,15 +644,12 @@ void CMesMenu::onDraw() float titleAlpha = FLOAT_80330908 * stageBlend; MenuPcs.SetColor(CColor(0xFF, 0xFF, 0xFF, static_cast(titleAlpha)).Ref()); unsigned int frameMask = m_menuIndex; - int maskU = 0x80; - int maskV = 0x38; - int frameNegX = -(int)(frameMask & 1); - float frameX = baseX - (float)(maskU & frameNegX); - float frameY = baseY - (float)(maskV & -(int)(frameMask >> 1 & 1)); + float frameX = baseX - (float)((frameMask & 1) ? 0x80 : 0); + float frameY = baseY - (float)((frameMask >> 1 & 1) ? 0x38 : 0); MenuPcs.DrawRect( 0, frameX, frameY, FLOAT_80330964, FLOAT_80330948, - (float)(maskU & ((int)(-(int)(frameMask & 2) | (int)(frameMask & 2)) >> 31)), - (float)(maskV & ((int)(frameNegX | (int)(frameMask & 1)) >> 31)), FLOAT_80330914, FLOAT_80330914, + (float)((frameMask & 2) ? 0x80 : 0), + (float)(((frameMask & 1) != 0) ? 0x38 : 0), FLOAT_80330914, FLOAT_80330914, FLOAT_803308d8); font->SetScale(FLOAT_8033094C); From 0e1e7b7c6f541e3230bd8bf4488dea6d6282bd31 Mon Sep 17 00:00:00 2001 From: SirEnkido <306425398+SirEnkido@users.noreply.github.com> Date: Fri, 17 Jul 2026 21:30:25 +0200 Subject: [PATCH 3/4] mesmenu: 96.28% -> 97.00% (onDraw frame select cond forms: raw-truth vs !=0) Co-Authored-By: Claude Fable 5 --- src/mesmenu.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesmenu.cpp b/src/mesmenu.cpp index 671ef7e2cf..28a8339dad 100644 --- a/src/mesmenu.cpp +++ b/src/mesmenu.cpp @@ -645,10 +645,10 @@ void CMesMenu::onDraw() MenuPcs.SetColor(CColor(0xFF, 0xFF, 0xFF, static_cast(titleAlpha)).Ref()); unsigned int frameMask = m_menuIndex; float frameX = baseX - (float)((frameMask & 1) ? 0x80 : 0); - float frameY = baseY - (float)((frameMask >> 1 & 1) ? 0x38 : 0); + float frameY = baseY - (float)((frameMask & 2) ? 0x38 : 0); MenuPcs.DrawRect( 0, frameX, frameY, FLOAT_80330964, FLOAT_80330948, - (float)((frameMask & 2) ? 0x80 : 0), + (float)(((frameMask & 2) != 0) ? 0x80 : 0), (float)(((frameMask & 1) != 0) ? 0x38 : 0), FLOAT_80330914, FLOAT_80330914, FLOAT_803308d8); From 93732c1fbe5bf4b86b723fbd5f6b2ab6080c4dc9 Mon Sep 17 00:00:00 2001 From: SirEnkido <306425398+SirEnkido@users.noreply.github.com> Date: Sat, 18 Jul 2026 10:24:29 +0200 Subject: [PATCH 4/4] mesmenu: replace onDraw this-offset casts with real CMes member access (friend CMesMenu; 97.00% unchanged, DOL byte-identical) Co-Authored-By: Claude Fable 5 --- include/ffcc/mes.h | 2 ++ src/mesmenu.cpp | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/ffcc/mes.h b/include/ffcc/mes.h index c4fbf60fb6..91b1d75373 100644 --- a/include/ffcc/mes.h +++ b/include/ffcc/mes.h @@ -7,6 +7,8 @@ class CGame; class CMes { + friend class CMesMenu; + public: class CFlag { diff --git a/src/mesmenu.cpp b/src/mesmenu.cpp index 28a8339dad..d0e0d17226 100644 --- a/src/mesmenu.cpp +++ b/src/mesmenu.cpp @@ -889,9 +889,9 @@ void CMesMenu::onDraw() MenuPcs.SetColor(CColor(0xFF, 0xFF, 0xFF, static_cast(FLOAT_80330908 * stageBlend)).Ref()); MenuPcs.DrawRect( - 0, FLOAT_80330994 + *(float*)((char*)this + 0x3CB8), - (float)*(int*)((char*)this + 0x3D34) * *(float*)((char*)this + 0x3D40) + - (FLOAT_803308e8 + *(float*)((char*)this + 0x3CBC) + *(float*)((char*)this + 0x3D3C)), + 0, FLOAT_80330994 + m_mes.mBaseX, + (float)m_mes.mRubyHeight * m_mes.mRubySpacing + + (FLOAT_803308e8 + m_mes.mBaseY + m_mes.mRubyY), FLOAT_8033092c, FLOAT_8033092c, FLOAT_803308d8, FLOAT_803308d8, FLOAT_80330914, FLOAT_80330914, FLOAT_803308d8); } break;