Files
seedds 933b67590c Port OCTOPATH TRAVELER 1.0.5 (Unreal Engine 4.18, SDK 3.5.1)
Profile 010057D006492000 (no virtual address memory: the 4 GB heap layout; tex_flush_upload and tex_dirty_upload for the textures Unreal writes from the CPU into uncached pools after creating them) and its note. Brought up on the Mac through the boot, the language notice, the title, the traveler selection and Ophilia's and H'aanit's openings (free play in the cathedral and in S'warkii) at 30 fps; battles, sound and the iPhone not yet tested.

General changes found on it:
- patch_nso.py: a jump table whose index is bounds-checked with a 64-bit cmp (main+0x1676f58), accepted only in the last pass so earlier rewrites are byte-identical.
- profile_guess.py: Unreal's 64 GB alias layout only with virtual address memory (this game sets a 3.08 GB heap instead).
- NVN: nvnTextureBuilderGetSparseTileLayout / nvnTextureGetSparseTileLayout (Unreal sizes a sparse texture's mip tail with it; unimplemented, it asked for 1.75 GB twice); sparse 2D textures without a packaged layout take the block height of their 64 KB tile (the world map's tiles were shuffled); every virtual pool gets an address range of its own until its first mapping decides between the alias (a whole-pool mapping, Mario's pool) and the sparse page table (Unreal's one-texture pools, mapped piece by piece: streamed textures were black and later mappings refused).
- Audio renderer: SdkMutexType is looked up only when the SDK uses it (SDK 3.5.1 takes LockMutex at +0x1f8).

README: the gallery entry (Mac screenshot of S'warkii, IPA ~3.6 GB, all 5,434 shaders built for iOS); AGENTS.md: seventy-one games.

Checked on the rebased tree: the tool tests (15 skipped), the docs tests, a Mac boot into the traveler selection; before the rebase the graphics tests (make run, exit 0).
2026-10-26 21:25:17 +08:00

2.3 KiB

1# OCTOPATH TRAVELER: Square Enix / Acquire, Unreal Engine 4.18 (++UE4+Release-4.18; legacy version 4 paks), SDK 3.5.1, NVN, CRIWARE (ADX2 sound, a USM movie); update 1.0.5.
2# Started from the NSP script's provisional profile (dm/games/profile_guess.py) and brought up on the Mac (docs/agents)
3# ---- Identity ----
4title_id010057D006492000
5program_id010057D006492000
6# ---- App ----
7nameOCTOPATH TRAVELER
8ipaOctopathTraveler.ipa
9app_categorypublic.app-category.role-playing-games
10# ---- Versions ----
11buildv3276801.0.5main=67dacc049ceee8585b1583336c565b43subsdk0=798c30e126697f2222cf843f78f5c140sdk=ae34e75d02925f4417b24499ad80c394
12packagev327680
13shader_versionsv327680
14# ---- Files ----
15# subsdk0 is NintendoSDK_movie (main imports from it)
16modulesmain subsdk0 sdk
17romfs_markerKingship/Content/Paks/Kingship-Switch.pak
18zip_store.awb:.pak:.usm:.metallib
19# ---- Input ----
20# menus and the battle commands take the D-pad
21pad_layoutfull
22# ---- Memory ----
23# The NPDM declares no system resource, so there is no virtual address memory: this Unreal Engine 4's nninitStartup sets a heap of pool − used (3.08 GB) and runs on it, with no
24# engine address region. The 4 GB block of the games without virtual address memory: 256 MB in front + 256 MB alias region + 256 MB stack region + 3.25 GB heap region
25mem_reserve0x100000000
26mem_alias0x10000000
27mem_stack0x10000000
28app_pool0xCD500000
29sys_resource0x0
30# the rewritten modules (about 120 MB) are larger than the default 64 MB of used memory the game takes off the pool for its heap
31mem_used0x8000000
32# ---- Textures ----
33# Unreal loads its textures from the CPU straight into CPU-uncached pools after creating them and never flushes (its UI images, the world map, the sprite sheets): without both keys
34# they stay black or missing (the language notice's pictures, the title logo, the whole traveler selection), as for FINAL FANTASY TACTICS - The Ivalice Chronicles
35tex_flush_uploadon
36tex_dirty_uploadon
37# ---- Shader split ----
38# The engine's global shaders (Engine/GlobalShaderCache-GLSL_SWITCH.bin), the engine's own materials and the game's. Unreal Engine 4 keeps every shader inline in the cooked packages,
39# zlib-compressed, inside legacy paks whose blocks are zlib-compressed too (shader_split.py ue_legacy_jobs)
40shader_groupsGlobalShaderCache=global #Engine/=engine #Kingship/=game
41shader_noteOCTOPATH TRAVELER shaders