A bot could hardly miss and still lose the map. It surrendered red armour, emerged from the lower floor under an opponent's railgun, then respawned unarmed in a room where someone was already waiting. After a few such encounters, the human had everything needed and could choose the fights. OpenTDM-X set out to create an opponent capable of breaking that pattern: recovering, taking away a favourable position and exploiting someone else's mistake.
Earlier bot projects were studied in September. Candidates included JABot from the ACE family and 3ZB2: one offered appealing separation between subsystems, the other detailed movement and combat cases. Other projects had limitations too. The Gladiator archive lacked the source for its intelligence library, while Eraser was missing some navigation code. Even complete source did not provide a ready-made, physically fair OpenTDM player. Some bots sent ordinary commands while also changing velocity directly. Importing an entire controller like that would quietly grant different movement capabilities.
OpenTDM supplied the rules: weapons, items, physics and scoring. Perception, goal selection and execution were written for the bot. Its skill parameter determined capabilities, including permitted knowledge of opponents. Even at high levels, that knowledge did not grant different physics. A real explosion propelled a rocket jump, and a fired rocket travelled the same path as a human player's rocket.
What a Match Recording Can Teach
q2duel5 was the first training map. A September analysis pass decoded 121 unique recording streams—more than a million rows of player state. The program found demos both in growing folders and inside archives, without reanalysing streams already read. Decisions then had to be reconstructed from those frames: which item a player sought, why they changed direction, what they did before shooting and where they went afterwards.
A successful escape is not always a useful lesson. A player may survive because of the chosen route—or because the opponent missed. Fragments were compared with other recordings and level geometry. Tricks were broken down into acceleration, take-off and landing: the action had to be reproduced, rather than simply arriving at the recorded coordinates.
In early tests, a bot approached the railgun and jumped away, leaving it behind. It dodged one grenade into the path of the next. It collected a chaingun but forgot the ammunition beside it. The log could dutifully report selecting a goal; the human saw an uncollected weapon and picked it up. The investigation had to find what interrupted an action one step from success and keep a nearby worthwhile goal active until completion.
By OpenTDM-X Beta 10, the bot knew compact q2duel5 well. It applied pressure, caught respawns and fired into exits. That build was kept for comparison: if new rules seemed to slow the bot down, it was run alongside the newer one and played again. Some complaints concerned older weaknesses. In public Beta 10 demos, a human could also strip its stack from above while it remained on the lower floor. Returning to the older build would not solve that.
With full control, a human began hunting spawn points. The bare bot again answered with a blaster from a poor position and died, although it could have moved towards weapons and armour while firing on the way. One proposal introduced an increasing pause after repeated quick deaths. In a match, it helped the opponent, who could collect the whole level before the next spawn. The rule was removed and a one-second respawn restored. The mistake became clear across a series of deaths; in isolation, the delay did indeed postpone one death.