axu2 / feral-interactive-mac-controllers

Fixes Xbox controller support for Tomb Raider, Life is Strange, Bioshock, Sleeping Dogs, and other Feral Interactive Mac games
MIT License
36 stars 4 forks source link

Xbox controller Elite 2 crash #2

Open dr-tam opened 8 months ago

dr-tam commented 8 months ago

Hi, recently purchased an Xbox Elite 2 controller and I connected it with Bluetooth to my MBP 2017 13” Touch Bar (macOS Ventura 13.6.4). I read of the issue with Feral games, so yesterday I downloaded your .plist files, changed “ProductID” to 2821 and everything was fine (except Select button).

Unfortunately, some hours later and after a reboot, the game crashes on startup if I have the controller connected with these files inside the specific game folder, specifically if “ProductID” is 2821 (instead of 2835 like your original files that doesn't work). I tried to use SteamInput without success and no way to solve the isse even uninstalling/reinstalling the game thought Steam or make an integrity check after download.

Feral told me to select go to System settings > Game Controllers, add Tomb Raider to the list of games and turn on the “Increase controller compatibility” toggle, but I still not see any kind of toggle: there isn't anything.

axu2 commented 8 months ago

OK, let's try some troubleshooting.

1) Try modifying the "old" version of the plist files linked in the readme 2) firmware update controller 3) factory reset controller 4) reboot mac one more time 5) make sure steam input is OFF. reread the readme to make sure no step was skipped.

I don't see that toggle either, maybe its only for mac app store version.

The select button not working is interesting, too bad I can't test it myself. I'd play around with the ButtonBack field in the plist. @dr-tam

To confirm, it's this one?

https://www.xbox.com/en-US/accessories/controllers/elite-wireless-controller-series-2

Though looks like elite 2 controllers have issues from a quick search in r/macgaming

You can try playing wired.

dr-tam commented 8 months ago

I reply point to point.

  1. I tried both new and old ones, changing "ProductID" to 2821. The game crashes on startup or, when the controller is turned on while the game is running, it crashes instantaneously (both on pre-game window and "in-game").
  2. I can't update the controller firmware: I haven't an Xbox or Windows PC; I tried to use Windows inside a VM, but there's probably a recent bug in Xbox accessories app (crashes even without a controller connected).
  3. I can't find a way to reset the controller.
  4. Multiple MBP reboot doesn't solve anything.
  5. I carefully read the guide, Steam Input is off.

Yes, I confirm that is the controller in the picture, only in White (I bought core version that is a bit cheaper).

I'm also emailing with Feral in order to try to solve the issue. After the compatibility toggle that I already tried, they told me to delete the "Preferences Data" file inside the game folder and restart my Mac, but even this solution isn't fine. So I reported to Feral (and I'm report to you) below some of other tests that I did.

  1. If I connect the Elite 2 controller to my MBP with USB cable the controller isn’t recognized by any software, but inside System Information macOS recognize the controller: probably macOS doesn’t support USB game controllers.
  2. The controller is successfully recognized inside a Windows VM on Parallels or some others virtualization software.
  3. I can’t update controller firmware (actually version 9.0.3 according to your support report) in Windows VM on Parallels: when I open “Xbox Accessories” app, the app crash instantaneously… even without the controller connected, I tried all of this like reinstall app, reinstall Windows OS, change from Windows 11 to 10, etc. It is probably a bug from Microsoft..?
  4. Uninstall and reinstallation of Steam solved nothing.
  5. Installing Steam in beta version solved nothing.
  6. I tried to remove manually ALL of kexts of Steam inside macOS (Steam Input, Steam Audio, Ambrosia Audio, etc.) but the issue is still here.
  7. If I use Steam Input, Steam recognize the controller (only connected via Bluetooth) and it works partially: if I run Tomb Raider, it recognize a fake “Xbox 360 Controller” but it doesn’t work.
  8. If I use Steam Input + Steam Stream to my Apple TV and I connect the controller via Bluetooth to my Apple TV, if I run Tomb Raider it recognize a fake “Xbox 360 Controller” and it works (ironically, the audio on Apple TV doesn’t work).
  9. On Rise of Tomb Raider the controller works ONLY if I use Steam Input (I haven’t tried yet on Shadow of Tomb Raider).
axu2 commented 8 months ago

1) Hmmm, what does the System Report from the Tomb Raider launcher say about your controller? Mine says:

Xbox Wireless Controller:
Vendor ID: 0x045E              
Product ID: 0x0B20
Firmware Version: 5.17.3202.0

If you have the latest then we can rule that out.

2) Do you happen to have forced Metal HUD running? Maybe disable it. https://www.reddit.com/r/MacOS/comments/16ptjpi/comment/k58bx53/?utm_source=reddit&utm_medium=web2x&context=3

3) Oh, factory reset doesn't seem to be a thing. Try holding the sync button until it vibrates, pair it to something else, then repeat pairing back to mac.

4) Run the system report when the controller is connected wired, the wired ProductID is different for my Xbox One S controller. Then modify the XboxOne plist that corresponds to the wired controller.

I've used a wired Xbox One S controller in Tomb Raider 2013 in the past with no problems. (In fact I didn't need to modify anything.) image

        Controller:

          Product ID: 0x02ea
          Vendor ID: 0x045e  (Microsoft Corporation)
          Version: 5.11

5) yea, steam link from a mac not having audio is a steam issue. :cry:

If none of these work I have no more ideas. Maybe Xbox One controllers have better support...

dr-tam commented 8 months ago

