Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions dm/games/010089D018D18000/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# We Love Katamari REROLL+ Royal Reverie (`010089D018D18000`)

Update 1.0.3 (`v131072`), SDK 14.3.1, on NVN. Unity 2021.3.16f1 (IL2CPP 64-bit ARM), CRIWARE (USM movie playback), and FMOD. Modules `main`, `subsdk0` (NintendoSDK_movie) and `sdk`. 8,245 NVN shaders in UnityFS bundles.

Plays on the Mac at 1080p 60 fps with audio, controller support, and opening movie playback.

## What it needs

| Setting | Where | Why |
|---|---|---|
| `modules main subsdk0 sdk` | [`game.tsv`](game.tsv) | `main` imports movie playback from `subsdk0` and standard runtime services from `sdk` |
| Virtual address memory: `sys_resource 0x1000000`, `mem_reserve 0x140000000`, `mem_alias 0x118000000`, `mem_stack 0x10000000`, `app_pool 0x40000000` | `game.tsv` | the NPDM declares 16 MB of system resource (`IsVirtualAddressMemoryEnabled` is true). `nninitStartup` hands application pool − used memory to StandardAllocator in the alias region. The pool is reported as 1 GB (`0x40000000`) to prevent virtual address space exhaustion |
| AddressRegionManager node area cut (`mov w8, #0x3fe00000` → `mov w8, #0x3e00000`) | `dm/tools/sdk_patches.py` | SDK 14's AddressRegionManager allocates 1 GB of the alias region as its node area; the cut shrinks it to 62 MB, as for Fire Emblem Engage |
| `shader_groups /Data/=data` | `game.tsv` | Unity shaders reside in `Data/StreamingAssets` UnityFS bundles |
| `zip_store .assets:.bundle:.dat:.json:.ress:.metallib` | `game.tsv` | uncompressed storage in the app package for movie streams and large Unity asset packs |

## Shaders

- 8,245 NVN shaders extracted from UnityFS archives via `unityfs.py` and translated to Apple Metal.
- Shader map contains 8,245 entries with 0 conflicts.

## Rendering & Gameplay (Mac)

- Verified on Apple Silicon (M1 / M4): opening cutscenes play cleanly through CRI USM decoder, main meadow renders in 1080p, and gameplay holds locked 60 fps with zero audio underruns.
- Zero unresolved HLE calls or missing symbols on SDK 14.3.1.
1 change: 1 addition & 0 deletions dm/games/010089D018D18000/bf_want.tsv
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# generated
36 changes: 36 additions & 0 deletions dm/games/010089D018D18000/game.tsv
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Game profile of We Love Katamari REROLL+ Royal Reverie (Switch, update 1.0.3 = v131072). Plays on the Mac
# Format: see dm/games/README.md
# Unity 2021.3.16f1 (IL2CPP) with CRIWARE and FMOD, SDK 14.3.1, NVN.

# ---- Identity ----
title_id 010089D018D18000
program_id 010089D018D18000

# ---- App ----
name We Love Katamari REROLL+ Royal Reverie
ipa WeLoveKatamariRerollRoyalReverie.ipa
app_category public.app-category.games

# ---- Versions ----
build v131072 1.0.3 main=9fc7af389b98f61a4a7dca719a0e61f4 subsdk0=75c83c09e25f9a4e60bd960815722e86 sdk=2587a39ac2547a780ec0e4b77e22afab
package v131072
shader_versions v131072

# ---- Files ----
# every module main imports from
modules main subsdk0 sdk
romfs_marker Data/StreamingAssets/aa/Switch/image_assets_all_9b838b1187cca1642cc1d358b459dde9.bundle
zip_store .assets:.bundle:.dat:.json:.ress:.metallib

# ---- Memory ----
# the NPDM declares 16 MB of system resource (virtual address memory) and main sets a heap: a 5 GB block with a large alias region; the heap check sizes the heap region from the heap the game asks for
mem_reserve 0x140000000
mem_alias 0x118000000
mem_stack 0x10000000
app_pool 0x40000000
# the NPDM declares 16 MB of system resource
sys_resource 0x1000000

