Skip to content

JacobStephens2/BevyUSPSAMatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bevy USPSA

A 3D first-person shooting game built like a USPSA (practical-shooting) stage, made with Bevy 0.18 (Rust). The range and targets are built from primitive meshes (no art assets) and every sound — the start buzzer, gunshots, steel pings, the music bed — is synthesized at startup. No art or audio assets.

Play

  1. MAKE READY (button or Space), then wait for the random-delay buzzer.
  2. Move and shoot the downrange targets:
    • Paper (tan, A/C/D zones) — needs two hits; aim centre for the A zone.
    • Steel (gray plates) — knock each one down with a hit.
    • No-shoots (white) — don't hit these; each hit is a penalty.
  3. The timer stops when every target is engaged, or press STOP (Space).
  4. You're scored on hit factor; NEXT STAGE (N) builds a fresh stage.

Controls

  • Mobile: left thumb = move, drag the right side of the screen = look, FIRE button = shoot, RELOAD button = reload. The crosshair is where you'll hit.
  • Desktop: WASD = move, mouse = look, left-click = fire, R = reload.

You carry a 10-round magazine — you can't clear a stage on one mag, so reload when you run low. A reload takes ~1.8s and that time counts against your stage clock (just like real USPSA). An empty chamber dry-fires (click) instead of shooting.

Scoring (USPSA Minor)

Hit Points
A zone 5
C zone 3
D zone 1
Steel down 5
Miss / standing steel −10
No-shoot hit −10

Each paper scores its best two hits. Hit factor = max(0, points) / time.

Run (desktop)

cargo run --release

Android

./build_apk.sh                       # builds target/bevy-uspsa.apk
adb install -r target/bevy-uspsa.apk

Requires the Rust aarch64-linux-android target, cargo-apk, and an Android SDK + NDK + JDK (see build_apk.sh). The launcher icon is generated by make_icon.py.

How it works

  • game.rs — the Match resource: random downrange layout, the start-buzzer / timer phase machine, ray-cast shooting from the camera into A/C/D zones, and hit-factor scoring.
  • audio.rs — procedurally synthesized WAV clips (buzzer, gunshot, steel ping, paper thwack, penalty, stage-clear) plus a driving blues-rock loop.
  • lib.rs — Bevy ECS app: a 3D scene (camera, lighting, range, primitive-mesh targets), first-person move/look with touch joysticks + WASD/mouse, raycast fire, and a 2D HUD overlay camera for the crosshair, controls, and results.

About

3D first-person USPSA practical-shooting range, built in Rust with Bevy 0.18 — move and shoot A/C/D paper, steel, and no-shoots; buzzer/timer, magazine + reload, hit-factor scoring, synthesized audio. Desktop & Android.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors