Skip to content

JacobStephens2/UnrealUSPSAMatch

Repository files navigation

Unreal USPSA Match

A 3D USPSA-style practical shooting stage for Android, built with Unreal Engine 5.7 in pure C++ — no external art or audio assets (engine primitive meshes, plus materials and sound effects generated by the scripts in this repo).

The stage on an Android emulator

The stage

A timed course of fire scored like a real USPSA match:

  • Paper targets with A / C / D scoring zones — A = 5, C = 3, D = 1 points, best two hits on each count.
  • Steel poppers that fall when hit (+5).
  • No-shoot targets (white) — −10 penalty per hit.
  • Misses−10 each (a paper without its two hits, or a popper left standing).

Tap START, wait through the random standby delay for the buzzer, then engage the bay. The clock runs from the buzzer to the last required hit; the stage scores itself with a hit factor = points ÷ time and a full A/C/D + penalty breakdown. Tap RUN AGAIN to re-run.

Controls (touch)

  • Tap anywhere to shoot (shots go where you're looking).
  • Drag the bottom-left corner to move, bottom-right to look.
  • Desktop fallback: WASD + mouse, left-click to fire.

Audio

Buzzer, gunshot, steel "ding", paper "thwack", and a looping music bed are all synthesized by gen_audio.py (pure Python, standard library) and imported as SoundWave assets by import_audio.py. Materials are likewise authored headlessly by make_material.py.

Source layout

File Role
Source/Shooter3D/ShooterGameMode.* Stage manager: buzzer/timer/state, scoring, hit factor, builds the bay
Source/Shooter3D/ShooterTarget.* Paper (A/C/D zones), steel popper, and no-shoot targets
Source/Shooter3D/ShooterCharacter.* First-person pawn, tap-to-shoot, gunshot SFX
Source/Shooter3D/ShooterProjectile.* Projectile + hit reporting
Source/Shooter3D/ShooterHUD.* Slate HUD: time/points, START/RUN-AGAIN, GO! flash, results
gen_audio.py / import_audio.py / make_material.py Asset generators

Building the Android APK

Requires UE 5.7 with the Android platform, the Android NDK/SDK, and a JDK. Set ANDROID_HOME, ANDROID_NDK_ROOT, NDK_ROOT, NDKROOT, JAVA_HOME, then:

UE="/path/to/UE_5.7"
PROJ="$PWD/Shooter3D.uproject"
"$UE/Engine/Build/BatchFiles/Mac/Build.sh" Shooter3DEditor Mac Development -project="$PROJ" -waitmutex
"$UE/Engine/Build/BatchFiles/RunUAT.command" BuildCookRun -project="$PROJ" \
  -platform=Android -cookflavor=ASTC -clientconfig=Development \
  -build -cook -stage -package -pak -archive -archivedirectory="$PWD/Archive" \
  -nodebuginfo -nocompileeditor -utf8output

Output: Archive/Android_ASTC/Shooter3D-arm64.apk (~130 MB, debug-signed, arm64-v8a, data packed inside the APK so a plain adb install works).

About

Unreal USPSA Match — a 3D USPSA-style practical-shooting stage for Android, built in Unreal Engine 5.7 in pure C++: a procedurally generated bay with A/C/D paper, steel poppers and no-shoots, a buzzer-started timer, Comstock hit-factor scoring, and synthesized audio.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors