Proton icon indicating copy to clipboard operation
Proton copied to clipboard

Richard Burns Rally

Open freq-mod opened this issue 2 years ago • 57 comments
trafficstars

It isn't a Steam game, so I'm filing an official compatibility issue. The last Proton version FFB works (at least on my Logitech G29 wheel) is 6.3-8. However, that version has problem with an obscure dxvk bug that has been fixed since then . Newer Wine versions don't suffer from this, however Force Feedback effects are completely absent then. Wheel itself is recognized, just haptic feedback motors are not.

freq-mod avatar Apr 19 '23 11:04 freq-mod

I would like to say this has been bugging me ever since i have switched to linux! Having the exact same issues, with proton 6.3-8 the ffb effects work well but after about 2 minutes most textures disappear (the weird dxvk bug). With newer versions this does not happen, but the ffb effects are totally gone. Like OP i can bind the wheel and the game notices it has force feedback capabilities (the ffb options menu unlocks in the controls menu), but the effects themselves are just not working. I am also using Logitech G29. I have not found a workaround for this.

Dechode avatar Apr 28 '23 09:04 Dechode

+1 to the reports above. Using Latest wine or GE-Proton I do not have force feedback, even though it works with other proton games. I was not able to run the game with older wine versions.

radgeRayden avatar Sep 06 '23 02:09 radgeRayden

UPDATE: seems all logitech wheels are affected. it is likely its possible due to registry problem

freq-mod avatar Sep 15 '23 14:09 freq-mod

This sounds eerily familiar to BeamNG.drive's FFB issue which didn't work in proton past 6.3-8. Very recent Proton versions allow setting the update type to "Full" see https://github.com/ValveSoftware/Proton/issues/1237#issuecomment-1666583259 . I have no clue whether adjusting FFB output like this is even possible on RBR, I couldn't see a way to do it, however maybe it might lead us closer to a solution?

kevenwyld avatar Oct 02 '23 20:10 kevenwyld

UPDATE: seems all logitech wheels are affected. it is likely its possible due to registry problem

What registry problem?

groybe avatar Oct 24 '23 06:10 groybe

I don't know, reportedly there are some steering wheels that have problems even on Windows. RSF provides registry fixes for them: registry.zip

freq-mod avatar Nov 03 '23 19:11 freq-mod

I can only guess that doesn't apply with wine since that doesn't exist in the registry on older wine either. Do those registry keys tell dinput what effects the device is capable of?

I have a hunch that it might be something to do with no axis's being reported to the game. If you open up the ffb tool fedit.exe it can't find any axis on newer versions of wine.

Is the new dinput backend for wine SDL? Does anyone know a way to see how SDL reports the axis and how to change it?

groybe avatar Nov 03 '23 22:11 groybe

As a little tip: You can update the dxvk version used by proton. I've just copied and overwrite all files from steamapps/common/Proton 7.0/dist/lib/wine/dxvk/ and steamapps/common/Proton 7.0/dist/lib64/wine/dxvk/ to thier respective places in steamapps/common/Proton 6.3/

Now FFB works and I saw no trees disappear. Thanks for this issue report.

AlexanderWKoenig avatar Nov 24 '23 11:11 AlexanderWKoenig

@AlexanderWKoenig What version of RSF (if any) are you running? The latest one 1.44.9 seems to have a page fault for me in Proton 6.3 . If I use a newer proton it will launch, however FFB is not working.

