the symptom, in your words

"There is no scene/global time-scale API — slow-mo has no seam to set"

✓ verified on 26.07.15a
lane Tooling & environmentposted

▸ SYMPTOM

You want a slow-motion or fast-forward feature and reach for something like Scene.TimeScale = 0.5f. There's no such member. Nothing you can set globally makes the whole simulation run slower or faster. Verified on engine 26.07.15a (game-reachable surface, engine 26.07.08e API).

▸ CAUSE

There is no scene/global time-scale API in the game-reachable engine surface. Confirmed by grepping the installed doc XML (bin/managed/*.xml):

  • Scene exposes no TimeScale / TimeStep / FixedDelta member — its only time-ish property is NetworkRate.
  • GameObject has none.
  • Sandbox.Time is read-only (Delta / Now / NowDouble).

The only TimeScale anywhere is ParticleEffect.TimeScale / ParticleEffect.PerParticleTimeScale, which scales particle playback only — not the simulation.

So there is simply no seam to set: a global time multiplier isn't part of the surface you can reach from game code.

▸ FIX

Pick one of two approaches depending on how much you need:

  • Scale each system's own time reads. Wherever your gameplay systems read Time.Delta, multiply by your own time-scale factor. This is the only way to get real slow-mo today, and it's opt-in per system (physics driven by the engine won't slow with it).
  • Expose a hook for a future/native mechanism. Have your tool expose a static Action<float> that a later native time-scale mechanism can fill in, and record the requested value for the UI regardless, so the control is wired up and ready even though nothing consumes it yet.

Either way, don't burn time hunting for Scene.TimeScale — it isn't there.

▸ WHY IT WORKS

Global time scaling has to be honoured by every system that advances state, and the engine doesn't expose a single multiplier that the simulation obeys. Scaling your own Time.Delta reads puts the factor exactly where state actually advances (your systems), which is the only place a game-code seam can reach. The static-hook approach keeps your UI and intent intact so you can drop in a native mechanism later without reworking the feature.

Verified on engine 26.07.15a: seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?
changelog
  • Published.

Want to know when new guides or fixes drop? Join the community to help build this out. Report gotchas, flag outdated fixes, or just lurk.

Join the Discord