- Nintendo EPD's engine (code name Park; sead / agl / gsys, NintendoWare, Havok, Pia and NEX) on NVN; 9,766 BNSH shaders in zstd and Yaz0 SARC files and main, the in-flight movie VP9 + Vorbis through movie::Extractor, the Happy Home Paradise add-on mounted. A new game runs through Tom Nook's counter, the movie and the island's creation to the player on the dock at 30 fps; not yet seen: a save, which the game first makes at the end of day 1 - Yield back-off, for every game: a yield whose caller's x19–x28 moved since the last one is progress (the SDK's YieldThread reaches the SVC through tail branches, so they are the loop's own): it returns at once with no host call and the run starts again; polls keep those registers and back off as before. The game's SaveProc builds a new island in grid walks that yield once per cell: 77 s of black screen after the movie, now about 10 s. Breath of the Wild's PlacementMgr and RadarMgr yield per batch item too: outdoors on the Mac CPU energy 0.35–0.74 → 0.21–0.34 W, CPU 76–83% → 96–106% of a core, frame interval p99 19 → 20–21 ms - Rewriter, for every game: halfword jump tables get landing pads up to their largest entry (half_count), not all 65,536: this main's patch area went from 42 MB, out of a branch's reach, to 7.9 MB; the other games' modules change only in such tables - Host: main's own HIPC client for olsc:u (cloud backup settings) is answered by host sessions (hle_sf.c); device save data is the host save directory, and a second mount name over one save shares its transaction; Commit with a CommitOption, GetSaveDataRestoreFlag; the adjustable user clock, GetStandardSteadyClockCurrentTimePoint, oe::GetRegionCode, SDK 20's album share calls; video movie decoders keep 16 output slots (the game's player holds every one it is offered) - Profile: render_cond on (the game skips clears with conditional rendering; without it every frame was black), pad_layout full, mem_used 122 MB, the prewarm list recorded from boot to the dock, the chain header and tables for the current chain version
3.2 KiB
3.2 KiB
| 1 | # Game profile of Animal Crossing: New Horizons (Switch, base game v0 + update 3.0.3 = v2228224, with the Happy Home Paradise add-on). In bring-up | |||||
|---|---|---|---|---|---|---|
| 2 | # Format: see dm/games/README.md | |||||
| 3 | # Nintendo EPD's engine (code name Park; sead / agl / gsys, NintendoWare G3d / Ui2d / Vfx2 / Atk / Font, Havok, Pia and NEX for local and online play) on SDK 20.5.4, NVN; | |||||
| 4 | # modules main + subsdk0 (NintendoSDK_movie) + sdk. RomFS: 97,997 zstd files (.zs, most of them models), BWAV sound, a few Yaz0 SARC archives (.szs), and the in-flight movie | |||||
| 5 | # Movie/OpeningMovie.webm (VP9 + Vorbis through movie::Extractor and movie::Decoder, hle_movie.c). | |||||
| 6 | # Shaders: bfsha and agl sharcb in Shader/*.szs (Park_UBER_All: 3,385), System/Agl/agl_resource (sharcb), particle effects in Effect/*.szs, models' own bfsha in Model/*.zs, | |||||
| 7 | # layouts (bgsh) in Layout/*.zs, the game's software keyboard in Swkbd/, and 40 in main. Its keyboard's ocean background has 8 geometry shaders, which do not translate | |||||
| 8 | # ---- Identity ---- | |||||
| 9 | title_id | 01006F8002326000 | ||||
| 10 | program_id | 01006F8002326000 | ||||
| 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) | |||||
| 13 | name | Animal Crossing: New Horizons | ||||
| 14 | ipa | AnimalCrossingNewHorizons.ipa | ||||
| 15 | app_category | public.app-category.simulation-games | ||||
| 16 | # the virtual gamepad starts in the 3D layout: the D-pad holds the tool ring and the right stick turns the camera | |||||
| 17 | pad_layout | full | ||||
| 18 | # ---- Versions ---- | |||||
| 19 | # only the merged 3.0.3 copy is extracted; the base game's own build IDs are added when needed | |||||
| 20 | build | v2228224 | 3.0.3 | main=ff1d1c05670db6021c85b624a710b963 | subsdk0=6c6ceace7be94107a8bd440bc2d60704 | sdk=a226048605d3597f90cb1067d141cd36 |
| 21 | package | v2228224 | ||||
| 22 | shader_versions | v2228224 | ||||
| 23 | # ---- Files ---- | |||||
| 24 | # load order as on Horizon: main, subsdk*, sdk (subsdk0 = NintendoSDK_movie) | |||||
| 25 | modules | main subsdk0 sdk | ||||
| 26 | romfs_marker | Movie/OpeningMovie.webm | ||||
| 27 | zip_store | .barslistpack:.bwav:.pack:.srsizetable:.szs:.webm:.xtx:.zs:.metallib | ||||
| 28 | # ---- Memory ---- | |||||
| 29 | # The NPDM declares no system resource (META +0x14 = 0): nninitStartup sets a heap. The 4 GB block of the other games without virtual address memory | |||||
| 30 | # (256 MB in front + 256 MB alias region + 256 MB stack region + 3.25 GB heap region) | |||||
| 31 | mem_reserve | 0x100000000 | ||||
| 32 | mem_alias | 0x10000000 | ||||
| 33 | mem_stack | 0x10000000 | ||||
| 34 | app_pool | 0xCD500000 | ||||
| 35 | sys_resource | 0x0 | ||||
| 36 | # The rewritten modules are larger than the default 64 MB of used memory (main alone is 63 MB of text and 15 MB of bss): 122 MB, as the NSP script's guess after the rewrite, | |||||
| 37 | # which leaves a 3.09 GB heap | |||||
| 38 | mem_used | 0x7a00000 | ||||
| 39 | # ---- Shader split (shader_split.py; BNSH in bfsha / sharcb / ptcl / bgsh, in zstd and Yaz0 SARC files, and main) ---- | |||||
| 40 | shader_groups | /Shader/=shader /System/=system /Effect/=effect /Model/=model /Layout/=layout /Swkbd/=swkbd | ||||
| 41 | shader_note | Animal Crossing: New Horizons shaders | ||||
| 42 | # ---- Graphics ---- | |||||
| 43 | # The game wraps its clears in render conditions that skip a target nothing drew into since its last clear: without the key, four clear-only passes wiped the composite before | |||||
| 44 | # the window copy at frame 900, and every frame came out black (the island probe and the loading icon were drawn into render targets) | |||||
| 45 | render_cond | on |