Building levels in the editor — the ▦ Map tool
Building levels in the editor — the ▦ Map tool
Blockout geometry you draw, cut, texture and paint without leaving Floptle. Map meshes are for LEVELS — walls, floors, stairs, arches, ramps; characters and props still come from Blender (asset pipeline).
Press 8 (or Window ▸ ▦ Map) to turn the tool on. The ▦ Map panel is the full control surface; the strip over the viewport carries the controls you touch constantly, so they're never behind another dock tab.
1. Draw a shape
Pick a shape — box, plane, wedge, cylinder, sphere, stairs, arch — then drag out its footprint on the ground (or on any map surface you aim at), release, and move to set its height. Click to commit.
While drawing: , / . turn it 90°, Z turns it around (for a staircase,
"climb the other way"), [ / ] change its resolution, Esc cancels.
New shapes arrive collidable and wearing the dev grid texture, because a blockout you can measure by eye and walk on is the point.
2. Select: vertices, edges, faces
Three chips on the viewport strip — ◆ vertex, ╱ edge, ◼ face — and
each has its own key (J / K / M by default; Tab cycles). Switching
converts your selection rather than dropping it: pick a face, press J, and
you're holding its four corners.
| Gesture | What it does |
|---|---|
| click | select what's under the cursor |
| drag | box-select — the box starts wherever you press, including on the mesh |
| Shift + click/drag | add to the selection |
| Ctrl + click/drag | remove from the selection |
| All / None / Invert | every one of the current kind, or none, or the complement |
Drag-anywhere matters more than it sounds: a blockout fills the screen, so a box-select that could only start on empty space could rarely start at all.
Growing a selection: Grow (one more ring), Shrink (take the outer ring back off), Connected (the whole shell), Coplanar (the flat region a face sits in), Edge loop (run an edge selection through its quad loops), and Select on a material slot (every face wearing it).
Warped faces selects every face whose corners no longer sit in one plane. After a few edits, a face that looks wrong is usually a warped one, and this is how you find it without hunting by eye. Triangles are never warped, so they never show up here.
Right-click for what you can do
Right-clicking in the viewport lists the operations that apply to what you have selected — extrude, inset, subdivide, bridge, flip, split off, delete, weld, snap — plus the whole Select menu and the vertex/edge/face switch. Everything that isn't applicable is greyed out rather than hidden, so the menu is also the answer to "why can't I bridge these?" (bridge takes exactly two faces).
Select through the surface (off by default) decides whether sub-objects hidden behind the mesh are clickable. Off means you stop grabbing the vertex on the far side of a wall.
3. Shape it
- ⬆ Extrude (
E) pushes the selected faces out along their own normal — walls out of a floor. With grid snap on, it steps by the grid. Selecting every face of a closed shape has no direction to go, so it declines rather than guessing one. - ⬆ As object (
', or hold Shift and drag a selected face's move handle) grows a separate block out of the selected faces and leaves the mesh they belong to as it was. The block is closed, wears the same materials, keeps the source's collision setting, and arrives selected with its outer face ready to pull again — so a level can be many pieces instead of one mesh pulled into the whole map. A Shift+press you don't drag takes the block back. - ⊡ Inset (
I) shrinks a copy of each face inside its own border. Inset then extrude carves a recess (a window, a doorway). - ⊞ Subdivide, ⇌ Bridge (join two faces with a tube of walls), 🗑 Delete, ✂ Split off (the selection becomes its own node, keeping its materials), ⇄ Flip / Flip all, ⊙ Weld, ⌗ Snap to grid.
- The gizmo does move / rotate / scale (
Xcycles) with handles aligned to the selection's own normal, its node, or the world (tapVto cycle; holding it snaps instead — see §9). Normal is the default: a diagonal wall pushes straight out of itself in one drag.
Reading the wireframe: what's near, what's behind
The overlay is drawn flat over the scene, so from v0.20.0 it carries two depth cues — otherwise a box's far rim looks exactly like its near one and there is no way to tell what a click is about to grab:
- Distance — edges and vertex dots fade and thin with how far away they are, normalised over the mesh's own extent (so a doorframe and a hangar read the same way).
- Behind the surface — anything the mesh's own front faces hide draws faint, and a vertex round the back draws as a small ring instead of a filled dot.
Occluded geometry is still drawn and still selectable — being able to reach through a blockout is the point of the see-through selection modes. The cue only tells you which side of the shape you are looking at. Selected elements keep their full brightness wherever they are, so a selection never disappears into the fade.
When nothing faces you — standing inside a room, or looking at the back of a one-sided plane — nothing is in the way, so the whole wireframe draws at full strength. "All of it is behind the surface" is true there and useless.
✂ Knife
/ arms the knife. Click one edge or corner of a face, then another on the
same face, and the face splits along that line. The point under the cursor is
shown live — a filled dot for a new corner mid-edge, a ring for an existing one,
so you can see which you're about to get.
The first click chooses the face; after that the aim is locked to it. The second point is solved against that face's own plane, so the cursor can drift past an edge, or over a face that is nearer the camera, and the cut still tracks where you mean. (Before v0.20.0 every click re-picked the face from whatever the ray hit first, so aiming near a corner landed the second point on the neighbouring face and the tool quietly threw the cut away and started over. Which face won depended on the camera angle — which is why turning around and trying from the other side sometimes appeared to fix it.)
The cut carries into the faces that share those edges: they gain the same corner, so the seam stays welded and no hairline crack opens along it. Both halves keep the face's material slot.
After a cut the knife keeps going from the corner it just made, so a groove can be walked across a face (or from one half into the next) in one gesture. Esc ends the cut; Esc again puts the knife away.
A cut that can't divide a face — two points on one edge, two corners already joined — greys out while you are still aiming and says why next to the cursor, so you never click and wonder what happened. The preview asks the cut itself, so what it shows and what the click does can never disagree.
4. Materials, per face
The whole mesh takes an ordinary Material in the Inspector. To make some faces different, there are two ways, both in the Model tab's FACE MATERIALS:
- Project materials — the swatches along the top are the project's
materials (the files under
materials/). Select faces and click one: the faces wear it, and they change whenever it does. Build forty pieces of wall from one "Brick" and a single edit restyles all of them. - ◑ New material for selected faces makes a material just for this mesh: a slot, your faces assigned to it, and a material of its own, in one step.
Under On this mesh, every slot is a chip — its swatch and name — with the count of faces on it, Select (every face wearing it) and Assign selection. Click the chip to edit the material in the Inspector (see materials & textures §6c): there you can save a mesh's own material as a project material, or switch a slot to one. UVs are a box projection at 1 unit = 1 tile, so textures land at a consistent scale across a whole level with no unwrapping — and SIZE resizes the geometry rather than the node, so a resized wall keeps its texture scale instead of stretching it.
5. Painting a blockout
Map meshes take the ✏ Paint tool (key 7), both kinds:
- Vertex paint — colour per corner, the cheap retro look: shade a corridor darker toward its end, warm a floor near a light, tint one wall.
- Texture paint — a resolution-independent overlay, so detail doesn't depend on how many faces the wall has. A dab paints in world space across faces, so a stroke down a wall-floor seam shades both surfaces at once: painted ambient occlusion, the baked retro look, with no bake.
Paint follows the geometry through edits. Every render vertex and triangle carries a durable name — its face (identified by the set of corners it uses) plus its corner or fan index — so moving a vertex, assigning a slot, cutting a face elsewhere, or deleting one leaves every surviving surface's paint exactly where it was. Only faces that genuinely changed (the top of an extrusion, the two halves of a cut) come back unpainted, because they are new surfaces.
Two things worth knowing:
- Undo takes the paint back too. Every geometry edit banks the paint that was on the mesh alongside the shape, under those same durable names — so undoing an extrude brings back the face and the shading it was carrying, and redo puts it where it was again. Paint whenever you like; Ctrl+Z means what it says. (Anything you painted after the edit is never overwritten by a returning surface — live paint always wins.)
- Saved paint is checked against the geometry it was painted on. If a map mesh
changed between the save and the load — a hand-edited
maps/*.ronsidecar, a restored backup, a file recovered from version control without its partner — the editor refuses the stale paint and says so rather than scattering it across the wrong faces. In normal use you will never see it: a scene load adopts map geometry before paint, so the paint always has its triangulation to attach to.
6. Keys
Every control has one, and every one is rebindable in the Map panel's KEYS section. Two rules keep them out of each other's way: map chords are only consulted while the ▦ Map tool is active and you aren't typing, and the keys the editor keeps for itself (the fly camera, the tool digits, focus/grid/gizmo toggles) are refused at bind time with the reason — so a broken binding can't be created in the first place.
Defaults worth memorising: E extrude, I inset, / knife, U select all,
Shift+U none, \ invert, Tab cycle mode, X cycle gizmo, V cycle handles.
7. Where the geometry lives
A Matter::MapMesh { id } node carries only its id; the geometry lives beside
the scene in <project>/maps/<scene>.map.ron and renders through the ordinary
mesh path (one part per material slot). That is why per-face materials, colliders,
shadows, vertex paint and custom shaders all work on a blockout without any of
them knowing what a map mesh is.
If that sidecar exists but can't be read, the editor says so, leaves the nodes empty, and refuses to save map geometry for the session — a transient IO error must never be able to replace a level with placeholder cubes and then persist them.
8. Reusing a level's geometry somewhere else
Those maps/*.map.ron files are ordinary assets in the browser. Select one and
the Inspector shows what it holds: which scene it belongs to, the shapes and
their sizes, and a top-down floor plan of the level drawn from the geometry
itself. Double-click opens the scene that owns it.
Drag it into the viewport — or right-click → Add to scene — to bring that geometry into whatever scene is open. Every shape arrives as a fresh map node with its own copy of the geometry and its own id, so nothing is shared with where it came from: edit the copy freely. Names, relative placement, materials and the collidable flag all come across, the whole import is grouped under one node, and it is a single undo step.
Placement comes from the owning scene rather than the sidecar, because a sidecar stores what a shape looks like and the scene stores where it sits. If no scene of that name is found, the shapes still import — each at its own origin — and the Inspector says so rather than quietly stacking them. Geometry belonging to nodes the owning scene has since deleted is left behind: a save keeps it so an undo can resurrect the node, and an import must not resurrect it instead.
9. Placing and snapping pieces
Three tools for putting things where they go without typing coordinates:
- Place (key
0) — click anything and drag it over the scene. It rests on the surface under the cursor, whichever way the surface faces: a crate on a floor, a painting on a wall, a lamp under a ceiling, or on terrain. The rest of the selection comes along. align in the Tools strip turns it so its up follows the surface; with grid snap on it slides along the surface in grid steps. Models, prefabs and maps dragged in from the Assets tab land the same way, and a ring marks where they will land before you let go. - Vertex snap — with the Move, Place or Model tool, hold V: the corner of the selection nearest the cursor is marked. Press and drag, and that corner lands exactly on the nearest corner of any model, primitive or map mesh under the cursor. Modular kit pieces meet corner to corner, which is how they go together without measuring. In the Model tool with vertices, edges or faces selected, those are what move — onto a corner of another mesh or of the same one — and a quick tap of V still cycles the handle orientation.
- The Move knob — the round knob at the centre of the Move gizmo drags freely in the plane facing the camera, keeping the point you grabbed under the cursor.
Clicking in the viewport selects what is drawn under the cursor — the crate on the floor, not the floor — and the Hierarchy unfolds to show whatever you select.
See also: materials & textures, which is also where vertex paint is documented.