Skip to content

3. Addons ‐ Addon Car Tutorial

Arthur edited this page Oct 29, 2026 · 4 revisions

Existing addon cars can easily be converted to work with Extra Options’ new mod loader system. This will be a short guide on how authors can perform the conversion.

Do note that this won't cover the creation/portion process of a car from scratch, only what's needed for experienced creators to bring their existing mods into the new system.

The example files displayed here will be of the Porsche 911 GT3 RS mod by @Pixzl on the ForzaMods Discord.

Introduction

As mentioned in the previous chapters, an Extra Options addon mod does not store an entire database or entire string lists, but only the new data that's to be appended, edited, or even removed from the game's vanilla database. The data needed can quickly be generated through a script if you already have a mod done that previously relied on mediapc and replacing the entire database to work.

Setting up the script.

Download the "mod_diff.py" and "Addon Mod Generator.bat" from Extra Options' source code here: https://github.com/RokkuDayo/ForzaHorizon2_ExtraOptions/tree/main/tools

Place them in a folder where you can easily go back to when working on your mods.

Also keep an unedited copy of the game's gamedbRC.slt and EN.zip files in the same directory for convenience's sake.

Preparing the files

Your addon car, alongside its ZIP file, should contain a custom gamedbRC.slt with the new custom data added to it, and string tables containing the car's name and manufacturer if it isn't in the base game already.

Make copies of those assets and rename them to something distinct. In this example, I'll use gamedbRC+porsche.slt and EN+porsche.zip

image

Diffing the files

You can run the Python script manually, but the quickest way to get it running is to hold CTRL, click on the vanilla gamedbRC and then on the edited one, and then drag both over the batch file.

image

Once doing so, you will be prompted for a few options.

Diffing order

image

The vanilla file has to always be the first one in the list. If that is correct in this prompt, press Enter to continue. If not and the file order is reversed, type 2 and then Enter.

Table selection

In case you only want to export a specific table, you can type its name here. If you wish to export all tables, which will usually be the case, just press Enter again.

image

Custom table keys

If you don't want to export custom table keys added to your database, you can do so here. Most of the time you will want to leave this at automatic.

image

Policies

Value conflicts

This is an important prompt. Here you get to choose what happens when another mod performs an edit at the same line as yours.

If you wish to let the mod with highest priority win and let yours still load, type 2. If you wish for yours to not be loaded at all if there's a conflict, type 1.

image

ID conflicts

Another important prompt. Here you can choose what happens when another mod adds a row with the same ID as your mod.

If you wish to let the mod with the highest priority have the ID, type 1. If you wish to have Extra Options assign the conflicting content the nearest available ID and update it on all fields that refer to it, type 2.

The "nearest" option is mostly recommended for mods that add parts to cars through carbin appends, as those will be updated there too. Addon cars should still work but could be unstable due to the amount of moving parts that one requires.

image

Output

At the end, you'll be prompted to pick the path for the target database you want to edit. The game only has one, so 99% of the time you'll want to leave it at default unless you're doing something very specific and custom.

You'll also be prompted to choose where the final JSON will be exported to. Default will export it to where the Python script is located and under the database.json file name.

Lastly, you can also generate a report to know what exactly was done during the diffing process.

image

Congrats, you now have a JSON database that's fully compatible with Extra Options.

image

If you need to perform any changes to the existing data, you can now easily do it here instead of exporting the JSON all over again.

String table

Now, onto the string tables. Drag both the vanilla EN.zip and the edited one into the batch file. You can also perform the same with other languages.

image

You will be once again prompted to confirm the file order.

image

You'll then be prompted for the language code. You can leave this at default if you are draggin in a ZIP.

image

Lastly, you'll have the same output options as the database.

image

Congrats, you now have a strings file compatible with Extra Options.

Setting up your mod folder

The last part now is to set up the folder for the mod.

Go to your mods folder insize the Azimuth directory. Create a new folder there the name for your mod. I'll use Porsche 911 GT3 RS (992).

image

Inside it, create a folder called "media" and then place the JSONs we made earlier like this.

image

Mod.json

The mod.json has to be created manually, but all it holds is some simple metadata and where some files are.

Feel free to copy this and use it as a starting point

{
  "format_version": 1,
  "id": "your-mod",
  "name": "My Awesome Mod",
  "author": "My Awesome Name",
  "version": "1.0.0",
  "description": "My awesome description for my awesome mod.",
  "database": "database.json",
  "media": "media",
  "dependencies": []
}

The database and media fields are only needed if your mod uses them. Delete those lines if yours doesn't use one. In this case, we'll need both since a car uses a database and media content.

The dependencies field can be used to have the mod not load in case another one is missing. For example, the Motorsport 5 Packs by ZephyrSkies use this:

  ...
  "dependencies": [
    "fm5-zs-fm5-common"
  ]

The final one for this example will be this.

image

Once that's all dealt with, all that's left is the media folder. It acts exactly as the name implies. It is a mediapc/mediaoverride but dedicated to your mod's assets. It's directory structure should match the media folder in the game's vanilla media folder.

image

In the case of thumbnails, there is something to account for. You do not need to ZIP your RC folder. They can be laid bare inside a folder of same name and the Extra Options loader will point the game to them.

image

Lastly, the ZIP for the addon car will be placed inside the Cars folder.

image

End

This should be all needed. You can now go in-game check if it worked.

Captura de Tela (651)

Clone this wiki locally