Ultrawide menus (Centred): the loading screen's fade covers only the middle 16:9 — fix tested: kMenus 0xa → 0x2 #2220

Open
opened 2026-11-11 09:01:20 +00:00 by EjianYT · 1 comment
EjianYT commented 2026-11-11 09:01:20 +00:00 (Migrated from github.com)

Hookshot version

2.1.0

What kind of problem

Graphics (missing, black or wrong-coloured things, lighting, flicker)

What happened

With Ultrawide on and Ultrawide menus set to either Centred mode, the loading screen's fade (the one with the
Triforce icon, after Load and between areas) covers only the middle 16:9: the world keeps showing at the sides
while it loads. With Full width it covers the whole picture.

Cause: KEEP_VTABLES' bit 3 (main+0x4be7b30) is that loading fade, not a menu. vk_framegen.cpp's kMenus (0xa)
clears it together with the pause menu's bit 1, so the HUD site squeezes it into the middle.

Fix (tested): in gpu/vk/vk_framegen.cpp, wide_sides():

  • constexpr uint32_t kMenus = 0xa;
  • constexpr uint32_t kMenus = 0x2;
    (and the comment above it: bit 3 is the loading screen's fade, kept whole like the event fades. nx2/oot_wide.py's
    comment on the keep bits says "the menus' bits 1 and 3" and would need the same correction.)

How it was found: a temporary log in the HUD site named each canvas vtable it squeezed, and an env switch kept
chosen vtables whole without a rebuild. Keeping 0x4be7b30 whole made the fade cover the picture; 0x4be4fb0 and the
other screens seen at load did not. Happy to share that instrumentation if useful.

Tested on v2.1.0 with the fix built in:

  • Full width, Centred blurred sides, Centred black bars: the loading fade covers the whole picture in all three.
  • The map and pause menu stay centred in the Centred modes.

Known trade-off: the Triforce icon is in the same layout, so it is stretched with it, the same as Full width already
does. Keeping it at its shape would need a patch to the fade pane alone, or black sides drawn in step with the fade
while the layout stays centred.

Where in the game

Loading a save (the first screen after Load), and transitions between areas.

How often

Every time

Graphics card and driver version

RTX 5080, driver 621.14

CPU, RAM and operating system

AMD Ryzen 7 7700X, 32 GB DDR5-4800, Windows 11 Pro 26H2 (build 26300.9818)

Changes from the defaults

Ultrawide on (3440x1440, 21:9), Ultrawide menus: Centred (both modes tested). Mod: Xbox UI (romfs, button icons only).

Other software hooked into the game

No, nothing hooked in

hookshot_log.txt

hookshot_log.txt

Screenshots or video

Captura de pantalla 2026-11-11 004407

Before you send it

  • I'm on the newest release, or the problem is still there on it.
  • I searched the open issues for this problem.
  • I'm not attaching game files, keys, hookshot.exe, the .bin caches or saves.
### Hookshot version 2.1.0 ### What kind of problem Graphics (missing, black or wrong-coloured things, lighting, flicker) ### What happened With Ultrawide on and Ultrawide menus set to either Centred mode, the loading screen's fade (the one with the Triforce icon, after Load and between areas) covers only the middle 16:9: the world keeps showing at the sides while it loads. With Full width it covers the whole picture. Cause: KEEP_VTABLES' bit 3 (main+0x4be7b30) is that loading fade, not a menu. vk_framegen.cpp's kMenus (0xa) clears it together with the pause menu's bit 1, so the HUD site squeezes it into the middle. Fix (tested): in gpu/vk/vk_framegen.cpp, wide_sides(): - constexpr uint32_t kMenus = 0xa; + constexpr uint32_t kMenus = 0x2; (and the comment above it: bit 3 is the loading screen's fade, kept whole like the event fades. nx2/oot_wide.py's comment on the keep bits says "the menus' bits 1 and 3" and would need the same correction.) How it was found: a temporary log in the HUD site named each canvas vtable it squeezed, and an env switch kept chosen vtables whole without a rebuild. Keeping 0x4be7b30 whole made the fade cover the picture; 0x4be4fb0 and the other screens seen at load did not. Happy to share that instrumentation if useful. Tested on v2.1.0 with the fix built in: - Full width, Centred blurred sides, Centred black bars: the loading fade covers the whole picture in all three. - The map and pause menu stay centred in the Centred modes. Known trade-off: the Triforce icon is in the same layout, so it is stretched with it, the same as Full width already does. Keeping it at its shape would need a patch to the fade pane alone, or black sides drawn in step with the fade while the layout stays centred. ### Where in the game Loading a save (the first screen after Load), and transitions between areas. ### How often Every time ### Graphics card and driver version RTX 5080, driver 621.14 ### CPU, RAM and operating system AMD Ryzen 7 7700X, 32 GB DDR5-4800, Windows 11 Pro 26H2 (build 26300.9818) ### Changes from the defaults Ultrawide on (3440x1440, 21:9), Ultrawide menus: Centred (both modes tested). Mod: Xbox UI (romfs, button icons only). ### Other software hooked into the game No, nothing hooked in ### hookshot_log.txt [hookshot_log.txt](https://github.com/user-attachments/files/34679243/hookshot_log.txt) ### Screenshots or video <img width="3439" height="1439" alt="Captura de pantalla 2026-11-11 004407" src="https://github.com/user-attachments/assets/1b535ada-753c-463b-be9c-cae42161c524" /> ### Before you send it - [x] I'm on the newest release, or the problem is still there on it. - [x] I searched the open issues for this problem. - [x] I'm not attaching game files, keys, hookshot.exe, the .bin caches or saves.
Owner

