From c84f49f1dcd521fdbc70613d7ab4d5f505d7c8c0 Mon Sep 17 00:00:00 2001 From: cuckydev Date: Wed, 16 Jan 2019 22:48:21 -0500 Subject: [PATCH] wip --- Makefile | 13 +- build/data/Credit/Credit01.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit02.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit03.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit04.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit05.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit06.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit07.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit08.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit09.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit10.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit11.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit12.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit14.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit15.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit16.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit17.bmp | Bin 0 -> 19318 bytes build/data/Credit/Credit18.bmp | Bin 0 -> 19318 bytes build/data/{Fade.bmp => Fade.pbm} | Bin build/data/gamecontrollerdb.txt | 585 ++++++++++++++++++++++++++++++ src/CommonDefines.h | 3 + src/Config.cpp | 6 +- src/Draw.cpp | 476 +++++++++++++++++++++++- src/Draw.h | 71 ++++ src/Ending.cpp | 364 +++++++++++++++++++ src/Ending.h | 41 +++ src/Flags.cpp | 48 +++ src/Flags.h | 9 + src/Game.cpp | 71 ++++ src/Game.h | 7 + src/Generic.cpp | 10 + src/Generic.h | 4 + src/GenericLoad.cpp | 56 +++ src/GenericLoad.h | 2 + src/Input.cpp | 14 +- src/KeyControl.h | 2 + src/Main.cpp | 105 ++++-- src/Map.cpp | 14 + src/Map.h | 12 + src/NpcTbl.cpp | 46 +++ src/NpcTbl.h | 28 ++ src/Tags.h | 5 + src/TextScr.cpp | 63 ++++ src/TextScr.h | 59 +++ src/Triangle.cpp | 100 +++++ src/Triangle.h | 7 + src/Types.h | 5 +- src/WindowsWrapper.h | 9 +- 48 files changed, 2193 insertions(+), 42 deletions(-) create mode 100644 build/data/Credit/Credit01.bmp create mode 100644 build/data/Credit/Credit02.bmp create mode 100644 build/data/Credit/Credit03.bmp create mode 100644 build/data/Credit/Credit04.bmp create mode 100644 build/data/Credit/Credit05.bmp create mode 100644 build/data/Credit/Credit06.bmp create mode 100644 build/data/Credit/Credit07.bmp create mode 100644 build/data/Credit/Credit08.bmp create mode 100644 build/data/Credit/Credit09.bmp create mode 100644 build/data/Credit/Credit10.bmp create mode 100644 build/data/Credit/Credit11.bmp create mode 100644 build/data/Credit/Credit12.bmp create mode 100644 build/data/Credit/Credit14.bmp create mode 100644 build/data/Credit/Credit15.bmp create mode 100644 build/data/Credit/Credit16.bmp create mode 100644 build/data/Credit/Credit17.bmp create mode 100644 build/data/Credit/Credit18.bmp rename build/data/{Fade.bmp => Fade.pbm} (100%) create mode 100644 build/data/gamecontrollerdb.txt create mode 100644 src/Draw.h create mode 100644 src/Ending.cpp create mode 100644 src/Ending.h create mode 100644 src/Flags.cpp create mode 100644 src/Flags.h create mode 100644 src/Game.cpp create mode 100644 src/Game.h create mode 100644 src/Generic.cpp create mode 100644 src/Generic.h create mode 100644 src/GenericLoad.cpp create mode 100644 src/GenericLoad.h create mode 100644 src/Map.cpp create mode 100644 src/Map.h create mode 100644 src/NpcTbl.cpp create mode 100644 src/NpcTbl.h create mode 100644 src/Tags.h create mode 100644 src/TextScr.cpp create mode 100644 src/TextScr.h create mode 100644 src/Triangle.cpp create mode 100644 src/Triangle.h diff --git a/Makefile b/Makefile index 8415feb8..cc5ee19e 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ RELEASE = 0 ifeq ($(RELEASE), 0) -CXXFLAGS := -O0 -g -static +CXXFLAGS := -O0 -g -static -mconsole FILENAME = debug else CXXFLAGS := -O3 -s -static @@ -16,15 +16,24 @@ CXXFLAGS += -DFIX_BUGS endif CXXFLAGS += `sdl2-config --cflags` -LIBS += `sdl2-config --static-libs` +LIBS += `sdl2-config --static-libs` -lSDL2_ttf -lfreetype -lharfbuzz -lfreetype -lbz2 -lpng -lz -lgraphite2 -lRpcrt4 -lDwrite -lusp10 # For an accurate result to the original's code, compile in alphabetical order SOURCES = \ Config \ Draw \ + Ending \ + Flags \ + Game \ + Generic \ + GenericLoad \ Input \ KeyControl \ Main \ + Map \ + NpcTbl \ + TextScr \ + Triangle \ OBJECTS = $(addprefix obj/$(FILENAME)/, $(addsuffix .o, $(SOURCES))) diff --git a/build/data/Credit/Credit01.bmp b/build/data/Credit/Credit01.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4f52f89286dba6d99e336995667317ea8e0ba8e7 GIT binary patch literal 19318 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 XT~#fkq5|6 literal 0 HcmV?d00001 diff --git a/build/data/Credit/Credit02.bmp b/build/data/Credit/Credit02.bmp new file mode 100644 index 0000000000000000000000000000000000000000..739f8aacaef0b0bc2050e421608687599c088193 GIT binary patch literal 19318 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 literal 0 HcmV?d00001 diff --git a/build/data/Credit/Credit04.bmp b/build/data/Credit/Credit04.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5f8851bd76012a9955aba4b66305e9b3ec485fba GIT binary patch literal 19318 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 literal 0 HcmV?d00001 diff --git a/build/data/Credit/Credit05.bmp b/build/data/Credit/Credit05.bmp new file mode 100644 index 0000000000000000000000000000000000000000..af21ba8768a93935c4bbece5582316569f91d165 GIT binary patch literal 19318 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 YN!)kL1(^~5KY5uM=NByWM&9`U05(oK&;S4c literal 0 HcmV?d00001 diff --git a/build/data/Credit/Credit08.bmp b/build/data/Credit/Credit08.bmp new file mode 100644 index 0000000000000000000000000000000000000000..269c01f7050b66f8a5837efd4d4944aefac8de2c GIT binary patch literal 19318 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 literal 0 HcmV?d00001 diff --git a/build/data/Credit/Credit09.bmp b/build/data/Credit/Credit09.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c23be4e7275a864c64f706173cbb247d00f77ea0 GIT binary patch literal 19318 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 T7oL7&eJ@n;|IPkSMc{t`Psm<4 literal 0 HcmV?d00001 diff --git a/build/data/Credit/Credit10.bmp b/build/data/Credit/Credit10.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7bcc86357ad48810fd83565d1a96db1ccb651a2c GIT binary patch literal 19318 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 T1Fs%<^}wqKUOn*t literal 0 HcmV?d00001 diff --git a/build/data/Credit/Credit11.bmp b/build/data/Credit/Credit11.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6b7b6f515fb18c9427a5ea2ecd4450c38917d0c7 GIT binary patch literal 19318 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 DRJvpZ literal 0 HcmV?d00001 diff --git a/build/data/Credit/Credit12.bmp b/build/data/Credit/Credit12.bmp new file mode 100644 index 0000000000000000000000000000000000000000..befa1344b0cb123a05c8b7acc17538f3e550aa7c GIT binary patch literal 19318 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 literal 0 HcmV?d00001 diff --git a/build/data/Credit/Credit15.bmp b/build/data/Credit/Credit15.bmp new file mode 100644 index 0000000000000000000000000000000000000000..be871c41be3c393d064e25f2476c87e97a22dc4c GIT binary patch literal 19318 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 z�lQ#dvs~dy5c~r(bVss{(I(&tq3K?XOs&uOJ=q!MYUpRmpwb?;G&y<-_4H*EW0# z@V0-E$;KIJJ+<~xHb>pjK77y5Lf-uX*Xs=*Kj;GcFs1I=l2NWZGXUtU>Af43CW2I?RODRzJJ-^K5kCyj?HlRz3^ZMfdcG! zm=<|q1M*6J_br~Egcn(|A6~xl#f^MBPGBbo@sY#0kHc_~JfwH?Ca>&cL+QJC|NI_e zAy6zGPXQ+;_k;Cj2sW&-C<{wn04s- zym)wKFwtl!7G82*>(uRFq`bBs;*qmoEFG_2%ZO3lF*&pBNKn8da)a+O0pDg;=(|`5 zPtL8~6j(%1gUoO1;E3^#84uBVUNnrE@V0DLT$y6CA&yek;wUBPpWVcWrD;q6>>33nwTeyr;rHb}-j{N-1z z*a;k~vEy^cPqc33Aa|m|Up~~IKKJ0QUzI1IVIHMT^I)*!spu?(QJ;)s;T=s@*mO<` zOjW)+5N*-)`6~@rIO*`+;}DO7!U1V2r*Q`&-i`zsxB|Jt+Xi8M|H_r(%5|ryHAf_^ z?$CDRhbu?N>jVf{$Np8`=UuwaGpN+(fV=&HV*8tPX@dTpYUC z#5@s5oD>IyDWWYWtVy9C%B%bOvVBA}#RR`!`f#y|dCc&O(YR5f8Vhe-@G4$)G%cv~ z1uw=KGU7?pkPfHsSXZP3-U~F){hgd1`p5_cS3?O6`iMc!+tyd)MdhUvp5h7~F0Zx{ zzS06KDL3eD@!PJhB9>G$-nD%ZuNvovr}4>R z8{%!*Cojs|@-W_p zWbzzOQsa2)E>&%T*vswJ1dm32lj;-R6&u2Djler%SC;(|e|ydj_VEwM{+SUWyu$I$ zoYnDi#1Z3dQ7sF2TRCd-5`VdNxWVFiSnef$96Dt|__lJ?@fH{_EJ(=wfB`eg8%{9X z9pxRs^MhIS;naFLvfPN2=%e$;RTYJ44f?=CvE+K*n@zXD5%XO<2_J+EL=f)g{+iGU zeU4{6BX{LCCmk;~d6^G!Hw+h!XY{q0O_tB61nP! z?nLg6@LUXcPMz{ZA8wR|D379?Z|Csp%@NZw&`^VBb9fMFud$)?7U~s9UL+7Yz*>4`E=QKyG))6+|_dR^8!KP zX{TXm#k(>Np`_4Z@(}!(w}#Ov-j>b@%-!!{$MN=vmK!nvoy$Ag{7r`R0s1)FA|B&% zN*{+C#@`aA&EowLn>P~hb_zURpPk19`MY!O3>V?aJJG6dX298s4_3*0?B9kd;V5{= zFPs%G)zwRN3(qmiUM?}69nTzQm-BddH341Vy;ZZGXxy8B(YJ*=K(OQyN#3@9Pab5v$Map}$(nD0R&0x%9snjh9WF*p(h+z71KFs=Q$Rz>CP_z2ecEby zF=XU}Ruh5#aUWghk?FdlM1Mjw)w*pW4_ZxPS`o_qkfC~!J%rg@mp@^>Txj7@9*kRJ)8$B_%T z>B#j#p(aLvvF(675g6OZ_1ya_apZ*NDqD=3S***|5y66|82ILScQRWBKsk8Am9UL|Fkhvdt( zZaQ-6?+{OqIe%xeK8y9)`rzc9Qh3=N;1zisJD`0}@y2?W$Is#2l-)*;C=U^z@OL@d QyKL~hmDYyh_bt5t0Sl^f-v9sr literal 0 HcmV?d00001 diff --git a/build/data/Credit/Credit18.bmp b/build/data/Credit/Credit18.bmp new file mode 100644 index 0000000000000000000000000000000000000000..99d54769cdea90685e8db624a1d4a36098040a81 GIT binary patch literal 19318 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 literal 0 HcmV?d00001 diff --git a/build/data/Fade.bmp b/build/data/Fade.pbm similarity index 100% rename from build/data/Fade.bmp rename to build/data/Fade.pbm diff --git a/build/data/gamecontrollerdb.txt b/build/data/gamecontrollerdb.txt new file mode 100644 index 00000000..a19c1fa3 --- /dev/null +++ b/build/data/gamecontrollerdb.txt @@ -0,0 +1,585 @@ +# Game Controller DB for SDL in 2.0.9 format +# Source: https://github.com/gabomdq/SDL_GameControllerDB + +# Windows +03000000fa2d00000100000000000000,3DRUDDER,leftx:a0,lefty:a1,rightx:a5,righty:a2,platform:Windows, +03000000c82d00002038000000000000,8bitdo,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000022000000090000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000203800000900000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000060000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000061000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000102800000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000a00500003232000000000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, +030000008f0e00001200000000000000,Acme GA-02,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000fa190000f0ff000000000000,Acteck AGJ-3200,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000341a00003608000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00000263000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001101000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001401000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001402000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001901000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001a01000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d62000001d57000000000000,Airflo PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d6200000e557000000000000,Batarang,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000c01100001352000000000000,Battalife Joystick,a:b6,b:b7,back:b2,leftshoulder:b0,leftx:a0,lefty:a1,rightshoulder:b1,start:b3,x:b4,y:b5,platform:Windows, +030000006f0e00003201000000000000,Battlefield 4 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000bc2000006012000000000000,Betop 2126F,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000bc2000000055000000000000,Betop BFM Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000bc2000006312000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000bc2000006412000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000c01100000555000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000c01100000655000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000790000000700000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000808300000300000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +030000006b1400000055000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000006b1400000103000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +0300000066f700000500000000000000,BrutalLegendTest,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000d81d00000b00000000000000,BUFFALO BSGP1601 Series ,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows, +03000000e82000006058000000000000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000005e0400008e02000000000000,Controller (XBOX 360 For Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000a102000000000000,Controller (Xbox 360 Wireless Receiver for Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000260900008888000000000000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a4,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Windows, +03000000a306000022f6000000000000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000451300000830000000000000,Defender Game Racer X7,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000791d00000103000000000000,Dual Box WII,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000bd12000002e0000000000000,Dual USB Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows, +030000006f0e00003001000000000000,EA SPORTS PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000b80500000410000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +030000008f0e00000f31000000000000,EXEQ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +03000000341a00000108000000000000,EXEQ RF USB Gamepad 8206,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000852100000201000000000000,FF-GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008500000000000000,Fighting Commander 2016 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008400000000000000,Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008700000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008800000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows, +030000000d0f00002700000000000000,FIGHTING STICK V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +78696e70757403000000000000000000,Fightstick TES,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Windows, +03000000790000000600000000000000,G-Shark GS-GP702,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000790000002201000000000000,Game Controller for PC,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +0300000066f700000100000000000000,Game VIB Joystick,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows, +03000000260900002625000000000000,Gamecube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,lefttrigger:a4,leftx:a0,lefty:a1,righttrigger:a5,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Windows, +030000008f0e00000d31000000000000,GAMEPAD 3 TURBO,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000280400000140000000000000,GamePad Pro USB,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000ac0500003d03000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000ac0500004d04000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000ffff00000000000000000000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000008305000009a0000000000000,Genius,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000008305000031b0000000000000,Genius Maxfire Blaze 3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000451300000010000000000000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000005c1a00003330000000000000,Genius MaxFire Grandias 12V,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000300f00000b01000000000000,GGE909 Recoil Pad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000f0250000c283000000000000,Gioteck,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000f025000021c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000f0250000c383000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000f0250000c483000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000341a00000302000000000000,Hama Scorpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00004900000000000000,Hatsune Miku Sho Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d81400000862000000000000,HitBox Edition Cthulhu+,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, +03000000632500002605000000000000,HJD-X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +030000000d0f00005f00000000000000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005e00000000000000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00004000000000000000,Hori Fighting Stick Mini 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005400000000000000,Hori Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00000900000000000000,Hori Pad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00004d00000000000000,Hori Pad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000c100000000000000,Horipad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006e00000000000000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006600000000000000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000ee00000000000000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000250900000017000000000000,HRAP2 on PS/SS/N64 Joypad to USB BOX,a:b2,b:b1,back:b9,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b8,x:b3,y:b0,platform:Windows, +030000008f0e00001330000000000000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Windows, +03000000d81d00000f00000000000000,iBUFFALO BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000d81d00001000000000000000,iBUFFALO BSGP1204P Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000830500006020000000000000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Windows, +03000000b50700001403000000000000,Impact Black,a:b2,b:b3,back:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +030000006f0e00002401000000000000,INJUSTICE FightStick PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000ac0500002c02000000000000,IPEGA,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000491900000204000000000000,Ipega PG-9023,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +030000006e0500000520000000000000,JC-P301U,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500000320000000000000,JC-U3613M (DInput),a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500000720000000000000,JC-W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows, +030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, +03000000790000000200000000000000,King PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +030000006d040000d1ca000000000000,Logitech ChillStream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d040000d2ca000000000000,Logitech Cordless Precision,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d04000011c2000000000000,Logitech Cordless Wingman,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b2,righttrigger:b7,rightx:a3,righty:a4,x:b4,platform:Windows, +030000006d04000016c2000000000000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d04000018c2000000000000,Logitech F510 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d04000019c2000000000000,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700006652000000000000,Mad Catz C.T.R.L.R,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000380700005032000000000000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700005082000000000000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008433000000000000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008483000000000000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008134000000000000,Mad Catz FightStick TE2+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008184000000000000,Mad Catz FightStick TE2+ PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,leftstick:b10,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700006252000000000000,Mad Catz Micro C.T.R.L.R,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008034000000000000,Mad Catz TE2 PS3 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008084000000000000,Mad Catz TE2 PS4 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008532000000000000,Madcatz Arcade Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700003888000000000000,Madcatz Arcade Fightstick TE S+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700001888000000000000,MadCatz SFIV FightStick PS3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000380700008081000000000000,MADCATZ SFV Arcade FightStick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000002a0600001024000000000000,Matricom,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows, +03000000250900000128000000000000,Mayflash Arcade Stick,a:b1,b:b2,back:b8,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b5,y:b6,platform:Windows, +03000000790000004418000000000000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000790000004318000000000000,Mayflash GameCube Controller Adapter,a:b1,b:b2,back:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b0,leftshoulder:b4,leftstick:b0,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b0,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +030000008f0e00001030000000000000,Mayflash USB Adapter for original Sega Saturn controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,rightshoulder:b2,righttrigger:b7,start:b9,x:b3,y:b4,platform:Windows, +0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700006382000000000000,MLG GamePad PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000efbe0000edfe000000000000,Monect Virtual Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000250900006688000000000000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Windows, +03000000152000000182000000000000,NGDS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000bd12000015d0000000000000,Nintendo Retrolink USB Super SNES Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows, +030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000000d0500000308000000000000,Nostromo N45,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Windows, +030000004b120000014d000000000000,NYKO AIRFLO,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a3,leftstick:a0,lefttrigger:b6,rightshoulder:b5,rightstick:a2,righttrigger:b7,start:b9,x:b2,y:b3,platform:Windows, +03000000782300000a10000000000000,Onlive Wireless Controller,a:b15,b:b14,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b11,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b13,y:b12,platform:Windows, +03000000d62000006d57000000000000,OPP PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006b14000001a1000000000000,Orange Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000362800000100000000000000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows, +03000000120c0000f60e000000000000,P4 Wired Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, +030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000d62000006dca000000000000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d62000009557000000000000,Pro Elite PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d62000009f31000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d6200000c757000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000632500002306000000000000,PS Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows, +03000000e30500009605000000000000,PS to USB convert cable,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000100800000100000000000000,PS1 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +030000008f0e00007530000000000000,PS1 Controller,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b1,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000100800000300000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000250900008888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000666600006706000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Windows, +030000006b1400000303000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000009d0d00001330000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000250900000500000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows, +030000004c0500006802000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b10,lefttrigger:a3~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:a4~,rightx:a2,righty:a5,start:b8,x:b3,y:b0,platform:Windows, +03000000632500007505000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000888800000803000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows, +030000008f0e00001431000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000003807000056a8000000000000,PS3 RF pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000100000008200000000000000,PS360+ v1.66,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:h0.4,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000004c050000a00b000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004c050000cc09000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00000011000000000000,QanBa Arcade JoyStick 1008,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b10,x:b0,y:b3,platform:Windows, +03000000300f00001611000000000000,QanBa Arcade JoyStick 4018,a:b1,b:b2,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows, +03000000222c00000020000000000000,QANBA DRONE ARCADE JOYSTICK,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001210000000000000,QanBa Joystick Plus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, +03000000341a00000104000000000000,QanBa Joystick Q4RAF,a:b5,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b1,y:b2,platform:Windows, +03000000222c00000223000000000000,Qanba Obsidian Arcade Joystick PS3 Mode,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000222c00000023000000000000,Qanba Obsidian Arcade Joystick PS4 Mode,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000003000000000000,Razer Hydra,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000321500000204000000000000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000104000000000000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00001100000000000000,REAL ARCADE PRO.3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00007000000000000000,REAL ARCADE PRO.4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002200000000000000,REAL ARCADE Pro.V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005b00000000000000,Real Arcade Pro.V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005c00000000000000,Real Arcade Pro.V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000790000001100000000000000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows, +0300000000f000000300000000000000,RetroUSB.com RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows, +0300000000f00000f100000000000000,RetroUSB.com Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows, +030000006b140000010d000000000000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001e01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00002801000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000004f04000003d0000000000000,run'n'drive,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:a3,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:a4,rightstick:b11,righttrigger:b5,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000a306000023f6000000000000,Saitek Cyborg V.1 Game pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001201000000000000,Saitek Dual Analog Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000a30600000cff000000000000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,x:b0,y:b1,platform:Windows, +03000000a30600000c04000000000000,Saitek P2900,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001001000000000000,Saitek P480 Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000a30600000b04000000000000,Saitek P990,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000a30600000b04000000010000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Windows, +03000000a30600002106000000000000,Saitek PS1000,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000a306000020f6000000000000,Saitek PS2700,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001101000000000000,Saitek Rumble Pad,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +0300000000050000289b000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, +030000009b2800000500000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, +03000000341a00000208000000000000,SL-6555-SBK,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,platform:Windows, +03000000341a00000908000000000000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000008f0e00000800000000000000,SpeedLink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000c01100000591000000000000,Speedlink Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000110100001914000000000000,SteelSeries,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000381000001814000000000000,SteelSeries Stratus XL,a:b0,b:b1,back:b18,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b19,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b2,y:b3,platform:Windows, +03000000790000001c18000000000000,STK-7024X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000ff1100003133000000000000,SVEN X-PAD,a:b2,b:b3,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a4,start:b5,x:b0,y:b1,platform:Windows, +03000000d620000011a7000000000000,Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000004f04000007d0000000000000,T Mini Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000fa1900000706000000000000,Team 5,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000b50700001203000000000000,Techmobility X6-38V,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +030000004f04000015b3000000000000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +030000004f04000023b3000000000000,Thrustmaster Dual Trigger 3-in-1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Windows, +030000004f04000004b3000000000000,Thrustmaster Firestorm Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +03000000666600000488000000000000,TigerGame PS/PS2 Game Controller Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000d62000006000000000000000,Tournament PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000005f140000c501000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000b80500000210000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000d90400000200000000000000,TwinShock PS2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000101c0000171c000000000000,uRage Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000300f00000701000000000000,USB 4-Axis 12-Button Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000341a00002308000000000000,USB gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000005509000000b4000000000000,USB gamepad,a:b10,b:b11,back:b5,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,guide:b14,leftshoulder:b8,leftstick:b6,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b7,righttrigger:a5,rightx:a2,righty:a3,start:b4,x:b12,y:b13,platform:Windows, +030000006b1400000203000000000000,USB gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000790000000a00000000000000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000f0250000c183000000000000,USB gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000ff1100004133000000000000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000632500002305000000000000,USB Vibration Joystick (BM),a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000790000001b18000000000000,Venom Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000341a00000608000000000000,Xeox,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000450c00002043000000000000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000172700004431000000000000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000786901006e70000000000000,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000790000004f18000000000000,ZD-T Android,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, + +# Mac OS X +03000000022000000090000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000190000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000102800000900000000000000,8Bitdo SFC30 GamePad Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000a00500003232000009010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +030000008305000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000260900008888000088020000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Mac OS X, +03000000a306000022f6000001030000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000790000000600000000000000,G-Shark GP-702,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000ad1b000001f9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +030000000d0f00005f00000000010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00005e00000000010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00005f00000000000000,HORI Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00005e00000000000000,HORI Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00004d00000000000000,HORI Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00006e00000000010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00006600000000010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00006600000000000000,HORIPAD FPS PLUS 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000008f0e00001330000011010000,HuiJia SNES Controller,a:b4,b:b2,back:b16,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b12,rightshoulder:b14,start:b18,x:b6,y:b0,platform:Mac OS X, +03000000830500006020000000010000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X, +03000000830500006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X, +030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Mac OS X, +030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Mac OS X, +030000006d04000016c2000000020000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000016c2000000030000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000016c2000014040000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d0400001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000006d04000018c2000000010000,Logitech RumblePad 2 USB,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000380700005032000000010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000380700005082000000010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000380700008433000000010000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000380700008483000000010000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000790000004418000000010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Mac OS X, +0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Mac OS X, +03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X, +03000000d8140000cecf000000000000,MC Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Mac OS X, +030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000d62000006dca000000010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, +030000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, +030000004c050000a00b000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000008916000000fd000000000000,Razer Onza TE,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000321500000204000000010000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000321500000104000000010000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000321500000010000000010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000790000001100000000000000,Retrolink Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a3,lefty:a4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000790000001100000006010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +030000006b140000010d000000010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000c6240000fefa000000000000,Rock Candy Gamepad for PS3,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000811700007e05000000000000,Sega Saturn,a:b2,b:b4,dpdown:b16,dpleft:b15,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,leftx:a0,lefty:a2,rightshoulder:b9,righttrigger:a4,start:b13,x:b0,y:b6,platform:Mac OS X, +03000000b40400000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Mac OS X, +030000003512000021ab000000000000,SFC30 Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +030000004c050000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004c050000a00b000000000000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000005e0400008e02000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000110100002014000000000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,platform:Mac OS X, +03000000110100002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X, +03000000381000002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X, +03000000110100001714000000000000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X, +03000000110100001714000020010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X, +030000004f04000015b3000000000000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Mac OS X, +030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Mac OS X, +03000000bd12000015d0000000000000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000bd12000015d0000000010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000100800000100000000000000,Twin USB Joystick,a:b4,b:b2,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b12,leftstick:b20,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b14,rightstick:b22,righttrigger:b10,rightx:a6,righty:a4,start:b18,x:b6,y:b0,platform:Mac OS X, +050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,platform:Mac OS X, +050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X, +030000005e0400008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000c6240000045d000000000000,Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000d102000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000dd02000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000e302000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000e002000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X, +030000005e040000e002000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X, +030000005e040000ea02000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000fd02000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000120c0000100e000000010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, + +# Linux +03000000022000000090000011010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00002038000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000190000011010000,8Bitdo NES30 Pro 8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000061000000010000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000102800000900000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00003028000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +05000000a00500003232000001000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux, +05000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux, +030000006f0e00001302000000010000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00003901000020060000,Afterglow Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00003901000000430000,Afterglow Prismatic Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000100000008200000011010000,Akishop Customs PS360+ v1.66,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +05000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux, +03000000120c00000500000010010000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux, +03000000666600006706000000010000,boom PSX to PC Converter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Linux, +03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000260900008888000000010000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Linux, +03000000a306000022f6000011010000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +03000000b40400000a01000000010000,CYPRESS USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux, +03000000790000000600000010010000,DragonRise Inc. Generic USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux, +030000006f0e00003001000001010000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000341a000005f7000010010000,GameCube {HuiJia USB box},a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux, +03000000bc2000000055000011010000,GameSir G3w,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00001304000000010000,Generic X-Box pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:a0,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:a3,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +0300000079000000d418000000010000,GPD Win 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000280400000140000000010000,Gravis GamePad Pro USB ,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000008f0e00000610000000010000,GreenAsia Electronics 4Axes 12Keys GamePad ,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Linux, +030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +0500000047532067616d657061640000,GS gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +06000000adde0000efbe000002010000,Hidromancer Game Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,a:b1,b:b2,back:b8,guide:b9,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,platform:Linux, +03000000c9110000f055000011010000,HJC Game GAMEPAD,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000000d0f00000d00000000010000,hori,a:b0,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftx:b4,lefty:b5,rightshoulder:b7,start:b9,x:b1,y:b2,platform:Linux, +030000000d0f00001000000011010000,HORI CO. LTD. FIGHTING STICK 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006a00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006b00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00002200000011010000,HORI CO. LTD. REAL ARCADE Pro.V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00005f00000011010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00005e00000011010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00006e00000011010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006600000011010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006700000001010000,HORIPAD ONE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000008f0e00001330000010010000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Linux, +03000000830500006020000010010000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux, +050000006964726f69643a636f6e0000,idroid:con,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000b50700001503000010010000,impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, +03000000fd0500000030000000010000,InterAct GoPad I-73000 (Fighting Game Layout),a:b3,b:b4,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b7,x:b0,y:b1,platform:Linux, +0500000049190000020400001b010000,Ipega PG-9069 - Bluetooth Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux, +03000000300f00001001000010010000,Jess Tech Dual Analog Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, +03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux, +030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux, +030000006f0e00000103000000020000,Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d04000016c2000010010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d04000016c2000011010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d04000015c2000010010000,Logitech Logitech Extreme 3D,a:b0,b:b4,back:b6,guide:b8,leftshoulder:b9,leftstick:h0.8,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:h0.2,start:b7,x:b2,y:b5,platform:Linux, +030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,rightx:a3,righty:a4,start:b8,x:b3,y:b4,platform:Linux, +05000000380700006652000025010000,Mad Catz C.T.R.L.R ,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700005032000011010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700005082000011010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux, +03000000380700008034000011010000,Mad Catz fightstick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008084000011010000,Mad Catz fightstick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008433000011010000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008483000011010000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000380700001647000010040000,Mad Catz Wired Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000380700003847000090040000,Mad Catz Wired Xbox 360 Controller (SFIV),a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000380700001888000010010000,MadCatz PC USB Wired Stick 8818,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700003888000010010000,MadCatz PC USB Wired Stick 8838,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:a0,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +0300000079000000d218000011010000,MAGIC-NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000120c00000500000000010000,Manta Dualshock 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +03000000790000004418000010010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux, +03000000780000000600000010010000,Microntek USB Joystick,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +030000005e0400000e00000000010000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux, +030000005e0400008e02000004010000,Microsoft X-Box 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000062230000,Microsoft X-Box 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000e302000003020000,Microsoft X-Box One Elite pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000d102000001010000,Microsoft X-Box One pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000dd02000003020000,Microsoft X-Box One pad (Firmware 2015),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000d102000003020000,Microsoft X-Box One pad v2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008502000000010000,Microsoft X-Box pad (Japan),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, +030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, +05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, +03000000250900006688000000010000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, +030000000d0f00000900000010010000,Natec Genesis P44,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Linux, +050000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +050000007e0500003003000001000000,Nintendo Wii Remote Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, +05000000010000000100000003000000,Nintendo Wiimote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000000d0500000308000010010000,Nostromo n45 Dual Analog Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux, +03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000005e0400000202000000010000,Old Xbox pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, +05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux, +05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux, +03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c62400000053000000010000,PowerA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000006dca000011010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +030000004c0500006802000010810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +030000004c0500006802000011810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000006f0e00001402000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000008f0e00000300000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +050000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:a12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:a13,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +050000004c0500006802000000800000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c0500006802000000810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +05000000504c415953544154494f4e00,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +060000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +030000004c050000a00b000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004c050000a00b000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c050000c405000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004c050000c405000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004c050000cc09000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004c050000cc09000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +050000004c050000c405000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +050000004c050000cc09000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000cc09000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +03000000300f00001211000011010000,QanBa Arcade JoyStick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,platform:Linux, +030000009b2800000300000001010000,raphnet.net 4nes4snes v1.5,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux, +030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000008916000000fd000024010000,Razer Onza Tournament Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000321500000204000011010000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000321500000104000011010000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000321500000010000011010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000008916000000fe000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c6240000045d000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c6240000045d000025010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000321500000009000011010000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +050000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +0300000032150000030a000001010000,Razer Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000790000001100000010010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux, +0300000000f000000300000000010000,RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux, +030000006b140000010d000011010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00001f01000000010000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00001e01000011010000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00004601000001010000,Rock Candy Xbox One Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +03000000a30600000cff000010010000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux, +03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b12,x:b0,y:b3,platform:Linux, +03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux, +03000000a30600000b04000000010000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux, +03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +03000000c01600008704000011010000,Serial/Keyboard/Mouse/Joystick,a:b12,b:b10,back:b4,dpdown:b2,dpleft:b3,dpright:b1,dpup:b0,leftshoulder:b9,leftstick:b14,lefttrigger:b6,leftx:a1,lefty:a0,rightshoulder:b8,rightstick:b15,righttrigger:b7,rightx:a2,righty:a3,start:b5,x:b13,y:b11,platform:Linux, +03000000f025000021c1000010010000,ShanWan Gioteck PS3 Wired Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000632500007505000010010000,SHANWAN PS3/PC Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000632500002305000010010000,ShanWan USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000341a00000908000010010000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, +030000005e0400008e02000073050000,Speedlink TORID Wireless Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800004211000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +05000000de2800000212000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de280000ff11000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000ad1b000038f0000090040000,Street Fighter IV FightStick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000666600000488000000010000,Super Joy Box 5 Pro,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, +0300000000f00000f100000000010000,Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux, +030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Linux, +030000004f04000026b3000002040000,Thrustmaster Gamepad GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c6240000025b000002020000,Thrustmaster GPX Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000004f04000012b3000010010000,Thrustmaster vibrating gamepad,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +03000000bd12000015d0000010010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,a:b0,b:b1,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, +03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux, +03000000790000001100000000010000,USB Gamepad1,a:b2,b:b1,back:b8,dpdown:a0,dpleft:a1,dpright:a2,dpup:a4,start:b9,platform:Linux, +05000000ac0500003232000001000000,VR-BOX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000a102000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000a102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +0000000058626f782033363020576900,Xbox 360 Wireless Controller,a:b0,b:b1,back:b14,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b7,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux, +030000005e040000a102000014010000,Xbox 360 Wireless Receiver (XBOX),a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000ea02000001030000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000e002000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000fd02000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000450c00002043000010010000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +05000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux, +03000000c0160000e105000001010000,Xin-Mo Xin-Mo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux, +xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000120c0000100e000011010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, + +# Android +05000000bc20000000550000ffff3f00,GameSir G3w,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000d6020000e5890000dfff3f00,GPD XD Plus,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android, +64633436313965656664373634323364,Microsoft X-Box 360 pad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android, +050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b17,y:b2,platform:Android, +37336435666338653565313731303834,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4e564944494120436f72706f72617469,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +61363931656135336130663561616264,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005509000003720000cf7f3f00,NVIDIA Controller v01.01,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005509000010720000ffff3f00,NVIDIA Controller v01.03,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000004c05000068020000dfff3f00,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000004c050000c4050000fffe3f00,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, +050000004c050000cc090000fffe3f00,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, +35643031303033326130316330353564,PS4 Controller,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, +050000003215000000090000bf7f3f00,Razer Serval,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android, +05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android, +05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android, +5477696e20555342204a6f7973746963,Twin USB Joystick,a:b22,b:b21,back:b28,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b30,lefttrigger:b24,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b31,righttrigger:b25,rightx:a3,righty:a2,start:b29,x:b23,y:b20,platform:Android, +050000005e040000e00200000ffe3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android, +050000005e040000fd020000ffff3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e04000091020000ff073f00,Xbox Wireless Controller,a:b0,b:b1,back:b4,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +34356136633366613530316338376136,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android, + +# iOS +05000000ac0500000100000000006d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS, +05000000ac0500000200000000006d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS, +4d466947616d65706164010000000000,MFi Extended Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:iOS, +4d466947616d65706164020000000000,MFi Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:iOS, +05000000ac0500000300000000006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS, +05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS, +05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS, diff --git a/src/CommonDefines.h b/src/CommonDefines.h index 772e5b1c..2a135b90 100644 --- a/src/CommonDefines.h +++ b/src/CommonDefines.h @@ -1,2 +1,5 @@ #pragma once #define PATH_LENGTH 260 //Pixel had the path size locked to 260 (dangerously low), if you tried to open the executable in a path with more than around 220 characters, it'd crash. + +#define WINDOW_WIDTH 320 +#define WINDOW_HEIGHT 240 diff --git a/src/Config.cpp b/src/Config.cpp index 7fe654c9..a4985e84 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -1,14 +1,16 @@ #include #include "Types.h" +#include "CommonDefines.h" #include #include #include #include - -#include "Config.h" #include "WindowsWrapper.h" +#include "Tags.h" +#include "Config.h" + bool LoadConfigData(CONFIG *conf) { //Clear old config data diff --git a/src/Draw.cpp b/src/Draw.cpp index 99fdbc58..d80e2317 100644 --- a/src/Draw.cpp +++ b/src/Draw.cpp @@ -1,4 +1,478 @@ +#include +#include "Types.h" +#include "CommonDefines.h" +#include +#include + +#include +#include +#include +#include +#include "WindowsWrapper.h" + +#include "Draw.h" +#include "Tags.h" + +RECT grcGame = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT}; +RECT grcFull = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT}; + +SURFACE surf[SURFACE_ID_MAX]; + +TTF_Font *gFont; +double gFontXStretch; //This is something normally done by DirectX, but... well... we're not using DirectX. + +#define FRAMERATE 20 + +bool Flip_SystemTask() +{ + while (true) + { + if (!SystemTask()) + return false; + + //Framerate limiter + static uint32_t timePrev; + const uint32_t timeNow = SDL_GetTicks(); + + if (timeNow >= timePrev + FRAMERATE) + { + if (timeNow >= timePrev + 100) + timePrev = timeNow; // If the timer is freakishly out of sync, panic and reset it, instead of spamming frames for who-knows how long + else + timePrev += FRAMERATE; + + break; + } + + SDL_Delay(1); + } + + SDL_RenderPresent(gRenderer); + return true; +} + bool StartDirectDraw() { + //Create renderer + gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED); + return true; +} + +void EndDirectDraw() +{ + //Release all surfaces + for (int i = 0; i < SURFACE_ID_MAX; i++) + { + if (surf[i].texture) + { + SDL_DestroyTexture(surf[i].texture); + surf[i].texture = NULL; + } + } +} + +void ReleaseSurface(int s) +{ + //Release the surface we want to release + if (surf[s].texture) + { + SDL_DestroyTexture(surf[s].texture); + surf[s].texture = NULL; + } +} + +bool MakeSurface(const char *name, int surf_no) +{ + //Check if surf_no can be used + if (surf_no > SURFACE_ID_MAX) + { + printf("Tried to create surface with invalid id %d\n", surf_no); + return false; + } + if (surf[surf_no].texture) + { + printf("Tried to create surface at id %d, but there's already a texture there\n", surf_no); + return false; + } -} \ No newline at end of file + //Load surface from file + SDL_Surface *surface = SDL_LoadBMP(name); + if (!surface) + { + printf("Couldn't load bitmap for surface id %d\nSDL Error: %s\n", surf_no, SDL_GetError()); + return false; + } + + //Make sure surface has color key on + SDL_SetColorKey(surface, SDL_TRUE, 0x000000); + + //Get texture from surface + SDL_Texture *texture = SDL_CreateTextureFromSurface(gRenderer, surface); + if (!texture) + { + printf("Failed to convert SDL_Surface to SDL_Texture for surface id %d\nSDL Error: %s\n", surf_no, SDL_GetError()); + return false; + } + + //Create real texture, and copy loaded texture here (has texture target access) + int w, h; + SDL_QueryTexture(texture, NULL, NULL, &w, &h); + + SDL_Texture *textureAccessible = SDL_CreateTexture(gRenderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_TARGET, w, h); + + if (!textureAccessible) + { + printf("Failed to create real texture for surface id %d\nSDL Error: %s\n", surf_no, SDL_GetError()); + return false; + } + + SDL_SetTextureBlendMode(textureAccessible, SDL_BLENDMODE_BLEND); + + SDL_SetRenderTarget(gRenderer, textureAccessible); + SDL_RenderCopy(gRenderer, texture, NULL, NULL); + SDL_SetRenderTarget(gRenderer, NULL); + + //Set surface's metadata + surf[surf_no].texture = textureAccessible; + surf[surf_no].scale = true; + + //Free surface + SDL_FreeSurface(surface); + + printf(" ^ Successfully loaded\n"); + return true; +} + +bool MakeSurface_File(const char *name, int surf_no) +{ + char path[PATH_LENGTH]; + + //Attempt to load PBM + sprintf(path, "%s/%s.pbm", gDataPath, name); + printf("Loading surface (as .pbm) from %s for surface id %d\n", path, surf_no); + if (MakeSurface(path, surf_no)) + return true; + + //Attempt to load BMP + sprintf(path, "%s/%s.bmp", gDataPath, name); + printf("Loading surface (as .bmp) from %s for surface id %d\n", path, surf_no); + if (MakeSurface(path, surf_no)) + return true; + + return false; +} + +bool ReloadBitmap_File(const char *name, int surf_no) +{ + ReleaseSurface(surf_no); + return MakeSurface_File(name, surf_no); +} + +bool MakeSurface_Generic(int bxsize, int bysize, int surf_no) +{ + //Delete old surface + ReleaseSurface(surf_no); + + //Create surface + surf[surf_no].texture = SDL_CreateTexture(gRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, bxsize * gWindowScale, bysize * gWindowScale); + + if (!surf[surf_no].texture) + { + printf("Failed to create drawable surface %d\nSDL Error: %s\n", surf_no, SDL_GetError()); + return false; + } + + SDL_SetTextureBlendMode(surf[surf_no].texture, SDL_BLENDMODE_BLEND); + + //Set metadata + surf[surf_no].scale = false; + return true; +} + +SDL_Rect RectToSDLRect(RECT *rect) +{ + SDL_Rect SDLRect = { rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top}; + return SDLRect; +} + +void BackupSurface(int surf_no, RECT *rect) +{ + //Get renderer size + int w, h; + SDL_GetRendererOutputSize(gRenderer, &w, &h); + + //Get texture of what's currently rendered on screen + SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormat(SDL_TEXTUREACCESS_TARGET, w, h, 0, SDL_PIXELFORMAT_RGB888); + SDL_RenderReadPixels(gRenderer, nullptr, SDL_PIXELFORMAT_RGBA32, surface->pixels, surface->pitch); + + SDL_Texture *screenTexture = SDL_CreateTextureFromSurface(gRenderer, surface); + + //Free surface + SDL_FreeSurface(surface); + + //Get rects + SDL_Rect frameRect = {0, 0, frameRect.w, frameRect.h}; + SDL_Rect destRect = RectToSDLRect(rect); + + //Draw texture onto surface + SDL_SetRenderTarget(gRenderer, surf[surf_no].texture); + SDL_RenderCopy(gRenderer, screenTexture, &frameRect, &destRect); + SDL_SetRenderTarget(gRenderer, NULL); +} + +void PutBitmap3(RECT *rcView, int x, int y, RECT *rect, int surf_no) //Transparency +{ + //Get SDL_Rects + SDL_Rect clipRect = RectToSDLRect(rcView); + + int scale = surf[surf_no].scale ? 1 : gWindowScale; + SDL_Rect frameRect = RectToSDLRect(rect); + frameRect = {frameRect.x * scale, frameRect.y * scale, frameRect.w * scale, frameRect.h * scale}; + + //Get dest rect + scale = surf[surf_no].scale ? gWindowScale : 1; + SDL_Rect destRect = {x * gWindowScale, y * gWindowScale, frameRect.w * scale, frameRect.h * scale}; + + //Set cliprect + clipRect = {clipRect.x * gWindowScale, clipRect.y * gWindowScale, clipRect.w * gWindowScale, clipRect.h * gWindowScale}; + SDL_RenderSetClipRect(gRenderer, &clipRect); + + //Draw to screen + if (SDL_RenderCopy(gRenderer, surf[surf_no].texture, &frameRect, &destRect) < 0) + printf(SDL_GetError()); + + //Undo cliprect + SDL_RenderSetClipRect(gRenderer, NULL); +} + +void PutBitmap4(RECT *rcView, int x, int y, RECT *rect, int surf_no) //No Transparency +{ + //Get SDL_Rects + SDL_Rect clipRect = RectToSDLRect(rcView); + + int scale = surf[surf_no].scale ? 1 : gWindowScale; + SDL_Rect frameRect = RectToSDLRect(rect); + frameRect = {frameRect.x * scale, frameRect.y * scale, frameRect.w * scale, frameRect.h * scale}; + + //Get dest rect + scale = surf[surf_no].scale ? gWindowScale : 1; + SDL_Rect destRect = {x * gWindowScale, y * gWindowScale, frameRect.w * scale, frameRect.h * scale}; + + //Set cliprect + clipRect = {clipRect.x * gWindowScale, clipRect.y * gWindowScale, clipRect.w * gWindowScale, clipRect.h * gWindowScale}; + SDL_RenderSetClipRect(gRenderer, &clipRect); + + //Get original drawing colour + uint8_t origR, origG, origB, origA; + SDL_GetRenderDrawColor(gRenderer, &origR, &origG, &origB, &origA); + + //Draw black behind texture + SDL_SetRenderDrawColor(gRenderer, 0, 0, 0, 0xFF); + SDL_RenderFillRect(gRenderer, &destRect); + + //Draw texture + if (SDL_RenderCopy(gRenderer, surf[surf_no].texture, &frameRect, &destRect) < 0) + printf(SDL_GetError()); + + //Restore original colour, and undo cliprect + SDL_RenderSetClipRect(gRenderer, NULL); + SDL_SetRenderDrawColor(gRenderer, origR, origG, origB, origA); +} + +void Surface2Surface(int x, int y, RECT *rect, int to, int from) +{ + //Get rects + SDL_Rect rcSet = {x, y, x + rect->right - rect->left, y + rect->bottom - rect->top}; + SDL_Rect frameRect = RectToSDLRect(rect); + frameRect = {frameRect.x * gWindowScale, frameRect.y * gWindowScale, frameRect.w * gWindowScale, frameRect.h * gWindowScale}; + + //Target surface + if (!surf[to].texture) + { + printf("Tried to draw to surface %s, which doesn't exist\n", to); + return; + } + + SDL_SetRenderTarget(gRenderer, surf[to].texture); + + //Draw texture + if (SDL_RenderCopy(gRenderer, surf[from].texture, &frameRect, &rcSet) < 0) + printf(SDL_GetError()); + + //Stop targetting surface + SDL_SetRenderTarget(gRenderer, NULL); +} + +void CortBox(RECT *rect, uint32_t col) +{ + //Get rect + SDL_Rect destRect = RectToSDLRect(rect); + destRect = {destRect.x * gWindowScale, destRect.y * gWindowScale, destRect.w * gWindowScale, destRect.h * gWindowScale}; + + //Set colour and draw + SDL_SetRenderDrawColor(gRenderer, (col & 0xFF0000) >> 16, (col & 0x00FF00) >> 8, col & 0x0000FF, 0xFF); + SDL_RenderFillRect(gRenderer, &destRect); +} + +void CortBox2(RECT *rect, uint32_t col, int surf_no) +{ + //Get rect + SDL_Rect destRect = RectToSDLRect(rect); + destRect = {destRect.x * gWindowScale, destRect.y * gWindowScale, destRect.w * gWindowScale, destRect.h * gWindowScale}; + + //Target surface + if (!surf[surf_no].texture) + { + printf("Tried to draw a rectangle to surface %s, which doesn't exist\n", surf_no); + return; + } + + SDL_SetRenderTarget(gRenderer, surf[surf_no].texture); + + //Set colour and draw + SDL_SetRenderDrawColor(gRenderer, col & 0xFF0000 >> 16, col & 0x00FF00 >> 8, col & 0x0000FF, 0xFF); + SDL_RenderFillRect(gRenderer, &destRect); + + //Stop targetting surface + SDL_SetRenderTarget(gRenderer, NULL); +} + +void InitTextObject() +{ + //Initialize SDL_TTF + if(!TTF_WasInit() && TTF_Init() < 0) + { + printf("TTF_Init: %s\n", TTF_GetError()); + return; + } + + //If font already exists, delete + if (gFont) + TTF_CloseFont(gFont); + + //Get font size + unsigned int fontWidth, fontHeight; + if (gWindowScale == 1) + { + fontWidth = 5; + fontHeight = 10; + } + else + { + fontWidth = 5 * gWindowScale; + fontHeight = 8 * gWindowScale + (gWindowScale >> 1); + } + + //Open Font.ttf + char path[PATH_LENGTH]; + sprintf(path, "%s/Font.ttf", gDataPath); + + gFont = TTF_OpenFont(path, fontHeight); + if(!gFont) + { + printf("TTF_OpenFont: %s\n", TTF_GetError()); + return; + } + + //Get the average width of the font, and make it so the average width is the font width above. + char string[0xE1]; + for (int i = 0; i < 0xE0; i++) + string[i] = i + 0x20; + string[0xE1] = 0; + + int width, height; + if (TTF_SizeText(gFont, string, &width, &height)) + { + printf("TTF_SizeText: %s\n", TTF_GetError()); + return; + } + + gFontXStretch = (double)fontWidth / ((double)width / (double)0xE0); +} + +void PutText(int x, int y, const char *text, uint32_t color) +{ + SDL_Color textColor = {(uint8_t)((color & 0xFF0000) >> 16), (uint8_t)((color & 0xFF00) >> 8), (uint8_t)(color & 0xFF)}; + SDL_Color backColor = {0, 0, 0}; + + //Draw text + SDL_Surface *textSurface = TTF_RenderText_Shaded(gFont, text, textColor, backColor); + + if (!textSurface) + { + printf("TTF_RenderText_Shaded: %s\n", TTF_GetError()); + return; + } + + SDL_SetColorKey(textSurface, SDL_TRUE, 0x000000); + + //Convert to texture + SDL_Texture *textTexture = SDL_CreateTextureFromSurface(gRenderer, textSurface); + + if (!textTexture) + { + printf("Failed to convert SDL_Surface to SDL_Texture to draw text: %s\nTTF Error: %s\n", text, TTF_GetError()); + return; + } + + //Draw to screen + SDL_Rect destRect = {x * gWindowScale, y * gWindowScale, (int)(textSurface->w * gFontXStretch), textSurface->h}; + SDL_RenderCopy(gRenderer, textTexture, NULL, &destRect); + + //Destroy surface and texture + SDL_FreeSurface(textSurface); + SDL_DestroyTexture(textTexture); +} + +void PutText2(int x, int y, const char *text, uint32_t color, int surf_no) +{ + SDL_Color textColor = {(uint8_t)((color & 0xFF0000) >> 16), (uint8_t)((color & 0xFF00) >> 8), (uint8_t)(color & 0xFF)}; + SDL_Color backColor = {0, 0, 0}; + + //Draw text + SDL_Surface *textSurface = TTF_RenderText_Shaded(gFont, text, textColor, backColor); + + if (!textSurface) + { + printf("TTF_RenderText_Shaded: %s\n", TTF_GetError()); + return; + } + + SDL_SetColorKey(textSurface, SDL_TRUE, 0x000000); + + //Convert to texture + SDL_Texture *textTexture = SDL_CreateTextureFromSurface(gRenderer, textSurface); + + if (!textTexture) + { + printf("Failed to convert SDL_Surface to SDL_Texture to draw text: %s\nTTF Error: %s\n", text, TTF_GetError()); + return; + } + + //Target surface + if (!surf[surf_no].texture) + { + printf("Tried to draw text to surface %s, which doesn't exist\n", surf_no); + return; + } + + SDL_SetRenderTarget(gRenderer, surf[surf_no].texture); + + //Draw to screen + SDL_Rect destRect = {x * gWindowScale, y * gWindowScale, (int)(textSurface->w * gFontXStretch), textSurface->h}; + SDL_RenderCopy(gRenderer, textTexture, NULL, &destRect); + + //Destroy surface and texture + SDL_FreeSurface(textSurface); + SDL_DestroyTexture(textTexture); + + //Stop targetting surface + SDL_SetRenderTarget(gRenderer, NULL); +} + +void EndTextObject() +{ + //Destroy font + TTF_CloseFont(gFont); + gFont = nullptr; +} diff --git a/src/Draw.h b/src/Draw.h new file mode 100644 index 00000000..909fce1f --- /dev/null +++ b/src/Draw.h @@ -0,0 +1,71 @@ +#pragma once +#include +#include "WindowsWrapper.h" +#include + +extern SDL_Window *gWindow; +extern SDL_Renderer *gRenderer; + +extern RECT grcGame; +extern RECT grcFull; + +extern int gWindowWidth; +extern int gWindowHeight; +extern int gWindowScale; + +enum Surface_Ids +{ + SURFACE_ID_TITLE = 0x0, + SURFACE_ID_PIXEL = 0x1, + SURFACE_ID_LEVEL_TILESET = 0x2, + SURFACE_ID_FADE = 0x6, + SURFACE_ID_ITEM_IMAGE = 0x8, + SURFACE_ID_MAP = 0x9, + SURFACE_ID_SCREEN_GRAB = 0xA, + SURFACE_ID_ARMS = 0xB, + SURFACE_ID_ARMS_IMAGE = 0xC, + SURFACE_ID_ROOM_NAME = 0xD, + SURFACE_ID_STAGE_ITEM = 0xE, + SURFACE_ID_LOADING = 0xF, + SURFACE_ID_MY_CHAR = 0x10, + SURFACE_ID_BULLET = 0x11, + SURFACE_ID_CARET = 0x13, + SURFACE_ID_NPC_SYM = 0x14, + SURFACE_ID_LEVEL_SPRITESET_1 = 0x15, + SURFACE_ID_LEVEL_SPRITESET_2 = 0x16, + SURFACE_ID_NPC_REGU = 0x17, + SURFACE_ID_TEXT_BOX = 0x1A, + SURFACE_ID_FACE = 0x1B, + SURFACE_ID_LEVEL_BACKGROUND = 0x1C, + SURFACE_ID_CREDIT_CAST = 0x23, + SURFACE_ID_CREDITS_IMAGE = 0x24, + SURFACE_ID_CASTS = 0x25, + SURFACE_ID_MAX = 0x28, +}; + +struct SURFACE +{ + SDL_Texture *texture; + bool scale; +}; + +extern SURFACE surf[SURFACE_ID_MAX]; + +bool Flip_SystemTask(); +bool StartDirectDraw(); +void EndDirectDraw(); +void ReleaseSurface(int s); +bool MakeSurface(SDL_RWops *rw, int surf_no); +bool MakeSurface_File(const char *name, int surf_no); +bool ReloadBitmap_File(const char *name, int surf_no); +bool MakeSurface_Generic(int bxsize, int bysize, int surf_no); +void BackupSurface(int surf_no, RECT *rect); +void PutBitmap3(RECT *rcView, int x, int y, RECT *rect, int surf_no); +void PutBitmap4(RECT *rcView, int x, int y, RECT *rect, int surf_no); +void Surface2Surface(int x, int y, RECT *rect, int to, int from); +void CortBox(RECT *rect, uint32_t col); +void CortBox2(RECT *rect, uint32_t col, int surf_no); +void InitTextObject(); +void PutText(int x, int y, const char *text, uint32_t color); +void PutText2(int x, int y, const char *text, uint32_t color, int surf_no); +void EndTextObject(); diff --git a/src/Ending.cpp b/src/Ending.cpp new file mode 100644 index 00000000..82ef1311 --- /dev/null +++ b/src/Ending.cpp @@ -0,0 +1,364 @@ +#include +#include + +#include +#include "WindowsWrapper.h" + +#include "Tags.h" +#include "Generic.h" +#include "Ending.h" +#include "Flags.h" +#include "Draw.h" +#include "TextScr.h" + +CREDIT Credit; +STRIP Strip[16]; +ILLUSTRATION Illust; + +//Update casts +void ActionStripper() +{ + for (int s = 0; s < 16; s++) + { + //Move up + if (Strip[s].flag & 0x80 && Credit.mode) + Strip[s].y -= 0x100; + //Get removed when off-screen + if (Strip[s].y <= -0x2000) + Strip[s].flag = 0; + } +} + +//Draw casts +void PutStripper() +{ + for (int s = 0; s < 16; s++) + { + if (Strip[s].flag & 0x80) + { + //Draw text + RECT rc = {0, 16 * s, 320, 16 * s + 16}; + PutBitmap3(&grcFull, Strip[s].x / 0x200, Strip[s].y / 0x200, &rc, SURFACE_ID_CREDIT_CAST); + + //Draw character + rc.left = 24 * (Strip[s].cast % 13); + rc.right = rc.left + 24; + rc.top = 24 * (Strip[s].cast / 13); + rc.bottom = rc.top + 24; + PutBitmap3(&grcFull, Strip[s].x / 0x200 - 24, Strip[s].y / 0x200 - 8, &rc, SURFACE_ID_CASTS); + } + } +} + +//Create a cast object +void SetStripper(int x, int y, char *text, int cast) +{ + for (int s = 0; s < 16; s++) + { + if (!(Strip[s].flag & 0x80)) + { + //Initialize cast property + Strip[s].flag = 0x80; + Strip[s].x = x; + Strip[s].y = y; + Strip[s].cast = cast; + strcpy(Strip[s].str, text); + + //Draw text + RECT rc = {0, 16 * s, 320, 16 * s + 16}; + CortBox2(&rc, 0, SURFACE_ID_CREDIT_CAST); + PutText2(0, 16 * s, text, 0xFFFFFE, SURFACE_ID_CREDIT_CAST); + break; + } + } +} + +//Regenerate cast text +void RestoreStripper() +{ + for (int s = 0; s < 16; s++) + { + if (Strip[s].flag & 0x80) + { + RECT rc = {0, 16 * s, 320, 16 * s + 16}; + CortBox2(&rc, 0, SURFACE_ID_CREDIT_CAST); + PutText2(0, rc.top, Strip[s].str, 0xFFFFFE, SURFACE_ID_CREDIT_CAST); + } + } +} + +//Handle the illustration +void ActionIllust() +{ + switch (Illust.act_no) + { + case 1: //Move in from the left + Illust.x += 0x5000; + if (Illust.x > 0) + Illust.x = 0; + break; + + case 2: //Move out from the right + Illust.x -= 0x5000; + if (Illust.x < -0x14000) + Illust.x = -0x14000; + break; + + case 0: //Off-screen to the left + Illust.x = -0x14000; + break; + } +} + +//Draw illustration +void PutIllust() +{ + RECT rcIllust = {0, 0, 160, 240}; + PutBitmap3(&grcFull, Illust.x / 0x200, 0, &rcIllust, SURFACE_ID_CREDITS_IMAGE); +} + +//Load illustration +void ReloadIllust(int a) +{ + char name[16]; + sprintf(name, "Credit/Credit%02ld", a); + ReloadBitmap_File(name, SURFACE_ID_CREDITS_IMAGE); +} + +//Initialize and release credits +void InitCreditScript() +{ + memset(&Credit, 0, sizeof(CREDIT)); + memset(Strip, 0, sizeof(Strip)); +} + +void ReleaseCreditScript() +{ + if (Credit.pData) + { + free(Credit.pData); + Credit.pData = NULL; + } +} + +//Start playing credits +bool StartCreditScript() +{ + //Clear previously existing credits data + if (Credit.pData) + { + free(Credit.pData); + Credit.pData = NULL; + } + + //Open file + char path[PATH_LENGTH]; + sprintf(path, "%s/%s", gDataPath, "Credit.tsc"); + + SDL_RWops *fp = SDL_RWFromFile(path, "rb"); + if (!fp) + { + printf("Couldn't open %s", path); + return false; + } + + //Allcoate buffer data + Credit.size = SDL_RWsize(fp); + + Credit.pData = (char*)malloc(Credit.size); + if (!Credit.pData) + return false; + + //Read data + fp->read(fp, Credit.pData, 1, Credit.size); + EncryptionBinaryData2((uint8_t*)Credit.pData, Credit.size); + + //Reset credits + Credit.offset = 0; + Credit.wait = 0; + Credit.mode = 1; + Illust.x = -0x14000; + Illust.act_no = 0; + + //Modify cliprect + grcGame.left = 160; + + //Reload casts + if (!ReloadBitmap_File("casts", SURFACE_ID_CASTS)) + { + return false; + } + + //Clear casts + memset(Strip, 0, sizeof(Strip)); + return true; +} + +//Get number from text (4 digit) +int GetScriptNumber(const char *text) +{ + return 1000 * *text - 48000 + 100 * text[1] - 4800 + 10 * text[2] - 480 + text[3] - 48; +} + +//Parse credits +void ActionCredit_Read() +{ + while (Credit.offset < Credit.size) + { + uint8_t character = Credit.pData[Credit.offset]; + + int a, b, len; + switch (character) + { + case '[': //Create cast + //Get the range for the cast text + a = ++Credit.offset; + + while (Credit.pData[a] != ']') + { + if (IsShiftJIS(Credit.pData[a])) + a += 2; + else + a++; + } + + len = a - Credit.offset; + + //Copy the text to the cast text + char text[40]; + memcpy(text, &Credit.pData[Credit.offset], a - Credit.offset); + text[len] = 0; + + //Get cast id + Credit.offset = a + 1; + len = GetScriptNumber(&Credit.pData[a + 1]); + + //Create cast object + SetStripper(Credit.start_x, (WINDOW_HEIGHT << 9) + 0x1000, text, len); + + //Change offset + Credit.offset += 4; + return; + + case 'j': //Jump to label + //Get number + b = GetScriptNumber(&Credit.pData[++Credit.offset]); + + //Change offset + Credit.offset += 4; + + //Jump to specific label + while (Credit.offset < Credit.size) + { + if (Credit.pData[Credit.offset] == 'l') + { + //what is this + a = GetScriptNumber(&Credit.pData[++Credit.offset]); + Credit.offset += 4; + if (b == a) + return; + } + else if (IsShiftJIS(Credit.pData[Credit.offset])) + { + Credit.offset += 2; + } + else + { + ++Credit.offset; + } + } + + return; + + case '~': //Start fading out music + ++Credit.offset; + //SetOrganyaFadeout(); + return; + + case 'f': //Flag jump + //Read numbers XXXX:YYYY + a = GetScriptNumber(&Credit.pData[++Credit.offset]); + Credit.offset += 5; + b = GetScriptNumber(&Credit.pData[Credit.offset]); + Credit.offset += 4; + + //If flag is set + if ((uint8_t)GetNPCFlag(a)) + { + //Jump to label + while ( Credit.offset < Credit.size ) + { + if (Credit.pData[Credit.offset] == 'l') + { + a = GetScriptNumber(&Credit.pData[++Credit.offset]); + Credit.offset += 4; + if ( b == a ) + return; + } + else if (IsShiftJIS(Credit.pData[Credit.offset])) + { + Credit.offset += 2; + } + else + { + ++Credit.offset; + } + } + } + return; + + case '+': //Change casts x-position + Credit.start_x = GetScriptNumber(&Credit.pData[++Credit.offset]) << 9; + Credit.offset += 4; + return; + + case '-': //Wait for X amount of frames + Credit.wait = GetScriptNumber(&Credit.pData[++Credit.offset]); + Credit.offset += 4; + Credit.mode = 2; + return; + + case '/': //Stop credits + Credit.mode = 0; + return; + + case '!': //Change music + a = GetScriptNumber(&Credit.pData[++Credit.offset]); + Credit.offset += 4; + //ChangeMusic(a); + return; + } + + //Progress through file + ++Credit.offset; + } +} + +//Update credits +void ActionCredit() +{ + if (Credit.offset < Credit.size) + { + if (Credit.mode == 1) + { + ActionCredit_Read(); + } + else if (Credit.mode == 2 && --Credit.wait <= 0) + { + Credit.mode = 1; + } + } +} + +//Change illustration +void SetCreditIllust(int a) +{ + ReloadIllust(a); + Illust.act_no = 1; +} + +//Slide illustration off-screen +void CutCreditIllust() +{ + Illust.act_no = 2; +} diff --git a/src/Ending.h b/src/Ending.h new file mode 100644 index 00000000..f22841d5 --- /dev/null +++ b/src/Ending.h @@ -0,0 +1,41 @@ +#pragma once +#include + +struct CREDIT +{ + int size; + char *pData; + int offset; + int wait; + int mode; + int start_x; +}; + +struct STRIP +{ + int flag; + int x; + int y; + int cast; + char str[0x40]; +}; + +struct ILLUSTRATION +{ + int act_no; + int x; +}; + +void ActionStripper(); +void PutStripper(); +void SetStripper(int x, int y, char *text, int cast); +void RestoreStripper(); +void ActionIllust(); +void PutIllust(); +void ReloadIllust(int a); +void InitCreditScript(); +void ReleaseCreditScript(); +bool StartCreditScript(); +void ActionCredit(); +void SetCreditIllust(int a); +void CutCreditIllust(); diff --git a/src/Flags.cpp b/src/Flags.cpp new file mode 100644 index 00000000..52989b48 --- /dev/null +++ b/src/Flags.cpp @@ -0,0 +1,48 @@ +#include +#include + +uint8_t gFlagNPC[1000]; +uint8_t gSkipFlag[0x40]; + +//Flag inits +void InitFlags() +{ + memset(gFlagNPC, 0, sizeof(gFlagNPC)); +} + +void InitSkipFlags() +{ + memset(gSkipFlag, 0, sizeof(gSkipFlag)); +} + +//NPC flags +void SetNPCFlag(int a) +{ + gFlagNPC[a / 8] |= 1 << a % 8; +} + +void CutNPCFlag(int a) +{ + gFlagNPC[a / 8] &= ~(1 << a % 8); +} + +bool GetNPCFlag(int a) +{ + return ((gFlagNPC[a / 8] >> a % 8) & 1) != 0; +} + +//Skip flags +void SetSkipFlag(int a) +{ + gSkipFlag[a / 8] |= 1 << a % 8; +} + +void CutSkipFlag(int a) +{ + gSkipFlag[a / 8] &= ~(1 << a % 8); +} + +bool GetSkipFlag(int a) +{ + return ((gSkipFlag[a / 8] >> a % 8) & 1) != 0; +} diff --git a/src/Flags.h b/src/Flags.h new file mode 100644 index 00000000..de314f32 --- /dev/null +++ b/src/Flags.h @@ -0,0 +1,9 @@ +#pragma once +void InitFlags(); +void InitSkipFlags(); +void SetNPCFlag(int a); +void CutNPCFlag(int a); +bool GetNPCFlag(int a); +void SetSkipFlag(int a); +void CutSkipFlag(int a); +bool GetSkipFlag(int a); diff --git a/src/Game.cpp b/src/Game.cpp new file mode 100644 index 00000000..5027ca75 --- /dev/null +++ b/src/Game.cpp @@ -0,0 +1,71 @@ +#include +#include + +#include "Tags.h" +#include "NpcTbl.h" +#include "GenericLoad.h" +#include "TextScr.h" +#include "Flags.h" +#include "Map.h" +#include "Draw.h" +#include "Ending.h" + +int g_GameFlags; +int gCounter; + +int Random(int min, int max) +{ + return min + rand() % (max - min + 1); +} + +bool Game() +{ + if (LoadGenericData()) + { + char path[PATH_LENGTH]; + sprintf(path, "%s/npc.tbl", gDataPath); + if (LoadNpcTable(path)) + { + InitTextScript2(); + InitSkipFlags(); + InitMapData2(); + InitCreditScript(); + + StartCreditScript(); + + while (Flip_SystemTask()) + { + ActionCredit(); + ActionIllust(); + ActionStripper(); + CortBox(&grcFull, 0x000020); + PutIllust(); + PutStripper(); + } + + /* + int mode = 0; //1; + while (mode) + { + //if ( mode == 1 ) + // mode = ModeOpening(); + //if ( mode == 2 ) + // mode = ModeTitle(); + //if ( mode == 3 ) + // mode = ModeAction(); + } + */ + + //EndMapData(); + //EndTextScript(); + //ReleaseNpcTable(); + //ReleaseCreditScript(); + } + else + { + return false; + } + } + + return true; +} \ No newline at end of file diff --git a/src/Game.h b/src/Game.h new file mode 100644 index 00000000..0e8b3879 --- /dev/null +++ b/src/Game.h @@ -0,0 +1,7 @@ +#pragma once +extern int g_GameFlags; +extern int gCounter; + +int Random(int min, int max); + +bool Game(); diff --git a/src/Generic.cpp b/src/Generic.cpp new file mode 100644 index 00000000..032eed6d --- /dev/null +++ b/src/Generic.cpp @@ -0,0 +1,10 @@ +#include + +bool IsShiftJIS(uint8_t c) +{ + if ( c > 0x80 && c < 0xA0 ) + return true; + if ( c < 0xE0 || c >= 0xF0 ) + return false; + return true; +} diff --git a/src/Generic.h b/src/Generic.h new file mode 100644 index 00000000..bfab70b6 --- /dev/null +++ b/src/Generic.h @@ -0,0 +1,4 @@ +#pragma once +#include + +bool IsShiftJIS(uint8_t c); diff --git a/src/GenericLoad.cpp b/src/GenericLoad.cpp new file mode 100644 index 00000000..7b091102 --- /dev/null +++ b/src/GenericLoad.cpp @@ -0,0 +1,56 @@ +#include "CommonDefines.h" +#include "Draw.h" + +bool LoadGenericData() +{ + MakeSurface_File("Pixel", 1); + + bool bError = false; + if ( !MakeSurface_File("MyChar", 16) ) + bError = true; + if ( !MakeSurface_File("Title", 0) ) + bError = true; + if ( !MakeSurface_File("ArmsImage", 12) ) + bError = true; + if ( !MakeSurface_File("Arms", 11) ) + bError = true; + if ( !MakeSurface_File("ItemImage", 8) ) + bError = true; + if ( !MakeSurface_File("StageImage", 14) ) + bError = true; + if ( !MakeSurface_File("Npc/NpcSym", 20) ) + bError = true; + if ( !MakeSurface_File("Npc/NpcRegu", 23) ) + bError = true; + if ( !MakeSurface_File("TextBox", 26) ) + bError = true; + if ( !MakeSurface_File("Caret", 19) ) + bError = true; + if ( !MakeSurface_File("Bullet", 17) ) + bError = true; + if ( !MakeSurface_File("Face", 27) ) + bError = true; + if ( !MakeSurface_File("Fade", 6) ) + bError = true; + + MakeSurface_File("Credit/Credit01", 36); + + if (bError) + { + return false; + } + else + { + MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_SCREEN_GRAB); + MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_LEVEL_BACKGROUND); + MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_MAP); + MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, 37); //Unknown? + MakeSurface_Generic(256, 256, SURFACE_ID_LEVEL_TILESET); + MakeSurface_Generic(160, 16, SURFACE_ID_ROOM_NAME); + MakeSurface_Generic(40, 240, 29); //Unknown? + MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_1); + MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_2); + MakeSurface_Generic(WINDOW_WIDTH, 240, SURFACE_ID_CREDIT_CAST); + return true; + } +} diff --git a/src/GenericLoad.h b/src/GenericLoad.h new file mode 100644 index 00000000..3dcfb217 --- /dev/null +++ b/src/GenericLoad.h @@ -0,0 +1,2 @@ +#pragma once +bool LoadGenericData(); diff --git a/src/Input.cpp b/src/Input.cpp index b3d91a64..e1e8a205 100644 --- a/src/Input.cpp +++ b/src/Input.cpp @@ -1,7 +1,12 @@ #include "Types.h" +#include "CommonDefines.h" #include + #include +#include "WindowsWrapper.h" + #include "Input.h" +#include "Tags.h" #define JOYSTICK_DEADZONE 0x2000 @@ -19,6 +24,11 @@ void ReleaseDirectInput() bool InitDirectInput() { + //Load mappings + char path[PATH_LENGTH]; + sprintf(path, "%s/%s", gDataPath, "gamecontrollerdb.txt"); + SDL_GameControllerAddMappingsFromFile(path); + //Open first available joystick for (int i = 0; i < SDL_NumJoysticks(); ++i) { @@ -55,9 +65,11 @@ bool GetJoystickStatus(JOYSTICK_STATUS *pStatus) for (int button = 0; button < numButtons; button++) pStatus->bButton[button] = SDL_GameControllerGetButton(joystick, (SDL_GameControllerButton)button) != 0; + + return true; } - return true; + return false; } bool ResetJoystickStatus() diff --git a/src/KeyControl.h b/src/KeyControl.h index 7eeaec37..70ca0e4a 100644 --- a/src/KeyControl.h +++ b/src/KeyControl.h @@ -48,3 +48,5 @@ extern int gKeyLeft; extern int gKeyUp; extern int gKeyRight; extern int gKeyDown; + +void GetTrg(); diff --git a/src/Main.cpp b/src/Main.cpp index 0c30dd60..599e58af 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -7,9 +7,12 @@ #include #include "WindowsWrapper.h" +#include "Draw.h" #include "Input.h" +#include "Game.h" #include "Config.h" #include "KeyControl.h" +#include "Triangle.h" char gModulePath[PATH_LENGTH]; char gDataPath[PATH_LENGTH]; @@ -18,6 +21,7 @@ int gJoystickButtonTable[8]; int gWindowWidth; int gWindowHeight; +int gWindowScale; SDL_Window *gWindow; SDL_Renderer *gRenderer; @@ -27,6 +31,12 @@ bool bFps; bool bActive; +#ifdef JAPANESE +const char *lpWindowName = "洞窟物語エンジン"; +#else +const char *lpWindowName = "Cave Story Engine ~ Doukutsu Monogatari Enjin"; +#endif + int main(int argc, char *argv[]) { //Get executable's path @@ -39,7 +49,7 @@ int main(int argc, char *argv[]) memcpy(&gDataPath[strlen(gDataPath)], "/data", 6); //Pixel didn't use a strcat //Initialize SDL - if (SDL_Init(SDL_INIT_VIDEO) >= 0) + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_EVENTS | SDL_INIT_GAMECONTROLLER) >= 0) { //Load configuration CONFIG config; @@ -134,7 +144,6 @@ int main(int argc, char *argv[]) RECT unused_rect = {0, 0, 320, 240}; //Get window dimensions and colour depth - int windowScale; int colourDepth = 16; switch (config.display_mode) @@ -144,15 +153,15 @@ int main(int argc, char *argv[]) //Set window dimensions if (config.display_mode == 1) { - gWindowWidth = 320; - gWindowHeight = 240; - windowScale = 1; + gWindowWidth = WINDOW_WIDTH; + gWindowHeight = WINDOW_HEIGHT; + gWindowScale = 1; } else { - gWindowWidth = 640; - gWindowHeight = 480; - windowScale = 2; + gWindowWidth = WINDOW_WIDTH * 2; + gWindowHeight = WINDOW_HEIGHT * 2; + gWindowScale = 2; } break; @@ -160,9 +169,9 @@ int main(int argc, char *argv[]) case 3: case 4: //Set window dimensions - gWindowWidth = 640; - gWindowHeight = 480; - windowScale = 2; + gWindowWidth = WINDOW_WIDTH * 2; + gWindowHeight = WINDOW_HEIGHT * 2; + gWindowScale = 2; //Set colour depth if (config.display_mode) @@ -180,17 +189,52 @@ int main(int argc, char *argv[]) break; } - #ifdef JAPANESE - const char *windowTitle = "洞窟物語エンジン"; - #else - const char *windowTitle = "Cave Story Engine ~ Doukutsu Monogatari Enjin"; - #endif - - gWindow = SDL_CreateWindow(windowTitle, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, gWindowWidth, gWindowHeight, bFullscreen ? SDL_WINDOW_FULLSCREEN : 0); + //Create window + gWindow = SDL_CreateWindow(lpWindowName, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, gWindowWidth, gWindowHeight, bFullscreen ? SDL_WINDOW_FULLSCREEN : 0); if (gWindow) { - StartDirectDraw(window, windowScale); + //Initialize rendering + StartDirectDraw(); + + //Set rects + RECT loading_rect = {0, 0, 64, 8}; + RECT clip_rect = {0, 0, gWindowWidth, gWindowHeight}; + + //Load the "LOADING" text + MakeSurface_File("Loading", SURFACE_ID_LOADING); + + //Draw loading screen + CortBox(&clip_rect, 0x000000); + PutBitmap3(&clip_rect, (WINDOW_WIDTH - 64) / 2, (WINDOW_HEIGHT - 8) / 2, &loading_rect, SURFACE_ID_LOADING); + + //Draw to screen + if (Flip_SystemTask()) + { + //Initialize sound + //InitDirectSound(); + + //Initialize joystick + if (config.bJoystick && InitDirectInput()) + { + ResetJoystickStatus(); + gbUseJoystick = true; + } + + //Initialize stuff + InitTextObject(); + InitTriangleTable(); + + //Run game code + Game(); + + //End stuff + //EndDirectSound(); + EndTextObject(); + EndDirectDraw(); + + SDL_Quit(); + } } } else @@ -232,6 +276,9 @@ void JoystickProc() if (GetJoystickStatus(&status)) { + //Clear held buttons + gKey &= (KEY_ESCAPE | KEY_F2 | KEY_F1); + //Set movement buttons if (status.bLeft) gKey |= gKeyLeft; @@ -242,10 +289,6 @@ void JoystickProc() if (status.bDown) gKey |= gKeyDown; - //Clear previously held buttons - for (int i = 0; i < 8; i++) - gKey &= ~gJoystickButtonTable[i]; - //Set held buttons for (int i = 0; i < 8; i++) { @@ -258,9 +301,13 @@ void JoystickProc() bool SystemTask() { //Handle window events - SDL_Event event; - while (SDL_PollEvent(&event)) + bool focusGained = true; + + while (SDL_PollEvent(nullptr) || !focusGained) { + SDL_Event event; + SDL_WaitEvent(&event); + switch (event.type) { case SDL_QUIT: @@ -271,10 +318,12 @@ bool SystemTask() switch (event.window.event) { case SDL_WINDOWEVENT_FOCUS_GAINED: + focusGained = true; ActiveWindow(); break; case SDL_WINDOWEVENT_FOCUS_LOST: + focusGained = false; InactiveWindow(); break; @@ -372,12 +421,12 @@ bool SystemTask() break; default: - return true; + break; } break; case SDL_KEYUP: - switch (event.key.keysym.scancode) + switch (event.key.keysym.sym) { case SDLK_ESCAPE: gKey &= ~KEY_ESCAPE; @@ -461,7 +510,7 @@ bool SystemTask() break; default: - return true; + break; } break; } diff --git a/src/Map.cpp b/src/Map.cpp new file mode 100644 index 00000000..a2340a9b --- /dev/null +++ b/src/Map.cpp @@ -0,0 +1,14 @@ +#include +#include + +#include "Map.h" + +#define PXM_BUFFER_SIZE 0x4B000 + +MAP_DATA gMap; + +bool InitMapData2() +{ + gMap.data = (uint8_t*)malloc(PXM_BUFFER_SIZE); + return true; +} diff --git a/src/Map.h b/src/Map.h new file mode 100644 index 00000000..46d53991 --- /dev/null +++ b/src/Map.h @@ -0,0 +1,12 @@ +#pragma once +#include + +struct MAP_DATA +{ + uint8_t *data; + uint8_t atrb[0x101]; //Why is this 257 bytes? + int16_t width; + int16_t length; +}; + +bool InitMapData2(); diff --git a/src/NpcTbl.cpp b/src/NpcTbl.cpp new file mode 100644 index 00000000..a912dafa --- /dev/null +++ b/src/NpcTbl.cpp @@ -0,0 +1,46 @@ +#include + +#include + +#include "NpcTbl.h" + +NPC_TABLE *gNpcTable; + +bool LoadNpcTable(const char *path) +{ + SDL_RWops *fp = SDL_RWFromFile(path, "rb"); + + if (fp == nullptr) + { + printf("LoadNpcTable failed\nSDL Error: %s\n", SDL_GetError()); + return false; + } + + const size_t tblSize = SDL_RWsize(fp); + + const int npcCount = tblSize / 0x18; + gNpcTable = (NPC_TABLE*)malloc(npcCount * sizeof(NPC_TABLE)); + + for (size_t i = 0; i < npcCount; i++) //bits + gNpcTable[i].bits = SDL_ReadLE16(fp); + for (size_t i = 0; i < npcCount; i++) //life + gNpcTable[i].life = SDL_ReadLE16(fp); + for (size_t i = 0; i < npcCount; i++) //surf + fp->read(fp, &gNpcTable[i].surf, 1, 1); + for (size_t i = 0; i < npcCount; i++) //destroy_voice + fp->read(fp, &gNpcTable[i].destroy_voice, 1, 1); + for (size_t i = 0; i < npcCount; i++) //hit_voice + fp->read(fp, &gNpcTable[i].hit_voice, 1, 1); + for (size_t i = 0; i < npcCount; i++) //size + fp->read(fp, &gNpcTable[i].size, 1, 1); + for (size_t i = 0; i < npcCount; i++) //exp + gNpcTable[i].exp = SDL_ReadLE32(fp); + for (size_t i = 0; i < npcCount; i++) //damage + gNpcTable[i].damage = SDL_ReadLE32(fp); + for (size_t i = 0; i < npcCount; i++) //hit + fp->read(fp, &gNpcTable[i].hit, 4, 1); + for (size_t i = 0; i < npcCount; i++) //view + fp->read(fp, &gNpcTable[i].view, 4, 1); + + return true; +} diff --git a/src/NpcTbl.h b/src/NpcTbl.h new file mode 100644 index 00000000..ab46dce5 --- /dev/null +++ b/src/NpcTbl.h @@ -0,0 +1,28 @@ +#pragma once +#include + +struct NPC_TBL_RECT +{ + uint8_t front; + uint8_t top; + uint8_t back; + uint8_t bottom; +}; + +struct NPC_TABLE +{ + uint16_t bits; + uint16_t life; + uint8_t surf; + uint8_t hit_voice; + uint8_t destroy_voice; + uint8_t size; + int32_t exp; + int32_t damage; + NPC_TBL_RECT hit; + NPC_TBL_RECT view; +}; + +extern NPC_TABLE *gNpcTable; + +bool LoadNpcTable(const char *path); diff --git a/src/Tags.h b/src/Tags.h new file mode 100644 index 00000000..7cc408c1 --- /dev/null +++ b/src/Tags.h @@ -0,0 +1,5 @@ +#pragma once +#include "CommonDefines.h" + +extern char gModulePath[PATH_LENGTH]; +extern char gDataPath[PATH_LENGTH]; diff --git a/src/TextScr.cpp b/src/TextScr.cpp new file mode 100644 index 00000000..d5e57650 --- /dev/null +++ b/src/TextScr.cpp @@ -0,0 +1,63 @@ +#include +#include + +#include "TextScr.h" +#include "Draw.h" +#include "Game.h" + +#define TSC_BUFFER_SIZE 0x5000 + +TEXT_SCRIPT gTS; + +int gNumberTextScript[4]; +char text[0x100]; + +const RECT gRect_line = {0, 0, 216, 16}; + +//Initialize and end tsc +bool InitTextScript2() +{ + //Clear flags + gTS.mode = 0; + g_GameFlags &= ~0x04; + + //Create line surfaces + for (int i = 0; i < 4; i++) + MakeSurface_Generic(gRect_line.right, gRect_line.bottom, i + 30); + + //Clear text + memset(text, 0, sizeof(text)); + + //Allocate script buffer + gTS.data = (char*)malloc(TSC_BUFFER_SIZE); + return gTS.data != nullptr; +} + +void EndTextScript() +{ + //Free TSC buffer + free(gTS.data); + + //Release buffers + ReleaseSurface(SURFACE_ID_TEXT_BOX); + for (int i = 0; i < 4; i++) + ReleaseSurface(i + 30); +} + +//Decrypt .tsc +void EncryptionBinaryData2(uint8_t *pData, int size) +{ + int val1; + + int half = size / 2; + if (pData[half]) + val1 = -pData[half]; + else + val1 = -7; + + for (int i = 0; i < size; i++) + { + if ( i != half ) + pData[i] += val1; + } +} diff --git a/src/TextScr.h b/src/TextScr.h new file mode 100644 index 00000000..a4023bd7 --- /dev/null +++ b/src/TextScr.h @@ -0,0 +1,59 @@ +#pragma once +#include +#include "WindowsWrapper.h" +#include "CommonDefines.h" + +struct TEXT_SCRIPT +{ + //Path (reload when exit teleporter menu/inventory) + char path[PATH_LENGTH]; + + //Script buffer + int size; + char *data; + + //Mode (ex. NOD, WAI) + char mode; + + //Flags + char flags; + + //Current positions (read position in buffer, x position in line) + int p_read; + int p_write; + + //Current line to write to + int line; + + //Line y positions + int ypos_line[4]; + + //Event stuff + int wait; + int wait_next; + int next_event; + + //Yes/no selected + char select; + + //Current face + int face; + int face_x; + + //Current item + int item; + int item_y; + + //Text rect + RECT rcText; + + //??? + int offsetY; + + //NOD cursor blink + uint8_t wait_beam; +}; + +bool InitTextScript2(); +void EndTextScript(); +void EncryptionBinaryData2(uint8_t *pData, int size); diff --git a/src/Triangle.cpp b/src/Triangle.cpp new file mode 100644 index 00000000..8a78bd70 --- /dev/null +++ b/src/Triangle.cpp @@ -0,0 +1,100 @@ +#include +#include + +int gSin[0x100]; +int16_t gTan[0x21]; + +void InitTriangleTable() +{ + //Sine + for (int i = 0; i < 0x100; ++i ) + { + float v0 = (float)i * 6.2831998 / 256.0; + gSin[i] = (int)(sinf(v0) * 512.0); + } + + //Tangent + for (int ia = 0; ia < 0x21; ++ia ) + { + float a = (float)ia * 6.2831855 / 256.0; + float v2 = sinf(a); + float b = v2 / cosf(a); + gTan[ia] = (int16_t)(b * 8192.0); + } +} + +int GetSin(uint8_t deg) +{ + return gSin[deg]; +} + +int GetCos(uint8_t deg) +{ + return gSin[(uint8_t)(deg + 0x40)]; +} + +int GetArktan(int x, int y) +{ + int xa = -x; + int ya = -y; + uint8_t a = 0; + + if (xa <= 0) + { + if (ya <= 0) + { + if (-xa <= -ya) + { + while (gTan[a] < (int16_t)(-0x2000 * xa / -ya)) + ++a; + a = -0x40 - a; + } + else + { + while (gTan[a] < (int16_t)(-0x2000 * ya / -xa)) + ++a; + a += -0x80; + } + } + else if (-xa <= ya) + { + while (gTan[a] < (int16_t)(-0x2000 * xa / ya)) + ++a; + a += 0x40; + } + else + { + while (gTan[a] < (int16_t)((ya << 13) / -xa)) + ++a; + a = -0x80 - a; + } + } + else if (ya <= 0) + { + if (-ya >= xa) + { + while (gTan[a] < (int16_t)((xa << 13) / -ya)) + ++a; + a -= 0x40; + } + else + { + while (gTan[a] < (int16_t)(-0x2000 * ya / xa)) + ++a; + a = -a; + } + } + else if (xa <= ya) + { + while (gTan[a] < (int16_t)((xa << 13) / ya)) + ++a; + a = 0x40 - a; + } + else + { + while (gTan[a] < (int16_t)((ya << 13) / xa)) + ++a; + } + + return a; +} \ No newline at end of file diff --git a/src/Triangle.h b/src/Triangle.h new file mode 100644 index 00000000..41311fe5 --- /dev/null +++ b/src/Triangle.h @@ -0,0 +1,7 @@ +#pragma once +#include + +void InitTriangleTable(); +int GetSin(uint8_t deg); +int GetCos(uint8_t deg); +int GetArktan(int x, int y); diff --git a/src/Types.h b/src/Types.h index 2ba246ce..77add6be 100644 --- a/src/Types.h +++ b/src/Types.h @@ -1,5 +1,2 @@ #pragma once -struct RECT -{ - int left, right, top, bottom; -}; +//This was originally some sort of POSIX standard thing? leftover from the linux port diff --git a/src/WindowsWrapper.h b/src/WindowsWrapper.h index fa8d99ea..b59667c2 100644 --- a/src/WindowsWrapper.h +++ b/src/WindowsWrapper.h @@ -1,6 +1,7 @@ #pragma once -#include "CommonDefines.h" -#include "Draw.h" +struct RECT +{ + int left, top, right, bottom; +}; -extern char gModulePath[PATH_LENGTH]; -extern char gDataPath[PATH_LENGTH]; +bool SystemTask();