Twix 3DS: Difference between revisions

From GameBrew
No edit summary
No edit summary
Line 9: Line 9:
| website = https://gbatemp.net/threads/release-unified-ntr-viewer-and-input-redirection-program.503850/
| website = https://gbatemp.net/threads/release-unified-ntr-viewer-and-input-redirection-program.503850/
| download = https://dlhb.gamebrew.org/3dshomebrew/UnifiedNTRViewerandInput.rar
| download = https://dlhb.gamebrew.org/3dshomebrew/UnifiedNTRViewerandInput.rar
| source =  
| source = https://dlhb.gamebrew.org/3dshomebrew/UnifiedNTRViewerandInput.rar
}}
}}
<youtube>5aMRRiVMze4</youtube>
<youtube>0gLN7d8pDV4</youtube>


So what is this? This is Twix.
So what is this? This is Twix.
Line 17: Line 17:
What is Twix? Twix is a feature packed alternative to ntrViewer, kitkat, SnickerStream, and input redirection programs. It's oriented more toward gamers, streamers, and people doing gameplay recordings
What is Twix? Twix is a feature packed alternative to ntrViewer, kitkat, SnickerStream, and input redirection programs. It's oriented more toward gamers, streamers, and people doing gameplay recordings


 
==A quick overview of the most important features:==
 
<div class="iframe">
 
<div id="player">
 
 
 
</div>
<div class="player-unavailable">
 
= An error occurred. =
 
<div class="submessage">
 
