Jump to content Jump to content

F1 2020 UDP Specification


Hoo
 Share

Recommended Posts

17 hours ago, LonelyRacer said:

I did few years ago a "league admin" version of my tool, where I collected statistics of key parameters of the cars and then displayed them in a way, which let league admins to check, if people were using cheats. This included odd g-forces, odd tire wear values, odd ERS usage etc. But this work got bit of a cold shower, when in F1 2019 and F1 2020 the telemetry data got mostly hidden, unless a person makes it available. You can still do some of that stuff (and my tool is still doing that), but it is bit harder, when you e.g. don't get the fuel usage and tire wear data from the other cars.

Cheers.

good morning i also have a league www.plf1.com.br is a totally free league,
 it is mandatory to make public the telemetry data to play in our league
 and run applications that are requested by the administrators. 
I know that players use a cheat engine to access the data 
in the memory and inject data to increase the car's grip, 
can you make your code available to me ?,
 so I gain time in creating mine, another doubt will we be able to 
do something to detect this change directly in memory by installing
 some application on the client for detection?

 

 

thanks

 

 

 
 
 
  

image.png

Link to comment
Share on other sites

  • 2 weeks later...

Hey guys,

i am writing an application to save race data to display them on a website.

Does anyone receives other m_tractioncontrol values then 0 and 2 in car status packets? Here there is only full and none TC and i think it's a bug.

Thanks in advance.

Link to comment
Share on other sites

Hello,
for the 2021 release would it possible to have m_tyresAgeLaps public?

Since 2020 it's shown in the spectator menu, so it would make sense to have this property public also to telemetry data

thanks!

Edited by emln22
Link to comment
Share on other sites

  • Codemasters Staff

Sorry - I probably need to update the original doc.

74

Dams ‘20

75

Uni-Virtuosi ‘20

76

MP Motorsport ‘20

77

Prema ‘20

78

Trident ‘20

79

BWT ‘20

80

Hitech ‘20

  • Thanks 1
Link to comment
Share on other sites

  • Codemasters Staff
33 minutes ago, cjorgens79 said:

Hi @Hoo, just wondering if there has been any movement on the whole player names GDPR thing?

Thanks

It's still disabled in game, but is actively being discussed at the moment. 

  • Thanks 1
  • Agree 1
Link to comment
Share on other sites

On 3/25/2021 at 8:36 PM, Hoo said:

Sorry - I probably need to update the original doc.

74

Dams ‘20

75

Uni-Virtuosi ‘20

76

MP Motorsport ‘20

77

Prema ‘20

78

Trident ‘20

79

BWT ‘20

80

Hitech ‘20

Thank you so much! It would be super useful if you could either update the original post, or share the full team ID table here. As an example, I'm a bit confused by what the other F2 '20 IDs are. Thank you in advance, I really appreciate the support 🙌 

Link to comment
Share on other sites

On 3/20/2021 at 1:36 PM, Neospin_ said:

Hey guys,

i am writing an application to save race data to display them on a website.

Does anyone receives other m_tractioncontrol values then 0 and 2 in car status packets? Here there is only full and none TC and i think it's a bug.

Thanks in advance.

Hey there,

does nobody use this field?

Link to comment
Share on other sites

3 hours ago, Neospin_ said:

Hey there,

does nobody use this field?

I am using it and haven't seen any problems so far. Maybe a bug in your code? It is hard to say without any of your code to look at. Can of course also be a bug in the game on whichever platform you're playing on.

Link to comment
Share on other sites

On 3/27/2021 at 1:03 PM, cgfdoo said:

I am using it and haven't seen any problems so far. Maybe a bug in your code? It is hard to say without any of your code to look at. Can of course also be a bug in the game on whichever platform you're playing on.

Hey there,

thanks for your answer.
I am on PC, and i don't see any value with medium tractioncontrol even in raw data.
So i think its a bug. Are you on PC and can confirm?

Thanks in advance

Link to comment
Share on other sites

Hi - two things you can maybe help with?

1. where can I find the official track map data? 

2. how long and wide is the car using the worldPosition XZ scale? Presumably that point is the centre of the car seen from above? 

Link to comment
Share on other sites

  • 3 weeks later...
1 hour ago, MrViSiOn said:

Hi!

I've been reading documentation and I didn't see any field about session or "in-menu" game. How can I "know" if we are in session (driving our car) or other part of the game (menu, my team, etc)?

 

Thank you

The m_driverStatus field of the LapData packet will tell you the status of the car (in garage, flying lap, in lap, out lap, on track) and the m_gamePaused field of the Session Data packet will tell you whether the game is currently paused.

Link to comment
Share on other sites

2 hours ago, cgfdoo said:

The m_driverStatus field of the LapData packet will tell you the status of the car (in garage, flying lap, in lap, out lap, on track) and the m_gamePaused field of the Session Data packet will tell you whether the game is currently paused.

Oh thank you, I will check that info!

Link to comment
Share on other sites

Just now, Kafumanto said:

Hi @Hoo,

accordingly to @BarryBL it appears that a beta program for F1 2021 is not confirmed at this time. If an official beta will not be run this time, I hope some sort of closed beta for devs working on third-party tools could be planned to give us the opportunity to have integrations ready on day-one.

Would definitely be cool, I would even be fine with only getting updated docs for the fields ahead of time to be honest, that would at least allow us to write some of the code ahead of time - anyways, there is still plenty of time until July to run a (public) beta program so I wouldn't sweat it just yet.

Link to comment
Share on other sites

Just now, Kafumanto said:

Hi @Hoo,

accordingly to @BarryBL it appears that a beta program for F1 2021 is not confirmed at this time. If an official beta will not be run this time, I hope some sort of closed beta for devs working on third-party tools could be planned to give us the opportunity to have integrations ready on day-one.

I want be part of the beta program.  but the beta program is not here to help you to have your program ready, but it's made to be sure they will have NO bugs.

We have some bugs on telemetry and we need beta to fix them. (last bug found, the traction control never display intermediate, only full or off)

I was already angry against some of you who are selfish on beta 2020 and think more to their app than to found bug. So please. Think for the developer's community  before think to your personnal app.

Thanks

  • Disagree 1
Link to comment
Share on other sites

13 hours ago, ThibaudPHP said:

I want be part of the beta program.  but the beta program is not here to help you to have your program ready, but it's made to be sure they will have NO bugs.

We have some bugs on telemetry and we need beta to fix them. (last bug found, the traction control never display intermediate, only full or off)

I was already angry against some of you who are selfish on beta 2020 and think more to their app than to found bug. So please. Think for the developer's community  before think to your personnal app.

Thanks

Last time I checked it was mutually beneficial for the Codemasters devs to have third party app developers testing and consuming updates to the UDP data during beta?
We have found and reported many bugs in the data for all the betas I've been involved in since 2017. Bugs remain in the data usually due to lack of time and resources for them to be fixed not due to lack of reporting.

Also the developers community includes users of our apps many of whom expect our apps to be ready and working with the games release on day 1.
This isn't going to happen if we don't get early access to the structure. Not sure how this is selfish?

  • Agree 1
Link to comment
Share on other sites

+1 for this answer, such a thing is always mutually beneficial. We find bugs while developing and our programs may bring more people to the game or keep them here longer. But nowadays game devs tend to give influencers earlier access than 3rd party devs 🤷‍♂️

On another note, here are the additional IDs for F2 2020 that @Hoo was unable to add to the docs yet:

Teams:

	70:  ART Grand Prix
	71:  Campos Racing
	72:  Carlin
	73:  Charouz Racing System
	74:  DAMS
	75:  UNI-Virtuosi Racing
	76:  MP Motorsport
	77:  Prema Racing
	78:  Trident
	79:  BWT HWA Racelab
	80:  Hitech Grand Prix

Drivers:

	91:  Dan Ticktum
	92:  Marcus Armstrong
	93:  Christian Lundgaard
	94:  Yuki Tsunoda
	95:  Jehan Daruvala
	96:  Guilherme Samaia
	97:  Pedro Piquet
	98:  Felipe Drugovich
	99:  Robert Shwartzman
	100: Roy Nissany
	101: Marino Satō

Visual Tyre Compound:

	23: supersoft
	24: soft
	25: medium
	26: hard

 

  • Thanks 1
Link to comment
Share on other sites

12 hours ago, e1smann said:

+1 for this answer, such a thing is always mutually beneficial. We find bugs while developing and our programs may bring more people to the game or keep them here longer. But nowadays game devs tend to give influencers earlier access than 3rd party devs 🤷‍♂️

On another note, here are the additional IDs for F2 2020 that @Hoo was unable to add to the docs yet:

Teams:


	70:  ART Grand Prix
	71:  Campos Racing
	72:  Carlin
	73:  Charouz Racing System
	74:  DAMS
	75:  UNI-Virtuosi Racing
	76:  MP Motorsport
	77:  Prema Racing
	78:  Trident
	79:  BWT HWA Racelab
	80:  Hitech Grand Prix

Drivers:


	91:  Dan Ticktum
	92:  Marcus Armstrong
	93:  Christian Lundgaard
	94:  Yuki Tsunoda
	95:  Jehan Daruvala
	96:  Guilherme Samaia
	97:  Pedro Piquet
	98:  Felipe Drugovich
	99:  Robert Shwartzman
	100: Roy Nissany
	101: Marino Satō

Visual Tyre Compound:


	23: supersoft
	24: soft
	25: medium
	26: hard

 

I didn't check everything, but in my experience, driver #100 is used to represent the player in My Team mode. Figured it out when I witnessed I was appearing as Roy Nissany when playing in My Team mode using my telemetry app :)

Could #100 be used to mean different drivers depending on the context? That would not be cool since I'm not sure the type of game (career, My Team, championship etc.) can be inferred from the raw telemetry data...

Link to comment
Share on other sites

Hi, I just started to play around with the data you receive from the game. I wonder if there is a possibility to show the delta of the current lap to the session fastest.

Like in TT in the game but also for other sessions e. g. race.

Link to comment
Share on other sites

On 11/13/2020 at 2:00 PM, codeslave said:

So for sure the first proposed solution remain the best, with somes improvement (array in place of multiple declarations).

 


struct PacketHeader
{
    uint16_t    m_packetFormat;             // 2020
    uint8_t     m_gameMajorVersion;         // Game major version - "X.00"
    uint8_t     m_gameMinorVersion;         // Game minor version - "1.XX"
    uint8_t     m_packetVersion;            // Version of this packet type, all start from 1
    uint8_t     m_packetId;                 // Identifier for the packet type, see below
    uint16_t    m_sessionUID[4];            // Unique identifier for the session
    uint16_t    m_sessionTime[2];           // Session timestamp
    uint16_t    m_frameIdentifier[2];       // Identifier for the frame the data was retrieved on
    uint8_t     m_playerCarIndex;           // Index of player's car in the array
   // ADDED IN BETA 2: 
    uint8_t     m_secondaryPlayerCarIndex;  // Index of secondary player's car in the array (splitscreen)
};

struct CarTelemetryData
{
    uint16_t    m_speed;                         // Speed of car in kilometres per hour
    uint16_t    m_throttle[2];                   // Amount of throttle applied (0.0 to 1.0)
    uint16_t    m_steer[2];                      // Steering (-1.0 (full lock left) to 1.0 (full lock right))
    uint16_t    m_brake[2];                      // Amount of brake applied (0.0 to 1.0)
    uint8_t     m_clutch;                        // Amount of clutch applied (0 to 100)
    int8_t      m_gear;                          // Gear selected (1-8, N=0, R=-1)
    uint16_t    m_engineRPM;                     // Engine RPM
    uint8_t     m_drs;                           // 0 = off, 1 = on
    uint8_t     m_revLightsPercent;              // Rev lights indicator (percentage)
    uint16_t    m_brakesTemperature[4];          // Brakes temperature (celsius)
    uint8_t     m_tyresSurfaceTemperature[4];    // Tyres surface temperature (celsius)
    uint8_t     m_tyresInnerTemperature[4];      // Tyres inner temperature (celsius)
    uint16_t    m_engineTemperature;             // Engine temperature (celsius)
    uint16_t    m_tyresPressure[8];              // Tyres pressure (PSI)
    uint8_t     m_surfaceType[4];                // Driving surface, see appendices
};

struct PacketCarTelemetryData
{
    PacketHeader      m_header;           // Header

    CarTelemetryData  m_carTelemetryData[22];

    uint16_t          m_buttonStatus[2];  // Bit flags specifying which buttons are being pressed
                                          // currently - see appendices

    // Added in Beta 3:
    uint8_t           m_mfdPanelIndex;    // Index of MFD panel open - 255 = MFD closed
                                          // Single player, race – 0 = Car setup, 1 = Pits
                                          // 2 = Damage, 3 =  Engine, 4 = Temperatures
                                          // May vary depending on game mode
    uint8_t           m_mfdPanelIndexSecondaryPlayer;   // See above
    int8_t            m_suggestedGear;    // Suggested gear for the player (1-8)
                                          // 0 if no gear suggested
};

#include <WiFi.h>
#include <WiFiUdp.h>

static const int servoPin = 13;

const char* ssid = "XXXXXXXXXX";
const char* password =  "XXXXXXXXXX";

WiFiUDP Udp;
unsigned int localUdpPort = 20777;  // local port to listen on

WiFiClient espClient;
 
void setup() {
  Serial.begin(115200);
  
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");
 
  Udp.begin(localUdpPort);
  Serial.println(sizeof(PacketHeader));
  Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);
  delay(2000);
}
 
