Skip to content

Commands

Every command a HammerForge surface can run, from HFCommandRegistry. A key is the default; the shortcut dialog (? on the toolbar) changes it. Needs is what the selection must hold for the palette, a menu or a key to run it.

This page is written by tools/gen_command_reference.gd. Do not edit it by hand: change the registry and run godot --headless -s res://tools/gen_command_reference.gd --path ..

Workflow

Command Key Needs Palette What it does
Toggle Solid / Cut (toggle_operation) Q - yes Switch the next brush you draw between Solid and Cut.
Toggle Paint Mode (toggle_paint_mode) Shift+P - yes Turn floor Paint mode on or off.
Quick Play (quick_play) Ctrl+Enter a level yes Bake the level and run it to test.
Validate Level (validate_level) Ctrl+Shift+Enter a level yes Check the level for problems and list them.
Compare with File (compare_level) none a level yes Show what changed since another .hflevel, outlined in the viewport and listed in the Console.
End Compare (end_compare) none - yes Take a compare's outlines off the viewport.
Repeat Last Command (repeat_last_command) none a level yes Run the last command again on the current selection, with the same settings.
Repeat Run (repeat_run) none a level yes Play the commands, moves and turns made since the selection last changed by hand again, on the current selection, as one undo step.
Clear Run (clear_run) none a level yes Forget the run Repeat Run plays, so the next command starts a new one.
Command Line (command_line) Shift+; - yes Type a command and its values, such as hollow 0.125, on a line over the viewport.
Run Command Script (run_command_script) none a level yes Run a text file of commands, one a line, each its own undo step.
Convert Entity Definitions to JSON (convert_entity_definitions) none a level yes Write the entity classes the level reads from an FGD as an entities.json beside it, to edit them in that form.
Cycle I/O Wires (cycle_io_wires) none - yes Step the I/O wires through none, all, the selection's chain and its own.

Tools

