A BepInEx mod for Over the Hill (Funselektor, 2026) that adds real-world off-road systems: rear wheel steering, tank turning, terrain modes with a central tire inflation system (CTIS), and a drivetrain dial on the HUD.
Tested with MelonLoader 0.7.3 on the Windows build of the game under Proton (Steam build 26047935) and on the native Linux build (Steam build 25992246), and with BepInEx 6 bleeding edge #789 on native Linux. The game is Unity 6000.0.75, IL2CPP.
Buy and fit it in the garage's performance upgrades (75 pebbles). The rear wheels counter-steer at 35% of the front angle for a much tighter turning circle, with animated rear wheels. Remove the upgrade to switch it off.
Buy and fit it in the performance upgrades (100 pebbles). At a standstill, hold A on a gamepad or Left Alt on keyboard and steer to spin in place. The wheels on each side counter-rotate and break loose, throwing dirt like a G-Class G-TURN. No throttle needed. It only engages while driving (not in menus, the garage or the radial menu) and stays off while the winch is attached.
A new entry in the radial menu cycles Trail, Mud, Sand, Snow, Ford. Each vehicle uses the terrain system and mode names of its real-world counterpart (G.O.A.T. Modes, Terrain Response, Multi-Terrain Select, Selec-Terrain, DYNAMIC SELECT and others).
| Mode | Tire pressure | Diffs | Other |
|---|---|---|---|
| Trail | 32 psi | stock | game default |
| Mud | 20 psi | front, rear and center locked | |
| Sand | 15 psi | center locked | |
| Snow | 22 psi | open | softer throttle |
| Ford / Wade | 32 psi | stock | +12 cm ride height, higher center of gravity |
- Tires deflate and inflate over time like a real CTIS. The physics radius shrinks so the vehicle sits lower and the tire model flattens against the ground, and grip rises as pressure drops.
- Aired-down tires pump back up to a safe pressure above 60 km/h.
- Ride height and tire changes stack on top of the game's own Suspension Lift and tire upgrades.
- Ford mode raises the suspension but also the center of gravity, so it is a trade-off for water crossings, not a free height bonus.
- Sounds: the transfer-case clunk on mode change, a hiss when pressure starts changing, and the winch motor while the suspension moves.
A third dial to the right of the pitch and roll indicators:
- Top-down drivetrain with live steering angles. Front tires green, rear tires green when Rear Wheel Steering is fitted.
- Shafts white in High range, amber in Low range. Diff markers light up when a mode locks them.
- The four mode names around the curved rim, active mode highlighted.
- Distance to your map waypoint with an orange direction wedge, and current tire pressure.
- The terrain system name along the flat bottom edge.
- Units follow your system locale (imperial or metric), or set them in the config.
- Your waypoint clears itself when you get within 20 ft (6 m) of it.
Requires MelonLoader 0.7.3 or newer (Windows, Linux under Proton, or native Linux).
- Download
OffroadPro_<version>_MelonLoader_build<game build>.zipfrom the releases page. - Put
OffroadPro.dllin the game'sModsfolder and launch the game.
Settings are in UserData/local.oth.drivesystems.cfg after the first run.
The mod also builds as a BepInEx 6 plugin. BepInEx and MelonLoader cannot share a game folder, so use one or the other.
- Install BepInEx 6 bleeding edge, IL2CPP, from https://builds.bepinex.dev/projects/bepinex_be. Use the
BepInEx-Unity.IL2CPPbuild for your platform (linux-x64orwin-x64) and extract its contents directly into the game folder (not into a subfolder named after the zip). - Linux only: in
run_bepinex.shsetexecutable_name="over the hill.x86_64", then set the Steam launch option to:"/path/to/steamapps/common/over the hill/run_bepinex.sh" %command% - Launch the game once and quit at the main menu. BepInEx generates its interop files on this first run, which takes a few minutes.
- Required: open
BepInEx/config/BepInEx.cfgand setEnabled = falseunder[Logging.Console]. With the console logger on, the game crashes at boot on Linux. - Copy
OthDriveSystems.dllintoBepInEx/plugins/OthDriveSystems/.
Requirements: .NET SDK 6 or newer, and the game with BepInEx installed and run once (the build references the interop assemblies BepInEx generates from your copy of the game; none of the game's files are in this repo).
git clone https://github.com/starlessoblivion/offroad-pro
cd offroad-pro
dotnet build -c Release -p:GameDir="/path/to/steamapps/common/over the hill"
Without -p:GameDir, the build looks in the default Steam library for your OS. The output is bin/Release/net6.0/OthDriveSystems.dll.
The MelonLoader build uses the same source and the same BepInEx interop assemblies, plus MelonLoader 0.7.3's MelonLoader/net6 folder (extract it to .cache/MelonLoader-0.7.3/ or pass -p:MelonLoaderDir=...; tools/package.sh downloads it):
dotnet build -c Release -p:GameDir="/path/to/steamapps/common/over the hill" -p:Loader=MelonLoader
After compiling, tools/ml-rewrite renames the game references to MelonLoader's naming (MelonLoader generates its interop assemblies with an Il2Cpp prefix on every namespace and assembly outside Assembly-CSharp* and Unity*, BepInEx does not). The output is bin/Release-MelonLoader/net6.0/OffroadPro.dll.
tools/package.sh <version> [GameDir] builds all three release zips into dist/.
tools/interop-dump is a small metadata reader for exploring the generated interop assemblies:
cd tools/interop-dump && dotnet build -c Release -o out
./out/interop-dump "<game>/BepInEx/interop/Assembly-CSharp.dll" VehicleUpgrade VehiclePhysics.Steering
After the first run with the mod, settings are in BepInEx/config/local.oth.drivesystems.cfg. They include prices, rear steer ratio, tank turn button, key, speed, wheelspin and touchiness, every mode's tire pressure and ride height, inflate and deflate rates, center of gravity penalty, dial text size and placement, units and the waypoint clear distance.
- Crash at boot right after "Parsing command line args": the BepInEx console logger is still on (install step 4).
- Occasional crash at startup: this comes from the .NET runtime bundled with BepInEx, not from the mod. Relaunching works. On Linux the full .NET error is in the system journal (
journalctl --user), not in Player.log. - Diagnostics: set
VerboseLog = trueunder[Debug].BepInEx/OthDriveSystems.trace.logrecords each startup step and is flushed immediately, so its last line shows where a native crash happened.DisabledPatchesswitches individual patches off by class name.
- Remove the mod's items from your save so the unmodded game loads it cleanly. Close the game first:
It writes a backup next to the save before changing it.
python3 tools/remove_mod_items.py "/path/to/My Games/over the hill/Saves/Player1.json" - Delete
BepInEx/plugins/OthDriveSystems/. To remove BepInEx too, delete its files and clear the launch option.
- The two upgrades use the game's unused
DroneandHealthupgrade categories, which nothing else in the game reads. - In co-op, the features act on your own vehicle. Other players without the mod may not see your rear wheels turn.
- A game update can break the mod until it is rebuilt against the new interop files.
MIT, see LICENSE. Over the Hill and its assets belong to Funselektor; this repo contains none of the game's files.