Recent work on Select Music has focused on Simply Love FunZone and soon to be Infinitesimal.

Both themes make heavy use of Lua to control how their music wheels look and behave. That gives them much more freedom than the standard engine wheel, but it also means the theme and engine can end up repeating some of the same work.

A single wheel movement may update the selected song, request grades, refresh chart information, load banners and CDTitles, update previews, rebuild visible rows and move several theme actors.

None of those jobs is unusual on its own, however, the problem appears when both the theme and engine keep asking for the same information while the player is scrolling.

FunZone gave us a useful place to improve that boundary.

Its newer wheel work uses a hybrid approach. Lua continues to control the presentation, while the engine provides clearer information about the visible wheel items and their grades.

This reduces the amount of song-wheel state that the theme has to rebuild for itself.

It also exposed several problems that became more obvious during fast scrolling.

Grade updates could trigger recursive command loops. Delayed banner and CDTitle loads could finish after the player had already moved to another song, causing media from the previous selection to appear in the wrong place.

Those loads now check that the selected item is still the one that requested them before applying the result.

The preview notefield also needed to retain its validated layout while the wheel changed selection. That path has been tightened so refreshing song information does not disturb the preview presentation.

Cold image caches created another source of stalls.

When a banner or movie thumbnail had not yet been cached, generating it during rapid scrolling could briefly hold up the wheel. We have adjusted those paths so cached media is preferred and expensive work is less likely to happen directly in the middle of movement.

We added a new Lua song and group wheels, but parts of the standard engine wheel were still active underneath. That created a hybrid system without clearly defining which side owned each part of the behaviour.

We have started making that separation deliberate.

Missing theme objects are now guarded more carefully, unchanged song selections do not repeatedly call GAMESTATE:SetCurrentSong, and repeated file checks are being reduced while the wheel is moving.

We have also added lightweight measurements around the wheel so we can see which operations are causing delays rather than trying to judge everything from scrolling feel alone.

The aim is not to slow the wheel down to hide the work.

FunZone and Infinitesimal should remain responsive and keep their own presentation. The engine should provide the song, item and grade information they need without forcing Lua to repeatedly reconstruct it.

For players, this should make Select Music less prone to stalls, incorrect delayed media and sticky first-time scrolling through large libraries.

For theme authors, it gives us a cleaner boundary between the information supplied by OutFox and the way a theme chooses to present it.