Ok, now I have some good and bad news. I successfully update my Elite 2 controller via a Windows VM with VMWare Fusion, so the firmware version is now 5.17.3202.0; interestingly, also the ProductID in wireless changed from 2821 to 2850. Now, editing .plist file, the controller works in wireless without Steam Input ONLY on Shadow and Rise of Tomb Raider, instead on Tomb Raider the issue still persists. It is probably due to the additional buttons of Elite series controllers, so I mailed again Feral and I'm waiting if they can help me.

1a. Wireless System Report

Xbox Wireless Controller: Address: [hide] Vendor ID: 0x045E Product ID: 0x0B22 Battery Level: 100% Firmware Version: 5.17.3202.0 Minor Type: Gamepad Services: 0x400000 < BLE >

1b. Wired System Report

Controller: Product ID: 0x0b00 Vendor ID: 0x045e (Microsoft Corporation) Version: 5.11 Serial Number: [hide] Speed: Up to 12 Mb/s Manufacturer: Microsoft Location ID: [hide] Current Available (mA): 500 Extra Operating Current (mA): 0

  1. Metal HUD is still disabled.
  2. Now I tried but don't solved the issue.
  3. I tried but via USB the controller isn't recognized by macOS: I googled a bit, probably Apple removed the .kext, so any wired controller don't work anymore on macOS and you should use only wireless controller. There was an experimental project on GitHub in order to make new .kext, but there isn't anything new with the change of Apple to DriverKit APIs to replace the "old-fashioned" kernel extension.
  4. For Steam Link: RIP.
axu2 commented 8 months ago

1) Try restarting Tomb Raider to see if controller starts working. Glad to hear that the others work. I just redownloaded Tomb Raider and controller only worked second time. Hold option when launching so the launcher can tell you if controller detected. Otherwise can try modifying the old versions from the read me 2) Try modifying XboxOneController.plist with the productID with the wired variant. My Xbox One S controller works wired even if I remove the bluetooth plist. Even though macOS doesn't recognize it, the game recognizes it. It's game level support, not OS level support. @dr-tam

dr-tam commented 8 months ago

I'm so grateful to you for this solution! I did some "adjustments" but these below are the facts (if they can help someone!).

Issues and solutions

Use the controller

  1. Connect the controller before you open the game but let it off (only charging LED should be on, etc.)
  2. Start the game and wait for pre-game window (if you already disabled it, long press cmd on the keyboard), go to Advanced (the last tab on the right) and you should see "Xbox One Controller" in the grey text boxes; probably, in the next times that you start the game, you can even skip this pre-game phase.
  3. Click on "Play" to really start the game
  4. While the game is loading, press Xbox button: after a couple of seconds of blinking, the Xbox LED should became of a fixed white and the Elite 2 controller should work perfectly.

EDIT:

  1. If the controller keeps its Xbox LED blinking, press for some seconds the pair/connect button in the upper/front side and the LED became white fixed.
axu2 commented 8 months ago

Cool! Just to confirm is this the software you used to update the firmware?

https://www.vmware.com/products/fusion.html

I'm pretty disappointed that Tomb Raider 2013 doesn't detect it over Bluetooth while the rest do. Can you try again just one more time? It doesn't show up in the launcher at all?

Also, can you upload the plists that worked for you to this repo? Just fork the repo, upload files, and pull request.

EDIT: can you try deleting inputdevices.json from Tomb Raider? Can you verify if they exist in Rise/Shadow/other Ferals. @dr-tam

image

dr-tam commented 8 months ago

Yes, the virtualization software is VMWare Fusion (plus: the license is free for home use).

Via Bluetooth, I confirm that there is a crash immediately... I can't see anything, just the TR icon in the Dock which suddenly disappears and macOS opens the "Crash Feedback to Apple" window (I don't remember what exactly it's called).

Sure... but I'm a newbie GitHub user, I'm not a programmer at all, I attached the file here and I hope it's ok: I had to change the extension to .txt otherwise I couldn't upload it, just change the extension to .plist. XboxOneController.txt

I'm not sure, but I seem to have already deleted inputdevices.json from TR during my numerous tests over the past few days.... however, I can confirm that it does not exist in Rise/Shadow of TR.

EDIT: Now I've tried playing TR, the behavior of the Xbox controller is a bit inconsistent, so I'll update the previous comment by adding a clarification.

axu2 commented 8 months ago

Interesting, I wonder if it would work if you added the json back then. You can probably just verify to get it to redownload. @dr-tam It's next to the InputDevices folder, not inside it.

Or changing the <key>CGPDeviceType</key> from Standard to Xbox

stimg commented 7 months ago

Hi guys, first, thanks a lot for these findings. I had trouble connecting my Xbox One Controller via BT to my MBP M1Max and found this thread. If it helps somebody, finally it works, and my result: you need only two actions to achieve it:

  1. Download the XboxOneControllerSBluetoothv5.plist file from this repository and place it into the Contents/Resources/InputDevices/Digital folder.
  2. Delete inputdevices.json from the Contents/Resources folder.

@axu2: thanks a lot for the hints!

Sysinfo of my controller: Xbox Wireless Controller: Vendor-ID: 0x045E Product-ID: 0x0B20 Firmwareversion: 5.20.7.0 Minor Type: Gamepad

axu2 commented 7 months ago

@stimg please edit the readme with a note that deleting the JSON might be needed.

axu2 commented 3 months ago

Could anyone test whether the new macos 14 feature of "increase controller compatibility" works? It will map a modern controller to the 360 plist.