diff --git a/depthrush/depthrush.vcxproj b/depthrush/depthrush.vcxproj
index 9348b74..fba8c76 100644
--- a/depthrush/depthrush.vcxproj
+++ b/depthrush/depthrush.vcxproj
@@ -136,7 +136,7 @@
Disabled
true
false
- true
+ false
true
stdcpp20
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
diff --git a/depthrush/drs.cpp b/depthrush/drs.cpp
index ed17e85..c2781c2 100644
--- a/depthrush/drs.cpp
+++ b/depthrush/drs.cpp
@@ -5,6 +5,14 @@
bool kinectRunning = false;
bool kinectStarted = false;
+bool threadsCreated = false;
+bool mainInitialized = false;
+
+bool isDown = false;
+bool isJump = false;
+
+bool downHack = true;
+bool jumpHack = true;
VRFoot feet[16];
@@ -52,7 +60,51 @@ void (*touch_callback)(
const void *user_data);
+std::uint8_t* PatternScan(void* module, const char* signature)
+{
+ static auto pattern_to_byte = [](const char* pattern) {
+ auto bytes = std::vector{};
+ auto start = const_cast(pattern);
+ auto end = const_cast(pattern) + strlen(pattern);
+ for (auto current = start; current < end; ++current) {
+ if (*current == '?') {
+ ++current;
+ if (*current == '?')
+ ++current;
+ bytes.push_back(-1);
+ }
+ else {
+ bytes.push_back(strtoul(current, ¤t, 16));
+ }
+ }
+ return bytes;
+ };
+
+ auto dosHeader = (PIMAGE_DOS_HEADER)module;
+ auto ntHeaders = (PIMAGE_NT_HEADERS)((std::uint8_t*)module + dosHeader->e_lfanew);
+
+ auto sizeOfImage = ntHeaders->OptionalHeader.SizeOfImage;
+ auto patternBytes = pattern_to_byte(signature);
+ auto scanBytes = reinterpret_cast(module);
+
+ auto s = patternBytes.size();
+ auto d = patternBytes.data();
+
+ for (auto i = 0ul; i < sizeOfImage - s; ++i) {
+ bool found = true;
+ for (auto j = 0ul; j < s; ++j) {
+ if (scanBytes[i + j] != d[j] && d[j] != -1) {
+ found = false;
+ break;
+ }
+ }
+ if (found) {
+ return &scanBytes[i];
+ }
+ }
+ return nullptr;
+}
void* TouchSDK_Constructor(void* in) {
@@ -210,73 +262,88 @@ void fire_touches(drs_touch_t* events, size_t event_count) {
touch_callback(&dev, game_touches.get(), (int)event_count, 0, user_data);
}
-void pollKinect() {
+DWORD pollKinect(LPVOID _) {
+ /*
std::thread t([] {
- // initialize Kinect
- HRESULT hr = NuiInitialize(NUI_INITIALIZE_FLAG_USES_SKELETON);
+
+ });
+ t.detach();
+ */
+
+ // initialize Kinect
+ HRESULT hr = NuiInitialize(NUI_INITIALIZE_FLAG_USES_SKELETON);
+ if (FAILED(hr)) {
+ std::cout << "Failed to initialize Kinect." << std::endl;
+ return 1;
+ }
+
+ // open the skeleton stream
+ HANDLE skeletonStream = nullptr;
+ hr = NuiSkeletonTrackingEnable(nullptr, 0);
+ if (FAILED(hr)) {
+ std::cout << "Failed to open the skeleton stream." << std::endl;
+ NuiShutdown();
+ return 1;
+ }
+
+ // load config from ini
+ std::cout << "Loading calibration from depthrush.ini\n";
+ mINI::INIFile file("depthrush.ini");
+ mINI::INIStructure ini;
+ file.read(ini);
+ std::string& readValue = ini["calibration"]["xGrad"];
+ float xGrad = std::stof(readValue);
+ readValue = ini["calibration"]["xOffset"];
+ float xOffset = std::stof(readValue);
+ readValue = ini["calibration"]["yGrad"];
+ float yGrad = std::stof(readValue);
+ readValue = ini["calibration"]["yOffset"];
+ float yOffset = std::stof(readValue);
+ readValue = ini["calibration"]["zGrad"];
+ float zGrad = std::stof(readValue);
+ readValue = ini["calibration"]["zOffset"];
+ float zOffset = std::stof(readValue);
+ readValue = ini["calibration"]["errorMargin"];
+ float errorMargin = std::stof(readValue); // stepping error margin
+ readValue = ini["calibration"]["jumpHeight"];
+ float jumpHeight = std::stof(readValue); // jumping error margin
+
+
+ // main loop to read and process skeleton data
+ NUI_SKELETON_FRAME skeletonFrame = { 0 };
+ // for down & jumps
+ float joints[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
+ float prevJoints[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
+ float highestDown = 0;
+ std::chrono::steady_clock::time_point jumpTime;
+ std::chrono::steady_clock::time_point landTime;
+
+ while (true) {
+ // get the latest skeleton frame
+ hr = NuiSkeletonGetNextFrame(0, &skeletonFrame);
if (FAILED(hr)) {
- std::cout << "Failed to initialize Kinect." << std::endl;
- return 1;
+ continue;
}
- // open the skeleton stream
- HANDLE skeletonStream = nullptr;
- hr = NuiSkeletonTrackingEnable(nullptr, 0);
- if (FAILED(hr)) {
- std::cout << "Failed to open the skeleton stream." << std::endl;
- NuiShutdown();
- return 1;
- }
+ // Process each tracked skeleton
+ for (int i = 0; i < NUI_SKELETON_COUNT; ++i) {
+ if (skeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED) {
+ // get the position of both legs
+ Vector4 leftLegPos = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_ANKLE_LEFT];
+ Vector4 rightLegPos = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_ANKLE_RIGHT];
- // load config from ini
- std::cout << "Loading depthrush.ini\n";
- mINI::INIFile file("depthrush.ini");
- mINI::INIStructure ini;
- file.read(ini);
- std::string& readValue = ini["calibration"]["xGrad"];
- float xGrad = std::stof(readValue);
- readValue = ini["calibration"]["xOffset"];
- float xOffset = std::stof(readValue);
- readValue = ini["calibration"]["yGrad"];
- float yGrad = std::stof(readValue);
- readValue = ini["calibration"]["yOffset"];
- float yOffset = std::stof(readValue);
- readValue = ini["calibration"]["zGrad"];
- float zGrad = std::stof(readValue);
- readValue = ini["calibration"]["zOffset"];
- float zOffset = std::stof(readValue);
+ // clamp
+ feet[1].event.x = std::clamp((xGrad * leftLegPos.x + xOffset), 0.0f, 1.0f);
+ feet[1].event.y = std::clamp((zGrad * leftLegPos.z + zOffset), 0.0f, 1.0f);
+ feet[2].event.x = std::clamp((xGrad * rightLegPos.x + xOffset), 0.0f, 1.0f);
+ feet[2].event.y = std::clamp((zGrad * rightLegPos.z + zOffset), 0.0f, 1.0f);
- // main loop to read and process skeleton data
- NUI_SKELETON_FRAME skeletonFrame = { 0 };
- float errorMargin = 0.03;
- while (true) {
- // get the latest skeleton frame
- hr = NuiSkeletonGetNextFrame(0, &skeletonFrame);
- if (FAILED(hr)) {
- continue;
- }
+ // Fix feet height
+ float fixedLeft = leftLegPos.y - (yGrad * leftLegPos.z + yOffset);
+ float fixedRight = rightLegPos.y - (yGrad * rightLegPos.z + yOffset);
- // Process each tracked skeleton
- for (int i = 0; i < NUI_SKELETON_COUNT; ++i) {
- if (skeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED) {
- // get the position of both legs
- Vector4 leftLegPos = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_ANKLE_LEFT];
- Vector4 rightLegPos = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_ANKLE_RIGHT];
-
- // print the coordinates of both legs
- //std::cout << "Left Leg: X = " << leftLegPos.x << ", Y = " << leftLegPos.y << ", Z = " << leftLegPos.z << std::endl;
- //std::cout << "Right Leg: X = " << rightLegPos.x << ", Y = " << rightLegPos.y << ", Z = " << rightLegPos.z << std::endl;
-
- feet[1].event.x = xGrad * leftLegPos.x + xOffset;
- feet[1].event.y = 0.5;
- feet[2].event.x = xGrad * rightLegPos.x + xOffset;
- feet[2].event.y = 0.5;
-
- // Fix feet height
- float fixedLeft = leftLegPos.y - (yGrad * leftLegPos.z + yOffset);
- float fixedRight = rightLegPos.y - (yGrad * rightLegPos.z + yOffset);
-
- // check for stepping
+ // check for stepping if not jumping
+ if (isJump == false) {
if (fixedLeft > (fixedRight + errorMargin)) {
feet[2].touching = true;
feet[1].touching = false;
@@ -292,189 +359,296 @@ void pollKinect() {
feet[2].touching = true;
// std::cout << "both step\n";
}
-
}
+
+ // y axis tracking (jump and down)
+ for (int j = 0; j < 20; j++) { // get current coords
+ joints[j] = skeletonFrame.SkeletonData[i].SkeletonPositions[j].y;
+ }
+
+ // get highest down value
+ for (int j = 0; j < 20; j++) {
+ if (joints[j] - prevJoints[j] < highestDown) {
+ highestDown = joints[j];
+ }
+ }
+ // down handling
+ if (highestDown < -0.2) {
+ isDown = true;
+ }
+ else {
+ isDown = false;
+ }
+
+ // jump handling
+ if (fixedLeft > jumpHeight && fixedRight > jumpHeight && isJump == false) {
+ jumpTime = std::chrono::high_resolution_clock::now();
+ isJump = true;
+ }
+ if (isJump) {
+ landTime = std::chrono::high_resolution_clock::now();
+ feet[1].touching = false;
+ feet[2].touching = false;
+ // jump for 180ms
+ if (std::chrono::duration_cast(landTime - jumpTime).count() > 180) {
+ isJump = false;
+ }
+ }
+
+
+ // save current coords as previous coord
+ for (int j = 0; j < 20; j++) {
+ prevJoints[j] = skeletonFrame.SkeletonData[i].SkeletonPositions[j].y;
+ }
+
+
+ highestDown = 0;
}
}
+ }
- // Clean up and exit
- NuiSkeletonTrackingDisable();
- NuiShutdown();
- return 0;
- });
- t.detach();
+ // Clean up and exit
+ NuiSkeletonTrackingDisable();
+ NuiShutdown();
+ return 0;
}
-void startInputSpam() {
-
+DWORD startInputSpam(LPVOID _) {
+ /*
std::thread t([] {
- puts("starting kinect thread");
- // temporarily hardcode both kinect feet to touching at size 0.1
- feet[1].touching = true;
- feet[1].id = 1;
- feet[1].index = 1;
- feet[1].event.id = feet[1].id;
- feet[1].event.width = 0.1;
- feet[1].event.height = feet[1].event.width;
-
- feet[2].touching = true;
- feet[2].id = 2;
- feet[2].index = 2;
- feet[2].event.id = feet[2].id;
- feet[2].event.width = 0.1;
- feet[2].event.height = feet[2].event.width;
-
- // hardcode debug foot details
- feet[0].id = 0;
- feet[0].index = 0;
-
- // update event details
- feet[0].event.id = feet[0].id;
- feet[0].event.x = 0.5;
- feet[0].event.y = 0.5;
- feet[0].event.width = 1;
- feet[0].event.height = feet[0].event.width;
-
- // main loop
- while (true) {
- // debug shift control to touch entire pad
- if (GetKeyState(VK_SHIFT) & 0x8000)
- {
-
- // check previous event
- switch (feet[0].event.type) {
- case DRS_UP:
-
- // generate down event
-
- feet[0].event.type = DRS_DOWN;
- break;
-
- case DRS_DOWN:
- case DRS_MOVE:
-
- // generate move event
- feet[0].event.type = DRS_MOVE;
- break;
-
- default:
- break;
- }
- // send event
- fire_touches(&feet[0].event, 1);
- }
- else {
-
- switch (feet[0].event.type) {
- case DRS_DOWN:
- case DRS_MOVE:
- // generate up event
- feet[0].event.type = DRS_UP;
- fire_touches(&feet[0].event, 1);
- break;
- case DRS_UP:
- default:
- break;
- }
- }
- if (feet[1].touching) // check if foot1 touch
- {
- // check previous event
- switch (feet[1].event.type) {
- case DRS_UP:
- // generate down event
- feet[1].event.type = DRS_DOWN;
- break;
- case DRS_DOWN:
- case DRS_MOVE:
- // generate move event
- //puts("foot1 is moving");
- feet[1].event.type = DRS_MOVE;
- break;
- default:
- break;
- }
- // send event
- fire_touches(&feet[1].event, 1);
- }
- else {
- switch (feet[1].event.type) {
- case DRS_DOWN:
- case DRS_MOVE:
- // generate up event
- feet[1].event.type = DRS_UP;
- fire_touches(&feet[1].event, 1);
- break;
- case DRS_UP:
- default:
- break;
- }
- }
- if (feet[2].touching) // check if foot2 touch
- {
- // check previous event
- switch (feet[2].event.type) {
- case DRS_UP:
- // generate down event
- feet[2].event.type = DRS_DOWN;
- break;
- case DRS_DOWN:
- case DRS_MOVE:
- // generate move event
- feet[2].event.type = DRS_MOVE;
- break;
- default:
- break;
- }
- // send event
- fire_touches(&feet[2].event, 1);
- }
- else {
- switch (feet[2].event.type) {
- case DRS_DOWN:
- case DRS_MOVE:
- // generate up event
- feet[2].event.type = DRS_UP;
- fire_touches(&feet[2].event, 1);
- break;
- case DRS_UP:
- default:
- break;
- }
- }
- // slow down
- std::this_thread::sleep_for(std::chrono::milliseconds(1));
- }
- kinectStarted = false;
- return nullptr;
});
t.detach();
+ */
+ puts("starting input spam thread");
+
+ // temporarily hardcode both kinect feet to touching at size 0.1
+ feet[1].touching = true;
+ feet[1].id = 1;
+ feet[1].index = 1;
+ feet[1].event.id = feet[1].id;
+ feet[1].event.width = 0.1;
+ feet[1].event.height = feet[1].event.width;
+
+ feet[2].touching = true;
+ feet[2].id = 2;
+ feet[2].index = 2;
+ feet[2].event.id = feet[2].id;
+ feet[2].event.width = 0.1;
+ feet[2].event.height = feet[2].event.width;
+
+ // hardcode debug foot details
+ feet[0].id = 0;
+ feet[0].index = 0;
+
+ // update event details
+ feet[0].event.id = feet[0].id;
+ feet[0].event.x = 0.5;
+ feet[0].event.y = 0.5;
+ feet[0].event.width = 1;
+ feet[0].event.height = feet[0].event.width;
+
+ // main loop
+ while (true) {
+ // debug shift control to touch entire pad
+ if (GetKeyState(VK_SHIFT) & 0x8000)
+ {
+
+ // check previous event
+ switch (feet[0].event.type) {
+ case DRS_UP:
+
+ // generate down event
+
+ feet[0].event.type = DRS_DOWN;
+ break;
+
+ case DRS_DOWN:
+ case DRS_MOVE:
+
+ // generate move event
+ feet[0].event.type = DRS_MOVE;
+ break;
+
+ default:
+ break;
+ }
+ // send event
+ fire_touches(&feet[0].event, 1);
+ }
+ else {
+
+ switch (feet[0].event.type) {
+ case DRS_DOWN:
+ case DRS_MOVE:
+ // generate up event
+ feet[0].event.type = DRS_UP;
+ fire_touches(&feet[0].event, 1);
+ break;
+ case DRS_UP:
+ default:
+ break;
+ }
+ }
+ if (feet[1].touching) // check if foot1 touch
+ {
+ // check previous event
+ switch (feet[1].event.type) {
+ case DRS_UP:
+ // generate down event
+ feet[1].event.type = DRS_DOWN;
+ break;
+ case DRS_DOWN:
+ case DRS_MOVE:
+ // generate move event
+ //puts("foot1 is moving");
+ feet[1].event.type = DRS_MOVE;
+ break;
+ default:
+ break;
+ }
+ // send event
+ fire_touches(&feet[1].event, 1);
+ }
+ else {
+ switch (feet[1].event.type) {
+ case DRS_DOWN:
+ case DRS_MOVE:
+ // generate up event
+ feet[1].event.type = DRS_UP;
+ fire_touches(&feet[1].event, 1);
+ break;
+ case DRS_UP:
+ default:
+ break;
+ }
+ }
+ if (feet[2].touching) // check if foot2 touch
+ {
+ // check previous event
+ switch (feet[2].event.type) {
+ case DRS_UP:
+ // generate down event
+ feet[2].event.type = DRS_DOWN;
+ break;
+ case DRS_DOWN:
+ case DRS_MOVE:
+ // generate move event
+ feet[2].event.type = DRS_MOVE;
+ break;
+ default:
+ break;
+ }
+ // send event
+ fire_touches(&feet[2].event, 1);
+ }
+ else {
+ switch (feet[2].event.type) {
+ case DRS_DOWN:
+ case DRS_MOVE:
+ // generate up event
+ feet[2].event.type = DRS_UP;
+ fire_touches(&feet[2].event, 1);
+ break;
+ case DRS_UP:
+ default:
+ break;
+ }
+ }
+ // slow down
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
+ }
+ kinectStarted = false;
+ return 0;
}
+typedef __int64(__fastcall* PinitializeJudgementMemory)(float a1, float a2, char a3, __int64 a4, __int64 a5, char a6, float* a7);
+static PinitializeJudgementMemory Orig_initializeJudgementMemory;
+
+__int64 __fastcall Hook_initializeJudgementMemory(float a1, float a2, char a3, __int64 a4, __int64 a5, char a6, float* a7) {
+ // a4 is a1 + 168 usually
+ __int64 tmp = a4;
+ uintptr_t ptr = (uintptr_t)tmp - 16;
+
+ int noteType = *(int*)ptr;
+ float tMinus = fabs(a2 - a1);
+ if (noteType == 3) {
+ if (tMinus <= 150 && isDown && downHack) { // 150ms timing window for downs
+ std::cout << "Hitting down!\n";
+ return 5;
+ }
+ }
+ if (noteType == 4) {
+ if (tMinus <= 200 && isJump && jumpHack) { // 200ms timing window for jump
+ std::cout << "Hitting jump!\n";
+ return 5;
+ }
+ }
+
+ return Orig_initializeJudgementMemory(a1, a2, a3, a4, a5, a6, a7);
+}
+
+
+
+
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);
+ if (!mainInitialized) {
+ MH_Initialize();
- MH_EnableHook(MH_ALL_HOOKS);
+ // Pad hooks
+ 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);
+
+ std::cout << "Loading settings from depthrush.ini\n";
+ mINI::INIFile file("depthrush.ini");
+ mINI::INIStructure ini;
+ file.read(ini);
+ std::string& readValue = ini["hacks"]["downHack"];
+ downHack = !strcmp(readValue.c_str(), "1");
+ std::string& readValue2 = ini["hacks"]["jumpHack"];
+ jumpHack = !strcmp(readValue2.c_str(), "1");
+
+ // Game hooks
+ // uintptr_t imageBase = 0x180000000;
+ // HOOK(0x1806D5180, initializeJudgementMemory);
+ if (downHack == true || jumpHack == true) {
+ // if hacks are enabled
+ std::cout << "Hacks enabled, hooking!\n";
+ auto pointer = PatternScan((void*)0x180000000, "40 53 48 83 EC 20 48 8B 05 ? ? ? ? 48 33 C4 48 89 44 24 18 48 8B 5C 24 60 0F 28 E0 0F 28 D9");
+ HOOK(pointer, initializeJudgementMemory);
+ }
+ MH_EnableHook(MH_ALL_HOOKS);
+ mainInitialized = true;
+ }
+
+
+ if (threadsCreated == false) {
+ CreateThread(NULL, 0, startInputSpam, NULL, 0, NULL);
+ CreateThread(NULL, 0, pollKinect, NULL, 0, NULL);
+ threadsCreated = true;
+ }
+
+
+ /*
startInputSpam(); // spams input to the game
pollKinect();
+ */
+ return;
}
\ No newline at end of file
diff --git a/depthrush/includes.h b/depthrush/includes.h
index 63d8c55..bb9f1b4 100644
--- a/depthrush/includes.h
+++ b/depthrush/includes.h
@@ -5,12 +5,32 @@
#include
#include
#include
+#include
+#include
+
#include "kiero/kiero.h"
#include "kiero/minhook/include/MinHook.h"
#include "kiero/injector/injector.hpp"
+#include "kiero/injector/calling.hpp"
#include "d3d9.h"
#include "ini.h"
#include "drs.h"
typedef LRESULT(CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
-typedef uintptr_t PTR;
\ No newline at end of file
+typedef uintptr_t PTR;
+
+#define HOOK(addr, detour) MH_CreateHook((LPVOID)(addr), \
+ Hook_##detour, \
+ reinterpret_cast(&Orig_##detour))
+
+inline void safeJMP(injector::memory_pointer_tr at, injector::memory_pointer_raw dest, bool vp = true)
+{
+ MH_Initialize();
+ MH_CreateHook((void*)at.as_int(), (void*)dest.as_int(), nullptr);
+ MH_EnableHook((void*)at.as_int());
+}
+
+inline void safeUNJMP(injector::memory_pointer_tr pTarget) {
+ MH_DisableHook((void*)pTarget.as_int());
+ MH_RemoveHook((void*)pTarget.as_int());
+}
\ No newline at end of file
diff --git a/depthrush/kiero/injector/injector.hpp b/depthrush/kiero/injector/injector.hpp
index ce84314..6ab7ef0 100644
--- a/depthrush/kiero/injector/injector.hpp
+++ b/depthrush/kiero/injector/injector.hpp
@@ -656,6 +656,5 @@ inline memory_pointer_aslr aslr_ptr(T p)
-
} // namespace
diff --git a/depthrush/main.cpp b/depthrush/main.cpp
index 4a9260b..ad24e66 100644
--- a/depthrush/main.cpp
+++ b/depthrush/main.cpp
@@ -2,17 +2,6 @@
static uintptr_t imageBase;
-inline void safeJMP(injector::memory_pointer_tr at, injector::memory_pointer_raw dest, bool vp = true)
-{
- MH_Initialize();
- MH_CreateHook((void*)at.as_int(), (void*)dest.as_int(), nullptr);
- MH_EnableHook((void*)at.as_int());
-}
-
-inline void safeUNJMP(injector::memory_pointer_tr pTarget) {
- MH_DisableHook((void*)pTarget.as_int());
- MH_RemoveHook((void*)pTarget.as_int());
-}
static int returnTrue() {
return 1;
@@ -24,7 +13,6 @@ static int returnFalse() {
-
BOOL WINAPI DllMain(HMODULE hMod, DWORD dwReason, LPVOID lpReserved)
{
DisableThreadLibraryCalls(hMod);
diff --git a/depthrushConfig/calibration.cpp b/depthrushConfig/calibration.cpp
index 7caaa47..94fb7e3 100644
--- a/depthrushConfig/calibration.cpp
+++ b/depthrushConfig/calibration.cpp
@@ -71,13 +71,25 @@ int calibration() {
// Save values
mINI::INIFile file("depthrush.ini");
mINI::INIStructure ini;
+
+ // Read the existing contents of the file
+ if (file.read(ini)) {
+ std::cout << "Existing file loaded.\n";
+ }
+ else {
+ std::cout << "File does not exist or failed to load, creating new.\n";
+ }
+
+ // Update the structure with new values
ini["calibration"]["xGrad"] = std::to_string(xGrad);
ini["calibration"]["xOffset"] = std::to_string(xOffset);
ini["calibration"]["yGrad"] = std::to_string(yGrad);
ini["calibration"]["yOffset"] = std::to_string(yOffset);
ini["calibration"]["zGrad"] = std::to_string(zGrad);
ini["calibration"]["zOffset"] = std::to_string(zOffset);
- file.generate(ini);
+
+ // Write the updated structure back to the file
+ file.write(ini);
std::cout << "Save complete.\n";
std::cout << "Proceeding to Kinect Preview..\n";