Data Out - Additional UDP Channels

Hi there, as requested by @T10ManteoMax here is a new thread requesting additional UDP Data Out channels for Forza Motorsport. I was intending to post this a few updates ago, but wanted to wait a bit to see what came in various updates.

As it stands:

  • The current Data Out package and set of channels are reasonably good.

  • They currently cover a lot of information about your car in particular

  • The weakness compared to other titles, and opportunity for improvement is primarily around session and opponent data

  • With a number of additional channels, players (and league/esports broadcasters, when spectating is added to the game) will be able to produce high quality dashboards and stream overlays to better showcase the game’s racing action.

Below are a list of channels I feel are worth adding, along with a one-line description where appropriate.

At minimum, everything that is in the game HUD and telemetry must be replicable via UDP, so that players can disable the in-game HUD entirely.

Session Data

  • session_type - Practice, Qualifying, Race, Rivals etc., useful for building dashboards with contextual data

  • session_total_laps_race - How many laps are in the Race. This race total must also be accessible in Practice/Qualifying so players can build better race strategies.

  • session_total_laps_qualifying - As above, but showing how many laps are in Qualifying

  • session_practice_time_remaining - Countdown timer, showing how long is left in Practice/Qualifying

  • session_race_time_remaining - As above but for timed races

  • session_race_finish_time_remaining - As above but for when the leader has finished and the race is about to end

Track Data

  • track_wetness - How wet the road surface under the car currently is (0-100%)

  • track_rubber - How rubbered in the road surface under the car currently is (0-100%)

  • track_config - What circuit (and layout) the player is currently driving on

  • track_length - Total length of a lap in metres

  • track_position_percent - Percentage of current lap completed

  • track_weather - Current weather condition (Clear, Light Cloud, Overcast, Heavy Rain etc.)

  • track_air_temperature

  • track_road_temperature

Player & Player Car Data

  • player_gamertag - Player’s gamertag

  • player_start_position - Player’s starting grid position

  • abs_active - On/Off value to show when ABS is currently active on the car

  • tc_active - On/Off value to show when Traction Control is currently active on the car

  • stm_active - On/Off value to show when Traction Control is currently active on the car

  • valid_lap_current - On/Off value to show if the current lap is “clean” or “dirty”

  • valid_lap_next - On/Off value to show if the next lap is “clean” or “dirty” (ie, player goes off-track on final turn)

  • frr_track_limit - Value to show if the player is (1) within track limits, (2) has part of the car outside of track limits or (3) has their entire car beyond track limits

  • frr_penalties_amount - Value to show how many penalties the player has received in the session

  • frr_penalties_time - Value to show total time penalty received so far in the session

  • frr_penalties_waiting - Value to indicate a player is under investigation by FRR

  • frr_penalties_waiting_result - Value to show the result of the most recent FRR investigation (in seconds)

  • gap_car_ahead_distance - The gap to the car directly ahead, in metres

  • gap_car_ahead_time - The time gap to the car directly ahead, in seconds

  • gap_car_behind_distance - The gap to the car directly ahead, in metres

  • gap_car_behind_time - The time gap to the car directly ahead, in seconds

  • gap_leader_distance - The gap to the race leader, in metres

  • gap_leader_time - The time gap to the race leader, in seconds

  • laptime_best - Personal best lap time in the session, irrespective of penalties

  • laptime_best_clean - Personal best clean lap in the session

  • laptime_previous - Previous lap time in the session

  • laptime_predicted - Predicted current lap time, calculated by taking best lap and adding/subtracting latest split difference

  • laptime_predicted_clean - As above, but comparing to best clean lap

  • sector_current - What sector the player is currently in

  • sector_1_time - Time recorded in sector 1, current lap

  • sector_1_time_pb - Personal best time recorded in sector 1 across all laps

  • sector_2_time - Time recorded in sector 2, current lap

  • sector_2_time_pb - Personal best time recorded in sector 2 across all laps

  • sector_3_time - Time recorded in sector 3, current lap

  • sector_3_time_pb - Personal best time recorded in sector 3 across all laps

  • tyre_compound - Current tyre compound fitted (Soft, Medium, Hard, Wet, Sport, Street, Stock)

  • tyre_pressure_front_left

  • tyre_pressure_front_right

  • tyre_pressure_rear_left

  • tyre_pressure_rear_right

  • tyre_temperature_front_left_inner

  • tyre_temperature_front_left_middle

  • tyre_temperature_front_left_outer

  • tyre_temperature_front_right_inner

  • tyre_temperature_front_right_middle

  • tyre_temperature_front_right_outer

  • tyre_temperature_rear_left_inner

  • tyre_temperature_rear_left_middle

  • tyre_temperature_rear_left_outer

  • tyre_temperature_rear_right_inner

  • tyre_temperature_rear_right_middle

  • tyre_temperature_rear_right_outer

  • brake_temperature_front_left

  • brake_temperature_front_right

  • brake_temperature_rear_left

  • brake_temperature_rear_right

  • brake_lock_front_left - Yes/No on if the brake for this wheel has locked or not

  • brake_lock_front_right - Yes/No on if the brake for this wheel has locked or not

  • brake_lock_rear_left - Yes/No on if the brake for this wheel has locked or not

  • brake_lock_rear_right - Yes/No on if the brake for this wheel has locked or not

  • pitstops_completed - Number of pitstops completed in the current race

  • pitstops_required - Number of mandatory pitstops in the race

  • force_feedback_spring - Spring value from force-feedback telemetry menu

  • force_feedback_force - Force value from force-feedback telemetry menu

  • force_feedback_damper - Damper value from force-feedback telemetry menu

Opponent Player Data

  • sector_1_time_overallbest - Overall best (ie: “purple”) time recorded in sector 1, by any player

  • sector_2_time_overallbest - Overall best (ie: “purple”) time recorded in sector 2, by any player

  • sector_3_time_overallbest - Overall best (ie: “purple”) time recorded in sector 3, by any player

  • laptime_best_overall - Overall best lap of the entire session, regardless of player

  • laptime_best_overall_clean - Overall best “clean” lap of the entire race, regardless of player

  • player_1_gamertag

  • player_1_car - Car name or ID, preferably name

  • player_1_car_class

  • player_1_car_pi

  • player_1_position

  • player_1_pitting - Yes/No

  • player_1_dnf - Yes/No

  • player_1_dsq - Yes/No

  • player_1_start_position

  • player_1_tyre_compound

  • player_1_car_coordinates_01 - X coordinate, important for building track maps and radars

  • player_1_car_coordinates_02 - Y coordinate, important for building track maps and radars

  • player_1_car_coordinates_03 - Z coordinate, important for building track maps and radars

  • player_1_penalties_amount

  • player_1_penalties_time

  • player_1_last_lap

  • player_1_best_lap

  • player_1_best_lap_clean

  • player_1_gap_leader_time

  • player_1_gap_leader_distance

  • player_1_gap_ahead_time - Gap to car ahead of this player

  • player_1_gap_ahead_distance - Gap to car ahead of this player

  • player_1_gap_behind_time - Gap to car behind this player

  • player_1_gap_behind_distance - Gap to car behind this player

  • player_1_gap_player_time - Gap from this player to “you”. If “you” are this player, return zero.

  • player_1_gap_player_distance - Gap from this player to “you”. If “you” are this player, return zero.

For brevity, I will not copy the player channels 24 times. Everything marked as player_1 should also be available for player_2, player_3 etc. all the way to player_24

I will likely add to this document over time.

Update:

Thank you for taking the time to look through this and I look forward to seeing what you can do.

I’'ll just google - sorry, Bing what UDP means.

The tldr is that it’s the telemetry Forza exports: Data Out feature in Forza Motorsport - #57 by PJTierney

It’s used for many tools and features, like this:

1 Like

I’ll just Bing what ‘tldr’ means… Haha, sorry just pulling your leg. I guessed it was something like that, though I thought such things were only for serious sims. You’d think that with all the development that’s gone into FM23 that they’d have created something that plays like Forza on a controller but ACC on a wheel.

Rather than a true/false valid_lap_current I’d be interested in a value that shows what violations you got with a boolean flag integer, with e.g. 0 is clean, 1 is inherited, 2 is off-track, 4 is collision, 8 is illegal pass, 16 is rewind, and combinations thereof.

And instead of valid lap current/next, maybe current for the lap you’re in, and previous for the previous lap (to match with laptime previous and current).

And to fix issues with end of race shenanigans, it would be nice to have a packet sent with all the data finalised (with previous laptime being your last laptime). Currently, I don’t think you can get the time of your last lap.

1 Like

I can only get it with Persistent Data Plugin on SimHub, can’t get it from raw game data.

I may need to add “distance travelled” channels to this, based on an unusual issue I found when doing a distance-based race today:

More data out information like psi opposition data allowing track positioning and class groups etc

1 Like

As of Update 11, none of the channels mentioned in the OP have been added.

1 Like

Drift has been announced, and I think we’re gonna need a bigger boat telemetry pipeline.

So I propose adding:

Drift Data

  • drift_angle - Current drift angle of the car
  • drift_speed - Current speed of the car
  • drift_decel_value - This would mimick Formula Drift’s decel lights (In short, FD cars have sensors to calculate G-forces and determine if the car is accelerating, neutral, slightly decelerating, or greatly decelerating. If a car is decelerating when it shouldn’t, this may affect score and penalty assignment.)
  • is_car_on_track - Whether the car is considered within the bounds of the track
  • current_lap_drift_score - How many drift points have been banked in the current lap
  • last_lap_drift_score - How many drift points have been banked for the previous lap
  • best_lap_drift_score - The best lap score in the current race/session
  • personalbest_lap_drift_score - The persnnal best lap score on the current layout

Additionally, assuming the existence of specially delimited drift zones.

  • drift_zone_id - ID of the current drift zone active, 0 if the player is out of a zone or not actively drifting/being scored
  • last_drift_zone_completed - ID of the last drift zone the player has completed (“completed” here means either posting a valid score, or having the run disqualified e.g. from spining out or exiting the track)
  • last_zone_score - Score for the last drift zone the player has completed, 0 if player completed without a valid score
  • last_zone_best_score - The best score posted for the last drift zone the player has completed, in the current race/session
  • last_zone_personalbest_score - The personal best score for the last drift zone the player has completed

In a multiplayer scenario, you can imagine the above but for each player. Additionally, you might want the following:

  • lap_score_leader - Best lap score of any player in the current race/session
  • zone_score_leader - Best zone score of any player in the current race/session

Hopefully I didn’t forget anything.

1 Like

Bumping based in this suggestion from Turn 10

1 Like