Skip to content

Commit

Permalink
Improvements: changing motion shaking buttons, disabling and enabling…
Browse files Browse the repository at this point in the history
… button centering and fixes
  • Loading branch information
r57zone committed Nov 20, 2022
1 parent a42f166 commit 31de2f6
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 55 deletions.
10 changes: 5 additions & 5 deletions README.FR.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ Pour le plein-écran, Playstation Plus utilise la combinaison de touches `ALT` +

DualShock 4 | Souris/clavier
------------ | -------------
L1 | CTRL
R1 | Alt
L1 | Alt
R1 | Control
L2 | Clic droit
R2 | Clic gauche
SHARE | F12
Expand All @@ -94,9 +94,9 @@ HAUT | 1
GAUCHE | 2
DROITE | 3
BAS | 4
TRIANGLE | Q
CARRÉ | E
ROND | R
TRIANGLE | E
CARRÉ | R
ROND | Q
CROIX | Espace
L3 (appui sur le joystick) | Shift
R3 (appui sur le joystick) | Bouton du milieu souris
Expand Down
10 changes: 5 additions & 5 deletions README.RU.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ Uncharted 3: Иллюзии Дрейка (2011) | Кнопка "Share" (F12) д

DualShock 4 | Клавиатура и мышь
------------ | -------------
L1 | Control
R2 | Alt
L1 | Alt
R1 | Control
L2 | Правая кнопка мыши
R2 | Левая кнопка мыши
SHARE | F12
Expand All @@ -92,9 +92,9 @@ DPAD UP (стрелка вверх) | 1
DPAD LEFT (стрелка влево) | 2
DPAD RIGHT (стрелка вправо) | 3
DPAD DOWN (стрелка вниз) | 4
TRIANGLE (треугольник) | Q
SQUARE (квадрат) | E
CIRCLE (круг) | R
TRIANGLE (треугольник) | E
SQUARE (квадрат) | R
CIRCLE (круг) | Q
CROSS (крестик) | Space
L3 (нажатие стика) | Shift
R3 (нажатие стика) | Средняя кнопка мыши
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ For full-screen Playstation Plus use the keys "ALT" + "F10", the upper black bar

DualShock 4 | Keyboard and mouse
------------ | -------------
L1 | Control
R1 | Alt
L1 | Alt
R1 | Control
L2 | Right mouse button
R2 | Left mouse button
SHARE | F12
Expand All @@ -94,9 +94,9 @@ DPAD UP | 1
DPAD LEFT | 2
DPAD RIGHT | 3
DPAD DOWN | 4
TRIANGLE | Q
SQUARE | E
CIRCLE | R
TRIANGLE | E
SQUARE | R
CIRCLE | Q
CROSS | Space
L3 (pressing the stick) | Shift
R3 (pressing the stick) | Middle mouse button
Expand Down
86 changes: 48 additions & 38 deletions Source/DS4Emulator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ SHORT DeadZoneXboxAxis(SHORT StickAxis, float Percent)

