Files
nxnative-easy/dm/games/01002B00111A2000/game.tsv
T
seedds f4f0a85d6e patch_nso.py split into the general rewriter and per-build patch files (GitHub issue #63): every game's bring-up edited the one file, so PRs for unrelated games conflicted. dm/tools/patch_nso.py (1,711 → about 1,100 lines) keeps the general passes and the driver; the instruction encoders move unchanged to dm/tools/nso_asm.py; a game's own patches (CUTS, OBS and the frame-step stubs, now FRAME_STEP = {build ID: stub(ctx)}) move verbatim with their comments to dm/games/<id>/patches.py (16 profiles: Tears of the Kingdom, Breath of the Wild, Age of Calamity and Paper Mario: The Thousand-Year Door with their stubs), and the cuts of Nintendo's sdk module builds, 6 of the 15 shipped by 2 to 4 games, to dm/tools/sdk_patches.py. The rewriter loads every patch file, whatever the game, and applies those of a module's build ID at the points it did before (cuts before the scan, gates after the rewrite, stubs after the gates); a build ID claimed twice stops it, and its command line needs no DM_GAME. build_src.sha256 lists the rewriter's files and every patch file (the same for every module). NSP script: the rewrite step's reuse key counts nso_asm.py and only the patch files that name one of the game's builds (patch_files), profile_files leaves patches.py out (only the rewrite step reads it), and a derived profile gets none. dm/tools/tests/test_patches.py: no build claimed twice, the entries' forms, a game's file names only its own profile's non-sdk builds, sdk_patches.py only sdk builds some profile ships, and the reuse key's patch files. Checked byte-identical: every extracted module on the game drive (131 builds) rewritten with the previous and the new rewriter gives the same outputs but build_src.sha256, 28 of the 30 patched builds among them (all four frame-step mains), and 7 fail alike (rtld, and New Super Mario Bros. U Deluxe's, which no profile rewrites); the other two (Super Mario Bros. Wonder's mains and Absolum's, no game files here) by their CUTS / OBS data, equal to the previous tables. AGENTS.md, docs, dm/games/README.md, the profiles' comments and the host comments that named a game's cut in patch_nso.py now name its patches.py or sdk_patches.py
2026-10-23 23:36:21 +08:00

4.2 KiB

1# Hyrule Warriors: Age of Calamity (Koei Tecmo's KTGL engine on NVN, SDK 9.6.0), update v327680 = 1.3.0.
2# RomFS: Koei Tecmo RDB archives (asset/*.rdb index + asset/*.rdb.bin* data, asset/data/*.file), a run of IDRK entries with zlib in chunks.
3# The shaders are GLSLC compiler outputs: 118 in main and the rest in KTGL's G2S containers inside the RDB data files (shader_split.py idrk_shaders).
4# ---- Identity ----
5title_id01002B00111A2000
6program_id01002B00111A2000
7# ---- App ----
8nameHyrule Warriors: Age of Calamity
9ipaHyruleWarriorsAgeOfCalamity.ipa
10app_categorypublic.app-category.action-games
11# camera on the right stick
12pad_layoutfull
13# ---- Versions ----
14buildv3276801.3.0main=c3cf52bf2b05d7310884971b50bcccb8subsdk0=3ab92c3444d4ece2f52417b5d8ee86ebsdk=95832210b36121e88b4f9b7b66239dad
15packagev327680
16shader_versionsv327680
17# ---- Files ----
18# subsdk0 is Nintendo's movie library (NintendoSDK_movie, as in Metroid Dread)
19modulesmain subsdk0 sdk
20romfs_markerasset/MaterialEditor.rdb.bin
21zip_store.bin:.bin1:.bin2:.bin3:.file:.rdb:.webm:.metallib
22# ---- Memory ----
23# The NPDM declares no system resource (META +0x14 = 0): the game uses SetHeapSize. Link's Awakening's partition until measured
24mem_reserve0x100000000
25mem_alias0x10000000
26mem_stack0x10000000
27app_pool0xCD500000
28# The game sizes its heap as total − used memory (nninitStartup, main+0x8ad318), and SetHeapSize must then fit beside the code: the three modules take 66.6 MB (68 MB rounded), more than the
29# 64 MB the host reports by default. SetHeapSize(pool − 64 MB) failed with ResultLimitReached, AllocateMemoryBlock returned 0x1003, the game's malloc was never set up, the 866 MB
30# graphics heap allocation failed (main+0x8aeb4c) and nnMain returned at once. 72 MB = the image plus stacks: the heap is 0xc8c00000 (3212 MB) and the game's fifteen sub-heaps (3098 MB) fit
31mem_used0x4800000
32# ---- Textures ----
33# Movie frames (VP9, NV12 to a buffer): the game copies each frame into a 1280x720 R8 and a 640x360 RG8 texture in a CPU-visible pool and publishes them with
34tex_flush_uploadon
35# ---- Presentation ----
36# The Switch version shows 30 fps and steps the game a fixed amount per update: a KIDS task waits out 1/30 s and steps the game clock by 1/30 s, the battle steps 1 / the game's frame-rate
37# block (30.0), and the event scripts step by the KTGL device's frame rate (59.94 / present interval 2). On 1.3.0 main (patches.py FRAME_STEP) three stubs run the updates at the cap
38# and set all three to it (with only a 1/60 s wait the clock and the battles ran at twice real time); the host paces the presents at 60 fps, 30 when 60 does not hold.
39# 0 = the Switch original
40fps_target60
41# The updates step by the cap whatever the hold, so holding late frames only paces the screen: frames are shown as soon as they are ready (the 60fps IPA ran battles at 45–57).
42# The iPhone battle's GPU going from 10 to 41 ms a frame was first read as its GPU clock following the hold; the same rise came with no hold at all: the battle runs about 1,000 to
43# 2,800 compute dispatches a frame after its first cutscene, which each had an encoder of their own (nvn_mtl.m dispatch_enc)
44fps_holdoff
45# KTGL binds whole mesh pools (up to ~590,000 vertices) and its soldiers' Half2 / Short2 attributes feed integer shader inputs, which the replay converts on the CPU:
46# over the bound ranges that was millions of vertices a frame in battle (26 fps at any target on the Mac); only over the vertices each draw reads. Shadow vertex inputs
47# (nvn_mtl.m vin_on) now take those attributes on the GPU; this still serves the draws that keep the CPU conversion (transform feedback, DM_NVN_VCONV_CPU=1)
48vconv_rangeon
49# ---- Shader split ----
50shader_groups/asset/system.rdb=system /asset/MaterialEditor.rdb=material /asset/FieldEditor4.rdb=field /asset/CharacterEditor.rdb=character /asset/EventMaker3.rdb=event /asset/ScreenLayout.rdb=layout /asset/RRPreview.rdb=preview /asset/KIDSSystemResource.rdb=kids
51shader_noteHyrule Warriors: Age of Calamity shaders