Files
seedds 9c1e449470 Bayonetta 2 (01007960049A0000, update 1.2 = v131072, PlatinumGames' engine in its Wii U form on SDK 3.6.0, the oldest SDK so far): game profile, a CRI CPK reader for the shader split, and two general NVN fixes. Plays on the iPhone (IPA 12.5 GB, user). On the Mac from a fresh save: the boot, the PlatinumGames logo movie (USM), the title, a new game (slot 1, the auto-save notice, Story, Normal), the opening narration (which cannot be skipped on a first play), the prologue cutscene (skipped: Plus, Down, A, A), the tutorial (closed: Plus, Down x4, A), Verse 1 on the jet, Rodin's cutscene and the next fight with an Umbran Climax and a torture attack, with Wwise sound through two 6-channel AudioOuts: 60 fps in play (frame time p50 16.67 ms, p95 about 17.5 ms; GPU 2-3.5 ms a frame on an M6), 30 in its cutscenes as the game asks, about 1.6 GB resident and 1.75 GB of Metal allocations. No host change was needed for SDK 3.6.0 itself (NVN API 53); no virtual address memory (a 3.11 GB heap in the 4 GB layout, mem_used 102 MB). Files: six CPK archives (9.5 GB, 6,091 files, 12 GB of them CRILAYLA-compressed) of PlatinumGames DAT archives. New dm/gfx/tools/cpk.py: the @UTF tables (and the masked ones of Unicorn Overlord's CPKs, the same tables as before once unmasked), the TOC and CRILAYLA (a decoder over a bit string, about 29 MB/s); shader_split.py cpk_jobs splits the CPKs into jobs and scans each entry (a CPK it cannot read is scanned as one file, with a [RED] line). Shaders: 1,856 BNSH files of one stage each (.vso / .pso) in shader.dat, shader2.dat and shadereff.dat of data000.cpk, all built for the Mac and iOS. nvn_mtl.m, both general: a cleared attachment larger than the render pass (Metal's render area is the smallest attachment) is now cleared in a pass of its own and loaded by the pass, as NVN clears the whole target (rp_begin_ex_): the game's 32x32 and 256x256 passes cleared only that corner of its full-size depth target, so the opening narration drew in a corner of a black screen and the opening scenes were speckled; and Downsample of a single-sample texture is a filtered scaling copy of the whole level that may convert the format (copy_t2t, its bloom chain 320x176 -> 80x48 and its 1280x720 BGRA8 frame into an RGBA8 texture), which logged red lines before. build_ipa_from_nsp.py: a survey note for CPK archives. Profile: the 3D pad layout (the camera is on the right stick; the game's touch controls are handheld only), a prewarm list recorded on the Mac over the route above (974 lines). Checked: the graphics run list, the host unit tests and the 49 tool tests pass; Unicorn Overlord's CPKs split as before. Not checked: 13 Sentinels and Catherine: Full Body's CPKs (no files on the drives), the clear fix in other games beyond the unit tests. README (games gallery, a Mac picture of Verse 1), AGENTS.md (58 -> 59), docs/development.md and docs/agents 01 / 03 / 04 say so
2026-10-25 08:56:02 +08:00

2.6 KiB

1# Game profile of Bayonetta 2 (Switch, update v131072 = 1.2; English, Japanese, French, German, Spanish, Italian, Korean, Simplified and Traditional Chinese). On the Mac from the boot
2# through the title, a new game (Story, Normal), the opening narration and the prologue's cutscene, the tutorial and the prologue's first fights on the jet, at 60 fps in play (30 in its
3# cutscenes, as the game asks)
4# Format: see dm/games/README.md
5# PlatinumGames' own engine (its Wii U engine, not Bayonetta 3's) on NVN, SDK 3.6.0, the oldest SDK so far (no other game's sdk build). Modules main + subsdk0 (NVN's GLSLC, which main
6# imports but did not call on the route above) + sdk; Wwise sound through two AudioOuts; CRI's file system (CPK) and Sofdec movies (USM), both decoded by the game's own code.
7# RomFS: six CRI CPK archives (data000.cpk …, 9.5 GB, 6,091 files, 12 GB of them CRILAYLA-compressed) holding PlatinumGames DAT archives, beside the USM movies (movie/) and the Wwise
8# sound (sound/). The shaders are BNSH files, one stage each ('.vso' / '.pso' members of shader.dat, shader2.dat and shadereff.dat in data000.cpk; shader_split.py cpk_jobs, cpk.py)
9# ---- Identity ----
10title_id01007960049A0000
11program_id01007960049A0000
12# ---- App ----
13# 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)
14nameBayonetta 2
15ipaBayonetta2.ipa
16app_categorypublic.app-category.action-games
17# full: the camera is on the right stick
18pad_layoutfull
19# ---- Versions ----
20buildv1310721.2main=f19b2e01e1794f933a9720c1404bb6f6subsdk0=a82aa14c5d5a359ad04dc4eab9f5d590sdk=8ceabb1750539c3874cc9fab45cab335
21packagev131072
22shader_versionsv131072
23# ---- Files ----
24# load order as on Horizon: main, subsdk*, sdk (subsdk0 = GLSLC)
25modulesmain subsdk0 sdk
26romfs_markerdata002.cpk
27zip_store.cpk:.usm:.metallib
28# ---- Memory ----
29# The NPDM declares no system resource (META +0x14 = 0): nninitStartup sets a heap of the pool − used memory (3.11 GB here). The 4 GB block of the other games without virtual address
30# memory (256 MB in front + 256 MB alias region + 256 MB stack region + 3.25 GB heap region)
31mem_reserve0x100000000
32mem_alias0x10000000
33mem_stack0x10000000
34app_pool0xCD500000
35sys_resource0x0
36# the rewritten modules are larger than the default 64 MB of used memory (the game's SetHeapSize asks for pool − used)
37mem_used0x6600000
38# ---- Shader split (shader_split.py; the BNSH files in data000.cpk) ----
39shader_groups/shadereff.dat/=eff /shader=core
40shader_noteBayonetta 2 shaders