void loop() {
 int packetSize = Udp.parsePacket();
  
  //If we received something.
  if(packetSize) {
       char packetBuffer[packetSize];
       //Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
       Udp.read(packetBuffer, packetSize);
       
         
       int idPacket = int(packetBuffer[5]);
 //    Serial.printf(" %d",idPacket);
       if (idPacket==6){
          PacketCarTelemetryData *tmp_pckt = (PacketCarTelemetryData *) packetBuffer;
          
          Serial.printf("%u %u %u %u %u %u %u %u %u %u speed %d acc %f \n",tmp_pckt->m_header.m_packetFormat,
                                                  tmp_pckt->m_header.m_gameMajorVersion,
                                                  tmp_pckt->m_header.m_gameMinorVersion,
                                                  tmp_pckt->m_header.m_packetVersion,
                                                  tmp_pckt->m_header.m_packetId,
                                                  tmp_pckt->m_header.m_sessionUID[0],
                                                  tmp_pckt->m_header.m_sessionTime[0],
                                                  tmp_pckt->m_header.m_frameIdentifier[0],
                                                  tmp_pckt->m_header.m_playerCarIndex, 
                                                  tmp_pckt->m_header.m_secondaryPlayerCarIndex,
                                                  tmp_pckt->m_carTelemetryData[tmp_pckt->m_header.m_playerCarIndex].m_speed,
                                                  *(float *)&tmp_pckt->m_carTelemetryData[tmp_pckt->m_header.m_playerCarIndex].m_throttle[0]
                                                  );
         }
       }
  }

 

 

 

Let me know if the solutions proposed solve your problem and I will appreciate tips.

 

Bye

I know the post is old but i wanna say that the solution proposed by codeslave is working ! Thank you a lot. I also tried to replicate the same thing with te carStatusData but with no result. I added this piece of code

 else if (idPacket==7){

  PacketCarStatusData *tmp_pckt2 = (PacketCarStatusData *) packetBuffer;
          
          Serial.printf("%u %u %u %u %u %u %u %u %u %u traction %u antilock %u fuelmix %u \n",tmp_pckt2->m_header.m_packetFormat,
                                                  tmp_pckt2->m_header.m_gameMajorVersion,
                                                  tmp_pckt2->m_header.m_gameMinorVersion,
                                                  tmp_pckt2->m_header.m_packetVersion,
                                                  tmp_pckt2->m_header.m_packetId,
                                                  tmp_pckt2->m_header.m_sessionUID[0],
                                                  tmp_pckt2->m_header.m_sessionTime[0],
                                                  tmp_pckt2->m_header.m_frameIdentifier[0],
                                                  tmp_pckt2->m_header.m_playerCarIndex, 
                                                  tmp_pckt2->m_header.m_secondaryPlayerCarIndex,
                                                  tmp_pckt2->m_carStatusData[tmp_pckt2->m_header.m_playerCarIndex].m_tractionControl,
                                                  tmp_pckt2->m_carStatusData[tmp_pckt2->m_header.m_playerCarIndex].m_antiLockBrakes,
                                                  tmp_pckt2->m_carStatusData[tmp_pckt2->m_header.m_playerCarIndex].m_fuelMix
                                                  //*(float *)&tmp_pckt2->m_carStatusData[tmp_pckt2->m_header.m_playerCarIndex].m_throttle[0]
                                                  );


                                                  Serial.println(tmp_pckt2->m_carStatusData[tmp_pckt2->m_header.m_playerCarIndex].m_fuelMix);

       
  }  

Can someone please tell me why its not working? it gives me all zerso for the values of traction, antilock and fuelmix

Link to comment
Share on other sites

On 4/24/2021 at 2:27 PM, Poulpix said:

I didn't check everything, but in my experience, driver #100 is used to represent the player in My Team mode. Figured it out when I witnessed I was appearing as Roy Nissany when playing in My Team mode using my telemetry app 🙂

Could #100 be used to mean different drivers depending on the context? That would not be cool since I'm not sure the type of game (career, My Team, championship etc.) can be inferred from the raw telemetry data...

Yeah you're right. Also in multiplayer 101, 102 etc are used for other players. Not a smart move from the game devs, but you can separate them pretty good. In my code I have some conditionals which don't look pretty, but work fine for me:

- if AI controlled lookup name by driver ID
- if it's a local game (e.g. My Team) use the Name in the Participants packet - but this is uppercase, so with first & last name you have to handle it correctly (which I don't do yet)
- if it's a network game just use "Player {ID}" (how can it take so long to just send the username in telemetry data?)

Hope this helps!

@luis8h In the event packet you can select "Fastest lap" events, store the time and compare it to other lap times afterwards.

  • Agree 1
Link to comment
Share on other sites

16 hours ago, Tempo1o1 said:

I know the post is old but i wanna say that the solution proposed by codeslave is working ! Thank you a lot. I also tried to replicate the same thing with te carStatusData but with no result. I added this piece of code


 else if (idPacket==7){

  PacketCarStatusData *tmp_pckt2 = (PacketCarStatusData *) packetBuffer;
          
          Serial.printf("%u %u %u %u %u %u %u %u %u %u traction %u antilock %u fuelmix %u \n",tmp_pckt2->m_header.m_packetFormat,
                                                  tmp_pckt2->m_header.m_gameMajorVersion,
                                                  tmp_pckt2->m_header.m_gameMinorVersion,
                                                  tmp_pckt2->m_header.m_packetVersion,
                                                  tmp_pckt2->m_header.m_packetId,
                                                  tmp_pckt2->m_header.m_sessionUID[0],
                                                  tmp_pckt2->m_header.m_sessionTime[0],
                                                  tmp_pckt2->m_header.m_frameIdentifier[0],
                                                  tmp_pckt2->m_header.m_playerCarIndex, 
                                                  tmp_pckt2->m_header.m_secondaryPlayerCarIndex,
                                                  tmp_pckt2->m_carStatusData[tmp_pckt2->m_header.m_playerCarIndex].m_tractionControl,
                                                  tmp_pckt2->m_carStatusData[tmp_pckt2->m_header.m_playerCarIndex].m_antiLockBrakes,
                                                  tmp_pckt2->m_carStatusData[tmp_pckt2->m_header.m_playerCarIndex].m_fuelMix
                                                  //*(float *)&tmp_pckt2->m_carStatusData[tmp_pckt2->m_header.m_playerCarIndex].m_throttle[0]
                                                  );


                                                  Serial.println(tmp_pckt2->m_carStatusData[tmp_pckt2->m_header.m_playerCarIndex].m_fuelMix);

       
  }  

Can someone please tell me why its not working? it gives me all zerso for the values of traction, antilock and fuelmix

Can you put all the code? How did you declare PacketCarStatusData? Why did you omit *(float *)& ... ?The variables has to be such an array .. I think you have missed something.

Edited by codeslave
Link to comment
Share on other sites

On 4/25/2021 at 11:45 PM, e1smann said:

@luis8h In the event packet you can select "Fastest lap" events, store the time and compare it to other lap times afterwards.

Thank you for your answer, but I mean sonething else (sorry for explaining it a bit bad😅). 
I want to calculate the delta live, so you see while driving a lap, how fast you are compared to another. E. g. You drive trough a turn and know instantly if you did it better or not as good as in the other lap.

Another thing that would be interesting for me is, how to calculate the delta to the driver in front in a race.

Sorry for these basic questions, but I am completely new to this stuff😁

Link to comment
Share on other sites

14 hours ago, luis8h said:

Thank you for your answer, but I mean sonething else (sorry for explaining it a bit bad😅). 
I want to calculate the delta live, so you see while driving a lap, how fast you are compared to another. E. g. You drive trough a turn and know instantly if you did it better or not as good as in the other lap.

Another thing that would be interesting for me is, how to calculate the delta to the driver in front in a race.

Sorry for these basic questions, but I am completely new to this stuff😁

read first pages of this topic. and use search function next time. people ask this one by month almost

Link to comment
Share on other sites

I already searched in Google and in the Forum but I found nothing about the delta...

The problem is, that at the first page I could not find a value like delta. I think to calculate this you need to use x and y position in connection to the time of the current lap and the lap which is used as reference. That makes it very complicated to calculate and I thought there would maybe be a formula for this.

Or is there another trick to make it more simple, maybe I just think to complicated...

Link to comment
Share on other sites

7 minutes ago, ThibaudPHP said:

LOL

Lying is bad and boring.

https://forums.codemasters.com/search/?q=delta &amp;type=forums_topic&amp;item=50942

 

And go read this message who is PAGE 1 of this topic...

 

*** i am very sorry...

I swear I searched after it, but it showed completely difrent solutions...

maybe I did something weong in the filter but I don‘t know what.

But anyway thank you for the link. This schould help me out.

Link to comment
Share on other sites

20 hours ago, Hoo said:

 

Thanks @Hoo. I have applied for the beta however I noticed there was nowhere to indicate that I was signing up with the primary purpose of testing the updated telemetry api, hopefully this gets taken into consideration when deciding who gets access to the beta. Cheers

Link to comment
Share on other sites

1 minute ago, cjorgens79 said:

Thanks @Hoo. I have applied for the beta however I noticed there was nowhere to indicate that I was signing up with the primary purpose of testing the updated telemetry api, hopefully this gets taken into consideration when deciding who gets access to the beta. Cheers

I create a post on the topic to said that i want be part for the telemetry. i invite you to do the same. I hope it can increase our chance to be taken to explain on the topic why we apply ;)

Link to comment
Share on other sites

  • Codemasters Staff

If any regular contributors to this UDP thread have applied to the beta then please send me a PM and I will pass on your details to the "Beta Application Review Committee" for consideration. 

  • Like 1
  • Agree 6
Link to comment
Share on other sites

@Hoo

I know you must be quite far into the development, but here is the list I promised containing some items I would like to see fixed/changes (hopefully maybe even before the BETA hits the road), which would make life easier for the tool devs.

