Releases / v0.116.0
v0.116.0 Lands On Its Feet
2026-10-13 Engine
A complete 2D engine. Start from a pixel template, bring in art from Aseprite and levels from Tiled or LDtk, and paint square, isometric or hexagonal maps with collision worked out from the art. Bodies collide, turn and join, and 2D lights cast clean shadows. This is everything from the seven betas, v0.116.0-rc1 to rc7.
Start a 2D game
- Pixel Platformer (
--template platformer2d): a tile level with slopes and ledges, a player who runs and jumps, and a camera that follows. 🎓 Learn ▸ Build a 2D pixel platformer builds it from an empty project. - Pixel Village (
--template village2d): walk up to someone and press E to talk, with portraits and choices. The dialogue isscripts/talk.luaand a file per character indata/, all yours to change. - A scene whose camera is orthographic and faces the front opens in a 2D Scene view.
Art and levels in
- Aseprite files are sprite sheets. Put an
.asepritein the project and you get a sliced sheet and a sprite animation per tag, rewritten each time you save. No export step. - Levels from Tiled and LDtk. Drag a
.tmxor.ldtkinto the Scene view. Each level becomes a node with a tile layer per layer, an empty node per object (tagged with its class), and one tileset. Tiled's isometric and hexagonal maps come in with their shape. - A spritesheet dropped on ◫ Tiles ▸ TILESET gets each tile's collision worked out from its pixels: solid squares, slopes that follow the art's top, boxes round small art, and nothing for empty tiles.
- A dropped image lands under the pointer at the level's pixel size, unlit.
- Bitmap fonts (
.fnt),.ttc,.woffand.woff2fonts work anywhere a font goes.
Tile maps
- Isometric and hexagonal. Set a tileset's grid in the ◫ Tiles tab to
square, isometric, hex (pointy top) or hex (flat top). Tiles draw in their
cells, the cursor picks cells by their shape, and solid cells collide and
cast shadows with their own outline. Art taller than its cell stands up out
of it, in front of the cells behind.
tm:cellAtandtm:worldAtfollow the shape. - A layer grows as you paint past its edge, and resizing never moves your tiles.
- One-way platforms: tick one-way on a tile.
node.dropThrough = truefalls through one, andtm:oneWayasks whether a square is one. - Turn and mirror while you paint:
,and.turn the brush a quarter turn,[and]mirror it. tm:path(from, to)finds a route round the walls of a top-down level.- Tiles a script sets during play collide from the next frame.
Physics that behaves like things
- 2D bodies stand on the floor. They collide in their own plane and no longer sink into or fall through tile floors.
- Bodies shaped like their sprites. A Rigidbody added to a sprite is
traced from its art, flips with it, and can be edited corner by corner or
set from a script with
node:setBodyOutline. - Moving bodies collide with each other, with their mass, bounce and friction, so crates stack and characters push them.
- Bodies turn. Tick rotates and a crate tips off a ledge and a ball rolls. A stack of crates stands still.
- Fast bodies stop at thin walls.
- Joints. Add Component ▸ Physics ▸ Joint: hinge, fixed, distance,
rope, spring, slider, wheel and target, with limits, motors and a breaking
force. From a script:
node:setJoint{ kind = "rope", to = hook, length = 4 }. boxcastandoverlapBoxanswer for 2D bodies.
2D light and shadow
- 2D lights shade normal-mapped sprites and tiles.
- A 2D light can be a sun, and a spot lamp shines its cone in 2D.
- Shadows come from solid tiles only, merged into whole walls, so decor tiles don't cast and the streaks that fanned out from a light across tile floors are gone.
- shadow strength lets a shadow keep some light, and height sets how high a lamp hangs over normal-mapped art.
- Lit particles take the lights near them.
The camera
- A 2D camera's limits keep everything it shows inside the level.
- look ahead leads the player, and rooms keeps the view inside the room the player is in.
- art pixels holds the zoom where every art pixel is a whole number of screen pixels, and Play names any sprite drawn at a different density.
- A followed player no longer wobbles a pixel.
- Skies work through an orthographic camera. A sky shader or skybox image used to fill an orthographic view with one flat colour. It now draws as the same camera would see it in perspective, through the camera's fov, and turns when the camera turns.
scene.load("level2", { fade = 0.6 })fades between scenes.
Sprites and particles
- 9-slice sprites stretch without stretching their borders.
- Particles keep their emitter's sorting layer, and a track can collide with the level: bounce, slide, or die on contact.
Editing
- The Image tab has frame holds, tags and a wider onion skin. A marquee dragged in any direction selects its box, and Ctrl+wheel sizes the brush.
- In the Scene view, drag a selected node to move it. A 2D node rotates only in its plane.
- Any type added to a node can be removed with Remove component.
- Tileset and particle edits undo with Ctrl+Z.
Tools
floptle runandfloptle shottake--fpsand--frame-jitterto reproduce frame-rate bugs headless.- A scene param pinned as a number that a script has turned into an on/off
switch is named in the Console and by
floptle check.
Upgrading
- A 2D box that used to rest half sunk into a floor stands on top of it.
- A tilemap with a Rigidbody collides as its tiles, not as one box.
- A 2D camera with limits stops half a view further in from each edge. If you set your limits inside the level to make up for it, set them back to the level's edges.
- A 2D light with aim it (spot) ticked now shines its cone.
- A tile layer casts 2D shadows only from its solid tiles. Mark decor tiles solid if you want them to cast.
- Bodies already in your scenes stay upright unless you tick rotates.
- Image tab documents with holds or tags are saved in a newer format that earlier versions won't open.
Floptle Hub
Linux x86_64
10.7 MB
Download →
sha256 292bb23bc9fb41ff263a8755fc3d4d7a645346d286235732cf4e97d47c3168c2
macOS Apple Silicon
7.4 MB
Download →
sha256 1178920150ae53d9210badf791dbfcab980d60e9e92da869016c948dc3cda11b
macOS Intel
7.9 MB
Download →
sha256 9b1569f45c8c894540a386dc0d5b61c822c9de1a8443283b869248e0553b48e8
Windows x86_64
9.1 MB
Download →
sha256 52ed856eaaa73fd086cb7fa899b137e3778b5f1552faf5c8f5b47edbc7821570
Engine
Linux x86_64
54.9 MB
Download →
sha256 d8bed66af9ba3fce1418f3edfd0afe1eccfd6dee89816195d7e0d12ad82a2358
macOS Apple Silicon
42.7 MB
Download →
sha256 0038553e07fa21c639fd23cdf8ffaa70b6e9be61c7c7e732b6353917dd31f5d0
macOS Intel
46.0 MB
Download →
sha256 9c6a16f4ce93c7bbdcd9d8bea1fbb5934186baeb6116f0680ca95455fd839805
Windows x86_64
51.9 MB
Download →
sha256 13071d4c81316599883e6bf1ed05f8d5a77e44566b6cf24c67da6a0835381b0b
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.