Skip to content

Add adaptive widescreen custom renderer spike - #35

Draft
mstan wants to merge 13 commits into
mainfrom
codex/mmx-custom-renderer-spike
Draft

mstan wants to merge 13 commits into
mainfrom
codex/mmx-custom-renderer-spike

Conversation

@mstan

@mstan mstan commented Sep 14, 2026

Copy link
Copy Markdown
Owner

Mega Man X's existing widescreen renderer depends on widening the SNES PPU and repairing its rolling tilemaps. This spike adds a custom compositor that captures the native raster and submitted sprites, then renders the wider stage from retained maps and game assets.

The widescreen mod offers Adaptive, 16:9, 21:9, and 32:9, with edge or native HUD anchoring. Adaptive supports up to 1024 logical pixels. Expanded sprite capacity is a separate experimental option, off by default. Legacy widescreen remains selectable while the spike is evaluated.

Gameplay hooks extend ordinary enemy and collectible visibility while retaining native timing for encounter controllers and the shared boss family. Fixes cover resource palettes, boss doors and activation, Ride Armor, streaker entrances, death/respawn width, menu pillarboxing, and dialogue bounds. Storm Eagle's distant panorama and platforms are prefilled; Launch Octopus's water tint extends across the view, and buried submarine presentation respects the original emergence while preserving surrounding terrain.

The latest playtest fixes make pickups visible on fresh state loads, preserve Armadillo's damage flash, keep the grinder visible at a distance, and show the lower shaft before the native coordinate relocation. The weapons pause menu now has clean pillarboxing. Launch's boat renders its complete body, the next buried submarine's nose stays hidden, and the underwater background remains intact while walking across the previously malformed area.

Validation

  • Windows Release build, all three CTests, strict renderer C warnings, and generated-hook checks pass.
  • Fresh-process captures cover every latest save report, with movement samples through the shaft, grinder departure, boss hit effect, and underwater area. Each replays at 4:3, 16:9, 21:9, 32:9, and maximum Adaptive; raw native pixel comparisons report zero differences and live output matches replay.
  • Regression captures cover the earlier Storm panorama, Spark lights and Heart Tank, Spark's ice coating, and the submarine's terrain during waiting and emergence.
  • Targeted tests cover cold pickup CHR and live palette ownership, collectible allocation policy, boss colors, pause isolation, signed boat scroll, body bounds, shaft continuation, water blending, and earlier spawn/palette cases.
  • Source saves are preserved. ROMs, generated banks, saves, and local capture artifacts are excluded.

See the playtest burndown and reproduction notes for detailed evidence and limits. Native pixel agreement does not qualify unseen margin art or complete encounter progression. Owner acceptance of the latest batch and full-game coverage remain pending.

Draft integration blockers

This branch is tested against its existing pins (snesrecomp 8d12911 and recomp-ui a7a4f30). There are no framework source changes in this PR; unrelated runtime/audio/benchmark work is excluded.

Main moved to the shared desktop host in 91be5ad. A read-only merge check found conflicts in CMakeLists.txt, main.c, mmx_rtl.c, and the deleted local opengl.c. Integrating this draft requires adapting the custom capture, native PPU setup, 1024-pixel surface capacity, and aspect handling to that host.

Both branches independently used game save chunk version 2 for different layouts. Integration must distinguish the spike's 464-byte streaker-migration chunk from main's appended execution/CHR state and verify both using copied saves. This draft is for review and continued playtesting; it is not ready to merge or remove the legacy renderer.

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