A complete, multiplayer-ready Arena Shooter framework for Roblox, written in strict Luau. Built from the ground up using source code from the most popular games in the genre as a reference, every system is faithful to the original feel while being fully modular and easy to extend.
Movement
Weapons — 7 total
Damage & Player System
Round System
Pickups
Netcode
UI — 8 screens
Everything is split cleanly into src/client, src/server, and src/shared, with each module receiving a shared State table rather than re-requiring dependencies, making it straightforward to swap out or build on top of any individual system.
Movement
- Custom velocity-based physics controller (fully bypasses Humanoid — no WalkSpeed)
- Genre-accurate acceleration algorithms for ground and air movement
- Strafe jumping with a bhop buffer window for timing leniency
- Client-side wall-slide raycast clipping to prevent upward collision pop
- Crouching, configurable gravity, jump power, and friction constants
Weapons — 7 total
- Hitscan: Shotgun (11 pellets, ±4° spread), Railgun (100 dmg), Lightning Gun (8 dmg/tick, beam), Machine Gun (±1.5° spread, tracers)
- Projectile (server-authoritative): Rocket Launcher (with rocket jump), Grenade Launcher (arcing, 8 bounces, 2.5s fuse), Plasma Gun (splash damage)
- Per-weapon ammo types matching classic arena-shooter loadouts (rockets, shells, slugs, bolts, cells, grenades, bullets)
- Server-side cooldown anti-cheat with 15% network jitter leeway
Damage & Player System
- Classic arena-shooter armor absorption formula: armor soaks 67%, health takes 33%
- Armor types (none, yellow, red) with proper reset on depletion
- Kill credit via creator tag injection on Humanoid.Died
- Stats tracking: health, armor, kills, deaths — synced to each client
Round System
- Full perpetual loop: Vote → Countdown → Active Play → Scoreboard → repeat
- Two selectable game modes: Arena (infinite ammo) and Deathmatch (ammo pickups active)
- 30s live vote phase with real-time tally broadcasts, 5s "GET READY" countdown, 5-minute rounds, 10s end-of-round scoreboard
- Random spawn selection from all SpawnLocation instances in Workspace
Pickups
- Health, armor, and ammo pickups with respawn timers
- Ammo pickups automatically disabled in Arena mode
Netcode
- Fully server-authoritative projectile simulation and damage
- Client-side VFX run locally for the shooter (zero perceived latency); WeaponEffect remote broadcasts effects only to other clients to prevent double-rendering
- Rocket-jump impulse applied directly into the client velocity controller so air-strafing works naturally during the jump arc
- AmmoSync keeps client ammo mirror authoritative from the server after every shot and pickup
UI — 8 screens
- Title / main menu screen
- HUD (health, armor, ammo with weapon icon)
- Dynamic crosshair
- Scoreboard (hold CapsLock to peek mid-game, full display at round end)
- Spectator HUD
- Round timer (countdown, active timer, scoreboard phase)
- Live vote HUD with progress bars and countdown
- Escape menu with mouse sensitivity, FOV sliders, and fully rebindable keybinds
Everything is split cleanly into src/client, src/server, and src/shared, with each module receiving a shared State table rather than re-requiring dependencies, making it straightforward to swap out or build on top of any individual system.
