├── .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 | []()
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 | [](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 | [](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 |
--------------------------------------------------------------------------------