Merge remote-tracking branch 'refs/remotes/Cxbx-Reloaded/master'
This commit is contained in:
commit
5c3d37d11c
|
@ -76,7 +76,7 @@
|
|||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\..\src\Common;..\..\src;..\..\src\Common\Win32;..\..\import\stb;%(AdditionalIncludeDirectories);..\..\import\OpenXDK\include;..\..\import\distorm\include;..\..\import\glew-2.0.0\include;..\..\src;..\..\src\Common;..\..\src\Common\Win32</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_WIN32_WINNT=0x0601;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<BrowseInformation>true</BrowseInformation>
|
||||
|
@ -92,7 +92,7 @@
|
|||
<AdditionalIncludeDirectories>Include\Win32\Cxbx;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;xinput.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>$(Configuration)\;..\..\import\distorm\lib\Win32\;..\..\import\glew-2.0.0\lib\Release\Win32\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<IgnoreSpecificDefaultLibraries>msvcrt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
|
@ -138,7 +138,7 @@ $(SOLUTIONDIR)Export.bat</Command>
|
|||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<AdditionalIncludeDirectories>..\..\src;..\..\src\Common;..\..\src\Common\Win32\;..\..\import\stb;%(AdditionalIncludeDirectories);..\..\import\OpenXDK\include;..\..\import\distorm\include;..\..\import\glew-2.0.0\include;..\..\src;..\..\src\Common;..\..\src\Common\Win32</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_WIN32_WINNT=0x0601;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
|
@ -155,7 +155,7 @@ $(SOLUTIONDIR)Export.bat</Command>
|
|||
<AdditionalIncludeDirectories>Include\Win32\Cxbx;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;xinput.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<AdditionalLibraryDirectories>$(Configuration)\;..\..\import\distorm\lib\Win32\;..\..\import\glew-2.0.0\lib\Release\Win32\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
|
|
|
@ -131,6 +131,8 @@ BEGIN
|
|||
MENUITEM "Config &Audio...", ID_SETTINGS_CONFIGURESOUND, GRAYED
|
||||
MENUITEM "Config &Video...", ID_SETTINGS_CONFIG_VIDEO
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Use XInput", ID_SETTINGS_XINPUT
|
||||
MENUITEM SEPARATOR
|
||||
POPUP "&HLE Cache"
|
||||
BEGIN
|
||||
MENUITEM "&Clear entire HLE Cache", ID_CACHE_CLEARHLECACHE_ALL
|
||||
|
|
|
@ -782,76 +782,76 @@ void XBController::ListenPoll(XTL::XINPUT_STATE *Controller)
|
|||
Controller->Gamepad.sThumbRX -= wValue;
|
||||
break;
|
||||
case XBCTRL_OBJECT_A:
|
||||
Controller->Gamepad.bAnalogButtons[XINPUT_GAMEPAD_A] = (wValue / 128);
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_A] = (wValue / 128);
|
||||
break;
|
||||
case XBCTRL_OBJECT_B:
|
||||
Controller->Gamepad.bAnalogButtons[XINPUT_GAMEPAD_B] = (wValue / 128);
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_B] = (wValue / 128);
|
||||
break;
|
||||
case XBCTRL_OBJECT_X:
|
||||
Controller->Gamepad.bAnalogButtons[XINPUT_GAMEPAD_X] = (wValue / 128);
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_X] = (wValue / 128);
|
||||
break;
|
||||
case XBCTRL_OBJECT_Y:
|
||||
Controller->Gamepad.bAnalogButtons[XINPUT_GAMEPAD_Y] = (wValue / 128);
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_Y] = (wValue / 128);
|
||||
break;
|
||||
case XBCTRL_OBJECT_WHITE:
|
||||
Controller->Gamepad.bAnalogButtons[XINPUT_GAMEPAD_WHITE] = (wValue / 128);
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_WHITE] = (wValue / 128);
|
||||
break;
|
||||
case XBCTRL_OBJECT_BLACK:
|
||||
Controller->Gamepad.bAnalogButtons[XINPUT_GAMEPAD_BLACK] = (wValue / 128);
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_BLACK] = (wValue / 128);
|
||||
break;
|
||||
case XBCTRL_OBJECT_LTRIGGER:
|
||||
Controller->Gamepad.bAnalogButtons[XINPUT_GAMEPAD_LEFT_TRIGGER] = (wValue / 128);
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_LEFT_TRIGGER] = (wValue / 128);
|
||||
break;
|
||||
case XBCTRL_OBJECT_RTRIGGER:
|
||||
Controller->Gamepad.bAnalogButtons[XINPUT_GAMEPAD_RIGHT_TRIGGER] = (wValue / 128);
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_RIGHT_TRIGGER] = (wValue / 128);
|
||||
break;
|
||||
case XBCTRL_OBJECT_DPADUP:
|
||||
if(wValue > 0)
|
||||
Controller->Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_UP;
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_DPAD_UP;
|
||||
else
|
||||
Controller->Gamepad.wButtons &= ~XINPUT_GAMEPAD_DPAD_UP;
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_DPAD_UP;
|
||||
break;
|
||||
case XBCTRL_OBJECT_DPADDOWN:
|
||||
if(wValue > 0)
|
||||
Controller->Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_DOWN;
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_DPAD_DOWN;
|
||||
else
|
||||
Controller->Gamepad.wButtons &= ~XINPUT_GAMEPAD_DPAD_DOWN;
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_DPAD_DOWN;
|
||||
break;
|
||||
case XBCTRL_OBJECT_DPADLEFT:
|
||||
if(wValue > 0)
|
||||
Controller->Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_LEFT;
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_DPAD_LEFT;
|
||||
else
|
||||
Controller->Gamepad.wButtons &= ~XINPUT_GAMEPAD_DPAD_LEFT;
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_DPAD_LEFT;
|
||||
break;
|
||||
case XBCTRL_OBJECT_DPADRIGHT:
|
||||
if(wValue > 0)
|
||||
Controller->Gamepad.wButtons |= XINPUT_GAMEPAD_DPAD_RIGHT;
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_DPAD_RIGHT;
|
||||
else
|
||||
Controller->Gamepad.wButtons &= ~XINPUT_GAMEPAD_DPAD_RIGHT;
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_DPAD_RIGHT;
|
||||
break;
|
||||
case XBCTRL_OBJECT_BACK:
|
||||
if(wValue > 0)
|
||||
Controller->Gamepad.wButtons |= XINPUT_GAMEPAD_BACK;
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_BACK;
|
||||
else
|
||||
Controller->Gamepad.wButtons &= ~XINPUT_GAMEPAD_BACK;
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_BACK;
|
||||
break;
|
||||
case XBCTRL_OBJECT_START:
|
||||
if(wValue > 0)
|
||||
Controller->Gamepad.wButtons |= XINPUT_GAMEPAD_START;
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_START;
|
||||
else
|
||||
Controller->Gamepad.wButtons &= ~XINPUT_GAMEPAD_START;
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_START;
|
||||
break;
|
||||
case XBCTRL_OBJECT_LTHUMB:
|
||||
if(wValue > 0)
|
||||
Controller->Gamepad.wButtons |= XINPUT_GAMEPAD_LEFT_THUMB;
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_LEFT_THUMB;
|
||||
else
|
||||
Controller->Gamepad.wButtons &= ~XINPUT_GAMEPAD_LEFT_THUMB;
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_LEFT_THUMB;
|
||||
break;
|
||||
case XBCTRL_OBJECT_RTHUMB:
|
||||
if(wValue > 0)
|
||||
Controller->Gamepad.wButtons |= XINPUT_GAMEPAD_RIGHT_THUMB;
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_RIGHT_THUMB;
|
||||
else
|
||||
Controller->Gamepad.wButtons &= ~XINPUT_GAMEPAD_RIGHT_THUMB;
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_RIGHT_THUMB;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -93,6 +93,7 @@
|
|||
#define ID_SETTINGS_CACHE 40083
|
||||
#define ID_CACHE_CLEARHLECACHE_ALL 40084
|
||||
#define ID_CACHE_CLEARHLECACHE_CURRENT 40085
|
||||
#define ID_SETTINGS_XINPUT 40086
|
||||
#define IDC_STATIC -1
|
||||
|
||||
// Next default values for new objects
|
||||
|
@ -100,7 +101,7 @@
|
|||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 130
|
||||
#define _APS_NEXT_COMMAND_VALUE 40085
|
||||
#define _APS_NEXT_COMMAND_VALUE 40087
|
||||
#define _APS_NEXT_CONTROL_VALUE 1058
|
||||
#define _APS_NEXT_SYMED_VALUE 104
|
||||
#endif
|
||||
|
|
|
@ -128,6 +128,9 @@ WndMain::WndMain(HINSTANCE x_hInstance) :
|
|||
dwType = REG_DWORD; dwSize = sizeof(DWORD);
|
||||
RegQueryValueEx(hKey, "LLEFLAGS", NULL, &dwType, (PBYTE)&m_FlagsLLE, &dwSize);
|
||||
|
||||
dwType = REG_DWORD; dwSize = sizeof(DWORD);
|
||||
RegQueryValueEx(hKey, "XInputEnabled", NULL, &dwType, (PBYTE)&m_XInputEnabled, &dwSize);
|
||||
|
||||
dwType = REG_DWORD; dwSize = sizeof(DWORD);
|
||||
RegQueryValueEx(hKey, "CxbxDebug", NULL, &dwType, (PBYTE)&m_CxbxDebug, &dwSize);
|
||||
|
||||
|
@ -191,6 +194,9 @@ WndMain::~WndMain()
|
|||
dwType = REG_DWORD; dwSize = sizeof(DWORD);
|
||||
RegSetValueEx(hKey, "LLEFLAGS", 0, dwType, (PBYTE)&m_FlagsLLE, dwSize);
|
||||
|
||||
dwType = REG_DWORD; dwSize = sizeof(DWORD);
|
||||
RegSetValueEx(hKey, "XInputEnabled", 0, dwType, (PBYTE)&m_XInputEnabled, dwSize);
|
||||
|
||||
dwType = REG_DWORD; dwSize = sizeof(DWORD);
|
||||
RegSetValueEx(hKey, "CxbxDebug", 0, dwType, (PBYTE)&m_CxbxDebug, dwSize);
|
||||
|
||||
|
@ -455,13 +461,13 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch(LOWORD(wParam))
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case ID_FILE_OPEN_XBE:
|
||||
{
|
||||
OPENFILENAME ofn = {0};
|
||||
OPENFILENAME ofn = { 0 };
|
||||
|
||||
char filename[MAX_PATH] = {0};
|
||||
char filename[MAX_PATH] = { 0 };
|
||||
|
||||
ofn.lStructSize = sizeof(OPENFILENAME);
|
||||
ofn.hwndOwner = m_hwnd;
|
||||
|
@ -474,12 +480,12 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
ofn.lpstrInitialDir = NULL;
|
||||
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
|
||||
|
||||
if(GetOpenFileName(&ofn) == TRUE)
|
||||
if (GetOpenFileName(&ofn) == TRUE)
|
||||
{
|
||||
if(m_Xbe != 0)
|
||||
if (m_Xbe != 0)
|
||||
CloseXbe();
|
||||
|
||||
if(m_Xbe != 0)
|
||||
if (m_Xbe != 0)
|
||||
break;
|
||||
|
||||
OpenXbe(ofn.lpstrFile);
|
||||
|
@ -493,7 +499,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
case ID_FILE_SAVEXBEFILE:
|
||||
{
|
||||
if(m_XbeFilename[0] == '\0')
|
||||
if (m_XbeFilename[0] == '\0')
|
||||
SaveXbeAs();
|
||||
else
|
||||
SaveXbe(m_XbeFilename);
|
||||
|
@ -515,10 +521,10 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
case ID_FILE_RXBE_8:
|
||||
case ID_FILE_RXBE_9:
|
||||
{
|
||||
if(m_Xbe != 0)
|
||||
if (m_Xbe != 0)
|
||||
CloseXbe();
|
||||
|
||||
if(m_Xbe != 0)
|
||||
if (m_Xbe != 0)
|
||||
break;
|
||||
|
||||
HMENU menu = GetMenu(m_hwnd);
|
||||
|
@ -541,7 +547,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
case ID_EDIT_LOGOBITMAP_EXPORT:
|
||||
{
|
||||
OPENFILENAME ofn = {0};
|
||||
OPENFILENAME ofn = { 0 };
|
||||
|
||||
char filename[MAX_PATH] = "logo.bmp";
|
||||
|
||||
|
@ -558,18 +564,18 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
ofn.lpstrTitle = "Export Logo Bitmap";
|
||||
ofn.Flags = OFN_PATHMUSTEXIST;
|
||||
|
||||
if(GetSaveFileName(&ofn) == TRUE)
|
||||
if (GetSaveFileName(&ofn) == TRUE)
|
||||
{
|
||||
// ask permission to overwrite if file already exists
|
||||
if(_access(ofn.lpstrFile, 0) != -1)
|
||||
if (_access(ofn.lpstrFile, 0) != -1)
|
||||
{
|
||||
if(MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx-Reloaded", MB_ICONQUESTION | MB_YESNO) != IDYES)
|
||||
if (MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx-Reloaded", MB_ICONQUESTION | MB_YESNO) != IDYES)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// export logo bitmap
|
||||
{
|
||||
uint08 i_gray[100*17];
|
||||
uint08 i_gray[100 * 17];
|
||||
|
||||
m_Xbe->ExportLogoBitmap(i_gray);
|
||||
|
||||
|
@ -582,7 +588,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
BITMAPFILEHEADER bmfh;
|
||||
|
||||
bmfh.bfType = *(uint16*)"BM";
|
||||
bmfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) - sizeof(RGBQUAD) + (100*17)*sizeof(RGBTRIPLE) + 2;
|
||||
bmfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) - sizeof(RGBQUAD) + (100 * 17) * sizeof(RGBTRIPLE) + 2;
|
||||
bmfh.bfReserved1 = 0;
|
||||
bmfh.bfReserved2 = 0;
|
||||
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) - sizeof(RGBQUAD);
|
||||
|
@ -611,16 +617,16 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
// write bitmap data
|
||||
{
|
||||
RGBTRIPLE bmp_data[100*17];
|
||||
RGBTRIPLE bmp_data[100 * 17];
|
||||
|
||||
for(uint32 v=0;v<100*17;v++)
|
||||
for (uint32 v = 0; v < 100 * 17; v++)
|
||||
{
|
||||
bmp_data[v].rgbtRed = i_gray[v];
|
||||
bmp_data[v].rgbtGreen = i_gray[v];
|
||||
bmp_data[v].rgbtBlue = i_gray[v];
|
||||
}
|
||||
|
||||
fwrite(bmp_data, 100*17*sizeof(RGBTRIPLE), 1, LogoBitmap);
|
||||
fwrite(bmp_data, 100 * 17 * sizeof(RGBTRIPLE), 1, LogoBitmap);
|
||||
}
|
||||
|
||||
// write bitmap padding
|
||||
|
@ -633,7 +639,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
fclose(LogoBitmap);
|
||||
}
|
||||
|
||||
if(m_Xbe->HasError())
|
||||
if (m_Xbe->HasError())
|
||||
MessageBox(m_hwnd, m_Xbe->GetError().c_str(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
|
||||
else
|
||||
{
|
||||
|
@ -652,7 +658,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
case ID_EDIT_LOGOBITMAP_IMPORT:
|
||||
{
|
||||
OPENFILENAME ofn = {0};
|
||||
OPENFILENAME ofn = { 0 };
|
||||
|
||||
char filename[MAX_PATH] = "*.bmp";
|
||||
|
||||
|
@ -669,11 +675,11 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
ofn.lpstrTitle = "Import Logo Bitmap";
|
||||
ofn.Flags = OFN_PATHMUSTEXIST;
|
||||
|
||||
if(GetOpenFileName(&ofn) == TRUE)
|
||||
if (GetOpenFileName(&ofn) == TRUE)
|
||||
{
|
||||
// import logo bitmap
|
||||
{
|
||||
uint08 i_gray[100*17];
|
||||
uint08 i_gray[100 * 17];
|
||||
|
||||
// read bitmap file
|
||||
{
|
||||
|
@ -682,43 +688,43 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
char *bmp_err = 0;
|
||||
|
||||
// read bitmap header
|
||||
if(!bmp_err)
|
||||
if (!bmp_err)
|
||||
{
|
||||
BITMAPFILEHEADER bmfh;
|
||||
|
||||
fread(&bmfh, sizeof(bmfh), 1, logo);
|
||||
|
||||
if(bmfh.bfType != *(uint16*)"BM")
|
||||
if (bmfh.bfType != *(uint16*)"BM")
|
||||
bmp_err = "Invalid bitmap file...\n\nonly allows 24 bit bitmaps (100 by 17 pixels) with row order swapped";
|
||||
else if(bmfh.bfSize != sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) - sizeof(RGBQUAD) + (100*17)*sizeof(RGBTRIPLE) + 2)
|
||||
else if (bmfh.bfSize != sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) - sizeof(RGBQUAD) + (100 * 17) * sizeof(RGBTRIPLE) + 2)
|
||||
bmp_err = "Invalid bitmap file...\n\nonly allows 24 bit bitmaps (100 by 17 pixels) with row order swapped";
|
||||
}
|
||||
|
||||
// read bitmap info
|
||||
if(!bmp_err)
|
||||
if (!bmp_err)
|
||||
{
|
||||
BITMAPINFO bmi;
|
||||
|
||||
fread(&bmi, sizeof(bmi) - 4, 1, logo);
|
||||
|
||||
if(bmi.bmiHeader.biWidth != 100 || bmi.bmiHeader.biHeight != -17)
|
||||
if (bmi.bmiHeader.biWidth != 100 || bmi.bmiHeader.biHeight != -17)
|
||||
bmp_err = "Invalid bitmap file...\n\nonly allows 24 bit bitmaps (100 by 17 pixels) with row order swapped";
|
||||
}
|
||||
|
||||
// read bitmap data
|
||||
if(!bmp_err)
|
||||
if (!bmp_err)
|
||||
{
|
||||
RGBTRIPLE bmp_data[100*17];
|
||||
RGBTRIPLE bmp_data[100 * 17];
|
||||
|
||||
fread(bmp_data, 100*17*sizeof(RGBTRIPLE), 1, logo);
|
||||
fread(bmp_data, 100 * 17 * sizeof(RGBTRIPLE), 1, logo);
|
||||
|
||||
for(uint32 c=0;c<100*17;c++)
|
||||
for (uint32 c = 0; c < 100 * 17; c++)
|
||||
i_gray[c] = (char)(((float)bmp_data[c].rgbtRed + (float)bmp_data[c].rgbtGreen + (float)bmp_data[c].rgbtBlue) / 3.0);
|
||||
}
|
||||
|
||||
fclose(logo);
|
||||
|
||||
if(bmp_err != 0)
|
||||
if (bmp_err != 0)
|
||||
{
|
||||
MessageBox(m_hwnd, bmp_err, "Cxbx-Reloaded", MB_OK | MB_ICONEXCLAMATION);
|
||||
break;
|
||||
|
@ -727,7 +733,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
m_Xbe->ImportLogoBitmap(i_gray);
|
||||
|
||||
if(m_Xbe->HasError())
|
||||
if (m_Xbe->HasError())
|
||||
{
|
||||
MessageBox(m_hwnd, m_Xbe->GetError().c_str(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
|
||||
|
||||
|
@ -768,7 +774,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
RefreshMenus();
|
||||
|
||||
if(m_Xbe->m_Header.dwInitFlags.bLimit64MB)
|
||||
if (m_Xbe->m_Header.dwInitFlags.bLimit64MB)
|
||||
printf("WndMain: %s was patched to limit to 64MB of memory usage.\n", m_Xbe->m_szAsciiTitle);
|
||||
else
|
||||
printf("WndMain: %s was patched to allow >64MB of memory usage.\n", m_Xbe->m_szAsciiTitle);
|
||||
|
@ -780,7 +786,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
m_bXbeChanged = true;
|
||||
|
||||
// patch to/from debug mode
|
||||
if((m_Xbe->m_Header.dwEntryAddr ^ XOR_EP_RETAIL) > 0x01000000)
|
||||
if ((m_Xbe->m_Header.dwEntryAddr ^ XOR_EP_RETAIL) > 0x01000000)
|
||||
{
|
||||
// we're in debug mode, so switch over to retail
|
||||
uint32 ep = m_Xbe->m_Header.dwEntryAddr ^ XOR_EP_RETAIL; // decode from debug mode
|
||||
|
@ -803,7 +809,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
bool res = (m_Xbe->m_Header.dwEntryAddr ^ XOR_EP_RETAIL) > 0x01000000;
|
||||
|
||||
if(res)
|
||||
if (res)
|
||||
printf("WndMain: %s was converted to debug mode.\n", m_Xbe->m_szAsciiTitle);
|
||||
else
|
||||
printf("WndMain: %s was converted to retail mode.\n", m_Xbe->m_szAsciiTitle);
|
||||
|
@ -812,7 +818,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
case ID_EDIT_DUMPXBEINFOTO_FILE:
|
||||
{
|
||||
OPENFILENAME ofn = {0};
|
||||
OPENFILENAME ofn = { 0 };
|
||||
|
||||
char filename[MAX_PATH] = "Xbe.txt";
|
||||
|
||||
|
@ -828,12 +834,12 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
ofn.lpstrDefExt = "txt";
|
||||
ofn.Flags = OFN_PATHMUSTEXIST;
|
||||
|
||||
if(GetSaveFileName(&ofn) == TRUE)
|
||||
if (GetSaveFileName(&ofn) == TRUE)
|
||||
{
|
||||
// ask permission to overwrite if file exists
|
||||
if(_access(ofn.lpstrFile, 0) != -1)
|
||||
if (_access(ofn.lpstrFile, 0) != -1)
|
||||
{
|
||||
if(MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx-Reloaded", MB_ICONQUESTION | MB_YESNO) != IDYES)
|
||||
if (MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx-Reloaded", MB_ICONQUESTION | MB_YESNO) != IDYES)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -842,7 +848,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
FILE *TxtFile = fopen(ofn.lpstrFile, "wt");
|
||||
|
||||
// verify file was opened
|
||||
if(TxtFile == 0)
|
||||
if (TxtFile == 0)
|
||||
MessageBox(m_hwnd, "Could not open text file.", "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
|
||||
else
|
||||
{
|
||||
|
@ -850,7 +856,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
fclose(TxtFile);
|
||||
|
||||
if(m_Xbe->HasError())
|
||||
if (m_Xbe->HasError())
|
||||
{
|
||||
MessageBox(m_hwnd, m_Xbe->GetError().c_str(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
|
||||
}
|
||||
|
@ -875,7 +881,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
// dump xbe information to debug console
|
||||
m_Xbe->DumpInformation(stdout);
|
||||
|
||||
if(m_Xbe->HasError())
|
||||
if (m_Xbe->HasError())
|
||||
{
|
||||
MessageBox(m_hwnd, m_Xbe->GetError().c_str(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
|
||||
}
|
||||
|
@ -923,7 +929,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
case ID_EMULATION_DEBUGOUTPUTKERNEL_CONSOLE:
|
||||
{
|
||||
if(m_KrnlDebug == DM_NONE || m_KrnlDebug == DM_FILE)
|
||||
if (m_KrnlDebug == DM_NONE || m_KrnlDebug == DM_FILE)
|
||||
m_KrnlDebug = DM_CONSOLE;
|
||||
else
|
||||
m_KrnlDebug = DM_NONE;
|
||||
|
@ -938,7 +944,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
case ID_EMULATION_DEBUGOUTPUTKERNEL_FILE:
|
||||
{
|
||||
if(m_KrnlDebug == DM_FILE)
|
||||
if (m_KrnlDebug == DM_FILE)
|
||||
{
|
||||
m_KrnlDebug = DM_NONE;
|
||||
|
||||
|
@ -948,7 +954,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
}
|
||||
else
|
||||
{
|
||||
OPENFILENAME ofn = {0};
|
||||
OPENFILENAME ofn = { 0 };
|
||||
|
||||
char filename[MAX_PATH] = "KrnlDebug.txt";
|
||||
|
||||
|
@ -964,11 +970,11 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
ofn.lpstrDefExt = "txt";
|
||||
ofn.Flags = OFN_PATHMUSTEXIST;
|
||||
|
||||
if(GetSaveFileName(&ofn) != FALSE)
|
||||
if (GetSaveFileName(&ofn) != FALSE)
|
||||
{
|
||||
MessageBox(m_hwnd, "This will not take effect until emulation is (re)started.\n", "Cxbx-Reloaded", MB_OK);
|
||||
|
||||
strncpy(m_KrnlDebugFilename, ofn.lpstrFile, MAX_PATH-1);
|
||||
strncpy(m_KrnlDebugFilename, ofn.lpstrFile, MAX_PATH - 1);
|
||||
|
||||
m_KrnlDebug = DM_FILE;
|
||||
|
||||
|
@ -982,7 +988,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
case ID_EMULATION_DEBUGOUTPUTGUI_CONSOLE:
|
||||
{
|
||||
if(m_CxbxDebug == DM_NONE || m_CxbxDebug == DM_FILE)
|
||||
if (m_CxbxDebug == DM_NONE || m_CxbxDebug == DM_FILE)
|
||||
m_CxbxDebug = DM_CONSOLE;
|
||||
else
|
||||
m_CxbxDebug = DM_NONE;
|
||||
|
@ -995,7 +1001,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
|
||||
case ID_EMULATION_DEBUGOUTPUTGUI_FILE:
|
||||
{
|
||||
if(m_CxbxDebug == DM_FILE)
|
||||
if (m_CxbxDebug == DM_FILE)
|
||||
{
|
||||
m_CxbxDebug = DM_NONE;
|
||||
|
||||
|
@ -1005,7 +1011,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
}
|
||||
else
|
||||
{
|
||||
OPENFILENAME ofn = {0};
|
||||
OPENFILENAME ofn = { 0 };
|
||||
|
||||
char filename[MAX_PATH] = "CxbxDebug.txt";
|
||||
|
||||
|
@ -1021,9 +1027,9 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
ofn.lpstrDefExt = "txt";
|
||||
ofn.Flags = OFN_PATHMUSTEXIST;
|
||||
|
||||
if(GetSaveFileName(&ofn) != FALSE)
|
||||
if (GetSaveFileName(&ofn) != FALSE)
|
||||
{
|
||||
strncpy(m_CxbxDebugFilename, ofn.lpstrFile, MAX_PATH-1);
|
||||
strncpy(m_CxbxDebugFilename, ofn.lpstrFile, MAX_PATH - 1);
|
||||
|
||||
m_CxbxDebug = DM_FILE;
|
||||
|
||||
|
@ -1060,6 +1066,11 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
|
|||
}
|
||||
break;
|
||||
|
||||
case ID_SETTINGS_XINPUT:
|
||||
m_XInputEnabled = !m_XInputEnabled;
|
||||
RefreshMenus();
|
||||
break;
|
||||
|
||||
case ID_EMULATION_START:
|
||||
StartEmulation(hwnd);
|
||||
break;
|
||||
|
@ -1309,6 +1320,9 @@ void WndMain::RefreshMenus()
|
|||
|
||||
chk_flag = (m_FlagsLLE & LLE_GPU) ? MF_CHECKED : MF_UNCHECKED;
|
||||
CheckMenuItem(settings_menu, ID_EMULATION_LLE_GPU, chk_flag);
|
||||
|
||||
chk_flag = (m_XInputEnabled) ? MF_CHECKED : MF_UNCHECKED;
|
||||
CheckMenuItem(settings_menu, ID_SETTINGS_XINPUT, chk_flag);
|
||||
}
|
||||
|
||||
// emulation menu
|
||||
|
@ -1587,6 +1601,9 @@ void WndMain::StartEmulation(HWND hwndParent)
|
|||
// register LLE flags with emulator process
|
||||
g_EmuShared->SetFlagsLLE(&m_FlagsLLE);
|
||||
|
||||
// register XInput flags with emulator process
|
||||
g_EmuShared->SetXInputEnabled(&m_XInputEnabled);
|
||||
|
||||
// shell exe
|
||||
{
|
||||
GetModuleFileName(NULL, szBuffer, MAX_PATH);
|
||||
|
|
|
@ -163,6 +163,11 @@ class WndMain : public Wnd
|
|||
// ******************************************************************
|
||||
int m_FlagsLLE;
|
||||
|
||||
// ******************************************************************
|
||||
// * XInout Enabled Flag
|
||||
// ******************************************************************
|
||||
int m_XInputEnabled;
|
||||
|
||||
// ******************************************************************
|
||||
// * debug output filenames
|
||||
// ******************************************************************
|
||||
|
|
|
@ -666,6 +666,19 @@ void CxbxKrnlInit
|
|||
DbgPrintf("EmuMain : LLE enabled for JIT.\n");
|
||||
}
|
||||
|
||||
// Process XInput Enabled flag
|
||||
{
|
||||
int XInputEnabled;
|
||||
g_EmuShared->GetXInputEnabled(&XInputEnabled);
|
||||
if (XInputEnabled) {
|
||||
g_XInputEnabled = true;
|
||||
printf("EmuMain : Using XInput\n");
|
||||
} else {
|
||||
g_XInputEnabled = false;
|
||||
printf("EmuMain : Using DirectInput\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize devices :
|
||||
char szBuffer[MAX_PATH];
|
||||
SHGetSpecialFolderPath(NULL, szBuffer, CSIDL_APPDATA, TRUE);
|
||||
|
|
|
@ -71,6 +71,7 @@ CHAR *g_strCurDrive= NULL;
|
|||
volatile bool g_bEmuException = false;
|
||||
volatile bool g_bEmuSuspended = false;
|
||||
volatile bool g_bPrintfOn = true;
|
||||
bool g_XInputEnabled = false;
|
||||
|
||||
// Delta added to host SystemTime, used in xboxkrnl::KeQuerySystemTime and xboxkrnl::NtSetSystemTime
|
||||
LARGE_INTEGER HostSystemTimeDelta = {};
|
||||
|
|
|
@ -95,6 +95,7 @@ g_pXInputSetStateStatus[XINPUT_SETSTATE_SLOTS];
|
|||
// 4 controllers
|
||||
#define XINPUT_HANDLE_SLOTS 4
|
||||
|
||||
extern bool g_XInputEnabled;
|
||||
extern HANDLE g_hInputHandle[XINPUT_HANDLE_SLOTS];
|
||||
|
||||
extern void InitializeSectionStructures(void);
|
||||
|
|
|
@ -52,28 +52,4 @@ extern void EmuDInputCleanup();
|
|||
// ******************************************************************
|
||||
extern void EmuDInputPoll(PXINPUT_STATE Controller);
|
||||
|
||||
// ******************************************************************
|
||||
// * offsets into analog button array
|
||||
// ******************************************************************
|
||||
#define XINPUT_GAMEPAD_A 0
|
||||
#define XINPUT_GAMEPAD_B 1
|
||||
#define XINPUT_GAMEPAD_X 2
|
||||
#define XINPUT_GAMEPAD_Y 3
|
||||
#define XINPUT_GAMEPAD_BLACK 4
|
||||
#define XINPUT_GAMEPAD_WHITE 5
|
||||
#define XINPUT_GAMEPAD_LEFT_TRIGGER 6
|
||||
#define XINPUT_GAMEPAD_RIGHT_TRIGGER 7
|
||||
|
||||
// ******************************************************************
|
||||
// * masks for digital buttons
|
||||
// ******************************************************************
|
||||
#define XINPUT_GAMEPAD_DPAD_UP 0x00000001
|
||||
#define XINPUT_GAMEPAD_DPAD_DOWN 0x00000002
|
||||
#define XINPUT_GAMEPAD_DPAD_LEFT 0x00000004
|
||||
#define XINPUT_GAMEPAD_DPAD_RIGHT 0x00000008
|
||||
#define XINPUT_GAMEPAD_START 0x00000010
|
||||
#define XINPUT_GAMEPAD_BACK 0x00000020
|
||||
#define XINPUT_GAMEPAD_LEFT_THUMB 0x00000040
|
||||
#define XINPUT_GAMEPAD_RIGHT_THUMB 0x00000080
|
||||
|
||||
#endif
|
||||
|
|
|
@ -91,6 +91,12 @@ class EmuShared : public Mutex
|
|||
void GetFlagsLLE( int *flags) { Lock(); *flags = m_FlagsLLE; Unlock(); }
|
||||
void SetFlagsLLE(const int *flags) { Lock(); m_FlagsLLE = *flags; Unlock(); }
|
||||
|
||||
// ******************************************************************
|
||||
// * XInput Flag Accessors
|
||||
// ******************************************************************
|
||||
void GetXInputEnabled(int* value) { Lock(); *value = m_XInputEnabled; Unlock(); }
|
||||
void SetXInputEnabled(int* value) { Lock(); m_XInputEnabled = *value; Unlock(); }
|
||||
|
||||
private:
|
||||
// ******************************************************************
|
||||
// * Constructor / Deconstructor
|
||||
|
@ -105,6 +111,7 @@ class EmuShared : public Mutex
|
|||
XBVideo m_XBVideo;
|
||||
char m_XbePath[MAX_PATH];
|
||||
int m_FlagsLLE;
|
||||
int m_XInputEnabled;
|
||||
};
|
||||
|
||||
// ******************************************************************
|
||||
|
|
|
@ -41,24 +41,6 @@
|
|||
#include "EmuShared.h"
|
||||
#include "EmuXInput.h"
|
||||
|
||||
//
|
||||
// Prevent naming collisions
|
||||
//
|
||||
#undef XINPUT_GAMEPAD_DPAD_UP
|
||||
#undef XINPUT_GAMEPAD_DPAD_DOWN
|
||||
#undef XINPUT_GAMEPAD_DPAD_LEFT
|
||||
#undef XINPUT_GAMEPAD_DPAD_RIGHT
|
||||
#undef XINPUT_GAMEPAD_START
|
||||
#undef XINPUT_GAMEPAD_BACK
|
||||
#undef XINPUT_GAMEPAD_LEFT_THUMB
|
||||
#undef XINPUT_GAMEPAD_RIGHT_THUMB
|
||||
#undef XINPUT_GAMEPAD_LEFT_SHOULDER
|
||||
#undef XINPUT_GAMEPAD_RIGHT_SHOULDER
|
||||
#undef XINPUT_GAMEPAD_A
|
||||
#undef XINPUT_GAMEPAD_B
|
||||
#undef XINPUT_GAMEPAD_X
|
||||
#undef XINPUT_GAMEPAD_Y
|
||||
|
||||
#include <xinput.h>
|
||||
|
||||
|
||||
|
@ -73,7 +55,7 @@ static BOOL g_bXInputInitialized = FALSE;
|
|||
// ******************************************************************
|
||||
// * patch: XInputPCPoll
|
||||
// ******************************************************************
|
||||
/*void XTL::EMUPATCH(XInputPCPoll)( XTL::PXINPUT_STATE Controller )
|
||||
void XTL::EmuXInputPCPoll( XTL::PXINPUT_STATE Controller )
|
||||
{
|
||||
//
|
||||
// Get the PC's XInput values
|
||||
|
@ -85,20 +67,68 @@ static BOOL g_bXInputInitialized = FALSE;
|
|||
//
|
||||
// Now convert those values to Xbox XInput
|
||||
//
|
||||
|
||||
// Analog Sticks
|
||||
Controller->Gamepad.sThumbLX = g_Controller.Gamepad.sThumbLX;
|
||||
Controller->Gamepad.sThumbLY = g_Controller.Gamepad.sThumbLY;
|
||||
Controller->Gamepad.sThumbRX = g_Controller.Gamepad.sThumbRX;
|
||||
Controller->Gamepad.sThumbRY = g_Controller.Gamepad.sThumbRY;
|
||||
|
||||
Controller->Gamepad.wButtons = g_Controller.Gamepad.wButtons & 0x00FF;
|
||||
// Analog Buttons
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_A] = (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_A) ? 255 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_B] = (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_B) ? 255 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_X] = (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_X) ? 255 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_Y] = (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_Y) ? 255 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_WHITE] = (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER) ? 255 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_BLACK] = (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER) ? 255 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_LEFT_TRIGGER] = g_Controller.Gamepad.bLeftTrigger;
|
||||
Controller->Gamepad.bAnalogButtons[XB_XINPUT_GAMEPAD_RIGHT_TRIGGER] = g_Controller.Gamepad.bRightTrigger;
|
||||
|
||||
Controller->Gamepad.bAnalogButtons[0] = (g_Controller.Gamepad.wButtons & 0x1000) ? 1 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[1] = (g_Controller.Gamepad.wButtons & 0x2000) ? 1 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[2] = (g_Controller.Gamepad.wButtons & 0x4000) ? 1 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[3] = (g_Controller.Gamepad.wButtons & 0x8000) ? 1 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[4] = (g_Controller.Gamepad.wButtons & 0x0100) ? 1 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[5] = (g_Controller.Gamepad.wButtons & 0x0200) ? 1 : 0;
|
||||
Controller->Gamepad.bAnalogButtons[6] = g_Controller.Gamepad.bLeftTrigger;
|
||||
Controller->Gamepad.bAnalogButtons[7] = g_Controller.Gamepad.bRightTrigger;
|
||||
}*/
|
||||
// Digital Buttons
|
||||
if (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_BACK) {
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_BACK;
|
||||
} else {
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_BACK;
|
||||
}
|
||||
|
||||
if (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_START) {
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_START;
|
||||
} else {
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_START;
|
||||
}
|
||||
|
||||
if (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB) {
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_LEFT_THUMB;
|
||||
} else {
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_LEFT_THUMB;
|
||||
}
|
||||
|
||||
if (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) {
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_RIGHT_THUMB;
|
||||
} else {
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_RIGHT_THUMB;
|
||||
}
|
||||
|
||||
if (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) {
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_DPAD_UP;
|
||||
} else {
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_DPAD_UP;
|
||||
}
|
||||
|
||||
if (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN) {
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_DPAD_DOWN;
|
||||
} else {
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_DPAD_DOWN;
|
||||
}
|
||||
|
||||
if (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT) {
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_DPAD_LEFT;
|
||||
} else {
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_DPAD_LEFT;
|
||||
}
|
||||
|
||||
if (g_Controller.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) {
|
||||
Controller->Gamepad.wButtons |= XB_XINPUT_GAMEPAD_DPAD_RIGHT;
|
||||
} else {
|
||||
Controller->Gamepad.wButtons &= ~XB_XINPUT_GAMEPAD_DPAD_RIGHT;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,6 +37,6 @@
|
|||
// ******************************************************************
|
||||
// * patch: XInputPCPoll
|
||||
// ******************************************************************
|
||||
// void EmuXInputPCPoll( XTL::PXINPUT_STATE Controller );
|
||||
void EmuXInputPCPoll( XTL::PXINPUT_STATE Controller );
|
||||
|
||||
#endif
|
|
@ -89,7 +89,6 @@ XFIBER g_Fibers[256];
|
|||
// Number of fiber routines queued
|
||||
int g_FiberCount = 0;
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: XFormatUtilityDrive
|
||||
// ******************************************************************
|
||||
|
@ -462,8 +461,12 @@ DWORD WINAPI XTL::EMUPATCH(XInputGetState)
|
|||
|
||||
if(dwPort == 0)
|
||||
{
|
||||
if (g_XInputEnabled) {
|
||||
EmuXInputPCPoll(pState);
|
||||
} else {
|
||||
EmuDInputPoll(pState);
|
||||
// EmuXInputPCPoll(pState);
|
||||
}
|
||||
|
||||
ret = ERROR_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -229,6 +229,30 @@ typedef struct _XINPUT_STATE
|
|||
}
|
||||
XINPUT_STATE, *PXINPUT_STATE;
|
||||
|
||||
// ******************************************************************
|
||||
// * offsets into analog button array
|
||||
// ******************************************************************
|
||||
#define XB_XINPUT_GAMEPAD_A 0
|
||||
#define XB_XINPUT_GAMEPAD_B 1
|
||||
#define XB_XINPUT_GAMEPAD_X 2
|
||||
#define XB_XINPUT_GAMEPAD_Y 3
|
||||
#define XB_XINPUT_GAMEPAD_BLACK 4
|
||||
#define XB_XINPUT_GAMEPAD_WHITE 5
|
||||
#define XB_XINPUT_GAMEPAD_LEFT_TRIGGER 6
|
||||
#define XB_XINPUT_GAMEPAD_RIGHT_TRIGGER 7
|
||||
|
||||
// ******************************************************************
|
||||
// * masks for digital buttons
|
||||
// ******************************************************************
|
||||
#define XB_XINPUT_GAMEPAD_DPAD_UP 0x00000001
|
||||
#define XB_XINPUT_GAMEPAD_DPAD_DOWN 0x00000002
|
||||
#define XB_XINPUT_GAMEPAD_DPAD_LEFT 0x00000004
|
||||
#define XB_XINPUT_GAMEPAD_DPAD_RIGHT 0x00000008
|
||||
#define XB_XINPUT_GAMEPAD_START 0x00000010
|
||||
#define XB_XINPUT_GAMEPAD_BACK 0x00000020
|
||||
#define XB_XINPUT_GAMEPAD_LEFT_THUMB 0x00000040
|
||||
#define XB_XINPUT_GAMEPAD_RIGHT_THUMB 0x00000080
|
||||
|
||||
// ******************************************************************
|
||||
// * XINPUT_FEEDBACK_HEADER
|
||||
// ******************************************************************
|
||||
|
|
Loading…
Reference in New Issue