← Dev Log
BallOrcs Battle2 min read

BallOrcs Battle: the orcs stop walking into walls

Orcs now find their way around walls of fire and barricades instead of getting stuck, plus a skirmish menu and health bars for hurt units.

In plain words

Until now, if you sent an orc somewhere and a wall of fire or a barricade stood in the way, it walked straight at the goal, stopped at the obstacle and stayed there forever. Now units find their way around. They follow a shared "map of arrows" pointing toward the destination, so a whole army heading to the same spot reads one map instead of each working out its own route. Both players' armies must take mirror-image routes on a mirrored map, which took some care. Elsewhere: there is a skirmish menu as a front door, matches know when they are over, hurt units show health bars, and the weekly build now writes its own release notes.

Under the hood

  • Front door and readability (#40 C5, #41 C6, #42 C7): SimServer knows when a match is over, a skirmish menu, hp bars on hurt units plus Hollow and channel marks.
  • Flow field, slice 1 (6d7f115): breadth-first sweep from the destination over a dense odd-r array, neighbours in HEX_DIRS order. Every step costs 1 (elevation and slope cost nothing, per the recorded decision). STEP_GOAL and STEP_NONE are kept distinct. Wired to nothing, so no hash moved.
  • Cache, slice 1.5 (dfc050e): at most 32 fields keyed by (destination, faction, domain), evicted by lowest last_used tick then lowest slot. Stale fields are returned, not rebuilt; refresh() rebuilds in place.
  • Path following, slice 2 (5b2d111): units route via the field; per-unit state is path_epoch and path_next. The first sweep failed mirrored_worlds_stay_mirrored_exactly because first-arrival tie-breaking is not mirror-equivariant; steps are now ranked by dot then cross against the goal. SNAPSHOT_VERSION 13 → 14, the eight golden pairs re-recorded.
  • Corpus re-record (0271cd3): five trace anchors changed sim_hash only; unit counts and per-ability rows held, and sim-tests stayed green on both maps at 1,024 seeds.
  • CI: the weekly release creates its release page (curl, no python3 in that image); godot-android re-pinned after registry garbage collection removed the old digest, with dated tags so pinned digests stay tagged.

This is pathfinding work in the sim; it is not a claim about any numbered rendering or multiplayer phase.

#rts#simulation#determinism#pathfinding#ci