We wanted to do both a hardware hack and a game. We decided to build a custom controller for a simple game. We thought it would be interesting to have both input and outputs on the controller itself.

What it does

A custom peripheral wirelessly connects to a custom built Unity game.

How we built it


We built the the game controller using an Arduino with an ESP8266 WiFi chip.


The server was built with the intention of supporting multiple controllers at once. It does this by using threads to handle each client. The clients share a synchronized queue with the game. The queue is used as a thread safe collection to give our game the controller's inputs. The controller's inputs are sent over UDP using op codes. The packet is then parsed and translated into an event for our game manager to consume.


The game was built using Unity and C#.

Challenges we ran into


  • Designing a unique controller with under used inputs.
  • Implementing both hardware and software.
  • Fabricating the controller using CAD, a laser cutter and 3d printer.


  • Multi threading a server that uses UDP in C#.
  • Creating and processing OpCodes sent from the controller.


  • Design a game for a custom peripheral.
  • Processing input from a custom device.

Accomplishments that we're proud of

  • Able to connect to the hardware prototype wirelessly
  • OpCode Design and Implementation
  • Receive input from the peripheral over the network
  • Modify the controllers display over the network

What we learned

  • Threading.
  • UDP Networking.
  • Designing for a custom peripheral.

What's next for Colossal Ascent

  • Finish the game mechanics.
  • Build 3 more controllers.
  • Add support for all controllers.
  • Build additional game modes.
  • Create a Unity plugin for our controller.
+ 2 more
Share this project: