And I'm curious about why there are so many bots NOT vulnerable to BS ;)
To effectively BS, you have to shoot the other bullet out of the air. So you have to exactly know where the other shoots. If the enemy moves, it will aim directly at you, but fires the next tick. Or maybe they compensate, but still they will not fire from the exact place they interpolate. Some bots just spin their radar and shoot whenever they see someone. Only good bots will fire really exact, and only they will be vulnerable to BS. When BulletCatcher came around in 2009, the actively developed bots took their countermeasures. Only a slight deviation from the 'ideal' angle is enough to let a BS miss. DrussGT tries to shield against a few different firingmethods, before it decides to fall back to its native gun and movement.
Thanks for the detailed explanations! I thought the firing control part should be mostly the same among a lot of bots (e.g. via copying the sample bots or OS bots), but it seems that this is also the part a lot of people made mistakes in, and there are also so many variants. Some bot aims precisely but fires whenever gun-turn-remaining is less than bot width, some forgot to call setAdjustXXX, some aims from the next tick but uses velocity from the last tick to predict... Such mistakes are so subtle that no one notices, until they incidentally found their bots not vulnerable to BSs. I know very few bots protecting themselves from BSs deliberately, most people get protected occasionally.
Are there bots like MoxieBot, which instead of intercepting HoT bullets, deliberately create a shadow to which they move on?
MoxieBot is quite cool, but unfortunately does not run reliably in the modern robocode engine. I think we still have a lot to learn from this bot.
I myself clearly have buggy bullet safety shadow code since I see enemy bullet in the calculated shadow zone quite often.
I think with a modern Passive Bullet Shadower, you can easily implement Active Bullet Shadower by brute-forcing firing angles — and actually with some math you should be able to calculate that directly.
I've been long thinking about some smooth transition between Bullet Shielder to Active Bullet Shadower and Passive Bullet Shadower. E.g., shield at first, then begin dodging. When there's a chance to shadow, do that deliberately if worth the miss.