F1 2020 Telemetry Packet Specification¶
Note
This specification was copied (with the minor changes listed below) from the CodeMasters forum topic describing the F1 2020 telemetry UDP packet specification, as found here:
The forum post has one post detailing packet formats, followed by a post with Frequently Asked Questions, followed by a post with appendices, giving a number of lookup tables. The package format and appendices have been reproduced here; for the FAQ, please refer to the original forum topic.
The following changes were made in the process of copying the specification:
Added suffix ‘_t’ to all integer types, bringing the type names in lines with the types declared in the standard C header file
<stdint.h>(equivalent to<cstdint>in C++). This change also improves the syntax highlighting of the struct definitions below.Added the uint32_t type to the Packet Types table;
In struct PacketMotionData: corrected comments of the fields m_angularAccelerationX, m_angularAccelerationY, and m_angularAccelerationZ to reflect that the values represent accelerations rather than velocities;
In struct CarSetupData: corrected comment of field m_rearAntiRollBar to refer to rear instead of front;
In the Driver IDs appendix: corrected the name of driver 34: Wilheim Kaufmann to Wilhelm Kaufmann;
In struct PacketSessionData: documented value 3 for m_safetyCarStatus (formation lap).
The F1 series of games support the output of certain game data across UDP connections. This data can be used supply race information to external applications, or to drive certain hardware (e.g. motion platforms, force feedback steering wheels and LED devices).
The following information summarise this data structures so that developers of supporting hardware or software are able to configure these to work correctly with the F1 game.
If you cannot find the information that you require then please contact community@codemasters.com and a member of the dev team will respond to your query as soon as possible.
Packet Information¶
Note
The structure definitions given below are specified in the syntax of the C programming language.
The Python versions of the structures provided by the f1-telemetry-packet package are very similar to the C versions, with the notable exception that for all field names, the ‘m_’ prefix is omitted. For example, the header field m_packetFormat is just called packetFormat in the Python version.
Packet Types¶
Each packet can now carry different types of data rather than having one packet which contains everything. A header has been added to each packet as well so that versioning can be tracked and it will be easier for applications to check they are interpreting the incoming data in the correct way. Please note that all values are encoded using Little Endian format. All data is packed.
The following data types are used in the structures:
Type |
Description |
|---|---|
uint8_t |
Unsigned 8-bit integer |
int8_t |
Signed 8-bit integer |
uint16_t |
Unsigned 16-bit integer |
int16_t |
Signed 16-bit integer |
uint32_t |
Unsigned 32-bit integer |
float |
Floating point (32-bit) |
double |
Floating point (64-bit) |
uint64_t |
Unsigned 64-bit integer |
Packet Header¶
Each packet has the following header:
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
uint64_t m_sessionUID; // Unique identifier for the session
float m_sessionTime; // Session timestamp
uint32_t m_frameIdentifier; // Identifier for the frame the data was retrieved on
uint8_t m_playerCarIndex; // Index of player's car in the array
uint8_t m_secondaryPlayerCarIndex; // Index of secondary player's car in the array (splitscreen)
// 255 if no second player
};
Packet IDs¶
The packets IDs are as follows:
Packet Name |
Value |
Description |
|---|---|---|
Motion |
0 |
Contains all motion data for player’s car – only sent while player is in control |
Session |
1 |
Data about the session – track, time left |
Lap Data |
2 |
Data about all the lap times of cars in the session |
Event |
3 |
Various notable events that happen during a session |
Participants |
4 |
List of participants in the session, mostly relevant for multiplayer |
Car Setups |
5 |
Packet detailing car setups for cars in the race |
Car Telemetry |
6 |
Telemetry data for all cars |
Car Status |
7 |
Status data for all cars such as damage |
Final Classification |
8 |
Final classification confirmation at the end of a race |
Lobby information |
9 |
Information about players in a multiplayer lobby |
Motion Packet¶
The motion packet gives physics data for all the cars being driven. There is additional data for the car being driven with the goal of being able to drive a motion platform setup.
N.B. For the normalised vectors below, to convert to float values divide by 32767.0f – 16-bit signed values are used to pack the data and on the assumption that direction values are always between -1.0f and 1.0f.
struct CarMotionData
{
float m_worldPositionX; // World space X position
float m_worldPositionY; // World space Y position
float m_worldPositionZ; // World space Z position
float m_worldVelocityX; // Velocity in world space X
float m_worldVelocityY; // Velocity in world space Y
float m_worldVelocityZ; // Velocity in world space Z
int16_t m_worldForwardDirX; // World space forward X direction (normalised)
int16_t m_worldForwardDirY; // World space forward Y direction (normalised)
int16_t m_worldForwardDirZ; // World space forward Z direction (normalised)
int16_t m_worldRightDirX; // World space right X direction (normalised)
int16_t m_worldRightDirY; // World space right Y direction (normalised)
int16_t m_worldRightDirZ; // World space right Z direction (normalised)
float m_gForceLateral; // Lateral G-Force component
float m_gForceLongitudinal; // Longitudinal G-Force component
float m_gForceVertical; // Vertical G-Force component
float m_yaw; // Yaw angle in radians
float m_pitch; // Pitch angle in radians
float m_roll; // Roll angle in radians
};
struct PacketMotionData
{
PacketHeader m_header; // Header
CarMotionData m_carMotionData[22]; // Data for all cars on track
// Extra player car ONLY data
float m_suspensionPosition[4]; // Note: All wheel arrays have the following order:
float m_suspensionVelocity[4]; // RL, RR, FL, FR
float m_suspensionAcceleration[4]; // RL, RR, FL, FR
float m_wheelSpeed[4]; // Speed of each wheel
float m_wheelSlip[4]; // Slip ratio for each wheel
float m_localVelocityX; // Velocity in local space
float m_localVelocityY; // Velocity in local space
float m_localVelocityZ; // Velocity in local space
float m_angularVelocityX; // Angular velocity x-component
float m_angularVelocityY; // Angular velocity y-component
float m_angularVelocityZ; // Angular velocity z-component
float m_angularAccelerationX; // Angular acceleration x-component
float m_angularAccelerationY; // Angular acceleration y-component
float m_angularAccelerationZ; // Angular acceleration z-component
float m_frontWheelsAngle; // Current front wheels angle in radians
};
Session Packet¶
The session packet includes details about the current session in progress.
struct MarshalZone
{
float m_zoneStart; // Fraction (0..1) of way through the lap the marshal zone starts
int8_t m_zoneFlag; // -1 = invalid/unknown, 0 = none, 1 = green, 2 = blue, 3 = yellow, 4 = red
};
struct WeatherForecastSample
{
uint8_t m_sessionType; // 0 = unknown, 1 = P1, 2 = P2, 3 = P3, 4 = Short P, 5 = Q1
// 6 = Q2, 7 = Q3, 8 = Short Q, 9 = OSQ, 10 = R, 11 = R2
// 12 = Time Trial
uint8_t m_timeOffset; // Time in minutes the forecast is for
uint8_t m_weather; // Weather - 0 = clear, 1 = light cloud, 2 = overcast
// 3 = light rain, 4 = heavy rain, 5 = storm
int8_t m_trackTemperature; // Track temp. in degrees celsius
int8_t m_airTemperature; // Air temp. in degrees celsius
};
struct PacketSessionData
{
PacketHeader m_header; // Header
uint8_t m_weather; // Weather - 0 = clear, 1 = light cloud, 2 = overcast
// 3 = light rain, 4 = heavy rain, 5 = storm
int8_t m_trackTemperature; // Track temp. in degrees celsius
int8_t m_airTemperature; // Air temp. in degrees celsius
uint8_t m_totalLaps; // Total number of laps in this race
uint16_t m_trackLength; // Track length in metres
uint8_t m_sessionType; // 0 = unknown, 1 = P1, 2 = P2, 3 = P3, 4 = Short P
// 5 = Q1, 6 = Q2, 7 = Q3, 8 = Short Q, 9 = OSQ
// 10 = R, 11 = R2, 12 = Time Trial
int8_t m_trackId; // -1 for unknown, 0-21 for tracks, see appendix
uint8_t m_formula; // Formula, 0 = F1 Modern, 1 = F1 Classic, 2 = F2,
// 3 = F1 Generic
uint16_t m_sessionTimeLeft; // Time left in session in seconds
uint16_t m_sessionDuration; // Session duration in seconds
uint8_t m_pitSpeedLimit; // Pit speed limit in kilometres per hour
uint8_t m_gamePaused; // Whether the game is paused
uint8_t m_isSpectating; // Whether the player is spectating
uint8_t m_spectatorCarIndex; // Index of the car being spectated
uint8_t m_sliProNativeSupport; // SLI Pro support, 0 = inactive, 1 = active
uint8_t m_numMarshalZones; // Number of marshal zones to follow
MarshalZone m_marshalZones[21]; // List of marshal zones – max 21
uint8_t m_safetyCarStatus; // 0 = no safety car, 1 = full safety car
// 2 = virtual safety car
// 3 = formation lap safety car
uint8_t m_networkGame; // 0 = offline, 1 = online
uint8_t m_numWeatherForecastSamples; // Number of weather samples to follow
WeatherForecastSample m_weatherForecastSamples[20]; // Array of weather forecast samples
};
Lap Data Packet¶
The lap data packet gives details of all the cars in the session.
struct LapData
{
float m_lastLapTime; // Last lap time in seconds
float m_currentLapTime; // Current time around the lap in seconds
uint16_t m_sector1TimeInMS; // Sector 1 time in milliseconds
uint16_t m_sector2TimeInMS; // Sector 2 time in milliseconds
float m_bestLapTime; // Best lap time of the session in seconds
uint8_t m_bestLapNum; // Lap number best time achieved on
uint16_t m_bestLapSector1TimeInMS; // Sector 1 time of best lap in the session in milliseconds
uint16_t m_bestLapSector2TimeInMS; // Sector 2 time of best lap in the session in milliseconds
uint16_t m_bestLapSector3TimeInMS; // Sector 3 time of best lap in the session in milliseconds
uint16_t m_bestOverallSector1TimeInMS;// Best overall sector 1 time of the session in milliseconds
uint8_t m_bestOverallSector1LapNum; // Lap number best overall sector 1 time achieved on
uint16_t m_bestOverallSector2TimeInMS;// Best overall sector 2 time of the session in milliseconds
uint8_t m_bestOverallSector2LapNum; // Lap number best overall sector 2 time achieved on
uint16_t m_bestOverallSector3TimeInMS;// Best overall sector 3 time of the session in milliseconds
uint8_t m_bestOverallSector3LapNum; // Lap number best overall sector 3 time achieved on
float m_lapDistance; // Distance vehicle is around current lap in metres – could
// be negative if line hasn’t been crossed yet
float m_totalDistance; // Total distance travelled in session in metres – could
// be negative if line hasn’t been crossed yet
float m_safetyCarDelta; // Delta in seconds for safety car
uint8_t m_carPosition; // Car race position
uint8_t m_currentLapNum; // Current lap number
uint8_t m_pitStatus; // 0 = none, 1 = pitting, 2 = in pit area
uint8_t m_sector; // 0 = sector1, 1 = sector2, 2 = sector3
uint8_t m_currentLapInvalid; // Current lap invalid - 0 = valid, 1 = invalid
uint8_t m_penalties; // Accumulated time penalties in seconds to be added
uint8_t m_gridPosition; // Grid position the vehicle started the race in
uint8_t m_driverStatus; // Status of driver - 0 = in garage, 1 = flying lap
// 2 = in lap, 3 = out lap, 4 = on track
uint8_t m_resultStatus; // Result status - 0 = invalid, 1 = inactive, 2 = active
// 3 = finished, 4 = disqualified, 5 = not classified
// 6 = retired
};
struct PacketLapData
{
PacketHeader m_header; // Header
LapData m_lapData[22]; // Lap data for all cars on track
};
Event Packet¶
This packet gives details of events that happen during the course of a session.
// The event details packet is different for each type of event.
// Make sure only the correct type is interpreted.
union EventDataDetails
{
struct
{
uint8_t vehicleIdx; // Vehicle index of car achieving fastest lap
float lapTime; // Lap time is in seconds
} FastestLap;
struct
{
uint8_t vehicleIdx; // Vehicle index of car retiring
} Retirement;
struct
{
uint8_t vehicleIdx; // Vehicle index of team mate
} TeamMateInPits;
struct
{
uint8_t vehicleIdx; // Vehicle index of the race winner
} RaceWinner;
struct
{
uint8_t penaltyType; // Penalty type – see Appendices
uint8_t infringementType; // Infringement type – see Appendices
uint8_t vehicleIdx; // Vehicle index of the car the penalty is applied to
uint8_t otherVehicleIdx; // Vehicle index of the other car involved
uint8_t time; // Time gained, or time spent doing action in seconds
uint8_t lapNum; // Lap the penalty occurred on
uint8_t placesGained; // Number of places gained by this
} Penalty;
struct
{
uint8_t vehicleIdx; // Vehicle index of the vehicle triggering speed trap
float speed; // Top speed achieved in kilometres per hour
} SpeedTrap;
};
struct PacketEventData
{
PacketHeader m_header; // Header
uint8_t m_eventStringCode[4]; // Event string code, see below
EventDataDetails m_eventDetails; // Event details - should be interpreted differently
// for each type
};
Event String Codes¶
Event |
Code |
Description |
|---|---|---|
Session Started |
SSTA |
Sent when the session starts |
Session Ended |
SEND |
Sent when the session ends |
Fastest Lap |
FTLP |
When a driver achieves the fastest lap |
Retirement |
RTMT |
When a driver retires |
DRS enabled |
DRSE |
Race control have enabled DRS |
DRS disabled |
DRSD |
Race control have disabled DRS |
Team mate in pits |
TMPT |
Your team mate has entered the pits |
Chequered flag |
CHQF |
The chequered flag has been waved |
Race Winner |
RCWN |
The race winner is announced |
Penalty issued |
PENA |
A penalty has been issued |
Speed trap triggered |
SPTP |
Speed trap has been triggered |
Participants Packet¶
This is a list of participants in the race. If the vehicle is controlled by AI, then the name will be the driver name. If this is a multiplayer game, the names will be the Steam Id on PC, or the LAN name if appropriate.
N.B. on Xbox One, the names will always be the driver name, on PS4 the name will be the LAN name if playing a LAN game, otherwise it will be the driver name.
The array should be indexed by vehicle index.
struct ParticipantData
{
uint8_t m_aiControlled; // Whether the vehicle is AI (1) or Human (0) controlled
uint8_t m_driverId; // Driver id - see appendix
uint8_t m_teamId; // Team id - see appendix
uint8_t m_raceNumber; // Race number of the car
uint8_t m_nationality; // Nationality of the driver
char m_name[48]; // Name of participant in UTF-8 format – null terminated
// Will be truncated with … (U+2026) if too long
uint8_t m_yourTelemetry; // The player's UDP setting, 0 = restricted, 1 = public
};
struct PacketParticipantsData
{
PacketHeader m_header; // Header
uint8 m_numActiveCars; // Number of active cars in the data – should match number of
// cars on HUD
ParticipantData m_participants[22];
};
Car Setups Packet¶
This packet details the car setups for each vehicle in the session. Note that in multiplayer games, other player cars will appear as blank, you will only be able to see your car setup and AI cars.
struct CarSetupData
{
uint8_t m_frontWing; // Front wing aero
uint8_t m_rearWing; // Rear wing aero
uint8_t m_onThrottle; // Differential adjustment on throttle (percentage)
uint8_t m_offThrottle; // Differential adjustment off throttle (percentage)
float m_frontCamber; // Front camber angle (suspension geometry)
float m_rearCamber; // Rear camber angle (suspension geometry)
float m_frontToe; // Front toe angle (suspension geometry)
float m_rearToe; // Rear toe angle (suspension geometry)
uint8_t m_frontSuspension; // Front suspension
uint8_t m_rearSuspension; // Rear suspension
uint8_t m_frontAntiRollBar; // Front anti-roll bar
uint8_t m_rearAntiRollBar; // Rear anti-roll bar
uint8_t m_frontSuspensionHeight; // Front ride height
uint8_t m_rearSuspensionHeight; // Rear ride height
uint8_t m_brakePressure; // Brake pressure (percentage)
uint8_t m_brakeBias; // Brake bias (percentage)
float m_rearLeftTyrePressure; // Rear left tyre pressure (PSI)
float m_rearRightTyrePressure; // Rear right tyre pressure (PSI)
float m_frontLeftTyrePressure; // Front left tyre pressure (PSI)
float m_frontRightTyrePressure; // Front right tyre pressure (PSI)
uint8_t m_ballast; // Ballast
float m_fuelLoad; // Fuel load
};
struct PacketCarSetupData
{
PacketHeader m_header; // Header
CarSetupData m_carSetups[22];
};
Car Telemetry Packet¶
This packet details telemetry for all the cars in the race. It details various values that would be recorded on the car such as speed, throttle application, DRS etc.
struct CarTelemetryData
{
uint16_t m_speed; // Speed of car in kilometres per hour
float m_throttle; // Amount of throttle applied (0.0 to 1.0)
float m_steer; // Steering (-1.0 (full lock left) to 1.0 (full lock right))
float m_brake; // 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)
float m_tyresPressure[4]; // Tyres pressure (PSI)
uint8_t m_surfaceType[4]; // Driving surface, see appendices
};
struct PacketCarTelemetryData
{
PacketHeader m_header; // Header
CarTelemetryData m_carTelemetryData[22];
uint32_t m_buttonStatus; // Bit flags specifying which buttons are being pressed
// currently - see appendices
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
};
Car Status Packet¶
This packet details car statuses for all the cars in the race. It includes values such as the damage readings on the car.
struct CarStatusData
{
uint8_t m_tractionControl; // 0 (off) - 2 (high)
uint8_t m_antiLockBrakes; // 0 (off) - 1 (on)
uint8_t m_fuelMix; // Fuel mix - 0 = lean, 1 = standard, 2 = rich, 3 = max
uint8_t m_frontBrakeBias; // Front brake bias (percentage)
uint8_t m_pitLimiterStatus; // Pit limiter status - 0 = off, 1 = on
float m_fuelInTank; // Current fuel mass
float m_fuelCapacity; // Fuel capacity
float m_fuelRemainingLaps; // Fuel remaining in terms of laps (value on MFD)
uint16_t m_maxRPM; // Cars max RPM, point of rev limiter
uint16_t m_idleRPM; // Cars idle RPM
uint8_t m_maxGears; // Maximum number of gears
uint8_t m_drsAllowed; // 0 = not allowed, 1 = allowed, -1 = unknown
uint16_t m_drsActivationDistance; // 0 = DRS not available, non-zero - DRS will be available
// in [X] metres
uint8_t m_tyresWear[4]; // Tyre wear percentage
uint8_t m_actualTyreCompound; // F1 Modern - 16 = C5, 17 = C4, 18 = C3, 19 = C2, 20 = C1
// 7 = inter, 8 = wet
// F1 Classic - 9 = dry, 10 = wet
// F2 – 11 = super soft, 12 = soft, 13 = medium, 14 = hard
// 15 = wet
uint8_t m_tyreVisualCompound; // F1 visual (can be different from actual compound)
// 16 = soft, 17 = medium, 18 = hard, 7 = inter, 8 = wet
// F1 Classic – same as above
// F2 – 19 = super soft, 20 = soft, 21 = medium, 22 = hard
// 15 = wet
uint8_t m_tyresAgeLaps; // Age in laps of the current set of tyres
uint8_t m_tyresDamage[4]; // Tyre damage (percentage)
uint8_t m_frontLeftWingDamage; // Front left wing damage (percentage)
uint8_t m_frontRightWingDamage; // Front right wing damage (percentage)
uint8_t m_rearWingDamage; // Rear wing damage (percentage)
uint8_t m_drsFault; // Indicator for DRS fault, 0 = OK, 1 = fault
uint8_t m_engineDamage; // Engine damage (percentage)
uint8_t m_gearBoxDamage; // Gear box damage (percentage)
int8_t m_vehicleFiaFlags; // -1 = invalid/unknown, 0 = none, 1 = green
// 2 = blue, 3 = yellow, 4 = red
float m_ersStoreEnergy; // ERS energy store in Joules
uint8_t m_ersDeployMode; // ERS deployment mode, 0 = none, 1 = medium
// 2 = overtake, 3 = hotlap
float m_ersHarvestedThisLapMGUK; // ERS energy harvested this lap by MGU-K
float m_ersHarvestedThisLapMGUH; // ERS energy harvested this lap by MGU-H
float m_ersDeployedThisLap; // ERS energy deployed this lap
};
struct PacketCarStatusData
{
PacketHeader m_header; // Header
CarStatusData m_carStatusData[22];
};
Final Classification Packet¶
This packet details the final classification at the end of the race, and the data will match with the post race results screen. This is especially useful for multiplayer games where it is not always possible to send lap times on the final frame because of network delay.
struct FinalClassificationData
{
uint8_t m_position; // Finishing position
uint8_t m_numLaps; // Number of laps completed
uint8_t m_gridPosition; // Grid position of the car
uint8_t m_points; // Number of points scored
uint8_t m_numPitStops; // Number of pit stops made
uint8_t m_resultStatus; // Result status - 0 = invalid, 1 = inactive, 2 = active
// 3 = finished, 4 = disqualified, 5 = not classified
// 6 = retired
float m_bestLapTime; // Best lap time of the session in seconds
double m_totalRaceTime; // Total race time in seconds without penalties
uint8_t m_penaltiesTime; // Total penalties accumulated in seconds
uint8_t m_numPenalties; // Number of penalties applied to this driver
uint8_t m_numTyreStints; // Number of tyres stints up to maximum
uint8_t m_tyreStintsActual[8]; // Actual tyres used by this driver
uint8_t m_tyreStintsVisual[8]; // Visual tyres used by this driver
};
struct PacketFinalClassificationData
{
PacketHeader m_header; // Header
uint8 m_numCars; // Number of cars in the final classification
FinalClassificationData m_classificationData[22];
};
Lobby Info Packet¶
This packet details the players currently in a multiplayer lobby. It details each player’s selected car, any AI involved in the game and also the ready status of each of the participants.
struct LobbyInfoData
{
uint8_t m_aiControlled; // Whether the vehicle is AI (1) or Human (0) controlled
uint8_t m_teamId; // Team id - see appendix (255 if no team currently selected)
uint8_t m_nationality; // Nationality of the driver
char m_name[48]; // Name of participant in UTF-8 format – null terminated
// Will be truncated with ... (U+2026) if too long
uint8_t m_readyStatus; // 0 = not ready, 1 = ready, 2 = spectating
};
struct PacketLobbyInfoData
{
PacketHeader m_header;
uint8 m_numPlayers; // Number of players in the lobby data
LobbyInfoData m_lobbyPlayers[22];
};
Restricted data (Your Telemetry setting)¶
There is some data in the UDP that you may not want other players seeing if you are in a multiplayer game. This is controlled by the “Your Telemetry” setting in the Telemetry options. The options are:
Restricted (Default) – other players viewing the UDP data will not see values for your car
Public – all other players can see all the data for your car
Note: You can always see the data for the car you are driving regardless of the setting.
The following data items are set to zero if the player driving the car in question has their “Your Telemetry” set to “Restricted”:
Car status packet
m_fuelInTank
m_fuelCapacity
m_fuelMix
m_fuelRemainingLaps
m_frontBrakeBias
m_frontLeftWingDamage
m_frontRightWingDamage
m_rearWingDamage
m_engineDamage
m_gearBoxDamage
m_tyresWear (All four wheels)
m_tyresDamage (All four wheels)
m_ersDeployMode
m_ersStoreEnergy
m_ersDeployedThisLap
m_ersHarvestedThisLapMGUK
m_ersHarvestedThisLapMGUH
m_tyresAgeLaps
Appendices¶
Here are the values used for the team ID, driver ID and track ID parameters.
N.B. Driver IDs in network games differ from the actual driver IDs. All the IDs of human players start at 100 and are unique within the game session, but don’t directly correlate to the player.
Team IDs¶
ID |
Team |
ID |
Team |
ID |
Team |
|---|---|---|---|---|---|
0 |
Mercedes |
20 |
McLaren 2008 |
63 |
Ferrari 1990 |
1 |
Ferrari |
21 |
Red Bull 2010 |
64 |
McLaren 2010 |
2 |
Red Bull Racing |
31 |
McLaren 1990 |
65 |
Ferrari 2010 |
3 |
Williams |
38 |
Williams 2003 |
255 |
My Team |
4 |
Racing Point |
39 |
Brawn 2009 |
||
5 |
Renault |
41 |
F1 Generic car |
||
6 |
AlphaTauri |
42 |
ART Grand Prix |
||
7 |
Haas |
43 |
Campos Racing |
||
8 |
McLaren |
44 |
Carlin |
||
9 |
Alfa Romeo |
45 |
Sauber Junior Team by Charouz |
||
10 |
McLaren 1988 |
46 |
DAMS |
||
11 |
McLaren 1991 |
47 |
UNI-Virtuosi |
||
12 |
Williams 1992 |
48 |
MP Motorsport |
||
13 |
Ferrari 1995 |
49 |
PREMA Racing |
||
14 |
Williams 1996 |
50 |
Trident |
||
15 |
McLaren 1998 |
51 |
BWT Arden |
||
16 |
Ferrari 2002 |
53 |
Benetton 1994 |
||
17 |
Ferrari 2004 |
54 |
Benetton 1995 |
||
18 |
Renault 2006 |
55 |
Ferrari 2000 |
||
19 |
Ferrari 2007 |
56 |
Jordan 1991 |
Driver IDs¶
ID |
Driver |
ID |
Driver |
ID |
Driver |
|---|---|---|---|---|---|
0 |
Carlos Sainz |
36 |
Flavio Nieves |
68 |
Alessio Lorandi |
1 |
Daniil Kvyat |
37 |
Peter Belousov |
69 |
Ruben Meijer |
2 |
Daniel Ricciardo |
38 |
Klimek Michalski |
70 |
Rashid Nair |
6 |
Kimi Räikkönen |
39 |
Santiago Moreno |
71 |
Jack Tremblay |
7 |
Lewis Hamilton |
40 |
Benjamin Coppens |
74 |
Antonio Giovinazzi |
9 |
Max Verstappen |
41 |
Noah Visser |
75 |
Robert Kubica |
10 |
Nico Hulkenberg |
42 |
Gert Waldmuller |
78 |
Nobuharu Matsushita |
11 |
Kevin Magnussen |
43 |
Julian Quesada |
79 |
Nikita Mazepin |
12 |
Romain Grosjean |
44 |
Daniel Jones |
80 |
Guanyu Zhou |
13 |
Sebastian Vettel |
45 |
Artem Markelov |
81 |
Mick Schumacher |
14 |
Sergio Perez |
46 |
Tadasuke Makino |
82 |
Callum Ilott |
15 |
Valtteri Bottas |
47 |
Sean Gelael |
83 |
Juan Manuel Correa |
17 |
Esteban Ocon |
48 |
Nyck De Vries |
84 |
Jordan King |
19 |
Lance Stroll |
49 |
Jack Aitken |
85 |
Mahaveer Raghunathan |
20 |
Arron Barnes |
50 |
George Russell |
86 |
Tatiana Calderón |
21 |
Martin Giles |
51 |
Maximilian Günther |
87 |
Anthoine Hubert |
22 |
Alex Murray |
52 |
Nirei Fukuzumi |
88 |
Giuliano Alesi |
23 |
Lucas Roth |
53 |
Luca Ghiotto |
89 |
Ralph Boschung |
24 |
Igor Correia |
54 |
Lando Norris |
||
25 |
Sophie Levasseur |
55 |
Sérgio Sette Câmara |
||
26 |
Jonas Schiffer |
56 |
Louis Delétraz |
||
27 |
Alain Forest |
57 |
Antonio Fuoco |
||
28 |
Jay Letourneau |
58 |
Charles Leclerc |
||
29 |
Esto Saari |
59 |
Pierre Gasly |
||
30 |
Yasar Atiyeh |
62 |
Alexander Albon |
||
31 |
Callisto Calabresi |
63 |
Nicholas Latifi |
||
32 |
Naota Izum |
64 |
Dorian Boccolacci |
||
33 |
Howard Clarke |
65 |
Niko Kari |
||
34 |
Wilhelm Kaufmann |
66 |
Roberto Merhi |
||
35 |
Marie Laursen |
67 |
Arjun Maini |
Track IDs¶
ID |
Track |
|---|---|
0 |
Melbourne |
1 |
Paul Ricard |
2 |
Shanghai |
3 |
Sakhir (Bahrain) |
4 |
Catalunya |
5 |
Monaco |
6 |
Montreal |
7 |
Silverstone |
9 |
Hungaroring |
10 |
Spa |
11 |
Monza |
12 |
Singapore |
13 |
Suzuka |
14 |
Abu Dhabi |
15 |
Texas |
16 |
Brazil |
17 |
Austria |
18 |
Sochi |
19 |
Mexico |
20 |
Baku (Azerbaijan) |
21 |
Sakhir Short |
22 |
Silverstone Short |
23 |
Texas Short |
24 |
Suzuka Short |
25 |
Hanoi |
26 |
Zandvoort |
Nationality IDs¶
ID |
Nationality |
ID |
Nationality |
ID |
Nationality |
|---|---|---|---|---|---|
1 |
American |
31 |
Greek |
61 |
Panamanian |
2 |
Argentinian |
32 |
Guatemalan |
62 |
Paraguayan |
3 |
Australian |
33 |
Honduran |
63 |
Peruvian |
4 |
Austrian |
34 |
Hong Konger |
64 |
Polish |
5 |
Azerbaijani |
35 |
Hungarian |
65 |
Portuguese |
6 |
Bahraini |
36 |
Icelander |
66 |
Qatari |
7 |
Belgian |
37 |
Indian |
67 |
Romanian |
8 |
Bolivian |
38 |
Indonesian |
68 |
Russian |
9 |
Brazilian |
39 |
Irish |
69 |
Salvadoran |
10 |
British |
40 |
Israeli |
70 |
Saudi |
11 |
Bulgarian |
41 |
Italian |
71 |
Scottish |
12 |
Cameroonian |
42 |
Jamaican |
72 |
Serbian |
13 |
Canadian |
43 |
Japanese |
73 |
Singaporean |
14 |
Chilean |
44 |
Jordanian |
74 |
Slovakian |
15 |
Chinese |
45 |
Kuwaiti |
75 |
Slovenian |
16 |
Colombian |
46 |
Latvian |
76 |
South Korean |
17 |
Costa Rican |
47 |
Lebanese |
77 |
South African |
18 |
Croatian |
48 |
Lithuanian |
78 |
Spanish |
19 |
Cypriot |
49 |
Luxembourger |
79 |
Swedish |
20 |
Czech |
50 |
Malaysian |
80 |
Swiss |
21 |
Danish |
51 |
Maltese |
81 |
Thai |
22 |
Dutch |
52 |
Mexican |
82 |
Turkish |
23 |
Ecuadorian |
53 |
Monegasque |
83 |
Uruguayan |
24 |
English |
54 |
New Zealander |
84 |
Ukrainian |
25 |
Emirian |
55 |
Nicaraguan |
85 |
Venezuelan |
26 |
Estonian |
56 |
North Korean |
86 |
Welsh |
27 |
Finnish |
57 |
Northern Irish |
87 |
Barbadian |
28 |
French |
58 |
Norwegian |
88 |
Vietnamese |
29 |
German |
59 |
Omani |
||
30 |
Ghanaian |
60 |
Pakistani |
Surface types¶
These types are from physics data and show what type of contact each wheel is experiencing.
ID |
Surface |
|---|---|
0 |
Tarmac |
1 |
Rumble strip |
2 |
Concrete |
3 |
Rock |
4 |
Gravel |
5 |
Mud |
6 |
Sand |
7 |
Grass |
8 |
Water |
9 |
Cobblestone |
10 |
Metal |
11 |
Ridged |
Button flags¶
These flags are used in the telemetry packet to determine if any buttons are being held on the controlling device. If the value below logical ANDed with the button status is set then the corresponding button is being held.
Bit flags |
Button |
|---|---|
0x0001 |
Cross or A |
0x0002 |
Triangle or Y |
0x0004 |
Circle or B |
0x0008 |
Square or X |
0x0010 |
D-pad Left |
0x0020 |
D-pad Right |
0x0040 |
D-pad Up |
0x0080 |
D-pad Down |
0x0100 |
Options or Menu |
0x0200 |
L1 or LB |
0x0400 |
R1 or RB |
0x0800 |
L2 or LT |
0x1000 |
R2 or RT |
0x2000 |
Left Stick Click |
0x4000 |
Right Stick Click |
Penalty types¶
ID |
Penalty meaning |
|---|---|
0 |
Drive through |
1 |
Stop Go |
2 |
Grid penalty |
3 |
Penalty reminder |
4 |
Time penalty |
5 |
Warning |
6 |
Disqualified |
7 |
Removed from formation lap |
8 |
Parked too long timer |
9 |
Tyre regulations |
10 |
This lap invalidated |
11 |
This and next lap invalidated |
12 |
This lap invalidated without reason |
13 |
This and next lap invalidated without reason |
14 |
This and previous lap invalidated |
15 |
This and previous lap invalidated without reason |
16 |
Retired |
17 |
Black flag timer |
Infringement types¶
ID |
Infringement meaning |
|---|---|
0 |
Blocking by slow driving |
1 |
Blocking by wrong way driving |
2 |
Reversing off the start line |
3 |
Big Collision |
4 |
Small Collision |
5 |
Collision failed to hand back position single |
6 |
Collision failed to hand back position multiple |
7 |
Corner cutting gained time |
8 |
Corner cutting overtake single |
9 |
Corner cutting overtake multiple |
10 |
Crossed pit exit lane |
11 |
Ignoring blue flags |
12 |
Ignoring yellow flags |
13 |
Ignoring drive through |
14 |
Too many drive throughs |
15 |
Drive through reminder serve within n laps |
16 |
Drive through reminder serve this lap |
17 |
Pit lane speeding |
18 |
Parked for too long |
19 |
Ignoring tyre regulations |
20 |
Too many penalties |
21 |
Multiple warnings |
22 |
Approaching disqualification |
23 |
Tyre regulations select single |
24 |
Tyre regulations select multiple |
25 |
Lap invalidated corner cutting |
26 |
Lap invalidated running wide |
27 |
Corner cutting ran wide gained time minor |
28 |
Corner cutting ran wide gained time significant |
29 |
Corner cutting ran wide gained time extreme |
30 |
Lap invalidated wall riding |
31 |
Lap invalidated flashback used |
32 |
Lap invalidated reset to track |
33 |
Blocking the pitlane |
34 |
Jump start |
35 |
Safety car to car collision |
36 |
Safety car illegal overtake |
37 |
Safety car exceeding allowed pace |
38 |
Virtual safety car exceeding allowed pace |
39 |
Formation lap below allowed speed |
40 |
Retired mechanical failure |
41 |
Retired terminally damaged |
42 |
Safety car falling too far back |
43 |
Black flag timer |
44 |
Unserved stop go penalty |
45 |
Unserved drive through penalty |
46 |
Engine component change |
47 |
Gearbox change |
48 |
League grid penalty |
49 |
Retry penalty |
50 |
Illegal time gain |
51 |
Mandatory pitstop |