What is cutters?
A simple app by Minolin that tries to detect cuts in a progressive manner and displays the current top 3 cutters. Only you need the app to see all the other players.
May people dislike the 5s penalty for various reasons. Some MP-server shut it off, but then you have serious and sometimes stealthy cutters. This apps detects them, so you can vote "yes" or kick them (server admin option).
Of course kunos will deliver a better system - this is all I could contribute myself.
Darcy Callai Junior started a thread about a progressive penalty system as an enhancement or replacement of the current 5s penalty. I highly recommend reading this if you didn't. We have a lot interesting and detailed ideas and opinions there.
Almost every technical answer shared one of two weaknesses: They wouldn't either hurt accidents or require a *lot* technical changes. This inspired me to work out an idea about a basic detection and a rating as output, that could be interpreted by humans.
How does it work?
Some "redlines" are defined in this app. If a player crosses this redline, a rating for this specific cut is calculated (and saved for this player).
In theory, a minor and/or accidential cut will have a low rating, maybe 1-2. A "well" executed cut at e.g. Monza with a real advantage can easily reach rating values above 15 in one cut. Try cut every corner in spa and you got 50+ rating in one lap.
So my hope is that the "real" cutter can't hide, because his numbers will explode soon - and no one will ever be kicked innocent.
Let's have one detailed example at the NGK chicane @ nurburgring. Basically we define two points which define a Redline. The redline is a line that is usually never crossed by players except they a) do this accidentially or b) cut intentionally. See the next Spoiler for more details. Let's have a figure:
You can see the usual race line (green), the redline (red) and both points (red crosses).
The app will now permanently compare all players current world position with the last known position. Both together also form a line, let's call this car line (dark blue). We do this *very* often, so the car line will be quite short. To each car line the algorithm will calculate, wether a given car line crosses any of the loaded redlines.
If this is the case, this is a cut. Now the rating calculation kicks in to help us get a feeling, if this was intentional. The distance between the intersection point and the inner Point is calculated, which completes the formula inputs. Btw that's why it's very important not to mix inner and outer coordinates.
The formula basically merges
- the car's speed (reduced by 50 km/h, so no rating at low speed)
- the distance intersection // innerPoint
to a rating.
Why speed and distance? Let's return to a) and b). Either we have a cutter, or an accident. An accident will hopefully be slower at any given point. You can lock your brakes (aha, you braked!) or get bumped (often sideways), but you wouldn't be as fast as somebody, who tries to optimize this corner.
Then cutters tend to cross the redline further away than most accidents. In this chicane, most people I see are rumbling around the curbs, when they didn't get that corner right.
So bottom line: The formula tries to multiply both, so you have to score in both to get some serious rating. This is what a accidential cut not very often achieves.
How did I define the redlines? Well, very little magic involved here. Had a little app that shows world x,y,z and drove around. I'm almost sure there is a kunos app with world coordinates as well.
Then I would drive to a cuttable corner's apex and park where my guts say "this is clearly out of the track" - and write down the displayed world x and z (y is up/down in 3D) as inner Point:
Then the same for the outer point. You can play with the angle of the line. If you're afraid of locked brakes, point a bit more to the exit. In this case I didn't because recovery is very easy once you feel the tarmac of the other chicane variant, so exit speeds will be higher even after accidental cuts.
Now we have 4 values = 2 points. Since v5 we can easily drop these in a csv file named by the track like this:
(This was #2, we just added this line).Code:corner;innerX;innerZ;outerX;outerZ;weight NGK Schikane 1;-189.27662;-758.61755;-228.63533;-762.16210;1.0 NGK Schikane 2;-196.87178:-786.94909;-129.29010;-827.55871;1.0
How to install this?
Unzip the attached 'cutters.zip' to your [...]\Steam\SteamApps\common\assettocorsa\apps\python folder.
Allow this app in the AC main menue. Open the display via the app bar (mouse to the right), mitght be near the bottom.
Bonus: Edit the cuttersSettings.py inside the cutters folder for window size and rating threshold.
What does currently work?
In Version 6 we have
- a cut detection for all players,
- display for the top 3 cutters (order by total rating)
-- total rating
-- last single rating
-- last cut corner
-- average rating / corner
- a reset button
- imola cuts defined: Variante del Tamburello, Variante Villeneuve, Acque Minerali, Variante Alta
- monza: Prima Variante, Variante della Roggia, Variante Ascari
- mugello cuts defined: Biondetti, Biondetti2
- norschleife snoopy: Adenauer Forst
- nurburgring gp / sprint: NGK Schikane
- silverstone: Club Corner, Farm Curve, The Loop, Becketts Corner
- silverstone-international: Club Corner, Farm Curve, The Loop, Becketts Corner
- spa: Raidillon, Eau rouge, Combes, Fagnes, Chicane1, Chicane2, Chicane3
- vallelunga + club: Semaforo
What does cutters not want to deliver?
- automatic systems. cutters might be an aide to you, but we'll need your brain
- pendantic rule system. We seek the big fishes, not the one who left the street by 0.2cm
- anything that leads to kicking people who didn't deserve that
Why "cutters" and not "wreckers"?
Technical limitations. I'd loved to do the same for the wreckers, but it's probably not detectable - opposed to cuts. I'll try my best when we're done here.
A.r.e.s for the motivation
ferito for awesome apps and code snippets
Everybody who tested and contributed
Hagen for supporting this so I can go on with the next one