Skip to content

Add portable core.logic_speed dispatch and cross-engine contracts - #145

Closed
Roxas2712 wants to merge 21 commits into
UNDERdecoded:mainfrom
Roxas2712:codex/portable-logic-speed
Closed

Roxas2712 wants to merge 21 commits into
UNDERdecoded:mainfrom
Roxas2712:codex/portable-logic-speed

Conversation

@Roxas2712

@Roxas2712 Roxas2712 commented Oct 23, 2026 •

Copy link
Copy Markdown

Gen2Recomped accepted core.logic_speed registrations without a native producer, so portable speed-control mods could load successfully while having no effect. Dispatch the same (next, game) contract as Gen1Recomp through native API 1/2, unified API 2 and API 3.

  • Resolve live native options through next() or next(otherGame), then clamp the first hook result to the existing Gen2 speed ladder. Preserve the global saved speed and explicit launch overrides.
  • Check link and stacked isFixedSpeed/isMinigame locks before overrides or callbacks. If a lock begins during an accelerated step, cancel the remaining frame budget without triggering hitch suppression.
  • Advertise the real producer in capability/unified catalogs. Add a portable example, contract documentation and a pinned-reference CI workflow.

Stack / review scope

Depends on #144 and its existing prerequisites. This branch adds one feature commit on top of 34d5c10ff5cf5c8c65170a339a0ba9504972bf40; the main-target diff includes those unmerged prerequisites. Review only this change.

Validation

  • 1,735 focused checks: shared API-3 contract (62), all 15 Gen2 host versions across four API/callback modes (1,266), and real Game:load callback / Game:update / FixedStep clock checks (407). Updated capability suite: 346/346.
  • 64 native cross-engine runs, 904 paired observations, on both the feature branch and combined integration. The unchanged example runs on Red, Gold, FireRed and Emerald through native API 1/2, Gen2 unified API 2, and shared API 3.
  • Clean pinned Gen1 reference: 79ea62f45fb2ea8f65d081a109431e4eb1bbdb36. Tests preserve native ladder differences (including Gen1's 3X rung), Gen1 GBA boot precedence, explicit next-target routing, invalid results, wrapper/native errors, cleanup and no-mod fallback.
  • Clock tests cover 1–200X, mid-frame link/fixed-speed entry, unlock, and real-time audio/camera/presentation.
ROM-free quick suite Engine Mod SDK B30 profile
Parent #144 83/93 3/3 pass
This feature 86/96 3/3 pass
Combined prior PRs + this feature 140/140 3/3 pass

The feature has the same ten failing suites and 17 failing assertions as its parent, with identical failure output; no new regression. Those separately proposed baseline fixes are included in the combined integration at d01a9ea2ba59146531cf007a39e9cee6a9c74d9f. The integration needed only a documentation placement resolution.

Reproduction commands and fixture boundaries are in the contract document. StyLua, actionlint and diff whitespace checks pass. Validation is ROM-free/headless; cartridge playthroughs, GPU rendering and live network sessions are outside these checks.

Hosted CI

GitHub currently reports action_required for all 6 pull-request workflows; jobs await maintainer approval for the fork contribution. These are not hosted passes. New logic-speed contract run. Local results above were completed on the published feature head and the combined integration.

Integration follow-up: the native clock fixture now also supplies the map-metadata and tileset-publication startup dependencies from #205/#208. Its real FixedStep/clock assertions remain in place; all 407 checks pass independently on this branch.

@Roxas2712 Roxas2712 closed this Nov 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant