
- Title ID
- 010074F013262000
- Tested build
- 2.2.1
- Nintendo SDK
- 12.3.9
- Engine
- Monolith's engine
- Graphics API
- NVN
Build this game
Keep [010074F013262000] in your file names, put the base game, update and DLC in one folder and run the script. Follow the build guide, then the sideloading guide. Needs an iPhone 15 Pro or newer, or an M1 iPad or later.
Technical notes
The project's own record of bringing this game up: what its profile needs and why, what was found and what is still open.
Base title ID 010074F013262000, update 2.2.1 (v720896), SDK 12.3.9,
Monolith's engine, NVN. Modules: main, subsdk0 (NintendoSDK_movie), sdk.
The build IDs are in game.tsv.
Current status
Opening gameplay tested on an Apple-silicon Mac (2026-10-27). The compact layout renders the title, terrain, characters, lighting and effects. New-game setup, opening movies, the first enemy defeat, destination tutorials, walking and the engagement-area collision boundary work. All 27,055 base/update shaders compile for Mac and iOS. The unsigned IPA is built and its archive checks pass.
iOS runtime testing, DLC gameplay and later-game allocation peaks remain open. The supplied four DLC packs are included; their additional shaders have not been integrated into the base/update shader census, so DLC rendering is unvalidated.
Profile and memory
- The NPDM declares a 32 MB system resource. Memory is committed through address
regions, without
SetHeapSize. The profile uses a 5 GB guest block, including a 4.375 GB alias region, and the Switch application pool of0xCD500000bytes. mem_map_limit on: startup attempts 1 MB physical commits until allocation fails, then frees its probe. An unlimited host lets it map all 60 GB; enforcing the hardware pool makes that probe stop at the expected physical limit.- Address-space adaptation:
nninitStartupcallsmain+0x128e58c, reserving 60 GB. Its first arena reserves 4 GB + 128 KB (main+0x1241860), so reducing only the containing region cannot work. patches.py changes that arena's bump increment, subtraction and capacity together, to 512 MB + 128 KB, and its containing region to 4 GB. All changes are gated by the 2.2.1 main build ID. The SDK build takes the existing node-area and large-region alignment cuts. - A 40-second diagnostic run with the original arenas had 2,092.4 MB committed:
about 203 MB in the first arena, about 1.8 GB in subsequent windows, and a 64 MB
allocation near the end of the reservation. Original-layout opening battle
(
boot29wide) commits 225.44 MB in the first arena. That leaves about 286 MB of capacity in the compact first arena; later-game peaks remain unvalidated. - Compact runs stayed at the title for over ten minutes without an allocator failure. This validates the title allocation pattern, not later gameplay peaks.
pad_layout fullsupplies both sticks and the D-pad.
Files and shaders
- The merged RomFS is 14.15 GB: 238 WebM movies, nine Wwise PCKs, and
bf3.arh/bf3.ard. The ARH1 index has 76,445 files; the ARD is 9.05 GB. Archive entries and model/map streams use XBC1 (zlib and zstd). - The full base/update split finds 27,055 shader keys: 8,201 vertex, 18,533 pixel,
308 geometry and 13 compute, with 17,648 variation pairs.
mainsupplies 204; archive assets supply 26,851. All compile for Mac and iOS with feedback entries (chain7fbca6dd477d, profile inputs2342f43192c3, after integration with main). - Resolved, extraction: six boot shader stages live in one standalone SLCT
at
main+0x14e01c0, without an HCPS header. Control and code offsets are relative to the SLCT itself. Its control sections include assembly text and are aligned to eight bytes. The first pair's keys,58e2e00d24c6f3eaand5d36d4144f49ec9a, match runtime dumps exactly. - Twelve more keys captured during startup match the extracted archive programs. Equal code can have different compiler identity bytes at control +0x7d0; all such keys are retained, with their original control bytes.
- Resolved, extraction:
/effect/cmn_assets.wipaccontains complete GLSLC outputs alongside HCPS programs. Reading them adds 914 base-game keys. Captured6babc936d58fcd8f(vertex),7a7eb30dfb6187b5(geometry) andb540e3f8e28bd41e(pixel) match these outputs exactly. - Resolved, translation: vertex
4b98320a0f512efereadsSubgroupLtMaskthrough a component pointer; the general one-lane lowering now covers that form. - Resolved, title rendering: the black foreground model had valid G-buffer
colour and normals, but the separate IMAGE stencil descriptor read empty
storage. The general sharing fix restores lighting (
boot17shared, frame 1200). - Resolved, opening deadlock: the output thread held the host decoder mutex
while signalling the higher-priority input thread; the handoff waited for that
input thread, which was blocked on the same native mutex. Annotating contended
native waits restores playback (
boot18movie,mv01005100.webm, 140 seconds). - Current, native audio setup: a later real-audio run (
boot25full) stopped presenting whileAKEventManagerjoined the Apple audio-unit setup helper. A native join must release the guest core, just like a contended codec lock;dm_host_thread_joinnow preserves that scheduler accounting. Gated join, nesting and audio-cycle regressions pass. The sample does not establish that Apple audio-unit construction itself would remain blocked indefinitely. The corrected compact run continues for over ten minutes with real output#0, without the diagnostic watchdog or reported audio underruns. It does not reopen the output, so the earlier construction stall is not isolated. - Resolved, nested effect compression: those four geometry/pixel keys, and
vertex
d021f6a3763a9327/ pixel1c6c6a015f6f3acf, match GLSLC programs inside/effect/fld/ma01a.wipacafter its additionalcmp\0zliblayer is decoded. The expanded base/update census is 27,055 keys (8,201 vertex, 18,533 pixel, 308 geometry, 13 compute), with 17,648 variation pairs. - Resolved, vertex work under discard:
cf66cef403c57845and36710e69a07e849dwrite bone palettes through storage buffers. Running their vertex work restores geometry (boot21discard), initially with large distorted surfaces.boot22fullreproduced this with the complete shader set. A native post-vertex capture of the first4f6b050575d4de0bdraw gives 2,080 finite vertices inside the clip volume. The remaining corruption was the primitive ordering failure below. - Resolved, feedback: effect geometry
c01e3ade8e15a842captures eleven interleaved generic outputs (172 bytes per vertex). The general feedback path now decodes these byte component counts, captures geometry output and saves GPU draw counts. Native regression checks pass;boot23feedbackruns this path without missing feedback calls or capture-entry errors. - Resolved, exploding meshes: the game orders bone-palette work with
ORDER_PRIMITIVESbarriers (0x21). The host only split render encoders for fragment barriers after storage writes. Enforcing primitive ordering removes the exploding model parts (boot24barrier). - Resolved, terrain allocation:
boot27drawframe 4000 replays every recorded program bind/draw, with no map shader or rejected draw. CPU probes (boot28cpu) find the map owner rejected before visibility because its core buffer at+0xd18is null. The 390 MB allocation (boot30alloc) needs a 512 MB virtual window.boot32regionatmain+0x12429a4records bump0xe46c0000→0x1046c0000, beyond the compact 4 GB container, before any physical mapping. The heap's byte limit is disabled (heap31.bin). Reducing the first arena's reservation from 1 GB to 512 MB frees that window; this retains the Switch physical-memory pool and all map work. The original-layout battle's reservation sequence predicts 159.56 MB of remaining outer space; corrected compact gameplay (boot33compact512) confirms bump0xf6070000, a 512 MB + 128 KB first-arena capacity and about 225 MB committed there.
Mac validation and remaining work
boot33compact512 uses the complete shader set, the corrected compact modules
and real audio for over ten minutes. It defeats the first enemy, advances through
the destination and tips tutorials, then walks across Everblight Plain to the
engagement boundary.
run/compact33_terrain.png, compact33_move.png and compact33_walk.png retain
these milestones. Alias mappings settle near 2,653–2,655 MB during this sequence.
Later areas, saves/reloads and DLC have not been exercised.
The unsigned iOS app compiles with signing disabled. The IPA is 20,629,976,490
bytes (19.21 GiB), contains all 27,055 base/update shader libraries and four
mounted DLC directories, and passes every ZIP CRC. It has no code signature or
provisioning profile. No device installation or runtime test was performed.
The delivered IPA is the original validated bab889ccd129 build; integration
with main rebuilt both platforms' libraries but did not replace that artifact.
After integrating main at 6f58a7d, boot34main repeats the first enemy defeat
and destination tutorial with the combined host and shader chain. The full Metal
suite, all 48 Python test files, all 178 iOS source compile checks and the pinned
lint/type ratchet pass. A fresh launch after shader metadata generation accepts
the new library/table stamps. The all-local-game regression harness was started
but stopped during its first baseline compilation, before any comparison
completed; no cross-game comparison coverage is claimed for that sweep.
Mac development files
The supplied folder is /Volumes/S790/nsp/Xenoblade Chronicles 3/. Extraction,
the shader packages and isolated hosts are in 010074F013262000_build/; analysis,
private keys, Python tools and isolated runs are in 010074F013262000-work/.
run/boot.py accepts a log name, duration and environment assignments. Diagnostic
logs boot01 / boot02 show the original allocator failure; boot03wide through
boot07wide retain the wider-reservation experiments. boot07wide ends cleanly
after 40 seconds; it uses an empty shader map and is not a visual test.
Use patched_512/ with tools/dmhost_512 and shader/fx_cache/ for the validated
Mac layout; the earlier patched_compact/ has the insufficient 1 GB first-arena
reservation. DM_NVN_SHMAP points to this profile's shader_map.tsv.
On the title/new-game screens press A. The auto-attack tip advances with R and
closes with A; stand near an enemy to auto-attack and use the left stick to walk.
During a movie, Plus then a held X skips it. The diagnostic watchdog is off when
DM_WATCH is absent; setting it to 0 still enables its default stall threshold.
Found on this game
- Monolith ARH1, XBC1 and HCPS/SLCT shader containers.
- Subgroup operations rewritten for a one-lane subgroup.
- IMAGE usage does not split texture storage.
- Rasterizer discard preserves vertex storage writes.
- Primitive barriers order vertex storage writes.
- Transform feedback captured by a vertex entry point: interleaved outputs and geometry capture.
- A host lock held across a same-core handoff: contended native decoder waits must release a handoff.
- oe calls answered without an applet proxy: enabling album-image notifications dereferenced the absent SelfController.
- The SDK's address-region node area and 1 GB alignment of regions of 1 GB and more.
These notes are republished from the nxnative repository under its MIT license (license and attribution). The original, which may be newer, is the game's notes on GitHub. This site hosts no game files.