NO BUT FOR REALS THIS TIME
The turning bug is ACTUALLY fixed this time and I can throw that whole hit point epiphany right in the garbage because that was NOT the answer at all.
It MOSTLY worked. It fixed the turning bug, and as far as I could tell also prevented the player from bypassing collisions by directing Antis and Regs into each other.
MOSTLY. The new code for triggering a failure required the Reg and Anti hit boxes to be in contact for 3 frames, rather than triggering the instant they touched. The problem is that SOMETIMES- and ONLY sometimes- Antis and Regs could still pass through each other because I GUESS the timing of their movement ended up putting them in contact for less than 3 frames!
I ran so many tests and it was consistent. There were always particular tiles where placing the arrow would cause the Anti and Reg to pass through each other, but moving the arrow to an adjacent tile would cause them to correctly collide. (On the plus side, I learned a lot of useful debugging tricks in the process of trying to figure this whole mess out.)
I put the project down again for a few months and waited for another random brainwave to hit me. Which happened last night at around 1 in the morning.
The PROBLEM is basically only happening because of the size of the particles' hit boxes. I can't change the size of their hit boxes because doing that caused problems with wall and arrow collision detection. Sometimes particles would pass right over an arrow without changing direction, or get bumped into the wrong row or column instead of following the arrow. (They also tended to bounce off walls before turning if the hit boxes were too small, but as far as I could tell this bug was purely cosmetic.)
So I can't change the hit boxes...
I can't...permanently...change the hit boxes...
Can I TEMPORARILY change them?
Long story short, the answer is probably "yes," but I didn't actually end up having to go quite that far. Rather than trying to adjust the Anti's hit box on the fly, I thought "Why can't I just make a separate object and have it ACT like a hit box?"
I can make this secondary hit box ONLY check for collisions with Regs, which means I CAN adjust its size without breaking anything!
It took a fair bit more experimenting than I expected, but I eventually got it all sorted out. Each Anti creates its own secondary hit box, and each hit box stays perfectly centered over the Anti that created it regardless of where it moves (even through nanotubes.)
From there it was a simple matter of removing any code related to Reg collision from the Antis (including the remnants of the I-frame and HP attempted fixes), and telling the Regs to trigger the fail state if they collide with an Anti's secondary hit box rather than the Anti itself!
After extensive testing, I have not been able to force the turning bug to happen again, so I think I've actually got it this time!
I just need to see how much of a pain in the butt it's going to be to update the level maker...