Click to expand
wineserver: using server-side synchronization.
wine: RLIMIT_NICE is <= 20, unable to use setpriority safely
004c:fixme:virtual:NtQueryVirtualMemory (0xffffffffffffffff,0x229880000,info_class=1000,0x229887008,8,(nil)) Unknown information class
004c:err:ntoskrnl:ZwLoadDriver failed to create driver L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\nsiproxy": c0000003
0034:fixme:service:scmdatabase_autostart_services Auto-start service L"nsiproxy" failed to start: 87
0188:fixme:heap:GetNumaHighestNodeNumber semi-stub: 00000000006BEFD8
wine: Call from 000000007BC34538 to unimplemented function KERNEL32.dll.GetProcessGroupAffinity, aborting
wine: Unhandled page fault on read access to 000000000000000C at address 0000000001185B94 (thread 0188), starting debugger...
Unhandled exception: page fault on read access to 0x0000000c in 64-bit code (0x0000000001185b94).
Register dump:
 rip:0000000001185b94 rsp:00000000006bd170 rbp:00000000006befa0 eflags:00010202 (  R- --  I   - - - )
 rax:00000000003b0230 rbx:00000000006bd1c0 rcx:0000000000000130 rdx:0000000000000000
 rsi:00000000006bee70 rdi:00000000006bdbb0  r8:00000000000003df  r9:0000000019930520 r10:0000000000000005
 r11:00000000006bd440 r12:0000000000000000 r13:00000000006bd2e8 r14:00000000006befa0 r15:00000000006bdd18
Stack dump:
0x00000000006bd170:  00000000006bdd18 00000000006befa0
0x00000000006bd180:  0000000001285380 000000007b0724d7
0x00000000006bd190:  00000000006bf030 0000000001377ce3
0x00000000006bd1a0:  0000000000000004 00000000006bd470
0x00000000006bd1b0:  00000000006bee70 00000000015b7f20
0x00000000006bd1c0:  0000000000000000 0000000001283ec0
0x00000000006bd1d0:  0000000000000000 00000000012a22aa
0x00000000006bd1e0:  0000000000000000 00000000015b7f20
0x00000000006bd1f0:  00000000006bdbb0 0000000001283e01
0x00000000006bd200:  00000000006bd2e8 00000000006bee70
0x00000000006bd210:  00000000006bdd18 00000000006bd470
0x00000000006bd220:  00000000006be970 0000000001286350
Backtrace:
=>0 0x0000000001185b94 EntryPoint+0xffffffffffffffff() in coreclr (0x00000000006befa0)
  1 0x0000000001377ce3 EntryPoint+0xf6262() in coreclr (0x00000000006befa0)
  2 0x00000000012a22aa EntryPoint+0x20829() in coreclr (0x00000000006befa0)
  3 0x0000000001286350 EntryPoint+0x48cf() in coreclr (0x00000000006bd470)
  4 0x0000000001285495 EntryPoint+0x3a14() in coreclr (0x00000000006bd470)
  5 0x000000007bc58379 EntryPoint+0xffffffffffffffff() in ntdll (0x00000000006bd470)
  6 0x00000000011adf26 EntryPoint+0xffffffffffffffff() in coreclr (0x00000000006bf331)
  7 0x000000000125350f EntryPoint+0xffffffffffffffff() in coreclr (0x00000000006bf331)
  8 0x00000000012534a5 EntryPoint+0xffffffffffffffff() in coreclr (0x00000000006bf331)
  9 0x00000000012533f8 EntryPoint+0xffffffffffffffff() in coreclr (0x00000000006bf331)
  10 0x000000000126542a EntryPoint+0xffffffffffffffff() in coreclr (0x00000000006bf331)
  11 0x0000000000cb3fa0 EntryPoint+0xffffffffffffffff() in hostpolicy (0x00000000006bf480)
  12 0x0000000000cc8878 EntryPoint+0xffffffffffffffff() in hostpolicy (0x00000000006bf7a9)
  13 0x0000000000cca6ef EntryPoint+0xffffffffffffffff() in hostpolicy (0x00000000006bf7a9)
  14 0x000000018000b720 EntryPoint+0xfffd0def() in hostfxr (0x00000000006bf7a9)
  15 0x000000018000e39a EntryPoint+0xfffd3a69() in hostfxr (0x00000000006bf8c9)
  16 0x00000001800108d6 EntryPoint+0xfffd5fa5() in hostfxr (0x0000000000000001)
  17 0x000000018000ea04 EntryPoint+0xfffd40d3() in hostfxr (0x00000000006bfab1)
  18 0x0000000180008473 EntryPoint+0xfffcdb42() in hostfxr (0x0000000000000001)
  19 0x0000000140012a80 in rsf_launcher (+0x12a7f) (0x00000000006bfd00)
  20 0x0000000140012dfb in rsf_launcher (+0x12dfa) (0x0000000000000001)
  21 0x00000001400142a8 in rsf_launcher (+0x142a7) (0x0000000000000000)
  22 0x000000007b62c9a9 EntryPoint+0xffffffffffffffff() in kernel32 (0x0000000000000000)
  23 0x000000007bc5e5f3 EntryPoint+0xffffffffffffffff() in ntdll (0x0000000000000000)
