Releases / v0.92.0
v0.92.0 What You See
2026-09-13 Engine
Ten things that were quietly not true. The ground you walk on is the ground that is drawn. Fog can be dark. The Console keeps talking after the second time you press Play. And the scripting guide is a set of chapters instead of one very long page.
The ground matches the picture
Terrain collision was measured against the underlying field, and the terrain you look at is triangles extracted from that field. Those are two different surfaces — the triangles cut across every curve, inside a bulge and outside a hollow — so a hillside you could see solid in front of you let you sink into it, and a dip you could see beneath your feet held you above it. The same model, in both directions, on the same hill, which is why it read as collision being vaguely wrong rather than as an offset you could learn to expect.
Physics now collides against the triangles you are looking at, and asks the
field only which side of them you are on. Measured on rough ground at a half-
unit voxel, the old answer was out by up to a fifth of a voxel where the
terrain is busiest — and it scales with the voxel, so terrain authored coarse
was out by more. Digging, sculpting and terrain.* from a script are
unaffected: the surface is remeasured the moment the ground changes.
Fog can be dark
Fog tinted surfaces and left the background alone, which reads as fog only while the fog colour is close to the sky's. Pick anything darker and the distant hills turn to silhouette against air that has not moved: the geometry visibly changes and the fog is nowhere. There was a hard seam at the horizon in every foggy scene.
The distance fog now reaches the sky, weighted toward the horizon so a painted
skybox survives overhead. Lighting ▸ fog ▸ takes the sky is how much, and
0 is the old surfaces-only look if a scene wants it. A night fog, a cave
haze, a dust storm at dusk — all of them are a colour you can now actually
pick.
The Console keeps talking
Press Play a second time without editing anything and the Console went silent. Every diagnostic the engine writes is deliberately said once and then held back — sixty identical lines a second is how a Console stops being read — but the suppression was keyed to the file, not to the run, and pressing Play clears the panel. So the second run emptied the Console and then refused to refill it.
Worse: a script stopped for overrunning its time budget was held back "until its file changes", and after a Stop there was nothing left to change its mind. It never ran again for the rest of the session, and nothing said so.
Every run now starts with a clean slate. A script that cannot load says so on the first frame of every Play; a lookup that finds nothing explains itself again; a script the budget stopped gets another go.
node.scripts
node:getScript("name") answers nil when the name is wrong — and nil is
also what "no such node" and "not running yet" look like. The plural is the
thing you actually want first:
for _, s in ipairs(node.parent.scripts) do print(s.kind) end
Every script on a node, as handles, in the order they were attached. Possibly
empty, never nil.
Posing a model without losing it
Locking the selection exists so a stray click cannot take you off the thing you are working on — and posing is exactly when you want that. But the lock swallowed bone clicks too, so it could not be used with the Animating tab at all. A bone of the held model is part of that model, not a way out of it: those clicks land now, the model stays selected, and its rig stays on screen. A bone belonging to some other model is still refused.
Keyframes that hold, one at a time
A clip could be stepped or smooth, whole. That is not what stepped animation is: it is a clip that holds each pose and snaps on the beats the animator chose, with the odd move eased through. The only way to get a hold in the middle of a smooth lane was to key the same value twice and hope nobody retimed it.
Right-click any key in the Animating tab → ⇥ Hold until next key. It is per key, on transform and property lanes alike, and the lane's own setting is now the default for keys that have not been told otherwise. A clip that does not use it is unchanged, down to the bytes its file is saved as.
Terrain textures: the real picker, and a scale each
The texture slots in the Terrain tab had a plain dropdown listing every image in the project in tree order — no search, no folders, no thumbnails — while every other texture field in the editor had the full picker. They all use the same one now.
Each slot also gets a ▦ × control: how often that texture repeats, relative to the rest of the palette. A fine gravel and a broad rock face only look like the same ground if one of them tiles several times as often, and until now the only way to arrange that was to resample the image.
The edge of the picture keeps up
With motion blur on, a fast camera swing left a band around the edge of the frame that stayed sharp while everything inboard of it smeared — worst on the sky, which is at infinity and so the fastest thing in any pan, and gone the instant the camera stopped. Blur samples that fall outside the frame are dropped now instead of folded back onto the border pixel.
The scripting guide is chapters
The guide was one page of thirty-seven sections — findable by searching for a word you already knew, and no use at all for the thing you did not know existed. It is eleven chapters now, each a page of its own: Start here, Nodes & the scene, Physics, Input, Assets & materials, Animation, particles & sound, Maths & the world, Multiplayer, Data, time & the outside world, Steam and Working in the editor.
The same chapters are in the editor — Scripting ▸ § Docs ▸ 📖 Guides — with the contents down the left and one page at a time, instead of twenty-four collapsing headers in a single scroll. Section numbers have not moved, so the engine's own messages still point where they always did.
Every call that can fail says how
A reference that names a second return value and then never mentions it again
is not something you can write error handling against. Every call that hands a
script an error now lists what fills it — all four assets.read* / write*
calls, json.decode, and every steam.* call — and the reference will not
build without it the day a new one is added.
Upgrading
Nothing in a project needs changing. Scenes saved by this version gain a fog
setting and, if you use them, per-key animation holds; both are written only
when they differ from the default, so an untouched project's files do not move.
Scenes from earlier versions open with the fog reaching the sky — if a scene
was built around the old seam at the horizon, set takes the sky to 0.
Floptle Hub
Engine
The binaries are not signed yet. On macOS, right-click the app and pick Open the first time. On Windows, if SmartScreen appears, pick More info then Run anyway.