Inspiration
Group games usually need hardware, installs or setup: a console, extra controllers (a PS5 DualSense alone is $74.99), or an app everyone has to download. But almost everyone in the room is already carrying a motion controller — 85% of U.S. adults own a smartphone. We wanted a game a room full of strangers could join in under 30 seconds with nothing but the phone in their pocket, and that turns friendly rivalry into the whole point.
What it does
Crownfall puts one shared arena on a big screen. Everyone scans a QR code, taps Enable Motion, calibrates, and they're in.
- Tilt your phone to move your avatar — more tilt, more speed.
- Grab the crown by running into it. Every half second you hold it earns a point, but it gets heavier and slows you down.
- Steal it: get close to the holder and your phone lights up YANK NOW. One sharp yank takes the crown (+3).
- Your phone is your personal HUD: gold when you hold the crown, a red flash when you're robbed, live score, and final rank.
- 90-second rounds, a live scoreboard on the big screen, and instant rematches on the same connections.
- In progress: Draw-off duels — a yank starts a standoff, both players freeze on "HOLD STILL…", and the first clean yank after DRAW! wins. Early yanks are fouls.
How we built it
- Phone controller (React + TypeScript): reads
DeviceOrientationfor tilt andDeviceMotionfor yanks. A one-tap calibration sets your neutral grip; a dead zone and smoothing turn tilt into a −1..1 direction sent 20 times per second. - Yank detection: gravity-free acceleration magnitude with a threshold and cooldown, tuned on real phones.
- Authoritative server (Node, Express, Socket.IO): owns every position, pickup, steal and score at 30 Hz, validates and rate-limits all input, and broadcasts 30 Hz snapshots.
- Big screen (React + Phaser): renders the arena with 50 ms interpolation, plus the lobby QR code, scoreboard, timer and event banners.
- Clock sync: phones estimate the server's clock offset with ping/pong so yank timestamps are judged in server time — the foundation for lag-fair duels.
- Deployed on Render over HTTPS (required for motion sensors).
Challenges we ran into
- iOS motion permissions: Safari only grants orientation and motion access from a direct tap, and both requests have to start inside the same gesture.
- Telling a yank from a tilt: we built a sensor test page and measured real phones — deliberate yanks peak around 40 m/s², normal tilting stays under 6 — and set the threshold from that.
- Latency: our first build took about half a second from tilt to screen. We profiled every stage (phone smoothing, network, server tick, render buffer) and cut it substantially by tuning smoothing, doubling the snapshot rate and halving the render delay.
- Ghost players: refreshing a phone left "offline" players filling the room, so the server now reclaims lobby slots after 2 seconds.
Accomplishments that we're proud of
- Tested on 5 real iPhones over campus Wi-Fi and cellular, with 4 playing together on one screen.
- Supports up to 8 players, verified with 8 simulated phones moving independently.
- Server-authoritative design with 29 automated tests covering pickup, steals, cooldowns, timing, results and rematches.
What we learned
- How phone sensor APIs actually behave across browsers, and how iOS gates them.
- Real-time networking: authoritative servers, snapshot interpolation, input rate limiting, and why every millisecond matters in a motion game.
- Clock synchronization for fair timing across unequal connections.
- Splitting work cleanly through a shared message contract so two people can build in parallel and merge at every milestone.
What's next for Crownfall
More modes (teams, tournaments), revenge and Wanted bounties, power-up gems, a slow-motion duel replay, and uses beyond parties — classroom icebreakers and orientation events, where a group of strangers needs to be playing together in 30 seconds.
Log in or sign up for Devpost to join the conversation.