Developer APIs

It would be nice if they had APIs for the game, vehicles, tracks, events, leagues, so that better third-party tools could be made.

This request is true for FH and FM. I can add plugins for so many other applications but all I have is the crude UDP telemetry. Your developers are busy enough so let them focus on the core aspects of the game. Let developers (even through an approval process) have access to APIs that let us create applications outside the core for enhancing the product!

I’ve worked for EA Sports. I get game development and have decades of experience. I know the challenges of the game team developers working on core features. Extend your development team by thinking outside the box like other companies do so we can come up with cool features that aren’t part of the racing itself!

The game exposes some information through the Data Out UDP telemetry, which is nice, and is the object of a number of suggestions already.

The game doesn’t expose more static information, concerning car models, player-owned cars, tracks, or leaderboards. And this is the data I’d like to have an access to. My idea would be to use a different UDP channel that a third-party app could query and get results from (this would require the game to be running, and a user to be logged in), but any other technical way to achieve the same result is perfectly fine.

All the data I’m looking to access is either displayed in-game (e.g. names, stock PI, or user-upgraded PI), or can be used in-game in race restriction filters (e.g. region or model family). Which is to say, nothing that cannot be gathered manually, and that I would thus consider public information, if kinda annoying to get (which this suggestion is aiming to solve).


The queries I’d like to see are as follows:

models

  • Returns a list of: car ordinal, [optional: year, make, model]

model(int ordinal)

  • Returns, for the specified model, the following values: car ordinal, year, make, model, ingame nickname, division, driven wheels, engine position, cylinder, engine configuration (I/V/F/etc), displacement, induction type (NA/T/TT/etc), PI, class, speed, handling, breaking, acceleration, power, mass, torque, F/R balance, country, region, model family

cars

  • Returns a list of: car ID, car ordinal, [optional: year, make, model]
  • Car ordinal identifies the model, while ID identifies the specific car that the player owns. If I own two McLaren F1, they would have the same ordinal but a different ID. ID would be a simple sequential number.

car(int ID)

  • Returns, for the specified car, the following values: car ID, car ordinal, driven wheels, cylinder, engine configuration (I/V/F/etc), displacement, induction type (NA/T/TT/etc), PI, class, speed, handling, breaking, acceleration, power, mass, torque, F/R balance, array of upgrade parts, array of tune settings
  • Information intrinsic to the model and unmodifiable by the player (e.g. year, name, country, engine placement) is skipped as redundant, but could be optionally included.
  • Upgrade parts could be a variable-length array containing a unique ID for each installed part
  • Tune settings could be a fixed-length array with the values either as set by the user or as set by default
  • If the tune is locked, then the list of upgrades and tune settings may be set to null/default values or skipped.

tracks

  • Returns a list of: track ordinal, [optional: track name, layout name]

track(int ordinal)

  • Returns a list of: track ordinal, track name, layout name, length, location, country

mytime(int ordinal, int class)

  • Returns, for the specified track and class, the player’s leaderboard information: track ordinal, class, player name, region, car ordinal, PI, time, assists, global rank, regional rank, friends rank, hardcore rank
  • Region should be the region (as used in Rivals leaderboards) ID of the player
  • Assists could be a bit flag or set of values that identify ABS, TCS, STM, and gear mode used
  • If the player has not set a time, returns null/default values
  • The player would be determined by whichever account is currently logged in to the game

leaderboard(int ordinal, int class, bool clean, int filter, int page)

  • Returns, for the specified track and class, a list of: track ordinal, class, player name, region, car ordinal, PI, time, assists, rank
  • When the clean boolean flag is set to true, the query only returns clean lap times, otherwise returns clean and dirty lap times
  • Filter specifies which results the query returns, with possible values being: global (e.g. filter=0), friends (e.g. filter=1), hardcore(e.g. filter=2), regional (e.g. filter=10 to 15, depending on how many regions there are)
  • Rank would be given based on the flag for global/region/friends/hardcore
  • Page would allow the query to return a limited range of results, with page=1 returning e.g. the first 100 results, page=2 returning results 101-200 etc. This is to avoid having to return tens of thousands of results at a time.