Skip to content

Show game names, versions, DLC, mods and artwork in Emulation - #57

Merged
Portablelle merged 4 commits into
codex/release-2.0.0from
codex/emulation-library-details
Oct 21, 2026
Merged

Portablelle merged 4 commits into
codex/release-2.0.0from
codex/emulation-library-details

Conversation

@Portablelle

Copy link
Copy Markdown
Owner

The Emulation library now identifies Switch games from their Control/NACP metadata and shows cover art, base/update versions, associated DLC and named mod switches. The selected game panel includes its title ID and filename, with direct launch and existing configuration actions.

Display metadata uses bounded reads and synchronized, identity-based caches. Title relationships are aggregated once per inventory. Import verification remains separate, unknown metadata stays visible, and update/DLC presence and saved mod switches are distinguished from the engine's compatibility decisions. Artwork supports existing emulator covers and embedded icons, with input bounds and truncated-TGA regression coverage.

Includes corresponding manager/native packages and source archives.

Validation on the dedicated Linux build server:

  • Emulation model, concurrent state/artwork calls, metadata/artwork/cache regressions and Switch import pipeline.
  • Native catalog/model tests and PS5 native build; manager PS5 build from the feature validation.
  • python3 scripts/botty-packages.py --check.
  • Local Cubic review before push.

Earlier console acceptance confirmed Mario Kart 8 Deluxe, base 1.0.0, update 3.0.5, one associated DLC and artwork through the installed manager. UI layout was inspected in a rendered preview.

This PR targets codex/release-2.0.0: the remote main currently predates the Switch/release commits, while this branch provides the required baseline and keeps this diff scoped to the library improvements.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 21, 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-21T00:41:12.027443Z 93840be 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.

@Portablelle
Portablelle merged commit af2c669 into codex/release-2.0.0 Oct 21, 2026
3 of 10 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

Claude review: ✅ Code review: no findings

Reviewed full PR (c75a5d3...93840be, 4 commits against codex/release-2.0.0) · checks: Code review complete; host checks pending · host validation source: pending isolated Claude host checks run on the exact head

No findings.

Files reviewed

Scope: the PR's own diff against its base codex/release-2.0.0 (c75a5d3). The workflow's CLAUDE_REVIEW_BASE (13de775, main) also pulls in the release branch's content. That content is outside this PR and was not reviewed here.

Source, tests and docs (read in full at the PR head, including the relevant callers):

  • homebrew/botty/src/emulation.hpp: inventory/enrich/project split, display cache, mod discovery, artwork(). Callers checked: emulationState, SwitchPreparationCoordinator::start, launchPath, /api/artwork.
  • homebrew/botty/src/switch-library.hpp: Control NCA, IVFC/RomFS and AES-CTR offsets, checked against the NCA/RomFS layouts.
  • homebrew/botty/src/switch-metadata.hpp: switchNcaHeader, the NCA2 XTS tweak, and the display mode versus the verified import contract.
  • homebrew/botty/src/switch-artwork.cpp: TGA pre-validation, stb bounds and scaling.
  • homebrew/botty/src/server.cpp: m: artwork route outside the service lock; lock ordering with displayLock_.
  • homebrew/botty/Makefile, homebrew/botty/tests/emulation-test.cpp, emulation_library.py, switch_fixtures.py
  • homebrew/botty-native/src/catalog.cpp, catalog.hpp, main.cpp (Emulation list/detail panel, cover requests), tests/model_test.cpp. Also checked: the Artwork worker's 404 handling in probe.cpp and the wrap() newline handling.
  • docs/EMULATION.md, THIRD_PARTY.md, homebrew/botty/README.md, packages/botty/NOTICE.md
  • homebrew/botty/vendor/stb_image.h: only the header, version (v2.30) and license block were checked; the 8k-line upstream body was not read line by line.

Generated artifacts (checked metadata and hash consistency only; binaries are covered by the isolated package checks):

  • packages/botty-release.json, packages/botty/manifest.json, packages/botty-native/manifest.json, packages/botty-native/source/manifest.json
  • packages/botty/botty-manager.elf, botty-source.tar.gz, packages/botty-native/eboot.bin, botty-native-source.tar.gz, source/native-source.part001-013, emulation/eboot.bin, emulation/sce_sys/pic0.dds, pic1.dds, emulation/ui/art/*.tga. These emulation and source-part blobs were missing from the base tree even though its manifests listed them; this PR adds them.

Bottom line: ✅ Wait for the combined CI verdict

Code review complete; host checks pending. This marker reflects the code review only, not merge readiness.

To fix before merge: nothing.

Notes (no action needed):

  • ⚪ Emulation::artwork() holds displayLock_ while it reads, decrypts and decodes a cover. A concurrent /api/state already holds the service-wide lock and waits for displayLock_, so the service lock is still blocked for one bounded icon read and decode (~1 MiB). This is not a deadlock: no path takes the two locks in the opposite order.
  • ⚪ Update and DLC rows no longer show the Requires update v… / Firmware … required labels the previous state() added from requiredUpdateLabel / requiredFirmwareLabel. Only the missing-base and missing-update status remains. Confirm this is intended.
  • ⚪ The native detail panel draws modSummary with wrap(..., 3 lines). With more than 3 mods, the server's 4th line (+ N more in Game configuration) is never shown. The MODS tile still shows the full on/total count.

Not verified: PS5 runtime acceptance of this exact build (manager ELF and native eboot). Two things have no host fixture: the encrypted (AES-CTR, key-area) Control RomFS path that retail games use, and Eden's cover filename hashing (covers/<fnv1a32>.tga, from the upstream engine). The only evidence for either is the earlier console acceptance described in the PR. Source-archive correspondence of the shipped binaries depends on the isolated package checks.

@github-actions

Copy link
Copy Markdown
Contributor

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

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