GresSuffurd 0.3.13
Isn't it because HoT targeting shoots one turn after it calculates the angle?
Example:
both bots are perpendicular to each other on the x axis and have a distance of 100 - the calculated angle would be 90deg
bot one moves +8 and bot two -8
if bot one shoots the next turn with 90deg angle it would be 9deg difference to the center he targeted the last tick.
Of course this is the worst case and scales on distance and relative velocities to each other.
As far as I remember HOF doesn't use setAdjustGunForRobotTurn and also just spins its radar, so if you get a bad combo it isn't anywhere near GF0. I've seen as bad as GF+0.3. I'm sure you could improve your score by also dodging the bullet if it was fired at your last 8 locations and adjust the angle based on if they are turning and hadn't adjusted their gun for it yet this tick. Trouble is it will hurt against other bots :-)
HoF has an infinity lock, which slips quite frequently. And it looks like, he shoots whit in the run method and not in onScannedRobot(..) what makes the HoT angle even worse. Not sure about the setAdjustXX(..) but it would make it even more unstable.
As conclusion i would say there is no bot that shoots at GF0 all the time.
Except maybe GF guns with precise future position aiming against SittingDuck.
But even if you have perfect prediction of your opponents targeting, there is still the occasional ramming score due to bots spawning too close to each other in the beginning of a round, making perfect scores almost impossible against moving opponents.
You can get unlucky with an enemy that spawns to close and starts moving before it knows where the enemy is, or has a bad movement. Which then rams into your robot. But not much you can do in robocode against bad luck. Except try to minimize it.