This seems to be due to the previous version of execution order. Previously, in the version used in this tournament, all robots took actions (in spawn order), then all bullets took actions (in spawn order). This was slightly unfair, as it meant robots spawned later in the game would get their turn after robots spawned earlier in the game, and could dodge bullets shot by them before the bullets even move or process collision detection.
In this case, the scout was spawned later in the round than the solder. In the old execution order, the following things happened in a single turn:
- The soldier fires bullets directly toward the scout. Note that these bullets may overlap with the scout.
- The scout gets its turn, sees the bullets, and moves away from them. The scout then fires a bullet at the soldier.
- The bullets move forward and process collisions, but at this point the scout isn't colliding with them any more. Only the soldier is hit.
We recently changed execution order such that bullets are inserted into the execution order directly before the robots that fire them, see Execution Order under bcd22 of the specs (http://s3.amazonaws.com/battlecode-releases-2017/releases/specs-1.4.0.html#bcd22). With the new order, the following would happen:
- The soldier fires bullets at the scout
- The scout sees the bullets, moves away from them, then fires a bullet at the soldier
- The soldier's bullets move forward and miss the scout
- The soldier dodges the bullet shot by the scout
- The scout's bullet moves forward and misses the soldier
- The scout gets a turn and does something
This is still unintuitive, but is at least balanced between the robots now. There is a possibility we may change bullet execution order to be directly after the robots that fired them, so in this situation neither the scout nor the soldier would be able to move before the bullets hit them. This would make point blank combat make a bit more sense.