Releases / v0.114.0
v0.114.0 Stays In Front
2026-10-07 Engine
One camera can now be drawn over another, so first-person arms never clip into walls. Scripts can build objects out of models at runtime and move nodes between parents, inventories lay out as grids, hiding a node hides what is under it, and headless shots show render targets.
Arms that never clip into walls
A camera has a new stack setting in the Inspector: a list of other cameras drawn on top of its picture. Each stacked camera draws only the layers it renders, over an empty depth buffer, so nothing the camera beneath drew can hide them.
To set up first-person arms:
- Put the arm rig on its own layer (add one in Settings ▸ Layers).
- On the player's camera, untick that layer under renders:.
- Add a second camera parented to the first, and tick only that layer under its renders:. It does not need to be the active camera.
- On the player's camera, pick the second camera from stack ▸ + add camera, or drag it in from the Hierarchy.
- Rows drag to reorder; the bottom row draws on top.
- A stacked camera keeps its own field of view, so the arms can use a narrower one than the world.
- It draws its layers lit by the scene's sun, lamps and fog. It draws no sky, terrain, particles or script shapes.
- The stack is laid on before post-processing, so bloom and grading cover the whole picture.
- It applies in the Game tab, in exported builds, in
floptle shotandcamera.capture, and on cameras that draw into a render target. - From a script:
node:setCamera{ stack = { 'ArmsCam' } }, andstack = {}clears it.
The full walkthrough is in Camera stacks.
Build objects out of models at runtime
node.modelon an Empty turns it into that model. An Empty is whatcreateNodemakes, so a gun can be assembled from a frame and its parts without a pool of hidden placeholder nodes:createNode("Barrel", gun, function(n) n.model = "models/barrel.glb" end). On a light, a camera or anything else that already is something, the Console now says the write did nothing, once, instead of staying silent.node:setParent(other)moves a node under another, or to the top level withnil. It stays where it is in the world by default;{ keepWorld = false }keeps its local position and rotation instead, so it lands at the same spot relative to its new parent. A move under its own child is ignored.
Inventory grids
A ui.make row or column takes wrap = true: children that do not fit start
a new line, so a row of fixed-size tiles becomes a grid whose column count
follows the container's width and reflows when it is resized. The UI
Inspector has the same switch as wrap onto new lines. See
ui.make.
Hiding a node hides what is under it
node.visible = false now hides the node and every node under it, the way
the Hierarchy reads. A prefab whose model is a child is hidden by hiding its
root. Each node's own visible still reads back as it was set, so showing the
root again brings back exactly what was shown before.
On upgrade: a script that hid a node to hide only that node's own model, leaving its children drawn, now hides the children too. Move that model onto a child of its own and hide the child instead.
Directions under a rotated parent
node:lookAtandnode:turnTowardsface the world target whatever the parent's rotation. Under a turned parent they used to point off by that turn.node.forwardandnode.rightare in the parent's space, the same space asnode.pos, and the docs now say so. For a world direction, such as panning along a camera's right under a turned parent, usenode:worldForward(),node:worldRight()andnode:worldUp().
Hands that keep hold
Animator pose changes queued in lateUpdate (reach, lookAt,
setBoneRot, …) now land on the same frame. A hand reaching for a gun held
under the camera used to trail it by a frame whenever the view moved.
Material rules that survive a re-texture
A material handle reads m.source: the project material file it follows,
such as "materials/Checkerboard.ron", or nil for a material of its own. A
rule like "this surface can't be grappled" can key on that instead of on a
texture that may be repainted. From a raycast hit:
hit.node:material(hit.material).source.
Render targets in headless shots
floptle shot and camera.capture taken during a shot now draw render
targets, so a screen, a minimap or a UI image wearing rt:<name> shows its
camera's picture instead of white.
Upgrading
Nothing to do, except where a script hid a parent and expected its children to stay drawn (see above). Scenes without a camera stack look exactly as before.
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.