Releases / v0.116.0-rc6
v0.116.0-rc6 Lands On Its Feet
2026-10-13 Engine
Everything in rc5, plus physics that behaves like things, joints, isometric and hexagonal maps, particles that land on the level, and 2D lights and shadows that do what their controls say.
Bodies collide with each other, and turn
Two moving rigidbodies used to pass through each other, so crates never stacked and a character could not push one. They collide now, with their mass, bounce and friction.
A Rigidbody with rotates ticked is turned by what it hits: a crate tips
off a ledge, a ball rolls down a slope, and a stack of crates stands still
instead of shaking itself apart. A sprite given a body starts with it on;
every body already in a scene stays upright. From a script, node.spin is
how fast a body turns, in degrees a second.
A fast box or polygon body no longer comes out the far side of a thin wall, and a crate hitting a wall square on no longer spins.
Joints
Add Component ▸ Physics ▸ Joint holds a node's body to another node, or to where it starts:
- hinge turns freely or between limits, and can be driven by a motor;
- fixed welds two bodies so they move as one;
- distance holds them a set length apart, rope only up to it;
- spring pulls toward its length, as stiff and damped as you set;
- slider runs along the other node's axis between limits;
- wheel hangs on a suspension and is driven round;
- target pulls toward a point a script sets.
A joint can break past a force, and the two bodies it joins stop colliding with each other unless you ask. The joint goes on the moving part, so a car is a body with a wheel joint on each wheel. Joints are drawn in the Scene view and saved with the scene. From a script:
lamp:setJoint{ kind = "rope", to = hook, length = 4 }
door:setJoint{ kind = "hinge", to = frame, limit = true, min = 0, max = 100 }
lamp:removeJoint()
Isometric and hexagonal maps
A tileset's grid in the ◫ Tiles tab can be square, isometric, hex (pointy top) or hex (flat top). Every map painted with it lays its cells out that way. Tiles draw in their cells, the cursor picks the cell it is over, and solid cells collide and cast shadows with their own diamond or hexagon outline. Art taller than its cell, like an isometric block, stands up out of it, and the nearer block covers the one behind. cell height sets the cells' proportions: 0.5 for the usual 2:1 diamond.
tm:cellAt and tm:worldAt answer in diamonds and hexagons on such a map.
Isometric and hexagonal maps from Tiled now import with their shape.
Autotiling and tm:path still work on square neighbours.
Particles meet the level
Tick collides with the level on a track in the ✱ Particles tab and its particles stop at walls, floors and the ground instead of passing through. They bounce, with a bounce and a friction to tune, or die on contact for rain and sparks that wink out. Only Play has a level, so the tab's preview passes through everything.
Lit particles now take the point lights near them, with their colour and falloff. In a 2D scene they take the 2D lights that reach their layer, so dust glows beside a torch and stays dark in a corner.
2D lights and shadows
- Only solid tiles cast. A tile layer used to throw shadows from every opaque pixel, decor and background included. It now casts from the tiles its tileset marks solid, as one block per wall, so a light finds no seams.
- No more streaks. Shadows from a light some way off broke into thin lines of light fanning out across the floor. They are clean edges now.
- shadow strength under 2D light is how much of a light a caster stops. Lower it for a shadow that lets some light through.
- height under 2D light sets how high a lamp hangs over normal-mapped art. Low lamps throw long relief and high lamps light from above. It was fixed at a third of the range.
- A 2D light no longer shows the 3D casts shadows box, which did nothing there. casts stop this light is its switch.
From a script: node:setLighting2D{ shadowStrength = 0.5, height = 2 }.
Pixel-perfect 2D
Set Camera 2D ▸ art pixels to your art's pixels per world unit, and the
camera keeps its zoom where every art pixel covers a whole number of screen
pixels, including while a script zooms it. Play and floptle check name any
sprite or tile layer drawn at a different density, which is usually a node
scaled up to make a small sprite bigger. From a script:
node:setCamera2D{ artPixels = 8 }.
A followed player no longer wobbles a pixel as the camera tracks them, and a camera a script moves is no longer nudged off the position it was given.
Editing
- The Scene view. Press on a node that is already selected and drag, and it moves. A press that does not travel is still a click. A sprite, tile layer or 2D body only turns in its plane, and anywhere inside its ring turns it.
- Tiles. With the tile tool out,
,and.turn the brush a quarter turn either way, and[and]mirror it. - The Image tab. A marquee dragged up or to the left now selects the box you drew, not a strip. Ctrl+wheel changes the brush size one step per notch, and a plain scroll never does.
- Removing things. Any type added to a node, such as a Sprite, can be taken off from its header's menu with Remove component, leaving an Empty. Curve keys and gradient stops can be removed.
- Undo. Tileset edits in the Tiles tab and edits in the Particles tab undo with Ctrl+Z. Image palette changes undo too. Deleting an animation state asks first.
Scripts and tools
- A tile a script sets or clears with
tm:set,tm:fillortm:fillRectcollides from the next frame, and a static block a script moves takes its collider with it.tm:oneWayanswers whether a square is a one-way platform. A body standing on a one-way ledge reads as grounded. - A param pinned in a scene that a script has since changed to an on/off
switch is named in the Console and by
floptle check, where before it quietly arrived as off. floptle runandfloptle shottake--fpsto step frames at a display rate and--frame-jitterto vary each frame's time, for a bug that only shows on a fast monitor.
Upgrading
Nothing to do. Bodies in your scenes stay upright unless you tick rotates. A tile layer that cast shadows now casts only from its solid tiles. If you relied on decor tiles casting, mark those tiles solid in the Tiles tab.
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.