int main(int argc, char **argv)
{
SetConsoleTitle("DS4Emulator 1.8");
SetConsoleTitle("DS4Emulator 1.8.1");

CIniReader IniFile("Config.ini"); // Config

Expand Down Expand Up @@ -195,8 +195,9 @@ int main(int argc, char **argv)
int EmulationMode = KBMode;

// Config parameters
int KEY_ID_EXIT = KeyNameToKeyCode(IniFile.ReadString("Main", "ExitBtn", "~")); // "~" by default for RU, US and not for UK
int KEY_ID_STOP_CENTERING = KeyNameToKeyCode(IniFile.ReadString("KeyboardMouse", "StopCenteringKey", "C"));
std::string KEY_ID_STOP_CENTERING_NAME = IniFile.ReadString("KeyboardMouse", "StopCenteringKey", "C");
int KEY_ID_STOP_CENTERING = KeyNameToKeyCode(KEY_ID_STOP_CENTERING_NAME);
bool CenteingEnable = true;

bool InvertX = IniFile.ReadBoolean("Main", "InvertX", false);
bool InvertY = IniFile.ReadBoolean("Main", "InvertY", false);
Expand All @@ -207,6 +208,11 @@ int main(int argc, char **argv)
bool TouchPadPressedWhenSwiping = IniFile.ReadBoolean("Xbox", "TouchPadPressedWhenSwiping", true);
bool EnableXboxButton = IniFile.ReadBoolean("Xbox", "EnableXboxButton", true);

std::string KEY_ID_XBOX_SHAKING_1_NAME = IniFile.ReadString("Xbox", "MotionShakingKey1", "BACK");
int KEY_ID_XBOX_SHAKING_1 = XboxKeyNameToXboxKeyCode(KEY_ID_XBOX_SHAKING_1_NAME);
std::string KEY_ID_XBOX_SHAKING_2_NAME = IniFile.ReadString("Xbox", "MotionShakingKey2", "RIGHT-SHOULDER");
int KEY_ID_XBOX_SHAKING_2 = XboxKeyNameToXboxKeyCode(KEY_ID_XBOX_SHAKING_2_NAME);

float DeadZoneLeftStickX = IniFile.ReadFloat("Xbox", "DeadZoneLeftStickX", 0);
float DeadZoneLeftStickY = IniFile.ReadFloat("Xbox", "DeadZoneLeftStickY", 0);
float DeadZoneRightStickX = IniFile.ReadFloat("Xbox", "DeadZoneRightStickX", 0);
Expand All @@ -227,23 +233,23 @@ int main(int argc, char **argv)
mouseSensetiveY = IniFile.ReadFloat("KeyboardMouse", "SensY", 15);
int DeadZoneDS4 = IniFile.ReadInteger("KeyboardMouse", "DeadZone", 0); // 25, makes mouse movement smoother when moving slowly (12->25)

int KEY_ID_LEFT_STICK_UP = KeyNameToKeyCode(IniFile.ReadString("Keys", "LS_UP", "W"));
int KEY_ID_LEFT_STICK_LEFT = KeyNameToKeyCode(IniFile.ReadString("Keys", "LS_LEFT", "A"));
int KEY_ID_LEFT_STICK_RIGHT = KeyNameToKeyCode(IniFile.ReadString("Keys", "LS_RIGHT", "D"));
int KEY_ID_LEFT_STICK_DOWN = KeyNameToKeyCode(IniFile.ReadString("Keys", "LS_DOWN", "S"));
int KEY_ID_LEFT_STICK_UP = KeyNameToKeyCode(IniFile.ReadString("Keys", "LEFT-STICK-UP", "W"));
int KEY_ID_LEFT_STICK_LEFT = KeyNameToKeyCode(IniFile.ReadString("Keys", "LEFT-STICK-LEFT", "A"));
int KEY_ID_LEFT_STICK_RIGHT = KeyNameToKeyCode(IniFile.ReadString("Keys", "LEFT-STICK-RIGHT", "D"));
int KEY_ID_LEFT_STICK_DOWN = KeyNameToKeyCode(IniFile.ReadString("Keys", "LEFT-STICK-DOWN", "S"));
int KEY_ID_LEFT_TRIGGER = KeyNameToKeyCode(IniFile.ReadString("Keys", "L2", "MOUSE-RIGHT-BTN"));
int KEY_ID_RIGHT_TRIGGER = KeyNameToKeyCode(IniFile.ReadString("Keys", "R2", "MOUSE-LEFT-BTN"));
int KEY_ID_LEFT_SHOULDER = KeyNameToKeyCode(IniFile.ReadString("Keys", "L1", "CTRL"));
int KEY_ID_RIGHT_SHOULDER = KeyNameToKeyCode(IniFile.ReadString("Keys", "R1", "ALT"));
int KEY_ID_DPAD_UP = KeyNameToKeyCode(IniFile.ReadString("Keys", "DPAD_UP", "1"));
int KEY_ID_DPAD_LEFT = KeyNameToKeyCode(IniFile.ReadString("Keys", "DPAD_LEFT", "2"));
int KEY_ID_DPAD_RIGHT = KeyNameToKeyCode(IniFile.ReadString("Keys", "DPAD_RIGHT", "3"));
int KEY_ID_DPAD_DOWN = KeyNameToKeyCode(IniFile.ReadString("Keys", "DPAD_DOWN", "4"));
int KEY_ID_LEFT_SHOULDER = KeyNameToKeyCode(IniFile.ReadString("Keys", "L1", "ALT"));
int KEY_ID_RIGHT_SHOULDER = KeyNameToKeyCode(IniFile.ReadString("Keys", "R1", "CTRL"));
int KEY_ID_DPAD_UP = KeyNameToKeyCode(IniFile.ReadString("Keys", "DPAD-UP", "1"));
int KEY_ID_DPAD_LEFT = KeyNameToKeyCode(IniFile.ReadString("Keys", "DPAD-LEFT", "2"));
int KEY_ID_DPAD_RIGHT = KeyNameToKeyCode(IniFile.ReadString("Keys", "DPAD-RIGHT", "3"));
int KEY_ID_DPAD_DOWN = KeyNameToKeyCode(IniFile.ReadString("Keys", "DPAD-DOWN", "4"));
int KEY_ID_LEFT_THUMB = KeyNameToKeyCode(IniFile.ReadString("Keys", "L3", "SHIFT"));
int KEY_ID_RIGHT_THUMB = KeyNameToKeyCode(IniFile.ReadString("Keys", "R3", "MOUSE-MIDDLE-BTN"));
int KEY_ID_TRIANGLE = KeyNameToKeyCode(IniFile.ReadString("Keys", "TRIANGLE", "Q"));
int KEY_ID_SQUARE = KeyNameToKeyCode(IniFile.ReadString("Keys", "SQUARE", "E"));
int KEY_ID_CIRCLE = KeyNameToKeyCode(IniFile.ReadString("Keys", "CIRCLE", "R"));
int KEY_ID_TRIANGLE = KeyNameToKeyCode(IniFile.ReadString("Keys", "TRIANGLE", "E"));
int KEY_ID_SQUARE = KeyNameToKeyCode(IniFile.ReadString("Keys", "SQUARE", "R"));
int KEY_ID_CIRCLE = KeyNameToKeyCode(IniFile.ReadString("Keys", "CIRCLE", "Q"));
int KEY_ID_CROSS = KeyNameToKeyCode(IniFile.ReadString("Keys", "CROSS", "SPACE"));
int KEY_ID_SHARE = KeyNameToKeyCode(IniFile.ReadString("Keys", "SHARE", "F12"));
int KEY_ID_TOUCHPAD = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD", "ENTER"));
Expand All @@ -252,16 +258,16 @@ int main(int argc, char **argv)

int KEY_ID_SHAKING = KeyNameToKeyCode(IniFile.ReadString("Keys", "SHAKING", "T"));

int KEY_ID_TOUCHPAD_SWIPE_UP = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD_SWIPE_UP", "7"));
int KEY_ID_TOUCHPAD_SWIPE_DOWN = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD_SWIPE_DOWN", "8"));
int KEY_ID_TOUCHPAD_SWIPE_LEFT = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD_SWIPE_LEFT", "9"));
int KEY_ID_TOUCHPAD_SWIPE_RIGHT = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD_SWIPE_RIGHT", "0"));
int KEY_ID_TOUCHPAD_SWIPE_UP = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD-SWIPE-UP", "7"));
int KEY_ID_TOUCHPAD_SWIPE_DOWN = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD-SWIPE-DOWN", "8"));
int KEY_ID_TOUCHPAD_SWIPE_LEFT = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD-SWIPE-LEFT", "9"));
int KEY_ID_TOUCHPAD_SWIPE_RIGHT = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD-SWIPE-RIGHT", "0"));

int KEY_ID_TOUCHPAD_UP = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD_UP", "U"));
int KEY_ID_TOUCHPAD_DOWN = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD_DOWN", "N"));
int KEY_ID_TOUCHPAD_LEFT = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD_LEFT", "H"));
int KEY_ID_TOUCHPAD_RIGHT = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD_RIGHT", "K"));
int KEY_ID_TOUCHPAD_CENTER = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD_CENTER", "J"));
int KEY_ID_TOUCHPAD_UP = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD-UP", "U"));
int KEY_ID_TOUCHPAD_DOWN = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD-DOWN", "N"));
int KEY_ID_TOUCHPAD_LEFT = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD-LEFT", "H"));
int KEY_ID_TOUCHPAD_RIGHT = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD-RIGHT", "K"));
int KEY_ID_TOUCHPAD_CENTER = KeyNameToKeyCode(IniFile.ReadString("Keys", "TOUCHPAD-CENTER", "J"));

const auto client = vigem_alloc();
auto ret = vigem_connect(client);
Expand Down Expand Up @@ -300,22 +306,24 @@ int main(int argc, char **argv)
}

