Inspiration
Among Us is almost a thing of the past now, since we can conveniently see our friends IRL now. But sometimes we still chase the high of venting, sussing out imposters, and yelling at each other over VC. We've tried playing the game in-person before, but everything from killing to calling emergency meetings just isn't the same: you have to stay on the lookout for Slack pings about reported bodies, voting is a heads-down-hands-up nightmare, and doing tasks isn't as fun. We knew what we were destined for once we saw the badges: the possibility of real proximity, real sussing debates, real running from imposters (!! strava mog !!). Hack the North gave us the excuse to build actual wearable hardware for it — a badge that knows who's near you and can quietly turn you into a crewmate.
What it does
Every player is armed with an ESP32-C3 badge with an LED strip, a small screen, buttons, an IMU, and an NFC reader. Power them on and they find each other automatically — no WiFi router, no phone app, no server; badges talk directly over ESP-NOW with mesh networking. Once a player starts the game, the mystery begins...
- Roles are dealt live to every badge's screen
- Crewmates (or sneaky imposters) scan NFC tags around the venue to complete four different tasks that take advantage of different aspects of the badge sensors
- Imposters hold a button to kill crewmates in physical proximity (with a kill cooldown lock)
- Anyone who gets close to a dead crewmate can report the body or call an emergency meeting anytime
- When an emergency meeting is called, all badges flash their bright red LEDs so everyone is immediately aware
- The whole group votes players out straight from their own badges, with live tallies and a role reveal
How we built it
The whole game is C++ on PlatformIO targeting the ESP32. There's no central server anywhere — all information is shared over a small TTL-flood mesh we wrote on top of ESP-NOW: every badge that hears a message relays it onward, so the whole group stays in sync without all needing to be in direct radio range of any one host/router/server.
Proximity (so kills and body reports actually feel real) comes from RSSI (signal strength) on ESP-NOW pings each badge broadcasts.
Hardware: all we did was flash the badge! We wanted to make this super easily accessible to anyone, so any badge is compatible without any extra work (as long as you can give up on your existing data...)
Tasks
We tried to really push the limits of what we were given, so a lot of the tasks take advantage of the sensors that already come with the badge! Garbage collector uses the IMU so you have to carefully tilt your badge to send garbage into the chute. Wires and the rhythm game test your knowledge of the button layout and coordination, and window wiper uses the pitch and roll from the IMU to track your cleaning skills.
Challenges we ran into
Our original app plan was to keep the existing badge ecosystem so it would be an easy way to use the badge after this event in a fun and interactive way. However, due to hardware memory constraints, we worked on a flashed badge, and navigating the challenges of working outside of the predefined space of the existing badge sandbox.
Long-range communication. The initial environment of the badge did not expose the antennas that allowed for ESP-NOW, BLE, or WiFi. We challenged ourselves with figuring out blueprints of potentially working without it when unflashed, and during the flash environment, which one was the most suitable.
Mesh vs. router. Our first working version leaned on a WiFi router as the shared network every badge joined. Moving badge-to-badge communication onto a self-organizing ESP-NOW mesh (TTL-limited flooding with a dedup cache) let us drop the router entirely, allowing users to really play anywhere.
Proximity started on BLE. Kill detection and body reports were originally built on Bluetooth signal strength. We ended up replacing BLE out and rebuilding proximity on ESP-NOW instead, which was more efficient for the hardware that we worked with. It allowed for p2p communications, which worked well with our mesh network.
Accomplishments that we're proud of
We are a team of SWEs. We have never touched hardware in our lives. Every single advancement was a monumental win for our team, and if you heard screaming or saw people jumping around in glee it was probably because we got an emergency meeting call request from 10m away. We would like to thank every mentor who came and helped us brainstorm how to approach this, explain the fundamentals to us, tell us what was plausible and what wasn't, and gave us their wholehearted support through this entire process. We couldn't have done it without you!
What we learned
Sometimes software is not the issue and you just need new batteries. We have this written on the whiteboard so we don't waste time debugging something that isn't broken, since this isn't something that happens in pure software projects. We also feel like we're mogging every time we flash the badges, and understand why so many people like hardware. We went from being scared to flash our badges (and going to seek out the supervision of badge support) to flashing 5 badges every 10 minutes.
What's next for Among Us
We wanted to implement sabotaging, where all crewmates need to congregate in the same area for a period of time, so imposters can kill easily, but didn't have enough time to implement this idea. We also would have liked to have a greater array of tasks that took advantage of more of the badge, such as cooperative tasks that use RSSI to link up. We were also thinking of adding a camera to every badge so imposters could get recordings of kills and end the game with a little montage of their progress, or speakers that would play sound effects when different things happened (eg. kill, sabotage, emergency meeting, getting voted out...) There's so much more we could add to the game, but just not enough time!


Log in or sign up for Devpost to join the conversation.