From c953230237d3ac09b9e3fbfaf19b204f0cc568f1 Mon Sep 17 00:00:00 2001
From: Sergeanur <s.anureev@yandex.ua>
Date: Sat, 28 Mar 2020 04:53:42 +0200
Subject: [PATCH] Set Xinput version to 9.1.0 + vibration set

---
 src/core/Pad.cpp | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/core/Pad.cpp b/src/core/Pad.cpp
index 9a911aa4..87f45b9f 100644
--- a/src/core/Pad.cpp
+++ b/src/core/Pad.cpp
@@ -7,7 +7,7 @@
 #include "common.h"
 #ifdef XINPUT
 #include <Xinput.h>
-#pragma comment( lib, "Xinput.lib" )
+#pragma comment( lib, "Xinput9_1_0.lib" )
 #endif
 #include "patcher.h"
 #include "Pad.h"
@@ -590,6 +590,24 @@ void CPad::AffectFromXinput(uint32 pad)
 			PCTempJoyState.RightStickX = (int32)(rx * 128.0f);
 			PCTempJoyState.RightStickY = (int32)(ry * 128.0f);
 		}
+
+		XINPUT_VIBRATION VibrationState;
+
+		memset(&VibrationState, 0, sizeof(XINPUT_VIBRATION));
+
+		uint16 iLeftMotor = (uint16)((float)ShakeFreq / 255.0f * (float)0xffff);
+		uint16 iRightMotor = (uint16)((float)ShakeFreq / 255.0f * (float)0xffff);
+		
+		if (ShakeDur < CTimer::GetTimeStepInMilliseconds())
+			ShakeDur = 0;
+		else
+			ShakeDur -= CTimer::GetTimeStepInMilliseconds();
+		if (ShakeDur == 0) ShakeFreq = 0;
+
+		VibrationState.wLeftMotorSpeed = iLeftMotor;
+		VibrationState.wRightMotorSpeed = iRightMotor;
+
+		XInputSetState(pad, &VibrationState);
 	}
 }
 #endif
@@ -617,6 +635,7 @@ void CPad::UpdatePads(void)
 	if ( bUpdate )
 	{
 		GetPad(0)->Update(0);
+		GetPad(1)->Update(0);
 	}
 
 #if defined(MASTER) && !defined(XINPUT)