├── .github └── FUNDING.yml ├── LICENSE ├── NewPS4Dualshock.plist ├── PS4Dualshock[Digital].plist ├── PS5Dualsense.plist ├── README.md ├── SteelSeriesNimbus.plist ├── XboxOneControllerSBluetoothv5.plist └── XboxSeriesBluetooth.plist /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: eink_dude 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Alex Xu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /NewPS4Dualshock.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CGPDisplayNameOvr 6 | PS4 Analogue 7 | CGPDeviceType 8 | PS3 9 | VendorID 10 | 0x054c 11 | ProductID 12 | 0x09cc 13 | LeftAxisX 14 | 1:48 15 | LeftAxisY 16 | 1:49 17 | LeftTrigger 18 | 1:51 19 | RightAxisX 20 | 1:50 21 | RightAxisY 22 | 1:53 23 | RightTrigger 24 | 1:52 25 | ButtonA 26 | 9:2 27 | ButtonB 28 | 9:3 29 | ButtonX 30 | 9:1 31 | ButtonY 32 | 9:4 33 | LeftShoulder 34 | 9:5 35 | RightShoulder 36 | 9:6 37 | LeftThumb 38 | 9:11 39 | RightThumb 40 | 9:12 41 | ButtonStart 42 | 9:10 43 | ButtonBack 44 | 9:14 45 | ButtonDevice 46 | 0 47 | DPadUp 48 | 0 49 | DPadDown 50 | 0 51 | DPadLeft 52 | 0 53 | DPadRight 54 | 0 55 | Hatswitch 56 | 1:57 57 | HSValueRest 58 | 8 59 | HSValueUp 60 | 0 61 | HSValueUpRight 62 | 1 63 | HSValueRight 64 | 2 65 | HSValueDownRight 66 | 3 67 | HSValueDown 68 | 4 69 | HSValueDownLeft 70 | 5 71 | HSValueLeft 72 | 6 73 | HSValueUpLeft 74 | 7 75 | XAxisInitValue 76 | 127 77 | YAxisInitValue 78 | 127 79 | 80 | 81 | -------------------------------------------------------------------------------- /PS4Dualshock[Digital].plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CGPDisplayNameOvr 6 | PS4 Analogue 7 | CGPDeviceType 8 | PS3 9 | VendorID 10 | 0x054c 11 | ProductID 12 | 0x05c4 13 | LeftAxisX 14 | 1:48 15 | LeftAxisY 16 | 1:49 17 | LeftTrigger 18 | 9:7 19 | RightAxisX 20 | 1:50 21 | RightAxisY 22 | 1:53 23 | RightTrigger 24 | 9:8 25 | ButtonA 26 | 9:2 27 | ButtonB 28 | 9:3 29 | ButtonX 30 | 9:1 31 | ButtonY 32 | 9:4 33 | LeftShoulder 34 | 9:5 35 | RightShoulder 36 | 9:6 37 | LeftThumb 38 | 9:11 39 | RightThumb 40 | 9:12 41 | ButtonStart 42 | 9:10 43 | ButtonBack 44 | 9:14 45 | ButtonDevice 46 | 0 47 | DPadUp 48 | 0 49 | DPadDown 50 | 0 51 | DPadLeft 52 | 0 53 | DPadRight 54 | 0 55 | Hatswitch 56 | 1:57 57 | HSValueRest 58 | 8 59 | HSValueUp 60 | 0 61 | HSValueUpRight 62 | 1 63 | HSValueRight 64 | 2 65 | HSValueDownRight 66 | 3 67 | HSValueDown 68 | 4 69 | HSValueDownLeft 70 | 5 71 | HSValueLeft 72 | 6 73 | HSValueUpLeft 74 | 7 75 | XAxisInitValue 76 | 127 77 | YAxisInitValue 78 | 127 79 | 80 | 81 | -------------------------------------------------------------------------------- /PS5Dualsense.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CGPDeviceCategory 6 | GamePad 7 | CGPDisplayNameOvr 8 | PS4 Analogue 9 | CGPDeviceType 10 | PS4 11 | VendorID 12 | 1356 13 | ProductID 14 | 3302 15 | LeftAxisX 16 | 1:48 17 | LeftAxisY 18 | 1:49 19 | LeftTrigger 20 | 1:51 21 | RightAxisX 22 | 1:50 23 | RightAxisY 24 | 1:53 25 | RightTrigger 26 | 1:52 27 | ButtonA 28 | 9:2 29 | ButtonB 30 | 9:3 31 | ButtonX 32 | 9:1 33 | ButtonY 34 | 9:4 35 | LeftShoulder 36 | 9:5 37 | RightShoulder 38 | 9:6 39 | LeftThumb 40 | 9:11 41 | RightThumb 42 | 9:12 43 | ButtonStart 44 | 9:10 45 | ButtonBack 46 | 9:9 47 | ButtonDevice 48 | 9:13 49 | DPadUp 50 | 0 51 | DPadDown 52 | 0 53 | DPadLeft 54 | 0 55 | DPadRight 56 | 0 57 | Hatswitch 58 | 1:57 59 | HSValueRest 60 | 8 61 | HSValueUp 62 | 0 63 | HSValueUpRight 64 | 1 65 | HSValueRight 66 | 2 67 | HSValueDownRight 68 | 3 69 | HSValueDown 70 | 4 71 | HSValueDownLeft 72 | 5 73 | HSValueLeft 74 | 6 75 | HSValueUpLeft 76 | 7 77 | LeftAxisX-InitVal 78 | 127 79 | LeftAxisY-InitVal 80 | 127 81 | RightAxisX-InitVal 82 | 127 83 | RightAxisY-InitVal 84 | 127 85 | LeftTrigger-InitVal 86 | 0 87 | RightTrigger-InitVal 88 | 0 89 | 90 | 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # feral-interactive-controllers 2 | [![Github All Releases](https://img.shields.io/github/downloads/axu2/feral-interactive-mac-controllers/total.svg)]() 3 | 4 | These files are different than the ones provided by `support@feralinteractive.com`. They fix a typo in the Option button. And have updated ProductIDs for newer controller firmwares. 5 | 6 | [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/Q5Q41BW8HS) 7 | 8 | You can download the plists from the GitHub releases tab: https://github.com/axu2/feral-interactive-mac-controllers/releases 9 | 10 | #### Update 2024-02-11 11 | 12 | Xbox controller plists have been updated to fix dpad/camera spinning issues in Sleeping Dogs, GRID Autosport, etc. 13 | 14 | If they cause issues in other games please open an issue and try the 15 | [old versions of the files](https://github.com/axu2/feral-interactive-mac-controllers/tree/00bbe01c3b432c76e9e4e8659f898449588e88a0). 16 | 17 | 18 | 19 | ## Summary 20 | 21 | 22 | Fixes Xbox controller support for Tomb Raider, Life is Strange, Bioshock, Sleeping Dogs, and other Feral Interactive Mac games due to recent controller firmware updates. You can view your controller's firmware version in `System Report`. This repo is only tested on the following firmware version, earlier ones may cause issues like crashes or connectivity issues. 23 | 24 | ``` 25 | Xbox Wireless Controller: 26 | Vendor ID: 0x045E 27 | Product ID: 0x0B20 28 | Firmware Version: 5.17.3202.0 29 | ``` 30 | 31 | This repo contains pre-made configuration files. For new controllers or firmwares, follow the guide below. Feel free to PR any other new controllers. It doesn't hurt to have multiple files, since the same controller might need a different file depending on the firmware. 32 | 33 | If your Xbox controller isn't detected by Mac at all via Bluetooth, you need to update the controller firmware via an Xbox or the Windows Xbox Accessories app. 34 | 35 | If you don't have access to either, you can update the controller firmware via a Windows VM https://www.vmware.com/products/fusion.html 36 | 37 | ## Supported Games 38 | * Tomb Raider (2013) 39 | * Rise of the Tomb Raider 40 | * Shadow of the Tomb Raider 41 | * Life is Strange 42 | * Life is Strange 2 43 | * Bioshock Remastered 44 | * Bioshock 2 Remastered 45 | * Sleeping Dogs 46 | * GRID Autosport 47 | * Deus Ex: Mankind Divided 48 | * Batman: Arkham City GOTY 49 | 50 | Feel free to open a PR adding to the list of supported games! All feral ports should work but adding to the list makes search engine optimization easier. 51 | 52 | ## Support Email Text (plist file attachment in repo) 53 | 54 | The Xbox One controller was not available at the time of development of our Mac version of the game, so I have attached a file to this email that will add support for it. Please first download this file and carry out the following steps: 55 | 56 | 57 | * Find your installation of the game: 58 | 59 | * If you are using a **Mac App Store version** of the game, the game's application icon will be in your Applications folder. 60 | 61 | * If you are using a **Steam version** of the game, the game's application icon can be found by Right Clicking game in Steam Library, then selecting Properties > Local Files > Browse Local Files. 62 | 63 | * Right click the game's application icon and choose 'Show Package Contents' from the dropdown menu. 64 | 65 | * Open the 'Contents' folder, then the 'Resources' folder and finally 'Input Devices'. 66 | 67 | * Drag the attached .plist file into the folder (you may be asked to Authenticate using your username and password, please do so). 68 | 69 | * Close the Finder window. 70 | 71 | 72 | If you are using a Steam version of the game, we also recommend that you follow the steps below: 73 | 74 | * Ensure your Xbox One controller is not switched on. 75 | 76 | * Open the Steam Client. 77 | 78 | * Click 'Steam' in the top menu bar (next to the Apple logo in the top left of your Mac's screen). 79 | 80 | * In the dropdown that appears, click 'Preferences'. 81 | 82 | * In the new window that opens, select 'Controller' in the left list, then click 'General Controller Settings'. 83 | 84 | * Another window will open. Ensure that 'Xbox Configuration Support' is not checked. 85 | 86 | * Quit Steam. 87 | 88 | * Launch Steam. 89 | 90 | * Switch on Xbox One S controller to connect via Bluetooth. 91 | 92 | * Launch game. 93 | 94 | 95 | You should now be able to use the controller in the game. Please let us know if this helps. 96 | 97 | ## Donate 98 | 99 | If this repo helps, feel free to donate! 100 | 101 | [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/Q5Q41BW8HS) 102 | 103 | ## If it still doesn't work 104 | 105 | Previously, my Xbox One controller only worked wired. After fixing the bluetooth issue, the select button still didn't work. 106 | 107 | Generate a System Report in Tomb Raider launcher to find out your controller's Product ID. Mine looked like: 108 | ``` 109 | Xbox Wireless Controller: 110 | Vendor ID: 0x045E 111 | Product ID: 0x0B20 112 | Firmware Version: 5.17.3202.0 113 | ``` 114 | 115 | then convert the Product ID from hex to decimal. 0x0B20 in hex is 2848 in decimal. 116 | 117 | Then you need to edit the game's `XboxOneControllerSBluetoothv3.plist` file. 118 | 119 | I changed the ProductID to to make it work. Also change ButtonBack to make the select button work. This also works on Series. 120 | 121 | I also changed the string for the **CGPDeviceType** key to **Standard** instead of **Xbox** to stop the left stick drifting in Sleeping Dogs and GRID Autosport. 122 | 123 | This also appears to be compatible with the other games tested. 124 | 125 | ``` 126 | CGPDeviceType 127 | Standard 128 | ProductID 129 | 2848 130 | ButtonBack 131 | 9:11 132 | ``` 133 | 134 | If you still can't get it to work modify `XboxOneController.plist` with your controller's ProductID and just use the controller wired. This seems to be neccessary in some games with the Series Elite 2 controller. 135 | 136 | You may need to disable steam input. 137 | -------------------------------------------------------------------------------- /SteelSeriesNimbus.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CGPDeviceType 6 | Standard 7 | CGPDisplayNameOvr 8 | SteelSeries Nimbus 9 | VendorID 10 | 273 11 | ProductID 12 | 5152 13 | LeftAxisX 14 | 1:48 15 | LeftAxisX-Min 16 | -127 17 | LeftAxisX-Max 18 | 127 19 | LeftAxisY 20 | 1:49 21 | LeftAxisY-Min 22 | 127 23 | LeftAxisY-Max 24 | -127 25 | RightAxisX 26 | 1:50 27 | RightAxisX-Min 28 | -127 29 | RightAxisX-Max 30 | 127 31 | RightAxisY 32 | 1:53 33 | RightAxisY-Min 34 | 127 35 | RightAxisY-Max 36 | -127 37 | LeftTrigger 38 | 9:7 39 | RightTrigger 40 | 9:8 41 | ButtonA 42 | 9:1 43 | ButtonB 44 | 9:2 45 | ButtonX 46 | 9:3 47 | ButtonY 48 | 9:4 49 | LeftShoulder 50 | 9:5 51 | RightShoulder 52 | 9:6 53 | ButtonStart 54 | 12:547 55 | ButtonBack 56 | 9:9 57 | DPadUp 58 | 1:144 59 | DPadDown 60 | 1:145 61 | DPadLeft 62 | 1:147 63 | DPadRight 64 | 1:146 65 | Hatswitch 66 | 1:57 67 | HSValueRest 68 | 15 69 | HSValueUp 70 | 0 71 | HSValueUpRight 72 | 1 73 | HSValueRight 74 | 2 75 | HSValueDownRight 76 | 3 77 | HSValueDown 78 | 4 79 | HSValueDownLeft 80 | 5 81 | HSValueLeft 82 | 6 83 | HSValueUpLeft 84 | 7 85 | 86 | 87 | -------------------------------------------------------------------------------- /XboxOneControllerSBluetoothv5.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CGPDeviceCategory 6 | GamePad 7 | CGPDeviceType 8 | Standard 9 | CGPDeviceImageType 10 | Xbox 11 | CGPDisplayNameOvr 12 | Xbox One Controller 13 | VendorID 14 | 1118 15 | ProductID 16 | 2848 17 | HonorMinMax 18 | 1 19 | LeftAxisX 20 | 1:48 21 | LeftAxisX-Min 22 | 0 23 | LeftAxisX-Max 24 | 65535 25 | LeftAxisY 26 | 1:49 27 | LeftAxisY-Min 28 | 0 29 | LeftAxisY-Max 30 | 65535 31 | LeftTrigger 32 | 2:197 33 | LeftTrigger-Min 34 | 0 35 | LeftTrigger-Max 36 | 1023 37 | RightAxisX 38 | 1:50 39 | RightAxisX-Min 40 | 0 41 | RightAxisX-Max 42 | 65535 43 | RightAxisY 44 | 1:53 45 | RightAxisY-Min 46 | 0 47 | RightAxisY-Max 48 | 65535 49 | RightTrigger 50 | 2:196 51 | RightTrigger-Min 52 | 0 53 | RightTrigger-Max 54 | 1023 55 | Hatswitch 56 | 1:57 57 | HSValueRest 58 | 0 59 | HSValueUp 60 | 1 61 | HSValueUpRight 62 | 2 63 | HSValueRight 64 | 3 65 | HSValueDownRight 66 | 4 67 | HSValueDown 68 | 5 69 | HSValueDownLeft 70 | 6 71 | HSValueLeft 72 | 7 73 | HSValueUpLeft 74 | 8 75 | ButtonDevice 76 | 12:547 77 | ButtonA 78 | 9:1 79 | ButtonB 80 | 9:2 81 | ButtonX 82 | 9:4 83 | ButtonY 84 | 9:5 85 | LeftShoulder 86 | 9:7 87 | RightShoulder 88 | 9:8 89 | ButtonBack 90 | 9:11 91 | ButtonStart 92 | 9:12 93 | LeftThumb 94 | 9:14 95 | RightThumb 96 | 9:15 97 | LeftAxisX-InitVal 98 | 127 99 | LeftAxisY-InitVal 100 | 127 101 | RightAxisX-InitVal 102 | 127 103 | RightAxisY-InitVal 104 | 127 105 | LeftTrigger-InitVal 106 | 0 107 | RightTrigger-InitVal 108 | 0 109 | 110 | 111 | -------------------------------------------------------------------------------- /XboxSeriesBluetooth.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CGPDeviceCategory 6 | GamePad 7 | CGPDeviceType 8 | Standard 9 | CGPDeviceImageType 10 | Xbox 11 | CGPDisplayNameOvr 12 | Xbox One Controller 13 | VendorID 14 | 1118 15 | ProductID 16 | 2835 17 | HonorMinMax 18 | 1 19 | LeftAxisX 20 | 1:48 21 | LeftAxisX-Min 22 | 0 23 | LeftAxisX-Max 24 | 65535 25 | LeftAxisY 26 | 1:49 27 | LeftAxisY-Min 28 | 0 29 | LeftAxisY-Max 30 | 65535 31 | LeftTrigger 32 | 2:197 33 | LeftTrigger-Min 34 | 0 35 | LeftTrigger-Max 36 | 1023 37 | RightAxisX 38 | 1:50 39 | RightAxisX-Min 40 | 0 41 | RightAxisX-Max 42 | 65535 43 | RightAxisY 44 | 1:53 45 | RightAxisY-Min 46 | 0 47 | RightAxisY-Max 48 | 65535 49 | RightTrigger 50 | 2:196 51 | RightTrigger-Min 52 | 0 53 | RightTrigger-Max 54 | 1023 55 | Hatswitch 56 | 1:57 57 | HSValueRest 58 | 0 59 | HSValueUp 60 | 1 61 | HSValueUpRight 62 | 2 63 | HSValueRight 64 | 3 65 | HSValueDownRight 66 | 4 67 | HSValueDown 68 | 5 69 | HSValueDownLeft 70 | 6 71 | HSValueLeft 72 | 7 73 | HSValueUpLeft 74 | 8 75 | ButtonDevice 76 | 12:547 77 | ButtonA 78 | 9:1 79 | ButtonB 80 | 9:2 81 | ButtonX 82 | 9:4 83 | ButtonY 84 | 9:5 85 | LeftShoulder 86 | 9:7 87 | RightShoulder 88 | 9:8 89 | ButtonBack 90 | 9:11 91 | ButtonStart 92 | 9:12 93 | LeftThumb 94 | 9:14 95 | RightThumb 96 | 9:15 97 | LeftAxisX-InitVal 98 | 127 99 | LeftAxisY-InitVal 100 | 127 101 | RightAxisX-InitVal 102 | 127 103 | RightAxisY-InitVal 104 | 127 105 | LeftTrigger-InitVal 106 | 0 107 | RightTrigger-InitVal 108 | 0 109 | 110 | 111 | --------------------------------------------------------------------------------