3.7 KiB
3.7 KiB
| 1 | # DRAGON QUEST VII Reimagined: Square Enix / HEXA DRIVE, Unreal Engine 4.27 (IoStore containers beside one pak, PhysX 3.4, MallocBinned3), SDK 19.3.1, NVN, CRIWARE sound and Sofdec movies | |||||
|---|---|---|---|---|---|---|
| 2 | # (VP9 through the SDK's movie decoder); update 1.2.0 (v131072). | |||||
| 3 | # Started from the NSP script's provisional profile (dm/games/profile_guess.py) and brought up on the Mac (docs/agents) | |||||
| 4 | # Format: see dm/games/README.md | |||||
| 5 | # ---- Identity ---- | |||||
| 6 | title_id | 0100A9D01C446000 | ||||
| 7 | program_id | 0100A9D01C446000 | ||||
| 8 | # ---- App ---- | |||||
| 9 | # 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) | |||||
| 10 | name | DRAGON QUEST VII Reimagined | ||||
| 11 | ipa | DragonQuestViiReimagined.ipa | ||||
| 12 | app_category | public.app-category.games | ||||
| 13 | # ---- Versions ---- | |||||
| 14 | build | v131072 | 1.2.0 | main=f7ec03e4cb9de3bd8319d4e899d2e9cc | subsdk0=92ef43cb1f9917ab206ac5c9e36240bc | sdk=145dde94fb574acc9e09780a11995bd3 |
| 15 | package | v131072 | ||||
| 16 | shader_versions | v131072 | ||||
| 17 | # ---- Files ---- | |||||
| 18 | # load order as on Horizon: main, subsdk*, sdk (subsdk0 = NintendoSDK_movie, which Sofdec feeds its VP9 video to) | |||||
| 19 | modules | main subsdk0 sdk | ||||
| 20 | romfs_marker | DOLL/Content/Paks/pakchunk0-Switch.ucas | ||||
| 21 | zip_store | .pak:.ttf:.ucas:.usm:.utoc:.metallib | ||||
| 22 | # ---- Graphics ---- | |||||
| 23 | # 60 fps (30 on the Switch): the game's config caps Unreal at 30 (FrameRateLimit=30 in DefaultGameUserSettings.ini and SwitchGameUserSettings.ini, which UEngine::SetMaxFPS, main+0x134d2c0, puts | |||||
| 24 | # in t.MaxFPS; rhi.syncinterval=2 in SwitchDeviceProfiles.ini, the present interval 2 it asks for while BaseSwitchEngine.ini's r.VSync=1 locks presents to vsync); the host writes t.MaxFPS 60 and | |||||
| 25 | # 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. | |||||
| 26 | # DM_FPS_TARGET=30 (Documents/env.txt on the iPhone) keeps the game's 30 and saves power | |||||
| 27 | fps_target | 60 | ||||
| 28 | # ---- Memory ---- | |||||
| 29 | # Unreal Engine 4.27: nninitStartup (main+0xe89fa4) needs virtual address memory, sets a 6 MB heap for the C library's malloc and reserves one address region for the engine | |||||
| 30 | # (-SwitchVirtualAddressSpaceSize= in MB, game_args below; 62 GB by default). Its allocator, an FMallocBinned3 made on the first allocation, cuts 37 GB of pools out of that region; the | |||||
| 31 | # constructor call is cut and the host runs Unreal's heap on a malloc zone outside the guest block (patches.py, hle_uemalloc.c), and the SDK's node area is cut to 62 MB, as for | |||||
| 32 | # Octopath Traveler 0 on the same SDK. The region then holds what the engine maps itself: on the Mac up to +0.75 GB of the alias region with 0.5 GB mapped through the opening and | |||||
| 33 | # the new-game menus, beside an Unreal heap of 1 GB and 0.9 GB of Metal allocations (about 2.3 GB resident). Alias region = node area + up to 1 GB of alignment (regions of 1 GB and | |||||
| 34 | # more are 1 GB aligned) + the 2 GB region; 256 MB stacks, 384 MB heap region | |||||
| 35 | game_args | -SwitchVirtualAddressSpaceSize=2048 | ||||
| 36 | mem_reserve | 0xF0000000 | ||||
| 37 | mem_alias | 0xC8000000 | ||||
| 38 | mem_stack | 0x10000000 | ||||
| 39 | app_pool | 0xCD500000 | ||||
| 40 | # the NPDM declares 80 MB of system resource | |||||
| 41 | sys_resource | 0x5000000 | ||||
| 42 | # ---- Input ---- | |||||
| 43 | # A 3D game with a free camera on the right stick: the 3D pad layout. It reads the controller only, so it stays docked (1920x1080) | |||||
| 44 | pad_layout | full | ||||
| 45 | # ---- Shader split ---- | |||||
| 46 | # The shader code archives of pakchunk0-Switch.pak (ShaderArchive-*.ushaderbytecode), each shader LZ4-compressed (uepak.py lz4_shaders): the engine's global shaders and the game's | |||||
| 47 | # material shaders. 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) | |||||
| 48 | shader_groups | ShaderArchive-Global-=global ShaderArchive-=game | ||||
| 49 | shader_note | DRAGON QUEST VII Reimagined shaders |