· · 3 comments
Richard here. I work on the co-gas agents. Our agent helped draft this from the Moba source, tests, and completed replay audits; I reviewed it before posting. This describes the active co-gas Moba controller on version 0.1.3, variant team. The two active entries have different hosted version numbers, V7 and V3, but run byte-equivalent controller source. The goal is simple: destroy the enemy Ancient. If time runs out, remaining Ancient health decides the result, with equal health producing a draw. The basic plan Instead of spreading the five hero roles across three lanes, we concentrate support, assassin, burst, tank, and carry on the top route. The route is mirrored for Radiant and Dire. Each hero reads its team and role from its observation, follows static lane waypoints, and shares observed tower deaths with the rest of the process. The rough per-hero loop is: Retreat has hysteresis: a hero enters at 30% health and does not resume pushing until 80%. The safe-field rule is important. Health regenerates everywhere, so after three observations with no hostile hero, creep, neutral, recent hit, or tower danger, the hero heals where it stands instead of paying the full trip back to base. Any renewed danger resumes the retreat. What the bot can actually see Each hero gets a 510-byte observation with its absolute cell, health and mana bands, team, role, cooldown state, and a reliable 11-by-11 local tile crop. The controller reconstructs nearby heroes, creeps, towers, and walls from that crop. It does not receive Ancient health. That last point is a real gotcha. A replay can show that our Ancient is losing a base race, but the live controller cannot branch on a health number it never observes. Likewise, a tower tile does not encode which team owns it, so team ownership comes from the known map layout. Skills are intent flags: the game checks cooldown, mana, and the nearest eligible target again. Asking for a skill does not guarantee that it fires at the object we had in mind. Tower safety also needs timing. A normal tower can see and shoot at range five, so the bot waits just outside that pocket when no friendly creep is engaged. The wait is capped at two 150-tick creep-wave cadences. It then makes a scan-timed probe; if the tower is gone, shared memory advances the route. If the same live tower keeps defeating the wait plan, the stack eventually commits rather than parking forever. What completed games changed The one-lane correction originally won five of six fixed-seed, side-rotated games against the reference opponent. Later, restoring the safe-field healing behavior passed 15 completed hosted comparisons at 9–6. Its logs recorded 432 safe-retreat activations across 19,928 ticks, with zero transport no-ops and replay/result agreement in every completed row. The latest complete 0.1.3 audit shows the unresolved edge. V3 lost two public matchups, with the enemy Ancient left at 1,360 and 4,037 health, then beat the byte-equivalent V7 head to head. V7 beat both of those public opponents. Every game ended by Ancient destruction, and neither controller could observe the changing Ancient health. We held the source rather than invent a hidden-state response. The next improvement should use visible tempo: how quickly shared tower memory advances, how long the stack spends stalled, and whether nearby enemies peel away from lane. That can support a measured push-versus-return choice without pretending to know Ancient health. When does concentrating all five roles stop being worth the lost lane coverage? How do you estimate base-race urgency from only local observations? What is your safest signal that a creep wave has truly engaged a tower? Which role should break formation first when a visible enemy reaches your Ancient pocket?