Quick answer: Soccer and football game bugs cluster in player AI and positioning, ball physics, set pieces, and online netcode. Capture each relevant player's AI decision and position, the ball trajectory and contact, the set piece setup, and the match tick and latency at the moment of the report. With that match state attached you can replay the exact phase of play instead of guessing why a defender stood still or a pass went nowhere.

A soccer or football game simulates twenty-two players, each running its own AI, a ball with detailed physics, set pieces with their own rules, and often a live multiplayer match on top. The bugs come from how these interact. A defender that ball-watches while a striker runs free, a pass that bends impossibly, a corner routine that bunches everyone in one spot, a desync where the ball is in two places online. Players describe these as the AI is brain-dead or it lagged. This post covers what AI, ball, and match state to capture so a frustrating phase of play becomes a reproducible moment you can analyze.

Player AI and positioning

With twenty-two AI agents on the pitch, positioning bugs are the most common and most visible complaints. A defender that ball-watches instead of tracking a runner, a midfield that leaves a huge gap, a striker that runs offside on every ball, or a keeper that stays rooted on a cross all read as the AI is broken. Capture each relevant player's role, the decision its AI made this frame, the target position it chose, and the formation context. A defender that left a runner open is a marking or tracking bug, and its decision data shows whether it lost the assignment or never had it.

Off-the-ball movement is the subtlest AI dimension and the one that makes a match feel alive or robotic. Players should make runs, drop into space, and hold a defensive line, and bugs where runs never trigger, the line fails to push up, or players bunch into the same zone break the simulation. Log the off-ball decisions and the formation targets for the players involved. When many reports describe my teammates never make runs, the off-ball decision data tells you whether the run triggers are firing and being ignored or never firing at all.

Ball physics and contact

The ball is the one object everyone watches, so its physics are heavily scrutinized. Passes, shots, headers, and deflections all depend on the ball responding correctly to spin, power, and contact. Bugs include a pass that undershoots wildly, a shot that bends like it has a mind of its own, a header that sends the ball the wrong way, or a ball that sticks to a player's feet. Capture the ball velocity and spin, the contact event that last touched it, and a sampled trajectory. A pass to nobody is a power or target bug, and the contact plus trajectory expose where the kick went wrong.

Contact resolution between the ball and players is its own bug surface. A tackle that should win the ball but phases through it, a deflection that applies no change, or a ball that clips through a body are collision bugs. Log the contact points, the relative velocity at contact, and the impulse applied to the ball. When players report tackles go right through the ball, the contact and impulse data show whether the tackle collider missed the ball or the impulse was zeroed, separating a collision bug from an animation that merely looks like a missed touch.

Set pieces and dead-ball routines

Set pieces are scripted phases with their own positioning and rules, and they concentrate bugs because everything happens at once. A corner where all attackers bunch on one post, a free kick wall that lines up offside, a throw-in that goes to no one, or a penalty run-up that glitches are set-piece logic bugs. Capture the set piece type, the assigned positions for each player, and the trigger that started the routine. A bunched corner is a position-assignment bug, and the assigned positions reveal whether the routine collapsed several players onto the same target.

Offside and rule enforcement on set pieces and open play add logic bugs that decide goals. An offside not flagged, a phantom offside on a clearly onside run, or a goal disallowed wrongly all hinge on the offside line calculation at the moment of the pass. Log the offside line position, each attacker's position relative to it, and the moment the pass was played. When a player disputes an offside call, the line position and the pass timestamp settle it objectively and, if wrong, point at the line calculation or the timing of when it was sampled.

Netcode and online desync

Online matches add the genre's hardest bugs: desync where the ball or a player is in different positions on two clients, rubber-banding after a lag spike, and disputed goals where the ball crossed the line on one screen but not the other. These only exist between clients, so single-client logs miss them entirely. Capture a match ID, each player's latency and network role, and the authoritative tick at the disputed event. When two players in the same match report the same match ID and tick, you can align their views and see the divergence.

The root cause is usually the reconciliation between predicted and authoritative state. A player predicts the ball's path locally, the server corrects it, and a large correction snaps the ball visibly. Capture the predicted and the authoritative ball position at the correction, along with the latency, so you can size the error against the delay. When a disputed goal report carries both positions and the tick, you can determine whether the goal-line detection ran on stale predicted state or the authoritative state genuinely had the ball out, which is the difference between a netcode fix and a working system.

Setting it up with Bugnet

Bugnet gives your football game an in-game report button so a player who just conceded to a brain-dead defender or a phantom offside can report it in the moment, and the SDK captures the match state automatically. You wire that capture to include the relevant players' AI decisions and positions, the ball trajectory and last contact, the set piece setup, the offside line, and the match ID, tick, and latency. The player says the AI is broken; the snapshot shows which decision failed. Crashes during a chaotic goalmouth scramble arrive with a full stack trace and device and platform context.

Because the same AI or ball complaint comes from thousands of players, Bugnet folds duplicate reports into one issue with an occurrence count that becomes your priority signal. A defensive-tracking bug with a thousand reports outranks a rare set-piece glitch. Custom fields store the match mode and difficulty, player attributes track platform and online versus offline play, and one dashboard lets you filter to a mode, difficulty, or online status to find exactly where the AI, ball physics, or netcode breaks instead of reading every match report by hand.

Testing the match by phase

Football bugs emerge from phases of play, so test by phase. Build automated matches that run defensive shapes against every attacking pattern, replay every set piece routine, take shots and passes from every angle, and simulate online play under varied latency. Most AI, set piece, and netcode bugs surface when you brute-force these phases rather than playing one scripted move, and a nightly run catches regressions in positioning, ball physics, and reconciliation before a build reaches players.

Pair that synthetic coverage with real field reports, because players generate match situations no scripted test anticipates. When a new ball-watching or desync bug arrives with full match state attached, fold that exact phase into your test suite so it cannot silently regress. Over time your football game becomes one where the AI defends like it should and the ball goes where it is kicked online and offline, and your reports shift from the AI is brain-dead to genuinely rare edge cases worth a closer look.

Football is twenty-two AIs and one watched ball. Capture the decisions, the ball path, and the tick and a brain-dead moment becomes a phase you can replay.