I did about 6 races at Tokyo today, saw
@Dairyworker win one, congrats! It might have been clean at the front, none of my races were clean from the back. Some food for penalty analysis.
First the classic, just turn in on a car if you don't want them to pass.
Plenty room to go side by side there. Bumping a car into a wall doesn't count anymore, yet he was slightly ahead at contact, then fell back after bouncing off me, thus penalty from me.
Next, the car ahead doesn't make it clear if he wants to defend the inside or outside, swerves over to the outside, slight contact occurs.
Harmless in itself, however I let a dive bomber through, thus briefly lose a position and the car ahead gets a penalty.
He decides to take revenge after he messes up the final turn and I pass him
Ramming someone into a wall doesn't count anymore, nothing added to his penalty time. I do lose a position but apparently outside the time window.
Not satisfied or just being an idiot, he punts another car into me at the docks tapping a third car in the process
I lose 3 positions, regain one from the unlucky missile, all 3 of them end up with penalties while there was only one real culprit. The 2 sec penalties don't do anything at the penalty zone and the dirty driver would have successfully gained 3 spots if it weren't for the fact that the unlucky 3rd didn't get to serve the penalty until the next lap. Since the dirty driver already had a penalty it got added to the 1 sec he was already going to serve negating the effectiveness of the second penalty. He still made up two spots while the unlucky missile got off worst.
Now how to fix this mess. Instead of some arbitrary time between contact and checking for a car going off track or losing a position, the game needs to look at the position on the track.
If contact occurs in a braking zone:
- If the resulting speed after collision of the car ahead is such that they can still easily make the corner -> harmless contact
- If not and the car ahead goes wide in the corner or loses a position -> penalty for car behind
If contact occurs in a corner
- If both cars have a reasonable chance to make the corner normally with their vectors before and after collision -> harmless contact.
- If one car is going too fast, is far off any reasonable line, or is sliding sideways -> penalty for the out of control car.
- If one car is squeezing the other outside track limits, against a wall, or turns in too much with a car alongside -> penalty for not leaving room
- If one car was behind at turn in and gets out ahead after contact while the car losing position was in full control before contact -> penalty for barge pass
If contact occurs on a straight
- If the car ahead is within normal speed, driving straight and not braking, car behind is at fault
- If one car swerves right before contact or brakes with nothing ahead to avoid, car ahead is at fault
All else warning for both.
Would this be so hard to implement? The game knows what speed what car drives on each track or can easily calculate that for the upcoming races. The AI is not perfect but can navigate the tracks pretty well, use that to determine each participants chances to make a corner. The rest is simply comparing orientation of cars at collision and looking at the position on the track with regards to the track limits. Perhaps chicanes need some extra evaluation.
Only looking at whether a car leaves the track or loses a position within x seconds is too simple and again too easy to game. And when there is any doubt, both cars get a warning.