Speed ASMR Keyboard EscapeDocumentation ← Portfolio

#Tuning Difficulty

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 — NewMapService is 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's Text), reused identically by the Stage 10 wall script.

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.