Skip to content

Commit

Permalink
LilyPad: Add PS mouse support
Browse files Browse the repository at this point in the history
Adds Playstation Mouse as a new pad type.

For use with PS1 games only.
  • Loading branch information
FlatOutPS2 committed Nov 13, 2016
1 parent a3478e0 commit de8d3fb
Show file tree
Hide file tree
Showing 7 changed files with 127 additions and 6 deletions.
6 changes: 5 additions & 1 deletion plugins/LilyPad/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ const wchar_t *padTypes[] = {
L"Unplugged",
L"Dualshock 2",
L"Guitar",
L"Pop'n Music controller"};
L"Pop'n Music controller",
L"PS1 Mouse"};

// Hacks or configurations which PCSX2 needs with a specific value
void PCSX2_overrideConfig(GeneralConfig &config_in_out)
Expand Down Expand Up @@ -1890,6 +1891,8 @@ void UpdatePadPages()
psp.pszTemplate = MAKEINTRESOURCE(IDD_CONFIG_GUITAR);
else if (config.padConfigs[port][slot].type == PopnPad)
psp.pszTemplate = MAKEINTRESOURCE(IDD_CONFIG_POPN);
else if (config.padConfigs[port][slot].type == MousePad)
psp.pszTemplate = MAKEINTRESOURCE(IDD_CONFIG_PS1_MOUSE);
else
psp.pszTemplate = MAKEINTRESOURCE(IDD_CONFIG);