Command Key Needs Palette What it does
Draw (tool_draw) D - yes Switch to Draw, which makes brushes with two clicks.
Select (tool_select) S - yes Switch to Select, which picks brushes and entities.
Extrude Up (tool_extrude_up) U - yes Switch to Extrude Up: drag a face to grow a brush out of it.
Extrude Up (alt) (tool_extrude) E - yes Switch to Extrude, outside Paint and Vertex modes: up, or down when its Direction says so.
Extrude Down (tool_extrude_down) J - yes Switch to Extrude Down: drag a face to push a cut into it.
Extrude Down (alt) (tool_extrude_down_alt) Shift+E - yes Switch to Extrude Down, outside Paint and Vertex modes.
Clip Tool (tool_clip) C - yes Start the Clip tool, which cuts the selected brushes along a plane you place.
Polygon Tool (tool_polygon) P - yes Start the Polygon tool: click an outline on the ground, then drag its height.
Path Tool (tool_path) ; - yes Start the Path tool, which builds a corridor of brushes along the points you click.
Hull Tool (tool_hull) none - yes Start the Hull tool: click points, or a face's corners, and Enter makes one brush around them.
Shear Tool (tool_shear) none - yes Start the Shear tool: drag a handle on a side of the selection's box to lean everything between.
Decal Tool (tool_decal) N - yes Start the Decal tool, which places a decal on the surface you click.
Repeat Last Brush (repeat_brush) Shift+D a level yes Arm a stamp of the brush the last Draw made; each click places one.
Place Entity Here (place_entity_here) none a level no Place an entity on the surface under the cursor, standing on it.
Apply Last Texture (apply_last_texture) Shift+T 1 brush or faces, a level yes Give the selection the material the Texture Picker last sampled.
Apply Picked Look (apply_picked_look) Alt+T a level yes Give the selected faces the picked face's material and alignment.
Replace Material... (replace_material) none a level yes Swap one material for another on every face that wears it.
Apply Favorite 1 (apply_favorite_1) Alt+1 1 brush or faces, a level yes Give the selected faces or brushes favorite 1 from the context toolbar.
Apply Favorite 2 (apply_favorite_2) Alt+2 1 brush or faces, a level yes Give the selected faces or brushes favorite 2 from the context toolbar.
Apply Favorite 3 (apply_favorite_3) Alt+3 1 brush or faces, a level yes Give the selected faces or brushes favorite 3 from the context toolbar.
Apply Favorite 4 (apply_favorite_4) Alt+4 1 brush or faces, a level yes Give the selected faces or brushes favorite 4 from the context toolbar.
Apply Favorite 5 (apply_favorite_5) Alt+5 1 brush or faces, a level yes Give the selected faces or brushes favorite 5 from the context toolbar.
Apply Favorite 6 (apply_favorite_6) Alt+6 1 brush or faces, a level yes Give the selected faces or brushes favorite 6 from the context toolbar.
Apply Favorite 7 (apply_favorite_7) Alt+7 1 brush or faces, a level yes Give the selected faces or brushes favorite 7 from the context toolbar.
Apply Favorite 8 (apply_favorite_8) Alt+8 1 brush or faces, a level yes Give the selected faces or brushes favorite 8 from the context toolbar.
Apply Favorite 9 (apply_favorite_9) Alt+9 1 brush or faces, a level yes Give the selected faces or brushes favorite 9 from the context toolbar.
Texture Gizmo (texture_gizmo) none - no Show or hide the texture gizmo, which slides, stretches and turns a face's texture by dragging.
Vertex Edit (vertex_edit) V 1 brush, a level yes Turn Vertex mode on or off, to move the selected brushes' corners and edges.
Edge Mode (vertex_edge_mode) E a level yes In Vertex mode, switch between picking corners and edges.
Merge Vertices (vertex_merge) Ctrl+W 1 brush, a level yes Merge the selected vertices into one at their middle.
Split Edge (vertex_split_edge) Ctrl+E 1 brush, a level yes Split the selected edge at its middle.
Snap Vertices to Grid (vertex_snap_to_grid) Ctrl+B 1 brush, a level yes Move the selected vertices to their nearest grid points.
Scale Vertices... (vertex_scale) none 1 brush, a level yes Scale the selected vertices by typed factors, about their middle or the picked pivot.
Texture Picker (texture_picker) T a level yes Sample a face's material and its whole look, for Apply Last Texture and Apply Picked Look.
Measure (measure) M - yes Start the Measure tool, which draws rulers between points.
Context Menu (context_menu) Space a level yes Open the context menu at the cursor.
Radial Menu (radial_menu) ` - yes Open the radial menu, when Power-user overlays are on.
Operation Replay Timeline (toggle_operation_replay) Ctrl+Shift+T - yes Show or hide the operation replay timeline, when Power-user overlays are on.

Editing

Command Key Needs Palette What it does
Extrude Up (extrude_up) none - no Switch to Extrude Up: drag a face to grow a brush out of it.
Extrude Down (extrude_down) none - no Switch to Extrude Down: drag a face to push a cut into it.
Hollow (hollow) Ctrl+H 1 brush, a level yes Shell the selected brush into walls of the set thickness, after a preview.
Clip (clip) Shift+X 1 brush, a level yes Split the selected brush in two across its middle, after a preview.
Sweep Faces (sweep_faces) none a level yes Carry the faces picked in Face Select along a straight run, an arc or an S bend, as a run of brushes.
Clip to Face Plane (clip_to_face) Shift+Alt+X a level yes Cut the selected brushes along the plane of the face picked in Face Select.
Create Structure (create_arch) Ctrl+Shift+A a level yes Open the structure builder: stairs, arches, domes and the rest.
Update Structure (update_structure) none a level no Rebuild the selected structure from the settings in its section.
Detach Structure (detach_structure) none a level no Make the selected structure's pieces plain brushes, so an Update no longer rebuilds them.
Run Trim Along Faces (run_trim_along_faces) Shift+Alt+T a level yes Run a skirting or cornice along the wall faces picked in Face Select.
Re-pick Trim Run (repick_trim_run) none a level no Move the selected trim run onto the wall faces picked in Face Select.
Carve (carve) Ctrl+Shift+R 1 brush, a level yes Cut the selected brush out of every brush it overlaps, after a preview.
Merge Brushes (merge) Ctrl+Shift+M 2 brushes, a level yes Join the selected brushes into one brush.
Hull of Selection (hull) none 2 brushes, a level yes Replace the selected brushes with one brush around them all, touching or not.
Intersect (intersect) Ctrl+Shift+I 2 brushes, a level yes Keep only the volume the selected brushes share.
Adjust Last (adjust_last) none a level yes Show the settings the last command ran with, to change them and make its step again.
Duplicate Array (duplicate_array) none a level no Copies of the selected brushes in a line, each a step further on.
Radial Array (radial_array) none a level no Copies of the selected brushes turned in steps about an axis, rising as they go.
Grid Array (grid_array) none a level no Copies of the selected brushes in rows, columns and layers.
Convert to Brushes (convert_to_brushes) none no mix of HammerForge and Godot nodes, a level no Make the selected convex mesh or CSG node a brush where it stands.
Duplicate (duplicate) Ctrl+D 1 item, a level yes Copy the selected brushes and entities in place.
Copy (copy) Ctrl+C 1 item, a level yes Put the selection on the clipboard.
Paste (paste) Ctrl+V nothing, a level yes Place what is on the clipboard where it was copied from, or .map text copied since at the cursor.
Paste at Cursor (paste_at_cursor) Ctrl+Alt+V nothing, a level yes Place what is on the clipboard standing on the point under the cursor.
Delete (delete) Del 1 item, a level yes Delete the selected brushes and entities.
Group (group) Ctrl+G 2 items, a level yes Group the selection under a name, so a click picks it all. Whole groups go in as groups.
Ungroup (ungroup) Ctrl+U 1 item, a level yes Take the selected groups apart one level.
Open Group (open_group) none 1 item, a level yes Edit the selected group's members one at a time, with the rest of the level faded. Escape closes it.
Close Group (close_group) none a level yes Close the open group, one level, and select it.
Add to Group (add_to_group) none 1 item, a level yes Put the selection in the group picked in the Groups list, or the open one, groups as groups.
Remove from Group (remove_from_group) none 1 item, a level yes Take the selection out of the group picked in the Groups list, or the open one, and leave the rest of it.
Rename Group (rename_group) none a level yes Give the selected group, or the open one, a new name.
Make Brush Entity (make_brush_entity) none 1 brush, a level no Tie the selected brushes to a brush entity class, such as a trigger or a door.
Back to World (back_to_world) none 1 brush, a level no Untie the selected brushes from their brush entity, so they are plain world brushes.
Add to Visgroup (add_to_visgroup) none 1 item, a level no Add the selected brushes and entities to a visgroup.
New Visgroup (new_visgroup) none 1 item, a level no Make a new visgroup holding the selected brushes and entities.
Move to Floor (move_to_floor) Ctrl+Shift+F 1 brush, a level yes Drop the selection onto the nearest surface below it.
Move to Ceiling (move_to_ceiling) Ctrl+Shift+C 1 brush, a level yes Lift the selection to the nearest surface above it.
Shape Box (shape_box) none - no Draw boxes from now on.
Shape Cylinder (shape_cylinder) none - no Draw cylinders from now on.
Shape Sphere (shape_sphere) none - no Draw spheres from now on.
Shape Cone (shape_cone) none - no Draw cones from now on.
Justify Fit (justify_fit) none 1 brush or faces yes Stretch the texture to fit the selected faces.
Justify Center (justify_center) none 1 brush or faces no Centre the texture on the selected faces.
Justify Left (justify_left) none 1 brush or faces no Line the texture's left edge up with the faces' left edge.
Justify Right (justify_right) none 1 brush or faces no Line the texture's right edge up with the faces' right edge.
Justify Top (justify_top) none 1 brush or faces no Line the texture's top edge up with the faces' top edge.
Justify Bottom (justify_bottom) none 1 brush or faces no Line the texture's bottom edge up with the faces' bottom edge.
Justify Fit U (justify_fit_u) none 1 brush or faces yes Stretch the texture across the selected faces' width only.
Justify Fit V (justify_fit_v) none 1 brush or faces yes Stretch the texture across the selected faces' height only.
UV Flip U (uv_flip_u) none 1 brush or faces yes Flip the texture left to right on the selected faces.
UV Flip V (uv_flip_v) none 1 brush or faces yes Flip the texture top to bottom on the selected faces.
Align Texture to Edge (align_texture_to_edge) none 1 brush or faces yes Turn the texture to run along an edge of each selected face, the next edge each time.
Fit Texture Repeats (fit_texture_repeats) none 1 brush or faces yes Show the Paint tab's count of whole repeats across the selected faces.
Fit Trim Strip (fit_texture_strip) none 1 brush or faces yes Fit one strip of a trim sheet, as the Paint tab's Strip sets it, to the selected faces.
UV Rotate 90 (uv_rotate_90) none 1 brush or faces yes Turn the texture a quarter turn on the selected faces.
Align to Face (uv_align_face) none 1 brush or faces yes Lay the texture along each selected face's own plane.
Align to World (uv_align_world) none 1 brush or faces yes Lay the texture on the world's axes, so neighbouring faces line up.
Link Faces (uv_link) none 1 brush or faces yes Make the selected faces one surface that shares one texture mapping.
Unlink Faces (uv_unlink) none 1 brush or faces yes Give the selected faces their own texture mapping again.
Wrap Texture (uv_wrap) none a level yes Carry the selected face's texture over an edge onto the next face you click.
Apply to Brush (apply_to_brush) none 1 brush or faces yes Give every face of the selected brushes the material selected in the browser.
Entity I/O (entity_io) none 1 item no Open the Entities tab, where outputs and their targets are wired.
Entity Props (entity_props) none 1 item no Open the Entities tab, where the selected entity's properties are edited.
Highlight Connected (highlight_connected) none 1 item no Pulse every entity wired to the selected one.
Vertex Submode (vertex_submode) none 1 brush no In Vertex mode, pick corners.
Edge Submode (edge_submode) none 1 brush no In Vertex mode, pick edges.
Vertex Split (vertex_split) none 1 brush no Split the selected edge at its middle.
Vertex Clip Convex (vertex_clip_convex) none 1 brush, a level no Rebuild each brush with vertices selected from its convex hull, when it is no longer convex.
Vertex Exit (vertex_exit) none - no Leave Vertex mode.
Save Selection as Prefab (quick_save_prefab) Ctrl+Shift+P 1 item yes Save the selected brushes and entities as a prefab.
Quick Save Linked Prefab (quick_save_linked_prefab) none 1 item no Save the selection as a prefab and make it a linked copy of the file.
Cycle Prefab Variant (cycle_variant) Ctrl+Shift+V 1 item yes Switch the selected prefab copy to its next variant.
Push to Source (push_to_source) none 1 item no Write the selected linked copy's changes back to its prefab file.
Unlink Prefab Copy (unlink_prefab_copy) none 1 item, a level yes Cut the selected copy's link to its prefab, keeping what it is.
Discard Prefab Changes (discard_prefab_changes) none 1 item, a level yes Rebuild the selected linked copy from its prefab, dropping its changes.
Propagate Prefab (propagate_prefab) none 1 item no Bring every linked copy of the selected prefab up to date with its file.
Place Prefab (place_prefab) none a level no Place the prefab chosen in the library at the cursor.
Surface Paint (surface_paint) none - no Turn floor Paint mode on.
Grid Decrease (grid_decrease) [ a level yes Halve the grid step.
Grid Increase (grid_increase) ] a level yes Double the grid step.
Grid Up (grid_up) Alt+PgUp a level yes Raise the drawing plane one grid step.
Grid Down (grid_down) Alt+PgDn a level yes Lower the drawing plane one grid step.
Reset Grid (grid_reset) Alt+Home a level yes Put the drawing plane back at the level's origin, flat.
Align Grid to Selection (grid_align) Alt+End a level yes Move the drawing plane to the selected face, vertices or brush top.
Toggle Grid (toggle_grid) none - no Show or hide the grid.
Quick Bake (quick_bake) none - no Bake the level.
Undo (undo) none - no Take back the last change.
Redo (redo) none - no Put back the last change undone.
Set Grid Snap (set_grid_snap) none - no Set the grid step to a value.
Track Point for Guides (track_snap_point) none a level yes Run guides from the snap point under the pointer, or stop. Resting the pointer there does the same.
Point Filter: X and Z from Here (take_xz_for_next_pick) none a level yes The next pick takes X and Z from the snap point under the pointer, and its height from where it lands.
Clear Guides (clear_guides) none a level yes Stop every guide from tracked points.
Keep Ruler as Dimension (keep_ruler_as_dimension) none a level yes Keep the Measure tool's last ruler in the level as a dimension that follows the brushes it ends on. K in the tool does the same.
Next Pick: Vertex Only (snap_next_vertex) none a level yes The next click snaps only to a vertex, whatever snaps are on, then they all return.
Next Pick: Midpoint Only (snap_next_midpoint) none a level yes The next click snaps only to the middle of an edge, then every snap that was on returns.
Next Pick: Centre Only (snap_next_centre) none a level yes The next click snaps only to a brush's centre, then every snap that was on returns.
Next Pick: Perpendicular Only (snap_next_perpendicular) none a level yes The next click snaps only to the foot of a perpendicular on an edge, then every snap returns.
Next Pick: Grid Only (snap_next_grid) none a level yes The next click snaps only to the grid, even with Grid off, then every snap that was on returns.
Cancel Drag (cancel_drag) none - no Stop the drag in progress and clear any typed number.
Apply Pending Cuts (apply_pending_cuts) none - no Apply the cuts waiting in Pending Cuts to the brushes they overlap.
Commit Cuts (commit_cuts) none - no Apply the pending cuts and bake.
Clear Pending Cuts (clear_pending_cuts) none - no Delete the cuts waiting in Pending Cuts.
Bake Preview Toggle (bake_preview_toggle) none - no Show the bake as a wireframe over the brushes, or stop showing it.
Apply Context Material (apply_context_material) none 1 brush or faces no Give the selection the material clicked on the context toolbar.

Transform

Command Key Needs Palette What it does
Rotate CCW (rotate_ccw) R a level yes Turn the selection a step counterclockwise.
Rotate CW (rotate_cw) Shift+R a level yes Turn the selection a step clockwise.
Nudge (nudge) none a level no Move the selection a grid step with the arrow keys and Page Up and Page Down.
Flip Selection (flip_selection) Shift+M a level yes Mirror the selection in place across an axis.
Shear (shear_selection) none 1 item, a level yes Lean the selection: one side moves along an axis and the opposite side stays put.
Mirror Copy (mirror_copy) Alt+M 1 item, a level yes Keep the selection and add copies mirrored across the ticked axes.
Offset (offset_selection) Alt+G 1 item or faces, a level yes Move the selection, its vertices or its faces by a typed X, Y and Z.
Pick Pivot (pick_pivot) Alt+P a level yes Click a brush vertex, edge or face to turn and flip about.
Clear Pivot (clear_pivot) Shift+Alt+P a level yes Go back to turning about the selection's centre.
Reset Rotation (reset_rotation) Alt+R a level yes Turn the selection back to no rotation.
Apply Rotation and Scale (apply_rotation_scale) none 1 brush, a level yes Fold the selected brushes' rotation and scale into their shape, so nothing moves.
Snap to Grid (snap_to_grid) Ctrl+B 1 item, a level yes Put each selected brush's corner, or entity's origin, on the grid.

Selection

Command Key Needs Palette What it does
Select Linked Faces (uv_select_group) none - yes Select every face linked with the selected face.
Select All (select_all) A a level yes Select every brush and entity in view.
Invert Selection (invert_selection) none a level yes Select what is not selected, and drop what is.
Select Inside (select_inside) none 1 brush, a level yes Select every brush wholly inside the selected brush, and every entity in it.
Select Partly Inside (select_partly_inside) none 1 brush, a level yes Select every brush at least partly inside the selected brush.
Select Touching (select_touching) none 1 brush, a level yes Select every brush that touches or overlaps the selected brush.
Select Column (select_column) none 1 brush, a level yes Select Inside, with the selected brush's footprint running from the bottom of the level to the top.
Hide Selection (hide_selection) Alt+H 1 item, a level yes Hide the selection until Show Hidden, without a visgroup.
Show Hidden (show_hidden) Shift+Alt+H a level yes Show what Hide Selection and an isolate hid.
Isolate Selection (isolate_selection) none 1 item, a level yes Show only the selection, whatever visgroups it is in.
Isolate Visgroups (isolate_visgroups) none 1 item, a level yes Show only the visgroups the selection is in.
End Isolate (end_isolate) none a level yes Show what an isolate hid.
Previous Visibility (previous_visibility) none a level yes Go back to what was shown before the last hide or isolate.
Deselect All (deselect_all) Shift+A a level yes Select nothing: brushes, entities and faces.
Select Similar (select_similar) Shift+S 1 item or faces, a level yes Select the faces, brushes or entities like the ones selected, on what Selection Filters ticks.
Show or Hide World Brushes (view_filter_world) none a level yes Hide world brushes, the ones that are no cut, no clip brush and no brush entity in the editor, or show them again. The level and the bake are not changed.
Show or Hide Cut Brushes (view_filter_cut) none a level yes Hide cut brushes, applied or waiting in the editor, or show them again. The level and the bake are not changed.
Show or Hide Clip Brushes (view_filter_clip) none a level yes Hide clip brushes, the collision the player cannot see in the editor, or show them again. The level and the bake are not changed.
Show or Hide Triggers (view_filter_trigger) none a level yes Hide triggers, every brush entity whose class starts with trigger in the editor, or show them again. The level and the bake are not changed.
Show or Hide Brush Entities (view_filter_brush_entity) none a level yes Hide brush entities: doors, buttons, triggers and the rest in the editor, or show them again. The level and the bake are not changed.
Show or Hide Point Entities (view_filter_entity) none a level yes Hide point entities: lights, sounds, props and logic in the editor, or show them again. The level and the bake are not changed.
Show or Hide Structures (view_filter_structure) none a level yes Hide the pieces of stairs, arches and the other structures in the editor, or show them again. The level and the bake are not changed.
Show or Hide Prefab Copies (view_filter_prefab) none a level yes Hide the brushes and entities of placed prefab copies in the editor, or show them again. The level and the bake are not changed.
Show or Hide Decals (view_filter_decal) none a level yes Hide decals in the editor, or show them again. The level and the bake are not changed.
Show or Hide I/O Wires (view_filter_wires) none a level yes Hide the I/O wires between entities in the editor, or show them again. The level and the bake are not changed.
Show or Hide Cordons (view_filter_cordons) none a level yes Hide the cordon boxes in the editor, or show them again. The level and the bake are not changed.
Show or Hide Hidden Faces (view_filter_hidden_faces) none a level yes Hide the striped Hidden faces in the editor, or show them again. The level and the bake are not changed.
Show Face Direction (toggle_face_direction) none a level yes Draw the front of every brush face in one colour and the back in another, so a face pointing into its brush shows from outside. The level and the bake are not changed.
Selection Filters (selection_filter) Alt+F no mix of HammerForge and Godot nodes yes Open the selection filters, which pick by kind, material and more.
Quick Select (quick_select) none no mix of HammerForge and Godot nodes, a level yes Select brushes or entities by a typed rule, such as class is light_point and energy > 2.
Grow Selection (grow_selection) Ctrl+] 1 item or faces, a level yes Add the faces next to the selected faces, or the brushes touching the selected brushes.
Shrink Selection (shrink_selection) Ctrl+[ 1 item or faces, a level yes Drop the selected faces or brushes on the edge of the selection.
Toggle Face X-ray (toggle_face_xray) Alt+X - yes Let the face marquee take covered and back faces.
Show Selection Size (toggle_selection_size) Alt+D - yes Label the selection's width, depth and height in the viewport.
Select Linked Copies (select_linked_copies) none 1 item, a level yes Select every copy linked to the selected copy's prefab.

Paint

Command Key Needs Palette What it does
Show Material in Browser (show_material_in_browser) none 1 brush or faces, a level no Select the picked face's material in the material browser.
Make Faces Hidden (make_faces_hidden) none a level yes Mark the selected faces Hidden: they keep their collision, and the bake leaves them out of the mesh and the lightmap.
Make Faces Normal (make_faces_normal) none a level yes Show the selected Hidden faces again, in the material they had.
Hide Faces Against Solids (hide_faces_against_solids) none a level yes Make Hidden every face of the selection that lies flat against another solid brush, after showing which.
Paint Brush (paint_bucket) B - yes Paint floor cells.
Erase (paint_erase) E - yes Erase floor cells.
Ramp / Rect (paint_ramp) R - yes Paint a rectangle of floor cells.
Line (paint_line) L - yes Paint a line of floor cells.
Bucket Fill (paint_fill) K - yes Fill a connected area of floor cells.
Blend (paint_blend) N - yes Paint the blend between ground materials.
Raise Painted Walls (paint_raise) Y a level yes Raise walls round the last painted footprint.
Toggle Paint Mirror X (paint_mirror_x) X a level yes Mirror painting across the grid's X origin.
Toggle Paint Mirror Z (paint_mirror_z) Z a level yes Mirror painting across the grid's Z origin.
Stamp Painted Room (paint_room) H a level yes Repeat the last rectangle as a floor with walls round it.
Confirm Paint Connector (paint_confirm_connector) Enter a level yes Keep the ramp or stair ghost shown between painted layers.

Axis Lock

Command Key Needs Palette What it does
Lock X (axis_x) X a level yes Hold the next drag to the X axis.
Lock Y (axis_y) Y a level yes Hold the next drag to the Y axis.
Lock Z (axis_z) Z a level yes Hold the next drag to the Z axis.
Draw on Face (toggle_draw_on_face) L - yes Build a draw on the plane of the face it starts on.

Agent Bridge

These commands an agent may run over the bridge with hf_run_command, on the brushes and entities it names, never on the selection. hf_list_commands gives the same parameters as JSON Schema.

Hollow (hollow)

Shell one brush into walls: each face becomes a wall of the given thickness, inward from the face, so a box gives six walls and a cylinder a pipe. The brush is replaced by the walls (made), and the shell stays editable as a hollow. Brushes with more than 128 distinct faces (spheres, capsules, tori) are refused.

Param Type Range Default Description
thickness float 0.05 to 128 0.25 Wall thickness in metres

Clip (clip)

Split one brush in two along a plane across an axis. position is where the plane crosses that axis in world space, snapped to the grid, and must fall inside the brush; without it the brush is cut through its middle. The brush is replaced by the two pieces (made); split_position says where the cut went.

Param Type Range Default Description
axis axis - y The axis the cut crosses: x, y or z
position float - - World coordinate along the axis; the brush's middle if absent

Clip to Face Plane (clip_to_face)

Cut brushes along the plane of one face of another brush, the way Clip to Face Plane does: an angled cut taken from an existing surface. Each brush the plane passes through is replaced by its pieces; those it misses are listed in skipped. Refused when it passes through none of them.

Param Type Range Default Description
plane_brush_id (required) string - - The brush whose face gives the plane
plane_face (required) face - - That face: an index, a world side such as '+y', or

Create Structure (create_arch)

Build a structure: an arch, a straight flight of stairs, a spiral stair, a dome, a ring or a door frame, one brush per piece, kept as a live structure. A door frame with cut_opening on also holds the cut for its opening, a pending cut until applied. type picks the kind of structure; settings sets its fields by key (see settings_by_type for each type's keys, ranges and defaults; anything not given keeps its default). position is where it stands and rotation_degrees turns it, Euler XYZ. The pieces come back in made, and generator_id names the structure.

Param Type Range Default Description
type (required) enum - - arch, stairs, spiral_stairs, dome, ring or door_frame
settings object - - The type's settings by key; see settings_by_type
position (required) vec3 - - Where the structure stands, [x, y, z]
rotation_degrees vec3 - - Euler XYZ degrees; none if absent

Update Structure (update_structure)

Rebuild a structure in place from new settings. generator_id names it, as create_arch answers it and hf_get_brushes gives it on each piece. settings sets fields by key, as create_arch takes them for the structure's type (see settings_by_type, which has a Trim Run's keys as well); anything not given keeps the structure's current value. A structure moved or turned as a whole rebuilds where it stands. Each piece keeps its paint, name, brush entity and visgroups where the new pieces line up with the old. Every piece gets a new brush_id: made lists them and removed the old ones. Settings the structure already has, with no piece edited, moved on its own or deleted, rebuild nothing: every piece keeps its brush_id and no_change is true. appearance_dropped lists the old pieces whose paint these settings could not keep, and edits_replaced the pieces edited or deleted by hand that the rebuild put back to the settings' shape.

Param Type Range Default Description
generator_id (required) string - - The structure, as create_arch or hf_get_brushes gives it
settings object - - The fields to change, by key; see settings_by_type

Detach Structure (detach_structure)

Make a structure's pieces ordinary brushes, left where they are with everything on them. update_structure can no longer rebuild them, so hand edits are safe from it. generator_id names the structure. detached lists the pieces.

Param Type Range Default Description
generator_id (required) string - - The structure, as create_arch or hf_get_brushes gives it

Carve (carve)

Cut each carver's shape out of every brush it overlaps. The brushes cut are replaced by their pieces, and the carver is used up: it is removed too. A carver that overlaps nothing is listed in skipped; if none overlaps anything, it is refused.

No parameters.

Merge Brushes (merge)

Merge two or more brushes into one: the convex solid they make together. Refused when that solid would not be convex (an L shape, two separate blocks), or when it mixes solid brushes and cuts. The sources are replaced by one brush, given as brush.

No parameters.

Hull of Selection (hull)

Replace two or more brushes with one brush, the convex hull of all their corners, whether they touch or not. It is turned as the first brush in brush_ids is and keeps its operation, visgroups, group and brush entity. A face on an old face's plane keeps that face's look; a new face takes the Active Material. Refused when the brushes mix solid brushes and cuts or are not all one entity.

No parameters.

Intersect (intersect)

Keep only the volume two or more brushes share. The first brush in brush_ids is cut down by the planes of each of the others, and what is left, one convex brush given as brush, replaces them all. It keeps the first brush's operation, visgroups, group and brush entity; each face keeps the look of the brush whose plane it lies on. Refused when the brushes share no volume, mix solid brushes and cuts, or are not all one entity.

No parameters.

Reset Rotation (reset_rotation)

Turn each brush back to no rotation about its own centre, keeping its position and size.

No parameters.

Move to Floor (move_to_floor)

Move the brushes straight down as one piece until one of them rests on a shown brush below it. Hidden brushes, cuts, triggers and baked collision do not stop them, and one already sunk into a brush by up to half its height holds them where they are. Their x and z stay, and they end touching, on the grid or not.

No parameters.

Move to Ceiling (move_to_ceiling)

Move the brushes straight up as one piece until one of them meets a shown brush above it. Hidden brushes, cuts, triggers and baked collision do not stop them, and one already pushed into a brush by up to half its height holds them where they are. Their x and z stay, and they end touching, on the grid or not.

No parameters.

Snap to Grid (snap_to_grid)

Move each brush the least distance that puts the lowest corner of its world bounds on a point of the level's grid: a whole number of grid_snap steps from the origin on each axis. Size and rotation stay, so a brush sized in whole steps ends with every corner on the grid. A brush already there is left alone. Refused when grid_snap is 0.

No parameters.

Replace Material... (replace_material)

Give every face that wears the material from the material to, what Replace Material does, as one step: across the level, on the brushes brush_ids names when it names any, and on shown brushes alone with scope shown. Each face keeps its UV scale, offset and rotation unless reset_uv is true. from and to are ids or names that hf_get_materials lists. The answer gives faces, how many changed, and brushes, each changed brush's brush_id with its face indices; those faces become the face selection.

Param Type Range Default Description
from (required) string - - The material to replace, by id or name
to (required) string - - The material to put in its place, by id or name
scope enum: level, shown - level level, or shown for brushes that are not hidden
reset_uv bool - false Put each face's UV scale, offset and rotation back to none

Cycle Prefab Variant (cycle_variant)

Switch a placed prefab to its next variant, rebuilding its pieces. Name any one piece of it, a brush or an entity; hf_get_brushes and hf_get_entities give each piece's prefab. Refused for a prefab with one variant, and with locked for a copy any piece of which is locked.

No parameters.

Propagate Prefab (propagate_prefab)

Rebuild every linked copy of a prefab from its saved file, as Propagate Prefab does. Name any one piece of a copy of it, a brush or an entity. Refused when no copy of that prefab is linked.

No parameters.

Place Prefab (place_prefab)

Place a prefab from the project's prefab library. Its pieces come in as new brushes and entities with fresh names and ties, as a drop from the library makes them, recorded as a copy that cycle_variant and propagate_prefab can change. prefab names it: prefabs lists the library, each one's name, variants, tags and how many brushes and entities it holds. position is where its centre goes, exactly; rotation_degrees turns it about that centre, Euler XYZ. variant picks one of its variants. linked makes the copy follow its file when the file changes and is propagated. The answer gives instance_id, the brushes made and entities_made.

Param Type Range Default Description
prefab (required) string - - The library prefab's name; see prefabs
position (required) vec3 - - Where its centre goes, [x, y, z]
rotation_degrees vec3 - - Euler XYZ degrees about its centre; none if absent
variant string - - One of its variants; its base if absent
linked bool - false Whether the copy follows its file when propagated

Ramp / Rect (paint_ramp)

Paint or erase a rectangle of floor cells on a paint layer, what the Rect tool does with a drag. A cell is [x, z] on the layer's grid, one grid step square, the grid's second axis along world Z. from and to are two corners, both included, in any order; to alone is from, so one cell is a rectangle of one. Filled cells get a floor and walls round the edge of the painted area, rebuilt before the answer, and the walls stand at the default height until paint_raise sets one. filled false erases the cells. material writes a cell material id on the filled cells, as the Blend tool does. layer is a layer's index or name from paint_layers; the layer the Paint tab has active if absent. The answer gives the layer used, cells, cells_changed (how many filled bits flipped), materials_changed (how many cell material ids changed), and bounds, the rectangle in world metres on the floor's top.

Param Type Range Default Description
layer layer - - The paint layer, by index from 0 or by name; the active one if absent
from (required) cell - - One corner of the rectangle, [x, z] in cells
to cell - - The opposite corner, [x, z] in cells; from if absent
filled bool - true true paints the cells, false erases them
material int 0 to 255 - A cell material id for the filled cells, as the Blend tool writes one

Raise Painted Walls (paint_raise)

Set the wall height of the painted cells in a rectangle on a paint layer, what the Y gesture does for the last stroke: the walls round that floor are rebuilt at height metres, before the answer. Cells in the rectangle that are not painted are left alone, and a rectangle with none painted is refused; paint_ramp paints them. from and to are two corners, [x, z] in cells, both included; to alone is from. layer is an index or a name from paint_layers; the active layer if absent. The answer gives raised, the painted cells, and heights_changed, how many overrides were added or changed, including pinning cells to the default height.

Param Type Range Default Description
layer layer - - The paint layer, by index from 0 or by name; the active one if absent
from (required) cell - - One corner of the rectangle, [x, z] in cells
to cell - - The opposite corner, [x, z] in cells; from if absent
height (required) float 0.25 to 256 - The wall height in metres

Stamp Painted Room (paint_room)

Paint a room on a paint layer: a width by depth rectangle of floor cells whose lowest corner is at, [x, z] in cells, and, when height is given, its walls raised to that many metres, in one step. What the H key does with the last rectangle's size at the hovered cell, with the size and the corner named; width and depth default to 4, the size the tool starts with. Without height the walls stand at the default height. layer is an index or a name from paint_layers; the active layer if absent. The answer gives from and to, the corners painted, cells, cells_changed, raised, and bounds, the room in world metres on the floor's top.

Param Type Range Default Description
layer layer - - The paint layer, by index from 0 or by name; the active one if absent
at (required) cell - - The room's lowest corner, [x, z] in cells
width int 1 to 256 4 Cells along x
depth int 1 to 256 4 Cells along z
height float 0.25 to 256 - The wall height in metres; the default height if absent

Confirm Paint Connector (paint_confirm_connector)

Keep a ramp or stairs between two paint layers at different heights, what Enter does for the ghost a stroke proposes: where a painted cell in the rectangle on layer sits beside a painted cell of another layer, a connector is confirmed across that edge and built by the next bake, with the level's connector mode, stair height and width. from and to are two corners, [x, z] in cells, both included; to alone is from. to_layer keeps only connectors that join that layer. One already confirmed is counted in already, not added again; a rectangle that meets no other layer, or only boundaries already confirmed, is refused. The answer lists connectors, each one's from_layer, to_layer, from_cell, to_cell, type and width_cells.

Param Type Range Default Description
layer layer - - The paint layer the cells are on, by index from 0 or by name; the active one if absent
from (required) cell - - One corner of the rectangle, [x, z] in cells
to cell - - The opposite corner, [x, z] in cells; from if absent
to_layer layer - - Only connectors to this layer, by index or name; any other layer if absent