Skip to content

fix(worldfinder): anchor Pause/Warp on the correct CMP in VR builds - #18

Merged
TrackAndTruckDevs merged 1 commit into
TrackAndTruckDevs:mainfrom
aefly:fix/world-pause-anchor-oculus
Oct 6, 2026
Merged

TrackAndTruckDevs merged 1 commit into
TrackAndTruckDevs:mainfrom
aefly:fix/world-pause-anchor-oculus

Conversation

@aefly

@aefly aefly commented Oct 5, 2026

Copy link
Copy Markdown
Collaborator

Problem

On the Oculus/VR builds of ETS2 and ATS, WorldDataFinder fails:

[ERROR] WorldDataFinder: 1. [RT] Global Warp signature → NOT FOUND [x]
[ERROR] WorldDataFinder: ── Finished WorldDataFinder search: [x]FAILED (75/76) ──

Because GlobalWarpOffset is part of the readiness gate, this takes all of GameWorldService offline for those players (time, pause, halt, map scale, city data, coordinates…), not just the warp control. Reported across 1.61.1.1001s, 1.61.3.1001s, 1.60.1.1007s, up to the latest framework release.

Root cause

PAUSE_SIG (CMP byte [r64+off32], r8 ; JE) is not unique inside CoreEngine_UpdateLoop. The VR rebuild adds an earlier bool check of the same shape before the real pause test:

; eurotrucks2.exe (1.61.1.1001, Oculus)
1404267a1  41 38 B4 24 C8 0B 00 00   CMP byte ptr [R12 + 0xbc8], SIL   ; false match
1404267a9  74 08                     JZ  0x1404267b3
...
1404268a0  41 38 94 24 B1 0A 00 00   CMP byte ptr [R12 + 0xab1], DL    ; real pause
1404268a8  74 10                     JZ  0x1404268ba
1404268ba  F3 41 0F 10 94 24 AC ...  MOVSS XMM2, [R12 + 0x8ac]         ; Global Warp

Taking the first PAUSE_SIG match anchors on 0xbc8, so:

  • PauseStatusOffset resolves to a silently wrong value (0xbc8, non-zero → no error logged), and
  • the Global Warp MOVSS sits ~280 bytes away, outside the 32-byte window → NOT FOUND.
    Standard builds don't have this extra VR check before the pause test, so their first match is the real one, which is why they were unaffected.

Fix

Pick the PAUSE_SIG match that the Global Warp MOVSS actually follows (warp within 32 bytes), with a fallback to the first match. This corrects both the Pause anchor and the Warp read in one place.

Verification

Validated against the real binaries (byte-level) and in-game:

Build Before After
ETS2 Oculus 1.61.1.1001s FAILED (75/76), Pause off 0xbc8 READY (77/77), Pause 0xab1, Warp 0x8ac
ATS standard (public) already working READY (77/77) — no regression

The new logic is identical to the old one whenever the first PAUSE_SIG match already has a warp nearby (every previously-working build), so it cannot regress them.

@TrackAndTruckDevs
TrackAndTruckDevs merged commit 1ca67f0 into TrackAndTruckDevs:main Oct 6, 2026
1 check passed
@TrackAndTruckDevs

Copy link
Copy Markdown
Owner

merging

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.

2 participants