Runtime mods for the current Steam version of FlatOut 2.
The hooks use exact executable signatures. Experimental features are marked below.
fo2_orbit_camera: instant right-stick orbit control for the chase camera. Other camera modes stay untouched.fo2_zpatch_reimpl: widescreen and FOV fixes, startup skips, frame pacing changes, local split screen, and optional menu-car limit patches.fo2_xinput_rumble: XInput controller rumble with directional feedback and gameplay-event rumble.fo2_skip_track: music track skip from keyboard or controller.
Download the release zip for the mod you want, then extract it into the FlatOut 2 folder next to FlatOut2.exe.
ASI-based mods include winmm.dll, the known-good Ultimate ASI Loader build used for this game:
- SHA-256:
9A2BB218AB014FA4AD56104108C26AE48BF3E22595C126CD4F41367C799DA722 - File version:
1.0.0.0 - Description:
Ultimate ASI Loader
Avoid dxwrapper.dll with these mods unless you specifically need it. It can make frame pacing worse.
Source: modules\orbit_camera
Install files:
fo2_orbit_camera.asifo2_orbit_camera.iniwinmm.dll
The mod controls only the stock chase camera. Cockpit, hood, bumper, replay, crash, and other camera modes stay untouched.
The right stick selects an absolute chase-camera angle:
- idle or forward: native chase view
- right: right-side view
- back: rear-facing view
- left: left-side view
- diagonals: intermediate angles
The camera snaps directly to the selected angle. It does not accumulate rotation, ease toward the target, or apply a speed limit. Releasing the stick returns control to the native chase camera.
The mod keeps separate input state for each local player. It rotates the native chase-camera offset before the game handles collision, field of view, and shake. fo2_orbit_camera.ini controls the deadzone, radial response curve, axis inversion, and input source.
Source=Auto reads the assigned SDL gamepad when the verified Zoom Platform build is present. Otherwise it reads the game's DirectInput state for stock pads or the split-screen adapter state for player four. If the plugin cannot identify the assigned device, it leaves the camera alone.
Source: modules\zpatch_reimpl
Install files:
fo2_zpatch_reimpl.asifo2_zpatch_reimpl.inifo2_splitscreen.bfsfo2_splitscreen_filesystemwinmm.dll
Default fixes:
SkipLicenseScreen=1
SkipIntro=1
UncapFPS=1
FramePacingFix=1
RemoveVSync=1
BorderlessWindowed=0
WidescreenFix=1
WidescreenFix_FOVScaling=1
SplitscreenFix=0
SplitscreenPostProcessingFix=0
SplitscreenZoomInputFix=1
MenuCarBackfaceCulling=0
MenuCarMaxModelFileSize=524288
MenuCarMaxSkinFileSize=2097152
MenuCarMaxSurfaces=16Feature notes:
SkipLicenseScreenhides the license/copyright artwork and removes its five-second startup delay.SkipIntrobypasses the startup intro videos.UncapFPSunlocks rendering while keeping the original game timing interval intact.FramePacingFiximproves the stock frame gate by removing the oldSleep(1)yield that can cause uneven pacing on modern Windows.RemoveVSyncrequests immediate D3D9 presentation.BorderlessWindowedis available but disabled by default.WidescreenFixandWidescreenFix_FOVScalingfix ultrawide/widescreen menu, garage, and race camera behavior.SplitscreenFixis an opt-in local multiplayer prototype for two, three, or four players. The party screen assigns one distinct input device to each player.- Three players use keyboard plus two pads. Their viewports occupy the top-left, top-right, and bottom-left cells of a 2x2 grid.
- Four players require keyboard plus three pads. The third pad must appear as XInput user 2 when the input manager starts. If that adapter does not install, the menu stays capped at three players. Four-pad play without a keyboard is not supported.
- Split orientation is selected at runtime from the split-screen party setup and persisted by the ASI in
fo2_splitscreen_layout.lua.Verticaluses left/right viewports andHorizontaluses top/bottom viewports; missing or invalid state defaults toHorizontal, which is also the safe fallback if native layout support cannot be installed. BED scripts never load the state file directly; a nativeInputquery reports the authoritative active layout and capability. SplitscreenPostProcessingFixis a separate experimental opt-in. It performs the shared post-process once with a full-device viewport and restores the final player viewport afterward; leave it off if a shader shows seams or edge artifacts.SplitscreenZoomInputFixis version- and capability-gated Zoom Platform compatibility. For the verified Zoom build it translates Zoom-synthesized Return back to the originating pad slot during split ready prompts without suppressing the input. Unknown/no-Zoom installations keep the core split fix unchanged.MenuCarMaxModelFileSizeandMenuCarMaxSkinFileSizeraise the menu preview input allocations. Their defaults match the stock game.MenuCarBackfaceCullingenables counter-clockwise culling for the menu car. It is off by default.MenuCarMaxSurfacesreplaces the fixed material and surface tables with bounded storage. Stock is16. Keep that default unless a menu model needs more records.
Source: modules\xinput_rumble
Install files:
dinput8.dllfo2_xinput_rumble.ini
This is a DirectInput 8 proxy that forwards the game's normal input calls and adds XInput rumble for modern controllers.
It supports:
- player damage rumble
- player contact/collision rumble
- car-to-car impact rumble
- object/rubble contact rumble
- scrape/wall-hug rumble
- rough landing feedback
- directional rumble bias, so left/right impacts can favor the corresponding motor
- configurable strength, duration, cooldown, envelopes, and synthetic button-test rumble
The default config is tuned for an Xbox-style controller on controller index 0.
The rumble module has one output channel. In split screen, events from any local player can currently reach that configured controller. Per-player rumble routing is not implemented.
Source: modules\skip_track
Install files:
fo2_skip_track.asifo2_skip_track.iniwinmm.dll
Default controls:
hotkey_vk=78
controller_buttons=LEFT_SHOULDER78 is the Windows virtual-key code for N.
The mod hooks FlatOut 2 music playback routines and requests a new track selection when triggered, thus skipping current track.
Requirements:
- Windows
- PowerShell
- Visual Studio 2022 C++ build tools with the x86 toolchain
- Rust/Cargo and internet access for the first build only. The build downloads
the
bfstool1.1.0 source crate, verifies its pinned SHA-256, and compiles it into the ignored.tools\cache. Later builds reuse the verified cached tool.
Build all mods:
powershell -ExecutionPolicy Bypass -File .\build.ps1The top-level build creates dist\ with all runtime files:
winmm.dllfo2_orbit_camera.asifo2_orbit_camera.inifo2_zpatch_reimpl.asifo2_zpatch_reimpl.inifo2_splitscreen.bfsfo2_splitscreen_filesystemdinput8.dllfo2_xinput_rumble.inifo2_skip_track.asifo2_skip_track.ini
Install the built files to the default Steam path:
powershell -ExecutionPolicy Bypass -File .\install.ps1Each module also has its own build.ps1 for building only that mod.
The split-screen BFS is a generated artifact, not versioned source. Its two
inputs live under modules\zpatch_reimpl\assets\splitscreen; the zpatch module
build creates a v2/file-version-05050420 archive, checks that it lists exactly
the two expected BED paths, extracts it to a temporary directory, and verifies
both payload hashes before the top-level build copies it into dist\. The
19-byte fo2_splitscreen_filesystem file is likewise regenerated without a BOM
or trailing line ending.
bfstool 1.1.0 does not produce byte-identical archive metadata on every run
because some equal-frequency Huffman metadata is emitted from randomized map
iteration. Builds are therefore reproducible semantically (same paths and
payload hashes), but the generated BFS SHA-256 may differ between builds.