Multiplayer
Real online matches: two game modes (Team Elimination and Search & Destroy), 4v4 public matchmaking with a map rotation, private lobbies up to 8v8 with invite codes, bots in every empty slot, and one authoritative game server that decides every hit.
01Getting into a match
Menu
Lobby| Public match | Pick a mode, then Find Match: you only meet players who picked the same mode. Public matches rotate through the maps (Speedball, Woodland, then any others): each new public lobby, and each rematch in one, plays the next map. Matchmaking finds a public lobby that's forming (or a running match with a bot to take over), else opens a new one. Players go to the team with fewer humans; the match starts after a short wait, or at once when 8 players are in, and bots fill every empty slot so it's always 4v4. Players joining later take over a bot. After the match the same players go back to the same lobby with a new countdown (matchmaking can still fill it); Leave to go. |
|---|---|
| Private match | The host creates a lobby and shares the 5-character code or the invite link (/?join=CODE). Only the host can change the game mode, map, players per team (1v1 to 8v8; above 4 a team's open slots share one row so the lobby fits), bots, teams, or start. Private lobbies never show up in matchmaking. After a match everyone returns to the same lobby. |
| Joining | "Connecting to the match…" shows until the server sends the match, then you're straight into play (no pause screen). At the end only the scoreboard shows, then everyone returns to the lobby. |
| Leaving | Pause and choose Leave match (L or Ⓨ). A bot takes your place so the teams stay even. |
| Dropped connection | Your place is held: 15 s in a lobby, 25 s in a match. Reload or reconnect within that and you're straight back in; after that a bot takes over. |
02In the match
Online
End| Rules | Team Elimination: same Plaster rules as single player, one hit and you're out, respawn after 2.5 s with 2 s of spawn protection. First team to 30 eliminations wins, or the leader after 5 minutes. No friendly fire. Search & Destroy has its own rules (below). |
|---|---|
| Bots | The same bot AI as single player (cover, sight, reaction time, arced shots), running on the server and fighting for either team against humans and other bots. |
| Markers | Each player plays with the marker picked in Loadout. The server looks it up by id in its own markers.json (made in POE) and runs that player's fire rate, magazine, reserve, reloads and ball flight with it. Everyone else sees that marker's look (colours, texture or imported model) in the player's hands. Bots use the stock marker. |
| Pausing | Pausing frees your mouse but the match carries on, as it would for everyone else. |
03Search & Destroy
Round
Plant
Blast
Spectate| Rounds | One life per round, no respawns. A 5 s countdown starts each round with everyone back at their spawn, fresh paint and full magazines. First team to 4 rounds wins; attack and defence swap after round 3. |
|---|---|
| The bomb | Each round it lies on the ground just out of the attackers' spawn. An attacker picks it up by running over it, and only the carrier can plant. When the carrier is out it drops where they were, for any attacker to pick up; defenders can't touch it until it's planted. |
| Attackers win | when the bomb goes off, or every defender is out. |
| Defenders win | by defusing the bomb (hold F next to it for 5 s), by eliminating every attacker before a plant, or when the 90 s round clock runs out with no plant. Once the bomb is down, eliminating the attackers isn't enough: it still has to be defused. |
| Bomb sites | Placed in the map editor (Gameplay › Bomb site: A or B, radius), near the end defenders hold. Maps without any get two automatically, between the middle of the field and the defenders' spawn. Team colours and spawns never change; at halftime the sites mirror to the other end of the field. |
| Bots | The attacker nearest a loose bomb fetches it; the carrier pushes the round's site, shooting as they go, and plants when they get there while the rest escort, then they guard the bomb. Defenders hold both sites; once the bomb is down the nearest one goes to defuse it. |
| Feedback | Round banners (round, halftime, bomb planted, round won / lost and why), the Hold F prompt and progress bar, bomb beeps, armed / defused / blast sounds, the air horn at each round's end, "Bomb dropped" and "You have the bomb" banners, and once you're out, the view from behind a living teammate ("You're out — watching …"). |
04How it works
One authoritative server
The server owns paintballs, hits, eliminations, respawns, scores, the clock and every bot. Clients can't decide their own hits.
Checked input
Movement faster than a sprint or into a bunker is pulled back. Shots are refused if you're out, firing faster than the marker allows, empty or reloading, the muzzle isn't at you, or you aren't looking that way.
Shared code
The server runs the game's own collision, ballistics, hitboxes, rules and bot AI (src/sim/, src/bots.js), built headless from the map file. So game and server agree on what's solid and what's a hit.
Smooth on screen
Your own movement and shots respond instantly. Everyone else is drawn about 100 ms behind and interpolated between server updates (30 a second).
05Running it
| Development | npm run dev starts the game and the multiplayer server together on one port. Others on your network join at http://<your-ip>:5173/. |
|---|---|
| Production | npm run build, then npm run server serves the build and the game server on one port (8080 by default). |
| Details | Settings (wait times, score and time limits, Search & Destroy round and bomb times), file layout and the message protocol are in server/README.md. |
06Next
Lag compensation
Hits are judged against where the server last saw each player. Rewinding to what the shooter saw would make long-range shots fairer on slow connections.
Search & Destroy, next steps
Built 2026-10-17. Since then: one attacker carries the bomb, and you spectate teammates while you're out (run R-6). Ideas for later: an overtime rule for draws.
Bigger public matches
Private lobbies go up to 8v8 (2026-10-17). Measured at 8v8 on Woodland: the server uses about 0.4 ms of each 33 ms tick and sends each player about 19 KB/s; 16 figures on screen cost about 1,100 draw calls. Public matches stay 4v4 (PLASTER_PUBLIC_TEAM) until 8v8 is playtested.
Hosting online
Runs on any Node host that supports WebSockets. Accounts, regions and server browsing aren't built yet.