Created
June 12, 2019 20:03
-
-
Save JujuAdams/c0c8948e747459622ff1ba0aaee00ef0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//// quick n dirty script to get gms2-mapped pad device type across pc/android | |
// | |
// takes gamepad id (real), returns device type (string) | |
// types: xb360, xbone, ps3, ps4, switch, snes, saturn, 8bitdo, steam, ouya | |
// note: xb360 & xbone are conflated on windows target | |
// | |
// refs: | |
// https://github.com/gabomdq/SDL_GameControllerDB/ | |
// https://yachtclubgames.com/2014/03/steam-controller-support/ | |
// https://github.com/libretro/retroarch-joypad-autoconfig/ | |
// https://support.steampowered.com/kb_article.php?ref=5199-TOKV-4426 | |
// http://www.linux-usb.org/usb.ids | |
// | |
// covers all but the following ids which i haven't been able to identify: | |
// Android: 0500000011010000201400000f7e0f00, 31326235383662333266633463653332 | |
// Linux: 05000000362000010000000201000000, 03000000c6240000fdfa000000010000 | |
var _gamepad_index = argument0; | |
// smoke check | |
if !(gamepad_is_supported() && | |
(os_type == os_windows || os_type == os_macosx || | |
os_type == os_linux || os_type == os_android)) | |
show_error("Unsupported Platform", true) | |
// empty slot | |
if !gamepad_is_connected(_gamepad_index) | |
return "disconnected"; | |
var _guid = gamepad_get_guid(_gamepad_index); | |
var _device_type = "unknown"; | |
// handle out of range | |
if _guid = "device index out of range" | |
show_error(string(_gamepad_index) + ": " + _guid, true); | |
// handle missing map | |
if _guid == "" || _guid == "none" | |
return _device_type; | |
switch (os_type) { | |
#region windows | |
case os_windows: | |
// slots 0-3 are reserved for xinput | |
if _gamepad_index < 4 | |
return "xb360"; | |
// abbreviate format for windows target (vid/pid only) | |
_guid = string_copy(gamepad_get_guid(_gamepad_index),0,8) | |
// test for known guids (see refs) | |
switch (_guid) { | |
case "02200090": | |
case "20380900": | |
_device_type = "8bitdo"; // snes button w/ 2 sticks | |
break; | |
case "36280100": | |
_device_type = "ouya"; | |
break; | |
case "10080300": | |
case "0d0f4900": | |
case "0d0f6e00": | |
case "10080100": | |
case "25090500": | |
case "341a3608": | |
case "4c056802": | |
case "4f0400b3": | |
case "4f0423b3": | |
case "6d0419c2": | |
case "6f0e1e01": | |
case "88880803": | |
case "8f0e0d31": | |
case "8f0e1200": | |
case "d6206dca": | |
_device_type = "ps3"; | |
break; | |
case "4c05a00b": | |
case "4c05c405": | |
case "4c05cc09": | |
_device_type = "ps4"; | |
break; | |
case "00f00300": | |
case "00f0f100": | |
case "100801e5": | |
case "10280900": | |
case "79000600": | |
case "83056020": | |
_device_type = "snes"; | |
break; | |
case "28040140": | |
case "7e050920": | |
case "2509e803": | |
case "79000018": | |
_device_type = "switch"; | |
break; | |
case "300f1001": | |
case "341a0108": | |
case "49190204": | |
case "8f0e0300": | |
_device_type = "xb360"; | |
break; | |
} | |
break; | |
#endregion | |
#region macos | |
case os_macosx: | |
switch (_guid) { | |
case "03000000022000000090000001000000": | |
case "03000000203800000900000000010000": | |
_device_type = "8bitdo"; | |
break; | |
case "030000000d0f00004d00000000000000": | |
case "030000000d0f00005f00000000000000": | |
case "030000000d0f00005f00000000010000": | |
case "030000000d0f00006e00000000010000": | |
case "030000004c0500006802000000010000": | |
case "030000006d04000016c2000000000000": | |
case "030000006d04000019c2000000000000": | |
case "030000006d0400001fc2000000000000": | |
case "030000008f0e00000300000000000000": | |
case "03000000a306000022f6000001030000": | |
case "03000000bd12000015d0000000000000": | |
_device_type = "ps3"; | |
break; | |
case "030000000d0f00005e00000000000000": | |
case "030000000d0f00005e00000000010000": | |
case "030000000d0f00006600000000000000": | |
case "030000000d0f00006600000000010000": | |
case "03000000120c0000100e000000010000": | |
case "03000000321500000010000000010000": | |
case "03000000380700005032000000010000": | |
case "03000000380700005082000000010000": | |
case "030000004c0500006802000000000000": | |
case "030000004c050000a00b000000000000": | |
case "030000004c050000a00b000000010000": | |
case "030000004c050000c405000000000000": | |
case "030000004c050000c405000000010000": | |
case "030000004c050000cc09000000000000": | |
case "030000004c050000cc09000000010000": | |
case "030000006b140000010d000000010000": | |
_device_type = "ps4"; | |
break; | |
case "03000000811700007e05000000000000": | |
case "03000000b40400000a01000000000000": | |
_device_type = "saturn"; | |
break; | |
case "030000001008000001e5000006010000": | |
case "03000000102800000900000000000000": | |
case "030000003512000021ab000000000000": | |
case "03000000790000001100000000000000": | |
case "03000000790000001100000006010000": | |
case "03000000830500006020000000000000": | |
case "03000000830500006020000000010000": | |
case "030000008f0e00001330000011010000": | |
case "03000000bd12000015d0000000010000": | |
case "050000005769696d6f74652028303000": | |
case "03000000a00500003232000008010000": | |
_device_type = "snes"; | |
break; | |
case "030000005e0400008e02000001000000": | |
_device_type = "steam"; | |
break; | |
case "0300000025090000e803000000000000": | |
case "03000000790000000018000000000000": | |
case "030000007e0500000920000000000000": | |
case "030000007e0500000920000001000000": | |
case "050000005769696d6f74652028313800": | |
_device_type = "switch"; | |
break; | |
case "0300000032150000030a000000000000": | |
case "030000005e040000d102000000000000": | |
case "030000005e040000dd02000000000000": | |
case "030000005e040000e002000000000000": | |
case "030000005e040000e002000003090000": | |
case "030000005e040000e302000000000000": | |
case "030000005e040000ea02000000000000": | |
case "030000005e040000fd02000003090000": | |
_device_type = "xbone"; | |
break; | |
case "03000000110100001714000000000000": | |
case "03000000110100001714000020010000": | |
case "03000000110100002014000000000000": | |
case "03000000110100002014000001000000": | |
case "03000000172700004431000029010000": | |
case "03000000381000002014000001000000": | |
case "030000005e0400008e02000000000000": | |
case "030000008916000000fd000000000000": | |
case "03000000ad1b000001f9000000000000": | |
case "03000000c6240000045d000000000000": | |
case "03000000d8140000cecf000000000000": | |
_device_type = "xb360"; | |
break; | |
} | |
break; | |
#endregion | |
#region linux | |
case os_linux: | |
switch (_guid) { | |
case "050000007e0500003003000001000000": | |
_device_type = "8bitdo"; | |
break; | |
case "03000000de280000ff11000001000000": | |
_device_type = "steam"; | |
break; | |
case "05000000362800000100000002010000": | |
case "05000000362800000100000003010000": | |
_device_type = "ouya"; | |
break; | |
case "0300000000f000000300000000010000": | |
case "0300000000f00000f100000000010000": | |
case "03000000790000001100000010010000": | |
case "03000000830500006020000010010000": | |
case "03000000bd12000015d0000010010000": | |
case "05000000102800000900000000010000": | |
_device_type = "snes"; | |
break; | |
case "030000004c050000a00b000011010000": | |
case "030000004c050000c405000011010000": | |
case "030000004c050000cc09000011010000": | |
case "03000000ba2200002010000001010000": | |
case "050000004c050000c405000000010000": | |
case "050000004c050000cc09000000010000": | |
_device_type = "ps4"; | |
break; | |
case "030000000d0f00001000000011010000": | |
case "030000000d0f00002200000011010000": | |
case "03000000100800000100000010010000": | |
case "03000000250900000500000000010000": | |
case "030000004c0500006802000011010000": | |
case "030000004f04000008d0000000010000": | |
case "030000004f04000009d0000000010000": | |
case "030000004f04000015b3000010010000": | |
case "030000004f04000020b3000010010000": | |
case "030000004f04000023b3000000010000": | |
case "03000000666600000488000000010000": | |
case "030000006d04000019c2000011010000": | |
case "030000006d0400001fc2000005030000": | |
case "030000006f0e00001e01000011010000": | |
case "030000006f0e00003001000001010000": | |
case "030000008f0e00000300000010010000": | |
case "030000008f0e00001200000010010000": | |
case "03000000d814000007cd000011010000": | |
case "03000000d81400000862000011010000": | |
case "03000000f0250000c183000010010000": | |
case "050000004c0500006802000000010000": | |
case "060000004c0500006802000000010000": | |
_device_type = "ps3"; | |
break; | |
case "030000005e0400008502000000010000": | |
case "030000005e0400008902000021010000": | |
case "030000005e040000d102000001010000": | |
case "030000005e040000dd02000003020000": | |
case "030000006f0e00003901000020060000": | |
case "030000006f0e00004601000001010000": | |
_device_type = "xbone"; | |
break; | |
case "0000000058626f782047616d65706100": | |
case "03000000380700001647000010040000": | |
case "030000005e0400001907000000010000": | |
case "030000005e0400008e02000004010000": | |
case "030000005e0400008e02000010010000": | |
case "030000005e0400008e02000014010000": | |
case "030000005e0400008e02000020200000": | |
case "030000005e0400008e02000062230000": | |
case "030000005e0400009102000007010000": | |
case "030000006d04000011c2000010010000": | |
case "030000006e0500000320000010010000": | |
case "030000006f0e00000103000000020000": | |
case "030000006f0e00001304000000010000": | |
case "030000006f0e00001f01000000010000": | |
case "030000008916000000fd000024010000": | |
case "030000008916000001fd000024010000": | |
case "03000000ad1b000001f5000033050000": | |
case "03000000ad1b000016f0000090040000": | |
case "03000000c9110000f055000011010000": | |
case "0500000047532047616d657061640000": | |
case "05000000d6200000ad0d000001000000": | |
_device_type = "xb360"; | |
break; | |
} | |
break; | |
#endregion | |
#region android | |
case os_android: | |
switch (_guid) { | |
case "05000000de2800000511000001000000": | |
_device_type = "steam"; | |
break; | |
case "050000005e040000fd020000ffff3f00": | |
_device_type = "xbone"; | |
break; | |
case "050000004c050000c4050000fffe3f00": | |
case "35643031303033326130316330353564": | |
_device_type = "ps4"; | |
break; | |
case "050000005509000003720000cf7f3f00": | |
case "0500000011010000201400000f7e0f00": | |
case "34356136633366613530316338376136": | |
case "37336435666338653565313731303834": | |
case "4e564944494120436f72706f72617469": | |
case "61363931656135336130663561616264": | |
case "64633436313965656664373634323364": | |
_device_type = "xb360"; | |
break; | |
} | |
break; | |
#endregion | |
} | |
return _device_type; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment