◆Plaster// Multiplayer
Deep dives

Multiplayer

// server/ · src/net/ · src/menu/ · added 2026-10-16

Real online matches: two game modes (Team Elimination and Search & Destroy), 6v6 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

The main menu: the Play cards (Play Online, Private Match and Practice), the next map and your operator standing on Woodland.Menu
Main menu › PlayPlay Online (public matchmaking), Private Match, and Practice (the offline game vs bots). Works with mouse, keyboard and controller. See the Main menu page.
A private lobby on Woodland: a picture of the map, code, map and team-size settings, and both teams.Lobby
Private lobbyA picture of the map being played (saved by the map editor with every save), room code and invite link, game mode, map, players per team and bot fill. The host moves players, adds or removes bots and starts the match for everyone. Your team lines up on the field beside you.
Public matchPick 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 12 players are in, and bots fill every empty slot so it's always 6v6. 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 matchThe 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, what the bots carry (Bot markers: the stock marker, a random one each from the marker library, or one marker for all; a bot fires at its marker's pace, bolt included, and aims for its paint's flight), 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.
LeavingPause and choose Leave match (L or Ⓨ). A bot takes your place so the teams stay even.
Dropped connectionYour 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

An online match: score bar with team scores and clock, kill feed, teammates with name tags.Online
Online matchTeam scores and clock at the top, kill feed on the right, name tags over teammates. Hold Tab (or Back/View) for the scoreboard: eliminations, outs and K/D.
End of match scoreboard: result, team scores and every player's eliminations and outs.End
End of matchResult and scoreboard, then everyone goes back to the same lobby to play again together, public or private. Leave (or Esc) to go.
RulesTeam 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 100 eliminations wins, or the leader after 5 minutes. Everyone carries 3 spare magazines that keep their paint: tap reload to swap one in (the old one goes back in the pouch), hold reload to drop the old one for a quicker reload; the server keeps the same count. No friendly fire. Search & Destroy has its own rules (below).
BotsThe same bot AI as single player (cover, sight, reaction time, arced shots, aiming down sights at range, routes that follow trails and doorways on big maps), running on the server and fighting for either team against humans and other bots.
MarkersEach player plays with the primary marker and sidearm picked in Loadout. The server keeps both slots, each with its own magazine and spares, is told when a player switches (switch), checks every shot against the marker in their hands and holds fire until the switched-to one is up. Snapshots say whose sidearm is out, so others see it in their hands. 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.
PausingPausing frees your mouse but the match carries on, as it would for everyone else.

03Search & Destroy

Start of a Search and Destroy round: the round bar under the score shows Round 1, first to 4, and the Attack role; site letters A and B show through a bunker.Round
Round startThe bar under the score shows the round, your role and goal, and how many players each team has left. The A and B site letters show through cover.
Planting the bomb inside the ring of site A, with a progress bar.Plant
PlantingInside a site's ring, hold F (Ⓨ) for 5 s. You can't move or fire while planting; letting go or being hit starts it over.
The paint bomb going off at site A: a burst of paint over the site, its letter turned red.Blast
DetonationOnce planted, the site's letter turns red and the bomb beeps faster as its 45 s run down. When it goes off it showers the site in paint; anyone within 7 m is out.
Out for the round in round 2 (blue now defends), seeing through a living teammate's eyes, marker in hand, sites A and B marked ahead.Spectate
SpectatingOut for the round, you see through a living teammate's eyes, marker in hand; Space (Ⓐ) switches to the next one. Attackers see a BOMB tag through cover over the loose bomb or whoever carries it.
The view between rounds: Woodland from high above, turning slowly, with the fort in the middle.Between rounds
Between roundsThe camera rises over the field and slowly turns while the scoreboard is up; the same view sits behind the end-of-match board.
The held-Tab scoreboard in Search and Destroy: every blue player and two red players struck through with a red OUT tag; Blue 0 left, Red 2 left.Tab
Who's outHold Tab (Back/View): everyone out for the round is struck through with a red OUT tag, and each team shows how many are left.
RoundsOne 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. The teams swap attack and defence every round.
The bombEach 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 winwhen the bomb goes off, or every defender is out.
Defenders winby 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. A defuse wins the round at once, but play goes on 3 s more (a Bomb defused banner) before the result.
EndsThe field has a fixed attacking end and a fixed defending end (the one with the bomb sites). Attackers always start at the attacking end and defenders at the defending end, so when the teams swap roles each round they also swap ends. Team colours never change.
Bomb sitesPlaced in the map editor (Gameplay › Bomb site: A or B, radius) near one team's spawn, which makes that the defending end. Maps without any get two automatically, between the middle of the field and the red spawn.
TimingsPlant 5 s, defuse 5 s, bomb 45 s from the plant, 90 s round clock before a plant.
BotsThe attacker nearest a loose bomb fetches it; the carrier pushes the round's site, shooting as they go, and plants when they get there. The other attackers escort on lanes of their own: spread across the field, they wait a while at a staging point, then close in on the site from their own angle (or as soon as the carrier gets near), and after the plant guard the bomb from different sides. Defenders spread round both sites (with four or more, one holds forward toward the middle) and shift spots now and then; once the bomb is down the nearest one goes to defuse it and the rest come at it from different sides. Measured over 6v6 bot matches, attackers standing within 2.5 m of a teammate dropped from about 75% of the time to 18% (Speedball) and 25% (Woodland).
FeedbackRound banners (round and role, "sides switched", 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, a living teammate's view ("You're out — watching …") and OUT tags on the Tab scoreboard. Between rounds the camera rises to a slow, turning view of the whole field with the scoreboard low on the screen (it comes up a moment after the round's banner); at the end of any match the end-of-match board shows over the same view. A defused bomb goes quiet (no beeps, a steady green light) and the defuse prompt disappears.

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

Developmentnpm run dev starts the game and the multiplayer server together on one port. Others on your network join at http://<your-ip>:5173/.
Productionnpm run build, then npm run server serves the build and the game server on one port (8080 by default).
ModerationNames are checked on the server against server/blocked-words.txt (edit it any time; changes apply within 10 s). The person playing on the computer that runs the server can kick or ban anyone; a private lobby's host can in their own lobby. Use the lobby's player list (✕ kicks, ⛔ bans) or Esc › Players in a match. Bans cover the player's browser and IP until the server stops.
DetailsSettings (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.

Planned

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); sides switch every round, first-person spectating, who's out on Tab, 5 s plant and 45 s bomb (run R-7). Ideas for later: an overtime rule for draws.

Next

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 went from 4v4 to 6v6 on 2026-10-18 (PLASTER_PUBLIC_TEAM); 8v8 waits for playtests.

Next

Hosting online

Runs on any Node host that supports WebSockets. Accounts, regions and server browsing aren't built yet.

Planned