Add additional inputs for multiple things, see ActionEvents for the exact list.
Adds explicit inputs for indicating left / right and one for turning them off. Similar how an indicator lever in a car works. Also adds the tip blink / comfort indicators functionality. If after the on signal an off signals follows within 500ms, the tip blink is activated.
Works great with the Moza Stalks for example.
Adds new controls for normal front light on and off, also one for worklight front on. The front light on action will also turn off the work light front. As this works best for me and the Moza Multi function stalks. Translation from Moza Stalk lever turn thingi to FS25
- OFF -> Front lights OFF
- parking light -> Front lights ON
- Front light -> Worklight Front ON
I assigned the normal worklights back to the fog lights switch
Add Fold, Lower, and Activate inputs for implements attached at the front or back. They are not bound to the current selected part of the vehicle.
| Name | Key | Description |
|---|---|---|
| VD_AI_INDICATOR_LEFT_ON | Set the left turn signal to on, only works if Hazard lights are off | |
| VD_AI_INDICATOR_RIGHT_ON | Set the right turn signal to on, only works if Hazard lights are off | |
| VD_AI_INDICATOR_OFF | Turns off the turn signal, only works if Hazard lights are off. If pressed shortly after one of the two ON Actions, it assumes you wanted to use tip blink / comfort indicators. This will activate the indicators for 3 seconds | |
| VD_AI_LOW_BEAM_OFF | Turns off the front lights / low beams | |
| VD_AI_LOW_BEAM_ON | Turn the front lights / low beams on, also turns off the front work light | |
| VD_AI_FRONT_WORK_LIGHT_ON | Turn the front work lights on | |
| VD_AI_HIGH_BEAM_ON | Turn the high beams on | |
| VD_AI_HIGH_BEAM_OFF_FLASH_TRIGGER | Turn the high beams off if they were on otherwise begin a flash, for moza you have to assign this button manually via inputbinding.xml to Button_6 | |
| VD_AI_HIGH_BEAM_OFF_FLASH_RELEASE | End the high beam flash - for moza you have to assign this button manually via inputbinding.xml to BUTTON_5 | |
| VD_AI_LOWER_FRONT | KEY_lshift KEY_lctrl KEY_v | Toggle lower state of all implements attached at the front |
| VD_AI_LOWER_BACK | KEY_lalt KEY_lctrl KEY_v | Toggle lower state of all implements attached at the back |
| VD_AI_FOLD_FRONT | KEY_lshift KEY_lctrl KEY_x | Toggle folding state off all implements attached at the front |
| VD_AI_FOLD_BACK | KEY_lalt KEY_lctrl KEY_x | Toggle folding state off all implements attached at the back |
| VD_AI_ACTIVATE_FRONT | KEY_lshift KEY_lctrl KEY_b | Toggle activation state all implements attached at the front |
| VD_AI_ACTIVATE_BACK | KEY_lalt KEY_lctrl KEY_b | Toggle activation state all implements attached at the back |
Replace <your_device_id> with the id of your moza stalk, best way to get this is to assign one of the buttons to it.
The replace these bindings in your inputBinding.xml
<inputBinding>
<!-- rest of the file -->
<actionBinding action="VD_AI_INDICATOR_LEFT_ON">
<binding device="<your_device_id>" input="BUTTON_10" axisComponent="+" neutralInput="0" index="1"/>
</actionBinding>
<actionBinding action="VD_AI_INDICATOR_RIGHT_ON">
<binding device="<your_device_id>" input="BUTTON_8" axisComponent="+" neutralInput="0" index="1"/>
</actionBinding>
<actionBinding action="VD_AI_INDICATOR_OFF">
<binding device="<your_device_id>" input="BUTTON_9" axisComponent="+" neutralInput="0" index="1"/>
</actionBinding>
<actionBinding action="VD_AI_FRONT_LIGHT_ON">
<binding device="<your_device_id>" input="BUTTON_2" axisComponent="+" neutralInput="0" index="1"/>
</actionBinding>
<actionBinding action="VD_AI_FRONT_LIGHT_OFF">
<binding device="<your_device_id>" input="BUTTON_1" axisComponent="+" neutralInput="0" index="1"/>
</actionBinding>
<actionBinding action="VD_AI_FRONT_WORK_LIGHT_ON">
<binding device="<your_device_id>" input="BUTTON_3" axisComponent="+" neutralInput="0" index="1"/>
</actionBinding>
<actionBinding action="VD_AI_LOW_BEAM_ON">
<binding device="<your_device_id>" input="BUTTON_2" axisComponent="+" neutralInput="0" index="1"/>
</actionBinding>
<actionBinding action="VD_AI_LOW_BEAM_OFF">
<binding device="<your_device_id>" input="BUTTON_1" axisComponent="+" neutralInput="0" index="1"/>
</actionBinding>
<actionBinding action="VD_AI_HIGH_BEAM_ON">
<binding device="<your_device_id>" input="BUTTON_4" axisComponent="+" neutralInput="0" index="1"/>
</actionBinding>
<actionBinding action="VD_AI_HIGH_BEAM_OFF_FLASH_TRIGGER">
<binding device="<your_device_id>" input="BUTTON_6" axisComponent="+" neutralInput="0" index="1"/>
</actionBinding>
<actionBinding action="VD_AI_HIGH_BEAM_OFF_FLASH_RELEASE">
<binding device="<your_device_id>" input="BUTTON_5" axisComponent="+" neutralInput="0" index="1"/>
</actionBinding>
</inputBinding>The implement actions are also exposed as functions on the vehicle, so other mods can trigger them directly
(they are added to every enterable, non-rideable vehicle type). Each takes an optional forceState: omit it to
toggle, or pass true / false to force a specific state.
| Function | Description |
|---|---|
vehicle:vdAILowerFront(state) |
Lower/raise all implements attached at the front |
vehicle:vdAILowerBack(state) |
Lower/raise all implements attached at the back |
vehicle:vdAIFoldFront(state) |
Fold/unfold all implements attached at the front |
vehicle:vdAIFoldBack(state) |
Fold/unfold all implements attached at the back |
vehicle:vdAIActivateFront(state) |
Turn on/off all implements attached at the front |
vehicle:vdAIActivateBack(state) |
Turn on/off all implements attached at the back |
vehicle:vdAILowerVehicle(state) |
Lower/raise the vehicle itself (pickup, fold‑middle or attacher lowering) |
vehicle:vdAIFoldVehicle(state) |
Fold/unfold the vehicle itself |
vehicle:vdAIActivateVehicle(state) |
Turn on/off the vehicle itself |
-- toggle the front implements' lowered state
vehicle:vdAILowerFront()
-- explicitly lower the vehicle's own working tool (e.g. self-propelled mower / baler pickup)
vehicle:vdAILowerVehicle(true)The *Vehicle variants act on the controlled vehicle itself and pick the correct mechanism automatically: an
integrated pickup (baler, forage wagon), the foldable fold middle position (self-propelled mower), or classic
attacher-joint lowering. Each function is a no-op if the vehicle does not support the corresponding action.
This mod is packaged with FSTools, our command-line utility for FS25
modding. Packaging is configured via fstools.toml (zip name, version, author).
Install FSTools (requires uv):
uv tool install --editable . # run from a checkout of the FSTools repo; installs the `fs` executableCommon commands (run from this project's root):
fs pack # build FS25_additionalInputs.zip
fs pack -d # build and deploy to the FS25 mods folder
fs pack -p # build, deploy, and launch FS25
fs validate # validate modDesc.xml
fs log # follow the game log liveSet FS25_MODS_DIR / FS25_GAME_DIR if your FS25 install is not auto-detected. See the FSTools README for the
full command and environment-variable reference.