0x0000000001185b94 EntryPoint+0xffffffffffffffff in coreclr: movl       0x000000000000000c(%rdx),%eax
Modules:
Module  Address                                 Debug info      Name (36 modules)
PE                cb0000-          d14000       Export          hostpolicy
PE               1120000-         1618000       Export          coreclr
PE              7b000000-        7b0d7000       Deferred        kernelbase
PE              7b600000-        7b812000       Export          kernel32
PE              7bc00000-        7bc9e000       Export          ntdll
PE             140000000-       14004d000       Export          rsf_launcher
PE             180000000-       180060000       Export          hostfxr
PE             1c8db0000-       1c8e3d000       Deferred        msvcrt
PE             1cd860000-       1cd868000       Deferred        api-ms-win-crt-utility-l1-1-0
PE             1d97a0000-       1d97a7000       Deferred        api-ms-win-core-fibers-l1-1-1
PE             21a7e0000-       21a855000       Deferred        setupapi
PE             231ae0000-       231b62000       Deferred        rpcrt4
PE             23d820000-       23da47000       Deferred        user32
PE             241850000-       241857000       Deferred        api-ms-win-crt-environment-l1-1-0
PE             262250000-       262259000       Deferred        api-ms-win-crt-runtime-l1-1-0
PE             26b4c0000-       26b642000       Deferred        gdi32
PE             2739c0000-       273af6000       Deferred        oleaut32
PE             28ba60000-       28ba67000       Deferred        api-ms-win-crt-time-l1-1-0
PE             2e3540000-       2e3591000       Deferred        shlwapi
PE             2e8f10000-       2e9028000       Deferred        ole32
PE             2f1fa0000-       2f1fad000       Deferred        version
PE             30a2c0000-       30a2c9000       Deferred        api-ms-win-crt-stdio-l1-1-0
PE             30c980000-       30c988000       Deferred        api-ms-win-core-synch-l1-2-0
PE             3126f0000-       312709000       Deferred        shcore
PE             327020000-       327072000       Deferred        combase
PE             32a700000-       32a729000       Deferred        sechost
PE             330260000-       33029f000       Deferred        advapi32
PE             33ea00000-       33ea09000       Deferred        api-ms-win-crt-string-l1-1-0
PE             344840000-       344848000       Deferred        api-ms-win-crt-filesystem-l1-1-0
PE             350a30000-       350a39000       Deferred        api-ms-win-crt-convert-l1-1-0
PE             355100000-       355107000       Deferred        api-ms-win-crt-locale-l1-1-0
PE             360a80000-       360a8a000       Deferred        api-ms-win-crt-math-l1-1-0
PE             39b510000-       39b518000       Deferred        api-ms-win-crt-heap-l1-1-0
PE             3af670000-       3af728000       Deferred        ucrtbase
PE             3afd00000-       3afd1a000       Deferred        imm32
PE          7f0ede420000-    7f0edecf7000       Deferred        shell32
Threads:
process  tid      prio (all id:s are in hex)
00000030 services.exe
        00000034    0
        00000038    0
        00000044    0
        00000048    0
        00000060    0
        00000114    0
        0000012c    0
        0000015c    0
        00000160    0
0000003c winedevice.exe
        00000040    0
        0000004c    0
        00000050    0
        00000054    0
00000058 winedevice.exe
        0000005c    0
        00000064    0
        00000068    0
        0000006c    0
        00000070    0
        00000074    0
        00000078    0
        0000007c    0
        00000080    0
        00000084    0
        00000088    0
        0000008c    0
        00000090    0
        00000094    0
        00000098    0
        0000009c    0
        000000a0    0
        000000a4    0
        000000a8    0
        000000ac    0
        000000b0    0
        000000b4    0
        000000b8    0
        000000bc    0
        000000c0    0
        000000c4    0
        000000c8    0
        000000cc    0
        000000d0    0
        000000d4    0
        000000d8    0
        000000dc    0
        000000e0    0
        000000e4    0
        000000e8    0
        000000ec    0
        000000f0    0
        000000f4    0
        000000f8    0
        000000fc    0
        00000100    0
        00000104    0
        00000108    0
0000010c plugplay.exe
        00000110    0
        00000118    0
        0000011c    0
        00000120    0
00000124 svchost.exe
        00000128    0
        00000130    0
        00000134    0
00000138 tabtip.exe
        0000013c    0
        0000017c    0
        00000180    0
00000140 explorer.exe
        00000144    0
        00000148    0
        0000014c    0
00000154 rpcss.exe
        00000158    0
        00000164    0
        00000168    0
        0000016c    0
        00000170    0
        00000174    0
        00000178    0
00000184 (D) C:\games\Richard Burns Rally\rsf_launcher\RSF_Launcher.exe
        00000188    0 <==
        0000019c    0
0000018c conhost.exe
        00000190    0
System information:
    Wine build: wine-6.3
    Platform: x86_64
    Version: Windows 10
    Host system: Linux
    Host version: 6.1.64-1-lts

kevenwyld avatar Dec 02 '23 03:12 kevenwyld

@kevenwyld I used this lutris install script as a base for what to do: https://lutris.net/games/install/23410/view

So I should have 1.02 Patch + FixUps Plugin. The RBR Version I use was from archive.org: https://archive.org/details/richardburnsrally-pc-redump

Tested it yesterday and still works fine. I had to select "detect devices" in the option menu to show the force feedback option.

AlexanderWKoenig avatar Dec 03 '23 15:12 AlexanderWKoenig

I am facing the same issue with FFB not working in newer Proton versions. I am playing the vanilla game v1.02 with no mods installed.

It's probably an upstream Wine issue, not Proton-specific, since I primarily use Lutris and the following versions I tried were affected:

  • lutris-7.2-2
  • Wine 8 from official Debian 12 repos (8.0~repack-4)
  • lutris-GE-Proton8-15
  • wine-ge-8-22
  • wine-ge-8-25

