Skip to content

Port: camera, save and config fixes from review; get every CI job passing - #23

Merged
Adubbz merged 23 commits into
TheMoonPeople:masterfrom
carrdylan52:native-opening-to-first-floor
Oct 13, 2026
Merged

Adubbz merged 23 commits into
TheMoonPeople:masterfrom
carrdylan52:native-opening-to-first-floor

Conversation

@carrdylan52

@carrdylan52 carrdylan52 commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Follow-up to the port work already on master: fixes from further review of the mouse, camera, saves and settings features, plus fixes that get every hosted CI job building and passing again on current master. Rebased onto 50b24b7.

Depends on TheMoonPeople/Kazarov#2; tools/kazarov points at that PR's head and needs updating to the merged upstream commit afterwards.

  • Camera: a negative camera step cuts interpolation by default again, except the recurring town eye/photo update and the per-tick forced-follow camera on s07/s37/s38 (those stay smooth); dungeon first-person entry and exit cut on the tick the camera moves; town first person keeps mouse look while falling and landing and carries a fall after the walk keys are released into the restored follow camera. The town view reset keeps the retail routine through a generated link-name bridge (scripts/port/unit_copy.py, documented and tested).
  • Fixed-camera mouse look keeps outline metadata when it copies the frame (previously an out-of-bounds read with outlined models), and outlines use the full visible extent.
  • Config: reads are checked end to end; a read error never backs up partial text or replaces the original config.json.
  • Saves: old memory-card saves are copied byte for byte into a new flat save (or matched to an identical one), then the card entry is moved whole into imported/. No markers, no deletes, no overwrites; comparisons that cannot read a file defer instead of copying again. While the move keeps failing, one identical duplicate row can appear.
  • Input and menus: the fishing-rod points page changes points with the wheel and plays the hover sound only on a changed stat; item-message loading reuses the retail tag dispatch table; the gold hand cursor scales with high-resolution texture packs; zoom counts overlapping collision polygons once.
  • CI: slow GPU tests honour the configured timeout; long save tests are split per configuration; a few slow GPU tests are trimmed or deduplicated; the data-bridge regression is built on every platform; screenshot tests get complete data fixtures (the production first-run check is unchanged); the Linux build no longer collides with libc random() (port build copy only, ps2/ untouched); a datapack path test compares file identity rather than spelling; the build scripts load kazarov_elf from its new location; macOS builds via the Kazarov change above.

Validation on this tree: Windows CTest with the default 5 s timeout and -LE gpu (as hosted CI) passes; Linux CTest passes on a native host with the hosted 60 s timeout; the compiler-job Python suite (222 tests) passes. Dungeon frame 2,300, town frame 900 and prologue frame 13,000 captures, plus eight town display phases, are byte-identical to an upstream 50b24b7 build on freshly published data. ps2/ is unchanged.

Known follow-ups: fishing catch/miss and the Ridepod intro cut camera interpolation every tick (static cameras); one extra cut can land on the tick after some camera-owner changes. The new default save/data root no longer finds saves and config.json under the previous save/ folder; that is left as a design decision rather than changed here.

macOS: the job now builds, links and runs tests again. Test fixes: a death-test pattern that macOS regex could not match, and tests that built retail objects on the stack without the fields the game initialises. The Kazarov pin also keeps the host library's floating point unfused, which fixed an arm64-only off-by-one in the logical-to-pixel mapping. 14 GPU rendering tests fail only on the hosted macOS runner, whose GPU is the Apple Paravirtual device under MoltenVK: the same test binary passes all 14 on Apple Silicon hardware (MacBook Air M3, macOS 27.0.1, MoltenVK 1.4.2). The macOS job reports those exact 14 in a separate non-blocking step (one workflow-only commit, easy to revert); Linux CI still gates them.

Retain mouse look through town falls and landing while cutting authored camera steps, resets and dungeon eye transitions at their owning tick. Preserve retail reset bodies through generated bridges with source mapping, deduplicate zoom geometry and remove unreachable zoom state.

Copy fixed-look recording metadata and retain full-visible outline presentation. Update the shared runtime pin together with composite API removal and GPU suite classification. Cover camera ownership, fixed-look pixels, zoom limits and retail bridge extraction.
Reject incomplete config reads before replacing a file or publishing a backup. Publish legacy slot copies exclusively, retain recoverable sources, and archive entries with no-replace renames rather than markers or rollback deletion.

Defer automatic copies when source comparisons are unavailable and retain source-backed row replacement. Cover archive collisions, interrupted recovery, write interleaving and comparison faults, and document recovery and preserved retail bridges.
Route item-name and message dispatch through one native implementation shared by retail callers. Bound rod-point wheel adjustment and use the retail hover sound, with regressions for dispatch parity and input limits.
Apply the greater of 30 seconds and CT_TEST_TIMEOUT to slow GPU cases, retaining the hosted-CI labels and configured CPU timeout. Split multi-configuration save import regressions into separately discovered parameterized cases so each retains an independent timeout and failure report.
Include dc2data_bridge_test whenever the Windows test target set is requested so every registered CPU test has an executable. Keep its existing stack size and CMake runtime deployment unchanged.
Generate data and port-data manifests plus a publisher marker using the data version from the pinned shared source. Keep each fixture isolated and retain canonical/display image comparisons without relaxing the production first-run data check.
Scale the hand atlas coordinates by the registered image scale while retaining logical pointer geometry. Host pointer overlays record outside the game frame, so use the shared texture scale directly rather than the frame-gated submission wrapper.

Load a real double-resolution PNG replacement and verify physical texel coordinates and the unchanged fingertip position. Retain canonical image and existing pointer ownership regressions.
Match the PNG renderer by encoding opaque synthetic texture pixels with host alpha 255. Preserve lens placement, backdrop colours, slide poses, resource reuse, material wrap and every sampling assertion previously tested through PS2 alpha conversion.
Reuse one renderer and texture across every options/help slide pose and assertion. Render frame-key metadata checks at the same aspect with a smaller target, and replace the duplicate fourth-influence shader vector with a citation to the retained shared numeric regression.
Index the current PNG catalog and register the archive source before loading real glyph members. Retain all rendered ownership and endpoint comparisons, and skip incompatible extractions explicitly.

Make PC settings replay availability follow the versioned publisher artifacts and pinned data version instead of the retired manifest format.
@carrdylan52
carrdylan52 force-pushed the native-opening-to-first-floor branch from 151e8fe to c954139 Compare October 13, 2026 16:11
@carrdylan52 carrdylan52 changed the title Port: opening, Palm Brinks and the first Underground Channel floor, with PC mouse and camera controls Port: camera, save and config fixes from review; get every CI job passing Oct 13, 2026
@carrdylan52
carrdylan52 force-pushed the native-opening-to-first-floor branch from d80e824 to 3e367bd Compare October 13, 2026 17:37
…ut failing the job

Fourteen rendering tests fail only on the hosted macOS runner, whose GPU is the
Apple Paravirtual device under MoltenVK. The same test binary passes all of
them on Apple Silicon hardware (M3, macOS 27.0.1, MoltenVK 1.4.2), and Linux CI
still gates them. Run them in a separate continue-on-error step on macOS so
their results stay visible.
@Adubbz
Adubbz merged commit f44a756 into TheMoonPeople:master Oct 13, 2026
6 checks passed
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