Skip to content

Port Nintendo Switch Sports Resort (04008E001F098000, Switch 2): its profile, note, games-table row and README line; on the Mac it plays its menus, motion calibration and matches with a Joy-Con 2 or a DualSense - #2387

Closed
bymaxmarc wants to merge 2 commits into
seedds:mainfrom
bymaxmarc:pr/game-sports-resort

Conversation

@bymaxmarc

@bymaxmarc bymaxmarc commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

To be taken after the host PRs it depends on (listed in the note's "Depends on" and below); the branch itself is off main and touches only the profile and docs.

What and why

Nintendo Switch Sports Resort, update v65536 (the whole game, packed from a NUP with no base game), SDK 22.2.10 built for the Switch 2 (Ounce), Nintendo EPD's sead / agl / gsys with Havok, NVN2.

  • Profile dm/games/04008E001F098000/: the NSP script's provisional game.tsv (its heap and address-region checks: sys_resource, mem_reserve, mem_alias, mem_stack, app_pool) plus depth_mode zero and render_cond on; the shader tables the script generates (shader_map.tsv, shader_facts.tsv, shader_pairs.tsv, pso_pairs.tsv, bf_want.tsv, shader_map.tsv.conflicts.tsv: the same kinds of file as PRAGMATA's profile, no extracted game data); and pso_manifest.tsv with the 31 task / mesh pipelines the offline archive cannot hold (22 from the device list over boot, menus and sports, 9 more from a 37-minute session that built them at their first draw for up to 0.8 s each). No patch, no rewriter cut.
  • Note dm/games/04008E001F098000/README.md: the tested build and device, what each key is for, the pipelines, frame rate and scene loads, motion controls, the Mac route, what is open, and the PRs it depends on.
  • Its row in the games table and its line in README's Switch 2 list. The Home button protection entry of services.md, which already named the game, links the note.

Depends on: #2376, #2377, #2380 (boot and saves); #2384, #2385, #2386 (controllers and motion); #2373, #2375, #2372 (pictures); #2371, #2374, #2378, #2379 (pipelines and frame time); #2381 (diagnostics). Their reference entries name the game without a link while it has no note on main; once both are in, the links and the note's "Found on this game" lines can be added (I can send that as a follow-up).

