Skip to content
View happyharryh's full-sized avatar
😝
Coming up with ideas while playing games with my wife using Moonlight
😝
Coming up with ideas while playing games with my wife using Moonlight
  • Tsinghua University, Baidu Inc.
  • Beijing, China
  • 19:31 (UTC +08:00)
Block or Report

Block or report happyharryh

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
happyharryh/README.md

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.

gaming environment

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 😝 ~

Pinned

  1. moonlight-qt moonlight-qt Public

    Forked from moonlight-stream/moonlight-qt

    GameStream client for PCs (Windows, Mac, Linux, and Steam Link)

    C++ 2 2

  2. gost gost Public

    Forked from ginuerzh/gost

    GO Simple Tunnel - a simple tunnel written in golang - with WireGuard (client only) and Hysteria-QUIC

    Go 9 3

  3. IP-Forwarder IP-Forwarder Public

    Forked from moonlight-stream/GS-IPv6-Forwarder

    Forwarder servers over IPv4

    C

  4. wireproxy wireproxy Public

    Forked from pufferffish/wireproxy

    Wireguard client that exposes itself as a socks5 proxy

    Go

  5. BetterJoy BetterJoy Public

    Forked from Davidobot/BetterJoy

    Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput

    C#

  6. libzt-forwarder libzt-forwarder Public

    Forked from zerotier/libzt

    Encrypted P2P sockets over ZeroTier

    C++