Skip to main content

Stage 8: Spinning KillBricks

Course progressStage 8 of 10
~37 min
Before you start

Make sure you've finished Stage 7: Rolling Rocks.

Build

a path guarded by spinning KillBricks

Learn

how rotation changes a simple crossing challenge

Ship

a spinner stage with a checkpoint after it


Stage preview
Stage 8
Preview the path guarded by spinning KillBricks and clear safe gaps.

Preview the path guarded by spinning KillBricks and clear safe gaps.

Build this stage below

The big idea

Today's hazard doesn't travel anywhere. It just spins in place. The player has to time their dash so the spinner is pointed the wrong way when they walk past.

The new design lesson is rotation creates a beat the player can read. A boulder rolls and is gone. A fireball flies and is gone. A spinner stays — and that's actually harder, because the threat never leaves. The player has to learn the rhythm of the spin, then commit to the gap between sweeps.

A spinner is a real game-design trick from action games as old as Donkey Kong. The danger is always present; the player just has to find its quiet moment. Combine spinners with narrow paths and you get one of the most reliable difficulty knobs in any platformer.

Build it

Step 1 — Build the path and the sweep arm

A narrow path with one long arm spinning across it. Players time the gap between sweeps.

stage8Easy

Build this part

SpinPath

Block
Open recipe
Size
4 × 1 × 40
Color
Dark stone grey
Material
Concrete
Anchored
✓ Yes
Place
Right in front of the Stage 8 checkpoint, stretching forward 40 studs

Narrow on purpose — the player should have NO room to walk around the spinner. They have to walk through the gap on the spinner's timing.

Build this part

SweepArm

Block
Open recipe
Size
10 × 0.5 × 1
Color
Really red
Material
Neon
Anchored
✓ Yes
Place
Hovering 2 studs above the middle of SpinPath. Its long axis (10) reaches beyond both edges of the path.

Anchored = true is essential. We're rotating the arm in code; physics would interfere if it were unanchored.

Step 2 — Add the script that spins and kills

The script does two things: rotates the arm a tiny bit every frame using Heartbeat, and kills any player that touches it. Right-click SweepArmInsert ObjectScript. Delete the placeholder.

Paste into Script
Script

SweepArm

The Script goes inside SweepArm. The spinSpeed variable near the bottom is what you'll tune to make the stage easier or harder.

local arm = script.Parent
local RunService = game:GetService("RunService")

arm.Touched:Connect(function(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
end)

-- About one full rotation every 3.5 seconds.
-- Bigger number = faster spin = shorter safe window.
local spinSpeed = 1.8

RunService.Heartbeat:Connect(function(deltaTime)
local turn = spinSpeed * deltaTime
arm.CFrame = arm.CFrame * CFrame.Angles(0, turn, 0)
end)

Press ▶ Play. SweepArm spins continuously across the path. Walk into it and you respawn at the Stage 8 checkpoint.

Tune it

The spinSpeed = 1.8 line is your difficulty dial:

  • 1.2 — slow and easy. Big safe windows.
  • 1.8 — the default. Tight but fair.
  • 2.6 — fast. Cross only on a good read.

Try a value, press Play, time a crossing. That's how every real game tunes its hazards.

Step 2 — Add the next checkpoint

Stage 9 checkpoint goes at the end of the path. Standard pattern — this is the eighth time you've done it.

2.1 Add another SpawnLocation

In Explorer, right-click WorkspaceInsert ObjectSpawnLocation.

2.2 Set its properties

  • BrickColor → a new color.
  • AllowTeamChangeOnTouch → checked.
  • Neutral → unchecked.
  • TeamColor → matches the BrickColor.

2.3 Tag it with its stage number

Same gesture as Stage 1. In the Attributes section of Properties, add a StageNumber attribute (number type) and set its value to 9.

2.4 Add a Team

  • In Teams, insert a new Team named Stage 9.
  • Uncheck AutoAssignable.
  • Set TeamColor to match.

Drag the SpawnLocation onto the end of your path.

Understand it

A spinning hazard is the simplest possible cyclical danger. The brick has two states the player can read: "currently dangerous here" and "currently dangerous there." Once the player figures out which state lasts how long, the puzzle is solved. The first time through, the spinner feels brutal. By the third or fourth attempt, it feels easy. That learning curve is exactly what makes the stage rewarding.

The script uses CFrame.Angles to rotate the arm by a tiny amount each frame. CFrame is Roblox's name for position plus orientation in 3D space. Most players never need to know what CFrame is — but the pattern (arm.CFrame = arm.CFrame * CFrame.Angles(0, turn, 0) every frame to make something spin) is the recipe behind every rotating part in every Roblox game. Stage 8 is the first time you've seen it; once you see it, you'll start spotting it everywhere.

The medium stretch (a row of spinners) is sneakier than it looks. Two spinners side-by-side either feel predictable (if they spin in sync) or chaotic (if they don't). Aim for chaotic by varying their start orientations — that way the player has to read each one separately, and a single rhythm doesn't carry them through.

The narrow path forces the player to engage with the spinner. If they could walk around it, the design wouldn't matter — they'd just skip it. Narrow + timed + spinning is the recipe.

Try this

Learning beat

Try this

Three short experiments. Predict before you run, then test your guess.

Predict first

Place a SpinningKillBrick on a wide path (twice as wide as the spinner). Predict whether players will still respect the danger, or just walk around it. Try it. Did you guess right? What does that say about how walls and danger have to work together?

Compare

Place a SpinningKillBrick sideways — rotate it so it spins around a horizontal axis. Does it still hurt players? Is the timing pattern easier or harder to read? What changed about how the danger sweeps through space?

Connect

Stage 9 has a wall that slides across a hallway instead of spinning in place. Which kind of moving hazard do you think is harder to time, and why? (Hint: think about whether you can see the whole danger at once.)

Test your stage

Before moving on:

  • Press ▶ Play and start from the Stage 8 checkpoint.
  • Watch one full spin before crossing.
  • Cross without getting hit by the spinner.
  • Touch the Stage 9 checkpoint, reset, and confirm you respawn there.
  • Design check. Does the spinner have a clear quiet moment the player can dash through, or is the timing so tight the player has to be perfect?

If it breaks

  • The arm doesn't spin. The Script is probably outside the arm. In Explorer, the Script should be indented underneath SweepArm. Check Output (View → Output) for a red error mentioning RunService — if RunService is misspelled, the Heartbeat connection fails silently.
  • The arm flies off into space when it spins. Anchored is off. Click SweepArm, find Anchored in Properties, turn it on.
  • The arm doesn't hurt me. Same checklist as Stage 4: Script inside the part, Humanoid spelled correctly (case matters), humanoid.Health = 0.
  • The spinner is too fast to dodge. Open the Script and lower spinSpeed from 1.8 to 1.2. Smaller number = slower spin = bigger safe window.
  • The spinner is too slow and feels boring. Bump spinSpeed up to 2.6 or higher.
  • Players can walk around the spinner instead of waiting for the gap. The path is too wide. Narrow it ([3, 1, 30] or similar) so the spinner's arc covers the whole crossing.
  • My Stage 9 checkpoint sends me to the wrong stage. Color mismatch — check BrickColor, TeamColor, and the Stage 9 Team's TeamColor all match.