Remaining limitations, as the note records them: the model heaps the game sizes from its resource size table are overrun by the host's command records, and the sessions still ran with the DM_ROMFS_OVERLAY stopgap (patched resource size tables in the player's env.txt, outside the repository); the system data 0400000000000849 the game mounts as MiiResource is not present on the host (a red line; nothing visibly missing noticed); six AnnaSea mesh shaders are refused (task payloads over Metal's 16 KB); the court's first frame takes about 225 ms (scene loads); iPhone and iPad not built.

Checked

  • Tests on this branch (main ccd834e + 1 commit), Apple-silicon Mac (M2 Max, 32 GB), macOS 27.2:
    • dm/tools/tests/test_game_profile.py: 7 tests OK; test_docs.py: 6 tests OK.
    • python -m unittest discover -s dm/tools/tests: 1,469 tests OK (27 skipped).
    • make -k -C dm/gfx/tests GAME=04008E001F098000 -j8 run: every test passes (the CPU and Metal tests, with this profile's header).
  • Games run: Nintendo Switch Sports Resort 04008E001F098000 v65536 on the user's Mac (M2 Max, macOS 27.2), as a Mac app with its full offline pipeline archive (710.7 MB), built from the fork's work branch (an earlier main plus the PRs above): boot, menus, the motion calibration, and matches with motion from a right Joy-Con 2 (Bluetooth LE, DM_SW2=1) and from a DualSense, confirmed by the user. The latest, a 37-minute session on 2026-11-11 with the Joy-Con 2: no error, no compute pipeline built at run time, frame time p50 33.3 ms (the game presented at 30 fps there); earlier, the tennis match at 60 fps (p50 16.67 ms, p95 17.2 ms). Red lines in the latest session log of 2026-11-11: the MiiResource mount, two texture type mismatch lines (noted as open) and one audio device stall of 213 ms (the silent sink stood in).
  • Not run: the game from this branch (it needs the PRs above; the profile was taken unchanged from the work branch, so no new build was made from it), scripts/regress.py (no host change here), iPhone / iPad (no IPA built), sports other than tennis in a scripted route.

Docs

  • The finding is in its game note; the games table and README list are updated; python3 dm/tools/docs_symptoms.py was run (no change)
  • No game files, keys or data extracted from a game in the change or the attachments (the shader tables hold hashes, sizes and resource paths, as every profile's)

bymaxmarc and others added 2 commits November 11, 2026 21:19
…001F098000, Switch 2)

Nintendo Switch Sports Resort, update v65536 (the whole game, packed from a
NUP), SDK 22.2.10 built for the Switch 2, Nintendo EPD's sead / agl / gsys
with Havok, NVN2. On an Apple-silicon Mac (M2 Max, 32 GB), macOS 27.2, as a
Mac app with its full offline pipeline archive (710.7 MB), it boots, goes
through the menus and the motion calibration, and plays matches with motion
from a right Joy-Con 2 or a DualSense, with the host changes its note lists
under Depends on (each its own pull request).

The profile is the NSP script's provisional one (its heap and address-region
checks: sys_resource, mem_reserve, mem_alias, mem_stack, app_pool) plus
depth_mode zero and render_cond on, the shader tables the script generates
(shader_map, shader_facts, shader_pairs, pso_pairs, bf_want, the map's
conflicts) and a prewarm list of the 31 task / mesh pipelines the offline
archive cannot hold. No patch, no rewriter cut. The note records what each
key is for, the pipelines, frame rate and scene loads, the motion controls,
the Mac route and what is open: the DM_ROMFS_OVERLAY stopgap for model heaps
sized from the resource size table, the MiiResource system data
0400000000000849 the host does not have, six AnnaSea mesh shaders whose
task payloads are over Metal's 16 KB, the court's first frame (about
225 ms), iPhone and iPad not built. Its row in the games table, its line
in README's Switch 2 list; the Home button protection entry links the note.

Checked: test_game_profile, test_docs: OK; the tool tests (1,469, 27 skipped)
pass; make -k -C dm/gfx/tests GAME=04008E001F098000 run passes. The
game: sessions on the user's Mac on the fork's work branch (an earlier main
with the dependencies), the latest a 37-minute session on 2026-11-11 with
a Joy-Con 2 (R) over Bluetooth LE: no error, no compute pipeline built at
run time, frame time p50 33.3 ms; tennis earlier at 60 fps (p50 16.67 ms).
On main alone the game does not run: it needs the PRs its note lists.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@FifteenPen

FifteenPen commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

How does this differ from #2107? Looks like you went and did a bunch of stuff I already did.

seedds added a commit that referenced this pull request Nov 12, 2026
…ts its profile, note, games table row and README line: it boots from a dump folder through the safety and strap screens, the title, Select User and the sport menu into a doubles tennis match at 60 fps on the M6 (frame time p50 16.67 / p95 17.3-17.9 ms, CPU about 92% of one core), and starts again from its save; bymaxmarc played matches with motion from a Joy-Con 2 and a DualSense in a 37-minute Mac session (PR #2387). The profile is the NSP script's provisional one (heap check: a 7.47 GB heap, mem_reserve, depth_mode zero; address regions alias +2.82 GB of 4.38 GB in the first 15 s) with render_cond on: the game wraps draws in render conditions, and drawn anyway, Select User's background is grey instead of the court and the outfits black (in the menus only; FifteenPen measured the outfit material reading 0 from R and A of a shadow target the menu blurs under a channel mask of G and B). With the key both are right on the same route from the same save (A/B on the M6), so PR #2273 (a clear under a partial channel mask keeps the other channels) is not needed: what a console does there is not in the game's files, its nvnCommandBufferClearColor (sdk+0x652380) jumps through a pointer the system's NVN driver fills. The shader tables are the build's, byte for byte both port PRs'; pso_manifest.tsv is this Mac's own recording (3,474 shaders, 1,868 render, 41 compute and 22 task / mesh pipelines over a first start, the menus and a match), since none of the PRs' render or mesh pipeline keys matches the current host's. No game patch and no rewriter cut. The reference entries that name the game link its note; the conditional rendering entry lists it. Checked: test_docs, test_nsp_chain, test_env_switches, test_patches; the host test suite (make -k -C dm/host/tests run, 50 programs, 0 failed), check_t_pfv under Metal validation, test_dmsh_ampere_mem with the committed translator (86); lint_python (nothing new) and lint_c tidy on the changed C files (at the baseline after the fixes folded into their commits); regress.py check against 96259d4 (one run per side, headless, M6): Bastion 59.7 / 58.3 fps, its 70 s shot's purple border an old flake of both sides (the same colour in 10 of 19 earlier runs, origin/main's included), Obra Dinn 59.5 / 59.8 fps, CHANGED by animation phase, 0 changed MSL and no new red line on either. Not run: a point played on this Mac (the keyboard cannot serve: Shake and the ten scripted moves of PR #2386 move the racket but do not serve), sports other than tennis, the iPhone.

Co-authored-by: FifteenPen <354289956+FifteenPen@users.noreply.github.com>
Co-authored-by: bymaxmarc <354601562+bymaxmarc@users.noreply.github.com>
@seedds

seedds commented Nov 12, 2026

Copy link
Copy Markdown
Owner

Landed on main as f4b7e77 (profile, note, games table row and README line), with you credited as co-author: game.tsv keeps your comments and render_cond, and the note cites your 37-minute session with real controllers. Taken from your set: #2376, #2377, #2380, #2384, #2385 and #2375. The shading-rate fix landed from FifteenPen's #2103 instead of #2373 (the same value in EmitSReg, which both instruction sets reach). DM_ROMFS_OVERLAY was not needed on current main: a doubles match loaded with its NPCs. pso_manifest.tsv is a list recorded on the current host, since the earlier lists' pipeline keys no longer match it. #2386 is answered on its own page; #2371, #2372, #2374, #2378, #2379 and #2381 are still to be judged on their own. Thank you!

@seedds seedds closed this Nov 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants