soong-construction / dirt-rally-time-recorder

Stage time recorder for DiRT Rally [2.0]
Other
18 stars 2 forks source link

Use heuristics to resolve ambiguities in UDP car data #25

Closed maxbechtold closed 4 years ago

maxbechtold commented 4 years ago

By including the top gear of each car (cf. https://github.com/soong-construction/dirt-rally-time-recorder/releases/tag/v2.5.1), only a few pairs of ambiguous cars remain.

Most of these pairs can be told apart by their gearbox. It is either sequential or H-pattern. In the latter case, the timerecorder could test for non-sequential gear changes (e.g. 4>2 or 3>R). If any occur till the end of a stage, this indicates H-pattern shifting and it would be safe to assume which car was driven (disregarding substantial drop-outs in UDP telemetry).

In the case an H-pattern vehicle is driven without skipping gears or with the game configured to use sequential shifting instead, no false assumption is made.

Originally posted by @maxbechtold in https://github.com/soong-construction/dirt-rally-time-recorder/issues/12#issuecomment-599596544

maxbechtold commented 4 years ago

Two pairs in DiRT Rally 2.0 will still not be distinguishable by the described heuristics:

In these cases, a heuristics that picks one of the cars and sticks to it if the next stage shows the same UDP car data is benefitial for some reasons:

maxbechtold commented 4 years ago

For DiRT Rally, 3 pairs are indistinguishable:

It could also be possible to try and identify RWD cars by interpreting UDP wheel/axle data, but this could only apply to one pair of each game.

fenugrec commented 4 years ago

Interesting approach. I'm an odd data point though : I use H-pattern with every car regardless of its default style !

maxbechtold commented 4 years ago

Curious, @ErlerPhilipp mentioned that he's only using sequential mode. Perhaps I'm the odd one here :) I made the gear-shift heuristics opt-in.

I hope to publish a version including heuristics next weekend, maybe you want to try it out. Even the base heuristics which picks one car by chance should suit you, as it will create one update script instead of two for ambiguities.

ErlerPhilipp commented 4 years ago

@maxbechtold There is no other option when using a gamepad :( I'll check it out then. I wanted to try your tool anyway.

maxbechtold commented 4 years ago

@ErlerPhilipp @fenugrec I released v2.7.0 with the new heuristics, adapted to your suggestions. Feel free to try it out and give feedback!

I'm also playing around with another heuristics where the user can "signal" dirt-rally-time-recorder from in-game which car s/he chose. Edit: #41

ErlerPhilipp commented 4 years ago

i have the first error case. here is the output from the time recorder:

TRACK: Camino a La Puerta
Ambiguous car data, 2 matches
Mitsubishi Lancer Evolution VI: H-PATTERN shifting, 6 speed, with HANDBRAKE
BMW M2 Competition: SEQUENTIAL shifting, 6 speed, with HANDBRAKE
Guessing car...
CAR: Mitsubishi Lancer Evolution VI
If heuristics-based guess IS WRONG, RUN THE SCRIPT provided to fix the recorded car:
 ==> 1589311053_CaminoaLaPuerta_BMWM2Competition.bat
Completed stage in 06:51.820.

It actually was the BMW M2. I'm playing with gamepad and manual sequential shifting. I guess, the heuristic should be able to find this case. I uploaded the run logged with my tool: gdrive You can open it with my tool or simply with numpy.load() and see if you can find a reason for the wrong heuristic.

maxbechtold commented 4 years ago

I opened a separate issue for this, let's follow up there: #40

maxbechtold commented 4 years ago

For anyone following the recently released user signals could be interesting for you.

These should go a long way in resolving ambiguities, and users should rarely need to go to the installation folder to run update scripts. Since I don't see any other helpful heuristics, I'll close this issue. Feel free to comment though.