Since I went through the pain of not finding a guide on how to fix this problem and having to look around everywhere until I found a solution, I felt the need to post it here in case I'm not alone or this might be become a problem with Forza Horizon 6 aswell.
The following was tested on Nobara 43, using GE-Proton-10-15 with a SIMAGIC Alpha Mini wheelbase and a Neo X wheel.
After installing the simagic-ff new-fw module via dkms, every game besides FH5 worked perfectly with force feedback.
In FH5 however, a stutter, lag or delay would be observed, like if the force feedback lagged behind what was happening in-game by ~100ms. This resulted in a borderline undrivable experience with the wheel oscillating wildly.
Turns out, the ffb output is tied to the fps, which, when above 60, seems to fill up the command queue, resulting in lag.
This was confirmed by limiting the fps in-game to 60, where it would perform normally, then unlocking the framerate, immediately resulting in stutter.
The fix for this is the use of ffbtools' ffbwrap to limit the update rate of ffb to below 60 times per second.
Step-by-step guide for steam:
- Download ffbtools by clicking the 'Download ZIP' button under 'Code', then extracting the archive to a location of your choice.
- Find out which device corresponds to your wheelbase by logging the calls and seeing it filled up as described here.
Basically just put the path of ffbwrap, followed by where you want your logfile to be located, followed by the device-id into the launch option of FH5.
I chose to save it in documents, so my path looks like this:
/home/user/Documents/ffbtools-master/bin/ffbwrap
I want the logfile to be located under /home/user/Documents/logs/ :
--logger=/home/user/Documents/logs/fh5
then followed by the possible device-ids, in my case there were 3 listed for the Alpha Mini, with the -event-joystick one being the correct one:
/dev/input/by-id/usb-SIMAGIC_SIMAGIC_Alpha_Mini_616368ED1137-event-joystick
>(You can get a list of the IDs by opening a terminal window in the ffbtools-master path, typing
>bin/ffbwrap /dev/input/by-id/usb-
>and autocompleting.)
and -- %command% at the end, the complete launch-option looking like this (replace user with your username):
/home/user/Documents/ffbtools-master/bin/ffbwrap --logger=/home/user/Documents/logs/fh5 /dev/input/by-id/usb-SIMAGIC_SIMAGIC_Alpha_Mini_616368ED1137-event-joystick -- %command%
If you got the right ID, the log should fill up with a lot events while driving, if not, it will just state the device name and ffbwrap options at the top of the log, no events and you have to try the other IDs, restarting the game each time.
- When you found your corresponding ID, replace the logging option with
--throttling --throttling-time 20
This limits the update-rate to a custom intervall, the number behind throttling-time corresponding to throttling period in milliseconds.
As the default of 3 is far too short, we have to increase it to ~16.67ms, or 60 fps.
I chose 20ms for 50 fps because I like round numbers.
/home/user/Documents/ffbtools-master/bin/ffbwrap --throttling --throttling-time 20 /dev/input/by-id/usb-SIMAGIC_SIMAGIC_Alpha_Mini_616368ED1137-event-joystick -- %command%
Launching the game with these options now should result in a smooth ffb response, like any other racing game, no matter the framerate.
Please let me know of any improvements I can make to this guide, as this is my first time writing one and I have no idea how deep I should describe something or what to omit.
Nice driving!