Tennis Demo

https://youtu.be/deEGu9zIjeM

Inspiration

When we're all learning remotely, it's harder to find ways to spend time with friends. We wanted to create an opportunity for virtual, yet physical experiences.

What it does

This allows you to play Wii with friends, remotely! No direct sight of the server is required. The host of the game can screenshare (like we did in our demos) for the viewers.

How I built it

We used Swift and SwiftUI to create the phone app. In designing the phone app, our main focus was on accessibility. That is why we added an alignment button, which changes the positioning of the buttons for left and right handed users.

We modeled the app after a real Wiimote, and by detecting the button presses, we send state updates to the server using Socket.io. We send state updates from the phone to the server in diffs to ensure that bandwidth utilization is minimized. Multiple users can connect by providing different player ID's, which is then differentiated on the server. After sending the data to the server, some fancy math is done using the accelerometer and gyroscope data, and this is sent into a virtual joystick emulator called VJoy.

VJoy then interfaces with Dolphin, a Wii emulator, to input the phone's data into the game.

Challenges I ran into

  • Running out of batteries for the real Wiimote (see tin foil picture below)
  • We tried hosting the server on Google App Engine but our websocket server kept failing.
  • Feeding the data into Dolphin was harder than expected, we had to map our controls manually.

Accomplishments that I'm proud of

  • Playing remotely allows friends to connect virtually!
  • Allowing 2+ players to play Wii games with their phones, because before this was only possible with one phone.

What I learned

  • SwiftUI app life cycle
  • Reverse engineering the data that a real Wiimote sends
  • Hosting a low-latency websocket server
  • Interfacing with VJoy programmatically

What's next for Wii Remotely

  • Allowing more configuration in the app
  • Making it easier to host a server (GUI)

Built With

Share this project:

Updates