With Wine v<7 (lutris-6.14-4) and DXVK v<2 (v1.10.3, v2 doesn't work with older Wine versions) I am able to play the game with both working FFB (using G25 and the new-lg4ff kernel module) and trees not disappearing.

cihlarma avatar Dec 10 '23 10:12 cihlarma

There's a new DirectInput joystick backend using the improved HID stack to communicate with winebus.sys and host devices. This backend supports force-feedback effects using the standard HID Physical Interface Device reports

In the wine 7 release notes, found at least some reports of grand prix legends no longer working, personally I tested only the rallysimfans release of RBR and also tried to edit the registry files to add my wheel , but only got crashes.

Games that loose FFB for me when going > version 7 are:

  • Beam.ng
  • Automobilista 1

Maybe the games affected are NOT using HID interfaces and this means the FFB advertisement is not reaching them / they cant enumerate any FFB capable device, no idea how to debug and report this unfortunately.

ZakMcKrack3n avatar Dec 13 '23 19:12 ZakMcKrack3n

I'm having the same issue with Fanatec GT DD Pro wheel. Wheel works great with RBR except FFB. With proton below 7 the game doesn't start. I'm using RSF (rallysimfans) version of RBR. FFB works fine in Automobilista 2 and proton experimental.

Arcuet avatar Dec 16 '23 20:12 Arcuet

I was able to get RBR (RSF) working in proton experimental and other proton runners like GE-Proton with force feedback by replacing dinput8.dll with dinput8.dll.so. I learned a lot in the process of figuring that out, and it's quite complicated, but I'll try to summarize. I have detailed but pretty rough, and definitely not comprehensive, instructions in this gist (see disclaimer below about me not knowing what I'm doing)

Basically, in older versions of proton, such as 6.3-8, a dinput8 dll was included with wine which was dynamically linked against your OS version of SDL among other things. This is indicated by the .soon the end. More info on this here. You can verify with ldd

[~/.s/r/s/c/Proton 6.3 ] > ldd ./dist/lib64/wine/dinput8.dll.so
	linux-vdso.so.1 (0x00007fff22de6000)
	libSDL2-2.0.so.0 => /usr/lib/libSDL2-2.0.so.0 (0x00007f0f4a02a000)
	libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f0f4a025000)
	libm.so.6 => /usr/lib/libm.so.6 (0x00007f0f49f38000)
	libc.so.6 => /usr/lib/libc.so.6 (0x00007f0f49d56000)
	/usr/lib64/ld-linux-x86-64.so.2 (0x00007f0f4a2b0000)
[~/.s/r/s/c/Proton 6.3 ] > ldd ./dist/lib/wine/dinput8.dll.so
	linux-gate.so.1 (0xf7fab000)
	libSDL2-2.0.so.0 => /usr/lib32/libSDL2-2.0.so.0 (0xf7d13000)
	libdl.so.2 => /usr/lib32/libdl.so.2 (0xf7d0e000)
	libm.so.6 => /usr/lib32/libm.so.6 (0xf7c3a000)
	libc.so.6 => /usr/lib32/libc.so.6 (0xf7a00000)
	/usr/lib/ld-linux.so.2 (0xf7fad000)

Newer versions of wine/proton only include a native (windows) version of dinput8.dll (not dinput8.dll.so) . I have no clue what the difference is exactly, and I suspect it has more to do with what SDL libraries it depends on than anything else. So this is only a workaround and a thought experiment really...

I grabbed the old version of dinput8.dll.so, dropped it into a modern version of proton, deleted the native versions, and created an override. This made FFB work for me. It might work for other people too but I make no promises because I have no idea what I'm doing.

Anyway, as before, I hope this helps someone narrow down the problem.

kevenwyld avatar Dec 17 '23 06:12 kevenwyld

I can confirm that using proton 6.3 and manually updating the dxvk dlls works perfectly. I hope this bug is resolved since playing through lutris I can track time, which I like to do. I wasn't able to get an older version of wine to work through lutris.

PS: can also confirm that @kevenwyld 's fix works, and I now have FFB working while playing through lutris. It does involve modifying the runner installation so I selected a wine version that I wasn't using for anything else and dedicated to it.

radgeRayden avatar Dec 20 '23 05:12 radgeRayden

I can confirm that using proton 6.3 and manually updating the dxvk dlls works perfectly. I hope this bug is resolved since playing through lutris I can track time, which I like to do. I wasn't able to get an older version of wine to work through lutris.

PS: can also confirm that @kevenwyld 's fix works, and I now have FFB working while playing through lutris. It does involve modifying the runner installation so I selected a wine version that I wasn't using for anything else and dedicated to it.

If you rename the folder of that Lutris Runner to something like RBRWine Lutris will pick it up and you can reinstall the other version if you ever need it.

groybe avatar Dec 24 '23 13:12 groybe

The game tries to change the number of axes of an event. Disallowed by the API but Windows seems to simply ignore this request whereas in Wine it results in the method call failing.

There's longer explanation in the upstream Wine bug 52714 with an attempted workaround/fix attached. The patch applies to Proton too (tested against experimental)

Autocenter is still broken in current Proton but works in upstream Wine. Hopefully it will work again with Proton 9.

whizse avatar Feb 19 '24 18:02 whizse

Awesome. I tried the patch today. Works great.

groybe avatar Feb 24 '24 02:02 groybe

Good to hear it's very close to being fully sorted out. I won't be able to test it with Logitech wheel, since I have Thrustmaster TMX now, but I hope it will also work

freq-mod avatar Feb 25 '24 09:02 freq-mod

Autocenter is still broken in current Proton but works in upstream Wine. Hopefully it will work again with Proton 9.

Since Proton 7 there are problems with the steering wheels that in 6 there were not and they have not done anything to solve them by Valve (to my knowledge). Apparently it is not an exclusive problem of this game. Semms that they touched something and since then there are problems.

leillo1975 avatar Feb 28 '24 10:02 leillo1975

If somebody wants to try I have compiled Wine 9.7 with the above mentioned patch and for me ffb is working (Thrustmaster T150RS).

Details ---> https://gitlab.com/as400l/wine-rbr

as400l avatar Apr 23 '24 08:04 as400l

Thanks for this work! I don't understand why this patch is not included on the newest versions of Wine and Proton

leillo1975 avatar Apr 23 '24 09:04 leillo1975

@leillo1975 maybe we should reply to that winehq thread confirming that the patch works and for what wheel it works. I am going to do this now. Just remember that it may not work for in-game controller force feedback test. But it works on special stages.

as400l avatar Apr 23 '24 09:04 as400l

This night I will try it, and then, if it works in my G29, I will post it on https://bugs.winehq.org/show_bug.cgi?id=52714

leillo1975 avatar Apr 23 '24 10:04 leillo1975

@leillo1975, ok thx. I just submitted my report there. Fingers crossed :)

