spawn
playmake
Ctrl+K
sign in
make a game
PlayMake
← about

more from spawn

  • what spawn is
  • frequently asked questions
  • bring a game you already made
  • the spawn bet
  • One Place
every engine update β†’

Engine v5.0.10

June 11, 2026

A patch to For Real.

  • Fixed a bug where talking to Savi with your voice could get stuck in a silent retry loop if the microphone pipeline failed to start β€” it would quietly hammer away forever and flood our error logs while voice just didn't work. Now it tries a few times, tells you plainly that voice is off for this session, and typing keeps working (reloading the page may bring voice back). Quick tap-and-re-hold on the mic can no longer be mistaken for a real failure.
  • If music modules ever fail to load in a game, the game now says so once and keeps playing everything it can β€” including .grain notes, which fall back to plain sample playback β€” instead of silently re-downloading the broken piece all session or delaying the music while it retries.
  • Fixed the "suddenly I'm sprinting at 10x, then my game breaks" multiplayer bug: when a game server fell badly behind, your character could rubber-band violently and your controls could go dead for minutes. The game now notices within a couple of seconds and snaps cleanly back in sync.
  • Your inputs can no longer get silently eaten after one of these episodes β€” movement and actions land again as soon as the game resyncs.
  • Your game never freezes while Savi works anymore: her scripts now run beside the game instead of inside its heartbeat, so players keep moving even while she rebuilds half the world.
  • Runaway scripts get stopped cleanly instead of locking the room, and Savi gets told exactly what happened so she can split the work up.
  • Long-running scripts no longer undo things that happened while they ran β€” if players scored points or took damage mid-script, that progress survives.
  • Edits you make in god mode while a script is running are safe now too: the script re-runs against your latest version instead of overwriting it.
  • Cars and other physics-driven builds hold together now: body panels spawned onto a moving chassis no longer freeze in place, drift apart from the wheels, or vanish entirely after a repair pass. Rebuilding a vehicle while a script error is being fixed no longer produces a dead, invisible car.
  • No creator-visible changes.
  • Changing world settings mid-session (like switching the physics engine) no longer makes script-built vehicles and contraptions fall apart β€” all their parts stay attached.
  • When a generator script can't run, you and Savi now get one clear message naming the script and what to change β€” instead of the same cryptic error repeating forever in the background while the object silently renders flat.
  • Generator scripts written with export const / export class just work now; ones using import get told exactly how to switch to require().
  • Cars built from primitive parts under a vehicle parent exist again β€” the engine's own default for those parts was being rejected by its own validator, so the body pieces silently never spawned and you got an invisible chassis driving around.
  • When a build script does fail while Savi runs it, the error now comes back to her instead of disappearing β€” she can see what broke and fix it instead of telling you it worked.
  • Loading placeholders are now clean holograms β€” the translucent bubble around each generating object is gone, and overlapping holograms now layer correctly by distance instead of in arrival order. Scenes spawning many assets at once no longer fill the view with overlapping bubble shells while things build.
  • Savi can now see how your game actually runs on each player's device β€” including when a device quietly lowered its own render quality in a past session and kept it that way. If your game looks blurry for no reason, ask her: she can check it and (with your OK) reset that device's quality so it re-measures fresh.
  • Savi can also measure multiplayer smoothness now β€” when something rubber-bands or feels laggy, she can see exactly which part of the game keeps correcting and fix the right thing.
  • Singleplayer mode no longer drops fps while moving on terrain games β€” the engine was building and tearing down the same far terrain ring about once a second, and now it doesn't.
  • Worlds with animated sprites (2D characters, billboard NPCs) no longer stutter from constant prediction corrections β€” sprite animation is smooth even in multiplayer.
  • Fixed a bug where pointing a 2D tilemap's tileset at an animated texture turned the whole game black β€” every tile now draws that texture's first frame instead, and the game keeps running.
  • Fixed: in singleplayer, a hitch (a big particle moment, assets installing, shaders compiling) could get blamed on whatever scripts happened to be running, parking perfectly innocent scripts for 10 seconds with a "blew its tick budget" warning. The watchdog now tells the difference between "your script was slow" and "the game hitched around it" β€” genuinely heavy scripts still get caught exactly as before.
  • Fixed a bug where players with a profile character loaded their 3D avatar into 2D games β€” if your game gives the player a sprite, the sprite is what everyone wears now.
  • Fixed a bug where dying to an enemy could leave you permanently dead: if an enemy's attack used the built-in combat module, your own death code (the "YOU DIED" moment, the respawn timer) never got a chance to run β€” the game just stopped responding to movement with no message. Your script now always sees your health hit zero and gets to decide what death means: respawn, game over screen, spectator mode β€” your call.
  • Fixed players jittering or getting yanked around while standing on props (docks, bridges, scattered trees) in multiplayer β€” the ground under you is now exactly as solid on your screen as on the server.
  • Default terrain stops looking like wet plastic. Ground built with pbr: true materials now reads as matte dirt, grass, and rock under full sun β€” the auto-derived gloss maps were trusted too much and most ground was riding the engine's gloss floor. The texture detail and natural variation all stay.
  • The roughnessIntensity knob now does what its docs always said: 2 is genuinely fully matte (it used to stall at semi-gloss on most textures), 1 uses the derived map as-is, below 1 is unchanged for wet/polished looks.
  • Loading holograms now sit on the ground where the object will appear instead of hovering in mid-air, and grow upward in place as the asset's real size becomes known.
  • Shrink and grow mechanics now feel right out of the box: when a script scales the player, the camera follows the body β€” first-person eyes drop to the new height and third-person cameras orbit closer β€” instead of staying stuck at full-size height.
  • Worlds Savi builds now come in noticeably lusher: flower beds, undergrowth, and ground cover are taught ~50% denser and ~50% bigger, and unsized decoration sprites default to a size you can actually see. Bare-ground-showing-through forests should be much rarer.
  • Savi now knows how terrain ground cover actually scales: she builds dense carpets from several plant variants per layer instead of cranking a density number that silently did nothing.
  • Fixed a bug where terrain textures could randomly fail to appear when a world mixes texture sizes β€” some or all ground materials rendered as flat solid colors depending on download luck. Every texture in a mixed-size set now always shows up.
  • A 2D tilemap floor whose art is still generating (or failing to fetch) now shows a quiet gray loading wash instead of disappearing into black. Your art swaps in the moment it finishes cooking β€” no reload needed.
  • Savi mixes her soundscapes properly now β€” ambient beds (wind, water, hum) sit quietly under the game instead of blasting at full volume, with sound effects spiking above them.
  • Debug reports now include a snapshot of what the renderer is holding (draw calls, triangles, shader and texture counts, GPU memory), so when a world slows down we can tell whether something is piling up over time or the scene is simply heavy β€” straight from the report, without asking you to reproduce it.
  • Savi's edits now read back correctly: getSpec() in a script reflects every property change earlier scripts made this session, instead of the world as it was when the room booted. Read-modify-write edits (like tweaking a scatter you set up a few messages ago) no longer silently undo earlier work.
  • Terrain generators written as heightAt(x, z) or heightAt(x, z, ctx) now just work β€” the engine recognizes the shape and routes position and helpers correctly. (The documented contract stays heightAt(ctx).)
  • A broken terrain generator can no longer fill your world with mountains you never wrote: faulted samples render flat ground and Savi gets told exactly which function failed and why.
  • If you open your game in two tabs with the same account, the older tab now tells you the game moved to the new tab instead of silently eating your clicks β€” buys and moves no longer "happen" and then undo themselves in the tab that lost the session. Fixed a rare state where outdoor worlds lit by the sky (no authored ambient light) could lose their ambient fill for the whole session β€” shadows rendered near-black under a clear sky. The sky's light contribution now continuously self-heals, so even if a frame of it is lost, the world recovers within seconds.
  • Things placed on the ground now stay on the ground when the ground changes. Fences, roads, scattered props, and anything placed at terrain height follow the terrain when it's reshaped β€” no more boats or race tracks floating in the sky after a terrain fix.
  • Objects you placed at an exact height stay exactly where you put them β€” the engine only moves things it placed on the terrain for you.
  • If a terrain script has a bug, the ground now stays honestly flat and Savi gets told exactly what's wrong (including the classic heightAt(x, z) instead of heightAt(ctx) mix-up) β€” instead of the engine quietly inventing hills that everything gets built on top of.
  • Side-view platformer cameras hold a steady zoom: jumping no longer makes the screen breathe in and out. (Cameras with an explicit zoom keep it, as always.)
  • vignette(x) now reads like the knob says: low values draw a subtle rim at the screen edge and 1.0 closes in for real drama. A hidden boost used to max it out early, so if your game has a vignette it will look different β€” better.
  • Rapid-fire sounds stay punchy: when the same sound effect is spammed past its voice limit, the newest shot always plays (the oldest copy fades out underneath it) instead of new shots going silent.
  • Sprite animations play at their authored speed β€” no more temporary 8fps guess sticking around after the real animation data arrives.
  • Joining a multiplayer game no longer flashes your character down to a tiny sprite for a moment.
  • Visitors who open a game that hasn't been published yet now see "This game hasn't been published yet" right away instead of an endless loading screen. Publish your game and the link works on the next load.
  • Color grades no longer crush dark scenes to black, and vignettes are round by default β€” moody looks keep their detail.
  • A script error inside a timer or promise can no longer crash your game's server β€” you'll see the real error message in the script result instead.
  • Parked cars drive again the moment you hit the gas β€” vehicles that had settled into their power-saving sleep no longer ignore the throttle.
  • Animations no longer get stuck after a jump: the "jump pose while walking" bug can't happen anymore β€” animation calls are now free to make every tick, and Savi's playbooks build platformer animation that way from the start.
  • Jump arcs animate cleanly through the peak: the taught pattern covers the whole airborne range, so sprites no longer flash their walk or idle pose at the top of a jump.
  • Cars no longer freeze after you hop in: a heavy moment earlier in a script's life (or a busy server) could quietly pause an object's update loop for 10 seconds, and if you mounted a vehicle during that pause it would ignore the gas pedal entirely. Taking control of an object now always lifts that pause immediately.