Inspiration

Most mobile shooters give you infinite ammo and chaotic sprays. We wanted something simple, intense, and funny: what if every player only had one bullet?

If you miss, your bullet sticks in the wall. You are completely defenseless until you run into the line of fire to pick it back up.


What it does

  • One Shot, One Kill: You have one bullet. Miss it, and you must run over to retrieve it. One hit eliminates.
  • Dual-Joystick Controls: Left stick moves, right stick aims with a predictive dotted bounce line and releases to fire.
  • Solo & LAN Multiplayer: Play against 1–5 adaptive AI bots, or battle friends locally over Wi-Fi/hotspot without internet.
  • Maps & Drops: 7 point-symmetric arena layouts, in-match drops (ricochet bounces, speed boosts, shields), and a Daily Challenge mode.
  • "Your Face" Skin: Snap a photo to wear your own face on your fighter blob.
  • Monetization (RevenueCat): A "Pro" pass unlocks exclusive skins, projectile trails, and arena themes, while free players can unlock cosmetics using coins earned from winning matches.

How we built it

  • Expo & React Native: Fullscreen landscape game built with Expo 57, React Native 0.86, and TypeScript.
  • Shopify Skia: 60 FPS hardware-accelerated 2D canvas featuring squash-and-stretch blob physics, screen shake, and glowing bullet trails.
  • Hand-Rolled Physics: Custom circle-vs-rectangle collision and real-time bounce raycasting without heavy physics libraries.
  • Offline LAN Networking: Host-authoritative TCP multiplayer with UDP beacon discovery and client prediction.
  • RevenueCat: Integrated react-native-purchases with monthly/annual Pro subscriptions and crash-safe preview fallbacks.

Challenges we ran into

  • Lag-Free LAN Sync: Synchronizing 900 px/s bullets over local Wi-Fi required custom sequence-numbered client prediction and snapshot interpolation.
  • Bot AI: Teaching bots to intelligently hunt, retreat to retrieve spent ammo, and dodge incoming bullets without feeling unfair.

Accomplishments that we're proud of

  • Super Satisfying Juice: The combination of haptics, screen shake, and pop animations makes every hit feel great.
  • Zero-Server Party Play: Play multiplayer anywhere—even on a plane or subway hotspot—with zero backend servers or accounts needed.
  • 54 Automated Tests: Pure simulation tests verifying physics, symmetric layouts, and wire framing.

What we learned

Decoupling game state from React (keeping the simulation in a ref and rendering directly with Skia) is the secret to buttery 60 FPS mobile gameplay in React Native.


What's next for One Bullet Arena

  • Online matchmaking over the internet.
  • In-game arena builder to design and share custom maps.
  • More game modes and fun power-up drops.

Built With

Share this project:

Updates

Submission history