Players run to capture points while playing CaptureTag

Imagine playing king of the hill as a kid, but when you capture the hill the whole landscape around you is illuminated with light and color. That's the big vision for this small game prototype.

I wanted to make a game, that takes place in the real world involving no phones or other devices.

Built with Raspberry Pi’s, NFC readers, LED strips, and Supabase. The goal of the game is to capture and hold and many capture points as you can, stealing them back from other players, and sneaking off the gain control for your team.

Contents

  1. The Game
  2. The Tech
  3. Play Test
  4. Takeaways & Next Steps

The Game

“Multi Hill King of the Hill” is the best one phrase explainer I’ve found so far. The goal is to capture areas for your team by swiping your NFC card at the control point.

Player happy with swiping their point
A stealthy player walks away from a recently captured point.

Players compete for control of each zone, both to gain their team capture time as well as capture points for themselves.

An scoreboard then displays captured areas as well as a leaderboard.

Scoreboard and floor plan displayed on a TV. Notice some incorrect player names at the bottom from partial card reads.
Scoreboard and floor plan displayed on a TV

The Tech

Each node / "hill" consists of:

I enjoy working within Raspberry Pi well-trodden ecosystem. They are often overkill for projects, but its great to continue working in a familiar Linux environment.

Setting up CaptureTag NFC cards for the first play test
NFC cards and a Raspberry Pi node being setup for play.

The capture point is written in NodeJS, with the help of some awesome packages, namely node-rpi-ws281x-native and mfrc522-rpi.

Each card has a hex-encoded string written to it that decodes to something like `B-taco`. The first letter being the team, and second being the player's code name.

When a scan happens the Pi debounces the scan event (as they can happen in quick succession) and then shoots up the data to a simple Supabase project with a few endpoints. A lot of fun insights can be derived from the data, see the play test below for what I pulled out.

Each scan event is stored as an event queue so that game node are mostly stateless and the data can be replayed and parsed later.

Supabase admin dashboard
Rough and simple admin dashboard for managing games and nodes.

Game sessions, node assignment, and project endpoints can be managed via a super rough dashboard I slapped together. I enjoyed working framework free and keeping it as barebones as possible.

The scoreboard page uses Supabase Realtime to provide instant updates to the capture state of each node, as well as keep the leaderboard up to date.

Play Test

I was planning to have a get-together with my friends in an Airbnb, and I realized that would be perfect opportunity to try out the game!

Teaching

I didn’t get a representative experience of introducing the game to players as all involved were close friends and more or less taught each other. However I did learn a few things:

Player Feedback

I got tons of great feedback as I discussed with players, each had their different play styles and focused on different parts of the game.

Parsing Data

A few days after the game was complete I parsed out all the scan events to determine the winner, as well as some interesting stats!

Most captures by team Most captures by team Total capture time

Team based stats were less interesting in this play test, but I think with the right visibility team based play could be made really fun for players.

Next Steps

As I have time I want to polish the game, to make it as beautiful a process as possible, more so than expanding with new features. Here are a few things that I've been ruminating on:

Improvements

Takeaways

Thanks!

Creating an physical game with the tools of my incredibly virtual trade was very gratifying.

For those curious to see the code, it's pretty simple and might serve as an example for some basic LED + NFC integration in Node.

View the "Lumi" repo on Github here

My side project mindset in the past has been very business focussed, and I'm excited to build more projects around providing fun and pleasure than extracting money.