# How automatic team response works

When you release a player in Coach mode, nearby teammates adjust support, cover, and block compactness within a strict six-metre step budget.

Last updated: October 24, 2026
Source: https://krkic.netlify.app/docs/team-movement/

## Tactical diagram

> Pitch showing pinned right midfielder after dragging wide toward the touchline, opening an unobstructed forward pass lane while teammates adjust within six metres.

- Dragging the right midfielder wide pins their new touchline position and opens a forward passing lane from central midfield.
- Unpinned teammates adjust support and goal-side cover within a strict 6.0 m step budget while pinned, frozen, and ball-carrying players stay put.

## Small local steps instead of instant teleportation

When "Automatic team response" is turned on in Setup, releasing a dragged player triggers a single deterministic adjustment across non-pinned teammates. Each teammate moves at most 6 metres per release.

That 6 m ceiling keeps cause and effect legible. Kids can watch the nearest midfielder angle into an open passing lane and the far-side defender tuck inside without losing track of where everyone started.

- Pinned players (marked with a slate ring), frozen players (coral ring), and the current ball carrier stay put during automatic adjustments.
- Goalkeepers stay on their lateral goal-area track and never wander out into midfield.
- One drag release records a single undo entry and a single demonstration frame, covering both your drag and the team response.

## Separate in-possession and out-of-possession shapes

Each team stores both an in-possession formation and an out-of-possession formation, plus optional fullback inversion (left, right, or both coming inside) and midfield shape (balanced support, diamond, or box square when four midfield-unit players are available).

```ts
// Maximum automatic adjustment per committed release:
const MAX_RESPONSE_STEP_METRES = 6.0;

// Protected players never move automatically:
const isProtected = (p: Player, carrierId: string | null) =>
  p.pinned || p.frozen || p.id === carrierId;
```
