blueblack is a playable browser-based prototype for a competitive territory-control FPS. The current build includes a LAN playtest mode: players join a shared lobby, choose an original operator, and deploy together into the compact Nexus-9 sci-fi control arena. A five-minute match ends when the timer expires or the player reaches 300 points.
Requires a recent Node.js release and npm.
npm install
npm run devOpen the local URL printed by Vite. To verify a production build:
npm run build
npm run previewConnect every computer to the same router, then run:
npm install
npm run hostThe terminal prints a Network or Share with your squad address such as http://192.168.1.176:5173. Open that exact address on the other computers. The first player connected becomes host; everyone can set a callsign and select an operator, and the host starts the match for the full lobby.
Allow Node.js through the macOS or Windows firewall if another computer cannot connect. The host process uses TCP ports 5173 for the game and 8787 for the LAN WebSocket relay.
| Input | Action |
|---|---|
| Deploy button | Start the match |
| Click the game canvas | Lock the pointer / return to mouse look |
| Mouse | Aim |
W A S D |
Move |
Shift |
Sprint |
Ctrl |
Crouch |
Space |
Jump |
| Left mouse button | Fire the automatic rifle |
R |
Reload |
1 |
Equip rifle |
2 |
Equip pistol |
3 |
Equip knife |
M |
Switch between Team Alpha and Team Bravo during a LAN match |
Esc |
Release the pointer |
Walk into the illuminated central capture ring to secure Sector A. Once captured, remaining inside is not required: the sector generates score until the match ends. Targets respawn a few seconds after elimination.
- Babylon.js sci-fi facility rendering, shared PBR materials, lighting, camera, collisions, and hitscan shooting
- First-person movement with sprinting, jumping, smooth crouching, and stand-up clearance
- Authored GLB rifle, pistol, and blade with independent ammo, damage, cadence, range, recoil, reload, and melee behavior
- Compact 52 × 44 metre arena built from scratch with west/east spawn rooms, a central capture chamber, direct mid route, paired ground flanks, raised catwalks, ramps, and predictable low-cost colliders
- Quaternius Modular Sci-Fi MegaKit environment with instanced floors, walls, windows, doors, columns, consoles, vents, lights, crates, and barrels
- Three original operator concepts with roles, passives, tacticals, and deployment selection
- LAN roster with editable callsigns, independent operator selection, balanced teams, live team switching, and host migration
- Interpolated remote player movement, aim, crouch, operator colors/nameplates, weapon slots, muzzle flashes, and tracers
- Quaternius animated remote mannequins with synchronized idle, crouch, jog, sprint, jump, and weapon-action states
- Visible synchronized rifle, pistol, and knife models on remote players
- Territory capture, score accumulation, match timer, and win state
- Responsive deployment and in-match HUD
- Rapier initialization with a fixed 60 Hz physics world, ready for future dynamic props
- Vite development/build workflow and TypeScript strict checking
src/
├── main.ts Browser entry point
├── game/Game.ts Engine, physics, gameplay, and HUD lifecycle
├── gameplay/
│ ├── gameplaySession.ts Local match state and orchestration
│ ├── firstPersonController.ts
│ ├── rifle.ts
│ ├── legends.ts
│ ├── territory.ts
│ ├── arena.ts
│ └── types.ts
├── multiplayer/ Remote avatars and gameplay synchronization
├── network/lanClient.ts LAN lobby/gameplay WebSocket client
├── ui/hud.ts Renderer-independent DOM HUD API
└── styles.css Canvas and HUD presentation
server/
└── lan-server.mjs LAN roster, host-start, state, and fire relay
All third-party game assets currently bundled with the prototype are CC0 and may be used in personal and commercial projects:
- Quaternius Modular Sci Fi Guns: AR-1 rifle and Pistol-3 first-person weapon models
- Quaternius Universal Animation Library Standard: rigged mannequin and 43 embedded animation clips
- Quaternius Modular Sci-Fi MegaKit Standard: modular Nexus-9 environment geometry and texture atlases
- Kenney Retro Textures Fantasy: legacy environment textures retained in the asset library
- Kenney Blaster Kit 2.1: legacy crate and weapon assets retained in the asset library
- Kenney Mini Arena 1.1: blade GLB
- Kenney City Kit Industrial 1.0: legacy environment assets retained in the asset library
Exact license notices are stored in public/assets/licenses/.
LAN clients currently share the lobby, teams, match start, remote movement/stance/operator state, weapon choice, firing visuals, player damage, eliminations, and automatic respawning. The LAN server owns team assignment, player health, weapon damage, friendly-fire rejection, bounded movement-history rewind for ranged hits, and synchronized three-second redeployment. Territory scoring and match results still run locally in each browser. There are no accounts, internet matchmaking, inventory persistence, progression, leaderboard, or production anti-cheat systems yet.
The next networking milestone is server-owned capture/score state plus latency compensation. Accounts, ranked matchmaking, and persistence should follow only after that authoritative match loop feels reliable.