3.0 KiB
3.0 KiB
| 1 | # OCTOPATH TRAVELER 0: Square Enix, Unreal Engine 5 (the paged global distance field shaders and the LowLevelTasks task system; mobile renderer, SF_GLSL_SWITCH_MOBILE shaders), SDK 19.3.13, NVN, CRIWARE sound and movies; 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 ---- | |||||
| 4 | title_id | 01005270232F2000 | ||||
| 5 | program_id | 01005270232F2000 | ||||
| 6 | # ---- App ---- | |||||
| 7 | name | OCTOPATH TRAVELER 0 | ||||
| 8 | ipa | OctopathTraveler0.ipa | ||||
| 9 | app_category | public.app-category.games | ||||
| 10 | # ---- Versions ---- | |||||
| 11 | build | v327680 | 1.0.5 | main=9fe60a212cff9b9a3656ab63d4f882e5 | subsdk0=ca7f78a09c547c54beac3a33ed6bf364 | sdk=7bba185a35ee9b4d0af66a4df910a823 |
| 12 | package | v327680 | ||||
| 13 | shader_versions | v327680 | ||||
| 14 | # ---- Files ---- | |||||
| 15 | # subsdk0 is NintendoSDK_movie (main imports from it) | |||||
| 16 | modules | main subsdk0 sdk | ||||
| 17 | romfs_marker | Octopath_Traveler0/Content/Paks/pakchunk0-Switch.pak | ||||
| 18 | zip_store | .awb:.pak:.ttf:.txt:.usm:.metallib | ||||
| 19 | # ---- Graphics ---- | |||||
| 20 | # 60 fps (30 on the Switch): the game's config caps Unreal at 30 (t.MaxFPS 30, FrameRateLimit 30, and rhi.SyncInterval 2, the present interval 2 it asks for); the host writes t.MaxFPS 60 and | |||||
| 21 | # rhi.SyncInterval 1 into its console variables (hle_fpslock.c), so the game asks for present interval 1 itself. Unreal steps the game by the time that really passed. | |||||
| 22 | # DM_FPS_TARGET=30 (Documents/env.txt on the iPhone) keeps the game's 30 and saves power | |||||
| 23 | fps_target | 60 | ||||
| 24 | # ---- Memory ---- | |||||
| 25 | # Unreal Engine: nninitStartup (main+0x12d74) needs virtual address memory and reserves one address region for the engine (-SwitchVirtualAddressSpaceSize= in MB, game_args below; 62 GB by default). | |||||
| 26 | # Its allocator, an FMallocBinned3 (37 GB of address space), is replaced by the host's (patches.py cut, hle_uemalloc.c), and the SDK's node area is cut to 62 MB (dm/tools/sdk_patches.py), so the region holds what the engine maps | |||||
| 27 | # itself (709 MB at character creation, spread over 1 GB). Alias region = node area + up to 1 GB of alignment (regions of 1 GB and more are 1 GB aligned) + the 2 GB region; 256 MB stacks, 128 MB heap | |||||
| 28 | game_args | -SwitchVirtualAddressSpaceSize=2048 | ||||
| 29 | mem_reserve | 0xF0000000 | ||||
| 30 | mem_alias | 0xC8000000 | ||||
| 31 | mem_stack | 0x10000000 | ||||
| 32 | app_pool | 0xCD500000 | ||||
| 33 | # ---- NVN ---- | |||||
| 34 | # 61 vertex shaders pick one of several c2 table slots at run time (separate texture slots 0-10, samplers 0-4), which the translator cannot trace to one slot: slot indices in c2, the bound slots in its arrays | |||||
| 35 | tex_dyn_slots | on | ||||
| 36 | # ---- Shader split ---- | |||||
| 37 | # The decoded shader code archives: the engine's global shaders and the game's material shaders | |||||
| 38 | shader_groups | ShaderArchive-Global-=global ShaderArchive-=game | ||||
| 39 | shader_note | OCTOPATH TRAVELER 0 shaders | ||||
| 40 | # The shaders are in the shader code archives of the pak (ShaderArchive-*.ushaderbytecode), each one Oodle-compressed; the NSP script decodes them on the Mac with the game's own Oodle (uepak.py, DM_OODLE_JOB), | |||||
| 41 | # as for any game with Unreal paks. Unreal combines vertex and pixel shaders per draw from its pipeline state, so every vertex shader is made to link with any pixel shader (shader_split.py separable_pairs) |