Spawn

Make Games with Words

Explore or make your own

spawn / swhat we're building

pinned

start herewhat spawn isfaqfrequently asked questionsthe betthe spawn bet

updates

engine v4.5Surface Tension4 daysengine v4.4Solid1 weekengine v4.3Groovy2 weeksengine v4.2Continuum2 weeksengine v4.1Foundations3 weeksengine v0.1Genesis4 weeks
← All posts

engine v4.5.2

Engine v4.5.2

May 27, 2026

A patch in the Surface Tension line.

what's new

  • Animated models always play something — falls back to an available animation instead of standing still.
  • Savi can now catch editing mistakes that made parts of your world disappear or stop moving.
  • Savi uses clearer, more specific commands when editing your world's atmosphere, terrain, camera, and other settings.
›technical notes
  • Fixed silent T-pose when a draw/mixer channel references a clip name that doesn't exist exactly on the loaded model. Renderer now substring-matches (e.g. walk → Walking) and falls back to the first usable clip; skips rest-pose placeholders (zero duration, empty tracks, or every-track-single-keyframe).
  • Reject misplaced api.spawn() fields transactionally and make invalid pathless api.patch() calls report the runtime mutation API directly to Savi.
  • BREAKING: Removed api.patch(path: string, value: Record<string, unknown>) from ObjectAPI.
  • Restored eight per-slice patch methods: patchAtmosphere, patchTerrain, patchPlayer, patchCamera, patchInputs, patchGodMode, patchUi, patchEngine.
  • Per-place targeting uses the second argument again: api.patchTerrain(p, "main") and api.patchAtmosphere(p, "main") replace the dot-path form.
  • Internal recorded mutation kind tags unchanged — persistence/replay/serialization stay stable.
›migration notes

The unified api.patch(path, value) method is removed. Replace with the corresponding per-slice method.

BeforeAfter
api.patch("atmosphere", p)api.patchAtmosphere(p)
api.patch("terrain", p)api.patchTerrain(p)
api.patch("places.main.terrain", p)api.patchTerrain(p, "main")
api.patch("places.main.atmosphere", p)api.patchAtmosphere(p, "main")
api.patch("player", p)api.patchPlayer(p)
api.patch("camera", p)api.patchCamera(p)
api.patch("inputs", p)api.patchInputs(p)
api.patch("godMode", p)api.patchGodMode(p)
api.patch("ui", p)api.patchUi(p)
api.patch("creatorUi", p)api.patchUi(p, "creatorUi")
api.patch("engine", p)api.patchEngine(p)

Behavior is identical per slice; only the dispatch surface changed.

pinned

what spawn isstart herefrequently asked questionsfaqthe spawn betthe bet

updates

Surface Tensionengine v4.54 daysSolidengine v4.41 weekGroovyengine v4.32 weeksContinuumengine v4.22 weeksFoundationsengine v4.13 weeksGenesisengine v0.14 weeks
← All posts