Browser FPS MVP
Pick a gun, drop into the arena, and fight moving bots in your browser.
This first slice ships a full mini loop: choose a loadout, survive an active round, get a combat summary, save the result, and review past matches.
4 weapon profiles
Moving bot AI
Round summary + saved scores
Canvas gameplay + PHP history
Mode
Skirmish vs. bots
Round length
75 seconds
Objective
Clear the squad or outscore the timer
Controls
WASD • Mouse • R • Space
Live prototype
Built as a thin MVP slice so you can test feel, weapons, and bot movement before adding bigger maps.
Step 1
Set your operator profile
Choose a call sign and weapon preset. The selected loadout feeds directly into the live arena and the saved match record.
Step 2
Arena skirmish
OperatorOperator Nova
WeaponVX Carbine
Health100
Ammo30 / 120
Kills0
Score0
Time75s
Click inside the arena to lock the mouse. Use WASD to move and climb the hills, move the mouse to look up / down / left / right, use ← → plus ↑ ↓ as keyboard fallback, hold click/space for rapid fire, R to reload, and Esc to release aim.
Step 3
Round summary
No round finished yet.
Start a round to generate a combat report, then save it into recent matches.
Combat cues
- The arena now has climbable hills, greener grass, and a brighter island-style sky palette.
- Human-like enemy silhouettes still strafe, dodge, retreat, and chase across the new terrain.
- Clearing all bots awards a bonus score and marks the round as victory.
Step 4
Recent match reports
Stored server-side with PHP and MariaDB so each round becomes a reviewable score card.
No matches saved yet
Finish a round and use “Save result” to create the first combat report.
#= (int)$match['id'] ?> • = htmlspecialchars((string)$match['player_name']) ?>
= htmlspecialchars((string)$match['weapon_name']) ?> • = (int)$match['kills'] ?> kills • = htmlspecialchars(date('M j, H:i', strtotime((string)$match['created_at']))) ?> UTC
= htmlspecialchars(strtoupper((string)$match['outcome'])) ?>
= number_format((int)$match['score']) ?>