Repository navigation
Conversation
…a Switch 2 Edition's program 1 pack: the NSP script builds from the Switch 2 program by default
A dumper can write a game's update and DLC with no base/ folder (an update's files are whole), each version split into program/<n>/{exefs,romfs}, and a DLC under <n>/base/ or <n>/updates/<version>/, each optionally under program/0/. pack_dump.py read none of these, and for a dump of Xenoblade Chronicles 2 Nintendo Switch 2 Edition (update 1114112) the scan stopped with "program ID 0400E95004038001 is not a base title ID": the update's program 1 is the Switch 2 game, which names a program of its own.
pack_dump.py now finds the base game optional beside an update, the program folders, the DLC layouts (the newest DLC update wins), and takes the title ID from program 0's NPDM, else from the DLC, else from --title-id. A Switch 2 Edition's update packs program 1 by default (--program N picks another); each program is packed with its own RomFS, as Horizon mounts it. build_ipa_from_nsp.py passes --program for a dump folder and prefers a profile for the packed program's own ID.
Checked: test_nsp_dump.py (updates only, a DLC update winning, the Switch 2 Edition program ID, program/ folders, packing program 0 of several, refusals) and test_docs.py; the Xenoblade Chronicles 2 dump packs program 1 (13.1 GB) and its seven DLC.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Open
2 tasks done
… does: lint-python's new finding on this change pyright: Operator "/" not supported for "None" at is_dump, since program_dir returns None when an index names a program the folder lacks. is_dump passes no index, so it never crashed; the guard is the walrus the updates scan already uses. Checked with CI's pinned tools (dm/tools/lint_python.py --against origin/main: this finding gone; dm/games/settings.py:115 remains, red on main since 4e0333a and not from this change) and test_nsp_dump.py. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 6, 2026
Closed
Contributor
|
Updated the author-preserving #1253 integration against upstream |
ishtiaq156
added a commit
to ishtiaq156/nxnative
that referenced
this pull request
Nov 11, 2026
Retain the newer --icon guidance while passing the selected Program 1 launch ID to Mac app packaging. Keep the original application ID for update/DLC selection and preserve iOS, NSP, NUP, Program 0 and explicit bundle-ID behavior. Checked: 147 focused headless tests on refreshed main; 107 combined seedds#1253/seedds#1586 integration tests in an isolated worktree. No gameplay or full app rebuild for this identity-only sync.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
A dumper can write a game's update and DLC with no
base/folder, each version split intoprogram/<n>/{exefs,romfs}, and a DLC under<n>/base/or<n>/updates/<version>/, each optionally underprogram/0/.pack_dump.pyread none of these, and a dump of Xenoblade Chronicles 2 Nintendo Switch 2 Edition stopped with "program ID 0400E95004038001 is not a base title ID".pack_dump.pynow takes these layouts and gets the title ID from program 0's NPDM, the DLC or--title-id. A Switch 2 Edition's update packs its Switch 2 program by default (--program Npicks another), each program with its own RomFS.build_ipa_from_nsp.pyprefers a profile for the packed program's own ID.Checked
dm/tools/tests/test_nsp_dump.py(new cases: updates only, a DLC update winning, the Switch 2 Edition program ID,program/folders, packing program 0 of several, refusals),test_docs.py.scripts/regress.py check --quickon Donkey Kong Bananza040074A01BF12000, Fire Emblem Fortune's Weave04007EF01F8AE000and Hello Kitty Party Land01001340271EC000, with all of this work together: PASS (0 newly failing, 0 changed MSL). These are the local builds; none has a route, so the harness ran no boot runs. Its report is from before the rebase on currentmain.Docs
🤖 Generated with Claude Code