Skip to content

Add experimental BOTW 1.9.0 FPS and graphics profile - #331

Open
mkaflowski wants to merge 4 commits into
MaxLastBreath:mainfrom
mkaflowski:feat/botw-1.9-configurable-fps
Open

mkaflowski wants to merge 4 commits into
MaxLastBreath:mainfrom
mkaflowski:feat/botw-1.9-configurable-fps

Conversation

@mkaflowski

@mkaflowski mkaflowski commented Sep 26, 2026 •

Copy link
Copy Markdown

Summary

Add one experimental BOTW 1.9.0 profile alongside the existing 1.6.0 UltraCam profile:

  • A configurable 20-120 FPS limiter (default 60 FPS) with measured frame-time correction, world-camera FOV and Render Distance, plus Resolution Scale, as in the original application.
  • Original Render Distance presets: VERY LOW (1000), LOW (5000), MEDIUM (12500), DEFAULT (25000), experimental (35000).

Versions are selected explicitly through the existing Select Game control. Each variant has its own saved selection/options while retaining the actual game title ID for emulator paths.

The earlier redundant fixed-60 profile was consolidated into the configurable profile. Its saved selection ID is accepted as an alias; the old numeric far clip setting migrates to the nearest Render Distance preset without overwriting an existing preset choice. CLI export also uses the configurable profile by default.

The additional emulator AA/AF controls from the initial implementation were removed. The 1.9 UI now contains only FPS, FOV, Render Distance and Resolution Scale; saved obsolete AA/AF values are ignored.

Implementation

  • Generate Build-ID-scoped ExeFS patches: IPSwitch for Eden/Legacy, IPS32 for Ryujinx.
  • Use a small, reproducible ARM64 payload in verified alignment padding. The configurable profile updates native VFR timing and includes a companion SDK presentation-interval patch, needed for non-vblank-divisor limits such as 45 FPS.
  • Hook the active world camera's FOV/far-plane stores. FOV scaling retains relative zoom; default camera settings omit the hooks.
  • Keep emulator graphics changes in Apply; Extract exports the mod and instructions without changing emulator configuration.
  • Manage conflicts between the BOTW profiles and fix numeric/string title-ID comparison in the existing Legacy disabled-add-on handling.
  • Include assembly source, checked-in generated payload, a standalone exporter, tests and detailed port/verification documentation in docs/BOTW-1.9.md.

Runtime patch generation adds no third-party dependencies. Local executable verification tools use lz4/unicorn; payload rebuilding uses keystone-engine. Game dumps and keys are not included.

Validation

  • python -m unittest discover -s tests -v — 21 tests passed.
  • python tools/build_botw_native_payload.py --check — checked-in payload matches the assembly source.
  • python tools/verify_botw_fps.py --main <local-exefs-main> — original instructions, format equivalence, 24 ARM64 interval cases and 3 native VFR cases.
  • python tools/verify_botw_native.py --main <local-exefs-main> — both executable hashes, SDK interval regression, timing at 20/30/40/45/60/90/120 FPS, relocation, stalls/category multipliers, register/stack preservation and camera writes.
  • Local GUI smoke tests with isolated emulator configurations: 1.6/1.9 profile switching, retired-selection and numeric-setting migration, settings persistence, every Render Distance preset, two-module export, resolution-scale mapping, preserved emulator AA/AF and mod conflict handling.
  • CLI export without FPS arguments produces the configurable 60 FPS main/SDK pair.
  • Manual testing reported in Eden nightly 5f142c7926: the initial interval patch at 60 FPS; configurable profile at 45 FPS with normal game speed, then visibly wider FOV 65 with continued correct operation.

The tested Eden nightly logged IPS32 application but left the original instructions in guest memory. IPSwitch applied successfully. The initial configurable trial also exposed an SDK minimum-vsync clamp; the companion SDK patch resolved the remaining 30 FPS presentation limit.

Scope / remaining testing

This is intentionally marked experimental and targets the documented Switch 1.9.0 main/SDK Build IDs. Full gameplay validation across physics, menus, cutscenes, other FPS targets, Android/NCE, Ryujinx and console hardware is still needed. Isolated ARM64 tests are not a substitute for those runtime tests.

The camera setting controls far clipping, not object streaming/LOD distance. Resolution Scale is an emulator setting. Native framebuffer-resolution changes, native FXAA/DR disabling, shadows and the remaining UltraCam features are outside this port.

@mkaflowski mkaflowski changed the title Add experimental BOTW 1.9.0 FPS and graphics profiles Add experimental BOTW 1.9.0 FPS and graphics profile Sep 26, 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