1) No enum value 0: All places, where there is an enum (e.g. like with Team IDs), can you alter them so, that 0 is never valid value (e.g. with TeamID, Mercedes' ID would be something else than 0 and same in driverIds for Carlos Sainz). Now e.g. if there is no data in some packets, the data sent out is 0, so it becomes hard to see, if the data is missing or if the data is for the ID with 0. Would make the life of the developers so much easier.

2) Tyre wear as floats. Now the tyre wear is an int, which has forced me and other developers to build systems to estimate tyre wear from those int values with lapdistance. But e.g. in the tyre wear practice session the tyre wear values shown by the game are floats, not ints, so it is hard to add proper tyre wear analysis as shown in the game into our tools.

3) DriverIDs are now conflicting. In some mode the player car ID is reported as 100, but in the 2020 F2 driver list there is now drivers with ID 100 and 101 and 100 and 101 are driver IDs e.g. in league racing.

4) TC is either 0 or 2. This is the issue which was raised earlier and has been in the game, since the TC values have been reported. I.e. in the game there are 3 different TC modes, but the UDP only reports it either 0 or 2. Would be great to see this set that the proper values are shown.

Bugs/issues in F1 2020 and older:

Laptime for Quali inlap. At least in F12020, when a player drives back to pit after quali lap, the game reports for the inlap as last laptime from the previous quali lap. So the time is not from the inlap. Again this little thing forces the devs to look at, if a lap in quali session ends in pits, after which the laptime must be "guessed"/calculated. If one relies on the laptime sent by the game, the data will be bad.

Lapdata for Ghost. In F1 2018 and F12019 in Time Trial the LapData contained the lapdistance data etc. for the Ghost. This was removed from F12020, which made it pretty hard to get the proper data for the Ghost for comparison purposes. I would like to see the Ghost's LapData, at least laptime, times + lapdistane, but preferably all the data to be added back.

Cheers

Edited by LonelyRacer
Just fixed a typo
  • Agree 3
Link to comment
Share on other sites

  • Codemasters Staff
On 5/2/2021 at 11:20 AM, LonelyRacer said:

@Hoo

I know you must be quite far into the development, but here is the list I promised containing some items I would like to see fixed/changes (hopefully maybe even before the BETA hits the road), which would make life easier for the tool devs...

Thanks for these. Here's a quick response on the issues that you posted:

1) No enum value 0. As this is based on the data coming directly from the game, this isn't an easy thing for us to change without reorganising the game data itself (which we can't do at this stage). As such, we will leave this as it is, unless we can find another way to flag valid / invalid values containing 0.

2) Tyre wear as floats. We will change this to floats.

3) DriverIDs are now conflicting. We understand the issue, but aren't yet sure how we can fix it as it again ties in with other data coming from the game. We will need to consider this issue further.

4) TC is either 0 or 2. We've logged a bug to investigate this. I'm assuming that medium TC (value = 1) is the one not coming through correctly.

Laptime for Quali inlap. Again, the data just reflects what the game itself does (discards inlaps from the results), so not sure we can fix this with the telemetry system. We've logged this issue for further investigation.

Lapdata for Ghost. We will revert this back to the 2019 implementation as suggested.

 

  • Thanks 1
  • Agree 1
Link to comment
Share on other sites

25 minutes ago, Hoo said:

Thanks for these. Here's a quick response on the issues that you posted:

1) No enum value 0. As this is based on the data coming directly from the game, this isn't an easy thing for us to change without reorganising the game data itself (which we can't do at this stage). As such, we will leave this as it is, unless we can find another way to flag valid / invalid values containing 0.

2) Tyre wear as floats. We will change this to floats.

3) DriverIDs are now conflicting. We understand the issue, but aren't yet sure how we can fix it as it again ties in with other data coming from the game. We will need to consider this issue further.

4) TC is either 0 or 2. We've logged a bug to investigate this. I'm assuming that medium TC (value = 1) is the one not coming through correctly.

Laptime for Quali inlap. Again, the data just reflects what the game itself does (discards inlaps from the results), so not sure we can fix this with the telemetry system. We've logged this issue for further investigation.

Lapdata for Ghost. We will revert this back to the 2019 implementation as suggested.

 

@Hoo

Great stuff. Thank you for the update and for relaying this to the devs.

For 1), maybe invalid data for the enums could be -1 (but I don't remember, if all those are signed ints). In some other games invalid values are sometimes max possible values, i.e. e.g. for int16 it is set to 32767 for invalid/bad value.

4) You are correct. No TC is 0 and TC med or high is sent out as 2.

Cheers

  • Agree 1
Link to comment
Share on other sites

40 minutes ago, Hoo said:

Thanks for these. Here's a quick response on the issues that you posted:

1) No enum value 0. As this is based on the data coming directly from the game, this isn't an easy thing for us to change without reorganising the game data itself (which we can't do at this stage). As such, we will leave this as it is, unless we can find another way to flag valid / invalid values containing 0.

2) Tyre wear as floats. We will change this to floats.

3) DriverIDs are now conflicting. We understand the issue, but aren't yet sure how we can fix it as it again ties in with other data coming from the game. We will need to consider this issue further.

4) TC is either 0 or 2. We've logged a bug to investigate this. I'm assuming that medium TC (value = 1) is the one not coming through correctly.

Laptime for Quali inlap. Again, the data just reflects what the game itself does (discards inlaps from the results), so not sure we can fix this with the telemetry system. We've logged this issue for further investigation.

Lapdata for Ghost. We will revert this back to the 2019 implementation as suggested.

 

Hello @Hoo

I found something who is a bug for me. When a Player join a lobby in qualification after everyone and took a car, the car number send by the telemetry is not his but the official one. ex : if i join late and i took the hamilton car, my number send via telemetry will be 44

I have a lot of features i would like implement, but maybe it's not the moment. Tell me when i can share my list and let see what can be accepted.

Thanks

 

Link to comment
Share on other sites

  • Codemasters Staff
1 hour ago, LonelyRacer said:

For 1), maybe invalid data for the enums could be -1 (but I don't remember, if all those are signed ints). In some other games invalid values are sometimes max possible values, i.e. e.g. for int16 it is set to 32767 for invalid/bad value.

 

That looks like a good idea. We'll see if we can implement something along those lines.

Link to comment
Share on other sites

  • Codemasters Staff
1 hour ago, ThibaudPHP said:

Hello @Hoo

I found something who is a bug for me. When a Player join a lobby in qualification after everyone and took a car, the car number send by the telemetry is not his but the official one. ex : if i join late and i took the hamilton car, my number send via telemetry will be 44

I have a lot of features i would like implement, but maybe it's not the moment. Tell me when i can share my list and let see what can be accepted.

Thanks

 

Now is a good time! If anything is too complex to add for F1 2021 then it is still useful to know now for the future.
 

Link to comment
Share on other sites

1 minute ago, Hoo said:

Now is a good time! If anything is too complex to add for F1 2021 then it is still useful to know now for the future.
 

My wish list for telemetry

1. like penalty, a warning field in packet 2 will be welcome. Actually warnings are send only via packet 3, if you miss the packet or it is lost on the internet you miss the warning.
2. I would like to know when a stop and go is did/paid by a racer. We know when he receive one (packet 3) but never when he paid one.
3. The full list of assist used. not only abs and traction. line, breaking assist, pit, etc.
4. On a lot of league where i work with, it's forbiden to put start during the race. To detect start i use a combo when i detect that the assists change. (the AI is lazy and don't drive with TC off :D) It will help me a lot to know who press start.
5. i know that is impossible to have delta, because the way there are calculate are not the same in TT and in race. But, if we can have like some checkpoint to have a better way to calcul delta without it cost us a lot on calcul. Right now, my solution is calcul gap with sector. I wish have like 10 checkpoint by track to be able to afine this kind of delta.
6. I don't need personnaly because i found a great solution to solve this problem but, for the community on this topic I must ask, the name of the racer. I know with rgpd it's complicated and it's asked so many times. i am sorry, but it was a mandatory to put on my wishlist for my collegues programmers
7. i wish that the formation lap stay with (on packet 1) value safetyCarStatus = 3  (data not put on the help). This is a very good way to detect the formation lap and i am, very afraid to loose this feature.

i am aware that this list is very personna, thanks for what you can implement.

I forgot to told an old bug the m_
resultStatus give us a data 7 who is not listed. The 7 is equal to 6. When we receive it, the car is retired of the race.

Thanks !!

Link to comment
Share on other sites

On 4/2/2021 at 5:22 PM, 101jez101 said:

Hi - two things you can maybe help with?

1. where can I find the official track map data? 

2. how long and wide is the car using the worldPosition XZ scale? Presumably that point is the centre of the car seen from above? 

Late response to this - we just open sourced our SVG track maps here https://github.com/f1laps/f1-track-vectors. Maybe they're helpful for you or others.

3 hours ago, Hoo said:

Now is a good time! If anything is too complex to add for F1 2021 then it is still useful to know now for the future.
 

  1. Some mechanism to identify the end of a lap / start of a new lap. We have several workarounds in place to calculate total lap time or the telemetry set of a specific lap. 
  2. Exposing the AI difficulty level set for the (offline) session
  3. Exposing an identifier for the Grand Prix weekend across sessions (so that qualifying and race sessions can be tied together, for instance). And exposing an identifier for, or the name of, the career mode season (like "My Team, Nickname ABC, Season 1").
  4. Persisting the session ID of an offline session across game restarts (when using "mid session save & exit")
  5. A mechanism to clean telemetry data of flashbacks (for instance removing/skipping the telemetry data that is being overwritten because the user is driving the same distance again after a flashback)

