[Movement] Stop bots reversing direction three times as often as a human player

Open
#697 4 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
22/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
python, rust

Research direction

The reversal behaviour is driven by Argus_Combat in src/argus.qc (strafe re-roll around line 6307) and the strafe hazard probe near line 6678, plus Argus_HazardSteer. Start by reading how ar_moveyaw is set in those paths, then the demo reader in the lab (argus-mcp demo) that computes reversals per minute. Done means a cause marker on every reversal over 90 degrees and bot reversals at or below 1.5 times the human median (about 33 per minute) on dm4 and dm2 with hard gates unchanged.

Written by the indexing model from the issue text.

Description

ai P1 physics

Problem

Played on dm4 today against the installed build (MD5 A3F7AA9428846DE7F7B327506F5F5D3D), the bots look like bumper cars: they bounce between headings instead of moving like players. Priority 1. Every gate the lab keeps passed while this was true, so it is the most visible gap between what the lab measures and what a player sees.

Measured

A reversal here is a turn of more than 120 degrees in horizontal travel direction within 0.25 s, at over 120 u/s on both sides, counted at most once per 0.5 s. It was computed from the full-rate player tracks in six harvested dm4 session demos (argus-mcp demo <stem>:export), per minute of visible movement:

Session Carmack Romero Joe Rogan Human
2026-08-28 v393b 67.7 71.1 62.8 23.1
2026-08-29 v405 64.9 61.6 70.6 21.9
2026-09-16 60.1 63.1 53.1 19.3
2026-09-21 6b9dc220 58.9 65.9 66.2 25.6
2026-10-22 review517 64.5 65.6 62.2 23.1
2026-11-01 bumpercars 59.5 69.5 61.4 17.7
  • Bots reverse 53 to 71 times per moving minute in every session; the human 18 to 26. Roughly three times as often, on every build since late August. It is long-standing, not a regression.
  • Not a sampling artefact. Bot tracks arrive at 23 to 42 Hz (PVS-culled to the recorder) and the human at about 69 Hz. Decimating the human track to bot rates LOWERS its count (today 17.7 at 69 Hz, 16.5 at 34 Hz, 14.9 at 23 Hz), so the gap is understated if anything.
  • Same kinds of move, too many of them. Pooled over all six sessions, bots made 1,420 reversals: 60 per cent sideways relative to facing (strafe flips), 26 per cent while travelling forward, 15 per cent while backing. The human's 361 split 59, 23 and 18. The bots do what a player does, about three times as often.
  • Today's tape (runs/shane_dm4_2026-11-01_bumpercars.log, about 2.6 minutes) also carries 120 wall-slide markers (about 15 per bot-minute), 257 hazard deflections and 15 body-block sidesteps.

Why the lab never saw it

ARGLOG samples every bot twice a second, and every gate, argus_humanness.py and argus_gait.py read those samples. A quarter-second reversal falls between two of them. Only a demo carries full-rate motion, and no gate reads a demo. #517 measured authored manoeuvres, not ordinary movement.

Candidate causes, unconfirmed

Each of these flips ar_moveyaw instantly. NetQuake ground acceleration then carries the bot from one heading to the opposite in about a tenth of a second.

  • Combat strafe re-roll: every 0.8 to 1.8 s, a 40 per cent chance to reverse (src/argus.qc, Argus_Combat, around line 6307). This is the most likely source of the 60 per cent lateral share.
  • Strafe hazard flip: any strafe heading that probes a hazard at 48u reverses immediately, then backs off (around line 6678). dm4 is mostly lava edges.
  • Missile-dodge sidesteps, battle-item grab bends, body-block sidesteps and the brink deflection fan in Argus_HazardSteer (#607 records that its hold-clearing branch is unreachable).
  • Wall contact: Argus_WallSlide clips into the wall and its fallback ungrounds. Neither turns before contact, so the bot meets the wall first.

Proposal

  1. Instrument before changing anything: a throttled ARGUS <name> flip <cause> marker at every site that reverses or swings ar_moveyaw by more than 90 degrees, so a tape attributes each reversal to a cause.
  2. Add the reversal measure to the lab's demo reader, so a recorded session or a lab recording reports it beside the human corpus.
  3. Fix the dominant cause first. For the strafe it is probably commitment: hold a strafe direction until there is a reason to change it (incoming fire, a hazard, blocked space or a lost line of fire) rather than re-rolling a coin on a timer.

Acceptance

  • Every reversal in a tape carries a cause marker, and the lab reports reversals per moving minute from a demo.
  • On dm4 and dm2 at the played rate, bot reversals per moving minute fall to at most 1.5 times the human median from the corpus above (about 33), with the hard gates at parity: stalls, lava, freezes, under-fire freezes and engagements, at least three tapes a side on dm4 and five on dm2.
  • A human session confirms the bots no longer read as bumper cars. The number is a proxy for feel, the same limit #610 records for the gait distance.

Related: #610, #607, #517, #369, #380.

Evidence is machine-local: runs/shane_dm4_2026-11-01_bumpercars.log (tape) and the six runs/demos/shane_dm4_*.dem sessions above with their exported .tracks.json.

Dominant language
Rust
Stars
4
Forks
0
Avg merge
30m
Merged PRs (30d)
130

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from saworbit/argus

All issues in saworbit/argus

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.