@mooki000 commented on GitHub · 2026-11-12 16:36 UTC · original

Thanks @EjianYT — your bit-3 diagnosis reproduces here without the Xbox UI mod. I matched the 4432×1856 game picture in your log, rather than treating the 3440×1440 display as the render size, on Arch Linux with an RTX 4090/NVIDIA 615.78.08.

Changing the mask to 0x2 makes the loading fade cover the whole picture, and pause/Map stay centred. There is a stronger icon trade-off in the actual side-effect pass, though: Centred, blurred sides makes it a dim blur; Centred, black bars hides it entirely; Full width leaves it sharp but stretched. The 16:9 fade, icon, pause and Map remain unchanged. The pictures are in the draft pull request #2851; the two that matter most:

Six panels at the reporter's picture size: the loading fade before (only the middle fades) and with the mask change (the whole picture), the pause menu and the Map unchanged

The icon in each mode: before; mask change with blurred sides (a dim blur); with black bars (hidden); Full width (sharp but stretched)

I've kept the change as a draft proposal, not a complete visual fix. The current hook transforms the whole loading canvas; preserving the icon's position and shape needs a separate fade-pane change. Would you prefer the full-width fade with this trade-off, or the current behaviour until that can be done? Does your real-window build also blur the icon, or does it differ from these windowless scale-pass captures?

> [@mooki000](https://github.com/mooki000) commented on GitHub · 2026-11-12 16:36 UTC · [original](https://github.com/NotRexed/Hookshot/issues/2220#issuecomment-6829634177) Thanks @EjianYT — your bit-3 diagnosis reproduces here without the Xbox UI mod. I matched the **4432×1856 game picture** in your log, rather than treating the 3440×1440 display as the render size, on Arch Linux with an RTX 4090/NVIDIA 615.78.08. Changing the mask to `0x2` makes the loading fade cover the whole picture, and pause/Map stay centred. There is a stronger icon trade-off in the actual side-effect pass, though: **Centred, blurred sides makes it a dim blur; Centred, black bars hides it entirely; Full width leaves it sharp but stretched.** The 16:9 fade, icon, pause and Map remain unchanged. The pictures are in the draft pull request https://git.magicbean.dev/MagicBeanDev/Hookshot/pulls/2851; the two that matter most: ![Six panels at the reporter's picture size: the loading fade before (only the middle fades) and with the mask change (the whole picture), the pause menu and the Map unchanged](https://gist.githubusercontent.com/mooki000/b86bd3f35969803fb032f71f035844f8/raw/d4ca78fce40093c2b2404f8082505ce6d7fbe195/hookshot-wide-loading-fade-21x9.jpg) ![The icon in each mode: before; mask change with blurred sides (a dim blur); with black bars (hidden); Full width (sharp but stretched)](https://gist.githubusercontent.com/mooki000/b86bd3f35969803fb032f71f035844f8/raw/d4ca78fce40093c2b2404f8082505ce6d7fbe195/hookshot-wide-loading-fade-icon-modes.jpg) I've kept the change as a **draft proposal**, not a complete visual fix. The current hook transforms the whole loading canvas; preserving the icon's position and shape needs a separate fade-pane change. Would you prefer the full-width fade with this trade-off, or the current behaviour until that can be done? Does your real-window build also blur the icon, or does it differ from these windowless scale-pass captures? <!-- github-sync:c:6829634177 -->
Commenting is not possible because the repository is archived.
No milestone
No assignees
2 participants
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Hookshot#2220
No description provided.