BlockSlot) and can have up to six sides (faces), each potentially holding an item, enemy, ball, or decoration.
The Block Grid
The level is a 3D grid where each position is defined by integer coordinates(X, Y, Z). The block selector cursor highlights the current position, and blocks can only be placed at these discrete grid points.
- The grid extends in all directions — there is no hard limit on level size
- Blocks cannot overlap — each
BlockSlotcan hold at most one block - The origin
(0, 0, 0)is the default starting position
Block Templates
Each block uses a template that defines its visual appearance, material, and behavior. Templates come from the current theme — changing the theme changes which templates are available. Templates are categorized as:- Side templates — Standard blocks with 6 independent sides, each holding elements
- BlockOnly templates — Blocks without distinct sides (the entire block is treated as one unit). These cannot hold items/enemies/decorations on individual faces
Placing Blocks
- Press B to open the Blocks Pool
- Select a block template from the grid
- Navigate with WASD/EQ to position the selector
- Press Space to insert the block
Block Properties Hold
When you copy a block template with Shift+Tab, the editor stores the element properties backup. The next block you insert will inherit those properties. This is useful for quickly placing blocks with identical configurations.Moving Blocks
- Press Space on an existing block to grab it (all 6 faces highlight)
- Use WASD/EQ to move the selector — the grabbed block moves with it
- Press Space again to ungrab the block at the new position
OnEditorBlockMoved callback on the block’s template.
Removing Blocks
Press Backspace to remove the block at the selector position (or the currently selected block). Removing a block:- Triggers the
OnEditorBlockRemovedcallback on the template - Destroys all enemies and balls attached to its sides
- Removes the block from the section’s block network
- Clears the block selector selection
- Recomputes the level illumination
Copying Block Templates
This lets you quickly replicate a block’s configuration: select a side, press Shift+Tab, then press Space on an empty position to place a copy.
Block Illumination
After any block insertion, removal, or movement, the editor callsDynamicGI.UpdateEnvironment() to recompute global illumination. This ensures lighting stays consistent as you build.
Score Contribution
Each block template has anEditorScore value that contributes to the level’s total score. BlockOnly templates contribute their score directly; side templates contribute per-side. The score is recalculated in real-time and displayed in the HUD.