Repository navigation
Releases: conner-mcvay/fh2-mods
Release list
FH2 Wheel Tools - spacers, tire profile, camber, ride height and more
fh2wheels for Forza Horizon 2 (PC)
More wheel, tire and suspension options in the garage of Forza Horizon 2 on PC (Azimuth), for every car, imported ones included. They're real upgrades: they show up in Upgrades > Tires & Rims beside the game's own, preview live on the car, are bought and installed like any other part, and are saved with the car.
This package contains no game files. The installer builds its database changes on your own game's files and installs them with backups.
What you get
Under Upgrades > Tires & Rims:
| Option | Range |
|---|---|
| Front / Rear Wheel Offset | Stock, -20 to +50 mm a side in 5 mm steps, then +75, +100 and +150 mm (way past the fender) |
| Front / Rear Tire Profile | aspect ratio -30 to +35 points on the same rim: a 255/40 with +10 becomes a 255/50 |
| Rear Rim Style | a different rim on the rear axle (needs an aftermarket front rim); Stock puts the front rims back on |
| Rim sizes | 13" to 24", front and rear, besides the car's own sizes (smaller ones lighter, larger ones heavier) |
| Tire widths | 185 to 395 mm in 10 mm steps, front and rear, besides the car's own widths |
| Tire compound | drag and rally tires for every car |
Under Tuning, on cars with adjustable springs: ride height 10 cm lower and 40 cm higher than the game allows, camber -15 to +15 degrees.
The offset and profile categories use the wheel camera, so the car stays in view while you pick.
What you need
| Forza Horizon 2 | version 1.0.0.64 (Anthem_1.0.0.64_x64__8wekyb3d8bbwe), running on Azimuth 0.9.10 |
| FH2 Extra Options | the build for Azimuth 0.9.10: winmm.dll (with FH2_ExtraOptions.ini) beside azimuth.exe. It's what makes the game load the changed database (from Mount\mediapc); the installer turns on its [Files] EnableMediaOverrides=1 setting if it's off. |
| Windows | 10 or 11, with the built-in Windows PowerShell 5.1 (nothing to install). sqlite3.exe is downloaded from sqlite.org on first use (hash-checked) unless it's on your PATH. |
Install
- Close the game.
- Extract this zip anywhere and keep the folders together.
- Double-click
Install-Fh2wheels.cmdand enter your Azimuth folder (the one withazimuth.exe). The game folder is read from Azimuth's settings. - Start the game; the new options are in Upgrades > Tires & Rims.
Imported cars (e.g. with the FM5 car importer): the rim sizes, tire widths and drag/rally tires are made from each car's own options when you install. For cars you import later, run Install-Fh2wheels.cmd again afterwards. Wheel offsets, tire profiles and rear rims work on every car either way.
Updating: extract the new version and run its Install-Fh2wheels.cmd. It replaces the old one.
Uninstall
Close the game and double-click Uninstall-Fh2wheels.cmd. It restores the game database from the backup and takes fh2wheels.dll out of Azimuth.
The installer's backups are kept in <game folder>\mod-backups\fh2wheels-<date>. Mods that went in after fh2wheels (for example cars imported afterwards) have to come out first, newest first, before the database backup can be restored; the uninstaller says so when that's the case.
Cars that had fh2wheels parts fitted keep the saved part, which does nothing without the mod. Refit stock in the garage before uninstalling if you plan to share a save.
How it works
fh2wheels.dllgoes into Azimuth'sdata\binasazimuth-tls.dll; the DLL that was there is renamedfh2wheels-next.dll, and fh2wheels loads it, so Extra Options and Azimuth keep working. It applies the offsets and profiles when a car is built, shows the rear rims, lets the game sell the new parts, and supplies the menus' text. Settings:data\bin\fh2wheels.ini; log:data\bin\fh2wheels.log.- The game database (
Mount\mediapc\stripped\gamedbRC.slt): the new categories and options, each car's rim sizes, tire widths and drag/rally tires, and the ride height ranges. The camber range is inMount\mediapc\physics\PhysicsSettings.ini.
Both halves are needed: without the DLL, the offset and profile options do nothing and their text is blank.
The rear rim is kept in the car's save (in the garage's unused tire brand field). The game has no slot for offsets or profiles, so they borrow four part slots ordinary cars don't use (restrictor plate, motor parts, quad turbo and electric motor); the DLL keeps the game from treating them as engine parts.
With fh2net
fh2wheels and fh2net both sit in the azimuth-tls.dll chain and work together, installed in either order: fh2net always ends up in front (fh2wheels goes behind it when it's already there), and each can be updated or uninstalled on its own.
Known limits
- A rear rim shows only with an aftermarket front rim: with the stock rims, the car draws its own wheels on all four corners.
- The game doesn't draw rims larger than 24", so the sizes stop there. Cars that come with larger rims keep them.
- Very wide tires and big offsets go through the bodywork; that's the point for some builds.
fm5-importer
FM5 Car Importer for Forza Horizon 2 (PC)
Brings cars from Forza Motorsport 5 into Forza Horizon 2 running on PC through Azimuth. Pick the cars, answer a few questions, and they show up in the Autoshow: buyable, drivable, upgradable and paintable, with an engine sound, night lights and their wheels added to the wheel shop.
This package contains no game files. Everything is read from your own FM5 and FH2 installs and converted on your machine.
What you need
| Forza Horizon 2 | version 1.0.0.64 (Anthem_1.0.0.64_x64__8wekyb3d8bbwe), running on Azimuth 0.9.10 (0.9.9 also works) |
| FH2 Extra Options | the build for your Azimuth: for 0.9.10, winmm.dll (with FH2_ExtraOptions.ini) beside azimuth.exe; for 0.9.9, 0.2.74 or later in data\bin. The importer turns on its [Files] EnableMediaOverrides=1 setting. |
| Forza Motorsport 5 | version 1.0.0.20 (Forza_1.0.0.20_x64__8wekyb3d8bbwe), any folder (it isn't run, only read) |
| Windows | 10 or 11, with the built-in Windows PowerShell 5.1 |
| Internet | once, to download sqlite3.exe from sqlite.org (checked against its known hash) |
| Disk | about 20-80 MB per imported car, plus backups |
Quick start
- Extract this zip anywhere (for example
C:\FH2-Mods\fm5-car-importer). Keep the folders together. - Close Azimuth / the game.
- Double-click
Import-Fm5Cars.cmd. - Answer the questions (see below). Enter accepts the suggested answer.
- Start the game through
azimuth.exe. Your cars are in the Autoshow.
The first run asks where Azimuth, FH2 and FM5 are and remembers them. If Azimuth already knows your FH2 folder, that's suggested.
The questions, per car
| Question | What to answer |
|---|---|
| FM5 car to add | Type part of the name (transam, corvette 2002, mustang 1995) and pick a number from the matches. Only cars FH2 doesn't already have are offered. Add as many as you like; press Enter on an empty line when done. |
| Data donor | An FH2 car of the same kind (era, body style, drivetrain). It supplies the bits of car data FH2 has and FM5 doesn't. A same-make, nearest-year car is suggested. |
| Sound donor | An FH2 car whose engine sound the import uses (FM5's own engine sounds don't play in FH2). Pick a car with a similar engine: a V8 for a V8. |
| Autoshow group | Where the car is listed (Retro Muscle, Modern Muscle, Super GT, ...). Enter keeps the data donor's group. It also decides which wheel-shop category the car's wheels go in. |
| Light donor | An FH2 car with similar lamps whose night lights are fitted to the import (FM5 has no night, so its cars come without lighting data). Use a car with pop-up headlights for a pop-up car. Type none to skip. |
| Use whiter headlights? | Asked when the light donor has warm, orange-ish halogen headlights. Yes gives a whiter halogen. |
Then it shows the plan, asks to proceed, converts the cars (about a minute each) and installs them.
What it installs, and how to undo it
Each run is installed as a layer on top of whatever is already in your game, with its own backup folder in <FH2 folder>\mod-backups\:
fm5-cars-<date-time>- the cars of that run (their car list is incars.json)fm5-cars-lights-<date-time>- their night lights, if you picked light donors
To undo a layer, run the Uninstall.ps1 inside its backup folder (right-click > Run with PowerShell, or see the guide). Undo layers newest first: the uninstaller refuses to touch files that a later layer changed.
Imports stack: run the importer again any time to add more cars; the cars you already imported stay.
Same cars on another PC
- On the PC with the cars:
Import-Fm5Cars.cmd -ExportList cars.jsonwrites every imported car with all its choices (donors, sound, group, lights). - Copy
cars.jsonto the other PC, next toImport-Fm5Cars.cmdthere. - On the other PC:
Import-Fm5Cars.cmd -FromList cars.jsonimports them with the same choices. It needs its own FM5 and FH2. Cars that PC already has are skipped, so it's safe to run again.
Run these from a command prompt in the importer folder.
Known bugs
- Dirt mapping needs work: dirt and grime don't build up on imported cars the way they do on FH2's own.
- Lights may be slightly buggy: night lights are transplanted from the light donor and fitted to the car, so glows can sit a little off, some lens glass glows warmer than it should, and some cars' pop-up headlights don't rise (see the guide for the fix that worked for the 2002 Trans Am).
- Car names need work: imported cars show a blank name in menus (FH2 has no text for them).
- Autoshow thumbnails don't work, but the car's thumbnail does show in your garage.
Good to know
- The importer writes only to
<FH2 folder>\Mount\mediapc, which Extra Options loads over the game's own media: the game database, car and wheel archives andzipmanifest.xmlgo there. The game'sMount\media,hash.manifestandazimuth.exeare never touched. DeletingMount\mediapcremoves every import at once. - Upgrading from 1.x (Azimuth 0.9.7, which patched
hash.manifestandazimuth.exe): undo your 1.x layers first with theirUninstall.ps1(newest first), or restore the game folder from a clean copy, then re-import with 2.0. See the guide. - Extra Options also unlocks DLC cars and adds stock rims for FH2's own cars, so the old dlc-unlock and stock-wheel-swap mods aren't needed. The importer still adds imported cars' wheels itself (Extra Options' rims cover FH2's own cars only).
- Engine sounds are borrowed from the sound donor.
- Keep this folder: you need it to add more cars later. Your settings are remembered in
%LOCALAPPDATA%\fh2-mods\import-fm5-cars.json.
License
MIT (see LICENSE). Forza Horizon 2 and Forza Motorsport 5 are not included and belong to their owners; you need your own copies.
The full walkthrough, advanced options (tuning lights, adding wheels for older imports, command-line use) and troubleshooting are in GUIDE.md.
FH2 PC online play (dedicated servers, private lobbies)
fh2net: online free roam for Forza Horizon 2 (PC)
Experimental. fh2net lets FH2 on Azimuth join online free roam with other players through a server you run yourself (on a LAN, or over the internet with port forwarding). Microsoft's and Turn 10's services are long gone; nothing here contacts them.
No Turn 10 or Microsoft code is used. fh2net and the server are written from scratch, and the package contains no game files. The server reads the game's message formats at runtime from your own copy of FH2.
Single player keeps working with fh2net installed: with the server running, events pay XP and CR and drivatars race as usual. Without it, the game starts offline.
Used fh2net 0.1.0 or 0.1.1? Their server zeroed your save's XP and CR payouts (even offline). Close the game and run
Repair-Fh2Save.ps1once (right-click > Run with PowerShell). It adds a fixed save revision and keeps the old ones.
What you need
| Every player | FH2 1.0.0.64 on Azimuth 0.9.10 (0.9.9 and 0.9.7 also work) with FH2 Extra Options installed (the build for your Azimuth) |
| The server PC (one player, or any PC) | Python 3 with pefile (py -3 -m pip install pefile) and a copy of FH2 1.0.0.64 (the server reads message formats from the game's exe; nothing of the game is shipped) |
How it works
- fh2net.dll becomes Azimuth's
data\bin\azimuth-tls.dll; the DLL that was there becomesazimuth-tls-next.dll, and fh2net loads it. On Azimuth 0.9.10 that is Azimuth's own (Extra Options iswinmm.dllbesideazimuth.exeand loads separately); on 0.9.9 it is Extra Options. Either way both keep working. It replaces Azimuth's offline stubs: the game sees an Xbox Live connection, its web requests go to your server, and its game traffic (UDP) goes to your server's relay. - fh2srv.py is the server. On TCP 8090 it answers the game's web calls (sign-in, Xbox Live session directory, profiles, liveries). On UDP 5101 it relays game traffic between consoles: each console simulates its own car and the relay forwards it to the others, as Turn 10's servers did.
Setup
1. The server
On the server PC (it can be one of the players' PCs):
py -3 -m pip install pefile
py -3 -I server\fh2srv.py --host 0.0.0.0 --game "C:\Games\Anthem_1.0.0.64_x64__8wekyb3d8bbwe"Leave it running. Let it through Windows Firewall (PowerShell as administrator):
New-NetFirewallRule -DisplayName fh2srv-http -Direction Inbound -Protocol TCP -LocalPort 8090 -Action Allow
New-NetFirewallRule -DisplayName fh2srv-game -Direction Inbound -Protocol UDP -LocalPort 5101 -Action AllowOver the internet, forward TCP 8090 and UDP 5101 on the server's router to the server PC, and give players its public IP. Liveries players upload are kept in server\data\.
2. Every player
-
Close the game.
-
Run
Install-Fh2net.ps1(right-click > Run with PowerShell, orpowershell -ExecutionPolicy Bypass -File Install-Fh2net.ps1 -AzimuthRoot <Azimuth folder>). It copiesfh2net.iniinto Azimuth'sdata\binthe first time. -
Edit
<Azimuth folder>\data\bin\fh2net.ini:Setting Value [http] Serverhttp://<server IP>:8090(http://127.0.0.1:8090on the server PC itself)[net] ServerAddress<server IP>(::1on the server PC itself)[xbl] Xuida number unique to this player, e.g. 2533274790395904for the first,...905for the second,...906for the third[net] LocalAddressunique per player too: ZmgybmV0LWxvY2FsLWRldmljZS0x,...ZS0y,...ZS0z[xbl] Gamertagyour name in the session (empty: Azimuth's player name) -
Your save follows the Xuid. Azimuth keeps it in
<Azimuth folder>\data\titles\1A96545B\saves\player-1\User_<Xuid in hex>(moving to a new Azimuth version, copy the wholesavesfolder to the same place under the newdatafolder). With the default Xuid (2533274790395904=User_9000000000000) nothing changes. With another one, copy yourUser_9000000000000folder to the new name first (...905=User_9000000000001,...906=User_9000000000002), or the game starts a new save.
3. Playing
- Start the server, then the game through Azimuth. The game signs in to your server while it loads (the server's window shows the requests). If fh2net can't reach the server when the game starts, it stays out of the way and the game starts offline, as with Azimuth alone (
fh2net.logsays so). Restart the game once the server is up to play online. - In free roam, open the pause menu and start online free roam. When it says "freeroam session found", press Select (View) to join.
- Other players do the same and join the same session. Players appear in the session list and each other's world.
Known problems
- If the server stops while you play, the game may hang on its next request to the server. Restart the game.
- No AI traffic online, and the weather isn't shared (each player keeps their own).
- Races, Road Trips, car meets and other online events aren't supported yet; only free roam driving.
- Liveries: other players see your design only after you save it in the paint shop while online (that uploads it to the server). Designs saved offline aren't sent.
- Leaving and rejoining is handled; if a session gets stuck, restart the game (the server doesn't need restarting).
Files
README.md, LICENSE
fh2net.dll the Azimuth DLL
fh2net.ini settings template (installed into data\bin the first time)
Install-Fh2net.ps1 install / -Uninstall
Repair-Fh2Save.ps1 restores XP and CR payouts in saves zeroed by 0.1.0/0.1.1's server
server\ fh2srv.py (run this), relay.py, nerd.py, xls.py
extras\ controller scripts for testing ([input] Script=): idle (fakes a connected controller), drive (joins and drives in circles)
Troubleshooting: fh2net logs to <Azimuth folder>\data\bin\fh2net.log; the server records every request in server\captures\.
Credits
- Azimuth by Almost There Games, which runs Forza Horizon 2 on PC. fh2net is a plug-in for it and wouldn't exist without it.
- FH2 Extra Options by RokkuDayo, which fh2net loads alongside itself.
FH2 Audio Tools
Car Sound Tuner for Forza Horizon 2 (PC)
Sliders for any car's sound in Forza Horizon 2 on PC (Azimuth): make an idle lope louder, brighten a dull exhaust, take the boom out of a muscle car, turn up a supercharger whine or a blow-off valve. Pick a car, move the sliders, press Apply, start the game.
This package contains no game files. It reads your own game's sound files and writes changed copies next to them; the originals are never touched.
What you need
| Forza Horizon 2 | version 1.0.0.64 (Anthem_1.0.0.64_x64__8wekyb3d8bbwe), running on Azimuth 0.9.10 (0.9.9 also works) |
| FH2 Extra Options | the build for your Azimuth: for 0.9.10, winmm.dll (with FH2_ExtraOptions.ini) beside azimuth.exe; for 0.9.9, 0.2.74 or later in data\bin. It's what makes the game load the changed sounds (from Mount\mediapc); the tuner offers to turn on its [Files] EnableMediaOverrides=1 setting when it's off. |
| Windows | 10 or 11, with the built-in Windows PowerShell 5.1 (nothing to install) |
Quick start
- Extract this zip anywhere and keep the folders together.
- Double-click
Tune-CarSound.cmd. The first time, pick your Azimuth folder (the one withazimuth.exe); the game folder is read from Azimuth's settings (if it can't be, you're asked for that too). It's remembered; Folders... changes it. The window's title shows the game folder it's tuning. - Type part of a car's name (
mustang,dart,camaro 69) and pick it from the list. - Move the sliders, close the game, press Apply.
- Start the game and drive that car.
Revert goes back to what's applied, Reset to stock puts every slider at 0 (then Apply). Tuned cars have a * in the list.
The sliders
Every slider adds to the car's own sound (0 = stock), in dB for volumes: +6 dB is about twice as loud, +24 is the most. Hover a slider's name for what it does. A greyed-out slider means that car doesn't have that sound.
| Tab | Slider | What it changes |
|---|---|---|
| Exhaust / Engine / Intake | Volume | every layer of that sound, all RPM |
| Idle | the layer recorded at the lowest RPM (the idle), on top of Volume | |
| Highs | the high band of its EQ: brighter, more crackle (shows the resulting EQ; at most +10 dB) | |
| Lows | the low band of its EQ: less or more boom | |
| Grit | the drive of its saturator: more rasp | |
| Turbo & other | Turbo | the turbo sounds (single and twin turbos sound the same in FH2) |
| Boost whistle | the spool whistle and air that rise with boost | |
| Supercharger (DSC / CSC) | positive-displacement and centrifugal supercharger whine | |
| Blow-off valve | the dump valve on lift-off | |
| Backfires | backfire pops | |
| Low-frequency layer | the separate sub-bass layer some cars have; lower it if a car sounds boomy |
The turbo, supercharger and blow-off sounds only play when the car has that part fitted (upgrade it in the game). An engine swap brings its engine's sound, tuning included.
Tips
- Too much distorts. One layer much past +20 dB clips, and so do several boosted layers that play together (e.g. Idle on exhaust, engine and intake at once). If it crackles in the wrong way, back off a few dB. To make one sound stand out more, lowering the others (or the game's music / effects volume) works better than pushing it.
- Boomy? Low-frequency layer down (-10 to -20) and Lows down.
- Dull exhaust? Exhaust Highs up (+6 to +12), a little Grit.
- A tune we liked on the 1968 Dodge Dart: Exhaust Idle +10, Highs +12, Grit +4; Engine Idle +9; Intake Idle +9; Low-frequency layer -20.
What it changes, and how to undo it
Each car's sound is a file in your game folder, Mount\media\audio\fmodanthem\durango\PG_<car>.bank. Apply builds that car's file from the game's own each time and writes it to Mount\mediapc\audio\fmodanthem\durango\, which Extra Options makes the game read first. Your settings are kept in car-sound.json in that folder.
- One car back to stock: Reset to stock, Apply.
- Everything back to stock: delete the
PG_*.bankfiles andcar-sound.jsoninMount\mediapc\audio\fmodanthem\durango(or runSet-BoostVolume.cmd -Remove). - Sound files another mod put in that folder are never overwritten.
Close the game before applying: the tuner refuses while it's running.
Known limits
- Off-throttle burble has no slider: its volume follows an RPM curve in every car, which the tuner doesn't edit yet.
- A handful of cars have no separate Highs / Lows / Grit for the intake or engine (their sliders are greyed out). 96 of 351 cars have a low-frequency layer.
- Imported FM5 cars (from the FM5 Car Importer) use the sound of the FH2 car they borrowed it from: tune that car.
- The window scales to your main display's resolution when it opens.
Command line
Set-BoostVolume.cmd does the turbo / supercharger / blow-off settings from a command prompt, for one car or many (-Car mustang, -Car all), and -Remove puts every tuned car back to stock:
Set-BoostVolume.cmd -Car FOR_MustangGT500_13 -DSC 12
Set-BoostVolume.cmd -List -Car mustang
Set-BoostVolume.cmd -Remove
powershell -ExecutionPolicy Bypass -File tools\audio\Show-CarSound.ps1 -Car dart lists everything a car's sound is made of (every RPM layer with its sample and volume).
Files
Tune-CarSound.cmd the tuner window
Set-BoostVolume.cmd command-line turbo / supercharger / blow-off volume
tools\audio\ the scripts (FmodBank.cs reads and changes the sound files)
README.md, CHANGELOG.md, LICENSE, VERSION.txt
cockpit-fov
Changes cockpit FOV from 48 to 70 with tools to support custom edits.