Melee Gun Thrashing
The highlighted comment was created in this revision.
I've observed a few times Neuromancer's gun thrashing pretty badly - sometimes doing a full circle before firing. I'm currently trying to avoid this by accounting for an extra of max(time-till-gun-turns-to-angle,time-till-gunheat-is-0) in my PIF time, but I wonder if anybody else has come up with some way to avoid this problem?
So is your firing condition just that the previous tick's aiming completed? And if it didn't, you re-aim? That's all I do and I haven't noticed thrashing, but I don't watch as many Melee battles as I probably should. Projecting extra ticks in the PIF seems like a good idea. Maybe also try adding a factor into the kernel density evaluation that penalizes angles that will make you fire late?
Yeah, that's it. I'm hoping that the extra PIF ticks will cause more spread in the enemy movement, correctly accounting for the increased uncertainty, but I think with the sample sizes we are looking at that isn't really good enough. Perhaps there are points hiding in not going for angles which will take a 180 degree gun rotation, although I really doubt it...
Not sure if you did this already but you could try to bind the targeting to the gun heat. The closer it comes to zero gun heat the less it changes the once found target/area. But i guess if your gun shoots 'blind' you have to weight the new (maybe better target) to the couple of turns you might loose. Because especially in the beginning of the battle 'trashing' is not that bad if your radar detects an enemy that is sneaking up to you (in this case i wouldn't call it trashing - its more likely an emergency reaction). Overall i would guess your targeting is a little to picky dependent on your movement and battle state. Its like 'oh this one is nice ... no wait this one ... oh hang on, this one looks nice ... hello what are you doing right behind me?' :) So i guess you can just let the targeting more space (dependent how many opponents left) to pick a target/area and should be fine.
I found I was waiting for this tick's targeting to align to within 40/distance of the current gun angle before I would fire, so now I just wait for the current (getGunTurnRemaining() == 0 && getGunHeat() == 0) and then I fire. This will lower my accuracy, but I will fire much more often, so I'm interested to see what will happen!
I guess this makes no difference. If the targeting is sound, it should be within 40/distance on this turn as it is at zero at the next turn. Anyway, this will not solve your trashing issue :). If the gun is on its way to lets say PI and the next turn the targeting decides no its not PI its PI/2 your gun will trash between the targets and will not shoot at all for the time it 'trashes' between two headings.
I think the trouble is if there is say a peak at 3*PI/4, and another at 7*PI/8, and both are almost of the same likelihood, then even though the gun can easily turn to both, if they keep changing which is better then I might never end up shooting. Now, as soon as I have a single tick which the best angle changed less than MAX_GUN_TURN_RADIANS, I will fire next turn. Although it seems I have lost some score with this version, so maybe it was better before??? I know I need to do some serious work on my gun, it matches vs all the top bots I get much lower bullet damage.