Files
seedds 6d42bc9815 Advance Wars 1+2: Re-Boot Camp (0100300012F2A000, base game 1.0.0, Unity 2020.2.1f3 IL2CPP on SDK 10.4.1): game profile, the SDK 10.4.1 sdk build's address-region cuts and a shader split reader for control sections loose in main. Plays on the iPhone (IPA 7.1 GB, user). On the Mac from the boot through the Bink opening movie, the title, Nell's introduction, a new casual campaign and the first training battle (Field Training, Troop Orders): 60 fps in the menus, 30 fps in battle by the game's own limit (present interval 1, the frame's work 33 ms with CPU and GPU mostly idle), FMOD sound through AudioOut, about 2.5 GB resident and 1.6-1.9 GB of Metal allocations, level over a 15-minute run with no red line. sdk_patches.py: the sdk build is The Great Ace Attorney Chronicles' (no virtual address memory there, so it never needed a cut); this game's NPDM declares 16 MB of system resource and nninitStartup (main+0x365310) hands pool - used to StandardAllocator, whose Initialize (sdk+0x2edf90) aborted at boot. The AddressRegionManager constructor (sdk+0x340e90) loads the 1 GB node area with orr w8 / w9, wzr, #0x3fe00000 (the SDK 7 / 8 form, +0x340ea0 / +0x340f3c), cut to 62 MB, and AllocateAddressRegion's 1 GB alignment of regions of 1 GB and more (+0x34109c) to 32 MB, as on DRAGON QUEST XI S's SDK 7.3.2 build. Profile: the NSP script's heap check set a 1 GB pool, as for the other Unity games with virtual address memory, but the game's malloc then ran dry at the first loading screen and Unity's GPU pool allocation (main+0x96f430) halved its aligned_alloc request down to 0 and spun there (frames stopped 17 s in; found with sample on the Mac host); with 2 GB the alias region is mapped up to 2.26 GB (high-water mark +3.27 GB of 4.375) in Engage's 5 GB block. shader_split.py raw_shaders: Bink 2's Unity plugin builds its programs from 32 control sections and code areas in main's read-only segment that are in no GLSLC output and no BNSH file (2 vertex, 22 pixel, 8 compute), so the movies drew white (two shaders not in the map and a program without a vertex shader as the opening movie started). 26 are 0x20-byte records in .data ({code pointer, control pointer, u32 code length, u32 control length}, found through the relative relocations, RELA or RELR: rel_targets); the code takes the other 6 by address, their code area right after the control section's own length or right before it, and two share one; both neighbours can pass the header and length checks (main+0x4a2c670, a compute shader, would have taken the first 0x100 bytes of the next vertex shader's code), so only a code area whose address the code builds with adrp + add nearest to the control section's is taken (adrp_targets). Compute code areas have no header (SDK 10), so the stage is glslc_stage's, and a code area may not hold a control section. Control sections another reader took from main are left alone (Celeste's MonoGame effect). Of the 25 mains on the game drive the reader adds shaders only to this one, so every other profile's tables stay as they were (Celeste and the other games on the second drive not checked: not mounted). 20,424 shaders, all build for the Mac and iOS. Checked: the NSP script packs it from the NSP alone (Mac and iOS), the tool tests pass. README (games table, a Mac picture of the first battle), AGENTS.md (52 -> 53), dm/games/README.md (the heap check's 1 GB is a starting point), docs/development.md and docs/agents 03 / 04 say so
2026-10-24 17:13:12 +08:00

3.1 KiB

1# Game profile of Advance Wars 1+2: Re-Boot Camp (Switch, base game v0 = 1.0.0, the only version). Plays on the Mac and on the iPhone
2# Format: see dm/games/README.md
3# Unity 2020.2.1f3 IL2CPP on SDK 10.4.1 (the sdk and movie module builds of The Great Ace Attorney Chronicles), NVN, FMOD (sound through AudioOut), Bink 2 movies (.bk2) decoded by Bink's own
4# Unity plugin in main, Pia / NEX for online play. Everything is in Addressables bundles under Data/StreamingAssets/aa/Switch, read as Engage's (unityfs.py).
5# Shaders: 20,392 from the bundles and Unity's 11 GLSLC outputs in main, and the Bink plugin's 32 (2 vertex, 22 pixel, 8 compute), whose control sections and code areas lie loose in main
6# (shader_split.py raw_shaders); without them the opening movie and every other movie drew white
7# ---- Identity ----
8title_id0100300012F2A000
9program_id0100300012F2A000
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)
12nameAdvance Wars 1+2: Re-Boot Camp
13ipaAdvanceWars12ReBootCamp.ipa
14app_categorypublic.app-category.strategy-games
15# ---- Versions ----
16buildv01.0.0main=320a17744aefd67fec5738ca0c629795subsdk0=84e50460493a12f26100e5150fbff271sdk=d9add76fc264863d85fbbd1d70076c76
17packagev0
18shader_versionsv0
19# ---- Files ----
20# load order as on Horizon: main, subsdk*, sdk (subsdk0 = NintendoSDK_movie, which main imports from; the movies seen so far, the opening among them, are Bink's)
21modulesmain subsdk0 sdk
22romfs_markerData/StreamingAssets/music.bank
23zip_store.assets:.bank:.bk2:.bundle:.dat:.ress:.metallib
24# ---- Memory ----
25# The NPDM declares 16 MB of system resource (virtual address memory): nninitStartup (main+0x365310) hands pool − used to StandardAllocator as one address region, and main sets no heap;
26# Unity reserves its own regions beside it. Engage's 5 GB block (4.375 GB alias region), with the SDK's address-region node area cut and regions of 1 GB and more aligned to 32 MB on the
27# SDK 10.4.1 sdk build (dm/tools/sdk_patches.py). The NSP script's heap check (the hardware pool used the alias region up to +4.25 GB within seconds) set a 1 GB pool, as for the other
28# Unity games with virtual address memory, but this game's malloc then failed at the first loading screen: Unity's GPU pool allocation (main+0x96f430) halves its request after each failed
29# aligned_alloc down to a size of 0 and spins there for good (frames stopped 17 s in). With 2 GB: 2.26 GB of the alias region mapped and its high-water mark +3.27 GB through 15 minutes of
30# the title, the opening movie, the menus and the first training battle; the process holds about 2.5 GB on the Mac, 1.6–1.9 GB of it Metal allocations
31mem_reserve0x140000000
32mem_alias0x118000000
33mem_stack0x10000000
34app_pool0x80000000
35sys_resource0x1000000
36# ---- Input ----
37# The map cursor moves with the D-pad (the tutorial battle was played with it on the Mac); the 3D layout has one
38pad_layoutfull
39# ---- Shader split ----
40shader_groups/Data/=data
41shader_noteAdvance Wars 1+2: Re-Boot Camp shaders