diff --git a/plugins/LilyPad/Config.cpp b/plugins/LilyPad/Config.cpp
index fd50be56cc..7b6f557632 100644
--- a/plugins/LilyPad/Config.cpp
+++ b/plugins/LilyPad/Config.cpp
@@ -20,6 +20,8 @@
GeneralConfig config;
+u8 ps2e = 0;
+
HWND hWndProp = 0;
int selected = 0;
@@ -213,31 +215,6 @@ wchar_t *GetCommandStringW(u8 command, int pad) {
return L"";
}
-inline int GetLongType(int type) {
- const static int types[] = {PSHBTN,TGLBTN,ABSAXIS,RELAXIS,POV};
- return types[type];
-}
-
-inline int GetShortType(int type) {
- if (type & POV) {
- return 4;
- }
- else if (type & ABSAXIS) {
- return 2;
- }
- else if (type & RELAXIS) {
- return 3;
- }
- else if (type & PSHBTN) {
- return 0;
- }
- else if (type & TGLBTN) {
- return 1;
- }
- return 0;
-}
-
-
inline void GetSettingsFileName(wchar_t *out) {
wcscpy(out, L"inis\\LilyPad.ini");
}
@@ -721,6 +698,9 @@ int LoadSettings(int force, wchar_t *file) {
}
config.GSThreadUpdates = GetPrivateProfileBool(L"General Settings", L"GS Thread Updates", 1, file);
+
+ if (!ps2e) config.GSThreadUpdates = 0;
+
config.escapeFullscreenHack = GetPrivateProfileBool(L"General Settings", L"Escape Fullscreen Hack", 1, file);
config.disableScreenSaver = GetPrivateProfileBool(L"General Settings", L"Disable Screen Saver", 0, file);
@@ -1519,6 +1499,9 @@ INT_PTR CALLBACK GeneralDialogProc(HWND hWnd, unsigned int msg, WPARAM wParam, L
CheckDlgButton(hWnd, IDC_MOUSE_UNFOCUS, BST_CHECKED * config.mouseUnfocus);
CheckDlgButton(hWnd, IDC_GS_THREAD_INPUT, BST_CHECKED * config.GSThreadUpdates);
+ if (!ps2e) {
+ EnableWindow(GetDlgItem(hWnd, IDC_GS_THREAD_INPUT), 0);
+ }
CheckDlgButton(hWnd, IDC_ESCAPE_FULLSCREEN_HACK, BST_CHECKED * config.escapeFullscreenHack);
CheckDlgButton(hWnd, IDC_DISABLE_SCREENSAVER, BST_CHECKED * config.disableScreenSaver);
diff --git a/plugins/LilyPad/Config.h b/plugins/LilyPad/Config.h
index 1cc0cb21fd..24ded457f7 100644
--- a/plugins/LilyPad/Config.h
+++ b/plugins/LilyPad/Config.h
@@ -4,6 +4,8 @@
#include "InputManager.h"
#include "PS2Etypes.h"
+extern u8 ps2e;
+
struct GeneralConfig {
public:
u8 disablePad[2];
@@ -44,10 +46,6 @@ extern GeneralConfig config;
void UnloadConfigs();
-/*
-inline int GetNeededInput(HWND hWnd, int configMode) {
- return GetInput(hWnd, flags, configMode);
-}*/
void AddIgnore(LPARAM k);
int LoadSettings(int force = 0, wchar_t *file = 0);
diff --git a/plugins/LilyPad/Global.h b/plugins/LilyPad/Global.h
index 3c670d7bf0..c28857a6ab 100644
--- a/plugins/LilyPad/Global.h
+++ b/plugins/LilyPad/Global.h
@@ -3,10 +3,6 @@
// dll size by over 100k while avoiding any dependencies on updated CRT dlls.
#pragma once
-#ifndef _DEBUG
-#define NO_CRT
-#endif
-
#ifdef NO_CRT
#define _CRT_ALLOCATION_DEFINED
#endif
diff --git a/plugins/LilyPad/LilyPad.cpp b/plugins/LilyPad/LilyPad.cpp
index 28c783b543..d07f88f2fc 100644
--- a/plugins/LilyPad/LilyPad.cpp
+++ b/plugins/LilyPad/LilyPad.cpp
@@ -126,11 +126,11 @@ public:
u8 initialized;
} pads[2];
+// Force value to be from 0 to 255.
u8 Cap (int i) {
- // If negative, zero out i.
- i &= ~(i>>(sizeof(i)*8-1));
- // if i-255 is negative, return i. Else return 255. Slight overkill.
- return (u8) (255 + ((i-255) & ((i-255) >> (sizeof(int)*8-1))));
+ if (i<0) return 0;
+ if (i>255) return 255;
+ return (u8) i;
}
@@ -209,6 +209,7 @@ void AddForce(ButtonSum *sum, u8 cmd, int delta = 255) {
if (cmd<0x14) {
sum->buttons[cmd-0x10] += delta;
}
+ // D-pad. Command numbering is based on ordering of digital values.
else if (cmd < 0x18) {
if (cmd == 0x14) {
sum->sticks[0].vert -= delta;
@@ -226,6 +227,7 @@ void AddForce(ButtonSum *sum, u8 cmd, int delta = 255) {
else if (cmd < 0x20) {
sum->buttons[cmd-0x10-4] += delta;
}
+ // Left stick.
else if (cmd < 0x24) {
if (cmd == 32) {
sum->sticks[2].vert -= delta;
@@ -240,6 +242,7 @@ void AddForce(ButtonSum *sum, u8 cmd, int delta = 255) {
sum->sticks[2].horiz -= delta;
}
}
+ // Right stick.
else if (cmd < 0x28) {
if (cmd == 36) {
sum->sticks[1].vert -= delta;
@@ -267,15 +270,16 @@ void ProcessButtonBinding(Binding *b, ButtonSum *sum, int value) {
}
}
+// Restricts d-pad/analog stick values to be from -255 to 255 and button values to be from 0 to 255.
+// With D-pad in DS2 native mode, the negative and positive ranges are both independently from 0 to 255,
+// which is why I use 9 bits of all sticks. For left and right sticks, I have to remove a bit before sending.
void CapSum(ButtonSum *sum) {
int i;
for (i=0; i<3; i++) {
- int a1 = abs(sum->sticks[i].horiz);
- int a2 = abs(sum->sticks[i].vert);
- if (a1 < a2) a1 = a2;
- if (a1 > 255) {
- sum->sticks[i].horiz = sum->sticks[i].horiz * 255 / a1;
- sum->sticks[i].vert = sum->sticks[i].vert * 255 / a1;
+ int div = max(abs(sum->sticks[i].horiz), abs(sum->sticks[i].vert));
+ if (div > 255) {
+ sum->sticks[i].horiz = sum->sticks[i].horiz * 255 / div;
+ sum->sticks[i].vert = sum->sticks[i].vert * 255 / div;
}
}
for (i=0; i<12; i++) {
@@ -297,12 +301,6 @@ int lockStateChanged[2] = {0,0};
extern HWND hWndStealing;
-void Update(int pad);
-
-void CALLBACK PADupdate(int pad) {
- if (config.GSThreadUpdates) Update(pad);
-}
-
void Update(int pad) {
if ((unsigned int)pad > 2) return;
if (summed[pad] > 0) {
@@ -473,6 +471,10 @@ void Update(int pad) {
summed[pad]--;
}
+void CALLBACK PADupdate(int pad) {
+ if (config.GSThreadUpdates) Update(pad);
+}
+
inline void SetVibrate(Pad *pad, int motor, u8 val) {
if (val | pad->vibrateVal[motor]) {
dm->SetEffect(pad - pads, motor, val);
@@ -481,18 +483,20 @@ inline void SetVibrate(Pad *pad, int motor, u8 val) {
}
u32 CALLBACK PS2EgetLibType(void) {
+ ps2e = 1;
return PS2E_LT_PAD;
}
#define VERSION ((0<<8) | 9 | (9<<24))
u32 CALLBACK PS2EgetLibVersion2(u32 type) {
+ ps2e = 1;
if (type == PS2E_LT_PAD)
return (PS2E_PAD_VERSION<<16) | VERSION;
return 0;
}
-char* CALLBACK PS2EgetLibName(void) {
+char* CALLBACK PSEgetLibName() {
#ifdef _DEBUG
return "LilyPad Debug";
#else
@@ -500,6 +504,11 @@ char* CALLBACK PS2EgetLibName(void) {
#endif
}
+char* CALLBACK PS2EgetLibName(void) {
+ ps2e = 1;
+ return PSEgetLibName();
+}
+
//void CALLBACK PADgsDriverInfo(GSdriverInfo *info) {
// info=info;
//}
@@ -807,7 +816,7 @@ u8 CALLBACK PADpoll(u8 value) {
b2 -= (sum->buttons[i+4]>=128) << i;
}
if (config.guitar[query.pad] && !config.GH2) {
- sum->sticks[0].horiz = -256;
+ sum->sticks[0].horiz = -255;
// Not sure about this. Forces wammy to be from 0 to 0x7F.
// if (sum->sticks[2].vert > 0) sum->sticks[2].vert = 0;
}
@@ -830,12 +839,15 @@ u8 CALLBACK PADpoll(u8 value) {
// Good idea? No clue.
//query.response[3] &= pad->mask[0];
//query.response[4] &= pad->mask[1];
+
+ // Each value is from -255 to 255, so have to use cap to convert
+ // negative values to 0.
query.response[9] = Cap(sum->sticks[0].horiz);
query.response[10] = Cap(-sum->sticks[0].horiz);
query.response[11] = Cap(-sum->sticks[0].vert);
query.response[12] = Cap(sum->sticks[0].vert);
- // No need to cap these.
+ // No need to cap these, already done int CapSum().
query.response[13] = (unsigned char) sum->buttons[8];
query.response[14] = (unsigned char) sum->buttons[9];
query.response[15] = (unsigned char) sum->buttons[10];
@@ -1136,10 +1148,6 @@ u32 CALLBACK PSEgetLibVersion() {
return (VERSION & 0xFFFFFF);
}
-char* CALLBACK PSEgetLibName() {
- return PS2EgetLibName();
-}
-
// Little funkiness to handle rounding floating points to ints without the C runtime.
// Unfortunately, means I can't use /GL optimization option.
#ifdef NO_CRT
diff --git a/plugins/LilyPad/LilyPad_VC2005.vcproj b/plugins/LilyPad/LilyPad_VC2005.vcproj
index b4c371095b..ef04217964 100644
--- a/plugins/LilyPad/LilyPad_VC2005.vcproj
+++ b/plugins/LilyPad/LilyPad_VC2005.vcproj
@@ -246,7 +246,7 @@
FavorSizeOrSpeed="1"
OmitFramePointers="true"
WholeProgramOptimization="false"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TEST_EXPORTS"
+ PreprocessorDefinitions="NO_CRT;WIN32;NDEBUG;_WINDOWS;_USRDLL;TEST_EXPORTS"
StringPooling="true"
ExceptionHandling="0"
RuntimeLibrary="0"
diff --git a/plugins/LilyPad/LilyPad_VC2008.vcproj b/plugins/LilyPad/LilyPad_VC2008.vcproj
index 11378ba97c..41886cdb04 100644
--- a/plugins/LilyPad/LilyPad_VC2008.vcproj
+++ b/plugins/LilyPad/LilyPad_VC2008.vcproj
@@ -154,7 +154,6 @@
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
OmitFramePointers="true"
- WholeProgramOptimization="false"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TEST_EXPORTS"
StringPooling="true"
ExceptionHandling="0"
@@ -184,16 +183,13 @@
/>