[https://www.youtube.com/watch?v=0gLN7d8pDV4 Try watching this video on www.youtube.com], or enable JavaScript if it is disabled in your browser.
 
</div>
 
</div>
 
</div>
 
 
A quick overview of the most important features:
 
 
* Easy to use
* Easy to use
* Supports any and all gamepad and joystick controllers on your computer
* Supports any and all gamepad and joystick controllers on your computer
* Even use your keyboard for input
* Even use your keyboard for input
* Turbo Fire!
* Turbo Fire!
* Antialiasing and some &quot;next gen&quot; effects for the video stream.
* Antialiasing and some &quot;next gen&quot; effects for the video stream.
* Great for recording or streaming gameplay footage.
* Great for recording or streaming gameplay footage.
* Open source with light weight license.
* Open source with light weight license.


Downloads at the bottom.
==Features==
 
 
 
<div class="ToggleTriggerAnchor bbCodeSpoilerContainer">
 
<span>Spoiler: <span class="SpoilerTitle">Features</span></span>
<div class="SpoilerTarget bbCodeSpoilerText">


* Multi-threaded (receiving the packets and decoding the video stream are on two separate threads) (build 1)
* Multi-threaded (receiving the packets and decoding the video stream are on two separate threads) (build 1)
* Supports InputRedirection via Luma on the 3DS. (build 1)
* Supports InputRedirection via Luma on the 3DS. (build 1)
* Integrated touch-screen redirect into the bottom screen output. (build 1)
* Integrated touch-screen redirect into the bottom screen output. (build 1)
* 3D cursor for touch-screen when in a perspective projected 3D display mode. (build 1)
* 3D cursor for touch-screen when in a perspective projected 3D display mode. (build 1)
* Supports any and all game pads your operating system supports out of the box (build 1)
* Supports any and all game pads your operating system supports out of the box (build 1)
* All redirected controls configurable to keyboard, mouse, and gamepad buttons and axes. (build 1)
* All redirected controls configurable to keyboard, mouse, and gamepad buttons and axes. (build 1)
* Full screen and windowed mode (build 1)
* Full screen and windowed mode (build 1)
* Easily resizable windowed mode (no having to restart with the command line like regular NTR Viewer) (build 1)
* Easily resizable windowed mode (no having to restart with the command line like regular NTR Viewer) (build 1)
* When virtual 3DS mode, the Dpad, A, B, X, Y, Start, Select, and Home buttons can all be clicked on with the mouse without having to configure any controls (build 1)
* When virtual 3DS mode, the Dpad, A, B, X, Y, Start, Select, and Home buttons can all be clicked on with the mouse without having to configure any controls (build 1)
* Automatically detects IP of 3DS for input redirection if RemotePlay has already been started on the 3DS (build 1)
* Automatically detects IP of 3DS for input redirection if RemotePlay has already been started on the 3DS (build 1)
* Supports New3DSXL's c-stick and ZR/ZL buttons (build 1)
* Supports New3DSXL's c-stick and ZR/ZL buttons (build 1)
* Two display modes. Virtual 3DS and Draggable Resizable Screens. Switch between them by pressing the display change button (build 3)
* Two display modes. Virtual 3DS and Draggable Resizable Screens. Switch between them by pressing the display change button (build 3)
* Screen size and position saved between sessions (build 7)
* Screen size and position saved between sessions (build 7)
* In virtual 3DS display mode, the buttons glow when pressed, to show input when recording (build 8)
* In virtual 3DS display mode, the buttons glow when pressed, to show input when recording (build 8)
* Automatically finds your 3DS as long as bootNTR and Luma input redirection are running (build 8)
* Automatically finds your 3DS as long as bootNTR and Luma input redirection are running (build 8)
* Configurable stream quality settings. (build 9)
* Configurable stream quality settings. (build 9)
* Default stream quality settings produce acceptable quality and framerate for both top and bottom screen. (build 1)
* Default stream quality settings produce acceptable quality and framerate for both top and bottom screen. (build 1)
* Turbo fire(build 9)
* Turbo fire(build 9)
* Antialiasing (build 9)
* Antialiasing (build 9)
* Post processing (build 9)
* Post processing (build 9)
* Pixel perfect accuracy on touch screen (build 10)
* Pixel perfect accuracy on touch screen (build 10)
* Cycle through different camera angles on Virtual 3DS mode. (build 10)
* Cycle through different camera angles on Virtual 3DS mode. (build 10)
* Antialiasing is done on the stream directly (build 10)
* Antialiasing is done on the stream directly (build 10)


 
==Planned Features=
</div>
 
</div>
<div class="ToggleTriggerAnchor bbCodeSpoilerContainer">
 
<span>Spoiler: <span class="SpoilerTitle">Planned Features</span></span>
<div class="SpoilerTarget bbCodeSpoilerText">
 
* Record output to MP4 file
* Record output to MP4 file
* Recover frames delivered out of order
* Recover frames delivered out of order


==Features that I am trying to put in the next build==
* Recover frames delivered out of order


</div>
==How To Use==


</div>
Step 1: Run bootNTR Selector on your 3DS
<div class="ToggleTriggerAnchor bbCodeSpoilerContainer">


<span>Spoiler: <span class="SpoilerTitle">Features that I am trying to put in the next build</span></span>
Step 2: Enable input redirection on Luma.
<div class="SpoilerTarget bbCodeSpoilerText">


* Recover frames delivered out of order
Step 3: Run Twix
 
 
</div>


</div>
Step 4: If Twix doesn't know the correct IP address for your 3DS, hit Start
<div class="ToggleTriggerAnchor bbCodeSpoilerContainer">


<span>Spoiler: <span class="SpoilerTitle">How To Use</span></span>
Stream to find it. Otherwise hit Try IP.
<div class="SpoilerTarget bbCodeSpoilerText">


Step 1: Run bootNTR Selector on your 3DS
Step 2: Enable input redirection on Luma.
Step 3: Run Twix
Step 4: If Twix doesn't know the correct IP address for your 3DS, hit Start Stream to find it. Otherwise hit Try IP.
Step 5: Have fun!
Step 5: Have fun!


Line 149: Line 77:
In either mode, hit the Escape key to pull up the options window.
In either mode, hit the Escape key to pull up the options window.


</div>
==Trouble Shooting==


</div>
'''I hit Start Stream and Twix never finds my 3DS'''
<div class="ToggleTriggerAnchor bbCodeSpoilerContainer">
 
<span>Spoiler: <span class="SpoilerTitle">Trouble Shooting</span></span>
<div class="SpoilerTarget bbCodeSpoilerText">


'''I hit Start Stream and Twix never finds my 3DS'''
If Start Stream never finds your 3DS then either your 3DS isn't on the same router as your computer, the 3DS doesn't have its wifi on, bootNTR and Luma aren't running, or your router is assigning your 3DS an IP that isn't in your computer's range. For example if your computer's LAN address is 192.168.1.2 and your 3DS is on 192.168.1.4 then Start Stream will very quickly find your 3DS. However if your 3DS is on 192.168.2.x, instead of 192.168.1.whatever, then it will not find it and you'll have to manually enter the IP yourself and use &quot;Try IP&quot; button.
If Start Stream never finds your 3DS then either your 3DS isn't on the same router as your computer, the 3DS doesn't have its wifi on, bootNTR and Luma aren't running, or your router is assigning your 3DS an IP that isn't in your computer's range. For example if your computer's LAN address is 192.168.1.2 and your 3DS is on 192.168.1.4 then Start Stream will very quickly find your 3DS. However if your 3DS is on 192.168.2.x, instead of 192.168.1.whatever, then it will not find it and you'll have to manually enter the IP yourself and use &quot;Try IP&quot; button.


Line 163: Line 86:


'''The stream output is glitchy and the frames keep flashing'''
'''The stream output is glitchy and the frames keep flashing'''
This happens because of network lag and there's nothing Twix nor any other stream receiver can really do about it. Check to make sure your 3DS and router are close enough, close off any torents or high bandwidth apps on your computer, make sure nothing else is using your router for high bandwidth stuff. Basically the usual slow wifi debugging stuff.
This happens because of network lag and there's nothing Twix nor any other stream receiver can really do about it. Check to make sure your 3DS and router are close enough, close off any torents or high bandwidth apps on your computer, make sure nothing else is using your router for high bandwidth stuff. Basically the usual slow wifi debugging stuff.


Line 169: Line 93:
The only reason other streamers don't have this problem is they're all using the reference code for interpretting the stream, which drops any incomplete or out of order frames entirely. I rolled my own code by reverse engineering the packets, and I'd personally rather have a glitchy display than one that appears frozen.
The only reason other streamers don't have this problem is they're all using the reference code for interpretting the stream, which drops any incomplete or out of order frames entirely. I rolled my own code by reverse engineering the packets, and I'd personally rather have a glitchy display than one that appears frozen.


</div>
==Known Bugs==
 
</div>
<div class="ToggleTriggerAnchor bbCodeSpoilerContainer">
 
<span>Spoiler: <span class="SpoilerTitle">Known Bugs</span></span>
<div class="SpoilerTarget bbCodeSpoilerText">


Resizable, Draggable screens display mode has touch screen axes being wrong. Please use virtual 3DS mode only for now if you need to use the touch screen. I have a fix already and will be pushing it out with Build 11.
Resizable, Draggable screens display mode has touch screen axes being wrong. Please use virtual 3DS mode only for now if you need to use the touch screen. I have a fix already and will be pushing it out with Build 11.


</div>
==FAQ==


</div>
There aren't many questions I've gotten about it so far but there is one that I keep being asked on other webpages and in private.
<div class="ToggleTriggerAnchor bbCodeSpoilerContainer">


<span>Spoiler: <span class="SpoilerTitle">Screenshots and Videos</span></span>
'''Q: Why did you make Twix when there's similar programs available?'''
<div class="SpoilerTarget bbCodeSpoilerText">


<div class="iframe">
A: This question was mainly asked at the very start, when I hadn't added all the extra features I've developed. The main reason is that I wanted to up the ante. I wanted better and knew I could do better. I also hope that Twix inspires the others to do better.
 
<div id="player">
 
 
 
</div>
<div class="player-unavailable">
 
= An error occurred. =
 
<div class="submessage">
 
[https://www.youtube.com/watch?v=0kVZrOUc1Qw Try watching this video on www.youtube.com], or enable JavaScript if it is disabled in your browser.
 
</div>
 
</div>
 
</div>
 
 
 
<div class="iframe">
 
<div id="player">
 
 
 
</div>
<div class="player-unavailable">
 
= An error occurred. =
 
<div class="submessage">
 
[https://www.youtube.com/watch?v=AgAgDMZiXMo Try watching this video on www.youtube.com], or enable JavaScript if it is disabled in your browser.
 
</div>
 
</div>
 
</div>
 
 
 
<div class="iframe">
 
<div id="player">
 
 
 
</div>
<div class="player-unavailable">


= An error occurred. =
'''Q: Why are you distributing it under Creative Commons BY NC SA license instead of GPL v3 like the others?'''


<div class="submessage">
[https://www.youtube.com/watch?v=0gLN7d8pDV4 Try watching this video on www.youtube.com], or enable JavaScript if it is disabled in your browser.
</div>
</div>
</div>
<span style="font-size: 22px">'''Stream with Jpeg quality set to 80 without post processing'''</span>
[[File:proxy.php?image=https%3A%2F%2Fi.imgur.com%2F0LG83D0.png&hash=133dc9d3f2f8af8375b3ca85a8cf1296|class=bbCodeImage LbImage|[?IMG]]]
<span style="font-size: 22px">'''Stream with Jpeg quality set to 80 with post processing'''</span>
[[File:proxy.php?image=https%3A%2F%2Fi.imgur.com%2F2eF2GCC.png&hash=6ea03b8e1805add5e8f5a290a9582db0|class=bbCodeImage LbImage|[?IMG]]]
Both of these screenshots are zoomed in to exaggerate aliasing and jpeg artifacts. They're both from the same stream, using jpeg compression quality of 80, which has quite noticeable artifacts as you can see in the first image. The post processing almost eliminates these jpeg artifacts entirely. So basically, using Twix, if your computer has a good enough video card to support post process effects, you can use a lower jpeg quality for better performance and not sacrifice quality quite as much. Granted the image is slightly blurrier, but that's mostly due to the antialiasing. I will be experimenting with other antialiasing methods as soon as I can figure out how to write the shaders for it.
</div>
</div>
<div class="ToggleTriggerAnchor bbCodeSpoilerContainer">
<span>Spoiler: <span class="SpoilerTitle">FAQ</span></span>
<div class="SpoilerTarget bbCodeSpoilerText">
There aren't many questions I've gotten about it so far but there is one that I keep being asked on other webpages and in private.
'''Q: Why did you make Twix when there's similar programs available?
'''
A: This question was mainly asked at the very start, when I hadn't added all the extra features I've developed. The main reason is that I wanted to up the ante. I wanted better and knew I could do better. I also hope that Twix inspires the others to do better.
'''Q: Why are you distributing it under Creative Commons BY NC SA license instead of GPL v3 like the others?
'''
A: A few reasons.
A: A few reasons.


Line 288: Line 116:


4: GPL allows people to take what I've made here and sell it as long as they distribute the source code for their version. Many people fail to do so or they put links to the source code that go nowhere an feign ignorance when it does. By only allowing it Non-Commercial use, I make it unfeasible for someone to do shenanigans like that. Not that we have a huge problem with this kind of thing in the community, but it has happened on a few occasions.
4: GPL allows people to take what I've made here and sell it as long as they distribute the source code for their version. Many people fail to do so or they put links to the source code that go nowhere an feign ignorance when it does. By only allowing it Non-Commercial use, I make it unfeasible for someone to do shenanigans like that. Not that we have a huge problem with this kind of thing in the community, but it has happened on a few occasions.
</div>
</div>
<div class="ToggleTriggerAnchor bbCodeSpoilerContainer">
<span>Spoiler: <span class="SpoilerTitle">Downloads, binaries and source for version build 10, source for build 11</span></span>
<div class="SpoilerTarget bbCodeSpoilerText">
Windows Version
https://mega.nz/#!tIUXwB4b!lfMepOm9kgfXogyhjFYIJJah_8P8mUNw9SGuLkhGEwo
OSX Version
https://mega.nz/#!0QUyRAgR!lX8__myqV7uMoXOsq54etnNlDXDIBfFX4UaiUbmwYN0
Linux Version
https://mega.nz/#!ZZMijQBb!N1HlHd7MHtwxEp7o62pubGXvkTugU7lsUQKvbMgimpI
Source
https://mega.nz/#!ZYUWRQTD!kHcFLX0RqaidNd-zqAUkTYUTaiamDhFEDEV_iOgCbGY
Build 11 Source (no binaries released): https://mega.nz/#!sJcm3QyK!kZzWp3M7RZQIiyHFHVzVbdTpTScBPANDwqrlwc3e93o
[[File:proxy.php?image=https%3A%2F%2Flicensebuttons.net%2Fl%2Fby-nc-sa%2F4.0%2F88x31.png&hash=ad0bcd599cd621bf7543271df424efc7|class=bbCodeImage LbImage|[?IMG]]]
</div>
</div>
<div class="messageTextEndMarker">
</div></blockquote>

Revision as of 05:48, 20 September 2021

Template:Infobox-3DS-Homebrews

So what is this? This is Twix.

What is Twix? Twix is a feature packed alternative to ntrViewer, kitkat, SnickerStream, and input redirection programs. It's oriented more toward gamers, streamers, and people doing gameplay recordings

A quick overview of the most important features:

  • Easy to use
  • Supports any and all gamepad and joystick controllers on your computer
  • Even use your keyboard for input
  • Turbo Fire!
  • Antialiasing and some "next gen" effects for the video stream.
  • Great for recording or streaming gameplay footage.
  • Open source with light weight license.

Features

  • Multi-threaded (receiving the packets and decoding the video stream are on two separate threads) (build 1)
  • Supports InputRedirection via Luma on the 3DS. (build 1)
  • Integrated touch-screen redirect into the bottom screen output. (build 1)
  • 3D cursor for touch-screen when in a perspective projected 3D display mode. (build 1)
  • Supports any and all game pads your operating system supports out of the box (build 1)
  • All redirected controls configurable to keyboard, mouse, and gamepad buttons and axes. (build 1)
  • Full screen and windowed mode (build 1)
  • Easily resizable windowed mode (no having to restart with the command line like regular NTR Viewer) (build 1)
  • When virtual 3DS mode, the Dpad, A, B, X, Y, Start, Select, and Home buttons can all be clicked on with the mouse without having to configure any controls (build 1)
  • Automatically detects IP of 3DS for input redirection if RemotePlay has already been started on the 3DS (build 1)
  • Supports New3DSXL's c-stick and ZR/ZL buttons (build 1)
  • Two display modes. Virtual 3DS and Draggable Resizable Screens. Switch between them by pressing the display change button (build 3)
  • Screen size and position saved between sessions (build 7)
  • In virtual 3DS display mode, the buttons glow when pressed, to show input when recording (build 8)
  • Automatically finds your 3DS as long as bootNTR and Luma input redirection are running (build 8)
  • Configurable stream quality settings. (build 9)
  • Default stream quality settings produce acceptable quality and framerate for both top and bottom screen. (build 1)
  • Turbo fire(build 9)
  • Antialiasing (build 9)
  • Post processing (build 9)
  • Pixel perfect accuracy on touch screen (build 10)
  • Cycle through different camera angles on Virtual 3DS mode. (build 10)
  • Antialiasing is done on the stream directly (build 10)

=Planned Features

  • Record output to MP4 file
  • Recover frames delivered out of order

Features that I am trying to put in the next build

  • Recover frames delivered out of order

How To Use

Step 1: Run bootNTR Selector on your 3DS

Step 2: Enable input redirection on Luma.

Step 3: Run Twix

Step 4: If Twix doesn't know the correct IP address for your 3DS, hit Start

Stream to find it. Otherwise hit Try IP.

Step 5: Have fun!

When in Virtual 3DS Mode, use the mouse wheel to cycle between camera angles.

In either mode, hit the Escape key to pull up the options window.

Trouble Shooting

I hit Start Stream and Twix never finds my 3DS

If Start Stream never finds your 3DS then either your 3DS isn't on the same router as your computer, the 3DS doesn't have its wifi on, bootNTR and Luma aren't running, or your router is assigning your 3DS an IP that isn't in your computer's range. For example if your computer's LAN address is 192.168.1.2 and your 3DS is on 192.168.1.4 then Start Stream will very quickly find your 3DS. However if your 3DS is on 192.168.2.x, instead of 192.168.1.whatever, then it will not find it and you'll have to manually enter the IP yourself and use "Try IP" button.

By the way, it doesn't matter what your IP is. IPs are arranged like A.B.C.D, and as long as the A, B, and C are the same for the 3DS and the computer Twix is on, it should find it. The higher the D is on the 3DS the longer it'll take, though.

The stream output is glitchy and the frames keep flashing

This happens because of network lag and there's nothing Twix nor any other stream receiver can really do about it. Check to make sure your 3DS and router are close enough, close off any torents or high bandwidth apps on your computer, make sure nothing else is using your router for high bandwidth stuff. Basically the usual slow wifi debugging stuff.

If none of that works, try reducing the jpeg quality or otherwise adjusting the quality settings whens starting a new stream. Ideally, there would be some manner of telling the bootNTR to lower its quality in these situations. I've tried doing that, but it seems that once the stream is started, it can't be adjusted without restarting the 3DS.

The only reason other streamers don't have this problem is they're all using the reference code for interpretting the stream, which drops any incomplete or out of order frames entirely. I rolled my own code by reverse engineering the packets, and I'd personally rather have a glitchy display than one that appears frozen.

Known Bugs

Resizable, Draggable screens display mode has touch screen axes being wrong. Please use virtual 3DS mode only for now if you need to use the touch screen. I have a fix already and will be pushing it out with Build 11.

FAQ

There aren't many questions I've gotten about it so far but there is one that I keep being asked on other webpages and in private.

Q: Why did you make Twix when there's similar programs available?

A: This question was mainly asked at the very start, when I hadn't added all the extra features I've developed. The main reason is that I wanted to up the ante. I wanted better and knew I could do better. I also hope that Twix inspires the others to do better.

Q: Why are you distributing it under Creative Commons BY NC SA license instead of GPL v3 like the others?

A: A few reasons.

1: I think GPL is over used and it's just slapped on to projects by people who just want the source to stay open without any consideration for the implications of GPL.

2: As a license, GPL is frick'n tome. Very few people understand what it really says, as few of the patience to read it in its entirety, and as a result so many people violate it constantly, without even realizing it, even when they put it on their own project. For example, I've seen BSD licensed code pop up in GPL licensed projects, and that's actually a violation of both BSD and GPL, as BSD allows you to relicense code with additional restrictions, and GPL does not.

3: I made my own code from scratch save for the use of a few shaders, all of which are freely available on the Unity Asset Store for use with any project. So distributing under an easy to understand, CopyLeft license seemed like the thing to do.

4: GPL allows people to take what I've made here and sell it as long as they distribute the source code for their version. Many people fail to do so or they put links to the source code that go nowhere an feign ignorance when it does. By only allowing it Non-Commercial use, I make it unfeasible for someone to do shenanigans like that. Not that we have a huge problem with this kind of thing in the community, but it has happened on a few occasions.

Advertising: