Complete reference

All 34 commands—without guesswork.

Every card explains syntax and cost as well as exact behavior, result flow, tactical use and common mistakes. Tap a command to open the full reference.

34
commands
7
categories
200
max. lines
Important for conditions

Go If consumes exactly one fresh result from the immediately preceding testable command. Selection, rotation, waiting or another control command in between makes the result stale.

05 commands

Growth

Back to top
GrowCreates exactly one cube in a fixed direction.4 units
Syntaxgrow(direction: .xPlus)

Starting at the active cube, only the adjacent cell on the chosen axis is checked. If it is free, one own cube is created there and becomes active. Boundaries and occupied cells stop the attempt; the command never chooses an alternative direction.

Parameters

  • direction: one of the six axes xPlus, xMinus, yPlus, yMinus, zPlus or zMinus.

Result

Produces a fresh result such as free, blocked, boundary, own cube, enemy cube or enemy core. Direct core contact wins immediately.

Tactical use

Best for precisely planned arms, grids and controlled advances where every direction is deliberate.

Common mistake

A blocked attempt does not change the preferred direction. Use Find Free Direction first when automatic evasion is required.

Example
checkNeighbor(direction: .xPlus)
goIf(.free, to: .advance)
.advance:
grow(direction: .xPlus)
Grow If FreeChecks and grows atomically into the first genuinely free target cell.5 units
SyntaxgrowIfFree()

With an explicit direction, only that adjacent cell is checked. Without one, the preferred direction is tested first, followed deterministically by the remaining neighbors. The first free candidate is built and stored as the new preferred direction. Occupied cells are neither attacked nor captured, and this command cannot win through core contact.

Parameters

  • direction: optional; strict when supplied, otherwise an automatic search starting with the preferred direction.

Result

Reports success with a new cube, or blocked when no valid free cell can be found. Can be consumed directly by Go If.

Tactical use

Without a parameter it is a compact safe-evasion step; with a direction it suits precisely planned grid lines.

Common mistake

This command only grows into empty space. Use Capture Enemy Cube for enemy contact.

Example
growIfFree()
goIf(.blocked, to: .newRoute)
Grow to MarkerMoves one axis step closer to the selected spatial target.6 units
SyntaxgrowToMarker()

The largest distance to the stored marker determines the next axis. With wrap-around, the shorter valid route is used. If the marker has already been reached, the command reports success without creating an unnecessary cube.

Parameters

  • marker: optional slot 1 to 5. Omit it to use the most recently active marker; slots 4 and 5 require the memory upgrade.

Result

Success, blockage, boundary or missing/locked marker; can be used directly by Go If.

Tactical use

For return points, patrols and routes between a search front and a safe origin.

Common mistake

Without a valid active marker, the structure remains unchanged. Use Marker is now needed only by legacy programs that deliberately switch targets.

Example
setMarker(marker: 1, direction: .yPlus, range: 4)
// later
growToMarker()
Grow in Preferred DirectionGrows cheaply in the stored preferred direction.3 units
SyntaxgrowPreferredDirection()

Uses the exact preferred direction produced by signal search, scanning, Set Direction or Find Free Direction. The command is deliberately simple and never detours around boundaries or obstacles.

Parameters

  • No parameters.

Result

Reports growth success or the concrete blockage and therefore produces a fresh condition result.

Tactical use

The standard follow-up to Find Strongest Signal or Find Free Direction.

Common mistake

An old or rotated preferred direction can differ from the expected scan route.

Example
findStrongestSignal()
scanDirection(range: 6)
growPreferredDirection()
Grow RandomlyRandomly chooses one currently free adjacent cell.5 units
SyntaxgrowRandomly()

On completion, all six neighbors of the active cube are considered. Exactly one free candidate is selected at random. This creates varied structures but not a reproducible route.

Parameters

  • No parameters.

Result

Success with a new active cube, or blocked when no neighbor is free.

Tactical use

Useful for broad exploration, unpredictable opponents and batch tests against rigid strategies.

Common mistake

Randomness complicates debugging and does not guarantee progress toward a signal.

Example
selectNewest()
growRandomly()
scanArea(radius: 1)

05 commands

Sensing

Back to top
Check NeighborInspects exactly one adjacent cell—cheaply and unambiguously.2 units
SyntaxcheckNeighbor(direction: .xMinus)

The sensor looks one cell away and distinguishes free space, own structure, enemy, enemy core, core aura, neutral cube, item, boundary and blockage. Enemy findings update the preferred direction.

Parameters

  • direction: optional; omit it to inspect the preferred direction.

Result

Always produces a fresh sensor result. Finding the enemy core directly ends the match.

Tactical use

Often more efficient and precise than an area scan in close combat.

Common mistake

Consecutive neighbor checks overwrite the previous result; Go If must follow the result it should consume.

Example
checkNeighbor(direction: .zMinus)
goIf(.enemyCore, to: .attack)
Scan DirectionScans a straight ray until the first occupied cell.2 + range
SyntaxscanDirection(direction: .xPlus, range: 6)

Starting at the active cube, cells are checked one by one up to the configured range. The ray stops at the first own, enemy, neutral or item cube and cannot see through it. If direction is omitted, the preferred direction is used; enemy and aura findings store the scan direction.

Parameters

  • direction: optional; defaults to the preferred direction.
  • range: 1 to 8; default 4 and directly affects cost.

Result

Returns the first relevant hit on the ray. A visible enemy core wins immediately.

Tactical use

Use after Find Strongest Signal to confirm the rough axis, or as an efficient corridor scan.

Common mistake

The full range cost is paid even when the ray is blocked early. Your own cubes can obstruct the view.

Example
findStrongestSignal()
scanDirection(range: 8)
goIf(.coreAura, to: .closeCombat)
Scan AreaInspects a diamond-shaped 3D neighborhood around the active cube.8 units (radius 1) / 20 units (radius 2)
SyntaxscanArea(radius: 2)

Radius 1 covers the six direct neighbors; radius 2 adds every nearby cell at Manhattan distance two. Results follow a fixed priority: enemy core, core aura, enemy cube, item, neutral cube, own cube, free cell.

Parameters

  • radius: 1 or 2. Radius 2 costs much more but covers substantially more space.

Result

A fresh prioritized result; finding the enemy core wins immediately.

Tactical use

Use radius 1 for close combat and contact fronts; reserve radius 2 for deliberate wide scans, not every loop.

Common mistake

The result reports the most important finding, not a complete list of every cell.

Example
scanArea(radius: 1)
goIf(.neutralCube, to: .collect)
Scan Body ContactReports new or core-advancing enemy contact anywhere on the own structure.12 units
SyntaxscanBodyContact()

The sensor checks every direct face shared by the own and enemy structures and stores the own contact point closest to the core. New or closer contact returns .bodyContact. An unchanged outer front produces no repeated alarm. Within three cells, .coreThreat remains urgent on every scan. The active cube and preferred direction stay unchanged.

Parameters

  • No parameters.

Result

.bodyContact for new or closer contact, .coreThreat inside the core-protection range, or blocked when no relevant contact exists.

Tactical use

Placed at the start of a loop, it detects attacks on distant branches without moving the current attack front.

Common mistake

The scan does not activate the stored contact point. Activate Contact Point must follow inside the defense branch.

Example
scanBodyContact()
goIf(.bodyContact, to: .defense)
.defense:
activateContactPoint()
Track Enemy StructureRemembers a confirmed breach for 96 units and follows the enemy structure locally inward.4 units
SyntaxtrackEnemyStructure()

A real enemy finding, body contact or successful capture is required. This pursuit knowledge remains valid for 96 units even if a flanking command replaces the latest sensor result. The active cube must still touch enemy structure directly. The command then chooses a direction deeper into the connected body and avoids a still-stabilized target when possible. It does not capture a cube or reveal the core.

Parameters

  • No parameters.

Result

Enemy cube with an updated preferred direction, or blocked when local contact has been lost.

Tactical use

Use immediately after a successful capture inside a hunt loop to dismantle an enemy branch without another long-range search.

Common mistake

Stored pursuit knowledge does not replace direct contact. If the active cube has moved away, the command returns blocked.

Example
.hunt:
trackEnemyStructure()
goIf(.blocked, to: .flank)
captureEnemyCube()
goIf(.enemyCube, to: .hunt)

03 commands

Structures

Back to top
Capture Enemy CubeCaptures an enemy cube directly adjacent to the active own cube.8 units
SyntaxcaptureEnemyCube()

The attack starts exclusively from the active own cube and uses an optional explicit direction, otherwise the preferred direction. The captured cube becomes active and is stabilized against immediate recapture for 12 units. A protected target returns blocked. Hitting the enemy core wins the match; enemy sections disconnected from their core become neutral.

Parameters

  • direction: optional; selects the exact adjacent side, otherwise the preferred direction is used.

Result

Enemy cube, enemy core or blocked. Success keeps the active point at the new contact front.

Tactical use

After Activate Contact Point, this command clears a remotely detected contact front locally. Track Enemy Structure then keeps the confirmed breach active.

Common mistake

The command no longer searches the entire own structure automatically. Without the correct active contact point it cannot reach a distant target.

Example
activateContactPoint()
captureEnemyCube()
goIf(.enemyCube, to: .hunt)
Capture Neutral CubeAdds an adjacent neutral cube to the own structure.4 units
SyntaxcaptureNeutralCube(direction: .yPlus)

All own contact surfaces are searched for neutral cubes. Exact scan targets, proximity to the scan point, optional direction and distance to the active cube determine the selection. The captured cube becomes active.

Parameters

  • direction: optional; influences selection but does not force one specific contact.

Result

Success with a new active structure point, or no reachable neutral cube.

Tactical use

Efficient expansion where neutral cubes already occupy valuable positions.

Common mistake

A neutral finding is useful only when at least one own cube has direct contact.

Example
scanArea(radius: 1)
goIf(.neutralCube, to: .collect)
.collect:
captureNeutralCube()
Expand FrontAutomatically chooses a useful edge cube and expands the structure there.8 units
SyntaxexpandFront()

The command evaluates the whole own front, not just the active cube. It sorts candidates using the optional or stored direction and creates exactly one cube on a genuinely free adjacent point.

Parameters

  • direction: optional preference for the front search.

Result

Success with a new edge cube, or blocked when no safe front cell is free.

Tactical use

Robust network expansion when the active cube is trapped or the structure has several branches.

Common mistake

The automation is expensive and less predictable than a directed growth step.

Example
findStrongestSignal()
expandFront()
captureEnemyCube()

10 commands

Selection & direction

Back to top
Set DirectionImmediately stores a new preferred direction.1 unit
SyntaxsetDirection(direction: .zPlus)

Only the direction value is replaced. Active cube, markers, scan knowledge and structure remain unchanged. Subsequent direction-aware or automatic commands can use the new value.

Parameters

  • direction: one of the six 3D axis directions.

Result

No sensor result; a previously fresh result can no longer be consumed by Go If afterward.

Tactical use

For fixed openings, directional phases and reproducible test programs.

Common mistake

Do not place Set Direction between a sensor and Go If because the result becomes stale.

Example
setDirection(direction: .zPlus)
growPreferredDirection()
Rotate DirectionCycles the preferred direction through 3D space.1 unit
SyntaxrotateDirection(steps: 1)

The six axis directions use a fixed order. Positive and negative steps rotate in opposite directions, wrapping around at the end. This enables spirals, zigzags and systematic spatial sweeps.

Parameters

  • steps: -2 to 2; default 1.

Result

No fresh condition result; only the stored direction changes.

Tactical use

Rotate after blockages or scan a different axis on every loop.

Common mistake

Rotation depends on the current value. Use Set Direction first when an absolute starting direction is required.

Example
scanDirection(range: 4)
rotateDirection(steps: 1)
goTo(to: .search)
Find Free DirectionDeterministically finds a free neighbor and stores its direction.3 units
SyntaxfindFreeDirection()

All six direct neighbors are checked in a fixed order starting with the current preferred direction. The first free candidate wins. No cube is created yet; the following growth step remains a deliberate decision.

Parameters

  • No parameters.

Result

free with an updated preferred direction, or blocked when no neighbor is free.

Tactical use

The most reliable pairing is Find Free Direction immediately followed by Grow in Preferred Direction.

Common mistake

The command builds nothing by itself. Without a following growth command, the structure does not change.

Example
findFreeDirection()
goIf(.blocked, to: .core)
growPreferredDirection()
Find Strongest SignalDetermines the rough axis of the strongest enemy signal.18 units
SyntaxfindStrongestSignal()

The search stores only the dominant axis and displays it at the active cube for 30 game units. Inside the core aura, the hint points roughly toward the core but reveals neither an exact position nor a concrete cube. A real enemy finding ends the hint.

Parameters

  • No parameters.

Result

A fresh signal or aura hint plus a new preferred direction. This command cannot win on its own.

Tactical use

Use sparingly as an expensive guide, then verify with Scan Direction or close-range sensing.

Common mistake

The signal is not a line of sight. Blind growth can still hit structure or a boundary even when the axis is correct.

Example
findStrongestSignal()
goIf(.coreAura, to: .closeCombat)
scanDirection(range: 8)
Activate Contact PointSelects the own cube at the most recently stored body contact.2 units
SyntaxactivateContactPoint()

The command uses the most recent still-valid Scan Body Contact result. It activates the own contact cube and aims the preferred direction at the touching enemy cube. It neither builds nor attacks. If the stored contact is stale or gone, selection and direction remain unchanged.

Parameters

  • No parameters.

Result

Success with an activated contact point, or blocked without a valid stored contact.

Tactical use

Connects the global body scan to a local capture, enabling fast defense on distant branches.

Common mistake

Activate Contact Point does not attack. Capture Enemy Cube must run separately afterward.

Example
scanBodyContact()
goIf(.bodyContact, to: .defense)
.defense:
activateContactPoint()
captureEnemyCube()
Select CoreSelects the own program core as the active origin.1 unit
SyntaxselectCore()

Only the active selection changes. Core position and state, remaining structure, markers, direction and sensor knowledge are preserved.

Parameters

  • No parameters.

Result

No sensor result.

Tactical use

Starting point for defense, core-centered markers and controlled core movement.

Common mistake

Selection commands invalidate a previous result for Go If.

Example
selectCore()
setMarker(marker: 1, range: 2)
Move CoreAtomically moves the program core one cell in the preferred direction.5 units
SyntaxmoveCore()

A free target first becomes an own cube and then the new core; an existing own target cube becomes the core directly. The previous core remains as a normal cube. Enemies, neutral cubes and boundaries block the move without any detour.

Parameters

  • No parameters.

Result

Success or concrete blockage; usable as a fresh result for Go If.

Tactical use

Enables small mobile structures and makes stale core-position assumptions dangerous for the opponent.

Common mistake

Movement follows only the preferred direction. Scan first or use Find Free Direction.

Example
findFreeDirection()
moveCore()
deleteOldest()
Select NewestActivates the newest own cube that still exists.1 unit
SyntaxselectNewest()

Internal creation order decides the result. This reliably returns the origin to the latest growth tip even if other commands changed the active cube.

Parameters

  • No parameters.

Result

No sensor result; only the selection changes.

Tactical use

A common start for search loops and a useful follow-up after front expansion.

Common mistake

The newest cube is not necessarily the spatially outermost or strategically best one.

Example
selectNewest()
scanDirection(range: 6)
Select OldestActivates the oldest remaining non-core cube.1 unit
SyntaxselectOldest()

Selection follows creation age while protecting the core. If the structure consists only of the core, the current selection remains unchanged.

Parameters

  • No parameters.

Result

No sensor result.

Tactical use

Useful for retraction, maintaining old branches or inspecting the structural root.

Common mistake

Oldest does not automatically mean safe to delete; deletion commands check connectivity separately.

Example
selectOldest()
scanArea(radius: 1)
Select OutermostActivates the own cube with the most extreme coordinate on an axis.2 units
SyntaxselectOutermost(direction: .xPlus)

The largest coordinate wins in a positive direction and the smallest in a negative direction. This selects an outer front independently of creation order.

Parameters

  • direction: optional; defines the axis and positive or negative side. Omit it to use the preferred direction.

Result

No sensor result.

Tactical use

For systematic mapping and flank attacks. After Find Strongest Signal, omitting the parameter selects the outermost front facing the signal.

Common mistake

Internal order breaks ties; several cubes can share the same extreme coordinate.

Example
selectOutermost(direction: .yMinus)
growIfFree(direction: .yMinus)

04 commands

Program control

Back to top
Go ToUnconditionally jumps to a named program label.1 unit
SyntaxgoTo(to: .search)

A program label sits directly before the first command of its block, is not an executable command and costs no units. The editor keeps labels and targets together when moving code. Older numeric line targets remain compatible.

Parameters

  • to: unique label name; programs support up to 200 command lines.

Result

The next executed command is the first command after the target label.

Tactical use

For clear loops, separate search/close-combat phases and skipping alternative branches.

Common mistake

Live analysis reports missing, duplicate or self-referencing labels. A jump invalidates sensor results.

Example
.search:
findStrongestSignal()
scanDirection()
goTo(to: .search)
Go IfBranches once using the fresh result of the immediately preceding command.1 unit
SyntaxgoIf(.coreAura, to: .closeCombat)

Only commands that produce a condition result can prepare Go If. The result is consumed by this evaluation whether or not the condition matches. No selection, direction, wait or control command may appear in between.

Parameters

  • condition: for example free, blocked, enemy cube, enemy core, core aura, body contact, core threat, item, boundary, neutral cube or any finding.
  • to: unique target label.

Result

Matching results jump; otherwise execution continues on the next line. The result is consumed afterward.

Tactical use

The key building block for state changes, if/else logic and targeted reactions.

Common mistake

Several Go If commands cannot test the same result in sequence. A new sensing command must run before another test.

Example
scanDirection(range: 6)
goIf(.coreAura, to: .closeCombat)
WaitDelays only the own program while the opponent and match continue.1 to 50 wait units
Syntaxwait(count: 3)

The program remains on this line for the configured number of units. Structure, active cube, direction and markers stay unchanged. Waiting can deliberately offset actions or let an opponent enter range.

Parameters

  • count: 1 to 50; every unit delays the next own command.

Result

No sensor result; any previous result becomes stale.

Tactical use

For timing experiments, asynchronous patterns and controlled interception strategies.

Common mistake

Waiting is not free. Long pauses give the opponent real computation time.

Example
wait(count: 3)
scanArea(radius: 1)
Restart ProgramRestarts early at the first active program line.1 unit
SyntaxrestartProgram()

This advanced command skips every line below it. Programs loop automatically at the normal end, so it is useful only for deliberately aborting a special branch.

Parameters

  • No parameters.

Result

Jumps to the beginning; direction, markers and active cube remain, sensor results do not.

Tactical use

A compact emergency exit from long subroutines when a dedicated return label is unnecessary.

Common mistake

At the end of a program this command is redundant and merely costs an extra unit.

Example
.specialCase:
scanArea(radius: 1)
restartProgram()

02 commands

Markers

Back to top
Set MarkerStores a calculated spatial coordinate in a marker slot.2 + range
SyntaxsetMarker(marker: 1, direction: .yPlus, range: 4)

Direction and distance are applied from the active cube to calculate a target coordinate. A valid target is stored and the slot is activated. Targets beyond the arena are not stored without wrap-around.

Parameters

  • marker: slot 1 to 5; 1 to 3 immediately, 4 and 5 after the memory upgrade.
  • direction: optional; defaults to the preferred direction.
  • range: 1 to 8; default 2 and affects cost.

Result

Success with a stored target, or boundary/locked slot; directly testable.

Tactical use

For return points, fixed scan positions and multi-phase routes.

Common mistake

A marker is a spatial target, not a program-code label.

Example
selectCore()
setMarker(marker: 1, direction: .yPlus, range: 4)
Use MarkerLegacy command: activates an existing marker as the current spatial target.1 unit
SyntaxuseMarker(marker: 2)

The stored target is selected, but the active cube is not moved. Empty or locked slots clearly report a blockage. The editor no longer offers this redundant step for new programs; Grow to Marker uses the active or specified slot directly. Existing programs remain compatible.

Parameters

  • marker: slot 1 to 5.

Result

Success for a valid marker, or blocked; can be consumed as a fresh result.

Tactical use

Relevant only for legacy programs or deliberate switching among several stored targets.

Common mistake

For new code, use Grow to Marker(marker: …) or Grow to Marker() directly.

Example
useMarker(marker: 2)
goIf(.blocked, to: .fallbackRoute)
growToMarker(marker: 2)

05 commands

Retraction

Back to top
Delete OldestRemoves the oldest safe non-core cube.3 units
SyntaxdeleteOldest()

The oldest candidate is removed only if the core remains protected and every remaining cube still connects to the core through adjacent cells.

Parameters

  • No parameters.

Result

Success or safety blockage; fresh and consumable by Go If.

Tactical use

Keeps moving structures small and removes obsolete rear sections.

Common mistake

An old articulation point is not removed when that would detach a branch.

Example
moveCore()
deleteOldest()
Delete NewestRemoves the newest safe non-core cube.2 units
SyntaxdeleteNewest()

The newest remaining cube is checked for core protection and overall connectivity. It is deleted only when the remaining structure stays fully connected.

Parameters

  • No parameters.

Result

Success or safety blockage.

Tactical use

Controlled undo for the latest growth step, useful for probing advances.

Common mistake

After automatic front expansion, the newest cube is not necessarily the active point.

Example
growPreferredDirection()
goIf(.blocked, to: .back)
.back:
deleteNewest()
Delete ActiveAttempts to remove only the currently selected cube.2 units
SyntaxdeleteActive()

The core cannot be deleted. Any other active cube is removed only if the remaining structure stays connected. After success, the core becomes active.

Parameters

  • No parameters.

Result

Success, core protection or connectivity blockage.

Tactical use

For precise removal of a deliberately selected branch point.

Common mistake

After success, the active origin moves to the core; subsequent commands start there.

Example
selectOutermost(direction: .xMinus)
deleteActive()
Delete OutermostRemoves the outermost safe cube on a chosen side of an axis.4 units
SyntaxdeleteOutermost(direction: .xMinus)

The spatially most extreme non-core cube is selected first. Core protection and full connectivity are then checked; an unsafe candidate remains in place.

Parameters

  • direction: axis and positive or negative side to retract.

Result

Success or safety blockage.

Tactical use

Cleans up one distant side of a large search network.

Common mistake

The outermost cube may be a critical bridge and therefore remain protected.

Example
deleteOutermost(direction: .xMinus)
retractTrail(count: 2)
Retract TrailSafely removes several old cubes in sequence.2 + 2 × count
SyntaxretractTrail(count: 3)

For every step, the oldest suitable non-core cube is selected again and checked for connectivity. The retraction stops as soon as a candidate would be unsafe.

Parameters

  • count: 1 to 20; adds 2 units for every requested cube.

Result

Success with the portion actually removed, or an early safety blockage.

Tactical use

For telescoping arms, mobile cores and memory-efficient search paths.

Common mistake

Command cost follows the requested count even when retraction stops early.

Example
growPreferredDirection()
scanDirection(range: 8)
retractTrail(count: 2)