Social distanced gaming for a local only game
I play a game called Killer queen where you have to physically be on the same cabinet with 9 other people. This was an issue during the pandemic so I fixed it with some micro controllers, software hacks, and a bit of 3D printing.
The first version of this idea was done in a rush to get it done for league night so I 3D printed some housings and put an Arduino pro micro in it with some custom firmware that make made it act like an HID device with custom key bindings per player. So you have an extra button on the back to change the player you wanted to play and it would change the keys it emulated.
Software
To get the game working, that normally plays in an arcade cabinet on a intel nuc, I had to think a bit out of the box. The game in built in unity and uses a security key. The first issue was where to get the installer for the game. Luckily they have ISO files for the game just in case a system dies and you need to restore. So I was able to install the image onto a virtual machine and look at what the startup process was and see what network end points it was trying to reach out too for update. This led us to their distribution endpoint and from there it was easy enough to grab the installer for their ubuntu systems. So now I have the game files but still have the issue of the security key. The Key is a USB device that in plugged in and again looking at their first startup scripts I could see that it was registering the key to the USB port and so after install you can’t even move the port it is plugged into. After digging in a bit more I found that the key is checked before any assets are loaded and is just a part of the main executable in the project. Meaning I could just go download that version of unity and make a new project and scene, make an empty build and replace the main launch file. This bypasses the security check and the game launches!
Now I have access to the game and can do a lot more with it! I can replace assets, build custom levels, etc. But for league night we just needed key bindings, so I launched the game, hit every key and I could and made a map of the keys. With a key map I could now make the firmware and with a USB hub to plug in what the machine things is 10 keyboards we have stuff working on an old macbook running Ubuntu with some custom launch scripts.
Hardware
The first version of things were basic 3D printed boxes with buttons and sticks mounted in them. I also put some side art from the assets I ripped from the game files. But I wanted to really up the the level of this and so I took a 3D scanner to a physical cab and scanned the whole thing, used the model as reference to CAD up a full cabinet re-creation and from that full cab file I could now get measurements for the real spacing of the arcade cab and make controllers that work a lot better. I designed some custom PCBs with easter eggs hidden all over the, gold plated, and designed so that the PCBs that are about the size of a mother board would not only act as the electrical connections but also the hardware surface it’s self! In the game tapping fast is really important so I also added an I2C OLED display so that anyone can see just how fast, and steady you are tapping at any given point in time. The micro controller is mounted directly to the bottom of the board and solder points for the buttons put right next to the button it’s self and then connected via the PCB.