14 Commits
Author SHA1 Message Date
nastys d7dfc57192 Warn when using AMD driver > 22.6.x 2022-07-27 23:35:58 +02:00
nastys af017ecc4e Update appveyor.yml 2022-07-10 23:43:53 +02:00
nastys 902f0c3421 Update appveyor.yml 2022-07-10 23:37:11 +02:00
nastys 501bb2de61 Merge pull request #7 from TinkoLiu/dev
[TLAC] DIVALLER WinUSB mode support
2022-06-25 16:28:53 +02:00
Tinko Liu f498fee877 chore: format code 2022-06-25 17:25:45 +08:00
Tinko Liu 5a72210023 [TLAC]: add DIVALLER binding 2022-06-25 17:19:54 +08:00
Tinko Liu 49c69de847 [TLAC]: add DIVALLER support 2022-06-25 17:17:00 +08:00
Tinko Liu 5652879f74 [TLAC]: add WinUSB as dependency 2022-06-25 17:13:29 +08:00
nastys 0a3b41977e Add shadow res option (thanks to koren), move databank, remove legacy options 2022-05-21 18:03:21 +02:00
nastys 057a267fe8 [Launcher] Specific warning for AMD 21.5 2022-05-14 12:59:57 +02:00
nastys ede1039f43 Replace databank with korenkonder's 2022-05-07 21:31:26 +02:00
nastys 2bac4de81d [DivaMovie] Clarify DXVA message 2022-05-07 19:14:53 +02:00
nastys 74e2c9a31d Fix Turing GPU typo 2022-05-07 18:39:32 +02:00
nastys 25a2a5f6f6 [TLAC] Backport wireframe and extra keyboard bindings 2022-05-07 18:28:42 +02:00
29 changed files with 1251 additions and 731 deletions
+2 -8
View File
@@ -18,7 +18,7 @@ after_build:
md %TMP%\full\ram\
md %TMP%\full\ram\databank_template\
md %TMP%\full\ram\databank_template_v2\
@@ -30,19 +30,13 @@ after_build:
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\verify_base_game.sfv %TMP%\full\
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\verify_base_game.md5 %TMP%\full\
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\verify_mount_data.sfv %TMP%\full\
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\verify_mount_data.md5 %TMP%\full\
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\glut32.dll %TMP%\full\
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\plugins\*.* %TMP%\full\plugins\
copy "%APPVEYOR_BUILD_FOLDER%\source-code\data\plugins\Novidia Shaders\*.*" "%TMP%\full\plugins\Novidia Shaders\"
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\ram\databank_template\*.dat %TMP%\full\ram\databank_template\
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\ram\databank_template_v2\*.dat %TMP%\full\ram\databank_template_v2\
copy %APPVEYOR_BUILD_FOLDER%\source-code\data\patches\custom_freeplay_text_example.p %TMP%\full\patches\
@@ -17,12 +17,6 @@ Skip=0
No_GPU_Dialog=0
# Sets the dark colour scheme in the launcher.
Dark_Launcher=0
# Enables acrylic blur in the launcher on Windows 10 20H2 or later.
Acrylic_Blur=0
#Ignores some OpenGL-related errors. Don't use both patches at the same time unless you're know what you're doing
OpenGL_Patch_A=0
#Ignores some OpenGL-related errors. Don't use both patches at the same time unless you're know what you're doing
OpenGL_Patch_B=0
# Command line arguments
Command_Line=
# Launches divahook.bat/start.bat intead of diva.exe.
@@ -90,8 +84,6 @@ Card=0
Hardware_Slider=0
#Enable custom patches
Custom_Patches=1
#Prevent data deletion
Prevent_Data_Deletion=0
[Graphics]
# Lag Compensation
@@ -63,6 +63,7 @@ MENU_CIRCLE = Spacebar
TOON = F9
COIN = F10
WIREFRAME = Backspace
# Touch Slider:
LEFT_SIDE_SLIDE_LEFT = Q, Ds4_L_Stick_Left, XINPUT_LLEFT
@@ -94,6 +95,7 @@ RIGHT_SIDE_SLIDE_RIGHT = O, Ds4_R_Stick_Right, XINPUT_RRIGHT
# - Special Keys
# "Enter", "Tab", "Backspace", "Spacebar", "Insert", "Delete", "Home", "End", "PageUp", "PageDown", "Escape"
# "Comma", "Period", "Colon", "Slash", "Tilde", "LeftBracket", "Backslash", "RightBracket", "SingleDoubleQuote", "OEM_8"
# --- MOUSE BUTTON NAMES: ---
# "MouseLeft", "MouseMiddle", "MouseRight", "MouseX1", "MouseX2"
+1 -1
View File
@@ -798,7 +798,7 @@ void Init()
stream.close();
}
const std::filesystem::path databank_template = L"ram\\databank_template";
const std::filesystem::path databank_template = L"ram\\databank_template_v2";
const std::filesystem::path databank = L"ram\\databank";
if (!std::filesystem::exists(databank)&&std::filesystem::exists(databank_template))
{
@@ -152,7 +152,7 @@ VTABLE_HOOK(HRESULT, IMFTransform, ProcessMessage, MFT_MESSAGE_TYPE eMessage, UL
static bool warn = false;
if (!warn)
{
MessageBoxW(0, L"Your system supports DXVA hardware decoding.\nDivaMovie will be disabled.\n\nIt is highly recommended to restart the game now.", L"DivaMovie", MB_ICONWARNING);
MessageBoxW(0, L"Your system supports DXVA hardware decoding and Force Hybrid Decoding is disabled.\nDivaMovie will be disabled.\n\nIt is HIGHLY recommended to restart the game now.", L"DivaMovie", MB_ICONINFORMATION);
CSimpleIniW ini_reader;
ini_reader.SetUnicode(false);
@@ -174,8 +174,9 @@ ConfigOptionBase* graphicsArray[] = {
new BooleanOption(L"reflections", GRAPHICS_SECTION, CONFIG_FILE, L"Reflections", L"Enable or disable reflections.", true, false),
new ResolutionOption(L"reflect_res_width", L"reflect_res_height", GRAPHICS_SECTION, CONFIG_FILE, L"Reflection Res:", L"Sets the reflection buffer resolution (instead of 512x256).", resolution(512, 256), std::vector<resolution>({resolution(256,256), resolution(512,256), resolution(512,512), resolution(1024,1024), resolution(2048,2048), resolution(4096,4096)}), true, RESOPT_NONE),
new ResolutionOption(L"refract_res_width", L"refract_res_height", GRAPHICS_SECTION, CONFIG_FILE, L"Refraction Res:", L"Sets the refraction buffer resolution (instead of 512x256).", resolution(512, 256), std::vector<resolution>({resolution(256,256), resolution(512,256), resolution(512,512), resolution(1024,1024), resolution(2048,2048), resolution(4096,4096)}), true, RESOPT_NONE),
new NumericOption(L"gamma", GRAPHICS_SECTION, CONFIG_FILE, L"Gamma:", L"Increase to darken shadows.\nSet to 125 for a console-like experience.\n\nDefault: 0 or 100", 100, 0, 200),
new BooleanOption(L"shadows", GRAPHICS_SECTION, CONFIG_FILE, L"Shadows", L"Enable or disable shadows.", true, false),
new ResolutionOption(L"shadow_res_width", L"shadow_res_height", GRAPHICS_SECTION, CONFIG_FILE, L"Shadow Res:", L"Sets the shadow buffer resolution (instead of 2048x2048).", resolution(2048, 2048), std::vector<resolution>({resolution(256,256), resolution(512,512), resolution(1024,1024), resolution(2048,2048), resolution(4096,4096), resolution(8192,8192)}), true, RESOPT_NONE),
new NumericOption(L"gamma", GRAPHICS_SECTION, CONFIG_FILE, L"Gamma:", L"Increase to darken shadows.\nSet to 125 for a console-like experience.\n\nDefault: 0 or 100", 100, 0, 200),
new BooleanOption(L"punchthrough", GRAPHICS_SECTION, CONFIG_FILE, L"Transparent Meshes", L"Show transparent meshes.", true, false),
new BooleanOption(L"glare", GRAPHICS_SECTION, CONFIG_FILE, L"Glare", L"Enable or disable glare.", true, false),
new BooleanOption(L"shader", GRAPHICS_SECTION, CONFIG_FILE, L"Shader", L"Enable or disable high-quality shaders.", true, false),
@@ -232,7 +233,7 @@ ConfigOptionBase* optionsArray[] = {
new BooleanOption(L"hide_volume", PATCHES_SECTION, CONFIG_FILE, L"Hide Volume Buttons", L"Hide the volume and SE control buttons.", false, false),
new BooleanOption(L"no_pv_ui", PATCHES_SECTION, CONFIG_FILE, L"Disable PV UI", L"Remove the photo controls during PV playback.", false, false),
new BooleanOption(L"hide_pv_watermark", PATCHES_SECTION, CONFIG_FILE, L"Hide PV Watermark", L"Hide the watermark that's usually shown in PV viewing mode.", false, false),
new DropdownOption(L"status_icons", PATCHES_SECTION, CONFIG_FILE, L"Top-Right Corner Icons:", L"Set the state of card reader and network status icons.", 3, std::vector<LPCWSTR>({ L"Default", L"Hidden", L"Error", L"OK", L"Partial OK" })),
new DropdownOption(L"status_icons", PATCHES_SECTION, CONFIG_FILE, L"Top-Right Network Icons:", L"Set the state of card reader and network status icons.", 3, std::vector<LPCWSTR>({ L"Default", L"Hidden", L"Error", L"OK", L"Partial OK" })),
new BooleanOption(L"no_lyrics", PATCHES_SECTION, CONFIG_FILE, L"Disable Lyrics", L"Disable showing lyrics.", false, false),
new BooleanOption(L"no_error", PATCHES_SECTION, CONFIG_FILE, L"Disable Error Banner", L"Disable the error banner on the attract screen.", true, false),
new BooleanOption(L"hide_freeplay", PATCHES_SECTION, CONFIG_FILE, L"Hide \"FREE PLAY\"/\"CREDIT(S)\"", L"Hide the \"FREE PLAY\"/\"CREDIT(S)\" text.", false, false),
@@ -250,21 +251,21 @@ ConfigOptionBase* optionsArray[] = {
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new OptionMetaSectionLabel(L"Advanced Compatibility"),
new BooleanOption(L"opengl_patch_a", LAUNCHER_SECTION, CONFIG_FILE, L"OpenGL Patch A", L"Ignores some OpenGL-related errors. Don't use both patches at the same time unless you're know what you're doing.", false, false),
new BooleanOption(L"opengl_patch_b", LAUNCHER_SECTION, CONFIG_FILE, L"OpenGL Patch B", L"Ignores some OpenGL-related errors. Don't use both patches at the same time unless you're know what you're doing.", false, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
//new OptionMetaSectionLabel(L"Advanced Compatibility"),
//new BooleanOption(L"opengl_patch_a", LAUNCHER_SECTION, CONFIG_FILE, L"OpenGL Patch A", L"Ignores some OpenGL-related errors. Don't use both patches at the same time unless you're know what you're doing.", false, false),
//new BooleanOption(L"opengl_patch_b", LAUNCHER_SECTION, CONFIG_FILE, L"OpenGL Patch B", L"Ignores some OpenGL-related errors. Don't use both patches at the same time unless you're know what you're doing.", false, false),
//new OptionMetaSeparator(),
//new OptionMetaSpacer(8),
new OptionMetaSectionLabel(L"Loader"),
new BooleanOption(L"custom_patches", PATCHES_SECTION, CONFIG_FILE, L"Enable Custom Patches", L"Enables all custom patches.", true, false),
new BooleanOption(L"prevent_data_deletion", PATCHES_SECTION, CONFIG_FILE, L"Prevent Data Deletion", L"Prevents the game from deleting files.", false, false),
//new BooleanOption(L"prevent_data_deletion", PATCHES_SECTION, CONFIG_FILE, L"Prevent Data Deletion", L"Prevents the game from deleting files.", false, false),
new OptionMetaSeparator(),
new OptionMetaSpacer(8),
new OptionMetaSectionLabel(L"Launcher"),
new BooleanOption(L"dark_launcher", LAUNCHER_SECTION, CONFIG_FILE, L"Dark Launcher", L"Sets the dark colour scheme in the launcher.", false, false),
new BooleanOption(L"acrylic_blur", LAUNCHER_SECTION, CONFIG_FILE, L"Acrylic Blur", L"Enables acrylic blur in the launcher on Windows 10 20H2 or later.", false, false),
//new BooleanOption(L"acrylic_blur", LAUNCHER_SECTION, CONFIG_FILE, L"Acrylic Blur", L"Enables acrylic blur in the launcher on Windows 10 20H2 or later.", false, false),
new BooleanOption(L"no_gpu_dialog", LAUNCHER_SECTION, CONFIG_FILE, L"Disable GPU Warning", L"Disables the warning dialog for unsupported GPUs.", false, false),
//new BooleanOption(L"ignore_exe_checksum", PATCHES_SECTION, CONFIG_FILE, L"Ignore exe checksum", L"Use at your own risk.", false, false),
new StringOption(L"command_line", LAUNCHER_SECTION, CONFIG_FILE, L"Command Line:", L"Allows setting command line parameters for the game when using the launcher.\nDisabling the launcher will bypass this.", L"", false),
+23 -22
View File
@@ -245,9 +245,25 @@ namespace Launcher {
{
if (wineVersion == "" && (driver_version_major < 21 || (driver_version_major == 21 && driver_version_minor < 6)))
{
this->labelGPU->Text += L"Driver has known issues.";
GPUIssueText = L"The graphics driver you're using has known issues. Please install the latest driver from your GPU vendor's website.";
if (driver_version_major == 21 && driver_version_minor == 5)
{
this->labelGPU->Text += L"Driver may have issues.";
GPUIssueText = L"The graphics driver you're using should be able to play movies without issues, but may crash while loading a song after playing multiple stages in one session.\nIf possible, please install the latest driver from your GPU vendor's website.\nHowever, note that if your GPU is old, you may not be able to install a more recent driver.";
}
else
{
this->labelGPU->Text += L"Driver has known issues.";
GPUIssueText = L"The graphics driver you're using has known issues. Movies may not play back correctly.\nPlease install the latest driver from your GPU vendor's website.";
showGpuDialog = true;
}
this->labelGPU->LinkColor = System::Drawing::Color::Orange;
}
else if (wineVersion == "" && (driver_version_major > 22 || (driver_version_major == 22 && driver_version_minor > 6)))
{
this->labelGPU->Text += "Issues: Unsupported GPU driver.";
GPUIssueText = "The graphics driver you're using is too new for Novidia.\nThe game will not run unless you install driver version 22.6.1 or earlier from AMD's website.";
this->labelGPU->LinkColor = System::Drawing::Color::Red;
showGpuDialog = true;
}
else
@@ -282,7 +298,7 @@ namespace Launcher {
}
else if (gpuModel->StartsWith("TU") || gpuModel->StartsWith("GV")) // let's assume Volta is like Turing for now
{
this->labelGPU->Text += L"Issues: Ampere GPU detected! Possible noise.\n(Click for more information)";
this->labelGPU->Text += L"Issues: Turing GPU detected! Possible noise.\n(Click for more information)";
GPUIssueText = L"On Turing GPUs (GTX 16xx/RTX 20xx), some important character shaders have issues resulting in lines/noise.\nPlease make sure the ShaderPatch plugin is enabled.";
this->labelGPU->LinkColor = System::Drawing::Color::Yellow;
}
@@ -386,9 +402,6 @@ namespace Launcher {
void updateStyle()
{
int nDarkLauncher = GetPrivateProfileIntW(LAUNCHER_SECTION, L"dark_launcher", FALSE, CONFIG_FILE);
int nAcrylicLauncher = GetPrivateProfileIntW(LAUNCHER_SECTION, L"acrylic_blur", FALSE, CONFIG_FILE);
bool useAcrylic = nAcrylicLauncher && setBlur(hWnd, AccentState::ACCENT_ENABLE_ACRYLICBLURBEHIND);
Color colourBg, colourBg2, colourFg;
@@ -407,22 +420,10 @@ namespace Launcher {
colourBg2 = Color::FromArgb(242, 242, 242);
}
if (useAcrylic)
{
this->button_Discord->BackColor = colourBg2;
this->button_github->BackColor = colourBg2;
this->button_Wiki->BackColor = colourBg2;
colourBg2 = Color::FromArgb(255, 0, 255);
}
else
{
setBlur(hWnd, AccentState::ACCENT_DISABLED);
this->button_Discord->BackColor = Color::Transparent;
this->button_github->BackColor = Color::Transparent;
this->button_Wiki->BackColor = Color::Transparent;
}
this->button_Discord->BackColor = Color::Transparent;
this->button_github->BackColor = Color::Transparent;
this->button_Wiki->BackColor = Color::Transparent;
this->tabPage_Resolution->BackColor = colourBg;
this->tabPage_Resolution->ForeColor = colourFg;
@@ -938,7 +939,7 @@ private: System::Windows::Forms::Button^ button_Wiki;
this->MaximizeBox = false;
this->Name = L"ui";
this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
this->Text = L"PD Launcher (2.6.5a)";
this->Text = L"PD Launcher -- TEST VERSION --";
this->TransparencyKey = System::Drawing::Color::Magenta;
this->FormClosing += gcnew System::Windows::Forms::FormClosingEventHandler(this, &ui::Ui_FormClosing);
this->FormClosed += gcnew System::Windows::Forms::FormClosedEventHandler(this, &ui::Ui_FormClosed);
@@ -149,7 +149,7 @@ class PatchApplier600 : public PatchApplier {
if (nPDLoaderText && !nHideFreeplay)
{
InjectCode((void*)0x00000001409BC188, { 0x50, 0x44, 0x20, 0x4C, 0x6F, 0x61, 0x64, 0x65, 0x72, 0x20, 0x00 });
InjectCode((void*)0x00000001409BC188, { 'U', 'N', 'S', 'U', 'P', 'P', 'O', 'R', 'T', 'E', 'D', '\0' });
printf("[Patches] Show PD Loader text\n");
}
}
@@ -308,16 +308,16 @@ class PatchApplier600 : public PatchApplier {
printf("[Patches] Enhanced Stage Manager enabled\n");
}
// OpenGL Patches
if (nOGLPatchA)
{
// (call cs:glGetError) -> (xor eax, eax); (nop); (nop); (nop); (nop);
InjectCode((void*)0x000000014067842D, { 0x31, 0xC0, 0x90, 0x90, 0x90, 0x90 });
}
if (nOGLPatchB)
{
// (js loc_14069BC32) -> (nop)...
InjectCode((void*)0x0000000140676D04, { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
}
//if (nOGLPatchA)
//{
// // (call cs:glGetError) -> (xor eax, eax); (nop); (nop); (nop); (nop);
// InjectCode((void*)0x000000014067842D, { 0x31, 0xC0, 0x90, 0x90, 0x90, 0x90 });
//}
//if (nOGLPatchB)
//{
// // (js loc_14069BC32) -> (nop)...
// InjectCode((void*)0x0000000140676D04, { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
//}
// Unlock PSEUDO modules (which will all default to Miku, unless we also patch them to match the first performer)
if (nUnlockPseudo)
{
@@ -167,7 +167,7 @@ class PatchApplier710 : public PatchApplier {
if (nPDLoaderText && !nHideFreeplay)
{
InjectCode((void*)0x00000001409F61F0, { 0x50, 0x44, 0x20, 0x4C, 0x6F, 0x61, 0x64, 0x65, 0x72,
0x20, 0x32, 0x2E, 0x36, 0x2E, 0x35, 0x61,
0x20, 't', 'e', 's', 't',
0x00});
printf("[Patches] Show PD Loader text\n");
}
@@ -325,18 +325,20 @@ class PatchApplier710 : public PatchApplier {
ESM[2] = nEStageManagerEncore;
printf("[Patches] Enhanced Stage Manager enabled\n");
}
// OpenGL Patches
if (nOGLPatchA)
{
// (call cs:glGetError) -> (xor eax, eax); (nop); (nop); (nop); (nop);
InjectCode((void*)0x000000014069D21D, { 0x31, 0xC0, 0x90, 0x90, 0x90, 0x90 });
}
if (nOGLPatchB)
{
// (js loc_14069BC32) -> (nop)...
InjectCode((void*)0x000000014069BAF4, { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
}
//// OpenGL Patches
//if (nOGLPatchA)
//{
// // (call cs:glGetError) -> (xor eax, eax); (nop); (nop); (nop); (nop);
// InjectCode((void*)0x000000014069D21D, { 0x31, 0xC0, 0x90, 0x90, 0x90, 0x90 });
//}
//if (nOGLPatchB)
//{
// // (js loc_14069BC32) -> (nop)...
// InjectCode((void*)0x000000014069BAF4, { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
//}
//
// Unlock PSEUDO modules (which will all default to Miku, unless we also patch them to match the first performer)
if (nUnlockPseudo)
{
@@ -596,58 +598,59 @@ class PatchApplier710 : public PatchApplier {
InjectCode((void*)0x140A07920, { 0x00 }); // ignore objset
}
// Prevent data deletion
if (nNoDelete)
{
InjectCode((void*)(0x1406FEF80 + 0x1DB), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407113F0 + 0x13C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140712270 + 0x6C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140712580 + 0x4C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140712580 + 0x7C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140713470 + 0x104), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407135B0 + 0x102), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407135B0 + 0x135), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407135B0 + 0x232), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140713810 + 0x3E8), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140713D00 + 0x677), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407168A0 + 0x9C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407168A0 + 0x1D2), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407168A0 + 0x218), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407168A0 + 0x22A), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140720910 + 0x25C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140723EE0 + 0xEC), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140870DE0 + 0x4), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1406FEF80 + 0x1DB), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407113F0 + 0x13C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140712270 + 0x6E), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140712580 + 0x4C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140712580 + 0x7C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140713470 + 0x104), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407135B0 + 0x102), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407135B0 + 0x135), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407135B0 + 0x232), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140713810 + 0x3E8), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140713D00 + 0x677), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407168A0 + 0x9C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407168A0 + 0x1D2), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407168A0 + 0x218), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407168A0 + 0x22A), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140720910 + 0x25C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140723EE0 + 0xEC), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407168A0 + 0x9C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140870DE0 + 0x4), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x14081B6A4), { 0xC3 });
InjectCode((void*)(0x1406E1090 + 0x43C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140718250 + 0x176), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140718750 + 0xC9), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407193E0 + 0xFC), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1406E1090 + 0x43C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140718250 + 0x176), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x140718750 + 0xC9), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x1407193E0 + 0xFC), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
InjectCode((void*)(0x14081B67A), { 0xC3 });
}
//// Prevent data deletion
//if (nNoDelete)
//{
// InjectCode((void*)(0x1406FEF80 + 0x1DB), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407113F0 + 0x13C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140712270 + 0x6C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140712580 + 0x4C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140712580 + 0x7C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140713470 + 0x104), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407135B0 + 0x102), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407135B0 + 0x135), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407135B0 + 0x232), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140713810 + 0x3E8), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140713D00 + 0x677), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407168A0 + 0x9C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407168A0 + 0x1D2), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407168A0 + 0x218), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407168A0 + 0x22A), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140720910 + 0x25C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140723EE0 + 0xEC), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140870DE0 + 0x4), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1406FEF80 + 0x1DB), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407113F0 + 0x13C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140712270 + 0x6E), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140712580 + 0x4C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140712580 + 0x7C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140713470 + 0x104), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407135B0 + 0x102), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407135B0 + 0x135), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407135B0 + 0x232), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140713810 + 0x3E8), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140713D00 + 0x677), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407168A0 + 0x9C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407168A0 + 0x1D2), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407168A0 + 0x218), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407168A0 + 0x22A), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140720910 + 0x25C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140723EE0 + 0xEC), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407168A0 + 0x9C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140870DE0 + 0x4), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x14081B6A4), { 0xC3 });
// InjectCode((void*)(0x1406E1090 + 0x43C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140718250 + 0x176), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140718750 + 0xC9), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407193E0 + 0xFC), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1406E1090 + 0x43C), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140718250 + 0x176), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x140718750 + 0xC9), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x1407193E0 + 0xFC), { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
// InjectCode((void*)(0x14081B67A), { 0xC3 });
//}
// patch refract and reflect buffer sizes
if (nRefractResWidth != 512 || nRefractResHeight != 256)
@@ -702,6 +705,13 @@ class PatchApplier710 : public PatchApplier {
printf("[Patches] Reflection resolution patched.\n");
}
if (nShadowResWidth != 2048 || nShadowResHeight != 2048)
{
InjectUint((void*)(0x140A81E04), nShadowResHeight);
InjectUint((void*)(0x140A81E08), nShadowResWidth);
printf("[Patches] Shadow resolution patched.\n");
}
// lag compensation
if (nLagCompensation > 0 && nLagCompensation <= 500)
+10 -3
View File
@@ -47,6 +47,14 @@ void InjectCode(void* address, const std::vector<uint8_t> data)
VirtualProtect(address, byteCount, oldProtect, nullptr);
}
void InjectUint(void* address, const uint32_t data)
{
DWORD oldProtect;
VirtualProtect(address, 4, PAGE_EXECUTE_READWRITE, &oldProtect);
memcpy(address, &data, 4);
VirtualProtect(address, 4, oldProtect, nullptr);
}
// patchMovieExt will modify an extension to mp4 only if the file exists on disk as an mp4
void patchMovieExt(std::string moviefile, void* address)
{
@@ -98,8 +106,6 @@ auto nEStageManagerEncore = GetPrivateProfileIntW(L"patches", L"enhanced_stage_m
auto nUnlockPseudo = GetPrivateProfileIntW(L"patches", L"unlock_pseudo", FALSE, CONFIG_FILE);
auto nCard = GetPrivateProfileIntW(L"patches", L"card", TRUE, CONFIG_FILE);
auto nHardwareSlider = GetPrivateProfileIntW(L"patches", L"hardware_slider", FALSE, CONFIG_FILE);
auto nOGLPatchA = GetPrivateProfileIntW(L"patches", L"opengl_patch_a", FALSE, CONFIG_FILE);
auto nOGLPatchB = GetPrivateProfileIntW(L"patches", L"opengl_patch_b", FALSE, CONFIG_FILE);
auto nTAA = GetPrivateProfileIntW(L"graphics", L"taa", TRUE, CONFIG_FILE);
auto nMLAA = GetPrivateProfileIntW(L"graphics", L"mlaa", TRUE, CONFIG_FILE);
auto nDoF = GetPrivateProfileIntW(L"graphics", L"dof", TRUE, CONFIG_FILE);
@@ -123,10 +129,11 @@ auto nPunchthrough = GetPrivateProfileIntW(L"graphics", L"punchthrough", TRUE, C
auto nGlare = GetPrivateProfileIntW(L"graphics", L"glare", TRUE, CONFIG_FILE);
auto nShader = GetPrivateProfileIntW(L"graphics", L"shader", TRUE, CONFIG_FILE);
auto n2D = GetPrivateProfileIntW(L"graphics", L"2D", FALSE, CONFIG_FILE);
auto nNoDelete = GetPrivateProfileIntW(L"patches", L"prevent_data_deletion", FALSE, CONFIG_FILE);
auto nReflectResWidth = GetPrivateProfileIntW(L"graphics", L"reflect_res_width", 512, CONFIG_FILE);
auto nReflectResHeight = GetPrivateProfileIntW(L"graphics", L"reflect_res_height", 256, CONFIG_FILE);
auto nRefractResWidth = GetPrivateProfileIntW(L"graphics", L"refract_res_width", 512, CONFIG_FILE);
auto nRefractResHeight = GetPrivateProfileIntW(L"graphics", L"refract_res_height", 256, CONFIG_FILE);
auto nShadowResWidth = GetPrivateProfileIntW(L"graphics", L"shadow_res_width", 2048, CONFIG_FILE);
auto nShadowResHeight = GetPrivateProfileIntW(L"graphics", L"shadow_res_height", 2048, CONFIG_FILE);
auto nLagCompensation = GetPrivateProfileIntW(L"graphics", L"lag_compensation", 0, CONFIG_FILE);
auto nUseDivahookBat = GetPrivateProfileIntW(L"launcher", L"use_divahook_bat", FALSE, CONFIG_FILE);
@@ -8,6 +8,7 @@
#include "../../Input/Bindings/XinputBinding.h"
#include "../../Input/Bindings/MouseBinding.h"
#include "../../Input/Bindings/Ds4Binding.h"
#include "../../Input/Bindings/DVLBinding.h"
#include "../../Input/KeyConfig/Config.h"
#include "../../Utilities/Operations.h"
#include "../../Utilities/EnumBitwiseOperations.h"
@@ -83,6 +84,7 @@ namespace TLAC::Components
CoinBinding = new Binding();
ToonBinding = new Binding();
WireframeBinding = new Binding();
FileSystem::ConfigFile configFile(framework::GetModuleDirectory(), KEY_CONFIG_FILE_NAME);
configFile.OpenRead();
@@ -103,8 +105,18 @@ namespace TLAC::Components
Config::BindConfigKeys(configFile.ConfigMap, "MENU_CIRCLE", *MenuCircleBinding, { "D", "L", "Spacebar" });
Config::BindConfigKeys(configFile.ConfigMap, "TOON", *ToonBinding, { "F9" });
Config::BindConfigKeys(configFile.ConfigMap, "COIN", *CoinBinding, { "F10" });
Config::BindConfigKeys(configFile.ConfigMap, "WIREFRAME", *WireframeBinding, { "Backspace" });
mouseScrollPvSelection = configFile.GetBooleanValue("mouse_scroll_pv_selection");
TestBinding->AddBinding(new DivallerBinding(DivallerButton::DVL_L3));
ServiceBinding->AddBinding(new DivallerBinding(DivallerButton::DVL_L2));
CoinBinding->AddBinding(new DivallerBinding(DivallerButton::DVL_L1));
StartBinding->AddBinding(new DivallerBinding(DivallerButton::DVL_FN));
SankakuBinding->AddBinding(new DivallerBinding(DivallerButton::DVL_TRIANGLE));
ShikakuBinding->AddBinding(new DivallerBinding(DivallerButton::DVL_SQUARE));
BatsuBinding->AddBinding(new DivallerBinding(DivallerButton::DVL_CROSS));
MaruBinding->AddBinding(new DivallerBinding(DivallerButton::DVL_CIRCLE));
}
void InputEmulator::Update()
@@ -176,6 +188,9 @@ namespace TLAC::Components
if (ToonBinding->AnyTapped())
toggleNpr1();
if (WireframeBinding->AnyTapped())
toggleWireframe();
}
HoldState InputEmulator::GetHoldState()
@@ -467,4 +482,28 @@ namespace TLAC::Components
printf("[TLAC] NPR1 restored\n");
}
}
void InputEmulator::toggleWireframe()
{
static bool wireframeEnabled = false;
if (!wireframeEnabled)
{
// inject samyuu's wireframe code
InjectCode((void*)0x00000000140500BE6, { 0xBA, 0x01, 0x1B, 0x00, 0x00, // mov edx,00001B01
0xB9, 0x08, 0x04, 0x00, 0x00, // mov ecx,00000408
0xE8, 0xE1, 0x5A, 0x3B, 0x00, // call 1408B66D6
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
wireframeEnabled = true;
printf("[TLAC] Wireframe enabled\n");
}
else
{
InjectCode((void*)0x00000000140500BE6, { 0xB9, 0x1C, 0x00, 0x00, 0x00, 0xE8, 0x30, 0x7C, 0xF3, 0xFF, 0xB9, 0x1B, 0x00, 0x00, 0x00, 0x8B, 0xD8, 0xE8, 0x24, 0x7C, 0xF3, 0xFF, 0xB9, 0x1A, 0x00, 0x00, 0x00 });
wireframeEnabled = false;
printf("[TLAC] Wireframe disabled\n");
}
}
}
@@ -40,6 +40,7 @@ namespace TLAC::Components
Input::Binding* CoinBinding;
Input::Binding* ToonBinding;
Input::Binding* WireframeBinding;
InputEmulator();
~InputEmulator();
@@ -112,5 +113,6 @@ namespace TLAC::Components
void addCoin();
void toggleNpr1();
void toggleWireframe();
};
}
@@ -7,6 +7,7 @@
#include "../../Input/Bindings/KeyboardBinding.h"
#include "../../Input/KeyConfig/Config.h"
#include "../../Input/DirectInput/Ds4/DualShock4.h"
#include "../../Input/Divaller/Divaller.h"
#include "../../FileSystem/ConfigFile.h"
#include "../../Utilities/Math.h"
#include <algorithm>
@@ -100,7 +101,11 @@ namespace TLAC::Components
if (!componentsManager->GetUpdateGameInput() || componentsManager->IsDwGuiActive() || (!enableInMenus && !(*(GameState*)CURRENT_GAME_STATE_ADDRESS == GS_GAME && *(SubGameState*)CURRENT_GAME_SUB_STATE_ADDRESS == SUB_GAME_MAIN)))
return;
if (usePs4OfficialSlider)
if (Input::Divaller::GetInstance() != nullptr)
{
ApplyBitfieldState(Input::Divaller::GetInstance()->GetSlider());
}
else if (usePs4OfficialSlider)
{
DualShock4* ds4 = DualShock4::GetInstance();
if (ds4 == nullptr)
@@ -140,7 +145,7 @@ namespace TLAC::Components
void TouchSliderEmulator::OnFocusLost()
{
if (usePs4OfficialSlider)
if (usePs4OfficialSlider || Input::Divaller::GetInstance() != nullptr)
sliderState->ResetSensors(TouchSliderState::SENSOR_SET_MODE_RAW);
else
sliderState->ResetSensors(TouchSliderState::SENSOR_SET_MODE_SECTIONS);
@@ -0,0 +1,29 @@
#include "DVLBinding.h"
namespace TLAC::Input
{
#define DivallerInstanceCheckDefault(checkFunc) (Divaller::InstanceInitialized() ? Divaller::GetInstance()->checkFunc : false)
DivallerBinding::DivallerBinding(DivallerButton button) : Button(button)
{
}
DivallerBinding::~DivallerBinding()
{
}
bool DivallerBinding::IsDown()
{
return DivallerInstanceCheckDefault(IsDown(Button));
}
bool DivallerBinding::IsTapped()
{
return DivallerInstanceCheckDefault(IsTapped(Button));
}
bool DivallerBinding::IsReleased()
{
return DivallerInstanceCheckDefault(IsReleased(Button));
}
}
@@ -0,0 +1,19 @@
#pragma once
#include "IInputBinding.h"
#include "../Divaller/Divaller.h"
namespace TLAC::Input
{
class DivallerBinding : public IInputBinding
{
public:
DivallerButton Button;
DivallerBinding(DivallerButton button);
~DivallerBinding();
bool IsDown() override;
bool IsTapped() override;
bool IsReleased() override;
};
}
@@ -0,0 +1,272 @@
#include "Divaller.h"
#include "../../framework.h"
#include "DivallerButton.h"
#include "DivallerState.h"
#include <stdio.h>
#include <string>
#include <iostream>
namespace TLAC::Input
{
Divaller *Divaller::instance;
Divaller::Divaller()
{
memset(outputBuffer, 0, sizeof(outputBuffer));
outputBuffer[0] = 0x44;
outputBuffer[1] = 0x4c;
outputBuffer[2] = 0x61;
}
Divaller::~Divaller()
{
CloseHandle(hDeviceHandle);
}
bool Divaller::TryInitializeInstance()
{
if (InstanceInitialized())
return true;
Divaller *divaller = new Divaller();
BOOL success = divaller->Initialize();
instance = success ? divaller : nullptr;
if (!success)
delete divaller;
return success;
}
bool Divaller::Initialize()
{
HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_USB_DEVICE, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
printf("[TLAC] Divaller::Initialize(): SetupDiGetClassDevs returned INVALID_HANDLE_VALUE\n");
return false;
}
LPCWSTR devPath = NULL;
for (size_t i = 0;; i++)
{
SP_DEVICE_INTERFACE_DATA device_interface_data = {0};
device_interface_data.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
BOOL success = SetupDiEnumDeviceInterfaces(
hDevInfo,
NULL,
&GUID_DEVINTERFACE_USB_DEVICE,
(DWORD)i,
&device_interface_data);
if (!success)
{
break;
}
ULONG required_length = 0;
success = SetupDiGetDeviceInterfaceDetail(
hDevInfo,
&device_interface_data,
NULL,
0,
&required_length,
NULL);
UINT8 *interface_data = (UINT8 *)calloc(required_length, sizeof(UINT8));
PSP_DEVICE_INTERFACE_DETAIL_DATA device_interface_detail_data = (PSP_DEVICE_INTERFACE_DETAIL_DATA)interface_data;
device_interface_detail_data->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
ULONG actual_length = required_length;
success = SetupDiGetDeviceInterfaceDetail(
hDevInfo,
&device_interface_data,
device_interface_detail_data,
actual_length,
&required_length,
NULL);
if (!success)
{
continue;
}
if (
wcsstr(device_interface_detail_data->DevicePath, L"vid_0e8f") == 0 ||
wcsstr(device_interface_detail_data->DevicePath, L"pid_2213") == 0)
{
continue;
}
devPath = device_interface_detail_data->DevicePath;
break;
}
if (devPath == NULL)
{
SetupDiDestroyDeviceInfoList(hDevInfo);
return false;
}
hDeviceHandle = CreateFile(
devPath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if (hDeviceHandle == INVALID_HANDLE_VALUE)
{
printf("[TLAC] Divaller::Initialize(): Open device failed.\n");
SetupDiDestroyDeviceInfoList(hDevInfo);
return false;
}
if (!WinUsb_Initialize(hDeviceHandle, &hInterfaceHandle))
{
printf("[TLAC] Divaller::Initialize(): WinUsb_Initialize failed.\n");
std::cout << GetLastError() << std::endl;
SetupDiDestroyDeviceInfoList(hDevInfo);
CloseHandle(hDeviceHandle);
return false;
}
USB_INTERFACE_DESCRIPTOR USBInterfaceDescriptor;
if (!WinUsb_QueryInterfaceSettings(hInterfaceHandle, 0, &USBInterfaceDescriptor))
{
std::cout << GetLastError() << std::endl;
SetupDiDestroyDeviceInfoList(hDevInfo);
CloseHandle(hDeviceHandle);
return false;
}
SetupDiDestroyDeviceInfoList(hDevInfo);
return true;
}
bool Divaller::PollInput()
{
lastState = currentState;
ULONG len = 0;
memset(currentState.state, 0, sizeof(currentState.state));
BOOL bResult = WinUsb_ReadPipe(hInterfaceHandle, (UCHAR)132, currentState.state, _countof(currentState.state), &len, nullptr);
if (!bResult || currentState.state[0] != 0x42 || currentState.state[1] != 0x56 || currentState.state[2] != 0x5a)
{
printf("[TLAC] Divaller::PollInput(): WinUsb_ReadPipe failed.\n");
std::cout << GetLastError() << std::endl;
}
SetLED();
return bResult;
}
bool Divaller::SetLED()
{
outputBuffer[3] &= 0x0F; // Reset Button LED
outputBuffer[3] |= (!(*buttonLed >> 1 & 0x0001)) << 4; // SQUARE
outputBuffer[3] |= (!(*buttonLed >> 3 & 0x0001)) << 5; // CIRCLE
outputBuffer[3] |= (!(*buttonLed & 0x0001)) << 6; // TRIANGLE
outputBuffer[3] |= (!(*buttonLed >> 2 & 0x0001)) << 7; // CROSS
if (*sliderLedInit && !sliderLedData)
{
sliderLedData = reinterpret_cast<UCHAR *>(*(uint64_t *)(0x14cc5de40 + 0x68) + 0x189c);
}
if (sliderLedData)
{
for (int n = 0; n < 32; n++)
{
// LED number + 3 bytes header + color offset
outputBuffer[(31 - n) * 3 + 3 + 3] = sliderLedData[n * 3 + 1]; // BLUE
outputBuffer[(31 - n) * 3 + 3 + 2] = sliderLedData[n * 3 + 2]; // RED
outputBuffer[(31 - n) * 3 + 3 + 1] = sliderLedData[n * 3 + 3]; // GREEN
}
}
ULONG len = 0;
BOOL bResult = WinUsb_WritePipe(hInterfaceHandle, (UCHAR)0x03, outputBuffer, 100, &len, NULL);
if (!bResult)
{
printf("[TLAC] Divaller::SetLED(): WinUsb_WritePipe failed.\n");
std::cout << GetLastError() << std::endl;
}
return bResult;
}
bool Divaller::IsDown(DivallerButton button)
{
switch (button)
{
case DivallerButton::DVL_L1:
return (currentState.state[5] >> 0) & 1;
case DivallerButton::DVL_L2:
return (currentState.state[4] >> 7) & 1;
case DivallerButton::DVL_L3:
return (currentState.state[4] >> 6) & 1;
case DivallerButton::DVL_FN:
return (currentState.state[3] >> 1) & 1;
case DivallerButton::DVL_TRIANGLE:
return (currentState.state[3] >> 4) & 1;
case DivallerButton::DVL_SQUARE:
return (currentState.state[3] >> 2) & 1;
case DivallerButton::DVL_CROSS:
return (currentState.state[3] >> 5) & 1;
case DivallerButton::DVL_CIRCLE:
return (currentState.state[3] >> 3) & 1;
}
return false;
}
bool Divaller::IsUp(DivallerButton button)
{
return !IsDown(button);
}
bool Divaller::IsTapped(DivallerButton button)
{
return IsDown(button) && WasUp(button);
}
bool Divaller::IsReleased(DivallerButton button)
{
return IsUp(button) && WasDown(button);
}
bool Divaller::WasDown(DivallerButton button)
{
switch (button)
{
case DivallerButton::DVL_L1:
return (lastState.state[5] >> 0) & 1;
case DivallerButton::DVL_L2:
return (lastState.state[4] >> 7) & 1;
case DivallerButton::DVL_L3:
return (lastState.state[4] >> 6) & 1;
case DivallerButton::DVL_FN:
return (lastState.state[3] >> 1) & 1;
case DivallerButton::DVL_TRIANGLE:
return (lastState.state[3] >> 4) & 1;
case DivallerButton::DVL_SQUARE:
return (lastState.state[3] >> 2) & 1;
case DivallerButton::DVL_CROSS:
return (lastState.state[3] >> 5) & 1;
case DivallerButton::DVL_CIRCLE:
return (lastState.state[3] >> 3) & 1;
}
return false;
}
bool Divaller::WasUp(DivallerButton button)
{
return !WasDown(button);
}
uint32_t Divaller::GetSlider()
{
uint32_t i = 0;
i |= currentState.state[5] >> 4;
i |= currentState.state[6] << 4;
i |= currentState.state[7] << 12;
i |= currentState.state[8] << 20;
i |= currentState.state[9] << 28;
// Reverse the bit order of uint32
i = (i & 0xaaaaaaaa) >> 1 | (i & 0x55555555) << 1;
i = (i & 0xcccccccc) >> 2 | (i & 0x33333333) << 2;
i = (i & 0xf0f0f0f0) >> 4 | (i & 0x0f0f0f0f) << 4;
i = (i & 0xff00ff00) >> 8 | (i & 0x00ff00ff) << 8;
return i >> 16 | i << 16;
};
}
@@ -0,0 +1,52 @@
#pragma once
#include "../IInputDevice.h"
#include "DivallerState.h"
#include "DivallerButton.h"
#include <SetupAPI.h>
#include <initguid.h>
#include <usbiodef.h>
#include <winusb.h>
namespace TLAC::Input
{
class Divaller : public IInputDevice
{
public:
Divaller();
~Divaller();
static bool TryInitializeInstance();
bool Initialize();
bool PollInput() override;
bool SetLED();
bool IsDown(DivallerButton button);
bool IsUp(DivallerButton button);
bool IsTapped(DivallerButton button);
bool IsReleased(DivallerButton button);
bool WasDown(DivallerButton button);
bool WasUp(DivallerButton button);
uint32_t GetSlider();
static inline bool InstanceInitialized() { return instance != nullptr; };
static inline Divaller *GetInstance() { return instance; };
static inline void DeleteInstance()
{
delete instance;
instance = nullptr;
};
private:
static Divaller *instance;
DivallerState lastState;
DivallerState currentState;
WINUSB_INTERFACE_HANDLE hInterfaceHandle;
HANDLE hDeviceHandle;
UCHAR outputBuffer[100];
int *buttonLed = reinterpret_cast<int *>(0x14119b950);
uint64_t *partionLed = reinterpret_cast<uint64_t *>(*(uint64_t *)0x140eda330 + 0xc9);
uint64_t *sliderLedInit = reinterpret_cast<uint64_t *>((uint64_t *)0x14cc5dea8);
UCHAR *sliderLedData = nullptr;
};
}
@@ -0,0 +1,32 @@
#pragma once
namespace TLAC::Input
{
enum DivallerButton : int
{
DVL_SQUARE = 0,
DVL_CROSS = 1,
DVL_CIRCLE = 2,
DVL_TRIANGLE = 3,
DVL_FN = 4,
DVL_L1 = 5,
DVL_L2 = 6,
DVL_L3 = 7,
DVL_R1 = 8,
DVL_R2 = 9,
DVL_R3 = 10,
DVL_UP = 11,
DVL_LEFT = 12,
DVL_DOWN = 13,
DVL_RIGHT = 14,
DVL_PAD = 11,
DVL_SHARE = 12,
DVL_HOME = 13,
DVL_OPTION = 14
};
}
@@ -0,0 +1,10 @@
#pragma once
#include "../../framework.h"
namespace TLAC::Input
{
struct DivallerState
{
uint8_t state[24];
};
}
@@ -26,9 +26,6 @@ namespace TLAC::Input::KeyConfig
{ "Minus", VK_SUBTRACT },
{ "Divide", VK_DIVIDE },
{ "Multiply", VK_MULTIPLY },
{ "Comma", VK_OEM_COMMA },
{ "Period", VK_OEM_PERIOD },
{ "Slash", VK_OEM_2 },
// F-Keys
{ "F1", VK_F1 },
{ "F2", VK_F2 },
@@ -91,7 +88,14 @@ namespace TLAC::Input::KeyConfig
{ "Escape", VK_ESCAPE },
{ "Comma", VK_OEM_COMMA },
{ "Period", VK_OEM_PERIOD },
{ "Colon", VK_OEM_1 },
{ "Slash", VK_OEM_2 },
{ "Tilde", VK_OEM_3 },
{ "LeftBracket", VK_OEM_4 },
{ "Backslash", VK_OEM_5 },
{ "RightBracket", VK_OEM_6 },
{ "SingleDoubleQuote", VK_OEM_7 },
{ "OEM_8", VK_OEM_8 },
// Mouse buttons
{ "MouseLeft", VK_LBUTTON },
{ "MouseMiddle", VK_MBUTTON },
+236 -230
View File
@@ -1,231 +1,237 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<ProjectGuid>{2B5533BB-04A1-424F-9BCA-1CA963B46B7F}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>TLAC</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)</TargetName>
<TargetExt>.dva</TargetExt>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)</TargetName>
<TargetExt>.dva</TargetExt>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;TLAC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<LanguageStandard>stdcpp17</LanguageStandard>
<AdditionalIncludeDirectories>..\..\..\dependencies\PluginConfigApi;..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<AdditionalOptions>-d2FH4- %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<AdditionalDependencies>XINPUT9_1_0.LIB;dinput8.lib;dxguid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>Xinput.h</IgnoreSpecificDefaultLibraries>
<AdditionalLibraryDirectories>..\..\..\dependencies\detours\lib;..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>-d2:-FH4- %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;TLAC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<LanguageStandard>stdcpp17</LanguageStandard>
<AdditionalIncludeDirectories>..\..\..\dependencies\PluginConfigApi;..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>-d2FH4- %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<AdditionalLibraryDirectories>..\..\..\dependencies\detours\lib;..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>XINPUT9_1_0.LIB;dinput8.lib;dxguid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>Xinput.h</IgnoreSpecificDefaultLibraries>
<AdditionalOptions>-d2:-FH4- %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="Components\CameraController.h" />
<ClInclude Include="Components\ComponentsManager.h" />
<ClInclude Include="Components\CustomPlayerData.h" />
<ClInclude Include="Components\DebugComponent.h" />
<ClInclude Include="Components\EmulatorComponent.h" />
<ClInclude Include="Components\FastLoader.h" />
<ClInclude Include="Components\FrameRateManager.h" />
<ClInclude Include="Components\GameState.h" />
<ClInclude Include="Components\GameTargets\HoldState.h" />
<ClInclude Include="Components\GameTargets\TargetHitStates.h" />
<ClInclude Include="Components\GameTargets\TargetInspector.h" />
<ClInclude Include="Components\GameTargets\TargetState.h" />
<ClInclude Include="Components\GameTargets\TargetTypes.h" />
<ClInclude Include="Components\Input\InputBufferType.h" />
<ClInclude Include="Components\Input\InputEmulator.h" />
<ClInclude Include="Components\Input\InputState.h" />
<ClInclude Include="Components\Input\JvsButtons.h" />
<ClInclude Include="Components\Input\TouchPanelEmulator.h" />
<ClInclude Include="Components\Input\TouchPanelState.h" />
<ClInclude Include="Components\Input\TouchSliderEmulator.h" />
<ClInclude Include="Components\Input\TouchSliderState.h" />
<ClInclude Include="Components\Pause.h" />
<ClInclude Include="Components\PlayerData.h" />
<ClInclude Include="Components\PlayerDataManager.h" />
<ClInclude Include="Components\ScaleComponent.h" />
<ClInclude Include="Components\ScoreSaver.h" />
<ClInclude Include="Constants.h" />
<ClInclude Include="FileSystem\ConfigFile.h" />
<ClInclude Include="FileSystem\TextFile.h" />
<ClInclude Include="framework.h" />
<ClInclude Include="Input\Bindings\Binding.h" />
<ClInclude Include="Input\Bindings\Ds4Binding.h" />
<ClInclude Include="Input\Bindings\GuBinding.h" />
<ClInclude Include="Input\Bindings\IInputBinding.h" />
<ClInclude Include="Input\Bindings\KeyboardBinding.h" />
<ClInclude Include="Input\Bindings\MouseBinding.h" />
<ClInclude Include="Input\Bindings\XinputBinding.h" />
<ClInclude Include="Input\DirectInput\Controller.h" />
<ClInclude Include="Input\DirectInput\DirectInput.h" />
<ClInclude Include="Input\DirectInput\DirectInputDevice.h" />
<ClInclude Include="Input\DirectInput\DirectInputMouse.h" />
<ClInclude Include="Input\DirectInput\Ds4\Ds4Button.h" />
<ClInclude Include="Input\DirectInput\Ds4\Ds4State.h" />
<ClInclude Include="Input\DirectInput\Ds4\DualShock4.h" />
<ClInclude Include="Input\DirectInput\GenericUsb\GenericUsbInput.h" />
<ClInclude Include="Input\DirectInput\GenericUsb\GuButton.h" />
<ClInclude Include="Input\DirectInput\GenericUsb\GuState.h" />
<ClInclude Include="Input\IInputDevice.h" />
<ClInclude Include="Input\Keyboard\Keyboard.h" />
<ClInclude Include="Input\Keyboard\KeyboardState.h" />
<ClInclude Include="Input\KeyConfig\Config.h" />
<ClInclude Include="Input\KeyConfig\KeyString.h" />
<ClInclude Include="Input\KeyConfig\KeyStringHash.h" />
<ClInclude Include="Input\Mouse\Mouse.h" />
<ClInclude Include="Input\Mouse\MouseState.h" />
<ClInclude Include="Input\Xinput\Xinput.h" />
<ClInclude Include="Input\Xinput\XinputState.h" />
<ClInclude Include="pluginconfig.h" />
<ClInclude Include="Utilities\Drawing.h" />
<ClInclude Include="Utilities\EnumBitwiseOperations.h" />
<ClInclude Include="Utilities\Math.h" />
<ClInclude Include="Utilities\Operations.h" />
<ClInclude Include="Utilities\Stopwatch.h" />
<ClInclude Include="Utilities\Vec2.h" />
<ClInclude Include="Utilities\Vec3.h" />
<ClInclude Include="Utils.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Components\CameraController.cpp" />
<ClCompile Include="Components\ComponentsManager.cpp" />
<ClCompile Include="Components\DebugComponent.cpp" />
<ClCompile Include="Components\EmulatorComponent.cpp" />
<ClCompile Include="Components\FastLoader.cpp" />
<ClCompile Include="Components\FrameRateManager.cpp" />
<ClCompile Include="Components\GameTargets\TargetInspector.cpp" />
<ClCompile Include="Components\Input\InputEmulator.cpp" />
<ClCompile Include="Components\Input\InputState.cpp" />
<ClCompile Include="Components\Input\TouchPanelEmulator.cpp" />
<ClCompile Include="Components\Input\TouchSliderEmulator.cpp" />
<ClCompile Include="Components\Input\TouchSliderState.cpp" />
<ClCompile Include="Components\Pause.cpp" />
<ClCompile Include="Components\PlayerDataManager.cpp" />
<ClCompile Include="Components\ScaleComponent.cpp" />
<ClCompile Include="Components\ScoreSaver.cpp" />
<ClCompile Include="dllmain.cpp" />
<ClCompile Include="FileSystem\ConfigFile.cpp" />
<ClCompile Include="FileSystem\TextFile.cpp" />
<ClCompile Include="framework.cpp" />
<ClCompile Include="Input\Bindings\Binding.cpp" />
<ClCompile Include="Input\Bindings\Ds4Binding.cpp" />
<ClCompile Include="Input\Bindings\GuBinding.cpp" />
<ClCompile Include="Input\Bindings\KeyboardBinding.cpp" />
<ClCompile Include="Input\Bindings\MouseBinding.cpp" />
<ClCompile Include="Input\Bindings\XinputBinding.cpp" />
<ClCompile Include="Input\DirectInput\Controller.cpp" />
<ClCompile Include="Input\DirectInput\DirectInput.cpp" />
<ClCompile Include="Input\DirectInput\DirectInputDevice.cpp" />
<ClCompile Include="Input\DirectInput\DirectInputMouse.cpp" />
<ClCompile Include="Input\DirectInput\Ds4\Ds4State.cpp" />
<ClCompile Include="Input\DirectInput\Ds4\DualShock4.cpp" />
<ClCompile Include="Input\DirectInput\GenericUsb\GenericUsbInput.cpp" />
<ClCompile Include="Input\DirectInput\GenericUsb\GuState.cpp" />
<ClCompile Include="Input\Keyboard\Keyboard.cpp" />
<ClCompile Include="Input\Keyboard\KeyboardState.cpp" />
<ClCompile Include="Input\KeyConfig\Config.cpp" />
<ClCompile Include="Input\KeyConfig\KeyString.cpp" />
<ClCompile Include="Input\KeyConfig\KeyStringHash.cpp" />
<ClCompile Include="Input\Mouse\Mouse.cpp" />
<ClCompile Include="Input\Xinput\Xinput.cpp" />
<ClCompile Include="Input\Xinput\XinputState.cpp" />
<ClCompile Include="Utilities\Drawing.cpp" />
<ClCompile Include="Utilities\Math.cpp" />
<ClCompile Include="Utilities\Operations.cpp" />
<ClCompile Include="Utilities\Stopwatch.cpp" />
<ClCompile Include="Utilities\Vec2.cpp" />
<ClCompile Include="Utilities\Vec3.cpp" />
<ClCompile Include="Utils.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<ProjectGuid>{2B5533BB-04A1-424F-9BCA-1CA963B46B7F}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>TLAC</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)</TargetName>
<TargetExt>.dva</TargetExt>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)</TargetName>
<TargetExt>.dva</TargetExt>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;TLAC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<LanguageStandard>stdcpp17</LanguageStandard>
<AdditionalIncludeDirectories>..\..\..\dependencies\PluginConfigApi;..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<AdditionalOptions>-d2FH4- %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<AdditionalDependencies>XINPUT9_1_0.LIB;dinput8.lib;dxguid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;Winusb.lib;Setupapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>Xinput.h</IgnoreSpecificDefaultLibraries>
<AdditionalLibraryDirectories>..\..\..\dependencies\detours\lib;..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>-d2:-FH4- %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;TLAC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<LanguageStandard>stdcpp17</LanguageStandard>
<AdditionalIncludeDirectories>..\..\..\dependencies\PluginConfigApi;..\..\..\dependencies\detours\include;..\..\..\dependencies\freeglut\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>-d2FH4- %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<AdditionalLibraryDirectories>..\..\..\dependencies\detours\lib;..\..\..\dependencies\freeglut\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>XINPUT9_1_0.LIB;dinput8.lib;dxguid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>Xinput.h</IgnoreSpecificDefaultLibraries>
<AdditionalOptions>-d2:-FH4- %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="Components\CameraController.h" />
<ClInclude Include="Components\ComponentsManager.h" />
<ClInclude Include="Components\CustomPlayerData.h" />
<ClInclude Include="Components\DebugComponent.h" />
<ClInclude Include="Components\EmulatorComponent.h" />
<ClInclude Include="Components\FastLoader.h" />
<ClInclude Include="Components\FrameRateManager.h" />
<ClInclude Include="Components\GameState.h" />
<ClInclude Include="Components\GameTargets\HoldState.h" />
<ClInclude Include="Components\GameTargets\TargetHitStates.h" />
<ClInclude Include="Components\GameTargets\TargetInspector.h" />
<ClInclude Include="Components\GameTargets\TargetState.h" />
<ClInclude Include="Components\GameTargets\TargetTypes.h" />
<ClInclude Include="Components\Input\InputBufferType.h" />
<ClInclude Include="Components\Input\InputEmulator.h" />
<ClInclude Include="Components\Input\InputState.h" />
<ClInclude Include="Components\Input\JvsButtons.h" />
<ClInclude Include="Components\Input\TouchPanelEmulator.h" />
<ClInclude Include="Components\Input\TouchPanelState.h" />
<ClInclude Include="Components\Input\TouchSliderEmulator.h" />
<ClInclude Include="Components\Input\TouchSliderState.h" />
<ClInclude Include="Components\Pause.h" />
<ClInclude Include="Components\PlayerData.h" />
<ClInclude Include="Components\PlayerDataManager.h" />
<ClInclude Include="Components\ScaleComponent.h" />
<ClInclude Include="Components\ScoreSaver.h" />
<ClInclude Include="Constants.h" />
<ClInclude Include="FileSystem\ConfigFile.h" />
<ClInclude Include="FileSystem\TextFile.h" />
<ClInclude Include="framework.h" />
<ClInclude Include="Input\Bindings\Binding.h" />
<ClInclude Include="Input\Bindings\Ds4Binding.h" />
<ClInclude Include="Input\Bindings\DVLBinding.h" />
<ClInclude Include="Input\Bindings\GuBinding.h" />
<ClInclude Include="Input\Bindings\IInputBinding.h" />
<ClInclude Include="Input\Bindings\KeyboardBinding.h" />
<ClInclude Include="Input\Bindings\MouseBinding.h" />
<ClInclude Include="Input\Bindings\XinputBinding.h" />
<ClInclude Include="Input\DirectInput\Controller.h" />
<ClInclude Include="Input\DirectInput\DirectInput.h" />
<ClInclude Include="Input\DirectInput\DirectInputDevice.h" />
<ClInclude Include="Input\DirectInput\DirectInputMouse.h" />
<ClInclude Include="Input\DirectInput\Ds4\Ds4Button.h" />
<ClInclude Include="Input\DirectInput\Ds4\Ds4State.h" />
<ClInclude Include="Input\DirectInput\Ds4\DualShock4.h" />
<ClInclude Include="Input\DirectInput\GenericUsb\GenericUsbInput.h" />
<ClInclude Include="Input\DirectInput\GenericUsb\GuButton.h" />
<ClInclude Include="Input\DirectInput\GenericUsb\GuState.h" />
<ClInclude Include="Input\Divaller\Divaller.h" />
<ClInclude Include="Input\Divaller\DivallerButton.h" />
<ClInclude Include="Input\Divaller\DivallerState.h" />
<ClInclude Include="Input\IInputDevice.h" />
<ClInclude Include="Input\Keyboard\Keyboard.h" />
<ClInclude Include="Input\Keyboard\KeyboardState.h" />
<ClInclude Include="Input\KeyConfig\Config.h" />
<ClInclude Include="Input\KeyConfig\KeyString.h" />
<ClInclude Include="Input\KeyConfig\KeyStringHash.h" />
<ClInclude Include="Input\Mouse\Mouse.h" />
<ClInclude Include="Input\Mouse\MouseState.h" />
<ClInclude Include="Input\Xinput\Xinput.h" />
<ClInclude Include="Input\Xinput\XinputState.h" />
<ClInclude Include="pluginconfig.h" />
<ClInclude Include="Utilities\Drawing.h" />
<ClInclude Include="Utilities\EnumBitwiseOperations.h" />
<ClInclude Include="Utilities\Math.h" />
<ClInclude Include="Utilities\Operations.h" />
<ClInclude Include="Utilities\Stopwatch.h" />
<ClInclude Include="Utilities\Vec2.h" />
<ClInclude Include="Utilities\Vec3.h" />
<ClInclude Include="Utils.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Components\CameraController.cpp" />
<ClCompile Include="Components\ComponentsManager.cpp" />
<ClCompile Include="Components\DebugComponent.cpp" />
<ClCompile Include="Components\EmulatorComponent.cpp" />
<ClCompile Include="Components\FastLoader.cpp" />
<ClCompile Include="Components\FrameRateManager.cpp" />
<ClCompile Include="Components\GameTargets\TargetInspector.cpp" />
<ClCompile Include="Components\Input\InputEmulator.cpp" />
<ClCompile Include="Components\Input\InputState.cpp" />
<ClCompile Include="Components\Input\TouchPanelEmulator.cpp" />
<ClCompile Include="Components\Input\TouchSliderEmulator.cpp" />
<ClCompile Include="Components\Input\TouchSliderState.cpp" />
<ClCompile Include="Components\Pause.cpp" />
<ClCompile Include="Components\PlayerDataManager.cpp" />
<ClCompile Include="Components\ScaleComponent.cpp" />
<ClCompile Include="Components\ScoreSaver.cpp" />
<ClCompile Include="dllmain.cpp" />
<ClCompile Include="FileSystem\ConfigFile.cpp" />
<ClCompile Include="FileSystem\TextFile.cpp" />
<ClCompile Include="framework.cpp" />
<ClCompile Include="Input\Bindings\Binding.cpp" />
<ClCompile Include="Input\Bindings\Ds4Binding.cpp" />
<ClCompile Include="Input\Bindings\DVLBinding.cpp" />
<ClCompile Include="Input\Bindings\GuBinding.cpp" />
<ClCompile Include="Input\Bindings\KeyboardBinding.cpp" />
<ClCompile Include="Input\Bindings\MouseBinding.cpp" />
<ClCompile Include="Input\Bindings\XinputBinding.cpp" />
<ClCompile Include="Input\DirectInput\Controller.cpp" />
<ClCompile Include="Input\DirectInput\DirectInput.cpp" />
<ClCompile Include="Input\DirectInput\DirectInputDevice.cpp" />
<ClCompile Include="Input\DirectInput\DirectInputMouse.cpp" />
<ClCompile Include="Input\DirectInput\Ds4\Ds4State.cpp" />
<ClCompile Include="Input\DirectInput\Ds4\DualShock4.cpp" />
<ClCompile Include="Input\DirectInput\GenericUsb\GenericUsbInput.cpp" />
<ClCompile Include="Input\DirectInput\GenericUsb\GuState.cpp" />
<ClCompile Include="Input\Divaller\Divaller.cpp" />
<ClCompile Include="Input\Keyboard\Keyboard.cpp" />
<ClCompile Include="Input\Keyboard\KeyboardState.cpp" />
<ClCompile Include="Input\KeyConfig\Config.cpp" />
<ClCompile Include="Input\KeyConfig\KeyString.cpp" />
<ClCompile Include="Input\KeyConfig\KeyStringHash.cpp" />
<ClCompile Include="Input\Mouse\Mouse.cpp" />
<ClCompile Include="Input\Xinput\Xinput.cpp" />
<ClCompile Include="Input\Xinput\XinputState.cpp" />
<ClCompile Include="Utilities\Drawing.cpp" />
<ClCompile Include="Utilities\Math.cpp" />
<ClCompile Include="Utilities\Operations.cpp" />
<ClCompile Include="Utilities\Stopwatch.cpp" />
<ClCompile Include="Utilities\Vec2.cpp" />
<ClCompile Include="Utilities\Vec3.cpp" />
<ClCompile Include="Utils.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
@@ -1,366 +1,384 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="framework.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Constants.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\CameraController.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\ComponentsManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\CustomPlayerData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\DebugComponent.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\EmulatorComponent.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\FastLoader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\FrameRateManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\PlayerData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\PlayerDataManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\InputBufferType.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\InputEmulator.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\InputState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\JvsButtons.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\TouchPanelEmulator.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\TouchPanelState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\TouchSliderEmulator.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\TouchSliderState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="FileSystem\ConfigFile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="FileSystem\TextFile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\Binding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\Ds4Binding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\IInputBinding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\KeyboardBinding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\MouseBinding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\Ds4\Ds4Button.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\Ds4\Ds4State.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\Ds4\DualShock4.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\Controller.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\DirectInput.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\DirectInputDevice.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\DirectInputMouse.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Keyboard\Keyboard.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Keyboard\KeyboardState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\KeyConfig\Config.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\KeyConfig\KeyString.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\KeyConfig\KeyStringHash.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Mouse\Mouse.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Mouse\MouseState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\IInputDevice.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\EnumBitwiseOperations.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Math.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Operations.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Stopwatch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Vec2.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Vec3.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\ScaleComponent.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\XinputBinding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Xinput\Xinput.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Xinput\XinputState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameTargets\HoldState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameTargets\TargetHitStates.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameTargets\TargetInspector.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameTargets\TargetState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameTargets\TargetTypes.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\ScoreSaver.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="pluginconfig.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Pause.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Drawing.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\GenericUsb\GuButton.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\GenericUsb\GuState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\GenericUsb\GenericUsbInput.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\GuBinding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utils.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="framework.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\CameraController.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\ComponentsManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\DebugComponent.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\EmulatorComponent.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\FastLoader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\FrameRateManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\PlayerDataManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Input\InputEmulator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Input\InputState.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Input\TouchPanelEmulator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Input\TouchSliderEmulator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Input\TouchSliderState.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="FileSystem\ConfigFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="FileSystem\TextFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\Binding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\Ds4Binding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\KeyboardBinding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\MouseBinding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\Ds4\Ds4State.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\Ds4\DualShock4.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\Controller.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\DirectInput.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\DirectInputDevice.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\DirectInputMouse.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Keyboard\Keyboard.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Keyboard\KeyboardState.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\KeyConfig\Config.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\KeyConfig\KeyString.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\KeyConfig\KeyStringHash.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Mouse\Mouse.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Math.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Operations.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Stopwatch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Vec2.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Vec3.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\ScaleComponent.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\XinputBinding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Xinput\Xinput.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Xinput\XinputState.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\GameTargets\TargetInspector.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\ScoreSaver.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Pause.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Drawing.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\GenericUsb\GuState.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\GenericUsb\GenericUsbInput.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\GuBinding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="framework.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Constants.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\CameraController.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\ComponentsManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\CustomPlayerData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\DebugComponent.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\EmulatorComponent.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\FastLoader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\FrameRateManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\PlayerData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\PlayerDataManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\InputBufferType.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\InputEmulator.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\InputState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\JvsButtons.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\TouchPanelEmulator.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\TouchPanelState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\TouchSliderEmulator.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Input\TouchSliderState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="FileSystem\ConfigFile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="FileSystem\TextFile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\Binding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\Ds4Binding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\IInputBinding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\KeyboardBinding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\MouseBinding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\Ds4\Ds4Button.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\Ds4\Ds4State.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\Ds4\DualShock4.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\Controller.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\DirectInput.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\DirectInputDevice.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\DirectInputMouse.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Keyboard\Keyboard.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Keyboard\KeyboardState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\KeyConfig\Config.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\KeyConfig\KeyString.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\KeyConfig\KeyStringHash.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Mouse\Mouse.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Mouse\MouseState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\IInputDevice.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\EnumBitwiseOperations.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Math.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Operations.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Stopwatch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Vec2.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Vec3.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\ScaleComponent.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\XinputBinding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Xinput\Xinput.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Xinput\XinputState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameTargets\HoldState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameTargets\TargetHitStates.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameTargets\TargetInspector.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameTargets\TargetState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\GameTargets\TargetTypes.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\ScoreSaver.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="pluginconfig.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Components\Pause.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utilities\Drawing.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\GenericUsb\GuButton.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\GenericUsb\GuState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\DirectInput\GenericUsb\GenericUsbInput.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\GuBinding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Divaller\Divaller.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Divaller\DivallerButton.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Divaller\DivallerState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Input\Bindings\DVLBinding.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="framework.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\CameraController.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\ComponentsManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\DebugComponent.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\EmulatorComponent.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\FastLoader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\FrameRateManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\PlayerDataManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Input\InputEmulator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Input\InputState.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Input\TouchPanelEmulator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Input\TouchSliderEmulator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Input\TouchSliderState.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="FileSystem\ConfigFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="FileSystem\TextFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\Binding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\Ds4Binding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\KeyboardBinding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\MouseBinding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\Ds4\Ds4State.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\Ds4\DualShock4.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\Controller.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\DirectInput.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\DirectInputDevice.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\DirectInputMouse.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Keyboard\Keyboard.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Keyboard\KeyboardState.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\KeyConfig\Config.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\KeyConfig\KeyString.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\KeyConfig\KeyStringHash.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Mouse\Mouse.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Math.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Operations.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Stopwatch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Vec2.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Vec3.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\ScaleComponent.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\XinputBinding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Xinput\Xinput.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Xinput\XinputState.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\GameTargets\TargetInspector.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\ScoreSaver.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Components\Pause.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utilities\Drawing.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\GenericUsb\GuState.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\DirectInput\GenericUsb\GenericUsbInput.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\GuBinding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Utils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Divaller\Divaller.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Input\Bindings\DVLBinding.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
@@ -12,6 +12,7 @@
#include "Input/DirectInput/DirectInput.h"
#include "Input/DirectInput/Ds4/DualShock4.h"
#include "Input/DirectInput/GenericUsb/GenericUsbInput.h"
#include "Input/Divaller/Divaller.h"
#include "Components/ComponentsManager.h"
#include <tchar.h>
#include <GL/freeglut.h>
@@ -81,6 +82,12 @@ namespace TLAC
if (Input::GenericUsbInput::TryInitializeInstance())
printf("[TLAC] UpdateTick(): GenericUsbInput connected and initialized\n");
}
if (!Input::Divaller::InstanceInitialized())
{
if (Input::Divaller::TryInitializeInstance())
printf("[TLAC] UpdateTick(): Divaller connected and initialized\n");
}
}
ComponentsManager.Update();
@@ -112,6 +119,15 @@ namespace TLAC
}
}
if (Input::Divaller::GetInstance() != nullptr)
{
if (!Input::Divaller::GetInstance()->PollInput())
{
Input::Divaller::DeleteInstance();
printf("[TLAC] UpdateTick(): Divaller connection lost\n");
}
}
ComponentsManager.UpdateInput();
}
@@ -140,6 +156,15 @@ namespace TLAC
printf("[TLAC] UpdateTick(): GenericUsbInput connection lost\n");
}
}
if (Input::Divaller::GetInstance() != nullptr)
{
if (!Input::Divaller::GetInstance()->PollInput())
{
Input::Divaller::DeleteInstance();
printf("[TLAC] UpdateTick(): Divaller connection lost\n");
}
}
}
if (HasWindowFocus && !HadWindowFocus)