Now it becomes a real party game. Give everyone a knockback gauntlet, cut players who fall behind, then drop the survivors into a shrinking arena for a last-one-standing final. Push people off the map, that is the whole point.
Lumo says: this is the most advanced episode. Take it slowly. Everything here runs on the server, because the server is the referee and players cannot be trusted to be fair to each other.
1
๐ฅ
Hand Out the Gauntlet
A Tool every player holds, with a glowing Handle
Active
๐ฏ
Goal for this step
A tool called the Glitch Gauntlet, given to every player when a round begins.
1A Tool is a held item in Roblox. It needs a child part called exactly Handle.
2When the player clicks or taps the tool, the Activated event fires. That is our shove.
3We build the tool in code on the server and put it in the player's Backpack.
Run giveGauntlet(player) for every player at the start of a round. On a phone the player taps the tool icon in their hotbar, on a computer they click, and on a controller they press the button. One tool, every device.
๐
Fill in the Concept
+15 XP
A held item in Roblox is called a , and it must contain a part named .
๐ง
Knowledge Check
+15 XP
Which event fires when a player clicks or taps their tool?
ATouched
BDied
CActivated
2
๐ฅ
The Shove
Push everyone in front of you away, hard enough to send them off the edge
Locked
๐ฏ
Goal for this step
Find nearby players in a cone in front of you and launch them away.
1Loop over every other player and measure the distance to them.
2Check they are in front of you using the dot product of your facing direction.
3Add a burst of speed to their character, away from you and slightly upward.
The dot product is a maths trick that tells you the angle between two directions. A value near 1 means "right in front of me", near 0 means "to the side", negative means "behind me". We accept anything above 0.35, so a wide cone in front.
โจ๏ธ
Code Challenge
+20 XP
Check the other player is close and in front, then push them away:
ifaway.Magnitude <= RANGEandlook:(away.Unit) >= 0.35thenotherRoot.AssemblyLinearVelocity = away.Unit * POWER + .new(0, UP, 0)
end
Hint: the method that compares two directions, and the type for an X Y Z value.
๐ง
Knowledge Check
+15 XP
What does away.Unit give us?
AA direction with a length of 1, pointing from you to them
BThe distance in studs
CThe other player's health
3
๐
Rank and Eliminate
Keep the fastest players, remove the rest, send them to spectate
Locked
๐ฏ
Goal for this step
At the end of a round, put the players in order and cut the bottom of the list.
1Collect every player with how far along the course they got.
2Sort them, best first, with table.sort.
3Keep the top slice and mark everyone else as eliminated.
ObbyServer (Script)
localfunctionrankAndCut(field, keep)
table.sort(field, function(a, b)
returna.progress > b.progress-- further along = betterend)
localsurvivors = {}
fori, entryinipairs(field) doifi <= keepthensurvivors[#survivors + 1] = entry.playerelseeliminate(entry.player) -- out of the matchendendreturnsurvivorsend
๐ก
How big is keep? Make it a percentage that scales with the crowd. With 8 players keep about 5, with 40 keep about 20. Never let it drop below the number you need for the final. Our Config says FINAL_SIZE = 5.
๐ข
Put a round in order
+15 XP
Click the stages of a round the way the server runs them:
Build a fresh map
Start the race and give out gauntlets
Rank everyone by progress
Keep the top slice, eliminate the rest
๐ง
Knowledge Check
+15 XP
What does table.sort(field, compare) do?
ADeletes the table
BReorders the list using your rule
CCounts how many items are in the list
4
๐๏ธ
Build the Final Arena
A grid of tiles with a ring number, ready to be eaten away
Locked
๐ฏ
Goal for this step
A circular-looking platform built from square tiles, each tagged with a ring number.
1Make a grid from -6 to 6 in both directions. That is a 13 by 13 floor.
2For each tile work out its ring, how far it is from the centre.
3Store the ring on the tile with SetAttribute, so we can find and remove the outer ring later.
The centre tile is ring 0. Everything around it is ring 1, then ring 2, and so on out to ring 6 at the edge. Deleting a whole ring at once gives you that shrinking battle-royale feel.
๐ง
Knowledge Check
+15 XP
What number does the very centre tile get?
A6
B1
C0
5
โณ
The Arena Shrinks
Every few seconds the outer ring falls away, until one player is left
Locked
๐ฏ
Goal for this step
Delete the outermost ring on a timer and crown the last player standing.
1Count down, and when the timer hits zero remove the highest ring left.
2Anyone standing on the fallen ring drops into the void and is out.
3Stop when one player remains. They are the champion.
ObbyServer (Script)
localring = 6while #alive > 1dotask.wait(11) -- SHRINK_EVERY secondsshrinkRing(ring)
ring = ring - 1endlocalfunctionshrinkRing(n)
for _, tileinipairs(arenaFolder:GetChildren()) doiftile:GetAttribute("Ring") == nthentile:Destroy() -- the edge falls awayendendend
๐ง
Players who fall below the arena should be knocked out. Check root.Position.Y each frame; if it drops below the arena, that player is out. Do not respawn them, this is the final.
๐จโ๐ง
Tip for a fair final: give the gauntlet a small damage value in the final too, so a well-timed shove can knock someone out. Around 34 damage, so three hits finishes them. That keeps it a real deathmatch, not just a pushing contest.
โจ๏ธ
Code Challenge
+20 XP
Keep shrinking while more than one player is alive:
while #alive1dotask.wait(11)
shrinkRing(ring)
ring = ring - 1end
Hint: one character. "more than one player alive" means the count is greater than 1.
๐ง
Knowledge Check
+15 XP
When does the final end?
AWhen only one player is left standing
BAfter a fixed five minutes
CWhen the arena is empty of tiles
6
๐
Champion and Publish
Show the winner, then publish your game for friends to play
Locked
๐ฏ
Goal for this step
Celebrate the winner and put your game online.
1Set a Won attribute on the champion and fire a RemoteEvent so their screen shows a big banner.
2Click File then Publish to Roblox, give the game a name and a description.
3Set it to Public in Game Settings so anyone can join, then test it from the Roblox website.
ObbyServer (Script)
localfunctioncrown(champion)
champion:SetAttribute("Won", true)
event:FireAllClients("Champion", champion.Name)
end
๐ก
You now have a complete party game: a lobby, a match loop, three procedural map themes that never repeat, a shove gauntlet to push people off, elimination, and a shrinking last-one-standing final. Push people off the map is the whole point, and now you can.
๐จโ๐ง
Where next: try adding a sound when the ring drops, or a speed boost pad, or a second gauntlet that pulls players instead of pushes. The Config file is yours to play with.
๐ง
Knowledge Check
+15 XP
Why does the server decide who is eliminated and who wins?
ABecause the client cannot draw platforms
BSo players cannot cheat; the server is the referee
CBecause the server has better graphics
๐โจ๐โญ๐
You Built a Party Game!
Three episodes, one complete game: a lobby, an endless match loop, three procedural maps that are different every time, a shove gauntlet, elimination and a shrinking final. Publish it and push your friends off the map.
0
Total XP
1
Level
0
Best Streak
0%
Accuracy
๐น๏ธ
Build it in the browser first
Try this project step by step right here: write the code, watch it run, then download it and keep building in your engine.