Expand Down Expand Up @@ -2055,6 +2058,7 @@ INT_PTR CALLBACK GeneralDialogProc(HWND hWnd, unsigned int msg, WPARAM wParam, L
AddTooltip(IDC_MOUSE_UNFOCUS, hWnd);
AddTooltip(IDC_MULTIPLE_BINDING, hWnd);
AddTooltip(IDC_PAD_LIST, hWnd);
AddTooltip(IDC_PAD_TYPE, hWnd);
AddTooltip(ID_TEST, hWnd);
AddTooltip(IDC_ANALOG_START1, hWnd);

Expand Down
12 changes: 12 additions & 0 deletions plugins/LilyPad/Default.ini
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,12 @@ Binding 43=0x0020000D, 0, 24, 65536, 0, 0, 1, 3
Binding 44=0x0020000E, 0, 26, 65536, 0, 0, 1, 3
Binding 45=0x00200010, 0, 29, 65536, 0, 0, 1, 3
Binding 46=0x00200011, 0, 20, 65536, 0, 0, 1, 3
Binding 47=0x00200008, 0, 29, 65536, 0, 0, 1, 4
Binding 48=0x00200009, 0, 30, 65536, 0, 0, 1, 4
Binding 49=0x01020013, 0, 33, 3000, 0, 0, 13172, 4
Binding 50=0x02020013, 0, 35, 3000, 0, 0, 13172, 4
Binding 51=0x01020014, 0, 32, 3000, 0, 0, 13172, 4
Binding 52=0x02020014, 0, 34, 3000, 0, 0, 13172, 4
FF Binding 0=Constant 0, 0, 0, 1, 0, 65536, 1, 0
FF Binding 1=Constant 0, 1, 0, 1, 0, 0, 1, 65536
[Device 1]
Expand Down Expand Up @@ -149,6 +155,12 @@ Binding 43=0x0020000D, 1, 24, 65536, 0, 0, 1, 3
Binding 44=0x0020000E, 1, 26, 65536, 0, 0, 1, 3
Binding 45=0x00200010, 1, 29, 65536, 0, 0, 1, 3
Binding 46=0x00200011, 1, 20, 65536, 0, 0, 1, 3
Binding 47=0x00200008, 1, 29, 65536, 0, 0, 1, 4
Binding 48=0x00200009, 1, 30, 65536, 0, 0, 1, 4
Binding 49=0x01020013, 1, 33, 3000, 0, 0, 13172, 4
Binding 50=0x02020013, 1, 35, 3000, 0, 0, 13172, 4
Binding 51=0x01020014, 1, 32, 3000, 0, 0, 13172, 4
Binding 52=0x02020014, 1, 34, 3000, 0, 0, 13172, 4
FF Binding 0=Constant 1, 0, 0, 1, 0, 65536, 1, 0
FF Binding 1=Constant 1, 1, 0, 1, 0, 0, 1, 65536
[Device 12]
Expand Down
1 change: 1 addition & 0 deletions plugins/LilyPad/InputManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ enum PadType {
Dualshock2Pad,
GuitarPad,
PopnPad,
MousePad,
numPadTypes // total number of PadTypes. Add new PadType above this line.
};

Expand Down
35 changes: 30 additions & 5 deletions plugins/LilyPad/LilyPad.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ unsigned char inBuf[50];

// windowThreadId = GetWindowThreadProcessId(hWnd, 0);

#define MODE_PS1_MOUSE 0x12
#define MODE_DIGITAL 0x41
#define MODE_ANALOG 0x73
#define MODE_DS2_NATIVE 0x79
Expand Down Expand Up @@ -789,7 +790,10 @@ void ResetPad(int port, int slot)
SetVibrate(port, slot, 1, 0);

memset(&pads[port][slot], 0, sizeof(pads[0][0]));
pads[port][slot].mode = MODE_DIGITAL;
if (config.padConfigs[port][slot].type == MousePad)
pads[port][slot].mode = MODE_PS1_MOUSE;
else
pads[port][slot].mode = MODE_DIGITAL;
pads[port][slot].umask[0] = pads[port][slot].umask[1] = 0xFF;
// Sets up vibrate variable.
ResetVibrate(port, slot);
Expand Down Expand Up @@ -1224,6 +1228,23 @@ u8 CALLBACK PADpoll(u8 value)
Update(query.port, query.slot);
ButtonSum *sum = &pad->sum;

if (config.padConfigs[query.port][query.slot].type == MousePad) {
u8 b1 = 0xFC;
if (sum->buttons[5 + 4] > 0) // Left button
b1 -= 2 << 2;
if (sum->buttons[6 + 4] > 0) // Right button
b1 -= 2 << 1;

query.response[3] = 0xFF;
query.response[4] = b1;
query.response[5] = sum->sticks[1].horiz / 2;
query.response[6] = sum->sticks[1].vert / 2;
query.numBytes = 7;
query.lastByte = 1;
DEBUG_OUT(pad->mode);
return pad->mode;
}

u8 b1 = 0xFF, b2 = 0xFF;
for (i = 0; i < 4; i++) {
b1 -= (sum->buttons[i] > 0) << i;
Expand Down Expand Up @@ -1291,7 +1312,7 @@ u8 CALLBACK PADpoll(u8 value)
// QUERY_DS2_ANALOG_MODE
case 0x41:
// Right? Wrong? No clue.
if (pad->mode == MODE_DIGITAL) {
if (pad->mode == MODE_DIGITAL || pad->mode == MODE_PS1_MOUSE) {
queryMaskMode[1] = queryMaskMode[2] = queryMaskMode[3] = 0;
queryMaskMode[6] = 0x00;
} else {
Expand Down Expand Up @@ -1373,8 +1394,12 @@ u8 CALLBACK PADpoll(u8 value)
// SET_MODE_AND_LOCK
case 0x44:
if (query.lastByte == 3 && value < 2) {
static const u8 modes[2] = {MODE_DIGITAL, MODE_ANALOG};
pad->mode = modes[value];
if (value == 0 && config.padConfigs[query.port][query.slot].type == MousePad) {
pad->mode = MODE_PS1_MOUSE;
} else {
static const u8 modes[2] = {MODE_DIGITAL, MODE_ANALOG};
pad->mode = modes[value];
}
} else if (query.lastByte == 4) {
if (value == 3) {
pad->modeLock = 3;
Expand Down Expand Up @@ -1596,7 +1621,7 @@ s32 CALLBACK PADfreeze(int mode, freezeData *data)
for (int slot = 0; slot < 4; slot++) {
u8 mode = pdata.padData[port][slot].mode;

if (mode != MODE_DIGITAL && mode != MODE_ANALOG && mode != MODE_DS2_NATIVE) {
if (mode != MODE_DIGITAL && mode != MODE_ANALOG && mode != MODE_DS2_NATIVE && mode != MODE_PS1_MOUSE) {
break;
}

Expand Down
72 changes: 72 additions & 0 deletions plugins/LilyPad/LilyPad.rc
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,70 @@ BEGIN
PUSHBUTTON "Small Motor",ID_SMALL_MOTOR,347,291,64,14
END

IDD_CONFIG_PS1_MOUSE DIALOGEX 0, 0, 424, 318
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
CONTROL "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_VSCROLL | WS_TABSTOP,7,7,183,285,WS_EX_CLIENTEDGE
PUSHBUTTON "Delete Selected",ID_DELETE,7,296,59,15
PUSHBUTTON "Clear All",ID_CLEAR,71,296,56,15
PUSHBUTTON "Ignore Key",ID_IGNORE,132,296,58,15
PUSHBUTTON "Mouse",ID_MOUSE,366,30,34,15
PUSHBUTTON "X-axis Left",ID_LSTICK_LEFT,256,112,45,15
PUSHBUTTON "X-axis Right",ID_LSTICK_RIGHT,307,112,45,15
PUSHBUTTON "Y-axis Up",ID_LSTICK_UP,283,92,45,15
PUSHBUTTON "Y-axis Down",ID_LSTICK_DOWN,283,132,45,15
PUSHBUTTON "Left-click", ID_CIRCLE,256,56,45,15
PUSHBUTTON "Right-click", ID_CROSS,307,56,45,15
GROUPBOX "",ID_FF,195,6,222,248
COMBOBOX IDC_FF_EFFECT,203,20,206,106,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_FF_AXIS1,"msctls_trackbar32",WS_TABSTOP,199,40,214,17
CONTROL "Axis 1",IDC_FF_AXIS1_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,60,91,10
CONTROL "Flip",IDC_FF_AXIS1_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,60,35,10
EDITTEXT IDC_FF_AXIS1_SCALE,375,60,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING
CONTROL "",IDC_FF_AXIS2,"msctls_trackbar32",WS_TABSTOP,199,76,214,17
CONTROL "Axis 2",IDC_FF_AXIS2_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,96,91,10
CONTROL "Flip",IDC_FF_AXIS2_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,96,35,10
EDITTEXT IDC_FF_AXIS2_SCALE,375,96,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING
CONTROL "",IDC_FF_AXIS3,"msctls_trackbar32",WS_TABSTOP,199,112,214,17
CONTROL "Axis 3",IDC_FF_AXIS3_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,132,91,10
CONTROL "Flip",IDC_FF_AXIS3_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,132,35,10
EDITTEXT IDC_FF_AXIS3_SCALE,375,132,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING
CONTROL "",IDC_FF_AXIS4,"msctls_trackbar32",WS_TABSTOP,199,148,214,17
CONTROL "Axis 4",IDC_FF_AXIS4_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,168,91,10
CONTROL "Flip",IDC_FF_AXIS4_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,168,35,10
EDITTEXT IDC_FF_AXIS4_SCALE,375,168,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING
CONTROL "",IDC_FF_AXIS5,"msctls_trackbar32",WS_TABSTOP,199,184,214,17
CONTROL "Axis 5",IDC_FF_AXIS5_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,204,91,10
CONTROL "Flip",IDC_FF_AXIS5_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,204,35,10
EDITTEXT IDC_FF_AXIS5_SCALE,375,204,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING
CONTROL "",IDC_FF_AXIS6,"msctls_trackbar32",WS_TABSTOP,199,220,214,17
CONTROL "Axis 6",IDC_FF_AXIS6_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,240,91,10
CONTROL "Flip",IDC_FF_AXIS6_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,240,35,10
EDITTEXT IDC_FF_AXIS6_SCALE,375,240,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING
PUSHBUTTON "Test",ID_TEST,196,260,59,15
PUSHBUTTON "Back to Controls",ID_CONTROLS,196,296,59,15
GROUPBOX "Configure Binding",ID_SENSITIVITY,195,186,222,70
EDITTEXT IDC_AXIS_DEVICE,202,199,74,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
COMBOBOX IDC_AXIS_DIRECTION,276,197,70,47,CBS_DROPDOWNLIST | WS_TABSTOP
EDITTEXT IDC_AXIS_CONTROL,349,199,65,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
LTEXT "Sensitivity",IDC_LABEL_SENSITIVITY,202,215,42,8
CONTROL "Turbo",IDC_TURBO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,225,34,10
CONTROL "",IDC_SLIDER_SENSITIVITY,"msctls_trackbar32",WS_TABSTOP,240,215,131,17
EDITTEXT IDC_AXIS_SENSITIVITY,377,213,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING
CONTROL "Flip",IDC_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,385,224,27,10
LTEXT "Dead Zone",IDC_LABEL_DEADZONE,202,240,42,8
CONTROL "",IDC_SLIDER_DEADZONE,"msctls_trackbar32",WS_TABSTOP,240,236,131,17
EDITTEXT IDC_AXIS_DEADZONE,377,239,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING
PUSHBUTTON "Lock Input",ID_LOCK_ALL_INPUT,196,260,59,15
PUSHBUTTON "Lock Direction",ID_LOCK_DIRECTION,196,278,59,15
PUSHBUTTON "Lock Buttons",ID_LOCK_BUTTONS,196,296,59,15
GROUPBOX "Add Force Feedback Effect",IDC_STATIC,262,260,155,51
COMBOBOX IDC_FORCEFEEDBACK,269,273,142,106,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Big Motor",ID_BIG_MOTOR,269,291,64,14
PUSHBUTTON "Small Motor",ID_SMALL_MOTOR,347,291,64,14
END

IDD_GENERAL DIALOGEX 0, 0, 424, 327
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
FONT 8, "MS Shell Dlg", 0, 0, 0x1
Expand Down Expand Up @@ -376,6 +440,14 @@ BEGIN
BOTTOMMARGIN, 311
END

IDD_CONFIG_PS1_MOUSE, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 417
TOPMARGIN, 7
BOTTOMMARGIN, 311
END

IDD_GENERAL, DIALOG
BEGIN
LEFTMARGIN, 7
Expand Down
6 changes: 6 additions & 0 deletions plugins/LilyPad/Tooltips.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@ LPWSTR dialog_message(int ID, bool *updateText)
L"Right-click to show a pop-up menu that allows for swapping all the settings and bindings, or just the bindings of individual pad types,"
L"between the selected pad and one of other active pads, and clearing all the settings and bindings from the selected pad or just the bindings from a selected pad type.\n\n"
L"Note: To allow swapping different kinds of pad types(like DS2 to Guitar), the \"Allow binding multiple PS2 Controls...\" option needs to be enabled as well.";
case IDC_PAD_TYPE:
return L"\"Unplugged\" disables the controller and removes the corresponding pad tab.\n\n"
L"\"Dualshock 2\" emulates the default PS2 controller for use in both PS1 and PS2 games.\n\n"
L"\"Guitar\" emulates a PS2 controller used in the Guitar Hero and Rock Band series of games.\n\n"
L"\"Pop'n Music controller\" emulates a PS2 controller used exclusively in the Japanese Pop'n Music series of games.\n\n"
L"\"PS1 Mouse\" emulates the Playstation Mouse. This controller can only be used in a number of PS1 games like \"Command & Conquer: Red Alert\" and \"Myst\".";
case IDC_ANALOG_START1:
return L"Automatically switch a pad from digital mode to analog mode whenever a pad is set to digital mode, if the pad's mode is not locked."
L"This removes the need for manually enabling analog mode with a press of the analog button for games that support, but do not automatically enable analog mode.\n\n"
Expand Down
1 change: 1 addition & 0 deletions plugins/LilyPad/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#define IDD_DIAG 110
#define IDR_INI1 111
#define IDD_CONFIG_POPN 112
#define IDD_CONFIG_PS1_MOUSE 113
#define IDC_CLOSE_HACK1 1099
#define IDC_KB_DISABLE 1100
#define IDC_KB_DI 1101
Expand Down

0 comments on commit de8d3fb

Please sign in to comment.