The perception–decision–action pipeline
A human goalkeeper cannot respond the instant the ball is struck. Light must reach the eye, the brain must estimate direction and pace, and muscles must fire before the body moves at all. The arena models this with three stages. During perception, the keeper is blind to the outcome and stays set. At the end of the reaction window, the decision stage commits to a predicted crossing point. The action stage then moves the keeper towards that point at a capped lateral speed, extending the arms to cover a reach envelope.
Reaction time algorithm
Reaction time is fixed per difficulty tier and extended when the ball is struck over a wall, because the keeper loses sight of the contact moment. The time available to move is whatever remains of the ball's flight after that delay.
t_react = t_tier + 0.06·[wall present] t_avail = t_arrival − t_react d_max = v_dive · t_avail x_final = x_start + clamp(x_pred − x_start, −d_max, +d_max)
Take a 24 m free kick arriving after 0.95 s against the Pro tier. With the wall, reaction is 0.38 s, leaving 0.57 s to move. At 4.4 m/s the keeper covers up to 2.5 m laterally. Starting half a metre off-centre, that is enough to reach a ball struck at x = 2.2 m but not one aimed at x = 3.4 m.
Prediction noise
At the decision moment, the keeper estimates the lateral crossing point with Gaussian error: xpred = xtrue + N(0, σ). Rookies read the flight poorly (σ = 0.60 m), Pros are solid (σ = 0.35 m) and Elite keepers are sharp (σ = 0.18 m). Noise is why a well-placed shot at a Rookie occasionally goes in even when the keeper had time to reach it: he simply dived to the wrong spot.
Diving physics and the reach envelope
A diving keeper rotates around the hips while the centre of mass travels laterally and slightly upwards. The arena captures this with a reach envelope that trades height for distance. Short movements allow a full stretch, while long dives flatten the body.
reach_x = 0.85 m (0.42 m if no time to move) reach_y = 2.35 m + h_tier if move < 0.8 m reach_y = max(1.1, 2.45 − 0.2·move) + h_tier otherwise save = |x_ball − x_final| ≤ reach_x AND y_ball ≤ reach_y
The tier height bonus htier is 0 m for Rookie, 0.06 m for Pro and 0.16 m for Elite. When a keeper has time to set without a long dive, he gains an extra 0.2 m through a vertical spring, which is why high central shots are nearly always saved.
Catch or punch
Not every save is clean. The keeper holds the ball only when it arrives slower than 26 m/s, lands in the inner 55% of the hand reach, stays below 1.9 m and the dive is shorter than 1.6 m. Anything else is punched away from goal, sending the ball back towards the edge of the area. Post-shot telemetry records which occurred along with the reaction delay and distance moved.
Positioning strategies
- Wall present: the wall covers the near-post side, so the keeper shades 0.5 m towards the far post, trusting the wall with the near corner.
- No wall: the keeper sets on the bisector of the angle between the ball and both posts, approximated as 10% of the ball's lateral offset.
- Central free kicks: with the ball dead centre, the keeper starts on the goal centre and relies on reaction and dive speed alone.
| Tier | Reaction | Dive speed | Prediction σ | Height bonus |
|---|---|---|---|---|
| Rookie | 0.42 s | 3.6 m/s | 0.60 m | 0.00 m |
| Pro | 0.32 s | 4.4 m/s | 0.35 m | 0.06 m |
| Elite | 0.24 s | 5.2 m/s | 0.18 m | 0.16 m |
How to beat the AI
Three levers matter. First, minimise flight time with more power: every 0.1 s shaved off the flight removes around 0.44 m of Pro dive distance. Second, go high and wide: a long dive lowers the reach ceiling to about 2.0 m, so a ball crossing at 2.2 m in the corner is beyond even a perfect read. Third, use the wall: the 0.06 s screening penalty is equivalent to 26 cm of lost dive distance at Pro level.
Elite benchmark: from 24 m with a wall, a shot crossing at x = 3.3 m, y = 2.15 m at 105 km/h beats the Elite keeper on almost every attempt. Drop the height to 1.8 m and the save rate climbs sharply.