Feature requests (collected) #1007
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
2 participants
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot#1007
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This issue lists the feature requests and ideas from separate issues in one place. Each was closed pointing here; the discussion, mockups and patches stay in the linked issue. Listing an idea here is not a promise that it will be made.
Already in a release: the Output resolution option (2048x1152, 2560x1440, 3840x2160) and full-size 3D at 4K came in v2.0.6 (PR #849, https://github.com/NotRexed/Hookshot/releases/tag/v2.0.6); the in-game overlay menu (F1/Insert) with a Graphics tab has been there since v2.0.3.
Graphics, resolution and upscaling
Settings, menus and installation
Controllers and input
Performance and shaders
Audio
Platforms and building
Repository
New ideas: please comment here (one idea per comment, with a short reason) or open a new issue.
All tracking issues
#579 has been implemented here : https://github.com/tangerineturtle1/NX2navi/pull/179
It should be even easier to implement here, with how you already manage patching stuff.
Claude should be be able to easily port it
I may open a PR later for it
New request linked here: #1027, support for the community multiplayer mod (Platforms and building / online).
New request linked here: #1134, graphics options for V-Sync on/off, an FPS cap (30/60, for frame generation) and a 1920x1080 output resolution.
New request linked here: #1147, more diagnostic logging (system call tracing, memory pool logging) for performance and texture hunting.
New requests linked here: #1162 (longer black screen entering Castle Town the first time, AA/jaggies, short grass draw distance in cutscenes), #1159 and #1160 (gyro, same as #112).
Duplicates linked here: #1164 (FPS cap, same as #1134), #1166 (turn off the game's sharpening / AA, same as #156), #1163 (choose the install location, same as #600).
New requests linked here: #1203 (a Quit option in the menu, for SteamOS/Bazzite Game Mode) and XeFG frame generation (from #1194).
Google Stadia controller support (maybe even bake in the remapping of the UI HUD elements?)
New requests linked here: #1231 (low latency / frame smoothness settings), #1230 (microphone, same as #189 / PR #937); and from #671, Stadia controller support.
New request linked here: #1268, launcher: start the game automatically when there's no update, a setting or command-line switch to skip it, or A on a controller to press Play.
New request linked here: #1299, 1280x720 in the Output resolution list.
New request linked here: #1287, keep the build files by default (or a checkbox) so updates only recompile what changed (HOOKSHOT_KEEP_BUILD_FILES=1 exists but is hard to find; one update compiled 600 files in over an hour).
New request linked here: #1303 (option to turn off menu navigation and dialogue confirmation sounds); #1322 is another vote for Xbox/PlayStation prompts (#671).
New requests linked here: #1348 (mouse aiming for ranged items, as in Lichii) and #1346 (a 16:10 aspect option for laptops).
New requests linked here: #1402 (put performance switches such as RX_VK_BATCH=0, RX_VK_MOVIE_UPSCALE=linear and RX_VK_IMPORT_CHUNK_MB=1 in the settings menu; reported to help an RX 9070 XT on SteamOS) and #1399 (mod support).
In the v2.0.12 branch, closing these requests at release: AMD FSR 3.1 upscaling and FSR 3.1 2x frame interpolation (#1386, the FSR requests from #687 / #804), and Discord status (Rich Presence).
+2 on the row "HUD anchored to screen edges at 21:9/32:9" (#829): two players asked again on Discord on 2026-11-10 for the hearts, item slot and minimap to reach the edges with Ultrawide set to Monitor's shape (today they stay in the middle 16:9).
Added from closed issues: #1599 (a quality preset for 10 GB cards) and #1594 (separate named player profiles on a shared PC).
New request linked here: #1668, a controller button combination (for example L3 + R3) to open the Insert menu, for handheld and streaming play.
New requests linked here: #1686 (a 7680x2160, 32:9 4K Output resolution).
New requests linked here: #1701 (launcher gamepad support; command-line switches such as --play and --fullscreen for Playnite / LaunchBox).
New request linked here: #1736 (a settings page in the launcher).
New requests linked here: #1784 (the Builder as a single .zip with its tools), #1783 (FSR 4.1 through OptiScaler; FSR 4 itself is PR #1008), #1782 (separate buttons for roll and sprint), #1771 (DLSS Frame Generation, same as #982).
New request (Discord): a render-scale choice for DLSS in the menu. Setting
resolution=1in hookshot_options.ini gives DLSS at 100% (DLAA-like); the player would like that as a menu option.New requests linked here: #1844 (a game volume slider), #1843 (support for another game file container format).
New request linked here: #1949 (stick dead zone below 5%, and radial instead of per-axis).
New requests linked here: #1964 (hide the mouse cursor while using a controller), #1989 (gyro from DSU servers such as SC2DSU / SteamDeckGyroDSU), #1994 (built-in modifiers: damage, movement speed), #1981 (in-game button remapping).
New requests linked here: #2016 (anisotropic filtering up to 16x), #2021 (a rupee amount option in the Debug tab).
New requests linked here: #2028 (keyboard button prompts), #2039 (48:9 for triple-monitor setups).
About #1736 and #1856 (settings in the launcher): I have a working prototype on Linux and would like to know whether, and in what form, you would take a PR for it.
It is a separate window (PySide6, French for now) that drives the installed Linux builder. It does this:
hookshot_options.iniand written back as soon as a row changes, with a one-line explanation on hover. The quality preset works like the menu's: choosing a preset sets its rows, and changing a row switches it to Custom. Rows that need a restart are marked. The tab is greyed out while the game runs and reloads when it exits, since the in-game menu may have changed the file.linux_updateandAppRun --cli --update), a log tab and a Stop button. The installed game stays playable if it fails or is stopped.Screenshots below.
Two questions before I write any code for the repository:
More reports of this, collected here:
I'm checking feasibility of #583: an optional indexed RomFS image, with a copy-only packer and read-only file/directory access. The folder backend, mod precedence and writable save/cache mounts would stay available; loading-speed benefits need measurement.
Is anyone already working on this, or is there a preferred input/format? TotK Recomp uses an extracted image plus an index, while Hookshot's NUP extraction and damaged-file replacement need their own compatibility check. I'm auditing those boundaries before choosing an implementation, including the active mods/path-hardening work.
Please add M/KB UI. All the others have it one way or another.
#2600 adds the optional indexed RomFS backend for #583. The packer copies from the extracted folder; build/update still need that folder, and saves remain separate.
Windows folder/image-only gameplay and complete asset-byte/directory parity passed; generated Xbox prompts and native menu fonts also worked with no loose RomFS root. Focused Windows/Linux checks pass; hosted CI is running. No loading-speed or memory-saving claim yet. The PR records the test scope and inherited full-suite failures.
More reports of this, collected here:
Check this repo: https://github.com/sdli1995/dlssg_for_sm86
This enables [Nvidia DLSS Framegen for 30 series cards]
https://www.cheatslips.com/game/the-legend-of-zelda-ocarina-of-time/6251
https://gamebanana.com/games/26242
https://github.com/daurosk/oot-remake-multiplayer
https://github.com/craftycorvid/oot-mod
Please also add XeSS 3. It can be used on all cards and I find it preferable over FSR 4 on my 7900 XT (less ghosting in games like BeamNG.drive).
support for arm64 android devices??
would be amazing to have a portable way to play on a phone or tablet (for now with controller support only, maybe touch controls for future, i personally don't care, just controllers)
Tracker upkeep note (merged pull requests and code checked against main
51da0464; no new test run was made for it).Several collected requests are implemented on main
51da0464: controller prompts (#1321), Keyboard prompts (#2435), the configurable menu shortcut (#1609), Windows controller-idle display protection (#1538), and keeping compiled objects across player updates (#1484). The collection should remain open: Capture-button screenshots (#868), finer deadzone choices (#1949) and runtime-cache reset controls (#974) are not implemented yet. The radial-direction change already has #1600, and launcher settings/profiles, packed ROMFS and co-op have named owners or open pull requests. Updating the completed rows would make the list clearer without closing the collection or starting duplicate work. This is a source/history review, not a new runtime test.ARM64 Linux (AYN Thor, Snapdragon 8 Gen 2, ArmadaOS): native build boots, renders the title screen, work in progress
Hardware: AYN Thor, Snapdragon 8 Gen 2, Adreno 740, 11 GB RAM, ArmadaOS (Fedora-based, aarch64, kernel 7.2), Mesa 26.2.6 Turnip, built inside a Fedora 43 distrobox (clang 21).
Version: v2.1.0 (tag), game 2.0 dump.
What I did: ran the normal pipeline on the device (
nx2/nup.py,lift.py --standalone --write,build.py --standalone) withRX_MARCH=armv8.4-a. The lifter and the 75 lifted C chunks (17.6 M instructions) compile natively on aarch64 (about 55 min on 8 cores). The runtime needed these changes to build:build.py:-mcx16is x86-only, skip it onarmv*.host/posix/win32_posix.c:context_from/context_toread x86gregs; aarch64 branch (pc/sp, write flag from the ESR in the signal frame).host/hos_setjmp.c: aarch64recomp_sj_setjmp/longjmp(x19-x30, sp, d8-d15, fpcr).host/hos_thread.c,host/posix/windows.h:_mm_pause/__builtin_ia32_pause->yield.host/posix/prof.c:uc_mcontext.pc.Renderer: Turnip has no
VK_EXT_external_memory_host(the msm kernel driver has no userptr) and this kernel has noCONFIG_UDMABUF, somemory_initstopped with "the guest memory cannot be imported". As an experiment I added an export path ingpu/vk/vk_memory.cpp: each pool piece is allocated as exportable device memory, the guest bytes are copied in, and the dma-buf is mapped over the guest window withMAP_FIXED. The rest of the renderer is unchanged.Result so far: the game boots to the title screen at 54-60 fps (1280x720, minimum preset), the controller works, saves from the PC load. In-game scenes are not usable yet: shaders compile on demand, hundreds of draws per frame are "left out (not ready)", and the game fills the 11 GB RAM. I have not verified correctness of the export path (a CPU write during a piece's copy could be lost; I have not checked the CPU cache attributes of the mapping).
The patch is source-only and small (about 250 lines). I will push it to a fork branch if there is interest.
Prior art on the same GPU class: BananaNative (Android, Adreno, nxnative based) lists OoT 2.0 as experimental.
Windows on ARM follow-up to #2230: Snapdragon X / Adreno X1-85 (Windows on ARM): Vulkan back end cannot start, and with workarounds the GPU hangs entering Kokiri Forest
Adding details here as asked in #2230 (same platform: Snapdragon X, Windows, no
VK_EXT_external_memory_host).System
vulkaninfooutput of the device is in the gist linked at the end.Summary
VK_EXT_external_memory_host, which the Adreno driver does not have, so it logsno VK_EXT_external_memory_host: the guest memory cannot be imported (needed for now)and gives up.VK_ERROR_DEVICE_LOST, WindowsLiveKernelEvent 141.TdrDelayraised to 10 s, so this is a real hang, not a slow frame.Several of the problems below look like general issues for GPUs other than NVIDIA/AMD/Intel desktop parts. I hope they help with Adreno (and possibly other mobile-class) support.
Problems found in the Vulkan back end
1.
make_profile()claims features the Adreno does not have, so the driver refuses compute pipelinesgpu/vk/vk_shader.cppmake_profile()hard-codes:The Adreno X1-85 has
uniformAndStorageBuffer8BitAccess = false,uniformAndStorageBuffer16BitAccess = false,shaderDenormPreserveFloat32 = falseandshaderFloat64 = false(storageBuffer8/16BitAccessare true).The driver then fails
vkCreateComputePipelineswithVK_ERROR_UNKNOWN (-13)for many programs, including the foliage culling53caac5f38279735. In a standalone probe, 40 of 40 refused modules compiled once these four flags were taken fromvkGetPhysicalDeviceFeatures2/VkPhysicalDeviceVulkan12Properties.Suggestion: derive these from the device's features instead of
true.2. Mesh fallback: workgroup counts are not limited to
maxComputeWorkGroupCountWithout mesh shaders, the compute fallback dispatches the game's indirect mesh-task counts as they are (
mesh_indirect_convert→vkCmdDispatchIndirect(mesh_conv_buf, …)). The Adreno'smaxComputeWorkGroupCountis[65535, 65535, 65535](NVIDIA: 2^31-1), so a count above 65535 is invalid there. Clamping it did not cure the hang on its own, but it is a spec issue on such GPUs.3. Subgroup size cannot be pinned to 32
The Adreno has subgroups of 64 to 128 lanes, and
requiredSubgroupSizeStagescovers compute only, sopin_subgroupnever applies (subgroups: default 64 lanes, 64-128, pinned to 32 on stages 0). The translator then takes the "warp larger than guest" path withmax_subgroup_size = 128.4.
VK_EXT_map_memory_placedis advertised but ignores the placement addressI tried it as a replacement for host-memory import: the driver accepts
VK_MEMORY_MAP_PLACED_BIT_EXTbut maps elsewhere, so it cannot replace host-memory import here.5. Start-up precompile exceeds the memory of a 16 GB machine
The release precompile builds about 11,000 graphics pipelines at start. On this driver that took the process to about 17 GB committed, and the system ran out of commit (Windows paging, then device loss).
RX_VK_PRECOMPILE=0avoided it.The remaining hang (Kokiri intro), what is known
pool … took in N pools). The GPU time per frame climbs from about 25 ms to 30–40 ms in the seconds before it.HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\TdrDelay = 10.vkCmdFillBufferinto host memory around each dispatch and render pass). At every hang the GPU was inside a 768x432 render pass whose first draw is the mesh fallback draw of3bde059fb051af1f(mesh-only, 160 vertices/primitives, 11 vertex lines). Its last draw is83d320bbc3ad3d8e, about 32 draws in all.MESH_FALLBACK_RECORD_WORDS.RX_BACKEND=dx12): many NVN2 programsdo not lower to Maxwell, so the picture is black, and the device is lost at about 13,000 presents, the same place.b37500e0e1cae0f5…823bb6db3cdd3e3d, right after the dispatch of8b711dec66ea437c(grid 60x270x1).Things I ruled out (no change to the Kokiri hang)
383a566958350efe,53caac5f38279735anda54f19e927d8faef(RX_VK_SKIP_PROG), or running them over one workgroup.RX_VK_SKIP_CODEwith the culling task code from issue 817 (2c56dc1006942f74; that code does not occur in this build).RX_VK_KEEP_RETIRED=1).DEVICE_LOCAL | HOST_VISIBLE | HOST_COHERENT | HOST_CACHEDanyway).My local patches (for context, not a proposal)
aarch64-w64-mingw32, llvm-mingw,-mcpu=oryon-1.VK_EXT_external_memory_host: each guest pool gets a host-cachedVkBuffercopy ("stand-in").This copy-based scheme is inherently weaker than real host import. Stores through the page table are not noted, and ordering between CPU writes and in-flight GPU writes is approximate. It may well be the cause of the hang. That the D3D12/WebGPU path hangs at the same place makes me think it is not the whole story.
Logs
In this gist (user name removed from paths): https://gist.github.com/TobiasZero/146d348f0088c3e31dfd2b52a8f17a98
vulkan_arm64_freeze_kokiri_1..3.txt: three Vulkan runs ending in the device loss entering Kokirivulkan_arm64_latest_run.txt: the latest Vulkan run (stopped before the hang)webgpu_d3d12_x64_black_then_device_lost.txt,webgpu_d3d12_x64_stderr.txt: x64 v2.1.0, WebGPU renderer on D3D12adreno_x1-85_vulkaninfo.json: the device's Vulkan capabilities