Rounds, map votes and teams that never get stuck
A lobby that waits for enough players, an intermission countdown, a map + mode vote, map loading, fair teams with parties and skill, spawns with protection, win checks for free-for-all, team deathmatch, elimination and objective modes, an MVP scoreboard, and rewards paid exactly once per match. Then it loops.
For: Roblox developers building round-based shooters, minigames, PvP arenas and party games.
See it work: real output from the shipped code
One full match with the example config
Driven through RoundMachine:Step() with 6 players (one joins first, five more during the wait). The status lines are Format.status() of the snapshot clients receive.
The map vote
MapVote:Open() offered 3 map + mode options (the last map is never offered straight away); everyone voted, so the vote closed early.
| Option | Votes |
|---|---|
| Quarry · King of the Hill | 2 |
| Dockyard · Team Deathmatch ✓ | 3 |
| Rooftops · Elimination | 1 |
Blue wins (score limit) · Blue 40 · Red 35 · MVP Cy
First kills reported with RoundMachine:Kill(), then the final scoreboard and the payout Rewards:Pay() made once for this match (win 100, played 40, MVP 50, 5 per kill, 2 per assist).
| At | Kill | Assist |
|---|---|---|
| 3s | Ava → Dee | Ben |
| 6s | Cy → Ben | |
| 9s | Dee → Fay | Cy |
| 12s | Ben → Eli | |
| 15s | Cy → Ava | |
| 18s | Cy → Fay | |
| 21s | Dee → Ben | |
| 24s | Fay → Eli |
| Player | Team | Score | K/D/A | Coins | Paid for |
|---|---|---|---|---|---|
| Cy | Blue | 16 | 16/14/8 | 246 | win 100, MVP 50, 16 kills x5 80, 8 assists x2 16 |
| Dee | Blue | 15 | 15/9/4 | 183 | win 100, 15 kills x5 75, 4 assists x2 8 |
| Ben | Red | 14 | 14/14/4 | 118 | played 40, 14 kills x5 70, 4 assists x2 8 |
| Fay | Red | 13 | 13/13/0 | 105 | played 40, 13 kills x5 65 |
| Eli | Blue | 9 | 9/12/0 | 145 | win 100, 9 kills x5 45 |
| Ava | Red | 8 | 8/13/13 | 106 | played 40, 8 kills x5 40, 13 assists x2 26 |
What's inside
| Module | Runs on | What it does | Lines |
|---|---|---|---|
| RoundMachine | Server | The whole match loop. | 361 |
| Modes | Shared | Game modes as data (free-for-all, team deathmatch, elimination, score attack...) + who won. | 169 |
| MapVote | Server | Pick a few map + mode options, one vote per player, fair tie-breaks, no instant repeats. | 154 |
| Teams | Server | Fair team splits, parties kept together, join-in-progress balancing. | 180 |
| Scoreboard | Server | Kills, deaths, assists, objective points and team totals for one match, plus the MVP. | 117 |
| Rewards | Server | End-of-match payouts (win, loss, draw, MVP, per kill), paid exactly once per match. | 71 |
| Spawns | Server | Safe spawn points (team spawns, away from enemies) and spawn protection. | 76 |
| MapLoader | Server | Copies the voted map from storage into the world and cleans it up afterwards. | 56 |
| Format (free) | Client | The text your round UI shows (timers, phase lines, scores, results), same on every client. | 81 |
| Signal (free) | Shared | A tiny event object so your UI and game scripts can react to round, vote and score events. | 49 |
| Example script | Type | Put it in |
|---|---|---|
| RoundmoorConfig | ModuleScript | ReplicatedStorage |
| RoundmoorServer | Script | ServerScriptService |
| RoundmoorClient | LocalScript | StarterPlayer > StarterPlayerScripts |
Tested like real software
25 automated tests run in a real Luau VM against a Roblox engine mock, on luau-web 1.4.0 (Luau compiled to WebAssembly). They ship in the zip: cd tests && npm install && node run.mjs.
| Spec | Passing | For example |
|---|---|---|
| demo | 1/1 | demo: one full match with the example config |
| example | 2/2 | example config: 4 modes and 3 maps pass the startup checks together … |
| parts | 13/13 | Modes: the example's 4 modes pass; defaults are filled … |
| rounds | 9/9 | waits for 2 players, counts down, and drops back to Waiting if someone leaves … |
Install in 5 minutes
- Drag
Roundmoor.rbxmxonto ReplicatedStorage in Roblox Studio. - Drag
RoundmoorExamples.rbxmxin and move the three scripts to the services above. - Turn on Studio access to API services and press Play.
INSTALL.mdwalks through an example place step by step.
FAQ
Is this allowed on Roblox?
Yes. It's ordinary Luau using Roblox's own services (DataStoreService, MarketplaceService, Players). Nothing bypasses Roblox rules.
Why not a free model from the Toolbox?
Free models are a fine start. Roundmoor ships its tests (25 of them, run in a real Luau VM), validates every remote argument, and is original code with a clear licence.
Do I need Rojo?
No. Drag the .rbxmx files into Roblox Studio. A Rojo project file is included if you use it.
Can I use it in a game I sell or a client's game?
Yes: unlimited experiences, commercial or not, for you or your clients. You can't resell or share the code itself.
Is CyberMax affiliated with Roblox?
No. Roblox and Roblox Studio are trademarks of Roblox Corporation, named only to describe compatibility.