#Tuning Difficulty
#The "Recommended level" signs are the real dial
Every Gate<N> under Workspace["New Map"].Gates has a child
StageLabelLeft.RecommendedLevel TextLabel reading "Recommended level: N". Several hazards
(the Stage 10 closing walls, the final-stage boss) deliberately read this label live at boot rather
than using a fixed number, so retuning a stage's difficulty is one edit, not a hunt through scripts:
- To make a stage's hazard/boss easier or harder, change the recommended level painted on that stage's gate
—
NewMapServiceis what writes these labels, so check there for exactly where the number comes from in your build. - Anything you build that should scale the same way should read the label at boot, not hardcode a level —
see
BossService.readRecommendedLevel(gates, gateName)for the exact pattern (parses the trailing number out of the label'sText), reused identically by the Stage 10 wall script.
#What "matching a recommended level" actually computes
Both the closing walls and the recommended-level-matched boss do the same calculation:
speed = Formulas.MaxWalkSpeed(recommendedLevel)
crossTime = corridorLength / speed -- corridorLength = the hazard's own Size.X
window = crossTime * margin -- margin defaults to 1.35, i.e. "35% more than the bare minimum"
margin is a constant near the top of each script — raise it for a more forgiving hazard at the same
recommended level, lower it to make "barely enough" closer to literal. There's also a hard floor
(CLOSE_MIN_SECONDS/VISIBLE_MIN_SECONDS, 1–3 seconds depending on the hazard) so an extremely high
recommended level never produces an unreasonably-fast, sub-second window.
#Hazards with fixed timing
Not everything scales with level — the rising floor traps (Stage 9/12) and the vanishing bridge (Stage 7) run on a fixed cycle regardless of player level, by design (see Stage Hazards). If you want one of these to scale with level too, the pattern to copy is the closing-wall script, not the rising-trap script.