@rflafla/f1-udp-parser
Version:
The F1 series of games support the outputting of key game data via a UDP data stream. This data can be interpreted by external apps or connected peripherals for a range of different uses, including providing additional telemetry information, customised HU
518 lines (517 loc) • 15 kB
TypeScript
export interface PacketHeader {
m_packetFormat: number;
m_gameYear: number;
m_gameMajorVersion: number;
m_gameMinorVersion: number;
m_packetVersion: number;
m_packetId: number;
m_sessionUID: bigint;
m_sessionTime: number;
m_frameIdentifier: number;
m_overallFrameIdentifier: number;
m_playerCarIndex: number;
m_secondaryPlayerCarIndex: number;
}
export interface CarMotionData {
m_worldPositionX: number;
m_worldPositionY: number;
m_worldPositionZ: number;
m_worldVelocityX: number;
m_worldVelocityY: number;
m_worldVelocityZ: number;
m_worldForwardDirX: number;
m_worldForwardDirY: number;
m_worldForwardDirZ: number;
m_worldRightDirX: number;
m_worldRightDirY: number;
m_worldRightDirZ: number;
m_gForceLateral: number;
m_gForceLongitudinal: number;
m_gForceVertical: number;
m_yaw: number;
m_pitch: number;
m_roll: number;
}
export interface PacketMotionData {
m_header: PacketHeader;
m_carMotionData: CarMotionData[];
m_suspensionPosition: number[];
m_suspensionVelocity: number[];
m_suspensionAcceleration: number[];
m_wheelSpeed: number[];
m_wheelSlip: number[];
m_wheelSlipRatio: number[];
m_wheelSlipAngle: number[];
m_wheelLatForce: number[];
m_wheelLongForce: number[];
m_heightOfCOGAboveGround: number;
m_localVelocityX: number;
m_localVelocityY: number;
m_localVelocityZ: number;
m_angularVelocityX: number;
m_angularVelocityY: number;
m_angularVelocityZ: number;
m_angularAccelerationX: number;
m_angularAccelerationY: number;
m_angularAccelerationZ: number;
m_frontWheelsAngle: number;
}
export interface MarshalZone {
m_zoneStart: number;
m_zoneFlag: number;
}
export interface WeatherForecastSample {
m_sessionType: number;
m_timeOffset: number;
m_weather: number;
m_trackTemperature: number;
m_trackTemperatureChange: number;
m_airTemperature: number;
m_airTemperatureChange: number;
m_rainPercentage: number;
}
export interface PacketSessionData {
m_header: PacketHeader;
m_weather: number;
m_trackTemperature: number;
m_airTemperature: number;
m_totalLaps: number;
m_trackLength: number;
m_sessionType: number;
m_trackId: number;
m_formula: number;
m_sessionTimeLeft: number;
m_sessionDuration: number;
m_pitSpeedLimit: number;
m_gamePaused: number;
m_isSpectating: number;
m_spectatorCarIndex: number;
m_sliProNativeSupport: number;
m_numMarshalZones: number;
m_marshalZones: MarshalZone[];
m_safetyCarStatus: number;
m_networkGame: number;
m_numWeatherForecastSamples: number;
m_weatherForecastSamples: WeatherForecastSample[];
m_forecastAccuracy: number;
m_aiDifficulty: number;
m_seasonLinkIdentifier: number;
m_weekendLinkIdentifier: number;
m_sessionLinkIdentifier: number;
m_pitStopWindowIdealLap: number;
m_pitStopWindowLatestLap: number;
m_pitStopRejoinPosition: number;
m_steeringAssist: number;
m_brakingAssist: number;
m_gearboxAssist: number;
m_pitAssist: number;
m_pitReleaseAssist: number;
m_ERSAssist: number;
m_DRSAssist: number;
m_dynamicRacingLine: number;
m_dynamicRacingLineType: number;
m_gameMode: number;
m_ruleSet: number;
m_timeOfDay: number;
m_sessionLength: number;
m_speedUnitsLeadPlayer: number;
m_temperatureUnitsLeadPlayer: number;
m_speedUnitsSecondaryPlayer: number;
m_temperatureUnitsSecondaryPlayer: number;
m_numSafetyCarPeriods: number;
m_numVirtualSafetyCarPeriods: number;
m_numRedFlagPeriods: number;
m_equalCarPerformance: number;
m_recoveryMode: number;
m_flashbackLimit: number;
m_surfaceType: number;
m_lowFuelMode: number;
m_raceStarts: number;
m_tyreTemperature: number;
m_pitLaneTyreSim: number;
m_carDamage: number;
m_carDamageRate: number;
m_collisions: number;
m_collisionsOffForFirstLapOnly: number;
m_mpUnsafePitRelease: number;
m_mpOffForGriefing: number;
m_cornerCuttingStringency: number;
m_parcFermeRules: number;
m_pitStopExperience: number;
m_safetyCar: number;
m_safetyCarExperience: number;
m_formationLap: number;
m_formationLapExperience: number;
m_redFlags: number;
m_affectsLicenceLevelSolo: number;
m_affectsLicenceLevelMP: number;
m_numSessionsInWeekend: number;
m_weekendStructure: number[];
m_sector2LapDistanceStart: number;
m_sector3LapDistanceStart: number;
}
export interface LapData {
m_lastLapTimeInMs: number;
m_currentLapTimeInMs: number;
m_sector1TimeInMS: number;
m_sector1TimeMinutes: number;
m_sector2TimeInMS: number;
m_sector2TimeMinutes: number;
m_sector1TimeMSPart: number;
m_sector2TimeMSPart: number;
m_sector1TimeMinutesPart: number;
m_sector2TimeMinutesPart: number;
m_deltaToCarInFrontInMS: number;
m_deltaToRaceLeaderInMS: number;
m_deltaToCarInFrontMSPart: number;
m_deltaToCarInFrontMinutesPart: number;
m_deltaToRaceLeaderMSPart: number;
m_deltaToRaceLeaderMinutesPart: number;
m_lapDistance: number;
m_totalDistance: number;
m_safetyCarDelta: number;
m_carPosition: number;
m_currentLapNum: number;
m_pitStatus: number;
m_numPitStops: number;
m_sector: number;
m_currentLapInvalid: number;
m_penalties: number;
m_warnings: number;
m_totalWarnings: number;
m_cornerCuttingWarnings: number;
m_numUnservedDriveThroughPens: number;
m_numUnservedStopGoPens: number;
m_gridPosition: number;
m_driverStatus: number;
m_resultStatus: number;
m_pitLaneTimerActive: number;
m_pitLaneTimeInLaneInMS: number;
m_pitStopTimerInMS: number;
m_pitStopShouldServePen: number;
m_speedTrapFastestSpeed: number;
m_speedTrapFastestLap: number;
}
export interface PacketLapData {
m_header: PacketHeader;
m_lapData: LapData[];
m_timeTrialPBCarIdx: number;
m_timeTrialRivalCarIdx: number;
}
export interface EventDataDetails {
vehicleIdx: number;
lapTime: number;
penaltyType: number;
infringementType: number;
otherVehicleIdx: number;
time: number;
lapNum: number;
placesGained: number;
speed: number;
isOverallFastestInSession: number;
isDriverFastestInSession: number;
fastestVehicleIdxInSession: number;
fastestSpeedInSession: number;
numLights: number;
flashbackFrameIdentifier: number;
flashbackSessionTime: number;
buttonStatus: number;
overtakingVehicleIdx: number;
beingOvertakenVehicleIdx: number;
safetyCarType: number;
eventType: number;
vehicle1Idx: number;
vehicle2Idx: number;
stopTime: number;
reason: number;
}
export interface PacketEventData {
m_header: PacketHeader;
m_eventStringCode: string;
m_eventDetails: EventDataDetails;
}
export interface ParticipantData {
m_aiControlled: number;
m_driverId: number;
m_networkId: number;
m_teamId: number;
m_myTeam: number;
m_raceNumber: number;
m_nationality: number;
m_name: string;
m_yourTelemetry: number;
m_showOnlineNames: number;
m_techLevel: number;
m_platform: number;
m_numColours: number;
m_liveryColours: LiveryColour[];
}
export interface PacketParticipantsData {
m_header: PacketHeader;
m_numActiveCars: number;
m_participants: ParticipantData[];
}
export interface CarSetupData {
m_frontWing: number;
m_rearWing: number;
m_onThrottle: number;
m_offThrottle: number;
m_frontCamber: number;
m_rearCamber: number;
m_frontToe: number;
m_rearToe: number;
m_frontSuspension: number;
m_rearSuspension: number;
m_frontAntiRollBar: number;
m_rearAntiRollBar: number;
m_frontSuspensionHeight: number;
m_rearSuspensionHeight: number;
m_brakePressure: number;
m_brakeBias: number;
m_engineBraking: number;
m_rearLeftTyrePressure: number;
m_rearRightTyrePressure: number;
m_frontLeftTyrePressure: number;
m_frontRightTyrePressure: number;
m_ballast: number;
m_fuelLoad: number;
}
export interface PacketCarSetupData {
m_header: PacketHeader;
m_carSetups: CarSetupData[];
m_nextFrontWingValue: number;
}
export interface CarTelemetryData {
m_speed: number;
m_throttle: number;
m_steer: number;
m_brake: number;
m_clutch: number;
m_gear: number;
m_engineRPM: number;
m_drs: number;
m_revLightsPercent: number;
m_revLightsBitValue: number;
m_brakesTemperature: number[];
m_tyresSurfaceTemperature: number[];
m_tyresInnerTemperature: number[];
m_engineTemperature: number;
m_tyresPressure: number[];
m_surfaceType: number[];
}
export interface PacketCarTelemetryData {
m_header: PacketHeader;
m_carTelemetryData: CarTelemetryData[];
m_mfdPanelIndex: number;
m_mfdPanelIndexSecondaryPlayer: number;
m_suggestedGear: number;
}
export interface CarStatusData {
m_tractionControl: number;
m_antiLockBrakes: number;
m_fuelMix: number;
m_frontBrakeBias: number;
m_pitLimiterStatus: number;
m_fuelInTank: number;
m_fuelCapacity: number;
m_maxRPM: number;
m_idleRPM: number;
m_maxGears: number;
m_drsAllowed: number;
m_drsActivationDistance: number;
m_actualTyreCompound: number;
m_visualTyreCompound: number;
m_tyresAgeLaps: number;
m_vehicleFiaFlags: number;
m_enginePowerICE: number;
m_enginePowerMGUK: number;
m_ersStoreEnergy: number;
m_ersDeployMode: number;
m_ersHarvestedThisLapMGUK: number;
m_ersHarvestedThisLapMGUH: number;
m_ersDeployedThisLap: number;
m_networkPaused: number;
}
export interface PacketCarStatusData {
m_header: PacketHeader;
m_carStatusData: CarStatusData[];
}
export interface FinalClassificationData {
m_position: number;
m_numLaps: number;
m_gridPosition: number;
m_points: number;
m_numPitStops: number;
m_resultStatus: number;
m_resultReason: number;
m_bestLapTimeInMs: number;
m_totalRaceTime: number;
m_penaltiesTime: number;
m_numPenalties: number;
m_numTyreStints: number;
m_tyreStintsActual: number[];
m_tyreStintsVisual: number[];
m_tyreStintsEndLaps: number[];
}
export interface PacketFinalClassificationData {
m_header: PacketHeader;
m_numCars: number;
m_classificationData: FinalClassificationData[];
}
export interface LobbyInfoData {
m_aiController: number;
m_teamId: number;
m_nationality: number;
m_platform: number;
m_name: string;
m_carNumber: number;
m_yourTelemetry: number;
m_showOnlineNames: number;
m_techLevel: number;
m_readyStatus: number;
}
export interface PacketLobbyInfoData {
m_header: PacketHeader;
m_numPlayers: number;
m_lobbyPlayers: LobbyInfoData[];
}
export interface CarDamageData {
m_tyresWear: number[];
m_tyresDamage: number[];
m_brakesDamage: number[];
m_tyreBlisters: number[];
m_frontLeftWingDamage: number;
m_frontRightWingDamage: number;
m_rearWingDamage: number;
m_floorDamage: number;
m_diffuserDamage: number;
m_sidepodDamage: number;
m_drsFault: number;
m_ersFault: number;
m_gearBoxDamage: number;
m_engineDamage: number;
m_engineMGUHWear: number;
m_engineESWear: number;
m_engineCEWear: number;
m_engineICEWear: number;
m_engineMGUKWear: number;
m_engineTCWear: number;
m_engineBlown: number;
m_engineSeized: number;
}
export interface PacketCarDamageData {
m_header: PacketHeader;
m_carDamageData: CarDamageData[];
}
export interface LapHistoryData {
m_lapTimeInMS: number;
m_sector1TimeInMS: number;
m_sector1TimeMinutes: number;
m_sector2TimeInMS: number;
m_sector2TimeMinutes: number;
m_sector3TimeInMS: number;
m_sector3TimeMinutes: number;
m_sector1TimeMSPart: number;
m_sector1TimeMinutesPart: number;
m_sector2TimeMSPart: number;
m_sector2TimeMinutesPart: number;
m_sector3TimeMSPart: number;
m_sector3TimeMinutesPart: number;
m_lapValidBitFlags: number;
}
export interface TyreStintsHistoryData {
m_endLap: number;
m_tyreActualCompound: number;
m_tyreVisualCompound: number;
}
export interface PacketSessionHistoryData {
m_header: PacketHeader;
m_carIdx: number;
m_numLaps: number;
m_numTyreStints: number;
m_bestLapTimeLapNum: number;
m_bestSector1LapNum: number;
m_bestSector2LapNum: number;
m_bestSector3LapNum: number;
m_lapHistoryData: LapHistoryData[];
m_tyreStintsHistoryData: TyreStintsHistoryData[];
}
export interface TyreSetData {
m_actualTyreCompound: number;
m_visualTyreCompound: number;
m_wear: number;
m_available: number;
m_recommendedSession: number;
m_lifeSpan: number;
m_usableLife: number;
m_lapDeltaTime: number;
m_fitted: number;
}
export interface PacketTyreSetsData {
m_header: PacketHeader;
m_carIdx: number;
m_tyreSetData: TyreSetData[];
m_fittedIdx: number;
}
export interface PacketMotionExData {
m_header: PacketHeader;
m_suspensionPosition: number[];
m_suspensionVelocity: number[];
m_suspensionAcceleration: number[];
m_wheelSpeed: number[];
m_wheelSlipRatio: number[];
m_wheelSlipAngle: number[];
m_wheelLatForce: number[];
m_wheelLongForce: number[];
m_heightOfCOGAboveGround: number;
m_localVelocityX: number;
m_localVelocityY: number;
m_localVelocityZ: number;
m_angularVelocityX: number;
m_angularVelocityY: number;
m_angularVelocityZ: number;
m_angularAccelerationX: number;
m_angularAccelerationY: number;
m_angularAccelerationZ: number;
m_frontWheelsAngle: number;
m_wheelVertForce: number[];
m_frontAeroHeight: number;
m_rearAeroHeight: number;
m_frontRollAngle: number;
m_rearRollAngle: number;
m_chassisYaw: number;
m_chassisPitch: number;
m_wheelCamber: number[];
m_wheelCamberGain: number[];
}
export interface TimeTrialDataSet {
m_carIdx: number;
m_teamId: number;
m_lapTimeInMS: number;
m_sector1TimeInMS: number;
m_sector2TimeInMS: number;
m_sector3TimeInMS: number;
m_tractionControl: number;
m_gearboxAssist: number;
m_antiLockBrakes: number;
m_equalCarPerformance: number;
m_customSetup: number;
m_valid: number;
}
export interface PacketTimeTrialData {
m_header: PacketHeader;
m_playerSessionBestDataSet: TimeTrialDataSet;
m_personalBestDataSet: TimeTrialDataSet;
m_rivalDataSet: TimeTrialDataSet;
}
export interface LiveryColour {
red: number;
blue: number;
green: number;
}
export interface PacketLapPositionsData {
m_header: PacketHeader;
m_numLaps: number;
m_lapStart: number;
m_positionForVehicleIdx: number[][];
}