Files
seedds 2bdad7d19c Catherine: Full Body plays on the Mac: profile 0100BF00112C0000 (update 1.0.1a, SDK 8.2.1)
- Atlus's GFD engine with CRI middleware (CPK archives, ADX2 sound, Sofdec2 movies through movie::Decoder); 3,128 GLSLC shaders: 3,050 loose files in data/shaders_binary, 76 in main and 2 the game compiles at boot (captured on the Mac)
- Shader chain, for every game: this GLSLC (GPU code 1.15) writes each vertex shader as a VertexA part (shader type 0, the position) and a VertexB part (the other outputs) in one code area; shader_split.py reads type 0 as a vertex shader (sph_stage) and dmsh_build.py merges the two parts as Ryujinx does (vertex_ab). Without it every varying was lost and the screen was black. Every other profile's dmsh_chain.h rewritten with its c1_full / cb_extent lists carried over (the merge touches only type-0 vertex shaders, which no other game has); The Great Ace Attorney Chronicles checked on the Mac
- Host, for every game: nvnDeviceGetInteger reports at least the GPU code version of the game's own GLSLC (the game refused to compile its built-in shaders against SDK 7's 1.5–1.14); nn::settings::GetAvailableLanguageCodeCount; nv12-uv-stride in the movie decoder's output format (CRI's player reads it unchecked and crashed on the first picture); a segment commit at the first pass boundary after a buffer → texture copy, since the game reuses the copy's staging memory a frame later (the subtitle band came out as another texture's blocks)
- Memory: mem_used 96 MB (the rewritten modules take 92 MB, so SetHeapSize failed and the game ran on a 32 MB heap)
- Prewarm list recorded from boot through the intro into the first Nightmare stage
2026-10-22 18:49:00 +08:00

2.7 KiB

1# Game profile of Catherine: Full Body (Switch, base game v0 + update 1.0.1a = v131072). In bring-up
2# Format: see dm/games/README.md
3# Atlus's GFD engine (the game's code name xrd758) on SDK 8.2.1, NVN; modules main + subsdk0 (GLSLC, the runtime shader compiler) + subsdk1 (NintendoSDK_movie) + sdk.
4# RomFS: everything in five CRI CPK archives (data/Base.cpk, Model.cpk, Puzzle.cpk, Keyfree.cpk, Patch.cpk), CRI ADX2 sound (data/sound*/*.acb / .awb) and CRI Sofdec2 movies
5# (data/movie*/*.usm, H.264 decoded through the SDK's movie::Decoder, hle_movie.c).
6# Shaders: GLSLC outputs, one stage each: 3,050 in data/shaders_binary (*.vs / *.ps), 76 in main, and 2 the game compiles at boot with its own GLSLC from GLSL sources in main
7# (captured on the Mac, hle_glslc.c). Its GLSLC (GPU code version 1.15) writes shader type 0 into every vertex shader's SPH (shader_split.py sph_stage)
8# ---- Identity ----
9title_id0100BF00112C0000
10program_id0100BF00112C0000
11# ---- App ----
12# 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)
13nameCatherine: Full Body
14ipaCatherineFullBody.ipa
15app_categorypublic.app-category.puzzle-games
16# ---- Versions ----
17# only the merged 1.0.1a copy is extracted; the base game's own build IDs are added when needed
18buildv1310721.0.1amain=93a79c77da81f7f15db021c5c7431eb4subsdk0=c8a3cc0b1d1858330a881c0c2fc87940subsdk1=60c6edbbfcebd4176cc301d5d9cb5a6fsdk=5fd4f531c1195e9e5510c9e73f22cd39
19packagev131072
20shader_versionsv131072
21# ---- Files ----
22# load order as on Horizon: main, subsdk*, sdk (subsdk0 = GLSLC, subsdk1 = NintendoSDK_movie)
23modulesmain subsdk0 subsdk1 sdk
24romfs_markerdata/Model.cpk
25zip_store.awb:.cpk:.usm:.metallib
26# ---- Memory ----
27# The NPDM declares no system resource (META +0x14 = 0): nninitStartup sets a heap of the pool − 64 MB (3.11 GB), and main's bss is 48 MB. The 4 GB block of the other games
28# without virtual address memory (256 MB in front + 256 MB alias region + 256 MB stack region + 3.25 GB heap region)
29mem_reserve0x100000000
30mem_alias0x10000000
31mem_stack0x10000000
32app_pool0xCD500000
33# The rewritten modules take 92 MB (main 61 MB with its bss, GLSLC 9.5 MB, the movie library 7.6 MB, sdk 13.8 MB), more than the default 64 MB of used memory, so SetHeapSize(pool − 64 MB)
34# failed and the game ran on a 32 MB heap until a 96 MB memory pool's storage came back null (main+0x2eb954). 96 MB, as the NSP script's guess after the rewrite
35mem_used0x6000000
36# ---- Shader split (shader_split.py; GLSLC outputs in loose RomFS files, main and the run-time capture) ----
37shader_groups/data/=data
38shader_noteCatherine: Full Body shaders