Otherwise we will have to keep special Wine version for older games. As far as I know not only RBR is affected.

as400l avatar Apr 23 '24 10:04 as400l

Thanks for this work! I don't understand why this patch is not included on the newest versions of Wine and Proton

I thought perhaps it was because no one was on the cc list for that bug but I posted on the other big FFB bug and no one has got back yet. They are probably just stretched a bit thin over there.

groybe avatar Apr 23 '24 12:04 groybe

I wrote the patch in the upstream bug.

Thanks for testing the patch! A couple of points:

  • The type of steering wheel doesn't matter for this particular bug. Wine/Proton rejects the effect offhand and it is never played back by the hardware. There could of course be other, hardware dependent bugs still affecting the game.

  • Knowing if the patch breaks (or fixes) force feedback in other games would be helpful!

My knowledge of force feedback doesn't extend much beyond the "makes steering wheel go brrr" so I can't really push for the patch to be submitted as-is in either Wine or Proton. I'm hoping for a real developer to step in and provide a proper fix.

whizse avatar Apr 23 '24 12:04 whizse

It works really great with this wine patched build. Thanks again!

leillo1975 avatar Apr 23 '24 21:04 leillo1975

@whizse - thanks for writing the patch. It really makes this game soooo much better :) I hope more people will test this in different games. Otherwise we will have to maintain separate branch of wine just for RBR. And compiling wine is a big PITA ! :)

@leillo1975 - thx for reporting !

as400l avatar Apr 23 '24 22:04 as400l

Using hid-fanatec custom kernel module with a Fanatec CSL DD , RBR will now try to rip my arms of my torso. 😈

Not sure if I can launch steam games without a proper proton build , so unsure if other games will work.

ZakMcKrack3n avatar Apr 24 '24 16:04 ZakMcKrack3n