Files
seedds ff64352885 Super Smash Bros. Ultimate (01006A800016E000, update 13.0.5, SDK 8.2.1): game profile, NRO modules on iOS, data.arc shaders. Plays on the iPhone (IPA 17.5 GB, all 99 DLC licences)
On the Mac from update 13.0.5 (v2031616): the opening movie, the title, the first launch's DLC unlocks and Challenges board, the main menu, rulesets, stage and fighter select, 2-player battles (Frigate Orpheon, Big Blue, Great Bay, Find Mii, Prism Tower, Kongo Jungle 64) at 60 fps with about 2.7 ms of GPU per frame and 2 GB resident (1.2 GB of Metal allocations), quitting to the results and a second battle whose fighters' NROs the game loaded again; no red line in battle.

- Profile: modules main subsdk0 sdk (Catherine: Full Body's sdk and movie builds), the 5 GB guest layout, shader groups for data.arc's shader databases, effects and UI layouts, 35,012 shaders.
- patches.py: the engine's allocator (main+0x37c9a20, a static constructor) reserves 62 GB of address space with AllocateAddressRegion and aborted at main+0x37c9bd0. Booted once with a 64 GB alias region it commits from the region's start up (1.73 GB at the title, up to 2.5 GB in a battle) and keeps its page tables in the top 14 MB; all 11 instructions derived from the size are cut to a 4 GB region.
- sdk_patches.py: this SDK 8.2.1 sdk build (5fd4f531, Catherine's too) has the 1 GB AddressRegionManager node area and the 1 GB alignment of large regions (DRAGON QUEST XI S's SDK 7.3.2 layout at sdk+0x336b40 / +0x336d5c); both cut, so the region starts 64 MB into the 4.375 GB alias region.
- NVN: nvnSetExternalDebuggerEnabledNVX, fetched with nvnDeviceGetProcAddress(NULL, …) before the device and called unchecked (pc=0 from main+0x37fe92c), is a no-op in names.txt / hle_nvn.c, as docs/agents/03 already described.
- iOS NRO embedding (the part d979c34 left out): gen_embed.py packs the NROs nro.tsv lists into three sections (__TEXT,__dm_nro_x0, __DM_NRO_W,__img, __TEXT,__dm_nro_x1) with a table of their pieces (__DATA,__dm_nro_tab), since a Mach-O file has at most 255 sections and three per NRO would take 294; loader.c map_image maps an NRO from there (nro_pieces); build_ipa.sh puts nro.tsv beside the rewriter tables. The 98 NROs add 157 MB of code and 51 MB of data to the executable.
- shader_split.py reads data.arc through smash_arc.py (smash_arc_jobs / smash_arc_shaders: each current file scanned, labelled /data.arc/<format>#<hash40>); smash_arc.files(regions=True) gives every region's data of a regional file, without which 128 effect shaders were missing (34,884 of 35,012).
- Docs: README (games table, a Mac picture of Great Bay), AGENTS.md (50 → 51), docs/development.md (game notes, the NRO paragraph, nro_collect.py), docs/agents/01 (data.arc) and 03 (the 4 GB cut and its measurements, iOS NRO embedding).

Checked: the NSP script packs it from the NSPs alone, for the Mac and for iOS; tool tests (41), host unit tests and the NRO loader test pass. Played on an iPhone with this port's build from before it moved onto d979c34's NRO loader; the merged build was checked on the Mac (battles, an NRO loaded again) and builds for iOS.
2026-10-24 13:08:34 +08:00

2.1 KiB

1# Game profile of Super Smash Bros. Ultimate (Switch, base game v0 + update 13.0.5 = v2031616). Plays on the Mac and on the iPhone
2# Format: see dm/games/README.md
3# Bandai Namco / Sora's engine (namespaces app, lib, phx, nu) on SDK 8.2.1 with NVN; modules main + subsdk0 (NintendoSDK_movie) + sdk, the same sdk and movie builds as Catherine: Full Body.
4# RomFS: everything in data.arc (17.6 GB, read by dm/gfx/tools/smash_arc.py: zstd files named by hash40) beside 14 NRRs. The fighter, item and common scripts are 98 NRO modules in data.arc
5# (prebuilt:/nro/release/lua2cpp_<name>.nro, 193 MB) that the game loads with nn::ro::LoadModule (collected by dm/tools/nro_collect.py, embedded in the iOS app); the NRRs also list 666 earlier versions the archive still holds.
6# Shaders: GLSLC outputs in the SSBH shader databases (.nushdb), BNSH in the effects (EFFN) and UI layouts (SARC), and 77 in main
7# ---- Identity ----
8title_id01006A800016E000
9program_id01006A800016E000
10# ---- App ----
11# Game name: only a label for profile listings and the Mac window title; the iOS app name is the game name in the base NSP, and the bundle ID comes from the base game title ID (build_ipa.sh / NSP script)
12nameSuper Smash Bros. Ultimate
13ipaSuperSmashBrosUltimate.ipa
14app_categorypublic.app-category.games
15# ---- Versions ----
16# only the merged 13.0.5 copy is extracted
17buildv203161613.0.5main=21450c647b8c5940ed5b68218ea128fdsubsdk0=60c6edbbfcebd4176cc301d5d9cb5a6fsdk=5fd4f531c1195e9e5510c9e73f22cd39
18packagev2031616
19shader_versionsv2031616
20# ---- Files ----
21# load order as on Horizon: main, subsdk*, sdk
22modulesmain subsdk0 sdk
23romfs_markerdata.arc
24zip_store.arc:.metallib
25# ---- Memory ----
26# The NPDM declares 16 MB of system resource (virtual address memory) and main never sets a heap: a 5 GB block with a 4.375 GB alias region, where the game maps its memory itself
27mem_reserve0x140000000
28mem_alias0x118000000
29mem_stack0x10000000
30app_pool0xCD500000
31sys_resource0x1000000
32# ---- Shader split (shader_split.py; data.arc's current files, smash_arc.py) ----
33shader_groups/data.arc/SHDR=shdr /data.arc/EFFN=effect /data.arc/SARC=ui
34shader_noteSuper Smash Bros. Ultimate shaders