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;
}