On-screen config UI + auto-reconnect + reference-frame invalidation - #1
Open
Delta062 wants to merge 1 commit into
Open
On-screen config UI + auto-reconnect + reference-frame invalidation#1Delta062 wants to merge 1 commit into
Delta062 wants to merge 1 commit into
Conversation
Delta062
force-pushed
the
feature/on-screen-config-and-reconnect
branch
2 times, most recently
from
August 26, 2026 07:16
e2e106b to
0ad4518
Compare
…hernet screen, bug fixes - Button controls fully standardized: B = back/cancel on every screen (zero exceptions), Pairing moved to Plus, Minus opens Help from every screen, Settings Minus opens new USB Ethernet info screen - UI now renders at GamePad native 854x480 (was 1920x1080 canvas) - eliminates downscale blur on GamePad; TV upscales instead - all font sizes and layout constants rescaled to match - New USB Ethernet adapter info screen (Settings > Minus): RVL-015, ASIX AX88772 compatibility, Realtek caveats, 10/100 only - New settings tips: resolution native-match benefit, Steam UI scale as the bigger lever for text legibility - Bug fixes: X/Y badge color leak (turned nearby text white), badge vertical misalignment (wrong text reference point), guessed spacing constants replaced with font-measured line heights - New badge.png asset for button badges - Build fixes: font_texture.h static (multiple-def), STBI_NO_THREAD_LOCALS Submodule third_party/moonlight-common-c pinned at 046c231b (untouched).
Delta062
force-pushed
the
feature/on-screen-config-and-reconnect
branch
from
August 26, 2026 12:44
0ad4518 to
7007992
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This patch set was written with AI assistance and has not been exercised on real hardware yet. It compiles and links cleanly with the repo's own Docker toolchain (devkitppc 20260503 + wut 47ae413), and the
nn::swkbdcalls were checked against the actual wut header at the pinned commit — but the on-screen UI, the keyboard rendering, and the reconnect behaviour have only been verified at the build/symbol level, not by actually streaming on a Wii U. Expect to find bugs. Please treat this as a draft for review and testing, not a finished feature. The test checklist at the bottom is the minimum you should run before trusting it.📦 Try the build
A pre-built
moonlight.wuhbis attached as a release asset so you can test without building:Download moonlight-wiiu-feature.wuhb
Copy it to
wiiu/apps/moonlight/moonlight.wuhbon your SD card (replacing the existing one) and launch. Built from base760e7761+ this patch set using the repo's Docker toolchain.✨ What's new since last review
This is a full refresh of the branch (previous head superseded — fresh, complete patch from base commit
760e7761, not incremental). On top of the settings UI / app picker / help screen / branding / auto-reconnect work, this round adds:The problem, in plain terms
Streaming from this Wii U client to a Sunshine/Apollo PC was dropping constantly with:
Those two codes aren't Moonlight bugs — they're
moonlight-common-c's raw socket/ENet failure codes, and in practice they're almost always caused by the Wii U's weak 2.4 GHz-only built-in Wi-Fi under sustained streaming load [6]. The old client's answer to a drop was to dump you straight back to the menu, and the only way to change anything (including which PC to connect to) was to pull the SD card, edit a text file on a computer, and put it back. That's a poor experience for a console.Rather than just saying "lower your bitrate," this patch makes the client (a) actually recover from those drops on its own, (b) make packet loss cheaper to recover from, and (c) let you configure everything — including the server address — from the console itself [6].
What changed, and why it helps you
1. On-screen config, not a text file
New
STATE_ENTER_IPandSTATE_SETTINGSscreens use the Wii U's real on-screen keyboard (nn::swkbd, wrapped in the newsrc/wiiu/keyboard.h/keyboard.cpp) so you can type your PC's address on the console [6]. A full settings menu (press X from the main/connected screen) covers resolution, fps, bitrate, packet size, app name, local audio, quit-app-after, view-only, disable-GamePad, swap-buttons, mouse mode, and rotation — all with D-Pad navigation [6].Everything you change is saved to
settings.conf/address.confon the SD card and takes priority overmoonlight.confon future launches.moonlight.confis now just the one-time seed for first boot and for the advanced options that aren't in the menu [6].Benefit: you never touch a computer or an SD card again to point the Wii U at a new PC or tweak a setting.
2. Auto-reconnect
_connection.cnow classifies why the stream died. DRM terminations and host-side capture errors are left alone (retrying won't help and can be actively wrong). Everything else — including the-1/-5codes — gets up to 3 automatic reconnect attempts with a 2-second backoff (newSTATE_RECONNECTINGscreen) before giving up and returning to the menu [6].Benefit: a Wi-Fi hiccup no longer kills your session. The stream usually just comes back on its own.
3. Reference-frame invalidation
decode.c's H.264 decoder now advertisesCAPABILITY_REFERENCE_FRAME_INVALIDATION_AVC, telling the host it can patch around a missing reference frame instead of forcing a full keyframe (IDR) re-send on every dropped packet [6].Benefit: a real bandwidth/latency win on lossy links — fewer, cheaper recovery frames instead of one huge frame right when the link is already struggling.
4. Bitrate guidance tip
The settings screen's Bitrate row shows a live tip: the same baseline bitrate
config_parse()would auto-pick for your current resolution/fps, plus practical ceilings (~10 Mbps built-in Wi-Fi, ~35 Mbps USB LAN adapter), with a warning if your value looks too high for Wi-Fi [6].Benefit: you get a concrete, console-visible answer to "why is it dropping?" instead of guessing at numbers.
Files
src/_connection.c,src/config.c,src/config.h,src/main.c,src/wiiu/decode.c,src/wiiu/wiiu.h(modified) +src/wiiu/keyboard.h,src/wiiu/keyboard.cpp(new). 8 files, 849 insertions, 9 deletions.third_party/moonlight-common-cis untouched [6].Credits
keyboard.h/keyboard.cppwrapper, and the handover notes) [6].nn::swkbdcalls against the pinned wut header, confirmed the Makefile picks upkeyboard.cppand that no extra-lflag is needed (it links via the existing-lwut), committed to the branch, and opened this PR.font_texture.hmultiple-definition link error and thestb_image.hthread-local relocation error inelf2rpl). The build now produces a cleanmoonlight.wuhbwith the logo bundled into/content/.Test checklist (please run on the console)
address.conf→ launching goes straight to the on-screen keyboard instead of an erroraddress.confappears on the SD cardsettings.confis written