# ---- Shader split ----
shader_groups /Data/=data
shader_note We Love Katamari REROLL+ Royal Reverie shaders
2 changes: 2 additions & 0 deletions dm/games/010089D018D18000/pso_manifest.tsv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Prewarm seed list (shipped in the app, next to shader_map.tsv). Rows: S<TAB>shader key<TAB>stage / R<TAB>render pipeline key (pso_skey hex) / C<TAB>compute shader key.
# Provisional profile: empty until recorded on the Mac (DM_PSO_MANIFEST=off DM_PSO_RECORD).
1 change: 1 addition & 0 deletions dm/games/010089D018D18000/pso_pairs.tsv
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# kind: evidence vertex / pixel shader pairs of agl program variations (BAHS) that shader_pairs.tsv does not hold, for vertex output padding and the pipeline prebuild (generated by dm/gfx/tools/shader_split.py, do not edit): vertex key <TAB> pixel key
105 changes: 105 additions & 0 deletions dm/games/010089D018D18000/shader_facts.tsv
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# Answer table for translation queries (generated by dm/gfx/tools/shader_split.py, do not edit): key <TAB> fact JSON. This game has no PC version to pair with: only the thread group / shared memory of compute shaders (taken from the control section); other queries get the translator defaults
0397e39352997f1f {"local":[64,1,1],"shared":0}
0682782f64ba10b7 {"local":[64,1,1],"shared":0}
0a734c96b598ba4d {"local":[64,1,1],"shared":0}
0aa49e37e3542cb6 {"local":[32,32,1],"shared":0}
0b0f5f717727c7d3 {"local":[32,32,1],"shared":0}
0c484845783e9592 {"local":[64,1,1],"shared":0}
0d17c9b1f3cf39b3 {"local":[1024,1,1],"shared":32768}
14977115087e0a2a {"local":[64,1,1],"shared":0}
16fe98afe7b6bbd1 {"local":[32,32,1],"shared":0}
186ac5594ee12549 {"local":[64,1,1],"shared":0}
1ad37e4e031668a6 {"local":[64,1,1],"shared":0}
1bc63d86290c21aa {"local":[32,32,1],"shared":0}
1f1fc2dec063ae67 {"local":[64,1,1],"shared":0}
1ff47a1be8517c40 {"local":[64,1,1],"shared":0}
25e7cf40ef56229c {"local":[32,32,1],"shared":0}
2691fee937a7a591 {"local":[32,32,1],"shared":0}
26d2b6d460df2cf9 {"local":[32,32,1],"shared":0}
27facbaacd47d58d {"local":[64,1,1],"shared":0}
32fdfcb71e663ebf {"local":[64,1,1],"shared":0}
35e88fdebcd76203 {"local":[4,4,4],"shared":0}
39774ebc06a50b9b {"local":[32,32,1],"shared":0}
3bc3079300a73ac2 {"local":[64,1,1],"shared":0}
3c0c16d5efe74538 {"local":[64,1,1],"shared":0}
3d3597e2ccb6e26e {"local":[8,8,1],"shared":0}
3e88b2c8e83da788 {"local":[64,1,1],"shared":1024}
4237dede4278927f {"local":[64,1,1],"shared":0}
4317537b74888ded {"local":[64,1,1],"shared":0}
44a4d671cef153e9 {"local":[64,1,1],"shared":0}
455a0fde0da4f071 {"local":[512,1,1],"shared":4096}
4834bbf5b1f1a4f5 {"local":[64,1,1],"shared":0}
4971dc491a14a589 {"local":[32,32,1],"shared":0}
4db16d2739973836 {"local":[64,1,1],"shared":0}
4e6152f99f756c57 {"local":[32,32,1],"shared":0}
4ee3369f5ffb02f0 {"local":[64,1,1],"shared":0}
5013c1fc68e281ff {"local":[8,8,8],"shared":0}
512a31c3f4687a40 {"local":[64,1,1],"shared":0}
51dfadfacf61b49a {"local":[64,1,1],"shared":0}
54ea0460ca2d9e01 {"local":[512,1,1],"shared":0}
552bbc8ffc2459e4 {"local":[4,4,4],"shared":0}
55d1245083f50f7c {"local":[8,8,8],"shared":0}
561a9025971ce518 {"local":[64,1,1],"shared":0}
5b3fab6075a2f707 {"local":[64,1,1],"shared":0}
5b6861ea35608254 {"local":[64,1,1],"shared":0}
5cc2a5a00af990db {"local":[1,8,8],"shared":0}
5f130d5c373d11ab {"local":[64,1,1],"shared":0}
6083d70ecf7a269b {"local":[64,1,1],"shared":0}
622a457ad956d1de {"local":[64,1,1],"shared":1024}
640f90a0f7b3d2ea {"local":[8,1,1],"shared":0}
67301fa4e81a7913 {"local":[64,1,1],"shared":0}
674e432abd724529 {"local":[64,1,1],"shared":0}
67ea94ce659f7080 {"local":[64,1,1],"shared":0}
68d6710724e5c6e8 {"local":[64,1,1],"shared":0}
6bfceb156e04f668 {"local":[64,1,1],"shared":0}
6dcf33ad07108c06 {"local":[64,1,1],"shared":0}
6e5eb397a772b7f6 {"local":[64,1,1],"shared":0}
70bc5a3f7c90b61e {"local":[512,1,1],"shared":0}
75fc2acc91414349 {"local":[64,1,1],"shared":0}
7b0147f3cd3cfb18 {"local":[64,1,1],"shared":0}
7f772fed275d9c31 {"local":[32,32,1],"shared":0}
7fca6c3e55d82372 {"local":[32,32,1],"shared":0}
814fd9314a1fb010 {"local":[256,1,1],"shared":0}
82aec49315f34bee {"local":[256,1,1],"shared":8192}
83bb44b51f3383fa {"local":[4,4,4],"shared":0}
86c0f0251798138f {"local":[64,1,1],"shared":0}
896b9ba7367b8f08 {"local":[64,1,1],"shared":0}
8a02407e7c0e89a7 {"local":[64,1,1],"shared":0}
8b9394bc20053e48 {"local":[64,1,1],"shared":0}
8d0d7a65098c851b {"local":[64,1,1],"shared":0}
8e0bbbac98da2db1 {"local":[64,1,1],"shared":0}
91387e8c06501b2e {"local":[8,1,8],"shared":0}
9217b1ce0f3e59a7 {"local":[256,1,1],"shared":8192}
93cba607fc3a5495 {"local":[64,1,1],"shared":0}
9a67576fea3bf84a {"local":[64,1,1],"shared":0}
a2130c265c3cb862 {"local":[64,1,1],"shared":0}
a79fe6d8542e7277 {"local":[32,32,1],"shared":0}
acab3a7d63714d5a {"local":[1024,1,1],"shared":32768}
b2314b69b48522d4 {"local":[64,1,1],"shared":0}
b3e69a14f374209c {"local":[32,32,1],"shared":0}
b5ce06f92e6ab26d {"local":[1024,1,1],"shared":32768}
b76dea19a82ee4ab {"local":[32,32,1],"shared":0}
b81a895c52a5ac15 {"local":[64,1,1],"shared":0}
ba598dc9c362df6a {"local":[64,1,1],"shared":0}
bad6621f9045da81 {"local":[64,1,1],"shared":0}
be1278eef959a77e {"local":[1024,1,1],"shared":32768}
bfe7c21f90a24aa7 {"local":[4,4,4],"shared":0}
c15fda7f3b33412a {"local":[4,4,4],"shared":1280}
cb2b5c5341fc0161 {"local":[64,1,1],"shared":0}
cfaecd222549c5eb {"local":[4,4,4],"shared":0}
d2302d6887329b38 {"local":[512,1,1],"shared":4096}
d48fd811c52959c3 {"local":[64,1,1],"shared":0}
d50be1885dd1635e {"local":[64,1,1],"shared":0}
d516421e219affb9 {"local":[64,1,1],"shared":0}
d8c6cc3a735f47eb {"local":[64,1,1],"shared":0}
db84b792218d0450 {"local":[64,1,1],"shared":0}
dbbb707dd8d269d6 {"local":[16,1,1],"shared":0}
e3416de733b9dcdb {"local":[4,4,4],"shared":0}
e38f41b5e3cecbd2 {"local":[64,1,1],"shared":0}
eaf618467603f288 {"local":[64,1,1],"shared":0}
ee3d650fb0e6b7b0 {"local":[32,32,1],"shared":0}
f301ed68b8609ebf {"local":[8,8,8],"shared":0}
fb87dcac28efc45b {"local":[4,1,1],"shared":0}
fc9bf5ec2cc627ee {"local":[8,8,8],"shared":0}
fd62890863e2c251 {"local":[64,1,1],"shared":0}
fde0f6bba46755df {"local":[64,1,1],"shared":0}
Loading
Loading