
- Title ID
- 0100F5D01DA3A000
- Tested build
- 1.0.0 (base)
- Nintendo SDK
- 16.2.4
- Engine
- Unity 2022.3.5f1 IL2CPP
- Graphics API
- NVN
Build this game
Keep [0100F5D01DA3A000] 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 game 1.0.0 (v0), SDK 16.2.4. Unity 2022.3.5f1 IL2CPP with FMOD on NVN. Modules main, subsdk0 (the movie module) and sdk; the sdk is Unicorn Overlord 1.05's build (010069401ADB8000). Plays on the iPhone. On the Mac: the title, the controls screen, the level select and the levels with their Level Complete / Level Failed screens, at 60 fps with real sound and saves, no red line; about 0.75 GB resident, flat over 20 minutes.
What it needs
| Setting | Where | Why |
|---|---|---|
| Node area cut 1 GB → 62 MB | dm/tools/sdk_patches.py, sdk build 12f16103… (the constructor AddressRegionManagerC2 at sdk+0x134768; the movs at +0x134778 and +0x13480c) |
StandardAllocator::Initialize aborted in nninitStartup; see Memory |
5 GB guest layout: mem_reserve 0x140000000, mem_alias 0x118000000, mem_stack 0x10000000, app_pool 0x40000000 |
game.tsv |
Ace Attorney Investigations Collection's layout (010005501E68C000): a 1 GB pool and the 5 GB block (256 MB in front + 4.375 GB alias region + 256 MB stack region + 128 MB heap region) |
shader_groups /Resources/=engine /Data/=data |
game.tsv |
engine built-ins (Resources/: unity default resources, unity_builtin_extra) go to engine, the player's serialized files to data |
No pad_layout (the 2D default) |
game.tsv |
controller only; see Input |
Memory
- The NPDM declares 16 MB of system resource, so
IsVirtualAddressMemoryEnabledis true:nninitStartup(main+0x73ad60) hands application pool − used memory to StandardAllocator as virtual address memory and never callsSetMemoryHeapSize, as in Ace Attorney Investigations Collection. - Resolved: an
nn::diagabort atsdk+0x126490(StandardAllocator::Initialize, called fromnninitStartupatmain+0x73adcc); the NSP script's heap check reported "the host stopped before nnMain". Thesdkbuild is Unicorn Overlord's, whose NPDM declares no system resource, so it never needed the cut; Unicorn Overlord runs the same with it. The constructor takes it at+0x134778/+0x13480c. - Measured with probes on
VammManager::AllocateAddressRegion's success path (sdk+0x1348b8: x21 size, x22 address) andFreeAddressRegion(sdk+0x135100): StandardAllocator takes 960 MB at +64 MB (it ends at +1.0 GB), and Unity's own regions (main+0x11bb4cc) hold about 0.54 GB more. Over four minutes of level loads the live regions end at +2.0 to +2.1 GB of the 4.375 GB alias region. In 20 minutes the mapped high-water mark stopped at +2.51 GB (about 4 minutes in), at most 0.5 GB mapped, about 0.75 GB resident on the Mac. The bring-up run (five minutes of level loads) had the high-water mark at +2.25 GB. - With this layout the game boots to its title in 5 s with no red line.
Input
- Controller only (stick or D-pad, A, B, +): the game never reads the touch screen, so it stays docked at 1920x1080 and the virtual gamepad starts in the 2D layout.
Files and shaders
- 496 stage shaders in the player's serialized files (
Data/*.assets,Data/Resources) andmain: 439 engine built-ins, 46 of the game's, 11 of the player's inmain, and the built-in VR blit's geometry shader, which does not build. - Resolved: the split stopped with "no bundle has a Shader type tree of the same hash to borrow". There are only
Data/*.assets,level*and the two engine files inData/Resources, none with type trees, and no bundle. TheShadertype hash there (ea424a5f…) is the one in Ace Attorney Investigations Collection's bundles (2022.3.17f1): the same layout.unityfs.pynow carries that layout written out (KNOWN_TREES: about 30 structs;tree_from_layoutbuilds the tree a file with type trees would have), and the split's second pass gives it to the stripped files when no bundle lent a tree of that hash. - It calls
GetSharedFontAddresswithout importingScalableFontEngineHelper::Decode, so the host gives it the TTF itself (font_skip, see Patrick's Parabox).
Mac routes
DM_KEYS="f400:A,f700:A,f1000:A,f1200:Right,f1300:A"starts a new game, enters level 1 and clears it (Level Complete at about frame 1,350).
Found on this game
General changes first needed here; each applies to every game:
- Written-out
Shaderlayouts for Unity players with no bundle to borrow a tree from (KNOWN_TREES,tree_from_layout, given in the split's second pass): Unity Shader layouts written out for players without bundles. - The node area cut on an
sdkbuild whose first game never needed it (Unicorn Overlord's): The SDK's address-region node area.
Open
- The built-in VR blit's geometry shader does not build.
game.tsvhas nosys_resourcerow, so the host reports its default, 32 MB (game.py,hle_svc.c), where the NPDM declares 16 MB.
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.