// Write current mode
if (EmulationMode == XboxMode)
if (EmulationMode == XboxMode) {
printf("\n Emulation with Xbox controller.\n");
else {
printf_s(" Touchpad press: \"BACK\".\n Touchpad movement: \"BACK\" + \"RIGHT-STICK\".\n Motion shaking: \"%s\" + \"%s\".\n", KEY_ID_XBOX_SHAKING_1_NAME.c_str(), KEY_ID_XBOX_SHAKING_2_NAME.c_str());

} else {
printf("\r\n Emulation with keyboard and mouse.\n");
if (ActivateInAnyWindow == false)
printf(" Activate in any window is disabled, so the emulated gamepad work only in \"PS Plus\" and \"PS4 Remote Play\".\n");
printf(" Hold down \"C\" to for cursor movement.\n");
printf_s(" Enable or disable cursor movement on the \"%s\" button (right stick emulation).\n", KEY_ID_STOP_CENTERING_NAME.c_str());
}
if (EmulationMode == KBMode) {
printf(" Press \"ALT\" + \"F10\" to switch \"PS Plus\" to full-screen mode or return to normal.\n");
if (CursorHidden)
printf(" The cursor is hidden. To display the cursor, press \"ALT\" + \"Escape\" or \"exit key\".\n");
printf(" The cursor is hidden. To display the cursor, press \"ALT\" + \"Escape\".\n");
else
printf(" The cursor is not hidden. To hide the cursor, press \"ALT\" + \"F2\".\n");
}
printf(" Press \"ALT\" + \"Escape\" or \"exit key\" to exit.\n");
printf(" Press \"ALT\" + \"Escape\" to exit.\n");

DS4_TOUCH BuffPreviousTouch[2] = { 0, 0 };
BuffPreviousTouch[0].bIsUpTrackingNum1 = 0x80;
Expand All @@ -324,7 +332,7 @@ int main(int argc, char **argv)
bool AllowIncTouchIndex;
bool DeadZoneMode = false;

while (!((GetAsyncKeyState(KEY_ID_EXIT) & 0x8000) || ((GetAsyncKeyState(VK_LMENU) & 0x8000) && (GetAsyncKeyState(VK_ESCAPE) & 0x8000)) )) // "~" by default
while ( !( (GetAsyncKeyState(VK_LMENU) & 0x8000 && GetAsyncKeyState(VK_ESCAPE) & 0x8000) ) )
{
DS4_REPORT_INIT_EX(&report);

Expand Down Expand Up @@ -356,7 +364,7 @@ int main(int argc, char **argv)
if (DeadZoneMode == false) {
system("cls");
printf("\n Emulation with Xbox controller.\n");
printf(" Press \"ALT\" + \"Escape\" or \"exit key\" to exit.\n");
printf(" Press \"ALT\" + \"Escape\" to exit.\n");
}
SkipPollCount = SkipPollTimeOut;
}
Expand Down Expand Up @@ -412,10 +420,11 @@ int main(int argc, char **argv)
if (EnableXboxButton && myPState.Gamepad.wButtons & XINPUT_GAMEPAD_GUIDE) report.bSpecial |= DS4_SPECIAL_BUTTON_PS;

// Motion shaking
if (myPState.Gamepad.wButtons & XINPUT_GAMEPAD_BACK && myPState.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER) {
myPState.Gamepad.wButtons &= ~XINPUT_GAMEPAD_BACK; myPState.Gamepad.wButtons &= ~XINPUT_GAMEPAD_RIGHT_SHOULDER;
if (myPState.Gamepad.wButtons & KEY_ID_XBOX_SHAKING_1 && myPState.Gamepad.wButtons & KEY_ID_XBOX_SHAKING_2) {
myPState.Gamepad.wButtons &= ~KEY_ID_XBOX_SHAKING_1; myPState.Gamepad.wButtons &= ~KEY_ID_XBOX_SHAKING_2;
MotionShaking = true;
} else MotionShaking = false;
} else
MotionShaking = false;

// Swap share and touchpad
if (SwapShareTouchPad == false) {
Expand Down Expand Up @@ -490,7 +499,7 @@ int main(int argc, char **argv)

// Touchpad swipes
if (report.bSpecial & DS4_SPECIAL_BUTTON_TOUCHPAD) {
if (!TouchPadPressedWhenSwiping && (report.bThumbRX != 127 || report.bThumbRY != 129) ) {
if (!TouchPadPressedWhenSwiping && (report.bThumbRX != 127 || report.bThumbRY != 129)) {
report.bSpecial &= ~DS4_SPECIAL_BUTTON_TOUCHPAD;
if (myPState.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) { report.wButtons &= ~DS4_BUTTON_THUMB_RIGHT; report.bSpecial |= DS4_SPECIAL_BUTTON_TOUCHPAD; }
}
Expand Down Expand Up @@ -534,12 +543,13 @@ int main(int argc, char **argv)

if (CursorHidden == false && (GetAsyncKeyState(VK_LMENU) & 0x8000) && (GetAsyncKeyState(VK_F2) & 0x8000) && SkipPollCount == 0) {
SetSystemCursor(CursorEmpty, OCR_NORMAL); CursorHidden = true;
printf(" The cursor is hidden. To display the cursor, press \"ALT\" + \"Escape\" or \"exit key\".\n");
printf(" The cursor is hidden. To display the cursor, press \"ALT\" + \"Escape\".\n");
SkipPollCount = SkipPollTimeOut;
}

if (ActivateInAnyWindow || PSNowFound || PSRemotePlayFound) {
if ((GetAsyncKeyState(KEY_ID_STOP_CENTERING) & 0x8000) == 0) GetMouseState();
if (GetAsyncKeyState(KEY_ID_STOP_CENTERING) & 0x8000 && SkipPollCount == 0) { CenteingEnable = !CenteingEnable; SkipPollCount = SkipPollTimeOut;}
if (CenteingEnable) GetMouseState();

if (InvertX)
DeltaMouseX = DeltaMouseX * -1;
Expand Down
29 changes: 27 additions & 2 deletions Source/DS4Emulator.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#define XINPUT_GAMEPAD_A 0x1000
#define XINPUT_GAMEPAD_B 0x2000
#define XINPUT_GAMEPAD_X 0x4000
#define XINPUT_GAMEPAD_Y 0x8000
#define XINPUT_GAMEPAD_Y 0x8000

#define BATTERY_TYPE_DISCONNECTED 0x00

Expand Down Expand Up @@ -101,7 +101,7 @@ int KeyNameToKeyCode(std::string KeyName) {
else if (KeyName == "F11") return VK_F11;
else if (KeyName == "F12") return VK_F12;

else if (KeyName == "~") return 192;
else if (KeyName == "~") return 192; // "~" by default for RU, US and not for UK
else if (KeyName == "1") return '1';
else if (KeyName == "2") return '2';
else if (KeyName == "3") return '3';
Expand Down Expand Up @@ -193,5 +193,30 @@ int KeyNameToKeyCode(std::string KeyName) {
else if (KeyName == "NUMPAD-PLUS") return VK_ADD;
else if (KeyName == "NUMPAD-DEL") return VK_DECIMAL;

else return 0;
}

int XboxKeyNameToXboxKeyCode(std::string KeyName) {
std::transform(KeyName.begin(), KeyName.end(), KeyName.begin(), ::toupper);

if (KeyName == "NONE") return 0;

else if (KeyName == "DPAD-UP") return XINPUT_GAMEPAD_DPAD_UP;
else if (KeyName == "DPAD-DOWN") return XINPUT_GAMEPAD_DPAD_DOWN;
else if (KeyName == "DPAD-LEFT") return XINPUT_GAMEPAD_DPAD_LEFT;
else if (KeyName == "DPAD-RIGHT") return XINPUT_GAMEPAD_DPAD_RIGHT;

else if (KeyName == "XBOX") return XINPUT_GAMEPAD_GUIDE;
else if (KeyName == "BACK") return XINPUT_GAMEPAD_BACK;
else if (KeyName == "START") return XINPUT_GAMEPAD_START;
else if (KeyName == "LEFT-STICK") return XINPUT_GAMEPAD_LEFT_THUMB;
else if (KeyName == "RIGHT-STICK") return XINPUT_GAMEPAD_RIGHT_THUMB;
else if (KeyName == "LEFT-SHOULDER") return XINPUT_GAMEPAD_LEFT_SHOULDER;
else if (KeyName == "RIGHT-SHOULDER") return XINPUT_GAMEPAD_RIGHT_SHOULDER;
else if (KeyName == "A") return XINPUT_GAMEPAD_A;
else if (KeyName == "B") return XINPUT_GAMEPAD_B;
else if (KeyName == "X") return XINPUT_GAMEPAD_X;
else if (KeyName == "Y") return XINPUT_GAMEPAD_Y;

else return 0;
}

0 comments on commit 31de2f6

Please sign in to comment.