From 9117ae38926114d6f72d30c22402553fd91c888d Mon Sep 17 00:00:00 2001 From: SirEnkido <306425398+SirEnkido@users.noreply.github.com> Date: Sat, 18 Jul 2026 15:14:19 +0200 Subject: [PATCH 1/2] ringmenu: 96.454% -> 96.461% (replace invented named fp consts with plain literals; anon pool now aligns with target, code relocs match) Co-Authored-By: Claude Fable 5 --- src/ringmenu.cpp | 364 +++++++++++++++++++---------------------------- 1 file changed, 150 insertions(+), 214 deletions(-) diff --git a/src/ringmenu.cpp b/src/ringmenu.cpp index 9a0e431208..69f8356d39 100644 --- a/src/ringmenu.cpp +++ b/src/ringmenu.cpp @@ -30,70 +30,6 @@ static const char sRingMenuDisplayToggleChangedFmt[] = { (char)0xBD, (char)0x81, (char)0x42, 0x25, 0x64, 0x2D, 0x25, 0x64, 0x0A, 0x00, 0x00, 0x00 }; -extern const float kRingMenuZero = 0.0f; -extern const float kRingMenuHalf = 0.5f; -extern const float kRingMenuCameraClipZ = -50.0f; -extern const float kRingMenuOne = 1.0f; -extern const float kRingMenuNegativeOne = -1.0f; -extern const float kRingMenuClipMinX = -0.9f; -extern const float kRingMenuClipMaxX = 0.9f; -extern const float kRingMenuClipMinY = -0.875f; -extern const float kRingMenuClipMaxY = 0.875f; -extern const float kRingMenuScreenHalfWidth = 320.0f; -extern const float kRingMenuScreenHalfHeight = 224.0f; -extern const float kRingMenuShadowOffset = 4.0f; -extern const float kRingMenuCommandCellSize = 56.0f; -extern const float kRingMenuMarkerSize = 49.0f; -extern const float kRingMenuMarkerUvScale = 0.7f; -extern const double kRingMenuS32DoubleBias = 4503601774854144.0; -extern const float kRingMenuAnimStep = 0.0625f; -extern const float kRingMenuHalfPi = 1.5707963705062866f; -extern const float kRingMenuWobbleDivisor = 12.0f; -extern const float kRingMenuPulseScale = 0.25f; -extern const float kRingMenuCycleStep = 0.05f; -extern const double kRingMenuCycleWrapD = 2.0; -extern const float kRingMenuTwo = 2.0f; -extern const float kRingMenuPi = 3.1415927410125732f; -extern const float kRingMenuNegHalfPi = -1.5707963705062866f; -extern const float kRingMenuAlphaMax = 255.0f; -extern const float kRingMenuSmallIconSize = 8.0f; -extern const float kRingMenuSmallOffset = 5.0f; -extern const float kRingMenuGbaOrbitYScale = 10.0f; -extern const float kRingMenuPanelWidth80 = 80.0f; -extern const float kRingMenuGbaIconSize = 48.0f; -extern const float kRingMenuThreeQuarter = 0.75f; -extern const float kRingMenuDrawAngleScale = 0.2f; -extern const float kRingMenuBlinkPhaseStep = 0.1f; -extern const float kRingMenuCommandIconV = 240.0f; -extern const float kRingMenuButtonHeight = 32.0f; -extern const float kRingMenuAltBaseX = 472.0f; -extern const float kRingMenuAltBaseY = 256.0f; -extern const float kRingMenuButtonWidth = 40.0f; -extern const float kRingMenuMainBaseY = 192.0f; -extern const float kRingMenuButtonInsetX = 16.0f; -extern const float kRingMenuMainButtonY = 96.0f; -extern const float kRingMenuButtonFadeStep = 0.125f; -extern const float kRingMenuLabelPanelWidth = 144.0f; -extern const float kRingMenuIconSize = 24.0f; -extern const float kRingMenuCommandPanelWidth = 128.0f; -extern const float kRingMenuCommandIconY = 88.0f; -extern const float kRingMenuFontMargin = -4.0f; -extern const double kRingMenuSpinAlphaScale = 100.0; -extern const double kRingMenuOneD = 1.0; -extern const double kRingMenuSpinEpsilon = 0.009999999776482582; -extern const float kRingMenuTextBaseX = 64.0f; -extern const float kRingMenuTextOffsetX = 20.0f; -extern const float kRingMenuTextOffsetY = 3.0f; -extern const float kRingMenuCommandTextOffsetY = 6.0f; -extern const float kRingMenuItemTextScale = 0.85f; -extern const float kRingMenuTextWobbleScale = 0.3f; -extern const float kRingMenuDimAlphaScale = 0.35f; -extern const float kRingMenuSpinWaveAmplitude = 30.0f; -extern const double kRingMenuSpinScaleBaseD = 0.800000011920929; -extern const double kRingMenuSpinScaleSlopeD = 0.25; -extern const double kRingMenuSpinAlphaSlopeD = 0.5; -extern const double kRingMenuU32DoubleBias = 4503599627370496.0; -extern const float kRingMenuSpinDamping = 0.8f; static inline unsigned char* MenuPcsRaw() { @@ -145,7 +81,7 @@ void CRingMenu::DrawIcon() Vec viewPos; Vec4d clipPos; Vec viewInput; - CVector offset(kRingMenuZero, kRingMenuHalf * partyObj->unk_0x188, kRingMenuZero); + CVector offset(0.0f, 0.5f * partyObj->unk_0x188, 0.0f); Vec* baseWorldPos = CVector(partyObj->m_worldPosition); CVector worldPos; PSVECAdd(baseWorldPos, offset, worldPos); @@ -154,34 +90,34 @@ void CRingMenu::DrawIcon() viewInput.y = worldPos.y; viewInput.z = worldPos.z; PSMTXMultVec(cameraMtx, &viewInput, &viewPos); - viewPos.z = (viewPos.z < kRingMenuCameraClipZ) ? viewPos.z : kRingMenuCameraClipZ; + viewPos.z = (viewPos.z < -50.0f) ? viewPos.z : -50.0f; Mtx44 screenMtx; PSMTX44Copy(CameraPcs.m_screenMatrix, screenMtx); Math.MTX44MultVec4(screenMtx, &viewPos, &clipPos); - float invW = kRingMenuOne / clipPos.w; + float invW = 1.0f / clipPos.w; clipPos.x = clipPos.x * invW; clipPos.y = clipPos.y * invW; - if ((clipPos.x > kRingMenuNegativeOne) && (clipPos.x < kRingMenuOne) && (clipPos.y > kRingMenuNegativeOne) && - (clipPos.y < kRingMenuOne)) { + if ((clipPos.x > -1.0f) && (clipPos.x < 1.0f) && (clipPos.y > -1.0f) && + (clipPos.y < 1.0f)) { return; } - float clampedX = (clipPos.x < kRingMenuClipMinX) - ? kRingMenuClipMinX - : ((kRingMenuClipMaxX < clipPos.x) ? kRingMenuClipMaxX : clipPos.x); + float clampedX = (clipPos.x < -0.9f) + ? -0.9f + : ((0.9f < clipPos.x) ? 0.9f : clipPos.x); clipPos.x = clampedX; - float clampedY = (clipPos.y < kRingMenuClipMinY) - ? kRingMenuClipMinY - : ((kRingMenuClipMaxY < clipPos.y) ? kRingMenuClipMaxY : clipPos.y); + float clampedY = (clipPos.y < -0.875f) + ? -0.875f + : ((0.875f < clipPos.y) ? 0.875f : clipPos.y); clipPos.y = clampedY; float angle = static_cast(atan2(static_cast(clipPos.x), static_cast(clipPos.y))); - float posX = kRingMenuScreenHalfWidth * clipPos.x + kRingMenuScreenHalfWidth; - float posY = kRingMenuScreenHalfHeight - kRingMenuScreenHalfHeight * clipPos.y; + float posX = 320.0f * clipPos.x + 320.0f; + float posY = 224.0f - 224.0f * clipPos.y; unsigned char blinkAlpha = sRingMenuBlinkAlphaTable[static_cast(System.m_frameCounter) % 16]; MenuPcs.SetTexture(static_cast(0x19)); @@ -197,13 +133,13 @@ void CRingMenu::DrawIcon() } MenuPcs.SetColor(CColor(0, 0, 0, 0x80)); - MenuPcs.DrawRect(3, kRingMenuShadowOffset + posX, - kRingMenuShadowOffset + posY, kRingMenuCommandCellSize, kRingMenuCommandCellSize, - kRingMenuZero, kRingMenuZero, kRingMenuOne, kRingMenuOne, angle); + MenuPcs.DrawRect(3, 4.0f + posX, + 4.0f + posY, 56.0f, 56.0f, + 0.0f, 0.0f, 1.0f, 1.0f, angle); MenuPcs.SetColor(CColor(0xFF, 0xFF, 0xFF, 0xFF)); - MenuPcs.DrawRect(3, posX, posY, kRingMenuCommandCellSize, kRingMenuCommandCellSize, kRingMenuZero, - static_cast(iconRow * 0x38), kRingMenuOne, kRingMenuOne, + MenuPcs.DrawRect(3, posX, posY, 56.0f, 56.0f, 0.0f, + static_cast(iconRow * 0x38), 1.0f, 1.0f, angle); int uInt = iconCol % 8 * 0x30; @@ -227,8 +163,8 @@ void CRingMenu::DrawIcon() float u = static_cast(uInt); float v = static_cast(vInt); - MenuPcs.DrawRect(3, static_cast(posX), static_cast(posY), kRingMenuMarkerSize, - kRingMenuMarkerSize, u, v, kRingMenuMarkerUvScale, kRingMenuMarkerUvScale, kRingMenuZero); + MenuPcs.DrawRect(3, static_cast(posX), static_cast(posY), 49.0f, + 49.0f, u, v, 0.7f, 0.7f, 0.0f); } /* @@ -359,21 +295,21 @@ void CRingMenu::drawGBA() return; } - showScale = static_cast(m_displayCounter) * kRingMenuAnimStep; + showScale = static_cast(m_displayCounter) * 0.0625f; if (m_displayDirection != 0) { - showScale = kRingMenuOne - showScale; + showScale = 1.0f - showScale; } - if (kRingMenuZero == showScale) { + if (0.0f == showScale) { return; } MenuPcs.SetTexture(static_cast(0x16)); float gbaAnimRaw = static_cast( - sin(static_cast((kRingMenuHalfPi * static_cast(m_gbaAnimCounter)) / kRingMenuWobbleDivisor))); + sin(static_cast((1.5707963705062866f * static_cast(m_gbaAnimCounter)) / 12.0f))); gbaAnim = gbaAnimRaw; if (m_gbaConnectedFlag == 1) { - gbaAnim = kRingMenuOne - gbaAnimRaw; + gbaAnim = 1.0f - gbaAnimRaw; } int posXInt = 0x30; @@ -390,57 +326,57 @@ void CRingMenu::drawGBA() MenuPcs.SetAttrFmt(static_cast(0)); - sizePulse = kRingMenuPulseScale * (kRingMenuOne - gbaAnim) + kRingMenuOne; - float cycleRaw = static_cast(fmod(static_cast(kRingMenuCycleStep * static_cast(m_commonFrameCounter)), - kRingMenuCycleWrapD)); - if (cycleRaw > kRingMenuOne) { - cycle = kRingMenuTwo - cycleRaw; + sizePulse = 0.25f * (1.0f - gbaAnim) + 1.0f; + float cycleRaw = static_cast(fmod(static_cast(0.05f * static_cast(m_commonFrameCounter)), + 2.0)); + if (cycleRaw > 1.0f) { + cycle = 2.0f - cycleRaw; } else { cycle = cycleRaw; } - angle = kRingMenuPi * cycle; + angle = 3.1415927410125732f * cycle; sinA = static_cast(sin(static_cast(angle))); - sinB = static_cast(sin(static_cast(kRingMenuNegHalfPi + angle))); + sinB = static_cast(sin(static_cast(-1.5707963705062866f + angle))); MenuPcs.SetTexture(static_cast(0x1E)); - const float alphaBase = kRingMenuAlphaMax * gbaAnim; - MenuPcs.SetColor(CColor(0, 0, 0, static_cast(kRingMenuHalf * alphaBase * showScale))); + const float alphaBase = 255.0f * gbaAnim; + MenuPcs.SetColor(CColor(0, 0, 0, static_cast(0.5f * alphaBase * showScale))); - const float drawAngle = kRingMenuDrawAngleScale * (kRingMenuTwo * (cycle - kRingMenuHalf)); - const float invSize = kRingMenuOne - sizePulse; - const float orbitX = kRingMenuSmallOffset * (sizePulse * sinB); - const float orbitY = kRingMenuGbaOrbitYScale * (sizePulse * sinA); + const float drawAngle = 0.2f * (2.0f * (cycle - 0.5f)); + const float invSize = 1.0f - sizePulse; + const float orbitX = 5.0f * (sizePulse * sinB); + const float orbitY = 10.0f * (sizePulse * sinA); const float drawX = posX + orbitX; const float drawY = posY - orbitY; - MenuPcs.DrawRect(3, kRingMenuSmallIconSize + drawX, kRingMenuSmallIconSize + drawY, kRingMenuPanelWidth80, kRingMenuGbaIconSize, - kRingMenuZero, static_cast(m_menuIndex * 0x30), kRingMenuThreeQuarter * (kRingMenuOne + invSize), - kRingMenuThreeQuarter * (sizePulse + invSize), drawAngle); + MenuPcs.DrawRect(3, 8.0f + drawX, 8.0f + drawY, 80.0f, 48.0f, + 0.0f, static_cast(m_menuIndex * 0x30), 0.75f * (1.0f + invSize), + 0.75f * (sizePulse + invSize), drawAngle); const float alphaLit = alphaBase * showScale; MenuPcs.SetColor(CColor(0xFF, 0xFF, 0xFF, static_cast(alphaLit))); - MenuPcs.DrawRect(3, drawX, drawY, kRingMenuPanelWidth80, kRingMenuGbaIconSize, kRingMenuZero, static_cast(m_menuIndex * 0x30), - kRingMenuThreeQuarter * sizePulse, kRingMenuThreeQuarter * sizePulse, drawAngle); + MenuPcs.DrawRect(3, drawX, drawY, 80.0f, 48.0f, 0.0f, static_cast(m_menuIndex * 0x30), + 0.75f * sizePulse, 0.75f * sizePulse, drawAngle); const unsigned int flatFlags = CFlatEnabledEventFlags(); if (((flatFlags & 8) != 0) && (Joybus.GetGBAStart(m_menuIndex) == 0)) { if (static_cast(Joybus.IsInitSend(m_menuIndex)) == 0) { MenuPcs.SetTexture(static_cast(0x1D)); - const float blink = static_cast(sin(static_cast(kRingMenuBlinkPhaseStep * static_cast(m_commonFrameCounter)))); + const float blink = static_cast(sin(static_cast(0.1f * static_cast(m_commonFrameCounter)))); const unsigned int sendAlpha = static_cast( - static_cast(kRingMenuHalf * (alphaLit * (kRingMenuOne + blink)))); + static_cast(0.5f * (alphaLit * (1.0f + blink)))); MenuPcs.SetColor(CColor(0xFF, 0xFF, 0xFF, static_cast(sendAlpha))); - MenuPcs.DrawRect(3, drawX, drawY, kRingMenuGbaIconSize, kRingMenuGbaIconSize, kRingMenuZero, kRingMenuCommandIconV, - kRingMenuOne, kRingMenuOne, kRingMenuZero); + MenuPcs.DrawRect(3, drawX, drawY, 48.0f, 48.0f, 0.0f, 240.0f, + 1.0f, 1.0f, 0.0f); } else { int frameTex = (static_cast(System.m_frameCounter) >> 1) % 16; if (frameTex >= 4) { frameTex &= 1; } MenuPcs.SetTexture(static_cast(0x1D)); - MenuPcs.DrawRect(3, drawX, drawY, kRingMenuGbaIconSize, kRingMenuGbaIconSize, kRingMenuZero, - static_cast(frameTex * 0x30), kRingMenuOne, kRingMenuOne, kRingMenuZero); + MenuPcs.DrawRect(3, drawX, drawY, 48.0f, 48.0f, 0.0f, + static_cast(frameTex * 0x30), 1.0f, 1.0f, 0.0f); } } @@ -469,35 +405,35 @@ void CRingMenu::onDraw() return; } - float showScale = static_cast(m_displayCounter) * kRingMenuAnimStep; + float showScale = static_cast(m_displayCounter) * 0.0625f; if (m_displayDirection != 0) { - showScale = kRingMenuOne - showScale; + showScale = 1.0f - showScale; } - if (kRingMenuZero == showScale) { + if (0.0f == showScale) { return; } float transitionScale; if (m_animDirection != 0) { - transitionScale = -(static_cast(m_transitionCounter) * kRingMenuAnimStep - kRingMenuOne); + transitionScale = -(static_cast(m_transitionCounter) * 0.0625f - 1.0f); } else { - transitionScale = static_cast(m_transitionCounter) * kRingMenuAnimStep; + transitionScale = static_cast(m_transitionCounter) * 0.0625f; } MenuPcs.SetTexture(static_cast(0x16)); - sin(static_cast((kRingMenuHalfPi * static_cast(m_gbaAnimCounter)) / kRingMenuWobbleDivisor)); + sin(static_cast((1.5707963705062866f * static_cast(m_gbaAnimCounter)) / 12.0f)); MenuPcs.SetAttrFmt(static_cast(0)); - float cycle = static_cast(fmod(static_cast(kRingMenuCycleStep * static_cast(m_commonFrameCounter)), - kRingMenuCycleWrapD)); - if (cycle > kRingMenuOne) { - cycle = kRingMenuTwo - cycle; + float cycle = static_cast(fmod(static_cast(0.05f * static_cast(m_commonFrameCounter)), + 2.0)); + if (cycle > 1.0f) { + cycle = 2.0f - cycle; } - float cycleAngle = kRingMenuPi * cycle; + float cycleAngle = 3.1415927410125732f * cycle; sin(static_cast(cycleAngle)); - sin(static_cast(kRingMenuNegHalfPi + cycleAngle)); + sin(static_cast(-1.5707963705062866f + cycleAngle)); - const double pulse = sin(static_cast(kRingMenuHalfPi * showScale)); + const double pulse = sin(static_cast(1.5707963705062866f * showScale)); float posLeft; float posAltY; @@ -507,30 +443,30 @@ void CRingMenu::onDraw() float iconAlphaScale; float posAltX; - alphaScaleBase = kRingMenuAlphaMax * showScale * transitionScale; - const float glowOffset = kRingMenuButtonHeight * (kRingMenuOne - static_cast(pulse)); + alphaScaleBase = 255.0f * showScale * transitionScale; + const float glowOffset = 32.0f * (1.0f - static_cast(pulse)); iconAlphaScale = showScale * transitionScale; - posAltX = kRingMenuAltBaseX + glowOffset; + posAltX = 472.0f + glowOffset; posLeft = -glowOffset; - posAltY = kRingMenuAltBaseY + glowOffset; - posMainX = posAltX - kRingMenuButtonWidth; - posMainY = kRingMenuMainBaseY + glowOffset; + posAltY = 256.0f + glowOffset; + posMainX = posAltX - 40.0f; + posMainY = 192.0f + glowOffset; for (int group = 2; group >= 0; group--) { float posX; float posY; if (group == 2) { - posX = kRingMenuButtonInsetX + (((m_menuIndex & 1) != 0) ? posAltX : posLeft); - posY = kRingMenuPanelWidth80 + (((m_menuIndex & 2) != 0) ? posAltY : posLeft); + posX = 16.0f + (((m_menuIndex & 1) != 0) ? posAltX : posLeft); + posY = 80.0f + (((m_menuIndex & 2) != 0) ? posAltY : posLeft); } else { - posX = kRingMenuButtonWidth + (((m_menuIndex & 1) != 0) ? posMainX : posLeft); - posY = kRingMenuMainButtonY + (((m_menuIndex & 2) != 0) ? posMainY : posLeft); + posX = 40.0f + (((m_menuIndex & 1) != 0) ? posMainX : posLeft); + posY = 96.0f + (((m_menuIndex & 2) != 0) ? posMainY : posLeft); } - float buttonAlpha = static_cast(m_buttonTimers[group * 3 + 2]) * kRingMenuButtonFadeStep; + float buttonAlpha = static_cast(m_buttonTimers[group * 3 + 2]) * 0.125f; if (m_battleButtons[group * 2 + 2] >= 0) { - buttonAlpha = kRingMenuOne - buttonAlpha; + buttonAlpha = 1.0f - buttonAlpha; } if (group == 2) { @@ -538,7 +474,7 @@ void CRingMenu::onDraw() buttonAlpha = static_cast(static_cast((partyObj->m_partyData.commandMode & 9) != 0)); } - if (kRingMenuZero == buttonAlpha) { + if (0.0f == buttonAlpha) { continue; } @@ -549,30 +485,30 @@ void CRingMenu::onDraw() float drawY; switch (group) { case 0: { - const float wobble = static_cast(sin(static_cast(kRingMenuHalfPi * buttonAlpha))); - drawX = -(kRingMenuButtonInsetX * wobble - (kRingMenuWobbleDivisor + posX)); + const float wobble = static_cast(sin(static_cast(1.5707963705062866f * buttonAlpha))); + drawX = -(16.0f * wobble - (12.0f + posX)); drawY = posY; - MenuPcs.DrawRect(0, drawX, drawY, kRingMenuLabelPanelWidth, kRingMenuButtonHeight, kRingMenuZero, kRingMenuZero, - kRingMenuOne, kRingMenuOne, kRingMenuZero); - MenuPcs.DrawRect(0, drawX, drawY, kRingMenuButtonWidth, kRingMenuButtonHeight, kRingMenuZero, kRingMenuCommandCellSize, - kRingMenuOne, kRingMenuOne, kRingMenuZero); + MenuPcs.DrawRect(0, drawX, drawY, 144.0f, 32.0f, 0.0f, 0.0f, + 1.0f, 1.0f, 0.0f); + MenuPcs.DrawRect(0, drawX, drawY, 40.0f, 32.0f, 0.0f, 56.0f, + 1.0f, 1.0f, 0.0f); break; } case 1: { - const float wobble = static_cast(sin(static_cast(kRingMenuHalfPi * buttonAlpha))); - drawX = -(kRingMenuButtonInsetX * wobble - posX); - drawY = kRingMenuIconSize + posY; - MenuPcs.DrawRect(0, drawX, drawY, kRingMenuLabelPanelWidth, kRingMenuIconSize, kRingMenuZero, kRingMenuButtonHeight, - kRingMenuOne, kRingMenuOne, kRingMenuZero); - MenuPcs.DrawRect(0, drawX, drawY, kRingMenuIconSize, kRingMenuIconSize, kRingMenuButtonWidth, kRingMenuCommandCellSize, - kRingMenuOne, kRingMenuOne, kRingMenuZero); + const float wobble = static_cast(sin(static_cast(1.5707963705062866f * buttonAlpha))); + drawX = -(16.0f * wobble - posX); + drawY = 24.0f + posY; + MenuPcs.DrawRect(0, drawX, drawY, 144.0f, 24.0f, 0.0f, 32.0f, + 1.0f, 1.0f, 0.0f); + MenuPcs.DrawRect(0, drawX, drawY, 24.0f, 24.0f, 40.0f, 56.0f, + 1.0f, 1.0f, 0.0f); break; } case 2: drawX = posX; drawY = posY; - MenuPcs.DrawRect(0, posX, posY, kRingMenuCommandPanelWidth, kRingMenuButtonHeight, kRingMenuZero, kRingMenuCommandIconY, - kRingMenuOne, kRingMenuOne, kRingMenuZero); + MenuPcs.DrawRect(0, posX, posY, 128.0f, 32.0f, 0.0f, 88.0f, + 1.0f, 1.0f, 0.0f); break; } @@ -586,12 +522,12 @@ void CRingMenu::onDraw() CFont* font = MenuPcs.m_fonts[1]; font->DrawInit(); - font->SetMargin(kRingMenuFontMargin); + font->SetMargin(-4.0f); font->SetShadow(1); font->SetTlut(4); float scroll = m_spinAccumulator; - float labelAlpha = kRingMenuOne; + float labelAlpha = 1.0f; for (;;) { if (scroll >= labelAlpha) { if (Game.m_gameWork.m_bossArtifactStageIndex == 0x19) { @@ -599,14 +535,14 @@ void CRingMenu::onDraw() } else { cmdIndex = caravanWork->GetNextCmdListIdx(cmdIndex, -1); } - scroll -= kRingMenuOne; - } else if (scroll <= kRingMenuNegativeOne) { + scroll -= 1.0f; + } else if (scroll <= -1.0f) { if (Game.m_gameWork.m_bossArtifactStageIndex == 0x19) { cmdIndex = (cmdIndex + 4) % 5; } else { cmdIndex = caravanWork->GetNextCmdListIdx(cmdIndex, 1); } - scroll += kRingMenuOne; + scroll += 1.0f; } else { break; } @@ -614,10 +550,10 @@ void CRingMenu::onDraw() double mag = fabs(static_cast(m_spinAccumulator)); double labelAlphaD; - if (mag < kRingMenuSpinEpsilon) { - labelAlphaD = kRingMenuSpinAlphaScale * mag; + if (mag < 0.009999999776482582) { + labelAlphaD = 100.0 * mag; } else { - labelAlphaD = kRingMenuOneD; + labelAlphaD = 1.0; } labelAlpha = static_cast(labelAlphaD); @@ -629,27 +565,27 @@ void CRingMenu::onDraw() : caravanWork->GetNextCmdListIdx(prev1, -1); labelAlpha *= iconAlphaScale; - drawCommand(m_menuIndex, font, posX, posY, caravanWork, prev2, scroll - kRingMenuTwo, labelAlpha); - drawCommand(m_menuIndex, font, posX, posY, caravanWork, prev1, scroll - kRingMenuOne, labelAlpha); + drawCommand(m_menuIndex, font, posX, posY, caravanWork, prev2, scroll - 2.0f, labelAlpha); + drawCommand(m_menuIndex, font, posX, posY, caravanWork, prev1, scroll - 1.0f, labelAlpha); int next1 = (Game.m_gameWork.m_bossArtifactStageIndex == 0x19) ? (cmdIndex + 1) % 5 : caravanWork->GetNextCmdListIdx(cmdIndex, 1); int next2 = (Game.m_gameWork.m_bossArtifactStageIndex == 0x19) ? (next1 + 1) % 5 : caravanWork->GetNextCmdListIdx(next1, 1); - drawCommand(m_menuIndex, font, posX, posY, caravanWork, next2, kRingMenuTwo + scroll, labelAlpha); - drawCommand(m_menuIndex, font, posX, posY, caravanWork, next1, kRingMenuOne + scroll, labelAlpha); + drawCommand(m_menuIndex, font, posX, posY, caravanWork, next2, 2.0f + scroll, labelAlpha); + drawCommand(m_menuIndex, font, posX, posY, caravanWork, next1, 1.0f + scroll, labelAlpha); drawCommand(m_menuIndex, font, posX, posY, caravanWork, cmdIndex, scroll, iconAlphaScale); MenuPcs.DrawInit(); } } - const float textX2 = kRingMenuTextBaseX + drawX; - const float textX0 = textX2 + kRingMenuTextOffsetX; - const float textY0 = (kRingMenuSmallOffset + drawY) - kRingMenuShadowOffset; - const float textX1 = (kRingMenuCommandCellSize + drawX) + kRingMenuTextOffsetX; - const float textY1 = (kRingMenuTextOffsetY + drawY) - kRingMenuShadowOffset; - const float textY2 = kRingMenuCommandTextOffsetY + drawY; + const float textX2 = 64.0f + drawX; + const float textX0 = textX2 + 20.0f; + const float textY0 = (5.0f + drawY) - 4.0f; + const float textX1 = (56.0f + drawX) + 20.0f; + const float textY1 = (3.0f + drawY) - 4.0f; + const float textY2 = 6.0f + drawY; CFont* font = MenuPcs.m_fonts[1]; for (int button = 1; button >= 0; button--) { const int buttonValue = (&m_battleButtons[group * 2 + 2])[button]; @@ -664,29 +600,29 @@ void CRingMenu::onDraw() label = Game.m_cFlatDataArr[1].TableStrings(4)[buttonValue]; } - float fade = static_cast((&m_buttonTimers[group * 3])[button]) * kRingMenuButtonFadeStep; + float fade = static_cast((&m_buttonTimers[group * 3])[button]) * 0.125f; if (button == 0) { - fade = kRingMenuOne - fade; + fade = 1.0f - fade; } font->DrawInit(); - font->SetMargin(kRingMenuFontMargin); + font->SetMargin(-4.0f); font->SetShadow(1); float textScale; switch (group) { case 0: font->SetTlut(0xD); - textScale = kRingMenuItemTextScale; + textScale = 0.85f; break; case 1: font->SetTlut(0xE); - textScale = kRingMenuThreeQuarter; + textScale = 0.75f; break; case 2: { font->SetTlut((buttonValue == 1) ? 7 : 4); - const float wobble = static_cast(sin(static_cast(kRingMenuHalfPi * (kRingMenuOne - fade)))); - textScale = kRingMenuThreeQuarter * (kRingMenuTextWobbleScale * wobble + kRingMenuOne); + const float wobble = static_cast(sin(static_cast(1.5707963705062866f * (1.0f - fade)))); + textScale = 0.75f * (0.3f * wobble + 1.0f); break; } } @@ -697,32 +633,32 @@ void CRingMenu::onDraw() const float width = font->GetWidth(label); if ((group == 2) && (m_battleButtons[2] >= 0)) { font->SetColor(CColor(0xFF, 0xFF, 0xFF, - static_cast(kRingMenuDimAlphaScale * (showScale * (kRingMenuAlphaMax * fade * transitionScale)))).color); + static_cast(0.35f * (showScale * (255.0f * fade * transitionScale)))).color); } else { font->SetColor(CColor(0xFF, 0xFF, 0xFF, - static_cast(showScale * (kRingMenuAlphaMax * fade * transitionScale))).color); + static_cast(showScale * (255.0f * fade * transitionScale))).color); } float textX; float textY; switch (group) { case 0: - textX = -(kRingMenuHalf * width - textX0); + textX = -(0.5f * width - textX0); textY = textY0; break; case 1: - textX = -(kRingMenuHalf * width - textX1); + textX = -(0.5f * width - textX1); textY = textY1; break; case 2: - textX = -(kRingMenuHalf * width - textX2); + textX = -(0.5f * width - textX2); textY = textY2; break; } font->SetPosX(textX); font->SetPosY(textY); - font->SetPosZ(kRingMenuZero); + font->SetPosZ(0.0f); if (group != 2) { font->Draw(label); } @@ -737,9 +673,9 @@ void CRingMenu::onDraw() && (static_cast( static_cast((static_cast(CFlatGameFlags()) << 30) & 0xC0000000) >> 31) == 0)) { - const float barY = kRingMenuTextOffsetX + textY; - const float fullAlpha = showScale * (kRingMenuAlphaMax * fade * transitionScale); - const float dimAlpha = showScale * (kRingMenuCommandPanelWidth * fade * transitionScale); + const float barY = 20.0f + textY; + const float fullAlpha = showScale * (255.0f * fade * transitionScale); + const float dimAlpha = showScale * (128.0f * fade * transitionScale); for (int i = 0; i < caravanWork->m_numCmdListSlots; i++) { int maxCharge; @@ -752,19 +688,19 @@ void CRingMenu::onDraw() blink = static_cast(static_cast((System.m_frameCounter >> 2) & 1)); } else if (caravanWork->IsSelectedCmdList(i)) { MenuPcs.SetColor(CColor(0x20, 0xFF, 0x20, static_cast(fullAlpha))); - blink = kRingMenuZero; + blink = 0.0f; } else { MenuPcs.SetColor(CColor(0x80, 0x80, 0x80, static_cast(dimAlpha))); - blink = kRingMenuZero; + blink = 0.0f; } MenuPcs.DrawRect(3, - kRingMenuShadowOffset + + 4.0f + ((textX2 - static_cast((caravanWork->m_numCmdListSlots * 8) / 2)) + static_cast(i * 8)), - barY, kRingMenuSmallIconSize, kRingMenuSmallIconSize, - kRingMenuSmallIconSize * (kRingMenuSmallIconSize + blink), kRingMenuCommandCellSize, - kRingMenuOne, kRingMenuOne, kRingMenuZero); + barY, 8.0f, 8.0f, + 8.0f * (8.0f + blink), 56.0f, + 1.0f, 1.0f, 0.0f); } } } @@ -841,7 +777,7 @@ void drawCommand(int state, CFont* font, float posX, float posY, CCaravanWork* c font->SetTlut(4); } - waveX = static_cast(kRingMenuSpinWaveAmplitude * static_cast(sin(static_cast(angle)))); + waveX = static_cast(30.0f * static_cast(sin(static_cast(angle)))); waveSinY = static_cast(sin(static_cast(angle))); reverseDir = false; if ((state == 0) || (state == 3)) { @@ -851,26 +787,26 @@ void drawCommand(int state, CFont* font, float posX, float posY, CCaravanWork* c if (reverseDir) { waveDirection = -1; } - waveY = static_cast(waveDirection) * (kRingMenuGbaOrbitYScale * waveSinY); + waveY = static_cast(waveDirection) * (10.0f * waveSinY); if (Game.m_gameWork.m_bossArtifactStageIndex == 0x19) { - waveY = waveY + kRingMenuTwo; + waveY = waveY + 2.0f; } - font->SetScale(static_cast(-(kRingMenuSpinScaleSlopeD * fabs(static_cast(angle)) - kRingMenuSpinScaleBaseD))); + font->SetScale(static_cast(-(0.25 * fabs(static_cast(angle)) - 0.800000011920929))); textWidth = static_cast(font->GetWidth(commandLabel)); - fVar1 = static_cast(-(kRingMenuSpinAlphaSlopeD * fabs(static_cast(angle)) - kRingMenuOneD)); + fVar1 = static_cast(-(0.5 * fabs(static_cast(angle)) - 1.0)); textHeight = static_cast(font->m_glyphHeight) * font->scaleY; - clampedAlpha = (fVar1 < kRingMenuZero) ? kRingMenuZero : ((kRingMenuOne < fVar1) ? kRingMenuOne : fVar1); + clampedAlpha = (fVar1 < 0.0f) ? 0.0f : ((1.0f < fVar1) ? 1.0f : fVar1); - alphaProduct = kRingMenuAlphaMax * alphaScale; + alphaProduct = 255.0f * alphaScale; font->SetColor(CColor(0xFF, 0xFF, 0xFF, static_cast(alphaProduct * clampedAlpha)).color); font->SetPosX(static_cast(waveX) + - ((kRingMenuTextBaseX + posX) - textWidth * kRingMenuHalf)); - font->SetPosY(kRingMenuGbaOrbitYScale + - (waveY + ((kRingMenuShadowOffset + posY) - textHeight * kRingMenuHalf))); - font->SetPosZ(kRingMenuZero); + ((64.0f + posX) - textWidth * 0.5f)); + font->SetPosY(10.0f + + (waveY + ((4.0f + posY) - textHeight * 0.5f))); + font->SetPosZ(0.0f); font->Draw(commandLabel); } @@ -894,9 +830,9 @@ void CRingMenu::onCalc() m_displayCounter = 0x10 - m_displayCounter; } - const float animStep = kRingMenuBlinkPhaseStep; + const float animStep = 0.1f; int count = 9; - const float animMin = kRingMenuZero; + const float animMin = 0.0f; float (*anim)[3] = m_animFloat; m_displayCounter = clampDecToZero(m_displayCounter); @@ -931,7 +867,7 @@ void CRingMenu::onCalc() count--; } while (count != 0); - fmod(static_cast(m_spinPhase), kRingMenuOneD); + fmod(static_cast(m_spinPhase), 1.0); int i = 0x1B; while (i > 0) { i--; @@ -954,7 +890,7 @@ void CRingMenu::onCalc() } m_gbaAnimCounter = clampDecToZero(m_gbaAnimCounter); - float scrollDelta = kRingMenuZero; + float scrollDelta = 0.0f; CGPartyObj* partyObj = Game.m_partyObjArr[m_menuIndex]; if (partyObj != 0) { CCaravanWork* caravanWork = reinterpret_cast(partyObj->m_scriptHandle); @@ -1013,7 +949,7 @@ void CRingMenu::onCalc() } break; } - scrollDelta = kRingMenuZero; + scrollDelta = 0.0f; } } @@ -1021,7 +957,7 @@ void CRingMenu::onCalc() *trackedCmd = currentCmd; m_spinAccumulator = m_spinAccumulator + scrollDelta; - m_spinAccumulator *= kRingMenuSpinDamping; + m_spinAccumulator *= 0.8f; } } } @@ -1037,7 +973,7 @@ void CRingMenu::onCalc() */ double CRingMenu::GetDispCounter() { - return static_cast(kRingMenuOne - static_cast(m_displayCounter) * kRingMenuAnimStep); + return static_cast(1.0f - static_cast(m_displayCounter) * 0.0625f); } /* @@ -1093,14 +1029,14 @@ void CRingMenu::Create() m_buttonTimers[8] = 0; m_ringRotation = -1; m_rotationPhase = -1; - m_spinPhase = kRingMenuZero; + m_spinPhase = 0.0f; m_gbaConnectedFlag = 0; m_gbaAnimCounter = 0; m_commonFrameCounter = 0; m_unk4f8 = 0; m_timerB = 0; m_currentCommandIndex = 0; - m_spinAccumulator = kRingMenuZero; + m_spinAccumulator = 0.0f; } /* From 37ca818ea856184ec8ba77842d771da8bf146854 Mon Sep 17 00:00:00 2001 From: SirEnkido <306425398+SirEnkido@users.noreply.github.com> Date: Sat, 18 Jul 2026 15:15:45 +0200 Subject: [PATCH 2/2] ringmenu: write drawCommand scale as 0.8 - 0.25*fabs(angle); pool double order now byte-identical to target Co-Authored-By: Claude Fable 5 --- src/ringmenu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ringmenu.cpp b/src/ringmenu.cpp index 69f8356d39..6e90ebb96e 100644 --- a/src/ringmenu.cpp +++ b/src/ringmenu.cpp @@ -792,7 +792,7 @@ void drawCommand(int state, CFont* font, float posX, float posY, CCaravanWork* c waveY = waveY + 2.0f; } - font->SetScale(static_cast(-(0.25 * fabs(static_cast(angle)) - 0.800000011920929))); + font->SetScale(static_cast(0.800000011920929 - 0.25 * fabs(static_cast(angle)))); textWidth = static_cast(font->GetWidth(commandLabel)); fVar1 = static_cast(-(0.5 * fabs(static_cast(angle)) - 1.0)); textHeight = static_cast(font->m_glyphHeight) * font->scaleY;