Will onRobotDeath event miss due to skipped turns?
The highlighted comment was edited in this revision. [diff]
onRobotDeath is crucial when dealing with multiple enemies. If this event were able to lost, it will be hard to guess that information back.
- If I understood correctly skipped turns happen when the bots passes the time limit. I think, after this event no actions are made(setAhead( ), setFire( etc.) and no events are called after it. I am 99 percent sure that if you call onRobotDeath first no skipped turns will harm it.
- Even if it stopped everything you did by not updating the robot, static variables wouldn't change.
I think all events (except the skip turn event) are lost when robocode punishes for long CPU use. I have no source confirmation for it. But I quite sure that event of enemy death can be lost. I recall adding a special check of enemy not being scanned for something like 10 tics to put it into the dead enemy category because, because I was occasionally missing the death event during the run. I also think you might even miss your own death event. I have a code which suppose to print some stats at such event, and I see that sometimes the output is not produced.
Yes, that's true. I did a quick experiment and found that onRobotDeath event do lost when experiencing heavy skipped turns.
So just add if (Math.random() < 0.7) { return; }
in onRobotDeath and see whether your bot totally breaks.
Anyway, I see some alive bot not getting scanned for 10+ ticks (when you skip turns, that could be easy to happen), are you handling this case correctly?
It should no be a problem if a "robot" reappear on scan, it is added back to the alive pool.
Hm, I could not find the code which is in charge of it. I vividly remember programming it several years ago. This might explain some quirks which I saw in melee, when my bot fires into a dead bot last seen location. I.e. if I miss robot death event, I still count enemy alive for quite a bit and keep firing at the "gost" till some timer expires.
well, firing at some "ghost" when missing onRobotDeath is unavoidable. Anyway we could set different timer for radar & gun. e.g. for radar, choose 8k ticks, where k is large enough to avoid marking alive bots as dead. And for guns, use a small k, e.g. 1, to avoid shooting at targets that we don't have new information.