Field Manual

The complete reference for RUMPUS ENGINE — every tab, section, fold and slider in the level editor, plus the systems behind racing, vehicles, signals, multiplayer and sharing. For guided walkthroughs with one-click example projects, open Help & tutorials on the game's home menu instead.

BasicsGetting started

RUMPUS ENGINE is a single-file browser game studio — build worlds, play them (FPS, racing, top-down, side-scroll), and share them. Nothing installs; the whole game is one page.

The home menu

  • Deploy — play the current level (your autosaved work, a loaded file, or the default arena). Its equal twin Build / edit level opens the editor on the same level.
  • Multiplayer — host or join a room (see Multiplayer). Community levels — browse and play what other creators have published.
  • Play campaign / Load campaign — play a sequence of chained levels with carry-over loadout (in the footer strip).
  • Instructions — a quick controls card. Help & tutorials — guided tutorials with loadable example projects. Field manual — this page. Credits — engine libraries plus the asset attributions collected for the current level.
The build number is shown at the bottom-left of the home menu. If a fix doesn't seem to be live, hard-refresh (Ctrl+Shift+R) and check that number first.

BasicsControls

On foot

InputAction
WASD + mouseMove and look
Left click / Right clickFire / aim down sights
ShiftRun (hold)
SpaceJump
C or CtrlCrouch — while running, slide (Ctrl toggles, C holds)
RReload
FThrow grenade
VMelee attack
EInteract — doors, NPCs, pickups, vehicles, mechanisms
GGrab / carry / throw physics props
LFlashlight (when the level enables it)
JRe-read the current objective
15 / wheelSwitch weapon / cycle weapons
Tab (hold)Radial Deploy menu (when the level offers one — a creator can turn it off)
IInventory (carryable items + 3D inspector)
MBig map
TChat (multiplayer)

Driving (walk up to a vehicle, press E)

InputAction
W / SGas / brake — braking comes first, reverse only engages from a stop
A / DSteer
SpaceHandbrake — kicks the tail out for drifts
ShiftBoost (if the vehicle has one)
CChase ↔ cockpit camera
VCamera follows the car ↔ free orbit
HHeadlights
GToggle the ghost lap (during a race)
E / EscGet out

Editor

InputAction
PToggle the editor ↔ play the level
FFree-fly camera
TTop-down view (fits the whole arena; scroll to zoom, drag to pan)
B · scrollToggle the terrain brush (sculpt / paint / scatter); with it armed, the scroll wheel resizes the brush under the cursor
1 / 2 / 3Gizmo mode: move / rotate / scale
4Toggle proportional (uniform) scaling
Shift+D · Alt+dragDuplicate the selection / duplicate the prop under the cursor
Del / BackspaceDelete the selection
Ctrl+ZUndo
Ctrl+G / Ctrl+Shift+GGroup / ungroup the selection
Shift+AQuick-add (+) menu

Gamepads and touch are supported: plug in a controller (press ] to switch between detected pads), or on a phone use the on-screen joysticks and drive cluster — pause → ✿ Customize controls to move or resize any on-screen button.

Rebinding: pause → ⌨ Keyboard bindings to remap movement and every action (click an action, press the new key; picking a key already in use swaps the two; Reset restores defaults). Weapon slots 1–5, Esc and the editor's own keys stay fixed, and on-screen prompts keep showing the default keys.

Controller menus: every menu is playable from the pad — D-pad or left stick moves the focus ring, A selects, B backs out, and left/right tunes sliders and dropdowns. The first press lands on Deploy.

Controller: Start pauses (solo) or opens the match menu (multiplayer). D-pad: up = inventory, down = map, left = melee, right = flashlight. In the supply cache, D-pad picks, A buys, B/Y closes; on the upgrade screen, bumpers or D-pad focus a card and A takes it (keyboard: press 13). Look sensitivity, aim sensitivity, stick deadzone and invert-Y live in the pause menu once a pad is connected.

Touch: besides the joysticks — CROUCH toggles, MELEE swings, BUILD opens the deploy radial (tap a slice to place), and hold USE to grab or drop a physics prop. LIGHT, BAG and CHAT appear automatically when a level has a flashlight, an inventory, or you're in a multiplayer room.

Motion, comfort & accessibility

Pause → Comfort. These belong to you, not to the level — they follow you into every level including ones other people made, which is the point: a creator cannot be relied upon to have thought about it. Every slider is a percentage of what the level authored, so 100% is exactly as shipped and nothing moves unless you move it.

SettingWhat it turns down
Camera shakeEvery kick — gunfire, explosions, impacts, landings.
Camera swayThe lean and dip the body gives the camera as you move.
Motion blurScales whatever the level authored, without editing the level.
Damage flashThe red pulse when you are hit. At 0 it still shows a faint tint — being hit always stays visible, because that is information, not decoration.
Slow-mo on killsThe brief time-stop on a kill or a multi-kill.
RumbleController haptics.
Interface size75–175%. Scales the whole interface and its click targets, so a bigger HUD is not a HUD you cannot press. On-screen touch controls are deliberately exempt — they have their own layout editor.
Colour visionOff / Protanopia (red) / Deuteranopia (green) / Tritanopia (blue), with a Correction strength dial. This is a correction, not a simulation: it takes the colour difference your eye cannot carry and redistributes it onto the channels that can. Neutral greys never move.

Reduce all motion turns the lot down in one press; Restore defaults puts them back. If your operating system already asks for reduced motion, RUMPUS ENGINE starts calm without you having to say so again — and an explicit choice always wins after that, including the choice to turn it all back up.

A photosensitivity notice appears once per browser at first launch, with a Reduce flashing button that drives these same sliders. The Photosensitivity warning button in the panel brings it back on demand.

Editor referenceEditor overview

Open the editor with Build / edit level on the home menu, or press P during a solo game. The panel on the right is organized into eight tabs; the last tab you used is remembered.

TabWhat lives there
BuildPlace shapes, track pieces and searched models; edit the selection (material, transform, animation, physics, vehicle, signals, locks…)
WorldTerrain, sky, lighting, camera & post-FX, fog, arena size, boundary walls, audio, auto-generate, zones
PlayerAvatar model, player start point, the character roster
EnemiesEnemy types & models, hit colliders, spawn markers, how enemy gunfire looks
GameplayObjective & rules, pickups, loot, inventory items, the in-game build menu, cutscenes
WeaponsPer-weapon models, damage, sounds; impact & tracer effects
HUDTheme colours, fonts, panel style, which HUD elements show, per-element layout, crosshair
SaveSave/load, share links, export/import .rumpus files, campaigns

Most sections start collapsed — click a header to expand it. The ? button on the editor toolbar opens this manual. Everything you do in the editor is undoable with Ctrl+Z, and the level autosaves in your browser while you edit (toggle on the Save tab).

On a desktop-sized window there is a thin File · Edit · Tools · Help bar across the very top of the screen while you are editing — the same layout you already know from other creative software. It is a shortcut, not a second system: every item drives the exact same control in the panel, so it can never disagree with it. On phone-width screens the bar is hidden and the panel is the whole interface.

MenuWhat it holds
FileNew level, Save, Import, Export, Copy share link, Clear browser save, Main menu
EditUndo, Delete all objects
ToolsLogic graph, Animation editor, Outliner, Command palette, Settings
HelpThis field manual, inline help
File ▸ New level starts genuinely from scratch. It clears everything — every object, the terrain and sky, gameplay rules, the player and enemy models, the HUD, logic, animations and the title screen — throws away the browser save and reloads the editor on a blank canvas. It asks first, but there is no undo afterwards, so export your level (File ▸ Export) if you might want it back.

If you only want an empty space to build in and would like to keep your world, look and rules, use Edit ▸ Delete all objects instead — that removes the props and leaves every setting alone.

Editor referenceBuild tab

Add shape

