OrreLink v1.5.11
Pre-releaseSuperseded by v1.5.12 — fixes the half-speed battles in mixed-architecture rooms, gives imported teams max happiness, and pins the in-game stage row to the chosen location. Use that one.
Pre-release for testing. Supersedes v1.5.10. Not netplay-compatible with earlier versions.
Mixed-architecture rooms keep their recompilers — XD's clock is served deterministically instead
v1.5.10 fixed the Mac-vs-Windows desync by putting both machines on the Cached Interpreter, which turned out to be far too slow to play. This build removes the cause instead of the recompilers.
XD gets its time from exactly two functions, OSGetTick and OSGetTime. The two recompilers split code into blocks differently, and Dolphin's clock only advances at block ends, so those two functions returned values a few dozen cycles apart on the two machines — and XD builds its GBA link key from one of them (the first differing byte in the v1.5.9 logs, off by exactly the skew) and seeds its battle RNG from the other. In a room that mixes Apple Silicon or Android with Windows or Linux, OrreLink now replaces those two functions with a clock that is a pure function of the game's own frame counter plus a per-session value the host picks and syncs. Every time-derived value — link key, RNG seed, frame-pacing deltas — is then identical on both machines while each runs its own recompiler at full speed. Call sites that need real time (alarms, audio, save timestamps, reset) still get it; the ones that feed game state get the frame-exact value; the RNG seed and link key are host-synced constants.
- Chat at Start: "Mixed CPU architectures (arm64 + x86_64): recompilers stay on; OrreLink serves XD's clock this battle …". The main menu is skipped in these rooms (the hook needs the game loaded directly).
- Same-architecture rooms (Mac ↔ Thor, Windows ↔ Linux) and solo play are untouched: the clock is never installed there, and the boot line proves it (
xd_clock=off). ForceCommonCoreOnMixedArchis now an opt-in "safest" mode (default off) that reproduces v1.5.10's Cached Interpreter behaviour, for A/B testing.- Also pinned in mixed rooms: accurate NaN handling (x86 and ARM default NaNs have opposite signs).
- The netplay time-base desync detector tolerates the few-tick recompiler skew when the clock is on, so it only fires on a real divergence.
Logs
- Boot line gains
xd_clock=on/off xd_clock_cfg= xd_salt= xd_seed= xd_period=. xdlines gainlf=(XD's frame counter) andlt=(the logical time base) so two logs line up frame-for-frame;xdclklines on the link events record the clock state.- A 30–60 second boot-plus-link capture on both machines is enough to prove the fix: the
cpulines must agree on everything but core/arch, the firstxdline'sseed=/lf=/lt=must match, and the link-key JoyBus write (15 dd …) must be byte-identical.
| Platform | File |
|---|---|
| Android (AYN Thor etc.) | OrreLink-v1.5.11.apk |
| macOS (Apple Silicon) | OrreLink-v1.5.11-macOS-arm64.zip |
| Windows x64 | OrreLink-v1.5.11-win64.zip |
| Linux x86_64 | OrreLink-v1.5.11-linux-x86_64.AppImage |