Skip to content
NX Native

Xenoblade Chronicles 3

Other engines010074F013262000
Xenoblade Chronicles 3 feature illustration: original artwork for the nxnative notes
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 of 0xCD500000 bytes.
  • 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: nninitStartup calls main+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 full supplies 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. main supplies 204; archive assets supply 26,851. All compile for Mac and iOS with feedback entries (chain 7fbca6dd477d, profile inputs 2342f43192c3, 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, 58e2e00d24c6f3ea and 5d36d4144f49ec9a, 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.wipac contains complete GLSLC outputs alongside HCPS programs. Reading them adds 914 base-game keys. Captured 6babc936d58fcd8f (vertex), 7a7eb30dfb6187b5 (geometry) and b540e3f8e28bd41e (pixel) match these outputs exactly.
  • Resolved, translation: vertex 4b98320a0f512efe reads SubgroupLtMask through 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 while AKEventManager joined the Apple audio-unit setup helper. A native join must release the guest core, just like a contended codec lock; dm_host_thread_join now 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 / pixel 1c6c6a015f6f3acf, match GLSLC programs inside /effect/fld/ma01a.wipac after its additional cmp\0zlib layer 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: cf66cef403c57845 and 36710e69a07e849d write bone palettes through storage buffers. Running their vertex work restores geometry (boot21discard), initially with large distorted surfaces. boot22full reproduced this with the complete shader set. A native post-vertex capture of the first 4f6b050575d4de0b draw gives 2,080 finite vertices inside the clip volume. The remaining corruption was the primitive ordering failure below.
  • Resolved, feedback: effect geometry c01e3ade8e15a842 captures 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; boot23feedback runs this path without missing feedback calls or capture-entry errors.
  • Resolved, exploding meshes: the game orders bone-palette work with ORDER_PRIMITIVES barriers (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: boot27draw frame 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 +0xd18 is null. The 390 MB allocation (boot30alloc) needs a 512 MB virtual window. boot32region at main+0x12429a4 records bump 0xe46c0000 → 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 bump 0xf6070000, 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

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.

More Other engines games