Inspiration
The main inspiration for this project came from Instagram reels. We saw the citywide manhunts people were running at night and thought "that looks like our childhood, but way more fun!" SFU's Burnaby campus felt like the perfect place to try it: it's huge, full of stairs, hallways and weird corners, and most of us only ever walk the same route between classes.
The problem was that a regular manhunt doesn't work at that scale. Nobody can find anyone, and the game just fizzles out. So we borrowed ideas from battle royale games to keep it moving.
What it does
SFU Manhunt is hide-and-seek for the whole campus, played on your phone.
- The host creates a game and everyone joins with a 5-letter code. It runs in Safari, so there's nothing to download.
- Hiders get a head start. Then every few minutes the seeker gets a "ping" that shows where every hider is for 30 seconds.
- If the seeker goes too long without catching anyone, the pings speed up. That stops hiders from just sitting in one spot all game.
- The play area is shaped like the campus and shrinks over time toward a final spot, like Convocation Mall. Stay outside it too long and you're out.
- Powerups show up on the map: a Shield hides you from the next ping, a Decoy fakes your location, and a Border Pass lets you step outside the zone for a bit.
- Hiders also wear a wrist device we built on an Arduino. It buzzes on every ping, shows how long you've survived, and when the seeker catches you they tap the touch sensor on it and it flashes "YOU ARE TAGGED!"
There's also a 3-minute demo mode that plays a full round with captions, so you can see everything without running around campus.
How we built it
The game is a web app in plain HTML and JavaScript, hosted on GitHub Pages. The map uses Leaflet and OpenStreetMap, and we drew our own outline of the Burnaby campus on top of it. Firebase handles the live data, so everyone's phone sees the same positions, pings and powerups in real time.
To work out distances between players we used the haversine formula, which gives the distance between two GPS points on the Earth's surface:
$$d = 2R\arcsin\left(\sqrt{\sin^2\frac{\Delta\varphi}{2} + \cos\varphi_1\cos\varphi_2\sin^2\frac{\Delta\lambda}{2}}\right)$$
Powerups aren't placed randomly. The app tries a bunch of spots and picks one that's inside the zone, far from the seeker, and close enough to the hiders to be tempting but risky.
The wrist device is an Arduino UNO R4 WiFi with a Grove base shield, an LCD, a touch sensor, a button and a buzzer, in a 3D-printed case. We used AI coding assistants to help us build faster, especially for the map math and the case design.
Challenges we ran into
- Our first hardware plan used Bluetooth to talk to the phones. Then we found out iPhones don't let websites use Bluetooth at all, so we had to rethink how the device fits in.
- Phone GPS jumps around by 5–15 metres, and more near buildings. Early on that meant people got "eliminated" while standing inside the zone. We added a buffer and only count you as outside after a few bad readings in a row.
- Getting every phone to agree on exactly when a ping happens, without running our own server, took a few tries.
- Our first case took over 2 hours to print, which was too slow for a hackathon, so we redesigned it as an open frame that prints in about an hour.
- Real-world testing found bugs we never saw on a laptop, like phones loading old versions of the site and players getting stuck in games that had already ended.
Accomplishments that we're proud of
- It actually works on regular iPhones with just a link.
- We built the whole thing ourselves: the app, the live backend, the hardware and the case.
- The demo mode, because it lets anyone see the full game in 3 minutes.
What we learned
- GPS is a lot less accurate than we thought, and the game rules have to be designed around that.
- How to keep a multiplayer game in sync across a bunch of phones.
- How to design a 3D-printed case around real parts, and how much print time matters when you're on a deadline.
What's next for SFU Manhunt
- Connecting the wrist device to the app over Wi-Fi, so it shows live ping times and the real number of players left.
- A full-size game on campus with friends, then tuning how fast the zone shrinks and how often the pings come.
- Mapping off-limits areas properly on foot, and adding the Surrey and Vancouver campuses.
Built With
- 3d-printing
- arduino
- arduino-uno-r4-wifi
- c++
- cad
- css3
- firebase
- firebase-authentication
- firebase-realtime-database
- github
- gps
- grove
- html5
- javascript
- lcd
- leaflet.js
- openstreetmap
Log in or sign up for Devpost to join the conversation.