Thank you in advance for considering these. I appreciate your engagement with the community on this. 👍

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

3 hours ago, Hoo said:

Now is a good time! If anything is too complex to add for F1 2021 then it is still useful to know now for the future.
 

For me the negative lap distance, same lap number on flying outlaps is not ideal. If, every time you cross the start finish line, even if in the pits or if you abort the lap, the lap number increments would be better. My current solution is a bit of a hack but I'm probably missing something. Please explain how I should identify the start of a new lap if I am. 

 

Also, with flashbacks, a 'this is a replacement frame' flag would be useful. I get that you can't do a 'this frame is going to be deleted' flag 😊

  • Agree 1
Link to comment
Share on other sites

@Hoo

One little request for F1 2021 (and might be valid for 2020, if there is still a patch coming for it).

I just tested the new Thrustmaster SF1000 and it has 25 buttons , but the game only reports values for controller buttons. i.e. up to 14. Would it be possible, that the game would also enumerate to the UDP feed the other buttons, if the wheel has more than 14 buttons. The m_buttonStatus is int32, so it would be possible to send the data up-to 32 buttons.

I am sure this is an issue with other new steering wheels from Fanatec too, which have more than 14 buttons.

It would be great, if that could also be added to F1 2020, but hopefully it will be added at least to F1 2021.

Cheers

Link to comment
Share on other sites

  • Codemasters Staff
On 5/4/2021 at 1:08 PM, ThibaudPHP said:

My wish list for telemetry...
 

Here's an initial response to your requests:

  1. Add a new, separate event for warnings in packet 3.
    • We’ve added this to our backlog
  2. Add a means of detecting when a stop-go penalty has been served
    • We’ve added this to our backlog
  3. Provide information about all assists used (currently just does a subset of them)
    • We’ve added this to our backlog
  4. Add a way of indicating when a real player is in a paused state
    • We’ve added this to our backlog
  5. Add checkpoints to help with delta calculation
    • You should be able to use the m_lapDistance from LapData packet in conjunction with the m_trackLength from the Session Packet to give the a fraction the car is round the track. This should give “checkpoints” round the track from which you can work out the delta.
  6. Include the name of the player in the UDP data.
    • We have a proposed solution that is with our legal team for review.
  7. Include formation lap status in safetyCarStatus field (using value 3).
    • We will keep this in and update the documentation to show what this value does.
  8. Bug where m_resultStatus gives an unlisted value of 7
    • This has been fixed.

We'll let you know if anything on the backlog gets implemented.

  • Thanks 1
Link to comment
Share on other sites

32 minutes ago, Hoo said:

Here's an initial response to your requests:

  1. Add a new, separate event for warnings in packet 3.
    • We’ve added this to our backlog
  2. Add a means of detecting when a stop-go penalty has been served
    • We’ve added this to our backlog
  3. Provide information about all assists used (currently just does a subset of them)
    • We’ve added this to our backlog
  4. Add a way of indicating when a real player is in a paused state
    • We’ve added this to our backlog
  5. Add checkpoints to help with delta calculation
    • You should be able to use the m_lapDistance from LapData packet in conjunction with the m_trackLength from the Session Packet to give the a fraction the car is round the track. This should give “checkpoints” round the track from which you can work out the delta.
  6. Include the name of the player in the UDP data.
    • We have a proposed solution that is with our legal team for review.
  7. Include formation lap status in safetyCarStatus field (using value 3).
    • We will keep this in and update the documentation to show what this value does.
  8. Bug where m_resultStatus gives an unlisted value of 7
    • This has been fixed.

We'll let you know if anything on the backlog gets implemented.

1. Thanks a lot
2. on your point 1 you wrote in packet  3. you wanted to say packet 2, right ?
3. on your point 5, i think the m_lapDistance is giving  the lap distance even if i do donuts  (I need to check that). so for me, it's not a reliable value, but i will check

Thanks a lot for this !

Link to comment
Share on other sites

  • Codemasters Staff
1 minute ago, ThibaudPHP said:

2. on your point 1 you wrote in packet  3. you wanted to say packet 2, right ?
 

I assumed you wanted something in the event packet, like we provide for penalty notification. Did you mean for this to be included in the LapData packet to indicate how many warnings a player received in a that lap?

Link to comment
Share on other sites

Just now, Hoo said:

I assumed you wanted something in the event packet, like we provide for penalty notification. Did you mean for this to be included in the LapData packet to indicate how many warnings a player received in a that lap?


The warning are already send on packet 3, it's an event. but if you don't receive the packet (some packet are lost) you never know the real number of warnings.
So yes, I would like the number total of warning have his own field (on packet 2) like penalty have it on packet 2 (lapdata).

 

Link to comment
Share on other sites

 Share

×
×
  • Create New...