+ Box, + Sphere, + Cylinder, + Cone, + Ramp, + Stairs, + Dome, + Tube, + Ring drop a primitive in front of the camera. Every shape gets the full Material editor. The first four use exact box/sphere colliders; the construction shapes (Ramp/Stairs/Dome/Tube/Ring) collide with their real triangles, so you can walk and drive up a ramp or staircase, shelter under a dome (it's hollow — visible from inside), run through a tube, or hop through a ring. Like every primitive they're authored to a 1×1×1 footprint with the base at floor level, so scaling and floor-snapping behave exactly like the box: stretch a Ramp long and low for a drivable slope, or scale Stairs up for building-sized steps. A Pillar and the track pieces are also primitives under the hood.

Room

Object & selection → Room. A doorway used to be four boxes you placed and measured by hand. This builds the whole shell — floor, four walls, optional ceiling, and every opening cut through them — as ordinary props you can then edit, move, texture and delete one at a time.

FieldWhat it means
Width (X) / Depth (Z)The inside measurement. Type 8 × 6 and you get 8 × 6 of floor — not 8 minus the walls. Interior-first is the only measurement that means anything when you are placing furniture in it.
HeightFloor to ceiling, inside.
Wall thicknessHow thick the walls are, built outward from the interior.
Floor slab / CeilingTick either off for an open-top room or a shell sitting on terrain you already have.
The openings listEach row is one hole: which wall, how far along (at), its width, its sill height off the floor, and its height. Sill 0 is a doorway; sill 1 is a window. ✕ removes one.

Build room drops it where you are looking and tells you how many props it made. Undo removes the whole room in one press.

Make doorways at least 1.8 m wide. The player is 1.6 m across, so a 1.6 m door is a coin flip on whether they fit — and enemies pathing through need the room too. The default is 2.0 m and the panel warns you below 1.8.
A room is props, not a special object. That is the whole point: the gizmo, snapping, materials, duplication, prefabs, tags and signals all work on every piece afterwards. Build a corridor by duplicating a room and snapping it against the first.

Path — wires & rails

Object & selection → Path (wires & rails). Select two or more props in the order you want them strung, pick a mode, and press the button. Power cables between poles, telephone wire across a street, a fence, a kerb, a catwalk handrail.

ModeFieldsWhat you get
⚡ WireThickness, Sag, Above the pole, Segments per spanA drooping cable. Sag is the droop at the middle of each span, in metres — a number you can see rather than a tension coefficient. It is decoration only, so nothing walks into it.
▬ RailWidth, Height, Points per spanAn upright run that stays level across a slope — a fence, a kerb, a handrail. Solid, so it blocks.
The path is your selection order, so every selection feature already works here: shift-click the poles one at a time, or marquee them and reorder by re-clicking. Undo removes the whole run.

Track builder

Snap-together race track pieces — covered in depth in Track builder & racing. With pieces placed, the Track appearance panel restyles the whole course at once: road colour, roughness and an optional road texture (with a tiles dial), painted-line colour, the kerb stripe pair, and the barrier colour. Saved with the level; Reset to stock returns the classic asphalt look.

Search free models

One search box finds free 3D models on Poly Pizza (no key needed) and Sketchfab (needs a free API token — enter it once, everywhere else shows “Token saved · change”). Click a result to place it. Every searched asset is recorded for the level's Credits screen automatically.

Object & selection

With something selected, this section shows: swap/replace model, and the eight folds that give a prop behaviour — animation, locks, signals, dialogue, vehicle, joints, mechanisms, physics & destruction.

Material

For shape primitives: colour, texture map with U/V tiling and rotation, shininess, metalness, emissive glow — and Opacity. Opacity below 1 makes the shape see-through: glass = low opacity + high shininess, frosted plastic = mid opacity + low shininess, and a faint pane around 0.15 reads as a force field. A transparent prop stays completely solid — you can stand on a glass floor and bullets still hit it. Opacity saves with the level and carries through share links and multiplayer like every other material setting. Imported models keep their own materials — the section says so instead of hiding.

Invisible barriers — fencing off an area

Drag Opacity all the way to 0 and the shape becomes an invisible barrier: you cannot see it in play, and you still cannot walk through it. That is how you keep players out of an area without building a visible wall — the edge of your fairground, the back of a set, a ledge you do not want anyone reaching.

  1. Add a box and stretch it into a wall across the gap you want to close.
  2. Open Material and pull Opacity down to 0.
  3. It disappears when you press Play, and the player walks into it.

Exactly what it does and does not do:

An invisible barrier
Players and enemiesBlocked. It is as solid as any wall.
Physics propsBlocked. A crate cannot roll through it.
ShotsPass through — yours and the enemies'. Nothing invisible stops a bullet.
ShadowsNone. It would give itself away.
In the editorShown as a faint ghost, so you can see, click and move your barriers.
If you want it to stop bullets too, do not make it invisible — give it a very low opacity instead (0.05–0.1). It is almost impossible to see and it is a normal solid pane, so shots hit it. The difference is deliberate: an invisible wall that eats bullets is the single most confusing thing a level can contain, so 0 means truly not there as far as anything you can see is concerned.
Tiling on a stretched shape. A texture on a primitive is measured in metres, not per face — so stretching a box into a long thin wall keeps the grain the same size everywhere instead of squashing it on some faces and repeating it hundreds of times on others. The Tile number is tiles across the shape's longest side, which is what it already meant for the biggest face, so that face looks exactly as it always did. There is one density in both directions now, so the second field is off.

Stretch to fit puts the old behaviour back for that prop: one tile per face whatever its real size. Useful when you want a texture to follow a shape — a label wrapped on a sign, a decal sized to a panel.

Transform & Handles

Transform is the numeric version of the gizmo: exact position, rotation and scale fields. Handles pick the gizmo mode (move / rotate / scale — also 1/2/3) and proportional scaling (4).

Taper — pinching one end of a box

Scale stretches a shape evenly. Taper pinches one end of a box, which is the thing three scale numbers can never do. Select a box and the Taper rows appear at the bottom of the Transform fold.

Pinch the picks which end: the top (+Y), the right end (+X) or the far end (+Z). The two sliders under it scale that end on the two axes across it — 1 leaves it alone, 0 pinches it to nothing, and anything above 1 flares it outward. The end you did not pick is never touched, and the shape keeps its base on the floor, so nothing you have already placed moves.

Step by step, for the dart shape:

  1. Add a box and scale it into a long thin slab — say 1 × 1 × 20.
  2. Open Transform and set Pinch the to far end (+Z).
  3. Pull the first slider (X at that end) down to 0. Both corners of that end come together and you have a point.

The same two numbers give you a lot of shapes:

ShapePinch theSliders
Pyramid / spiketop (+Y)0 and 0
Roof, or a wedge you can drive uptop (+Y)1 and 0
Obelisk, buttress, tapered columntop (+Y)0.4 and 0.4
Dart / arrowhead / boat prowfar end (+Z)0 and 1
Flared plinth, funnel, trumpettop (+Y)2 and 2
It is a real solid, not a trick of the light. Physics, bullets, footsteps and shadows all follow the pinched shape — you can stand on the slope of a tapered roof and a shot at the point of a dart passes beside it rather than hitting an invisible box. The one cost: tapered boxes are drawn individually rather than batched with their plain neighbours, so use them for the handful of shapes that need it rather than for a field of five hundred.

Groups

Every prop's Tag now sits at the top of Object & selection (and stays in the Signals fold — they edit the same tag). Ctrl+Shift+C collapses every editor section at once.

Outliner (scene hierarchy)

Press O (or the list button on the editor toolbar) for the Outliner — the whole placed scene as one panel: props, lights, enemy spawns, turrets and pickups, each with its tag. As levels grow this is the fastest way around:

  • Search matches names, tags and folder names; the tag dropdown narrows the list to one tag.
  • Folders: select some props, then use the Move → dropdown in the Props group to file them into a folder (or create a new one) — or just drag a row onto a folder (drop on the Props header to un-file it). Folders save with the level. Double-click a folder to rename it; a folder's eye/padlock hides or locks everything inside at once.
  • Eye hides an object while editing only — deploys and play always show everything. Great for getting a roof out of the way.
  • Padlock locks an object: viewport clicks and marquee boxes pass straight through it, so a big backdrop stops stealing every click. A locked object can't be selected or moved at all until you click its padlock again.
  • Select all of a type: the grid button on a type header (or a folder) selects everything it contains — filter first to select just that slice (e.g. every prop tagged door).
  • Double-click a prop or light to name it; names save with the level and make search actually useful.

Select multiple props and press Ctrl+G to group them — the group moves, rotates, scales and duplicates as one. Ctrl+Shift+G ungroups.

Prefabs

Turn any configured selection into a reusable component — a door with its trigger, an elevator, a trap, a whole furnished room. Select the props, type a name in the Prefabs section and hit Save selection: the capture keeps everything — signals, mechanism animation, physics and joints, vehicle tuning, locks, dialogue, materials. Place drops a copy 8 m ahead of the camera; every copy arrives grouped (moves as one) and heights are terrain-relative, so a room built on flat ground sits correctly on a hillside.

Your prefab library lives in your browser and follows you across levels — and every level embeds the prefabs it uses, so a shared or community level brings its components along (they join the library of whoever opens it, never overwriting same-named prefabs of their own).

Editing a prefab: change any placed copy — move parts, retag, recolor, even add new props to its group — select it and press Update on that prefab's row. The definition rewrites and every other copy in the level follows. Parts you deliberately changed on one specific copy (a raised panel, a renamed tag) are detected as local overrides and left exactly as you authored them — the toast reports how many were kept. Moving a whole copy around the map never counts as an override. Detach disconnects a copy so future updates skip it; × removes a prefab from your library (placed copies stay in their levels).

Editor referenceObject folds — giving props behaviour

Select any prop on the Build tab and open Object & selection. Eight folds, in panel order. (Signals and Mechanism get their full treatment in Signals, locks & mechanisms; Vehicle in Vehicle tuning.)

Animation

Plays a model's built-in clips. Pick the clip (or all clips at once), then when it plays — Auto (from level load), E Activate (player interacts), or Signals only (waits to be targeted) — and how: ⟳ Loop, ⇄ Ping-pong, or → Once. Built-in shapes have no clips (use Mechanism to move those); for models without animations, the Sketchfab search has an "Animated only" filter.

Signs — text in the world

Add a Sign from the shape list (Build tab → Add a shape). It is an ordinary prop — gizmo, snapping, duplication, prefabs, tags all work on it — that draws text on a board. Room labels, booth names, a warning over a door, a scoreboard on a wall.

ControlWhat it does
The text boxWhat the sign says. Multiple lines are fine.
SizeText size on the board (8–200). Long text is shrunk to fit rather than overflowing, so a sign never spills.
TextText colour.
BoardBoard colour, then its opacity — 0 leaves floating text with no board behind it, which is how you get a painted-on-the-wall look.
left / center / rightAlignment.
A sign can show a live number. Curly braces read a Logic variable exactly as a HUD widget does, so Hits: {score} on a plate behind your shooting range is a scoreboard you can see from across the level. It repaints only when the variable changes, so a hundred static labels cost nothing.
A sign is double-sided, so it is never invisible from the wrong side — but the back reads mirrored. Place two back to back if both sides matter. It also defaults to No collision, so it is not an invisible wall in front of a booth; untick that if you want a solid board.

Parenting — props that ride other props

Select the prop that should carry the others last (it becomes the primary), then press Parent to this prop. The children now follow it: a crate rides a moving platform, a lamp travels with the wagon, a whole assembly turns as one when the parent rotates. Their colliders move with them, so the player really does stand on the crate while the lift climbs.

Deleting a parent releases its children where they stand rather than taking them with it. Nothing is lost by parenting something.

Prop values — a counter on the prop itself

Logic tab → Do actionSet prop value. Every prop can hold its own named numbers, so “this plate has been hit 3 times” lives on the plate rather than in a level-wide variable you would need one of per plate. Pick Add or Set, a name, and a value. Leave the tag blank and it writes to the prop whose signal fired the graph — so one node serves every plate in the booth.

Lock

Lock picks the required key (red / blue / gold / green); pressing E on the prop then needs that key in hand — place a matching key pickup pad somewhere findable. Consume key on unlock spends the key (for one-key-one-door puzzles; off = a master key). A prop unlocks once per deploy, for everyone in MP.

Rig an imported model

A model you import is usually just geometry — no skeleton, so the animation editor can only move it as one piece. Select the prop and hit 🦴 Auto-rig model (T-pose) (in the Animation fold, beside the animation editor button): drop a marker on eight joints — chin, groin, both elbows, both wrists, both knees — and RUMPUS ENGINE builds a full humanoid skeleton and skins the mesh to it. After that the animation editor keyframes its arms, legs and spine like any character, and every custom clip in the level retargets onto it. It's the usual way to turn an imported character into an NPC.

The rig belongs to the model, not to one copy. Props share one loaded copy of each model, so the markers are stored against the model's URL — every copy of that shopkeeper stands up the same way, and the level saves one marker set however many you placed. Copies already standing in the scene pick up the new skeleton when the level reloads; a fresh one is rigged the moment it spawns. The same rigger is on the Player tab and the Enemies tab for those models. Works best on a model standing in a T-pose or A-pose.

Dialogue (NPC)

Name (shown over the prompt) + one line of dialogue per row (up to 120 × 200 chars); the player presses E to advance. The first line also fires the prop's On E signals — so a conversation can set the objective, drop a checkpoint, or open a door as it starts.

Replies, conditions & jumps

That's still all a simple NPC needs. When you want the player to answer, six marks turn the same box into a branching conversation — nothing else about it changes, and a script written before this still reads exactly the same way.

MarkWhat it does
> text -> labelA reply button on the row above it. Up to six; the player clicks one, taps it, or presses 16. -> end finishes the conversation. Leave the arrow off and it just carries on to the next row. While replies are showing, E does nothing — the player has to answer.
#labelNames the next row so a reply can jump to it. Not a line of dialogue itself.
[if expr]At the start of a row: skip that row unless it's true. At the end of a reply: hide that reply unless it's true — a locked option simply isn't offered.
-> labelJump instead of falling through into the next branch. Write it at the end of a line (I felt sassy once. -> end) or on a row of its own — both work. -> end stops the conversation there. It only counts as a jump when it's a single bare label at the very end of the row, so an arrow used as punctuation mid-sentence is left alone.
{set name = 2}Write a Logic variable when the row is shown or the reply is picked. + and work too: {set coins + 1}.
{event doorOpen}Fire a Logic event — the same pulse an On event node catches. This and {set} are the bridge: a conversation can drive your whole graph.

A condition compares two things with == != < <= > >=. Either side can be a number, a Logic variable, or item:someId — how many of that inventory item the player is carrying. [if hasKey] with no operator means “it has been set at all”. An unset variable reads as 0, so a condition is never comparing against nothing.

Have you found the brass key?
> Here it is. -> gotIt [if item:brassKey >= 1]
> Still looking. -> notYet
> Leave. -> end
#gotIt
Then the vault is yours. {set questStage = 2} {event vaultOpen} -> end
#notYet
[if questStage >= 1] You said that last time.
Keep looking. It glints in the dark. -> end
Every branch needs an ending. Without one, a branch runs straight on into the next #label below it — so picking the first reply plays every answer in the file. End each one with -> end (or a jump). The editor watches for exactly this and warns you under the box, along with any jump pointing at a #label that doesn't exist.

Rows that start with a reply and have no line above them render as a bare choice prompt — useful for “what do you do?”. A label that doesn't exist ends the conversation rather than looping. Everything the player sees is escaped, so a shared level can't inject markup through a line or a button. Pair this with values that carry over and an NPC can remember you between levels.

Joint (physics)

ControlWhat it does / how to use it
Physics joint (hinge)Hinges the prop so it swings under physics. The prop must also be Dynamic (Physics fold) or the joint does nothing — the editor warns.
Anchor toBlank = pinned to a fixed point in space (doors, see-saws). A prop tag = chained to that body — pendulums, rope bridges, and towed trailers (anchor to a drivable car's tag, keep axis Y, put the hinge at the trailer's front tongue; the car pulls it with real physics).
Hinge axis + X/Y/ZY = door, X = see-saw, Z = paddle. The offsets move the hinge point from the prop's origin — e.g. half the width so a door hinges at its edge. The cyan marker shows the live hinge point in the scene; the ring + line show the swing axis.
Limit the swing angleMin/Max (±180°) — stop a door at 90°, a see-saw at ±25°.
Trailer tracking0–1: simulates tyre grip so a towed trailer trails straight instead of swinging out (0 = free hinge). It still yields in turns — raise it if the trailer whips around, lower if stiff. It centres on the angle it has at Deploy, so place the trailer in line behind the car.
Motor speed / strength±720 °/s drives the hinge (0 = free swing) — powered wheels, auto-closing doors, spinning hazards.

Joints take effect on Deploy.

Physics & destruction

ControlRange (default)What it does / how to use it
DynamicoffFalls, tumbles, stacks on floors/ramps/crate tops, reacts to shots and rams. Resets to its authored spot on Deploy. Needs the page served over http(s) — file:// blocks the physics engine.
Weight0.05–200Heavier = harder to knock around, throws shorter, hits harder under Crushing-props rules.
GrabbableonPlayers can pick it up with G, carry and throw it. Grab label replaces the default prompt ("Ancient Tome — [G] to read"); Grab distance sets the reach.
🔥 On fireoffBurns with flames from level load and hurts anyone touching it (Burn dmg 0–60/s). For a barrel you shoot to ignite, leave this OFF and give it an Explosive Fuse instead.
🎯 Shootable targetoffTakes damage while staying bolted down. The way to make a steel plate, a paper target or a switch panel shootable without making it a tumbling physics body. Everything below works on it: health, break style, explosives, on-hit signals, the Destroy objective. This is what a shooting range is made of — see Building a shooting range.
BreakableonWhether the prop is ever destroyed. Untick it and the prop still registers hits — health, the impact flash, the hit sound and the On hit signal all fire — it just never breaks. That is exactly what a scoring plate wants. Health (1–2000) sets shots-to-break (refills each Deploy); Break style: Shatter = physics debris (with Pieces 3–90, Size 6–30%, Shards/Cubes shape), Puff = a quick burst + vanish (cheaper — use it for clutter).
🎯 Objective targetoffMust be destroyed to win a Destroy mission; glows with a red beacon in play. It needs Dynamic or 🎯 Shootable target, with Breakable on — an objective that can never be destroyed makes the level unwinnable, and Level check says so.
No collisionoffDecoration only: the player, enemies and shots pass straight through. Cables, foliage, ceiling banners, a sign you should not be able to shoot. It sits beside the Tag field rather than in this fold, because it is about presence rather than physics.
💥 ExplosiveoffDetonates when destroyed or on hard impact. Radius (2–20 m) + Damage (10–200) with falloff — hurts you too, and chain-reacts nearby explosives. Impact = the collision speed that sets it off (0 = shoot-only); Fuse = 0 blows instantly, above 0 a shot lights it and it blows after the fuse — shoot it, watch it catch, run.

Editor referenceWorld tab

Sections: Environment · Auto-generate · Zones

Environment

Movement — and the four traversal verbs

Global player physics: Walk speed (4–60) · Run speed (4–100) · Crouch speed (1–40) · Jump (0–30) · Launch power (0.25–4, jump-pad multiplier) · Gravity (5–80) · Eye height (0.4–20).

Four more sliders in the same fold give the player extra ways to move. All four are off at 0, which is exactly how every level built before them plays — turn one on and it is available for the whole level. Each is one number that both enables and tunes the verb, and all four are the jump key except the dash, so there is nothing new to teach a player and rebinding jump moves them together.

SliderRangeWhat it gives the player
Tap hop0.1–1How much of a jump you keep when you release the key on the way up. 1 = off (every jump is full height). At 0.5 a tap is a quarter-height hop and a held key is the full jump — the platformer's short hop. Height goes as the square of speed, so this one number spans the whole tap-to-hold range. A demanding jump is cleared by holding, which is what a player does naturally when reaching for something.
Air jumps0–3How many extra jumps you get in mid-air. Press jump again while airborne. It sets your upward speed rather than adding to it, so a double jump rescues a bad fall instead of merely nudging it. Refunded the moment you touch the ground or grab a ledge, and it inherits the ordinary jump's half-second cooldown, so it cannot be mashed.
Wall jump0, or 3–30Push-off speed when you press jump in mid-air next to a wall. You get the normal jump height plus a shove away from the wall, and your speed along the wall is kept — so running a wall and kicking off it carries your momentum. You cannot take two in a row off the same wall, which is what stops a single wall being an infinite ladder out of a sealed arena; touching the ground, a ledge, or a wall facing a different way arms it again. A shaft with walls on both sides gives no push (there is no direction to pick) — that is deliberate, not a bug.
Air dash0–40A burst of horizontal speed in the direction you are moving, once per airborne trip, on its own key. Refunded on landing.
Building a movement course? Turn on Tap hop (0.5) and Air jumps (1) first — those two alone change how every gap in your level reads, so tune your jump distances after setting them, not before. Add Wall jump when you want vertical routes: two walls facing each other let a player climb, because each kick re-arms the other wall.

Lighting — control by control

ControlRangeWhat it does / how to use it
Sun (directional)0–4The main shadow-casting light's strength. 0 kills direct light entirely (flat, moody); ~0.9 default; 2+ is harsh desert noon. This is the only light that casts shadows.
Sun direction °0–360Spins the sun around the map — every shadow swings live as you drag. Match it to the visible sun in your HDRI sky, or aim shadows across your racing line for drama.
Sun height °5–89Angle above the horizon. 10–20° = long golden-hour shadows; 60°+ = tight noon shadows. Floored at 5° because a horizontal sun degenerates the shadow map.
Sky (ambient fill)0–3Hemisphere fill from above — lifts everything the sun doesn't reach. Low values make shadows read near-black.
Brightness lift0–2A flat ambient boost on top of everything. Use sparingly — it flattens contrast fast. Prefer raising Sky fill first.
Sun / Sky light colourcolorTints direct light and the ambient fill separately. The default fill leans cool teal; pick a neutral grey to remove the cast, warm amber for sunset scenes.
Day/night cycleon/offThe sun crosses the sky during play: dawn → noon (70° up) → dusk → midnight (below the horizon). Twilight ramps smoothly, the horizon crossings go golden, nights cool to a blue moonlight floor — dark but never black. Fog and flat skies dim after dark, and cars with headlights switch them on automatically when entered at night. Turning it off (or opening the editor) restores your authored sun instantly.
Cycle length s30–1200One full day+night. 30–60s = timelapse showpiece; 240 (default) = a day per 4 minutes; 1200 = a slow ambient drift across a long session.
Start atDawn/Noon/Dusk/NightWhere in the cycle each deploy begins. Start at Dusk for a level that slides into darkness mid-mission.

Tip: the day/night cycle can't dim an HDRI sky texture (only fog, lights and flat-color skies) — for convincing nights, use a plain sky. Sun direction still sets where dawn breaks when the cycle is on.

Camera & view

Field of view (50–110) · View distance (60–2000 — the hard cutoff where geometry stops drawing; raise it for big racing arenas) · Fog density (lower = see farther into the dark) & colour · ground grid toggle. Depth of field: Focus distance = how far away stays sharp, In-focus range = the depth kept sharp around it, Blur strength = how soft everything else goes. Post-processing: Bloom + Bloom threshold (how bright a surface must be before it glows), Motion blur (trail strength), Vignette, Film grain, Saturation, Contrast — they all compose, DoF included, and they save with the level (the on/off switch is each player's preference).

Cull below (px) stops drawing a prop once it covers fewer than that many pixels on screen — the single biggest performance lever a creator has on a dense level, and it is 0 (off) by default because a setting that removes your content should be your decision, not the engine's. On a scattered 600-prop field, 2 cut draw calls by 57% and cost nothing visible; on a level of 60 big props it does nothing at all, so try it and watch the counters rather than assuming. Nothing within 40 m is ever culled whatever the setting, and a prop carrying a light is never culled — so it can shrink your frame cost but it cannot make a lamp go out or delete the thing you are standing next to. Save ▸ Level check reports what it removed while it is on.

Making a big level run well

Three numbers decide whether a level is playable on ordinary hardware, and Save ▸ Level check reports all three so you do not have to guess:

WhatThe limit it warns atWhat to do about it
Triangles40,000 in one model, or 2,000,000 in the levelThe check names the model and takes you to it. Run Files ▸ Optimize on it — a 497,912-triangle ramp that made the game freeze on contact came down to ~10,000 and the freeze went. A small file size is no reassurance here: a compressed 1.7 MB model can hold half a million triangles.
Texture memorya soft cap, reported in MBThis is GPU memory, not download size — one 4096×4096 image costs ~85 MB on the graphics card however small the JPEG was. Optimize shrinks them.
Lights40Every point and spot light is looped over for every pixel, whether or not it is dimmed, so the count is what costs — not the brightness. Past the cap the engine drops the surplus at deploy and tells you how many; they all come back in the editor.
Press ` in play for the live meter: FPS, draw calls, triangles, lights, and where the frame time is going. idle? means the engine is waiting — at a capped frame rate that is normal, and below the cap it means the graphics card is the bottleneck rather than your logic.

Sky

Browse Poly Haven HDRIs in-editor or paste any equirectangular .hdr/.jpg URL (an .hdr lights reflections too); presets Park / Mountain / Room / None (None = flat fog-colored sky). Reflection strength (0–3) sets how strongly the sky shows up on metallic floors and walls — 0 for fully matte scenes. Sky rotation° spins the panorama to aim its sun or horizon features.

Weather — control by control

ControlRangeWhat it does / how to use it
None / Rain / SnowRain renders as line streaks that lean into the wind and stretch with fall speed; snow as soft round flakes that drift and sway per-flake. Both are one recycled particle layer riding the camera — density halves on phones automatically.
Amount0.1–1Particle density. 0.2 = light drizzle / flurries; 1 = downpour / blizzard.
Size0.5–2Streak length (rain) or flake size (snow), applied live as you drag.
Wind0–30 = dead calm (rain falls straight, snow just sways); 3 = storm — rain lies hard over, snow streams sideways.
Wind dir °0–360Which way the wind blows. Line it up with your waterfall spray, flag props, or just against the player's line of travel for drama.

The layer follows the camera and falls indoors too — keep sheltered scenes on None, or accept it as "atmosphere". Storm recipe: Rain, Amount 1, Size 1.4, Wind 2.5, day/night cycle parked at Dusk.

Floor & terrain

Floor colour / roughness / metalness, then three texture rows — the image itself, an optional normal map and an optional roughness map — with tile W/H and rotation that govern all three, plus a texture search. Terrain: Height (0–18) and Detail (1–8) with Generate / Regenerate / Flatten, plus a terrain brush painted directly onto the ground — Raise / Lower / Smooth sculpt the height, Paint blends materials, and Scatter plants props. A colour-coded cursor ring follows your pointer showing the brush radius; in Paint mode the inner ring is where full strength ends and the soft edge begins, in Scatter mode it shows the planting spacing.

Normal and roughness maps. The texture row gives the floor its colour; a normal map gives it relief — grout lines, cracks, a weave — without any extra geometry, and a roughness map makes parts of it shinier than others (wet patches, worn tracks). Most free texture sites ship all three beside each other; paste each into its own row. The built-in texture search fills all three at once, which is the quickest way to a real surface. Leave them blank and the engine's own fine grain takes over — a blank row is not a missing step. The boundary walls have the same three rows.

Changing the texture in the top row clears the two below it, and says so: relief measured from one material does not describe another. Set the colour first, then the maps.

Material painting (the Paint brush mode)

Make the base floor your ground material (say, tiled grass), then paint up to three more textures straight onto it — a dirt path, a stone plaza, scorched earth. Pick a Layer, give it a texture (URL or the built-in free-texture search) and a Tiles count, then drag on the floor. It works on flat floors and sculpted terrain alike, and the result saves with the level (share links, gallery, multiplayer).

ControlRangeWhat it does / how to use it
Layer 1 / 2 / 3Which paint layer the brush writes. A ● marks layers that already have a texture. Where layers overlap, the higher-numbered layer paints over the lower.
Tiles2–120How many times this layer's texture repeats across the arena — match it to your base floor tiling so the scale reads consistently.
Brush size2–40Radius in metres. Big for clearings, small for a winding footpath.
Soft edge0.05–0.95The blend band at the brush rim. Low = crisp painted edge; high = the grass-fades-into-dirt look. This is the "soft edges" dial.
Flow0.05–1How much each pass lays down. Low flow + repeated strokes builds up like an airbrush — great for subtle wear down the middle of a path.
EraseThe same brush removes the selected layer's paint instead of adding it.

Path recipe: base floor = grass texture; Layer 1 = dirt, Tiles ≈ your floor tiling, Brush size 4–6, Soft edge 0.6, Flow 0.4 — then drag your route in two or three slow passes.

Landscape scatter (the Scatter brush mode)

Plant randomized props by dragging: trees, bushes, rocks — anything. Fill up to three slots, either from the free-model search (credited automatically) or with Use selected prop, which clones whatever's selected at its exact scale — including built-in shapes. Each slot has its own Size dial: for searched models it's the real-world size in metres (default 7 — tree height; crank it to 25 for giants), for cloned props it's a multiplier on their captured scale. Each pass drops Density (1–6) props at random spots inside the brush circle, each randomly rotated, varied by Size jitter (±0–60%), and sat on the terrain — a slow drag along a hillside plants a treeline.

Scattered props are normal props: marquee-select to move or delete them, undo works, and they save with the level. Budget note: each searched model adds a draw call — a few dozen trees is fine, hundreds will cost frames. Scattered primitives (rocks from spheres, fence posts from cylinders) are basically free thanks to instancing. Forest recipe: slot 1 = a tree, slot 2 = a second tree variety, slot 3 = a bush; Density 3, Size jitter 0.4, Brush size 15 — then wander the map edge in one slow pass.

Walls & arena

Show boundary walls (off = invisible but still solid), wall material/texture controls, and Arena size (15–2000) — half-width of the playable square. Racing levels usually want 300+.

Audio

A looping music track plus per-event sound rows: grenade explosion, coin pickup, powerup pickup, jump, hit marker, enemy kill (with per-enemy-type overrides), player hurt, and the car set — engine loop, brake, skid, boost. A built-in Freesound browser searches free sounds; each pick is credited automatically.

Auto-generate

Procedurally builds a starting layout (cover, buildings, scatter) you then edit by hand. There's also an AI scene builder — describe a scene in a sentence and it searches and places matching models (works best with a Poly Pizza or Sketchfab key).

Zones

Paintable volumes under World → Zones — pick a type at the top of the section, then + Add (at me) drops one where you stand. Triggers (see below), Audio zones (positional sound while inside a radius: URL, volume, loop), Death zones (instant kill between Base Y and Base Y + Height — lava, pits, out-of-bounds), Jump pads (launch on contact, scaled by the Movement fold's Launch power), Ladders (climbable volumes: W up, S down, jump to hop off; Facing sets which side you step off at the top), and Fire zones (damage per second inside, with a full particle look: density, size, hue, turbulence, wind, saturation, sparks, smoke mode — hue 30 is natural fire, 210 blue, 285 purple; saturation 0 turns it into grey smoke).

Triggers — “when something gets here

Every other zone is a fixed behaviour: a death zone kills, a jump pad launches. A trigger does nothing by itself — it fires a Logic event and hands the moment to your graph, which is where your game actually lives. Before triggers the only things that could start a chain were match start, a timer, an enemy dying, a wave starting, or the player pressing E on a prop. Now you can say “when the player reaches here.”

ControlWhat it does / how to use it
EventThe Logic event name it fires, e.g. reachedVault. The field shares the graph's event dropdown, so pick a name you already use instead of retyping it — and any name you type here shows up in the On event node's list. A trigger with no event name does nothing, and the panel tells you so.
WhenEnters fires on the frame something crosses in (not every frame it stands there). Leaves is the mirror. Stays in pulses on a repeat interval for as long as something is inside — use it for damage-over-time, a capture point ticking up, or an alarm.
WhoPlayer, Enemy, or Anything. In co-op, “Player” means any living teammate — a door opens for whoever reaches it first, and a downed teammate doesn't hold it open.
Radius / Height / Base YA cylinder, exactly like the other zones: it spans Base Y up to Base Y + Height. Height matters — a short trigger can be jumped over, and a trigger on a balcony ignores the floor below it. Drag the blue dot with the move gizmo.
Repeat everyOnly used by Stays in: seconds between pulses (0.1–60).
Only onceFires at most once per match, whichever mode it's in. Restarting the match re-arms it, so a retry plays the same as a first attempt.

The whole loop, end to end: drop a trigger at the vault door, set its event to reachedVault, then in the Logic tab add On event reachedVault → Show message (or Open door, Spawn, Play cutscene, Set variable — anything the graph can do). Triggers are evaluated by the host in multiplayer, and never while you're editing or paused.

Water zones — control by control

ControlRangeWhat it does / how to use it
Radius1–120Footprint of the water cylinder. Puddle ≈ 2, pond ≈ 8–15, lake 30+. Chain several round zones for a winding river.
Depth0.05–20Water fills from Base Y up to Base Y + Depth; the animated surface sits on top. 0.05–0.3 = a glossy visual puddle; 0.3–1.2 = wading (players slowed, gravity still applies); 1.3+ = swimming (buoyancy, Space strokes up, C dives, the screen tints while your eyes are under). Deep water also brakes falls — jumping off a cliff into a deep pool is safe by design.
Base Y−20–40The floor of the water volume. For a lake in a sculpted basin, set it at the basin floor so the surface lands at natural shore height.
X / Z±2000Exact placement (the zone also drops where you stand when added).
Water colorcolorThe deep tint. Murky green for swamps, deep teal for lakes, near-black for horror. The surface also picks up a sky tone via its fresnel and a glint from your actual sun direction — and the whole body follows the scene lighting: Sun/Sky sliders brighten or darken it, and the day/night cycle dims lakes and falls through dusk into a faint moonlit sheen.
Opacity0.1–0.95Low ≈ clear shallows (you can see the bottom); high ≈ opaque depths. Pair low opacity + tiny depth for puddles.
Waves0–2.5Ripple strength. 0 = glass (mirror-calm), 1 = default chop, 2+ = agitated. Purely visual.
Flow dir ° / Flow push0–360 / 0–12Turns the zone into a stream: the current pushes swimmers along Flow dir at Flow push strength, and the ripples visibly scroll with it. ~3 = lazy river you can swim against; 8+ = rapids that sweep you away. 0 push = still water.

Water is mechanical, not just visual: cars slow in it (light splash → 45% of top speed in the shallows → 18% in deep water) and throw bow spray; dynamic props bob to the surface and float; enemies and bots wade at roughly half pace — funneling hostiles through a river is a legitimate defensive design. One draw call per surface, so lakes are phone-friendly.

Waterfalls — control by control

They live inside the Water tool, below the zones list. Each fall is two layered sheets of streaming columns (the back layer runs slower and dimmer for depth) plus a churning foam pool.

ControlRangeWhat it does / how to use it
X / Z / Top YWhere the lip of the fall sits. Put Top Y at the cliff edge height.
Drop1–60How far it falls. Match it to the cliff so the foam pool lands at the base (pool sits at Top Y − Drop).
Width0.5–60Sheet width. 1–2 = a rivulet, 6 = default cascade, 20+ = a broad curtain.
Facing °±180Rotates the sheet — set it flush against the cliff face it pours over.
Tint / OpacityWater color and sheet density. Low opacity + slow speed reads as a gentle veil; high opacity + fast speed as heavy whitewater.
Speed0.1–4How fast the water streams down (also scales the streak animation).
Splash0–2Foam pool intensity — how hard the base churns.
Pool width0.2–2.5Foam pool size as a multiple of the sheet width (default 1.15 spans the full fall). The pool is elliptical — wider along the sheet than out from it.
Sound URL / VolumeA loopable waterfall sound (Freesound: search “waterfall loop”). Volume falls off with distance automatically, and bigger falls are audible further; it plays through the SFX bus so master volume and mute apply.

Standing in the sheet pushes you down into the plunge pool — pour a fall into a deep water zone and the combination is safe to ride down; onto dry ground, the landing is on you.

Editor referencePlayer tab

Sections: Handles · Object & selection · Transform · Characters

  • Player avatar — import any model as the third-person body; scroll in the preview to zoom.
  • Player start — drag the blue marker to set where the run begins; Facing° (−180…180) sets the initial look direction.
  • Characters — the roster of player & enemy character models, with animation-slot mapping (clips are grouped by taxonomy: locomotion, combat, hits, deaths…). Characters picked here appear in multiplayer's CHARACTER menu too.
  • Slide on touch — tap CROUCH while sprint-running; a standing tap still toggles crouch. On a controller the bag and item inspector are fully navigable: stick/D-pad moves the ring, A opens/uses (including Use — hold & place), B backs out.
  • First-run tutorial — your first solo deploy shows a small coach pill (Move, Look, Fire, Jump, Sprint, Build menu); each step ticks off when you do it, the wording matches your input device, and the ✕ dismisses it for good.
  • Model loading bar — picking a Sketchfab or Poly Pizza model shows a live progress pill (percent and MB) while it downloads, so you know it's coming.
  • Joint tweaks — models that import with bent wrists, A-pose arms or twisted forearms can be fixed in-app: pick a bone on the Player tab (Joint tweaks), nudge X/Y/Z in degrees, and the offset rides on top of every animation. Live in the preview, saved with the character.
  • Auto-rigger — a static, unrigged humanoid model (T-pose or A-pose) becomes a fully animated character without leaving the game. Load the model on the Player tab or an Enemies-tab slot and press Auto-rig model (T-pose) (each enemy type keeps its own markers; roster characters inherit the Player tab's rig when you add or update them): a Mixamo-style modal shows the model front-on — click chin → wrists → elbows → knees → groin (with Use Symmetry on, one click per pair fills both sides; drag to turn, scroll to zoom, click a step row to re-place it). AUTO-RIG fits a full humanoid skeleton to your markers, computes skin weights automatically (weights blend smoothly across knees and elbows and are diffused along the mesh surface, so deep bends curve instead of creasing), and switches the animation library on — the model walks, runs, crouches and shoots immediately. The markers are a few numbers saved with the level, so the rig rebuilds on every load; works at any model scale and with any rest pose (T or A — library clips align to the model's rest automatically). Blocky/stylized models deform best — fine-tune joints afterwards with Joint tweaks if needed.
  • Animation editor — author your own skeletal clips entirely in the browser (desktop only; no Blender or Mixamo needed). On the Player tab press 🎬 Animation editor: the model opens in a full-screen workspace with a bone tree (friendly names, search), an orbit viewport (click a joint to select it, drag the selected joint to rotate — hold X/Y/Z for a local axis, Shift-drag the hips to move them), an inspector (exact angles, reset, key buttons) and a timeline (scrub, play with Space, drag keys, snap-to-frame, K keys the selected bone, Shift+K keys the whole pose, Auto-key writes keys as you drag). Clips save into the level (share codes, multiplayer and campaigns carry them) and appear in every per-state clip picker next to built-in and library clips — or assign one directly from the editor's Assign panel (idle, walk, reload, death, any state). Because clips are stored against the engine's normalized skeleton, the same clip retargets onto any humanoid model. Ctrl+Z undoes inside the editor; deleting a clip warns where it's assigned. Generate with AI — press ✨ AI and describe the motion in plain language (“lifting a heavy box: start standing, bend down, grab it, then stand back up still holding it”). Claude blocks it out as real keyframes on this model’s skeleton — it writes anatomical joint angles, the engine converts them and clamps them to real joint limits, and the result drops onto the timeline for you to scrub, deepen, retime and polish like any clip you authored. Nothing is saved until you press SAVE CLIP. Works on props too (whole-model motion for doors, crates and vehicles). Needs your own Anthropic key — add it under Settings → API keys. Then keep going: the panel stays open and switches to Refine this clip — say “bend deeper at the bottom”, “hold the grab a beat longer”, “make the stand-up slower and heavier” and the clip is revised in place, as many passes as you like (Ctrl+Enter to fire, Ctrl+Z to step back a pass). Refining reads your clip back as joint angles, so it works on any clip — one you generated, one you keyframed by hand, or a Quaternius clip you pulled in with Edit existing (“make this walk bouncier”). Overlap & follow-through (on by default) drags each bone a few frames behind the one it hangs from, so the hips lead and the hands and feet trail — the difference between motion that reads alive and motion where everything snaps on the same frame. Turn it off for deliberately mechanical or robotic movement. Edit an existing animation — the Edit existing… dropdown copies any clip already on the model (its own clips, or a retargeted Quaternius library clip) into a new editable custom clip: it samples the clip into keyframes (automatically thinned so it's hand-editable, not one key per frame), names it “<clip> (edit)” so the original is never touched, and drops you straight into tweaking it. Take the pack's walk, adjust the arm swing, save — your version plays in its place. Production tools: Mirror pose / Mirror clip (left↔right), Copy/Paste pose and Copy/Paste keys at the playhead, a per-clip Curve mode (smooth / linear / step), Ghosts (onion-skin skeletons at the previous and next keys), Export/Import of .rumpusanim files to share clips between levels and creators, and timeline events — fire a sound (footsteps, casings, reload clicks) or a → Logic event (melee hit-windows, scripted beats) at any moment of the clip; they show as orange ticks on the timeline and fire wherever the clip plays. The editor also opens from the Enemies tab, and — since build 1064 — from any selected model prop (World tab → Animation): a humanoid prop uses the normal retargetable skeleton; a non-humanoid rig (dragon, windmill, crane) lists its own bones by name; and a model with no bones at all edits as a single Whole model track — rotate it, and Shift-drag to move it through space — so doors, floating crates and drive-by vehicles become keyframable cutscene pieces. Prop clips join the same level library and play through the prop’s normal triggers (Auto / E Activate / Signals, or a Logic Do action → anim) — saved clips re-arm live props instantly, and a clip never auto-plays unless you pick it on the prop. Combined with dialogue lines (a talkable prop is an NPC), this is the ambient-NPC and set-piece toolkit. Keys multi-select with Shift-click or by dragging a box across the dope sheet — the band now spans every bone row it crosses, so you can grab a whole span of keys across many bones at once (Shift adds to the selection). Select all grabs every key on every bone in one click, Deselect clears it, and Delete keys (or the Delete key) removes the whole selection; dragging any selected key moves the entire set together. A Root path toggle draws the hips trajectory so authored root motion is visible at a glance. The timeline is a dope sheet — one labeled row per keyed bone; grab keys on any row, scrub on the ruler — and Flatten to in-place removes the hips X/Z drift so an authored walk loops on the spot.
  • Action bindings — the engine drives most animation states automatically (walk, jump, hit reactions), but several — dodge, parry, block, holster, knockdown, get up, idle-to-combat — have no trigger of their own. An action binding is how you reach them: on the Player tab, pick an animation — either any clip the model carries, including one you authored in the animation editor, or one of the named slots — a key (or mouse button, gamepad button, and an auto-generated touch button players can drag anywhere), and optionally a Logic event. The action plays the clip for its full length — wire the event into the Logic tab to make it do something: a dodge that grants a speed burst, a taunt that scores a point, a salute that unlocks a door. Add a cooldown, and tick lock movement to plant the player for the clip. Up to 8 per level, saved with the level and synced in multiplayer — everyone sees your dodge. The editor warns if a key already belongs to a default control or another action, or if a bind still points at a clip the current model doesn't have (it falls back to the slot behind it rather than playing nothing).
  • Built-in animation library — pick Standard (43 clips) or Pro (120 clips — every animation slot filled: 8-direction locomotion, climbs, turns, dodges, five hit reactions, two deaths) under Animation states and RUMPUS ENGINE retargets the CC0 clip pack (by Quaternius) onto your model's own skeleton. Any humanoid rig works: Mixamo-rigged, UE-style, Rigify and most others are recognized by bone name, and every slot stays overridable — the pack's clips just appear in the pickers alongside the model's own. No more exporting animations one at a time and converting them — and a model with no rig at all can be rigged right here (next item). Characters hold guns with both hands automatically — a per-frame arm IK plants the support hand on the forestock (tracking your aim) and pulls the trigger hand in only when the gun sits beyond its reach, so your tuned grip survives into play; the Player-tab preview shows the same hold, and a Two-handed weapon hold (IK) checkbox turns it off per character.

Live third-person preview

The Player tab's viewport is a free orbit for inspecting your model, so it deliberately ignores the Side / Distance / Height sliders — which used to mean the only way to judge the chase framing was to press play, look, pause and tweak again. Turn on Live third-person preview under Third-person camera and a small window shows the real chase framing around your model, updating as you drag. The hip / aim switch in its header flips between the two slider groups, so the …when aiming set is just as visible.

It shows the framing you authored, with no follow damping and no wall pull-in — those are live reactions to the world, and a preview that ducked behind scenery would tell you nothing about your framing. Everything else — pivot, offsets, the parallel look direction that pushes the body off-centre — is the same code the game runs.

Editor referenceEnemies tab

Sections: Enemies · Object & selection · Transform · Enemy gunfire

  • Type picker — choose an enemy type, import a model for it (⤢ Auto-fit size matches the collider), live preview.
  • Collider radius / height — size the damage hit-cylinder only (0 = auto-fit). They no longer affect movement or spacing; toggle Show colliders to see the pink cylinders on live enemies. Offsets re-center off-pivot models.
  • Spawn markers — place exact spawn points with patrol/hunt mode, patrol radius, detect radius, facing, a patrol route, and “Appears on wave N” (0 = every wave). No markers = classic random waves.
    • Height (build 1087) — put enemies on rooftops, balconies, catwalks and upper floors. Drag the marker up with the gizmo or type a Height in the inspector; it is measured from the ground beneath, like the player start, so it rides terrain edits instead of being stranded. A drop line and landing disc appear whenever the marker is floating above whatever it will land on — no line means it is already resting on a surface.
      The enemy stands on the highest surface it finds at that height (a marker left slightly under a roof still snaps up onto it). If there is nothing solid up there, it holds the height and falls. Set it to 0 — the default, and what every level built before 1087 has — for ground level.
      Heights go up to 1000. The slider drags to 120 by default and its track grows to fit anything taller — for a very high spawn, type the number in the box beside it.
  • Enemy gunfire — how enemy fire looks: bolt tip, streak, trail and muzzle flash.

Sides — friendlies, allies and third parties

Not everything that moves has to be hostile. Two controls on a spawn marker decide what a creature is.

Friendly

Tick Friendly and you get a wandering NPC: it patrols its area or route, ignores the player and gunfire, does not count as a hostile, and killing it gives you nothing. It is the villager, the shopkeeper's dog, the crowd at the fairground — motion that makes a place feel inhabited without making it a fight.

A friendly does not hold a wave open: a level full of villagers still advances when the last hostile dies. The On enemy killed logic event still fires when one dies, so you can punish shooting the innocents. Hunt mode behaves as Patrol while a marker is friendly.

Faction

A marker that is not friendly picks a Faction. The rule is simply that different sides fight each other, and the player is Your side:

FactionFightsUse it for
Your sideHostile, Third party, Fourth party. Never you.An escort, a turret crew, a squad that fights alongside you.
Hostile (default)You and the other three.Everything every level built before factions already has — nothing changed.
Third party / Fourth partyEveryone but their own side.Two gangs at war that you can walk into the middle of; wildlife that attacks both.
An ally's kill is not your kill — no score, no lifesteal, no callout — but the loot still drops, so you have to walk over and take it. And an ally with nothing to fight simply patrols; it never falls back to hunting you.
A three-way fight. Place two clusters of markers, one Third party and one Fourth party, on opposite sides of a courtyard, and stand at the edge. They will find each other. Mark the survivors' spawn Hostile and the last wave turns on you.

Per-type tuning

Gameplay tab → Waves & difficulty. A grid of HP, Damage and Speed per enemy type, for this level only. Each field's placeholder is the factory value, so a blank box visibly means “as shipped”. Speed is a multiplier of that type's own range, so its natural variation in gait survives being tuned.

This is how you make a level's brutes genuinely frightening without editing every marker, or turn a tutorial's grunts into something a first-time player survives. Tuning rides the level file, so a shared level plays the way you balanced it.

The eight enemy types — how each one fights

TypeHPSpeedHitBehaviour — and how to fight it
Grunt306–99The baseline melee beeliner. Cannon fodder that teaches spacing.
Runner1611–136Fast and fragile — closes distance alarmingly. Dies to almost anything if you hit it first.
Brute903.5–518Slow, heavy, hits like a truck. Kite it; never let it corner you.
Gunner244–64×4Ranged: holds an 11 m standoff and fires 4-round bursts while strafing sideways — harder to hit than it looks. Close the gap or take cover between bursts.
Sapper209.5–12.5blast 40A fast rusher that never swings — it detonates (6 m blast with falloff) when it reaches you, and also when killed. Drop it at range; never melee one.
Shieldbearer603–4.514Soaks frontal shots (they deal ~18% damage). It turns slowly, so strafe around its guard and flank. The shield stops bullets and melee — not explosions that engulf it.
Charger754.5–620At mid-range with line of sight it telegraphs a wind-up (~half a second) then lunges 16 m at high speed to slam you. Sidestep the dash during the wind-up. Up close it just melees.
BOSS9002.8–4.228A ranged artillery piece with a 14 m standoff. Joins every Nth wave per the Boss every N waves rule (or wherever you place a boss spawn marker).

Later waves bias toward the tougher and ranged types automatically in Random mode. Water slows all of them to about half pace — terrain is a weapon.

Editor referenceGameplay tab

Sections: Objectives & rules · Pickups · Loot · Inventory items · Build menu · Logic graph · Cutscenes

Objectives & rules is the heart of the level — the full reference is in Objectives & rules. The other sections:

  • Pickups — pads that grant ammo, health, weapons, power-ups, keys and items. See Pickups & inventory.
  • Loot — what enemies and loot boxes drop when destroyed; place loot boxes with a custom model, per-box contents, or random loot.
  • Inventory items — define carryable items: name, type (3D object you can rotate/zoom in the inspector, or a Journal / note text page), description, model, scale, and what using the item does (use-type / key / amount / consume). Hand them out via pickup pads or signals-gated props.
  • Build menu — the in-game radial Deploy menu (Tab): choose which shapes/models players can spawn while playing. Players can open the build menu (on by default) turns the whole mechanic off for a level that has no place for it — Tab, the touch BUILD button and the pad all do nothing, and the slots below are kept for when you turn it back on. All ten primitives (box, cylinder, sphere, cone, pillar, ramp, stairs, dome, tube, torus) or any custom model, each with colour/texture/scale plus Explosive, Unbreakable (shots can't shatter it) and Anchored (a static building block — no physics tumble).
  • Build mode — picking a slot enters placement: a translucent ghost follows your aim and snaps flush to the face you point at (grid-aligned, Minecraft-style) or to a ground grid. Fire places and keeps building, and a misplaced block deletes just as fast — aim at it and press X / middle-click (desktop), LT (controller) or AIM (touch); only blocks placed this session delete, never the level itself. Rotate the ghost 90° with the scroll wheel or R (Shift+R rotates back), RB/LB on a controller, or the ROT chip on touch — the hint shows the current angle. Right-click toggles snap, Esc/Tab (or BUILD on touch) exits. On hilly terrain the ghost hugs the landscape and placements land exactly where it shows. Anchored + Unbreakable slots make true building blocks for forts and towers.
  • Logic graph — node-based visual logic: variables, branches, timers, counters, loops, randomness and reusable functions, no code. See Visual logic — the Logic graph.
  • Cutscenes — the camera-sequence editor. See Cutscenes.

Editor referenceWeapons tab

Sections: Object & selection · Transform · Effects

Per weapon you can import a replacement model (with framing/transform for both hip and aim view), set its shoot & reload sounds, override its damage, and disable the muzzle flash. Effects covers gunfire's look: Impacts (sparks, marks & debris where shots land), Tracer (the streak fire leaves in the air) and Bullet holes — decals stamped where shots hit walls, floors and props. Tune their size and lifetime or upload your own decal image (a soft-edged transparent PNG works best); it saves with the level so everyone sees it. Decals are pooled and fade out on their own, so long firefights never clutter the scene. In multiplayer, everyone's gunfire reads: joiners', bots' and enemies' tracers stop at the wall they hit and spark (and stamp) there, just like your own.

The arsenal — full stats

WeaponMag / reserveDmgRateReloadCharacter
RIFLE30 / 901295 ms auto1.1 sZero-spread full-auto all-rounder
SMG40 / 120855 ms auto1.0 sFastest fire, slight spread, quietest gun (draws less aggro)
SHOTGUN6 / 249 × 8 pellets0.65 s1.3 s72 damage point-blank, wide spread — brutal in doorways
SNIPER5 / 20951.4 s1.6 sScoped (right-click), one-shots most types; loudest weapon
ROCKET1 / 690 + splash0.9 s1.7 sProjectile, 7 m blast — mind your own feet
CROWBAR600.5 sMelee with 3.4 m reach and big knockback, no ammo ever
FISTS240.36 sAlways available; the Start unarmed loadout (G grabs/throws)

The economy: attachments, upgrades, shop

Attachments — bought once with credits at the Weapon loadout screen, one per slot per weapon:

SlotOptions (cost)Effect
OpticRed Dot ◆120 · 2× Scope ◆260Cleaner ADS zoom · magnified + slightly tighter fire
MuzzleCompensator ◆200 · Suppressor ◆24030% tighter spread · quieter shots + 15% tighter
MagazineExtended ◆180 · Drum ◆340+50% mag · double mag
TacticalLaser ◆160 · Angled Grip ◆15040% tighter fire (+ visible beam) · 15% steadier

Between-wave upgrade cards (solo, pick 1 of 3 after each cleared wave, if enabled in the rules): High-Velocity Rounds (+25% damage) · Trigger Job (+15% fire rate) · Reinforced Plating (+25 max HP, heals) · Combat Stims (+12% move speed) · Vampiric Rounds (heal 4/kill) · Scavenger (+30% credits) · Field Medic (heal 25 each wave) · Munitions Cache (+1 grenade now & each wave).

Supply chests spawn periodically (one purchase each, then consumed): Medkit ◆60 · Overshield ◆100 · Damage Core ◆120 · Speed Cell ◆80 · 3 Frags ◆90 · Ammo Crate ◆50 — plus one-time weapon unlocks (SMG ◆200, Shotgun ◆220, Rocket ◆320, Sniper ◆400, Crowbar ◆140). The Ammo Station (if enabled) refills your current weapon for its listed price.

Editor referenceSettings tab

  • API keys — one home for every key the editor can use. Claude (Anthropic) unlocks the AI scene builder and AI animation generation; Sketchfab and Poly Pizza search the 3D model libraries (a shared key is built in, so these work out of the box — add your own only if you want higher limits or your own account’s access). Keys are stored in this browser only and are never written into a level, a share link, a campaign export, or sent to other players — anyone playing your levels needs no keys at all.

Editor referenceHUD tab

Sections: HUD · Crosshair

  • Custom widgets (logic-driven) — five kinds: + Text, + Timer, + Bar, + Button and + Image, up to 24 of them. They are live views of your Logic variables, and a Button fires logic back. Full treatment, with step-by-step builds, in Interfaces — widgets & menus.
  • Colours — accent, health, score.
  • MenusMenu panel, Menu border, Menu text, Menu dim text. These theme the full-screen panels (the inventory and the item inspector) so a styled level does not open an engine-coloured menu in the middle of itself.
  • Fonts — separate UI and display fonts from an 18-font set (Chakra Petch, Orbitron, Rajdhani, Press Start 2P, VT323, Russo One, Bungee, JetBrains Mono…).
  • Panels — shape (Angular / Rounded / Square), background opacity, border.
  • Show in play — toggle each element: minimap, score, wave counter, ammo, health, crosshair, kill feed, interact prompt, grab hint, objective banner, NPC dialogue.
  • Per-element layout — pick an element, then: Size (0.4–2.5×), X/Y offset (±2000 px), Opacity, plus Font and Tint for the text elements. While the HUD tab is open you're in live preview: drag the dashed outlines to position elements directly. Reset per element or the whole HUD. These settings save with the level — everyone who plays it sees your HUD.
  • Crosshair — style ✛ Classic · + Cross · • Dot · ◯ Circle · ⊤ T-shape · ∅ None, with size, thickness, gap, center dot and colour.

Editor referenceSave tab

Sections: Title screen · Level file · Campaign

  • 💾 Save / Clear save — browser save slot; Autosave while editing keeps it fresh.
  • 🔗 Copy share link — the whole level compressed into a URL. See Saving & sharing.
  • ⬇ Export / ⬆ Import — the level as a .rumpus file you can back up, edit or send (plain JSON inside; old .breach and .json exports still import).
  • 🗑 Delete all objects — fresh scene (undoable).
  • Issues panel — live validation that catches the classic mistakes before a playtest does: locks with no matching key pad (and orphaned keys), pickup spots placed while pickups are off, audio zones with no sound URL, cutscene shots with fewer than 2 waypoints, signals targeting a tag no prop carries, signals with no target (only Win level and Play cutscene work targetless), contact signals filtered to a tag that doesn't exist, signals playing a cutscene that doesn't exist, and Signals-only mechanisms that nothing can ever trigger.
  • Autosave — saves every few seconds while editing (never mid-PvP-match); the status line shows the last save time, or a storage-full warning that means "export a backup now". Undo holds the last 60 snapshots.
  • Campaign — chain levels into a solo campaign: build a level → ➕ Add current level → repeat → ▶ Play campaign. Each level ends on its own win condition and loads the next; weapons, health and inventory carry over. Per-level: rename, Edit (loads it back into the editor with a "Save changes" button), ▲/▼ reorder, ✕ remove; Export/Import campaign moves the whole sequence as one file.

Title screen

Give a level its own home screen: anyone opening your share link or game URL lands on your title screen, not the engine menu. Tick Custom title screen, then set a game title, an optional tagline, an accent, and a backdrop — either Capture backdrop (a frame of your scene) or an uploaded image. Preview title screen shows it over the editor.

Look

Everything below is in the Look fold, and every control starts at exactly what the engine used to hardcode — a level made before this had no look settings and renders identically.

ControlWhat it does
FontThe display face for the title, tagline and buttons — the same 18-font library the HUD uses, each option previewed in its own face. Fetched only if you pick one.
Title colour · TaglineIndependent colours. default puts either back.
AlignCentre, left or right — the text, the buttons and the logo move together.
NudgeSlide the whole block up or down (±40% of the screen) to clear a face or a logo in your backdrop.
ImageFill the screen (crops to fit) or Fit inside (letterboxes, so nothing is cut off).
StrengthHow strongly the backdrop reads (0–100%). The default 55% is deliberately soft; push it up for real key art.
DarkenThe vignette that keeps text readable over a busy image. Drop it to 0 to see the artwork clean.
Behind itA flat background colour instead of the engine's dark gradient. Works with no image at all — a solid colour and a wordmark is a whole title screen.
LogoUpload an image that sits above the title (height 6–40% of the screen). Clear the game title field and the logo stands alone — which is what a wordmark is for.
Play · MultiplayerRename the buttons. Blank keeps PLAY and MULTIPLAYER.

End screens

The screens a player actually screenshots. In the same Look fold: a heading for victory and another for defeat (blank keeps the engine's MISSION COMPLETE / TERMINATED), a colour for each, and an optional backdrop image for each. The Font above applies here too — even with the custom title screen switched off, so a level that doesn't want a home screen can still end in its own type. Each has its own Preview button that shows the real screen over the editor.

With a backdrop set, the ending drops the engine's heavy scene blur so your artwork shows clean. A game that sets none of this is left completely alone — same wording, same styling as before.

SystemsTrack builder & racing

Laying track

On the Build tab, the Track builder places snap-together road pieces. Press T for top-down view (scroll to zoom), then click pieces — each snaps onto the exit of the selected piece (select any piece to branch from there), or the last one placed. Del removes the selected piece.

PieceGeometry
Start line16 m straight with the checkered band — the lap counter and grid. Every course needs exactly one.
Straight24 m straight
Short8 m straight — the fine-adjustment piece
45° L / 45° REighth-turn, 18 m radius
90° L / 90° RQuarter-turn, 18 m radius
Bank L / Bank RQuarter-turn with camber that eases in and out — flat at both ends, so it joins flat pieces seamlessly
Ramp ↑ / Ramp ↓24 m straight rising/falling 6 m — chain them for hills and jumps

The road is 12 m wide. All lengths are multiples of 8, so closed circuits line up exactly — and when the two ends nearly meet, Close loop bridges the remaining gap — since build 896 it is a real solver (combinations of curves plus stretched straights), so heading mismatches and sideways misses close too, not just straight-ahead gaps.

🎲 Random track rolls a complete closed circuit in one click — banked corners and a ramp section onto an upper deck included — and you can restyle or hand-edit it from there. Keep clicking until you like the shape.

✏ Draw track is the fastest way to build a circuit: click it, sketch your track outline as one loop (it flips to top view while you draw), and release — the builder lays every piece to match your sketch, adds a start line and barrier walls, and the loop is closed by construction. It replaces the existing track (one undo step restores it), so you can redraw until the shape feels right, then restyle it under Track appearance.

Barrier walls

Per-piece (Barrier walls checkbox on the selected piece) or course-wide (Walls: whole track / Walls: remove all). Walls are a concrete base plus a clear catch-screen to car-body height; they follow banking and ramps.

The Race objective — setting by setting

SettingRangeWhat it does / how to use it
Laps to win1–99Crossing the checkered band on the Start-line piece arms lap 1; completing the count wins. 1 lap = sprint, 3 (default) = classic, 10+ = endurance where the ghost becomes your real rival.
AI rivals0–60 = pure time trial against the clock and your ghost. Rivals are cloned from your placed vehicle (same tuning, different liveries), gridded in staggered rows behind the line. They need a closed loop (use Close loop) to compute their racing line — the Save tab's issues panel warns if they can't spawn.
Rival pace0.4–1.3Their speed as a fraction of the physics-ideal racing line. 0.7 = learnable, 0.85 (default) = beatable with clean driving, 1.0 = flat-out, 1.1+ = you need the perfect line and slipstream-free corners. Each rival also runs slightly slower than the one ahead, so the field spreads naturally.

On deploy you're auto-seated in your car, which is auto-gridded at pole position regardless of where it was parked in the editor. Throttle is locked through the 3-2-1 countdown and releases on GO. Every track piece is a checkpoint: cut the infield and the lap is voided with a toast (you need ~60% of pieces each lap). Losing rivals don't stop — if one finishes your remaining laps first, you get the RACE LOST screen with their name. Drive off the course (or off a ramp with no way back) and a red RETURN TO TRACK countdown appears — get back within 3 seconds or the car is placed back on the racing line at your last on-track spot, stopped and facing down the course.

  • Race HUD — position (P n/N), lap counter, live lap time and session best, top-center.
  • Checkpoints — every piece is a checkpoint; cutting the infield voids the lap with a toast.
  • Ghost lap — your best lap replays as a translucent ghost; toggle with G while driving. It's stored per track shape, so editing the course retires the old ghost.
  • Contact — cars collide: rear-end a rival to shunt them, side-swipe to knock them off line. They recover, and so can you.
  • Results — per-lap times with the best starred; if a rival finishes first you'll see RACE LOST.
  • Multiplayer racing — use Host race in the multiplayer menu: it checks the loaded level (objective Race, a start line, a car) before opening the room, and explains anything missing. One placed car is enough — on deploy the grid fills itself: every authored car lines up in a staggered two-abreast field, extra racers get an identical cloned car, and each player is auto-seated in their own (host takes pole). You see your rivals as their cars, live on track — not their characters — and anyone on foot again (exited, spectating) shows as their avatar as usual. Standings sync live and the first to finish wins on every screen. AI rivals sit multiplayer out — the humans are the field.

SystemsVehicle tuning — the deep dive

Any prop can be a car: select it → Object & selectionVehicle (drivable) → tick Drivable vehicle (this also makes the prop non-dynamic — the car system owns its physics). A units toggle switches every speed field and the in-game speedometer between km/h and mph.

How the handling actually works — three separate systems, not one "handling" number: Braking fires when your throttle opposes your direction of travel: you slow with real stopping distance (an ABS-like ease-off in the last couple of m/s) and only then does reverse engage — you can never snap from forward into reverse. Cornering grip (G) is the lateral force the tyres hold: your achievable turn rate shrinks as speed rises, so corners widen like a real car (understeer) — but steering never drops below 35% of what you ask, so it never "bricks". Flooring the throttle mid-corner spends tyre on acceleration instead of cornering (a traction circle). Grip is how fast your direction of travel chases your heading: low grip = the car slides and drifts; the handbrake cuts it to ~16% for deliberate slides; pushing past ~90% of the cornering limit steps the rear out progressively, and counter-steering recovers grip 1.4× faster.

Performance

ControlRange (default)What it does / how to use it
Top speed5–200 (16)Flat-out speed in your chosen units. ~36 km/h suits an arena runabout; 120+ needs a big arena and raised View distance.
Acceleration1–80 (18)How hard it pulls to top speed. Also scales braking force (below).
Turn rate °/s20–400 (120)How fast the car swings toward where you're steering. This is your requested rate — Cornering grip decides how much of it you get at speed.
Reverse2–120 (7)Reverse top speed. Engages only from a stop (braking always comes first).
Boost ×1–4 (1 = off)Hold Shift to multiply speed. With Boost time (0.5–15 s) and Cooldown (0–30 s). Flames on boost adds exhaust fire — size, density, position offsets (use Side for a single tailpipe) and colour; the core glows white-hot and cools toward your colour, so try blue for an afterburner.

Handling

ControlRange (default)What it does / how to use it
Grip1–12 (6)How hard the tyres bite. Lower = loose and drifty (slides in turns); higher = planted. Hold Space to handbrake-drift regardless.
Cornering grip (G)0.6–4 (2.2)The lateral G the tyres hold before the car pushes wide. Sports car ≈ 3, truck ≈ 1.2. This is the setting that decides how fast you can take a banked track curve.
Braking0.2–3 (1)Brake bite when pressing against your travel. 1 = normal, low = long lazy stops, high = race-car stoppers. The nose dives under braking.
Suspension0–2 (1)Body compression/rebound over kerbs, bumps and landings. 0 = rigid kart, 2 = soft off-roader.
Body lean0–2 (0.5)Roll in turns and dive under braking. Purely visual — lower it if the car feels like a boat.
Launch0–3 (1)How hard ramps throw the car. 0 = never leaves the ground (go-kart), raise it for big-air buggies. The nose follows the arc; suspension soaks the landing.

Fitting a model

ControlWhat it does / how to use it
Model facing °Rotate until the yellow arrow points out the front of your model — the car drives nose-first. Doesn't move the prop.
Pivot (m)The red dot marks where the car spins when steering. Slide it toward the nose (+) if the model's origin sits at the tail, so it turns around its centre. Center pivot on model computes it from the bounding box in one click. For the most natural feel, land the dot near the rear axle.
Ride height (±m)Trim if the model floats or sinks. 0 = auto-fit.
Hit areaThe orange outline is the collision footprint props/enemies/rivals react to — Hit width/height/length (0.3–3×) scale each axis, Offset X/Y/Z recenters it. Fit it to the visible bodywork so contact looks honest.
Enter radius (m)0.5–12 (2.5): how close you must be for the "press E to drive" prompt — measured to the model's footprint, not its centre, so big trucks work.
Keep rolling on exitBail out at speed and the car coasts on (on by default). Off = it stops with you.

Camera, lights, effects, wheels

ControlWhat it does / how to use it
Camera viewChase (third person) or Cockpit (driver POV); C flips while driving. Cockpit uses Seat forward/up/side to place your eyes inside the model. Camera back/up trim the chase distance (0 = auto-fit to model size).
Camera follows the carOn: the chase cam trails behind and re-centres when you stop moving the mouse (mouse still free-orbits). Off: a pure free orbit that stays where you point it. V flips it live.
HeadlightsH toggles forward spotlights: beam colour, brightness (0–20), range (4–120 m), spread/height/forward placement, and "Start on when you get in". At night in a day/night-cycle level they switch on automatically.
Brake lightsRed tail glow while braking or reversing — colour, size, spread, height, back offset.
Tyre smoke / Skid marks0–2 each: 1 = normal, 0 = off; raise for dusty surfaces, lower for clean tarmac.
Ram damage0–300 (50): damage to enemies/bots/rival players you plough into, scaling with speed. 0 disables vehicular mayhem.
Wheels (procedural)Spins + steers the model's wheel meshes by name — no animation clips needed. Auto-detect wheels guesses the wheel parts, the steered front pair and the spin axle from the model's named parts (you can still edit after). The Detected parts chips preview on hover — click to add to Wheels, Shift-click to mark as Front. Then Steer angle (0–60°) and Spin rate (negative if they roll backwards). If the model has no separate wheel parts, use the Animations rows instead to map drive-state clips (Idle/Forward/Backward/Turn left/Turn right).

SystemsSignals, locks & mechanisms

These three folds are RUMPUS ENGINE's wiring: Mechanism makes a prop move, Signals connect cause to effect, and Lock gates it all behind keys. Together they build doors, elevators, traps, switch puzzles and win conditions.

Mechanism (the “xa” system)

Enable Animated mechanism on a prop, then set what it does — Move X/Y/Z (m), Rotate X/Y/Z (°), Scale X/Y/Z, a Pivot offset, and Duration (s):

  • Playback: ⟳ Loop · ⇄ Ping-pong · → Once.
  • Trigger: Auto (runs on level start) · E Activate (player presses E) · Signals only (waits for a signal).
  • Waypoint path — add waypoints and the prop travels through them (overrides the Move offset): patrol platforms, cable cars, roaming hazards.

Signals

Making a prop usable with E is one checkbox now: Interactable (E) sits beside the Tag at the top of Object & selection. Tick it and the prop prompts Activate and fires its On E signals — no mechanism required. And a signal's target can simply be this (the first entry in the target drop-down): the prop the signal lives on, no tag needed. So "press E on the door, the door opens" is: Interactable ✓ + one signal On E → Toggle → this.

On the Signals fold, give props a tag, then add rules — when something happens to this prop, do something to a tagged target (or to this, the prop itself):

When…Meaning
On destroyedThis prop is broken (needs Physics & destruction, or Shootable — see below)
On hitA shot, a swing or a blast landed on it — it does not have to break. This is the one a shooting-range target uses: score every hit, and the plate never disappears. It fires on the killing blow too, so a range that scores per hit never silently drops the last one.
On EThe player activates it with E (needs Interactable)
On clickThe player clicks it — from up to 60 m away, no walking up to it. The point-and-click trigger; see Point & click.
On object placedA tagged object is set down touching it (contact plates, altars) — optionally only from a specific tag
On hit and On click carry a payload. Inside the rules they fire, four values describe what just happened: #x and #z (where it was), #hp (its health now) and #hpf (that as a fraction, 0–1). So “drop loot where it broke” is Spawn pickup at #here, and “at half health, switch phase” is a Branch on #hpf < 0.5.
Do…Effect on the target tag
Toggle / Open / CloseDrive the target's mechanism
Play animPlay a named animation clip on the target
UnlockRemove the target's lock
→ Logic eventPulse the Logic graph's matching On event nodes (no target needed) — the bridge from the physical world into your visual logic
Win levelMission complete (no target needed)
Play cutsceneRun a named cutscene (no target needed)
Set objectiveChange the objective banner text mid-run
Set checkpointDrop a respawn checkpoint here
Play soundPlay a sound URL

The world verbs

Everything above changes a prop or the UI. These change the world — and because they live in the same list, a prop signal and a Logic Do action node can both use them. None of them take a target tag; they take a place or a who.

Do…Effect
Spawn enemiesMake 1–20 enemies of any type (Grunt · Runner · Brute · Gunner · Sapper · Shieldbearer · Charger · BOSS) at a place. A squad scatters in a small ring instead of stacking on one point, and every one is un-buried and floor-snapped exactly like a wave spawn.
Spawn pickupDrop a live pickup pad — any kind the Pickups section offers, including a specific inventory item — at a place. It lands at that place's height, so a pickup asked for at a balcony prop is on the balcony.
Damage / HealBy an amount, to the player, all enemies, or the nearest enemy. Damage runs the normal hurt path (flash, shake, shield soak); healing never exceeds max health.
KillSame three targets, no amount. Killing an enemy runs the real death — coin drops, the kill feed, the ragdoll, and the graph's On enemy killed event. Killing the player runs the normal defeat flow, so “Respawn at checkpoint” still applies.
TeleportMove the player, all enemies or the nearest enemy to a place. The player arrives standing still (never mid-fall) and drops anything they were carrying; enemies land on the real floor and re-decide where to go.
Give item / Take itemPut an inventory item straight into the player's hands, or take it back — the quest reward, and the fuse that gets spent when it's used. Pick the item from a dropdown of everything the level defines; a count is optional.
Set player statBend one of five rules of the game: Move speed, Jump height, Gravity, Max health, Damage dealt. See below.
Play musicTake over the music track for this match — the boss theme when the door opens. A blank URL is deliberate silence. It never overwrites the level's own music setting, so a theme you played while testing can't end up saved into the level, and the next match starts on the level's track again.
Command enemiesTell all enemies or the nearest one what to do: Hunt the player · Patrol · Hold position · Alert them to a place (identical to hearing a gunshot there — they wake and converge) · Lose the player (they forget you and their search timers reset: the stealth reset) · Move their post to a place (reassign a guard; it replaces any authored patrol route). Every one of these drives state the AI already reads, so a commanded enemy behaves like an authored one from the very next frame.
Objective markerPoint an on-screen diamond at a tag, a place, me, start or #here, with a label ({var} interpolates) and a colour. Off screen it becomes an arrow clamped to the edge with the distance in metres — including when the target is behind you. Up to 8 at once; the same tag twice updates rather than adding a second. Stop pointing at… drops one, Clear all markers drops the lot, and a Deploy clears them. It tracks: a marker on a lift rides it.
Camera viewSwitch the camera mid-play and switch it back: First person · Third person · Top-down · Side-scroll · Fixed camera on a tag…. A fixed camera mounts on a tagged prop, follows the player by default (untick and it takes the prop’s own facing instead), and rides the prop if the prop moves. Tag several props the same and set cut every (s) and it becomes a camera bank that cuts between them — a security desk. It is an OVERRIDE, never a write: the level’s own authored view is untouched and a Deploy restores it.
Open/close a modalOpens or closes a named set of HUD widgets as a menu, optionally freezing the world. See Modals.
Show / Hide / Move / Destroy / Reset / Push propsThe runtime prop lifecycle, by tag. Hide is invisible AND intangible (an invisible wall is worse than no verb); Move preserves height above the ground, so a crate moved from a ledge to a valley lands on the valley floor; Destroy runs the real shatter, with debris and the prop’s own On destroyed signals; Reset brings a destroyed one back whole, or tops up a merely damaged one; Push is an impulse away from a place, scaled by each prop’s mass so one number moves a crate and a barrel the same amount. None of them edit the saved level.
Spawn prefabInstantiate a saved prefab at a place — a tycoon’s "buy → building appears", a buildable turret, a farming drop. Capped at 200 live spawned props; destroyed ones give the budget back.
Set prop valueA named number on a prop itself rather than on the level.

Every stat is a multiplier of what the level authored, which means ×1 always puts it back exactly — there's no hidden “original value” to lose track of. Move speed ×0.4 is a swamp, Gravity ×0.3 is the moon, Jump ×2 plus Gravity ×0.5 is a floaty platformer. Applying the same rule twice never compounds, so a repeating trigger can't slow you to a standstill. Max health is a multiple of the engine's baseline 100 (×1.5 = 150), and raising the ceiling doesn't secretly heal you. A stat springs back at the start of every match — and only the stats a rule actually touched are reset, so a +25 max HP perk keeps its bonus.

A “place” is a tag. Type or pick one and it resolves to the prop carrying it — the same naming system the rest of the signal system uses, so you point at something you can see and select in the viewport. Two names are built in: me (blank means the same thing) is wherever the player is standing, and start is the level's player start. A trigger volume answers to its own event name, so the zone that fires a rule can also be the spot it acts on — On event reachedVault → Spawn 4 Brutes at reachedVault. If several props share a tag, each use picks one at random, so “spawn at guardPost” scatters a patrol across all of them. A place nobody carries does nothing — the verb is skipped rather than firing at the world origin.

The advanced gates

  • Needs N different senders — the receiving prop only reacts once N different props have signalled it (the same sender firing twice counts once). Both pressure plates; all three generators.
  • Needs item — a rule can require the player to be carrying an inventory item, with an optional consume: “On E, if carrying the fuse, do Open — and spend the fuse.” A locked prop without the item shows a LOCKED toast naming what's missing.
  • On object placed extras — filter by a from tag (only the tagged object triggers it, blank = any physical prop), choose Touching it vs Inside it, and optionally consume the placed object (it vanishes when it lands — sacrificial offerings).

Locks & keys

The Lock fold requires a key (red / blue / gold / green) before E works on the prop, with optional Consume key on unlock. Keys are granted by key pickup pads (one-shot — they don't respawn), appear as HUD chips, and can carry a custom display name set on the pickup.

SystemsPoint & click — adventures, tycoons, RTS

Gameplay tab ▸ Player options · Object ▸ SignalsOn click

The mouse can reach the world. A prop can answer a click from across the room, the cursor and the crosshair both say what is clickable, and the player can be sent walking to wherever you click the floor. That is the whole toolkit behind a point-and-click adventure, a tycoon, an ARPG or an RTS — and none of it needs the Logic graph unless you want it.

The two switches

Both live on the Gameplay tab, in the Player options fold — and they are offered only in Top-down, Side-scroll, and in Third person once ARPG cursor aim is on. In first person the mouse is the camera, so the pair is not shown at all and a hint in its place says where it went.

SettingWhat it does
Free mouse cursorThe pointer is no longer captured. You get a real arrow you can move anywhere on screen, and clicking aims where the pointer is instead of where the camera looks. Required for anything point-and-click.
Click to moveClicking the floor walks the player there, routed around obstacles by the engine's own navigation. Only available with the free cursor on, because it needs a pointer to click the floor with. Any movement key takes control straight back.
You do not need the free cursor to use On click. In first person the crosshair is the pointer: clicking fires the ray through screen centre, and a ring appears around the reticle when it rests on something clickable. So a clickable world works in every view — the free cursor just changes how you aim at it.

How to: make a prop clickable

  1. Select the prop. Open Signals.
  2. + Add signal, and set when to On click.
  3. Pick a doToggle a door, → Logic event to run a rule, Open/close a modal to show a menu, anything in the verb table.
  4. Give the prop a Name (top of Object & selection). The name is what the player reads when they point at it, so “Vault Door” beats “box 14”.
  5. Press ▶ Play and point at it.

What the player gets, free, with no extra authoring:

  • The cursor becomes a hand over anything clickable (free-cursor views).
  • A ring appears around the crosshair when it rests on something clickable (first person). It is the same answer, drawn where you are actually aiming.
  • The prompt names itCLICK Vault Door — using the prop's Name. If you are standing close enough for an E prompt, that one wins, because the thing at arm's reach is the actionable one.

How to: click-to-move

  1. Player tab ▸ View & camera ▸ tick Free mouse cursor, then Click to move.
  2. Play, and click the floor.

A ring pings at the destination in your HUD accent colour and holds there while you walk, vanishing when you arrive. Click somewhere the player cannot route to and the ring pings red and does not hold — so a refused click never looks like a click the game ignored. Clicking something with an On click signal runs that signal instead of walking; a click is one thing or the other, never both.

Routing is the engine's own navigation, the same one the bots use — so the player walks around walls, up ramps and onto upper storeys rather than into them. If a route stops making progress (a door closed across it, a crate rolled into it) it is abandoned rather than pushed at forever.

How to: a working prize counter

The full loop — click a thing, a menu opens, a button spends a variable — in six steps:

  1. Place a prop. Name it Prize Counter.
  2. SignalsOn clickOpen/close a modalOpen… ▸ modal name shop, and tick freeze the world so the match stops while the menu is up.
  3. HUD tab ▸ + Widget ▸ kind Button. Label Buy a prize, in modal shop, fires event buy.
  4. Add a second widget, kind Text, in modal shop, label Tickets {tickets}.
  5. Gameplay tab ▸ Open logic graph. Add On event named buyChange variable tickets by -1.
  6. Play, click the counter, press the button.

The Preview dropdown on the HUD tab shows that modal's widgets on screen while you lay them out, so you are not authoring blind. It is a view, not a setting: it is never saved and never opens the modal in play, and show when is ignored inside it so nothing is invisible while you arrange it.

If a button does nothing, the Level check will tell you. A control that fires an event no On event node listens for is reported by name in Save ▸ Level check — as are a modal nothing opens, and a modal that opens onto no widgets.

SystemsVisual logic — the Logic graph

The signal system wires one cause to one effect. The Logic graph (Gameplay tab ▸ Logic graph ▸ Open logic graph) is the layer above it: a full-screen node canvas where you build real game logic — counters, timers, branches, variables, randomness, loops and reusable functions — without writing code. Drag the board to pan, wheel to zoom, drag nodes by their headers, drag an output port onto an input port to wire them, click a wire to remove it. Tag, event-name, animation-clip and sound fields are drop-downs: they list every tag your props and lights already carry (with a count), every event name declared anywhere, every clip name your placed models ship, and every sound URL the level already uses — pick from the list or type a brand-new value.

CategoryNodes
Events (cyan)On start · On event (named — fired by prop signals via → Logic event, by Send event, by a trigger volume, or by a line of dialogue) · Every X sec (optional fire limit) · On enemy killed · On enemy spots you · On enemy damaged · On wave start
Flow (yellow)Branch (compare two values with ==/!=/</≤/>/≥ — either side can be a number or a variable name) · Counter (an "each count" output plus a "target reached" output that auto-resets; reset pin) · Delay · Repeat (N passes, optional gap, #i is the loop index) · Random (up to four weighted outputs) · Only once (passes the first pulse, swallows the rest until reset) · Only once (reset pin)
State (green)Set variable (a value, or a random integer in a min–max range) · Change variable (+/−) · Math (var = A op B with + − × ÷ min max mod — either side can be a variable, so coins = coins × 2 works; ÷0 and mod 0 give 0, never NaN) · Expression (one line of arithmetic and comparisons — (hp / maxhp) * 100 in a single node instead of three; a fixed function set of abs, floor, ceil, round, sqrt, sign, min, max, clamp, lerp, rand, and no way to reach anything outside it) · Read game stat (copies a live value into a variable: player health, max health, ammo in the mag, ammo in reserve, score, credits, wave number, enemies alive, seconds elapsed, how many of an inventory item you hold, how many different items, and a tagged prop's x / y / z / distance) · List (an ordered collection: push, fill 1..N, draw, draw random, shuffle, remove, clear, length, contains, value at, and same order as — which is what turns a bag of tokens into a combination lock. A deck of cards is one fill 1..52) · Countdown (see above)
Actions (orange)Do action — every signal verb: toggle/open/close, play anim, unlock, cutscene, objective, checkpoint, sound, plus the world verbs (spawn enemies, spawn pickup, damage, heal, kill, teleport, give/take item, set player stat, play music, command enemies) · Show message (with live {variable} interpolation: SCORE {score}!) · Send event · Win level · Lose level

Reusable functions are the On event / Send event pair: build a chain once behind a named event and call it from anywhere — the calling chain continues after the call. A classic graph: On startSet score = 0; a pressure plate fires → Logic event "scored" → Change score +1Branch score ≥ 5Show messageWin level.

Enemy hooks

The AI had exactly one connection to the graph: On enemy killed. Two more entries close the loop.

NodeFires when
On enemy spots youAn enemy goes from oblivious to alerted — once per alert, not every frame it's hunting you. It covers every way that happens: seeing you, hearing gunfire, catching a blast, or a rule telling it to. It re-arms when the enemy gives up, so the next time it notices you it fires again.
On enemy damagedAn enemy takes a hit and survives it — a boss phase change at half health, a retreat, an alarm. A killing blow fires On enemy killed instead; one hit never fires both.

Neither carries which enemy it was, on purpose: pair them with Command enemies (above) and you have the whole classic loop in four nodes — On enemy spots you → Change alarm +1 → Command all enemies: Alert them to vaultDoor. A stealth game is the same loop plus Command enemies: Lose the player on the other side. Both cost nothing until you actually put one on the board.

Values that carry over

Normally every variable resets when a level starts — which quietly rules out anything with progress: a running coin total, a quest stage, a shortcut you unlocked. Under Gameplay ▸ Logic graph, below the Open button, every variable name in the level is listed with a tick box. Tick one and it survives into the next level of the campaign.

What happensWhen
The carried value is put back into the variableAt the start of every match, before On start runs — so your first node can already read it
The live value is carried forwardWhen the level is cleared, and when a Go to level doorway is taken
The value rewinds to what you walked in withOn a retry — the level was not cleared, so nothing was committed
Everything resets to zeroWhen you start the campaign from the top, or hit Clear in the panel

That asymmetry is on purpose: a player can never lose progress by dying, and can never farm a level by replaying the first half of it. A variable you tick but never write settles at 0 rather than nothing, so a Branch on it is never comparing against a blank.

The tick means “this room passes its value on” — it is not a gate on what arrives. Anything the campaign is already carrying lands in every room whether or not that room ticked it, so a room you forgot to tick cannot end a run. The panel lists those names unticked, and the carrying now: line under it says exactly what is being held.

Also keep them between sessions is a separate opt-in below the list. With it on, the carried values are written to the player's browser, so they can close the tab and come back to the same progress; with it off — the default — nothing is stored anywhere. The panel always shows what is being carried right now, with one button to throw it away.

The graph runs on the host (its world actions broadcast through the signal system, so multiplayer stays in sync — spawned enemies and pickups stream in the world snapshot, and a teleport, damage or heal aimed at “the player” reaches every teammate, as do given items, bent stats and a music change) and pauses while the editor is open — playtest to see it run. Variables and timers reset at every match start. A mis-wired infinite loop can't freeze the game: the graph stops for that frame and a toast tells you to add a Delay.

SystemsInterfaces — widgets & menus

HUD tab → Custom widgets (logic-driven)

Everything on screen that is not the engine's own HUD is built here. A widget is one element — some text, a bar, a countdown, a button, a picture. Widgets read your Logic variables and a Button fires a logic event back, so the HUD is a two-way surface, not a readout. Give several widgets the same modal name and they become a menu that opens and closes as one: a shop, an upgrade screen, a card hand, a pause-style panel of your own.

The five widget kinds

KindWhat it showsFields that matter
+ TextA line of text. Anything in curly braces is a live variable: SCORE {score}, {coins} coins · {lives} lives.label
+ TimerA number of seconds, formatted. Point it at the variable a Countdown node fills.value (the variable), format
+ BarA fill bar — value ÷ max. Max can be a plain number or another variable, so a bar can grow as well as drain.value, max
+ ButtonA real clickable button that fires a named logic event. This is what makes a shop or a menu possible at all.label, event
+ ImageA picture from a URL — a card face, a portrait, a panel frame, a logo. image URL, width/height, opacity

Every widget also has: anchor (nine screen positions) plus an offset in pixels, size, theme colour (untick to pick your own), panel (the plate behind it), show when, and in modal. The image URL field exists on every kind, not just Image — on the others it is a backdrop, so a Button can be a card face and a Bar can sit inside a frame you drew.

Show when takes a variable name. The widget is hidden while that variable is zero or unset, and appears the moment it is anything else. Leave it blank for “always”. So a Set variable node is all it takes to pop a banner, reveal a scoreboard at the halfway mark, or show a “PRESS E” prompt only when the player is holding the key.

Stacking — which widget covers which

Widgets draw in list order, last in front. Use ▼ back / ▲ front on a widget's card to restack. Put a panel frame or a card face at the back and the text and buttons over it.

An Image never blocks a Button's clicks. That is deliberate — art is art — but it means a picture drawn over a button hides a control that still works. If a click seems to land on nothing, check whether something is stacked over it.

Timer formats

Format65.43 seconds shows asUse it for
M:SS1:05Match clocks, round timers. The default.
seconds65sShort countdowns, “detonating in…”.
tenths65.4sA time trial anyone will compare.
hundredths65.43sA speedrun course where places are close.

Counting down

You do not need arithmetic for a timer. The Logic graph has a Countdown node (Flow category) with three modes:

StartBegin counting down into a variable, from sec seconds.
StopHalt it where it is. The variable keeps its value.
Add timePush more seconds onto a running countdown — a time-extend pickup.

The output is an ordinary logic variable, which is the whole point: a Timer widget shows it, Branch compares it, an expression reads it, and it stops while the game is paused or a cutscene is playing.

Step by step — a 60-second time trial.
  1. Logic tab → add On event, name it runStart.
  2. Add a Countdown node: mode Start, into left, sec 60. Wire On event → it.
  3. Add Branch: left 0. Wire it from an Every X sec node set to 1 second so it is checked each tick, and its true output into Do action → Lose level.
  4. HUD tab+ Timer, value left, format tenths, anchor top-centre.
  5. On your start-line prop: SignalsWhen contact→ Logic event named runStart.
Deploy, run through the start line, and the clock runs.

Modals — building a menu

Type a name into a widget's in modal field and it leaves the HUD and joins that menu. Every widget sharing the name opens and closes together, over a dimmed backdrop, with the mouse freed and the world no longer taking clicks. Nothing else has to be set up — the name is the menu.

Open and close it from the Logic graph: Do actionOpen/close a modal, then Open… or Close and the modal's name. A prop signal can do the same, so a shop counter you walk up to and press E on opens the shop.

ControlWhat it does
in modalThe menu this widget belongs to. Blank = an ordinary HUD widget, always on screen.
freeze the worldOn the Open… action. Stops the game while the panel is up — right for an upgrade screen between waves, wrong for a shop you want raided under fire.
PreviewUnder the widget list. Shows a chosen modal's widgets on screen so you can place and stack them. show when is ignored in preview, so nothing is invisible while you arrange it. It is a view, never saved, and never opens the modal in play.
Esc always closes a modal, so a player can never be locked inside one. Add your own close Button as well if the menu should have one — players look for it.
A modal nobody opens is invisible forever. Level check catches exactly that and tells you which modal has widgets but no node or signal naming it. Run it before you publish.
Step by step — a shop that sells a turret.
  1. HUD tab+ Button. Label TURRET — 50, event buyTurret, in modal shop.
  2. + Text, label COINS {coins}, in modal shop, anchored above it.
  3. + Button, label CLOSE, event shopClose, in modal shop.
  4. Set Preview to shop and drag the three into place.
  5. Logic tab: On event buyTurretBranch coins 50. On true: Change variable coins −50, then Do action → Spawn prefab at a tag you placed. On false: a Show message node reading “Not enough coins”.
  6. On event shopCloseDo action → Open/close a modalClose, shop.
  7. On the shop counter prop: SignalsWhen interactedOpen/close a modalOpen… shop.
That is a working economy: walk up, press E, spend, close.
Widgets and modals save with the level and reach every player in multiplayer — the host's numbers are the truth. A per-player variable (a name ending in @) shows each player their own number in the same widget, which is what a co-op shop needs.

SystemsCampaigns & doorways

Save tab → Campaign · Logic tab → Go to level

A big level does not have to be one file. Split it into rooms — a hub and four wings, a fairground and its booths, a house you walk through — build each as its own level, chain them into a campaign, and put a doorway where they meet. This is how Half-Life and Portal are built, and the pieces are already here.

Chaining the levels

Two doors to the same place: the Campaign menu in the top bar (desktop), or Save tab → Campaign. The menu lists your campaign's levels by name — click one to open it for editing — and everything in it is also in the panel. Build a room, press ➕ Add current level, build the next, add it too. Reorder with ▲/▼, remove with ✕. ▶ Play campaign runs them in order. Export campaign writes the whole sequence as one file and Import campaign reads it back — that is what you share.

Saving the level you are working on

Adding a level to the campaign, or opening one with Edit (or from the Campaign menu), attaches it: from that moment, plain Save (Ctrl+S) updates the campaign copy automatically — the save note says "campaign level updated too", the campaign panel shows an Editing banner, and the top bar reads CAMPAIGN: EDITING "…" the whole time. You never need a second save step: work, save, play.

Done detaches, and Save goes back to being just the browser save. Loading anything else — a library level, an import, a shared link, File → New — also detaches, so you can never overwrite a campaign level with something unrelated by accident.

Every room is a complete level. Its own win condition ends it and loads the next, so a linear campaign needs no logic at all. Doorways are for when you want to move between rooms in any order — a hub, a shortcut, a door you can walk back through.

Doorways — the Go to level node

Logic tab → Go to level (in Actions). Three fields:

FieldWhat it does
level #Which room to load, counting from 1 — the numbers you see in the Campaign list. The dropdown lists your campaign's own levels by name, so you can pick rather than count. It takes a variable name too (offered under the levels), so a graph can compute the destination — that is how a hub world sends you to a different wing each time.
arrive at tagA tag on a prop in the destination room. The player materialises there, facing the way that prop faces. Leave it blank and they arrive at that room's own player start.
keep gearTick it and weapons, ammo and health cross the threshold unchanged. Untick it and the destination's own loadout applies.

Worked example — a trigger that loads the next level

This is the whole thing, in the room you are leaving:

  1. Build both levels first. Save tab → CampaignAdd current level for each one. The Go to level field can only offer rooms that are already in that list.
  2. In the room you are leaving: World tab → ZonesTrigger+ Add trigger (here). Drag the blue dot to the doorway, set radius and height, leave when on Enters and who on Player.
  3. Type a name in fires — say newLevel. A trigger does nothing on its own; it just announces that name.
  4. Logic tab → add On event and type the same name, newLevel.
  5. Add Go to level and wire the event's to its input.
  6. Click level # and pick the room from the dropdown — it lists your campaign by name (1 → Intro, 2 → Level 2). You can also just type the number.
  7. Press Ctrl+S — while a campaign level is attached, Save updates the campaign copy too (the note says so). Then Play campaign.
It has to be a campaign run. Go to level is a doorway between rooms of one campaign, so plain Play has nowhere to go — the node reports that in Level check and nothing happens. Use Play campaign. And an empty level # says so in Level check too, rather than failing silently.
Which way is the marker facing? Rotate the arrival prop in the destination room and the player arrives looking that way — the prop's forward is the arrival facing. Point it into the room, not at the wall you just came through.
keep gear is the difference between a room split out of one level and a hub world. A corridor into the next room of the same building should keep it on: losing your shotgun at a doorway is a bug as far as the player is concerned. A hub that hands out a fresh loadout per wing wants it off.
The destination tag lives in the other level, so the field offers no autocomplete — there is nothing in this level to suggest. Type it carefully; a tag nothing answers to drops the player at the room's own start and reports it in Level check.

What crosses the threshold

CarriesHow
Weapons, ammo, healthOnly with keep gear ticked.
Logic variablesAlways, for names the room ticks under Values that carry over — plus anything the campaign is already carrying.
Inventory itemsAlways. Keys and quest items are the point of a multi-room level.
The checkpointCleared on the way out, so a player can never respawn into a room they have left.
Step by step — a door between two rooms.
  1. Build Room A. Place a prop where the player should arrive when they come back, and tag it fromHall. Save, then Save tab → ➕ Add current level.
  2. Build Room B. Place an arrival prop tagged fromLobby, rotated to face into the room. Save and add it too — it is level 2.
  3. Still in Room B: put a doorframe prop where the player walks back, tag it, and add a trigger zone across it (World tab → Zones → Trigger).
  4. Give that zone an event name, say toHall. Logic tab: On event toHallGo to level, level # 1, arrive at tag fromHall, keep gear ticked.
  5. Open Room A and do the mirror: a trigger at its doorway → Go to level 2, arrive at fromLobby, keep gear on.
  6. ▶ Play campaign and walk through. A short “Entering…” card covers the load, then you are standing at the marker.
Step by step — a hub with four wings. Build the hub as level 1 and each wing as 2–5. In the hub, put a tagged plinth at each doorway with a trigger zone in front of it, and wire each to Go to level with that wing's number and keep gear off so each wing issues its own kit. In each wing, one trigger at the exit goes back to level 1, arriving at a tag beside the door the player left by — so returning puts them where they expect, not at the hub's spawn. Tick a wingsDone variable to carry, add Change variable wingsDone +1 at each wing's exit, and a Branch in the hub can open the finale at 4.

Progress across sessions

Under the carry list: Also keep them between sessions writes the carried values into the player's browser, so they can close the tab and come back. Two more boxes appear under it once that is on — Carry the inventory too and Resume at the last checkpoint. Both are solo only, and finishing the game clears the checkpoint so the next run starts clean.

Doorways are solo and host-only. In co-op, a client does not follow the host through a door — build multiplayer levels as one room, or as a campaign whose rooms end on their own win conditions.

SystemsPickups & inventory

Pickup pads

Gameplay tab → Pickups. Toggle spawning, the base disc, and the bounce/rotate animation; then place pads with + Place ahead or edit each spot's kind, transform and (for items) which inventory item it grants. The kinds:

KindGrants
+Health+50 integrity
+Ammo / +GrenadeReserve ammo / a grenade
Rifle · SMG · Shotgun · Sniper · RocketThat weapon
2× Dmg · Speed · ShieldTimed power-up
Red / Blue / Gold / Green KeyThe matching key (one-shot; see Locks)
Inventory ItemA specific item from your catalog
does not respawn this run (a tick box per spot) stops a pad coming back after it is taken. Every kind but a key or an inventory item returns on a cooldown by default, which is right for a health pad in a corridor and wrong for the shotgun hidden at the end of a puzzle room. It is once per run, not once forever: the next Deploy puts it back, which is the same scope keys have always had. A key or an item pad shows the box ticked and greyed, because those never respawn anyway — hiding it would read as a bug.
A pad spawned by the graph (Do action → Spawn pickup) takes the same once tick, so a scripted drop can be one-shot too. The rule is written in one place, so an authored spot and a spawned pad can never disagree about what a kind means.

Inventory — the Use actions

Items defined under Inventory items land in the player's inventory (I): 3D objects open in a rotate/zoom inspector, journals open as text pages. Each item's Use action decides what the Use button does:

Use actionWhat happens
Not usablePure lore/collectible — inspect and carry only.
Unlock (acts as a key)Behaves as the chosen key colour for locked props — a story-flavoured alternative to the colored key pads ("Rusty Cellar Key").
Heal the playerRestores the set HP (1–999).
Refill all ammoTops up every weapon.
Place in the worldThe deep one: using it puts the item's model in the player's hands; G places it (and can pick it back up). The placed object carries its own signals — so placing the idol on the altar can open a door, win the level, or fire a cutscene. This is the machinery behind fetch-and-place puzzles.

Consumed on use (default on) spends the item; off makes it reusable. Journal items get a text page; 3D items get a model + scale (1 ≈ 2 m across in the inspector). In campaigns, inventory carries between levels.

Loot & coins

Loot sets what enemies and loot boxes drop. Coins (spawned on kills) are the in-run currency for the shop and weapon attachments.

SystemsObjectives & rules

The eight objectives

ObjectiveSettings & the fine print
EliminateClassic waves — Win after N waves (0 = endless), boss every N waves, Random or Pre-built spawns.
SurvivalSurvive seconds (10–999, default 120): hostiles spawn endlessly; outlast the countdown.
ExtractionThe beacon auto-places across the arena from your spawn. Hold seconds (1–30) inside Zone radius (1.5–10 m) — leaving lets the progress drift back down, so commit.
DefendHold the zone for a total of Hold seconds — the clock pauses while nobody stands in it, so you can rotate out to clear pressure, but the mission only advances while you hold.
DestroyBlow up every prop flagged 🎯 Objective target (Physics & destruction fold). They glow with a red beacon.
EscortA payload travels from your spawn to the delivery beacon — it only moves while a player stays within Escort radius. Step away and it stops.
PuzzleNo enemies ever spawn — you win via a Win level signal (a contact plate, an E-activated exit). Pairs with Start unarmed + flashlight for pure adventure.
RaceFirst to the lap count — full settings in Racing.

Rules that shape the run

  • Objective text — the goal banner (players re-read it with J; signals can rewrite it mid-run).
  • Respawn at checkpoint (solo) — death returns you to the last checkpoint instead of ending the run.
  • Wave mode — Random, or Pre-built from your spawn markers (optionally single-pass, no respawns); between-wave upgrade cards in solo.
  • Fall damage — on/off for player and AI, with safe speed and damage scaling. Ragdoll on death. Crushing props — heavy movers deal damage, with min speed.
  • Camera view — how players see your level: First person (the classic), Third-person, Top-down, or Side-scroller. Saved with the level, so it carries through share links, the community gallery and multiplayer.
    • Third-person — an over-the-shoulder chase camera that smoothly follows the player with damping (it eases after sprints, jumps and turns instead of being bolted rigid; aiming tightens it back to exact). Controls and aim stay first-person-style. Tune the framing and the Follow smoothing slider under Player tab → Third-person framing — smoothing is also a player preference, so it applies when anyone toggles third-person from the pause menu too.
    • Top-down — a fixed isometric-tilt camera follows the player; WASD moves on the map (screen-relative), and the mouse steers a cursor: your character faces it, shots hit whatever is under it, and grenades lob onto it (up to the grenade's throw-force range), twin-stick style. Cars keep their full handling — instant chase/racing levels. Camera distance sets the zoom (8–80).
    • Side-scroller — the camera locks to one side and players run along a single lane (pick east–west or north–south). A/D run, Space jumps, and the mouse aims anywhere within the plane (grenades arc to the cursor too). Players are held on the lane they deploy on, so build your level along it — ramps and stairs shine here.
    • Camera framing (build 1085) — both fixed views orbit the player, and every part of the orbit is yours:
      ControlWhat it does
      Camera distanceHow far back the camera orbits (top 8–80, side 6–60)
      RotateSwings the camera around the player. Top-down: full 360°, and WASD rotates with it so W is always up-screen. Side-scroller: ±60° for an angled 2.5D look — the player still runs along the lane.
      TiltAngle above the horizon. Top-down 15°–89° (89 is almost straight down, low is strongly isometric); side-scroller −30°–60°, so you can look down on the lane or up at it.
      HeightRaises or lowers what the camera is centred on. Camera and aim point move together, so the whole frame shifts vertically without changing the angle — handy for showing more headroom, or a pit below.
      RollTips the horizon up to ±30° for a dutch angle.
      Reset camera puts everything back to the mode's default. Levels built before build 1085 frame exactly as they always did — the old fixed angles are the defaults.
    • Seeing the camera while you build (build 1084) — top-down and side-scroller levels don't have a camera you place; it is worked out from the player start, the camera distance and (side only) the lane axis. So the editor draws it for you:
      • A blue box in the viewport is the camera, sitting exactly where the player's will be.
      • The blue rectangle in front of it is the frame — everything inside it is on screen at deploy, in your window's real aspect ratio. Drag the camera-distance slider and watch it grow and shrink.
      • In side-scroller levels a gold plane and ground line mark the lane. Players are locked to it, so anything you build off the plane is scenery they can never reach — this is the single easiest thing to get wrong, and now it is visible.
      • Live camera preview — a small window showing exactly what a player sees standing on the start point. It updates as you build, and you can drag it anywhere or close it. Also under Tools ▸ Play-camera preview.
      • Stand in it puts the editor's fly camera in the play camera's exact position and angle. Press F to go back to flying normally.
      Move the player start and everything follows it immediately. All of it is editor-only — none of it appears in play.
    • Cutscenes, turret seats and the PvP killcam keep their own cameras; the editor always flies free. In both fixed views your character model is visible and enemies aim at it as normal.
  • Hands / unarmed — start with fists only, optionally allow picking up weapons found in the level; the flashlight (brightness, cone, softness, range, colour).
  • Hit numbers — floating damage numbers with font size and hit/kill colours.
  • Multiplayer spawn area — confine MP spawns to a circle or drawn polygon.
  • End-screen messages — custom victory and defeat text.

SystemsCutscenes — shot by shot

Gameplay tab → Cutscenes. A cutscene is a list of camera shots played back-to-back with hard cuts; each shot flies through its own waypoints. Cutscene #1 is the intro (toggle Play intro flythrough on deploy); every additional cutscene is named and fired by a signal's Play cutscene action. Any key or tap skips playback.

Waypoints: fly the editor camera to a spot, click + Add camera waypoint (current view), repeat — 2+ points move the camera; a single point is a held shot. Per point: Go to (jump the editor view there), Set (overwrite with the current view), 👁 (aim the editor at your subject, then click to store a look-target), (clear it), (delete).

Shot controlRangeWhat it does / how to use it
Lens start / end14–120 mmDifferent values = a zoom across the shot. 35 → 85 pushes in on the subject; wide 18 for establishing vistas.
Rack focuson/offThe shot carries its own depth of field, separate from the world's: Focus start/end (the cyan disc is sharp at the start, the orange at the end), Blur start/end (0–4×), Focus band (how much depth stays sharp). A slow focus pull from foreground prop to distant door is pure cinema. (DoF is off on mobile.)
Duration1–120 sThe move itself, one-way.
Hold start / end0–10 sFreezes the framing before the move starts (establish) and after it ends (settle). Total shot = hold + duration + hold.
Dutch start / end±60°Tilts the horizon. Equal values hold the tilt; different values roll the camera across the shot — unease on demand.
FramingAim at player start (or a per-point 👁 target) vs Look along path (a fly-through that looks where it's going).
Motion / PathSmooth (ease in+out) / Constant / Ease in / Ease out, on a Linear path or a Smooth curve (needs 3+ waypoints — it curves through them at constant speed).
Cutscene audioURLA one-shot track (voiceover, sting) that starts with the cutscene and stops when it ends or is skipped. Searchable on Freesound; the file must allow CORS.

▶ Cutscene previews all shots, ▶ This shot just one, and the camera preview window shows live framing while you scrub. Show character at the player start puts your avatar in frame for intros.

SystemsMultiplayer

Peer-to-peer over WebRTC — no accounts, no servers to rent. One player hosts and shares the 5-character room code (or joiners pick from the Open games list); everyone else joins, and the host's level transfers automatically — including custom models and sounds. While a host waits in the pre-game lobby, the room is listed in everyone's Open games list automatically (a tiny lobby directory on rumpusengine.com) and drops off the moment the match starts or the host leaves.

Modes — the actual rules

ModeWin condition
CO-OPWaves and objectives vs the AI, together — including multiplayer racing on race levels (standings sync live; first to finish wins on every screen)
1 v 1 DUELFirst to 5 kills. No bots allowed; the editor is locked during a duel.
FREE-FOR-ALLEveryone vs everyone — first player to the kill target takes it
TEAM DEATHMATCHRed vs Blue, no friendly fire — first team total to the kill target
KING OF THE HILLScored by holding the zone, not kills — capture accrues points; first to the target wins. Bots actually play it: they prioritize capturing an unowned point over chasing fights.

Bot difficulty — what the presets actually change

PresetSpeedAim accuracyHPEngage rangeFeel
Recruit62%34%, wide spray8038 mWanders, misses, dies — a warm-up
Regular85%60%10052 mAn honest opponent
Veteran100%78%, tight12060 mPunishes open ground
Elite112%90%, laser15070 mFaster than you and barely misses — bring cover

PvP hosts pick bot count (0–7) and difficulty when hosting, or Fill with bots from the lobby. Bots fight like players now: they carry visible weapons, throw grenades (including flushing you out of cover), duck behind cover to reload, and wear random characters from the level's roster so no two look alike.

Match rules — when hosting, the host can restrict which weapons are allowed (melee always stays in) and set starting grenades (0–6) for everyone; the rules reach every joiner and bot automatically.

The lobby is a proper pre-game screen: a live 3D character select (models rotate, colours preview, CHARACTERS and COLORS read as separate groups), a MATCH INFO panel, rotating tips — and creators can attach a lobby backdrop image to a level (Save tab ▸ Title screen ▸ Multiplayer lobby backdrop) that every player sees, softly blurred, behind the lobby. Joiners watching the level transfer see a live LOADING WORLD % instead of a frozen screen. Matches end with a podium ceremony — standings, medals, and an MVP callout in team modes.

What syncs: player movement and state, enemies, kill credit, coins and pickups, prop animations and mechanisms, unlocks and keys, objective progress, race standings, chat, and the host's custom HUD/sounds.

SystemsSaving & sharing

  • Browser save — one save slot plus autosave while editing.
  • .rumpus export/import — the level (or a whole campaign) as a file. Everything serializes: props, track, vehicle tuning, rules, cutscenes, HUD, and the asset-credit list. The file is plain JSON inside, and old .json exports import forever.
  • Share link — the entire level compressed into a URL. Anyone who opens it plays it instantly. Models re-download from Poly Pizza / Sketchfab on the recipient's machine (Sketchfab models need the recipient's own free token).
  • Challenge links — from the end screen, share the level plus your score to beat.
  • Campaigns — chain levels with carry-over loadout and inventory; share as one file.
  • Credits — every searched model, texture, HDRI and sound is attributed automatically and travels with the level; the Credits screen shows the per-level list.

The community library

Community levels on the home menu is a gallery of player-built levels hosted alongside the game — browse, then Play one or Open in editor to see how it's built (and remix it; loading is undoable).

To publish your own: editor → Save tabSubmit to community library. That grabs a screenshot of your current view as the gallery thumbnail, asks for a level name and your author name, and sends the level straight in for review — no account of any kind needed. Once it's approved it appears in everyone's gallery, credited to you. (If the submission server can't be reached, the game falls back to the old GitHub submission form, which needs a free GitHub account.) Levels that use Sketchfab models get a needs Sketchfab token badge, since those download with each player's own free token.

ExtrasLevel check — the panel that reads your level back

Save tab, bottom: ⚠ Level check — N things worth a look (saving still works)

It is not a validator and it never blocks anything. It is the engine telling you what it can already see about your level — the mistakes that are invisible while you are building because everything works on your machine, with your files, in the state you happen to have left it in. Run it before you publish and before you share a link. It also runs automatically when you press Publish.

What it looks for

KindWhat it catches
AssetsA model URL that failed to load (it shows the tail of the URL, because Poly Pizza links differ only there). Models that are local to this device — they work for you and load for nobody else. Sketchfab models with no recorded attribution, which is a licensing exposure.
PrivacyEvery third-party host your level fetches from. Opening a shared level hands the player's IP to those hosts, and this is the only place that fact is visible. Upload the files to your own game to close it.
WinnabilityA Destroy objective with nothing it can finish on, or targets marked but unbreakable. A Puzzle with no Win level or Go to level anywhere — nothing else ends one. A Race with no Start-line piece, so the lap counter never arms.
WiringA signal targeting a tag no prop carries. A contact filter on a tag nothing has. A signal or node naming a cutscene that does not exist. A signals-only mechanism nothing targets. A modal with widgets that nothing opens. A logic event that is fired and heard by nothing. Locks whose key has no pickup. Pickups turned off with spots placed.
BudgetsTexture memory (GPU, not download size), triangles per frame, any single model over the optimizer's budget, the light count, and how many lights cast shadows. See Making a big level run well.
RenderingWhen nothing is antialiasing the frame and why — WebGL 1, depth of field, or post-processing off — and when the world is being drawn below native resolution. These explain "why does it look jagged on my machine" without you having to guess.
Last runAnything the Logic graph failed at while you were playing — a verb aimed at a tag nothing answers to, a value it could not read. The graph runs during play and this panel is read in the editor, so it is a play-time log you read afterwards.
Rows that name a specific prop are clickable. Pressing the arrow selects that prop, frames it, and switches to the right tab — "a signal targets tag 'vaultDoor', but no prop carries it" is a task rather than a scolding. Rows about the level as a whole have nothing to point at and stay plain, so a dead click never happens.
It stays quiet when there is nothing to say. A panel that always complains is a panel nobody reads, so an empty check is real information: this level has none of the problems the engine knows how to look for.

ExtrasRecipes — things built end to end

Each of these is a complete thing you can build in one sitting, using nothing that is not in this manual. They are written as sequences to follow, not as ideas to take away.

Building a shooting range

Plates that score when you hit them, never disappear, and reset on demand. This is the recipe the engine's own 🎯 Shootable target flag exists for.

  1. Build the plate. Add a box, scale it flat and stand it up. Open Object & selectionPhysics & destruction and tick 🎯 Shootable target. Do not tick Dynamic — the plate should stay bolted where you put it.
  2. Make it score, not shatter. In the same fold, untick Breakable. It now takes hits forever: the flash, the sound and the signal all still fire, it just never breaks.
  3. Tag it. Give it the tag plate1. Duplicate it twice along the booth and tag the copies plate2 and plate3.
  4. Wire the hit. On each plate: Signals+ Add signalWhen hit→ Logic event named plateHit.
  5. Count it. Logic tab → On event plateHitChange variable score +1.
  6. Show the score. Either a HUD widget (+ Text, label SCORE {score}) or a Sign on the back wall reading SCORE {score}. The sign is the nicer one for a fairground.
  7. Add a reset. Place a lever prop, tick Interactable, and give it a signal: When E pressedReset props, tag plate1. Repeat for the others, or tag all three plate and use one signal — a tag names a set.
Why untick Breakable? Because the label means “ever destroyed”, not “ever damaged”. A plate that shatters on the third hit stops being a range after three shots. If you want a plate that breaks, leave it on and use Reset props to bring it back between rounds.
Make it a timed round. Add a start line: a trigger zone whose event name starts an On event chain that starts a Countdown into left for 30 seconds, sets score to 0, and shows a Timer widget. A Branch on left ≤ 0 fires a Show message node reading Time! You hit {score}.

Building a movement course

An obstacle run that teaches its own verbs. Every switch below is on the World tab under Movement.

  1. Turn the verbs on. Set Air jumps to 1 (a double jump), Wall jump to about 14, and Air dash to about 22. Leave Tap hop at 0.5 so a short press gives a short hop.
  2. Teach them in order. Build the course in four stretches, each of which can only be crossed with one verb: a gap too wide for one jump (air jump), a chimney of two facing walls (wall jump), a long flat gap with no wall (air dash), and a low ceiling you have to tap-hop under.
  3. Sign each stretch. A Sign at the entrance to each — “Jump again in mid-air”, “Jump off the wall”. Nobody reads a manual; everybody reads a sign in front of them.
  4. Add checkpoints. A trigger zone at each stretch's start, each firing its own event name, and an On eventDo actionSet checkpoint for each. Falling then costs seconds, not the whole run.
  5. Time it. Exactly the timed round above, with the format set to hundredths so two runs can be compared.
Build the gaps, then walk them. A jump that looks right is often half a metre out — Deploy, run it, come back and nudge. The play-from-here button drops you at the editor camera so you can retest one gap without running the course.

A room with someone in it

  1. Import or place a character prop, and open Dialogue (NPC). Give it a Name and three lines.
  2. Tick Interactable so the player gets a prompt.
  3. In a dialogue line, write {set metGuard = 1} — the conversation now leaves a mark on the world.
  4. Put a locked door across the exit: on the door prop, SignalsWhen E pressedOpen, and set the needs count beside the Tag box (“different sender(s) before it reacts”) if it should wait on more than one thing.
  5. Logic tab: On event from the guard's last line → Do actionOpen, tag the door.
  6. Under Values that carry over, tick metGuard so the next room knows.

Stitching booths into a fairground

Once each booth works on its own, a campaign turns them into a place.

  1. Save each booth as its own level and add them to the campaign in order — the hub first.
  2. In the hub, put a tagged plinth at each booth's entrance and a trigger zone in front of it, wired to Go to level with that booth's number and keep gear on.
  3. In each booth, one trigger at the exit goes back to level 1, arriving at a tag beside the door the player came out of.
  4. Tick a booths variable to carry, add Change variable booths +1 when each booth is completed, and a Branch in the hub opens the finale at your booth count.
  5. Put a Text widget reading {booths} / 4 booths cleared in the hub so the player always knows where they are.
Doorways are solo. If the fairground should be co-op, keep it as one level and use trigger zones to move the player between areas instead.

ExtrasTips & troubleshooting

Using a big imported model as a whole level? (build 1089) The collision shape for an imported model is built by voxelising it into columns, so doorways and archways stay passable. Before build 1089 that builder gave up on anything over 200,000 triangles and fell back to one solid box per mesh — on architecture, where a single mesh is a whole building, that made every building a solid block. Enemies were pushed out of them constantly while the player walked through unaffected (the player's movement samples the real mesh and steps out of over-sized boxes; the enemy resolve did not). The builder now sizes itself to the model and handles level-scale geometry, and enemies get the same step allowance the player has. If you built a level on an older build and enemies stuck in mid-air, just re-open and re-save it.
  • Sketchfab search says it needs a token — it's a free API key: sketchfab.com → Settings → Password & API. Paste it once in any search box; every other box switches to “Token saved · change”.
  • A shared level is missing models — Sketchfab downloads require each player's own token; Poly Pizza models need none. Prefer Poly Pizza for levels you plan to share widely.
  • The game looks out of date — hard-refresh (Ctrl+Shift+R) and check the build number bottom-left of the home menu.
  • Performance dips — post-FX sheds passes automatically under load, but the biggest wins are yours: fewer point lights, smaller textures, fewer high-poly Sketchfab models. Adaptive resolution (pause menu) trades sharpness for frame rate on sustained drops — turn it off if you'd rather keep full resolution and accept the dips.
  • Edges look jagged / aliased — check Adaptive resolution in the pause menu: when the frame rate struggles it lowers the render resolution, which reads as shimmer on edges; untick it for full sharpness. (Since build 872, Visual effects keeps proper antialiasing — older builds lost it whenever effects were on.)
  • My race rivals won't spawn — rivals need a closed track loop (use Close loop) and a placed drivable vehicle to clone. The Save tab's issues panel calls this out.
  • A mechanism won't fire — check its Trigger: Signals only waits for a signal; E Activate may be gated by a Lock. The signal's target tag must match exactly.
  • I can't find a setting — sections remember their collapsed state; expand the section headers. Selection folds (Vehicle, Signals…) only appear with a prop selected on the Build tab.

What’s new (builds 1090–1253)

The manual above covers the fundamentals; everything below shipped after it was written. Grouped by what you were probably trying to do. A complete control-by-control reference lives in docs/REFERENCE.md in the project repository.

Editing faster

Your own assets

Looking better

Deeper game rules

Feel & combat

Multiplayer & sharing

What’s new (builds 1254–1490)

The chapters above have been rewritten to cover all of this in full. This is the index.

Interfaces you build yourself

Point & click, and new ways to move

Props that behave

Rooms, paths and bigger levels

Enemies with sides

Comfort & feel

Rendering