Skip to content

Add per-game UltraCam configuration for BOTW - #54

Merged
Portablelle merged 2 commits into
mainfrom
codex/ultracam-per-game
Oct 19, 2026
Merged

Portablelle merged 2 commits into
mainfrom
codex/ultracam-per-game

Conversation

@Portablelle

@Portablelle Portablelle commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Botty+ Config now offers per-game UltraCam 1.0.1 controls for Breath of the Wild 1.6.0: FPS target, internal resolution, quality, draw distance, FOV, camera and benchmark settings. The optional mod is disabled by default, bundled with its CC-BY-NC attribution and license, and installed into a managed game-specific folder.

Activation verifies payload hashes and the selected update's Control/NACP version and Program patch against the actual base ROM. Disabled-update overrides fail closed. Saving preserves other mods and global video preferences, refuses edited or unmanaged files, and restores the previous state if activation fails. Botty+ 1.12.2 and manager 1.10.4 include the complete runtime inventory and matching corresponding-source parts.

Validation: native UI, manager and emulator built on the dedicated server; adapter integrity/rollback/dependency regressions; actual renderer controls and persistence; native transaction, update, idle-gate and installation lifecycle tests; pinned patch applied to a clean upstream checkout; release package verification. Hardware test on PS5: BOTW 1.6.0 launches with UltraCam active and Link is controllable. With UltraCam at 1152p / target 60, the observed gameplay average was about 43 FPS with engine render scale 2×, then 47.02 FPS over 60.13 seconds at 1× (five-second windows: 39.79–53.23 FPS). These were manual gameplay samples, not a deterministic benchmark; 60 FPS is not sustained. The user chose to keep 1152p / 1×. Global video settings remain separate.

Portal companion: Portablelle/Portal-Plus#30 recognizes the previous manager during staging; merge it before publishing this release through Portal.

The manager also explicitly sets its updater identity to 1.10.4; the previous default of 1.7.0 caused combined-update checks to reject the running executable. Native updater fixtures use the generated current release version so service-only updates remain covered when the app version changes; older-native rejection is asserted separately.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-19T15:03:07.829349Z 05c6e21 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Claude review: Code review: no findings

Reviewed commits 05c6e21..aa7a188 (full PR reviewed previously at 05c6e21) · checks: Code review complete; host checks pending · host validation source: pending (isolated host-check job for aa7a188)

No findings.

Files reviewed

Incremental (05c6e21..aa7a188):

  • homebrew/botty-native/tests/native_update_test.cpp: the new withCurrentNativeVersion helper replaces every CURRENT_NATIVE_VERSION marker. It is applied to parse inputs, the full parseCatalog fixture and wire() (so confirmation bodies are substituted too). I checked these against nativeUpdateAvailable / nativeUpdateLabel in src/catalog.cpp and nativeVersion (01.012.002) in src/version.hpp. Because of the availableVersion >= nativeVersion gate, the old 01.012.001 fixtures would have stopped exercising the available path after the version bump. The new older assertion changes only availableVersion from a copy (wide) that was just asserted available, so it really tests the older-native rejection.
  • Textual package records: packages/botty-release.json, packages/botty-native/source/manifest.json. Only the source archive, part013 and the source manifest hashes and sizes changed, which fits a test-only source edit. eboot.bin and the other runtime hashes are unchanged.
  • Binary payloads (botty-native-source.tar.gz, native-source.part013): not printed, per policy. The isolated package/hash/source checks validate them.

Previously reviewed at 05c6e21 (unchanged since): the full UltraCam patch, adapter tests, assembly and runtime inventory, manager server.cpp, version records, scripts/package-native.py, docs/EMULATION.md and the textual package records.


Bottom line: Wait for the combined CI verdict

To fix before merge: nothing.

Notes (no action needed):

  • ⚪ No host check builds or runs emulation/tests/ultracam_check.cpp or ultracam_ui.py (config_check.cpp isn't run either), and host checks don't compile the patched engine. So CI doesn't cover the version gate, rollback or preservation logic in ultracam.h.
  • ⚪ For BOTW, EdenServices::game_settings opens the ROM, builds the patched Program NCA and writes a log line on every call. That happens on the UI thread for each library selection and after every settings save. eden_scan_addons also prints a BOTW-only EDEN_BOTW_UPDATE debug line on every scan.

Not verified: PS5 runtime acceptance (the PR reports a manual BOTW 1.6.0 hardware run, which host review can't confirm). Also not verified: compilation of the patched engine sources and whether the shipped emulation/eboot.bin matches them. The isolated package checks cover that.

@github-actions

Copy link
Copy Markdown
Contributor

✅ Ready to merge. Claude's review of aa7a188 found nothing to fix.

@Portablelle
Portablelle merged commit 22ae188 into main Oct 19, 2026
10 checks passed
Portablelle added a commit that referenced this pull request Oct 21, 2026
* Refresh Explore on launch and update expired rankings automatically (#50)

* Refresh Explore on launch and revalidate expired rankings

* Refresh packaged sources for Explore changes

---------

Co-authored-by: Jordan Lahmi <[email protected]>

* Unify game preparation, server FPKG conversion and Activity (#49)

* Unify game preparation and Activity across PS5 and server

* Limit FPKG magnet hints to decoded display names

* Ignore non-owning attempts when removing adopted import tracking

---------

Co-authored-by: Portablelle <[email protected]>

* Keep review and host checks within the 4 GiB CI memory budget (#52)

Co-authored-by: Portablelle <[email protected]>

* Add standalone Switch emulation and verified game imports (#51)

* Add standalone Switch emulation, verified imports and full configuration

* Update package contract tests for split corresponding sources

* Run Switch regressions in CI and use stable names for native action tests

---------

Co-authored-by: Portablelle <[email protected]>

* Fix Switch patch and DLC verification and bundled imports (#53)

Co-authored-by: Portablelle <[email protected]>

* Add per-game UltraCam configuration for BOTW (#54)

* Add per-game UltraCam configuration for BOTW

* Keep native updater fixtures aligned with the current release

---------

Co-authored-by: Portablelle <[email protected]>

* Release Botty+ 2.0.0 with standalone Switch emulation

* Document the global Switch Config tab

* Clarify Switch controls and PS5 preparation limits

* Show game names, versions, DLC, mods and artwork in Emulation (#57)

* Show Switch library names, versions, DLC, mods and artwork

* Refresh emulation library release packages and corresponding sources

* Synchronize display caches and aggregate title relationships once

* Decode Switch artwork outside the service-wide lock

---------

Co-authored-by: Portablelle <[email protected]>

* Fix ZIP worker stack usage and run source archive tests in CI

---------

Co-authored-by: Jordan Lahmi <[email protected]>
Co-authored-by: Portablelle <[email protected]>
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