The NVN driver's constant segments have the same layout in every game, so the nvn_* profile keys are gone. Combined textures are at c2 0x20 + 8 r (a slot past 31 shares the image table; Hades II binds 34), images at 0x120, separate textures at 0x168 (now always the host's slots 128 + n, as Monster Hunter Rise had them), samplers at 0x568, and the storage buffer tables at c0 0x110 / 0x310 / 0x510. dmsh_build.py decodes with that layout, the replay fills both texture tables, and the translator numbers slots the same way (rebuilt; its SPIR-V and reflection are byte-identical on 1,491 sample shaders, lock updated). The shader_* switches and graphics are gone too; the build reads them from the files (profile_guess.py shader_sources): - Vulkan when main imports Vulkan and not NVN; its capture when the RomFS has no SPIR-V. - A GLSLC capture when main holds GLSL sources and imports glslcCompile. - An Oodle decode for Unreal paks, and the tool-mode decoder for Trinity packs. - GLSLC outputs from every main. - A cover pairing for each single-stage vertex shader (GLSLC, Unreal). build_ipa.sh takes GFXAPI from the NSP script. Also removed: the last D2R pieces (the embedded-shader path in dmsh_build.py, dmsh_facts.py --freeze / --check, maxwell_refs.py, ref/hle_hid_d2r.c). Chain: every profile's dmsh_chain.h is regenerated. The c1_full lists are carried over: the change touches no c1 read, and the rebuilt Octopath Traveler 0, Hades II, Unicorn Overlord and Rhythm Heaven Groove gave the same lists, identical tables and the same reflection apart from separate texture slots + 128. Still to do: - Run the chain procedure for the other NVN profiles. - Engage's and Three Houses' shader tables need a new split: Engage gains Unity's 11 GLSLC shaders in main, and Three Houses' 17 BNSH vertex shaders lose their cover pairs. - Ace Attorney's new tables are in, but its libraries are not rebuilt.
3.1 KiB
3.1 KiB
| 1 | # Game profile of Monster Hunter Rise (Switch, base game cartridge dump v0 + update 16.0.2 = v2228224, Sunbreak included) | |||||
|---|---|---|---|---|---|---|
| 2 | # Format: see dm/games/README.md | |||||
| 3 | # Capcom's RE Engine on SDK 11.4.3 (the same sdk / subsdk0 builds as Metroid Dread and 13 Sentinels), NVN. Everything lives in RE Engine PAK archives (re_chunk_000.pak + 16 patches, 19.6 GB, KPKA v4, | |||||
| 4 | # zstd / deflate entries); the shaders are its SDF definitions inside them (shader_split.py kpka_jobs / sdf_shaders: 63,111 shaders, 102,345 vertex / pixel pairs). main is 314 MB (125 MB of text), | |||||
| 5 | # so the rewriter puts its patch area right before the base (patch_nso.py BIG_TEXT). The GPU heap is one 64 GB sparse virtual memory pool (hle_nvn.c vpool_*) | |||||
| 6 | # ---- Identity ---- | |||||
| 7 | title_id | 0100B04011742000 | ||||
| 8 | program_id | 0100B04011742000 | ||||
| 9 | # ---- App ---- | |||||
| 10 | # Game name: only a label for profile listings and the Mac window title; the iOS app name is the game name in the base game's control data, and the bundle ID comes from the base game title ID | |||||
| 11 | name | Monster Hunter Rise | ||||
| 12 | ipa | MonsterHunterRise.ipa | ||||
| 13 | app_category | public.app-category.action-games | ||||
| 14 | # a 3D action game: camera on the right stick, item bar on the D-pad | |||||
| 15 | pad_layout | full | ||||
| 16 | # ---- Versions ---- | |||||
| 17 | # only the merged 16.0.2 copy is extracted | |||||
| 18 | build | v2228224 | 16.0.2 | main=c9a3dd7702075ecd90101f4555389582 | subsdk0=507f19d1240d09d00992248e8a0fd77e | sdk=2d369d9999e3e10e665106f840ffff9b |
| 19 | package | v2228224 | ||||
| 20 | shader_versions | v2228224 | ||||
| 21 | # ---- Files ---- | |||||
| 22 | # load order as on Horizon: main, subsdk*, sdk (subsdk0 = NintendoSDK_movie 11.4.3: the opening movies are H.264 into an NVN texture with AAC 5.1 sound) | |||||
| 23 | modules | main subsdk0 sdk | ||||
| 24 | romfs_marker | re_chunk_000.pak.patch_001.pak | ||||
| 25 | zip_store | .pak:.metallib | ||||
| 26 | # ---- Graphics ---- | |||||
| 27 | # RE Engine fills small textures from the CPU in place (the menu cursor's 8 × 8 BC1 texture: 32 bytes written into a CPU-visible pool, no packaged layout, no WriteTexels), so they must be uploaded | |||||
| 28 | # from guest memory (without these keys the cursor highlight composited black on black and the menus looked frozen) | |||||
| 29 | tex_flush_upload | on | ||||
| 30 | tex_dirty_upload | on | ||||
| 31 | # 60 fps (30 on the Switch): the host raises RE Engine's frame limit from 30 to 60 (hle_fpslock.c, FPSLocker's address for this build); the game still asks for present interval 2, | |||||
| 32 | # which display mode ignores. The game steps by the time that really passed. DM_FPS_TARGET=30 (Documents/env.txt on the iPhone) keeps 30 and saves power | |||||
| 33 | fps_target | 60 | ||||
| 34 | present_interval | display | ||||
| 35 | # ---- Memory ---- | |||||
| 36 | # The NPDM declares no system resource, so there is no virtual address memory: the game sizes its heap as pool − used memory with SetHeapSize. 4 GB block: 256 MB alias, 256 MB stacks, 3.25 GB heap region | |||||
| 37 | mem_reserve | 0x100000000 | ||||
| 38 | mem_alias | 0x10000000 | ||||
| 39 | mem_stack | 0x10000000 | ||||
| 40 | app_pool | 0xCD500000 | ||||
| 41 | # SetHeapSize asked for the pool − 64 MB − bss (0xc9000000) with the default, but the loaded modules take 0x13fa4000 (main alone 314 MB of text + ro + data), so the request failed at boot: | |||||
| 42 | # used memory must cover them, as on hardware. With 328 MB the heap is 2.88 GB | |||||
| 43 | mem_used | 0x14800000 | ||||
| 44 | # ---- Shader split ---- | |||||
| 45 | shader_groups | re_chunk=sdf | ||||
| 46 | shader_note | Monster Hunter Rise shaders |