Hi, I am happyharryh. Very glad to join this great world of open source ๐.
My contributions in Github began with Moonlight, which is really an awesome software for me and my wife ๐. First of all, I would like to introduce our game devices.
Thanks to Moonlight, we can play games in the living room using a 65 inch TV, in the bed room using a 100 inch screen, or even far away from home using a laptop (thanks to ZeroTier which provides the virtual LAN). At the very beginning, I counted on the embedded Android system of the TV and the projector to run Moonlight. They did work, but the decoding latency was up to 20 ~ 50 ms, which was too high and affected our game experience. I then found that the decoding latency of devices based on Intel x86 CPU is much lower (< 1 ms ๐), so I use an Intel NUC instead in the living room, and an old Intel laptop in the bed room now. In August 2022, the dependent library of Moonlight, SDL, released its version 2.24.0, which improved the support for Nintendo controllers, especially the Joy-Cons. It was an amazing update, which made it possible to make full use of my controllers. However, I found there were still some problems to deal with. So I started to dig into the codes of Moonlight and SDL, then made my contributions in Github:
- There are two modes of a single Joy-Con: the horizontal (mini-gamepad) mode for games like Mario Kart, and the vertical (one-handed) mode for games like Just Dance. SDL only supported the horizontal mode, but not the vertical mode. So I sent this pull request for the support.
- When playing Just Dance, the most important thing is the motion sensing. However, due to the limitation of NVIDIA GameStream, the sensor data was not sent to the game PC. I used BetterJoy and DS4Windows to send the sensor data based on CemuHook Protocal. They are both wonderful softwares, and I have developed a feature of customizing the stick calibration for BetterJoy.
- Although there are BetterJoy and DS4Windows, I still wanted to integrate the motion sensor support into Moonlight. So I developed an embedded CemuHook Server for Moonlight.
- While developing, I found that the order of the Controller Sensor Event of SDL was not good enough. So I sent this pull request to make it better.
- In addition, I found that the sensor might be 30% more sensitive in some axises. It was a bug introduced by this commit. I fixed it in this pull request.
- For convenience, I developed a Joy-Cons' combine mode toggle for Moonlight. I will develop the Joy-Cons' vertical mode toggle in the future, after the feature of the vertical mode is merged into the released version of SDL.
- I also developed a feature for the stick calibration of game controllers in Moonlight.
- When playing Rumbleverse, my wife wanted to use the voice chat built in the game. However, due to the limitation of NVIDIA GameStream, the voice data was not sent to the game PC. I developed an embedded VBan Emitter for Moonlight to support it based on VBAN Protocal.
- The features of CemuHook Server and VBan Emitter are useful for me, but are not a good fit for the mainline version of Moonlight. It may be better to build them as plug-ins for those who need them. I opened this Issue for Moonlight to discuss the topic.
- Sometimes, my ZeroTier may be with high latency for some reasons. In this situation, my Moonlight might crash randomly. I found it was caused by out-of-sequence audio packets in the low quality network, which was an imperceptible bug of moonlight-common-c. I fixed it in this pull request.
Welcome to leave me messages if you have any idea. Although my English is not idiomatic, I still hope you can understand what I am writing ๐ ~