
- Title ID
- 01002B30028F6000
- Tested build
- 1.4.1.1
- Nintendo SDK
- 15.3.2
- Engine
- MonoGame (C# → C++ by BRUTE)
- Graphics API
- NVN
Build this game
Keep [01002B30028F6000] 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.
Update 1.4.1.1 (v589824; the title shows v.1.4.1.0), SDK 15.3.2. MonoGame for the Switch: MonoGame's and the game's C# compiled to C++ by Sickhead's BRUTE into main (78 MB with its bss), FMOD Studio sound (its banks in Content/FMOD/Desktop) through AudioOut, on NVN. Modules main and sdk only; sdk is the same build as Paper Mario: The Thousand-Year Door 1.0.1's (0100ECD018EBE000). Brought up with no host change; plays on the iPhone.
On the Mac: the logos, the title, a new file and the prologue (walking, jumping, the camera following Madeline), at 60 fps with music and sound, no red line; about 1.6–1.7 GB resident, flat over five minutes.
What it needs
The provisional profile's guesses held: no key needed changing.
| Setting | Where | Why |
|---|---|---|
sys_resource 0x0 |
game.tsv |
the NPDM declares no system resource, so IsVirtualAddressMemoryEnabled is false, as on Horizon: no virtual address memory. The game sets a 3.11 GB heap (pool − used memory) |
4 GB layout: mem_reserve 0x100000000, mem_alias 0x10000000, mem_stack 0x10000000, app_pool 0xCD500000 |
game.tsv |
256 MB in front + 256 MB alias region + 256 MB stack region + 3.25 GB heap region |
mem_used 0x6400000 (100 MB) |
game.tsv |
the rewritten modules are larger than the default 64 MB of used memory (BRUTE's main alone is 78 MB with its bss), so the heap request plus the modules would exceed the pool |
| Node area cut and 4 MB / 32 MB / 1 GB → 2 MB region alignment (SDK 20's) | dm/tools/sdk_patches.py SDK-wide rules, sdk build 8618895246b4… |
Absolum's cuts, from the SDK-wide rules on this build (Paper Mario's); Celeste has no virtual address memory and never makes an address region |
shader_groups /Content/=content |
game.tsv |
the MonoGame effects; see Shaders |
No pad_layout: the virtual gamepad starts in the 2D layout (the default).
Shaders
- Current: 26 (20 pixel, 6 vertex) in MonoGame effects (MGFX version 8): the 13 XNB files in
Content/Effectsand SpriteBatch's built-in effect inmain, read byshader_split.py(mgfx_effect). No other file and no GLSLC output holds shaders. Every binding decodes, with Mario's binding layout. - The XNB files are platform
S, uncompressed, read byEffectReader; each holds one MGFX effect. Inmain, four bytesMGFXcount only when version 8 and a control section follow. - 10 of the 13 effects have no vertex shader: SpriteBatch binds its own and the effect's pass only replaces the pixel shader. Vertex and pixel shaders therefore combine across effects, and they are paired as single-stage programs.
- Resolved (PR #275 review): all 26 shaders produce byte-identical Mac and iOS metallibs with target selection and with the preceding dual-target builder. Sources, reflection (apart from the chain version),
c1_full.tsvandcb_extent.tsvagree too. Repeated builds of either target and returning to iOS after Mac restore all 26 shaders without new Metal compiles; dual-target builds and iOS cache reuse after them preserve the same outputs.
Input
- Controller only. The game maps its buttons by position, so B and X jump.
Mac routes
- A fresh save reaches the prologue with
DM_KEYS="f1850:A,f2200:A,f2600:A,f3000:A"(the title, Climb, a new file, Begin; control of Madeline from about frame 5,000); thenf5100:LRight~1.0,f5400:LRight+X~0.3walks to the first ledge and jumps onto it.
Found on this game
General host changes first needed here; each applies to every game:
- MonoGame effects (MGFX) in XNB files and in
main(mgfx_effectinshader_split.py): MGFX effects in MonoGame XNB files. - Capstone 5 pinned: packing with Capstone 6 installed stopped in
patch_nso.pywithCS_ARCH_ARM64undefined: Capstone API version. - Resolved: iOS-only shader cache hits must also restore Mac analysis files: Target selection keeps the shader analysis files in the cache.
Open
- Only the merged 1.4.1.1 copy is extracted; the base game v0 is not.
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.