diff --git a/depthrush/depthrush.vcxproj b/depthrush/depthrush.vcxproj index 2b858a7..3801ae0 100644 --- a/depthrush/depthrush.vcxproj +++ b/depthrush/depthrush.vcxproj @@ -107,6 +107,7 @@ Disabled Speed false + stdcpp20 Console diff --git a/depthrush/drs.cpp b/depthrush/drs.cpp index 55ad1fa..0dcd801 100644 --- a/depthrush/drs.cpp +++ b/depthrush/drs.cpp @@ -1,10 +1,10 @@ -#include "drs.h" -#include "includes.h" - +#pragma pack(push) #include #include +#include "includes.h" -#pragma pack(push) +bool kinectRunning = false; +bool kinectStarted = false; typedef struct { union { @@ -48,182 +48,260 @@ void (*touch_callback)( int unk1, const void *user_data); -namespace drs { - void* TouchSDK_Constructor(void* in) { - return in; + + + +void* TouchSDK_Constructor(void* in) { + return in; +} + +bool TouchSDK_SendData(dev_info_t*, + unsigned char* const, int, unsigned char* const, + unsigned char* output, int output_size) { + + // fake success + if (output_size >= 4) { + output[0] = 0xfc; + output[1] = 0xa5; + } + return true; +} + +bool TouchSDK_SetSignalInit(dev_info_t*, int) { + return true; +} + +void TouchSDK_Destructor(void* This) { +} + +int TouchSDK_GetYLedTotal(dev_info_t*, int) { + return 53; +} + +int TouchSDK_GetXLedTotal(dev_info_t*, int) { + return 41; +} + +bool TouchSDK_DisableTouch(dev_info_t*, int) { + return true; +} + +bool TouchSDK_DisableDrag(dev_info_t*, int) { + return true; +} + +bool TouchSDK_DisableWheel(dev_info_t*, int) { + return true; +} + +bool TouchSDK_DisableRightClick(dev_info_t*, int) { + return true; +} + +bool TouchSDK_SetMultiTouchMode(dev_info_t*, int) { + return true; +} + +bool TouchSDK_EnableTouchWidthData(dev_info_t*, int) { + return true; +} + +bool TouchSDK_EnableRawData(dev_info_t*, int) { + return true; +} + +bool TouchSDK_SetAllEnable(dev_info_t*, bool, int) { + return true; +} + +int TouchSDK_GetTouchDeviceCount(void* This) { + return 1; +} + +unsigned int TouchSDK_GetTouchSDKVersion(void) { + return 0x01030307; +} + +int TouchSDK_InitTouch(void* This, dev_info_t* devices, int max_devices, void* touch_event_cb, + void* hotplug_callback, void* userdata) { + + // fake touch device + memset(devices, 0, sizeof(devices[0].raw)); + devices[0].unk1 = 0x1122; + devices[0].unk2 = 0x3344; + devices[0].device_id = 0; + devices[0].vid = 0xDEAD; + devices[0].pid = 0xBEEF; + devices[0].pvn = 0xC0DE; + devices[0].max_point_num = 16; + + // remember provided callback and userdata + touch_callback = (decltype(touch_callback))touch_event_cb; + user_data = userdata; + + // success + return 1; +} + +inline DWORD scale_double_to_xy(double val) { + return static_cast(val * 32768); +} + +inline DWORD scale_double_to_height(double val) { + return static_cast(val * 1312); +} + +inline DWORD scale_double_to_width(double val) { + return static_cast(val * 1696); +} + +void fire_touches(drs_touch_t* events, size_t event_count) { + + // check callback first + if (!touch_callback) { + return; } - bool TouchSDK_SendData(dev_info_t*, - unsigned char* const, int, unsigned char* const, - unsigned char* output, int output_size) { + // generate touch data + auto game_touches = std::make_unique(event_count); + for (size_t i = 0; i < event_count; i++) { - // fake success - if (output_size >= 4) { - output[0] = 0xfc; - output[1] = 0xa5; + // initialize touch value + game_touches[i].cid = (DWORD)events[i].id; + game_touches[i].unk8 = 0; + + // copy scaled values + game_touches[i].x = scale_double_to_xy(events[i].x); + game_touches[i].y = scale_double_to_xy(events[i].y); + game_touches[i].width = scale_double_to_width(events[i].width); + game_touches[i].height = scale_double_to_height(events[i].height); + + // decide touch type + switch (events[i].type) { + case DRS_DOWN: + game_touches[i].type = TS_DOWN; + break; + case DRS_UP: + game_touches[i].type = TS_UP; + break; + case DRS_MOVE: + game_touches[i].type = TS_MOVE; + break; + default: + break; } - return true; } - bool TouchSDK_SetSignalInit(dev_info_t*, int) { - return true; - } + // build device information + dev_info_t dev; + dev.unk1 = 0; + dev.unk2 = 0; + dev.device_id = 0; + dev.vid = 0xDEAD; + dev.pid = 0xBEEF; + dev.pvn = 0xC0DE; + dev.max_point_num = 16; - void TouchSDK_Destructor(void* This) { - } + // fire callback + touch_callback(&dev, game_touches.get(), (int)event_count, 0, user_data); +} - int TouchSDK_GetYLedTotal(dev_info_t*, int) { - return 53; - } +void start_kinect() { - int TouchSDK_GetXLedTotal(dev_info_t*, int) { - return 41; - } + if (kinectRunning) return; + if (!kinectStarted) { + kinectStarted = true; + std::thread t([] { + puts("starting kinect thread"); - bool TouchSDK_DisableTouch(dev_info_t*, int) { - return true; - } + // dance floor plane + const float touch_width = 1.f; + const float touch_height = 1.f; - bool TouchSDK_DisableDrag(dev_info_t*, int) { - return true; - } + // main loop + while (kinectRunning) { - bool TouchSDK_DisableWheel(dev_info_t*, int) { - return true; - } + // iterate foots + for (auto& foot : VR_FOOTS) { - bool TouchSDK_DisableRightClick(dev_info_t*, int) { - return true; - } - bool TouchSDK_SetMultiTouchMode(dev_info_t*, int) { - return true; - } + // update event details + foot.event.id = foot.id; + foot.event.x = 0; + foot.event.y = 0; + foot.event.width = 100; + foot.event.height = foot.event.width; + foot.event.type = DRS_DOWN; - bool TouchSDK_EnableTouchWidthData(dev_info_t*, int) { - return true; - } + // check previous event + switch (foot.event.type) { + case DRS_UP: - bool TouchSDK_EnableRawData(dev_info_t*, int) { - return true; - } + // generate down event + foot.event.type = DRS_DOWN; + break; - bool TouchSDK_SetAllEnable(dev_info_t*, bool, int) { - return true; - } + case DRS_DOWN: + case DRS_MOVE: - int TouchSDK_GetTouchDeviceCount(void* This) { - return 1; - } + // generate move event + foot.event.type = DRS_MOVE; + break; - unsigned int TouchSDK_GetTouchSDKVersion(void) { - return 0x01030307; - } + default: + break; + } - int TouchSDK_InitTouch(void* This, dev_info_t* devices, int max_devices, void* touch_event_cb, - void* hotplug_callback, void* userdata) { + // send event + fire_touches(&foot.event, 1); + continue; - // fake touch device - memset(devices, 0, sizeof(devices[0].raw)); - devices[0].unk1 = 0x1122; - devices[0].unk2 = 0x3344; - devices[0].device_id = 0; - devices[0].vid = 0xDEAD; - devices[0].pid = 0xBEEF; - devices[0].pvn = 0xC0DE; - devices[0].max_point_num = 16; + // foot not intersecting with plane + switch (foot.event.type) { + case DRS_DOWN: + case DRS_MOVE: - // remember provided callback and userdata - touch_callback = (decltype(touch_callback))touch_event_cb; - user_data = userdata; + // generate up event + foot.event.type = DRS_UP; + fire_touches(&foot.event, 1); + break; - // success - return 1; - } + case DRS_UP: + default: + break; + } + } - inline DWORD scale_double_to_xy(double val) { - return static_cast(val * 32768); - } - - inline DWORD scale_double_to_height(double val) { - return static_cast(val * 1312); - } - - inline DWORD scale_double_to_width(double val) { - return static_cast(val * 1696); - } - - void fire_touches(drs_touch_t* events, size_t event_count) { - - // check callback first - if (!touch_callback) { - return; - } - - // generate touch data - auto game_touches = std::make_unique(event_count); - for (size_t i = 0; i < event_count; i++) { - - // initialize touch value - game_touches[i].cid = (DWORD)events[i].id; - game_touches[i].unk8 = 0; - - // copy scaled values - game_touches[i].x = scale_double_to_xy(events[i].x); - game_touches[i].y = scale_double_to_xy(events[i].y); - game_touches[i].width = scale_double_to_width(events[i].width); - game_touches[i].height = scale_double_to_height(events[i].height); - - // decide touch type - switch (events[i].type) { - case DRS_DOWN: - game_touches[i].type = TS_DOWN; - break; - case DRS_UP: - game_touches[i].type = TS_UP; - break; - case DRS_MOVE: - game_touches[i].type = TS_MOVE; - break; - default: - break; + // slow down + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } - } - - // build device information - dev_info_t dev; - dev.unk1 = 0; - dev.unk2 = 0; - dev.device_id = 0; - dev.vid = 0xDEAD; - dev.pid = 0xBEEF; - dev.pvn = 0xC0DE; - dev.max_point_num = 16; - - // fire callback - touch_callback(&dev, game_touches.get(), (int)event_count, 0, user_data); + kinectStarted = false; + return nullptr; + }); + t.detach(); } - void hookDancepad() { - MH_Initialize(); - MH_CreateHookApi(L"TouchSDKDll.dll", "??0TouchSDK@@QEAA@XZ", TouchSDK_Constructor, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?SendData@TouchSDK@@QEAA_NU_DeviceInfo@@QEAEH1HH@Z", TouchSDK_SendData, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?SetSignalInit@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_SetSignalInit, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?GetYLedTotal@TouchSDK@@QEAAHU_DeviceInfo@@H@Z", TouchSDK_GetYLedTotal, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?GetXLedTotal@TouchSDK@@QEAAHU_DeviceInfo@@H@Z", TouchSDK_GetXLedTotal, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?DisableTouch@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_DisableTouch, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?DisableDrag@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_DisableDrag, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?DisableWheel@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_DisableWheel, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?DisableRightClick@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_DisableRightClick, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?SetMultiTouchMode@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_SetMultiTouchMode, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?EnableTouchWidthData@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_EnableTouchWidthData, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?EnableRawData@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_EnableRawData, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?SetAllEnable@TouchSDK@@QEAA_NU_DeviceInfo@@_NH@Z", TouchSDK_SetAllEnable, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?GetTouchDeviceCount@TouchSDK@@QEAAHXZ", TouchSDK_GetTouchDeviceCount, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?GetTouchSDKVersion@TouchSDK@@QEAAIXZ", TouchSDK_GetTouchSDKVersion, NULL); - MH_CreateHookApi(L"TouchSDKDll.dll", "?InitTouch@TouchSDK@@QEAAHPEAU_DeviceInfo@@HP6AXU2@PEBU_TouchPointData@@HHPEBX@ZP6AX1_N3@ZPEAX@Z", TouchSDK_InitTouch, NULL); +} - MH_EnableHook(MH_ALL_HOOKS); - } +void hookDancepad() { + MH_Initialize(); + MH_CreateHookApi(L"TouchSDKDll.dll", "??0TouchSDK@@QEAA@XZ", TouchSDK_Constructor, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?SendData@TouchSDK@@QEAA_NU_DeviceInfo@@QEAEH1HH@Z", TouchSDK_SendData, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?SetSignalInit@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_SetSignalInit, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?GetYLedTotal@TouchSDK@@QEAAHU_DeviceInfo@@H@Z", TouchSDK_GetYLedTotal, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?GetXLedTotal@TouchSDK@@QEAAHU_DeviceInfo@@H@Z", TouchSDK_GetXLedTotal, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?DisableTouch@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_DisableTouch, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?DisableDrag@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_DisableDrag, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?DisableWheel@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_DisableWheel, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?DisableRightClick@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_DisableRightClick, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?SetMultiTouchMode@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_SetMultiTouchMode, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?EnableTouchWidthData@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_EnableTouchWidthData, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?EnableRawData@TouchSDK@@QEAA_NU_DeviceInfo@@H@Z", TouchSDK_EnableRawData, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?SetAllEnable@TouchSDK@@QEAA_NU_DeviceInfo@@_NH@Z", TouchSDK_SetAllEnable, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?GetTouchDeviceCount@TouchSDK@@QEAAHXZ", TouchSDK_GetTouchDeviceCount, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?GetTouchSDKVersion@TouchSDK@@QEAAIXZ", TouchSDK_GetTouchSDKVersion, NULL); + MH_CreateHookApi(L"TouchSDKDll.dll", "?InitTouch@TouchSDK@@QEAAHPEAU_DeviceInfo@@HP6AXU2@PEBU_TouchPointData@@HHPEBX@ZP6AX1_N3@ZPEAX@Z", TouchSDK_InitTouch, NULL); + + MH_EnableHook(MH_ALL_HOOKS); } \ No newline at end of file diff --git a/depthrush/drs.h b/depthrush/drs.h index 31c7fdd..78fbb79 100644 --- a/depthrush/drs.h +++ b/depthrush/drs.h @@ -1,43 +1,41 @@ #pragma once -namespace drs { +enum DRS_TOUCH_TYPE { + DRS_DOWN = 0, + DRS_UP = 1, + DRS_MOVE = 2, +}; - enum DRS_TOUCH_TYPE { - DRS_DOWN = 0, - DRS_UP = 1, - DRS_MOVE = 2, - }; +typedef struct drs_touch_t { + int type = DRS_UP; + int id = 0; + double x = 0.0; + double y = 0.0; + double width = 1; + double height = 1; +}; - typedef struct drs_touch_t { - int type = DRS_UP; - int id = 0; - double x = 0.0; - double y = 0.0; - double width = 1; - double height = 1; - }; +struct VRFoot { + unsigned int id; + unsigned int index = 2; + float length = 3.1; + float size_base = 0.05; + float size_scale = 0.1; + float height = 3; + //linalg::aliases::float4 rotation {0, 0, 0, 1}; + drs_touch_t event{}; + //linalg::aliases::float3 to_world(linalg::aliases::float3 pos); +}; - struct VRFoot { - unsigned int id; - unsigned int index = 2; - float length = 3.1; - float size_base = 0.05; - float size_scale = 0.1; - float height = 3; - //linalg::aliases::float4 rotation {0, 0, 0, 1}; - drs_touch_t event{}; - //unsigned int get_index(); - //linalg::aliases::float3 to_world(linalg::aliases::float3 pos); - }; +extern char DRS_TAPELED[38 * 49][3]; +//extern linalg::aliases::float3 VR_SCALE; +//extern linalg::aliases::float3 VR_OFFSET; +extern float VR_ROTATION; +extern VRFoot VR_FOOTS[2]; - extern char DRS_TAPELED[38 * 49][3]; - //extern linalg::aliases::float3 VR_SCALE; - //extern linalg::aliases::float3 VR_OFFSET; - extern float VR_ROTATION; - extern VRFoot VR_FOOTS[2]; - void fire_touches(drs_touch_t* events, size_t event_count); - //void start_vr(); - void hookDancepad(); -} +void fire_touches(drs_touch_t* events, size_t event_count); +void start_kinect(); + +void hookDancepad(); \ No newline at end of file diff --git a/depthrush/includes.h b/depthrush/includes.h index 39445d6..6519dca 100644 --- a/depthrush/includes.h +++ b/depthrush/includes.h @@ -7,7 +7,7 @@ #include "kiero/minhook/include/MinHook.h" #include "kiero/injector/injector.hpp" #include "d3d9.h" - +#include "drs.h" typedef LRESULT(CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM); typedef uintptr_t PTR; \ No newline at end of file diff --git a/depthrush/main.cpp b/depthrush/main.cpp index 7b4eeae..ee4c88d 100644 --- a/depthrush/main.cpp +++ b/depthrush/main.cpp @@ -1,5 +1,4 @@ #include "includes.h" -#include "drs.h" static uintptr_t imageBase; @@ -45,7 +44,7 @@ BOOL WINAPI DllMain(HMODULE hMod, DWORD dwReason, LPVOID lpReserved) case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hMod); imageBase = (uintptr_t)GetModuleHandleA(0); - drs::hookDancepad(); + hookDancepad(); break; }