Table of Contents
NTR Viewer Plus
There's already pretty neat software for 3DS wireless streaming and input redirection such as Kit-Kat, however I thought Kit-Kat was missing two major features:
- Rescaling the screens without relaunching.
- Touchscreen input with the bottom stream.
There's also Kit-Kat-Touch that's a mod of Kit-Kat but it's not a one-click solution and still no scaling. cuteNTR has rescaling but doesn't seem to have input redirection at all; it's also written in C++ and aimed for Linux. Doesn't look like I could just resize the windows though.
Rather than modify Kit-Kat I decided to reimplement the NTR protocol myself in a C# program using OpenTK/OpenGL which handles the dynamic scaling and mouse input.
Update: With a recent Luma update adding input redirection (that supports ZL/ZR/C-Stick), I've added being able to swap to using that instead of with BootNTR (which still does the video streaming).
No release yet, it's still missing some features Kit-Kat has and not sure if I'm satisfied with the stream performance.
If you want to preview the code: https://github.com/Jas2o/NTR-VP
Missing/Planned Features
- Keyboard input (may never be implemented)
- Automatic gamepad selection (currently fixed to vendor/product ID)
ZL / ZR and C-Stick input (not supported by Input Redirection?)Luma IR supports this.- Automatically finding the 3DS's IP address
- NTRViewer Console / Debugger
- FPS and stream quality.
- Live settings update (seems only the first NTR connect sets the settings)
Issues
- When Xbox Controller falls asleep some inputs are sent.
The generic NFC patch doesn't allow Input Redirection or reconnecting (seems to affect Kit-Kat as well).Using Luma's IR it'll patch NFC without this issue.- There's no indication that the connection has dropped.
You can't click the same pixel on the touchscreen twice in a row.- The touchscreen has a drift the further from the center you click. This affects both X and Y in letterbox and pillarbox.
- Can't use ZL and ZR at the same time with an Xbox controller (the triggers are technically the same axis). Using XInput would solve this but I kinda don't want to… How many games need you to press both anyway?